1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID J. مالان: حسنا. 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 شار * ق ورؤية الفحص من ليالي و رؤية لأنها مؤشر، كيف 23 00:01:05,506 --> 00:01:07,971 أنها لم تؤثر على ما الممسوحة ضوئيا في؟ 24 00:01:07,971 --> 00:01:10,940 هي ليالي أو عنوان من ليالي؟ 25 00:01:10,940 --> 00:01:11,180 >> DAVID J. مالان: 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 نوع بيانات هذا المتغير هو * شار، وهو ما يعني انه سيكون ل 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 >> ولكن الفكرة هنا أن ق المسح الضوئي، الغرض في الحياة، ويرد عنوان ونظرا 36 00:01:36,680 --> 00:01:40,960 رمز تنسيق، مثل٪ ق، قراءة سلسلة في قطعة من 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 J. مالان: بالضبط. 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 نحن لا تزال تستخدم ق٪، وهو ما يعني محاولة لقراءة سلسلة من المستخدم. 64 00:02:52,200 --> 00:02:56,300 الذي يحدث أن تقرأ في، والتي، في هذه المرحلة، هو على نحو فعال 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 J. مالان: بالتأكيد. 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 ويقرأ حرف واحد في وقت واحد، جنبا إلى جنب، مع العلم يغرد-غيض التي 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 فارغة. 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 BOWDEN: إذن المشكلة 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 عقدة البنية *، وهذا حرفيا مطابقة للنجمة العقدة. 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 هذه البنية هو مجرد تضيف ما يصل كل شيء وهذا داخل البنية. 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 BOWDEN: إنه لن مضاعفة كل منهم. 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 BOWDEN: هكذا كان الخادم أبحث عن ما تريد. 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 BOWDEN: حتى 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 BOWDEN: الفرق بين هذا 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 J. مالان: انها قطعة التي قال أن أعطينا يا رفاق إعادة توجيه 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 BOWDEN: 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 BOWDEN: لذا نعم. 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 J. مالان: والآلية التي والتي عادة ما تكون هذه المشاكل 254 00:11:48,900 --> 00:11:53,100 تحل على الملقم عبر ما الأمر؟ 255 00:11:53,100 --> 00:11:57,700 التصريح، لو كان، في الواقع، أذونات إصدار على الملف أو الدليل. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN: ثم 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 ولكن إذا كان لبرامجك شيء الخطأ في ذلك، من الناحية النظرية، فإنه يمكن 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 أو أن هناك خطأ في بناء الجملة في برامجك. 272 00:12:44,320 --> 00:12:46,095 أو شيئا سيئا يحدث. 273 00:12:46,095 --> 00:12:48,320 >> DAVID J. مالان: نحن لم نرى سوف 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 اعتقد ان هذا كان جافا سكريبت، أليس كذلك؟ 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: نعم. 287 00:13:29,770 --> 00:13:31,180 >> الحضور: أراد أن الخطأ لا تزال تأتي؟ 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: إذن أنت لن قد حصلت هذا الخطأ لأن كل شيء 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 انها فقط عندما حاول المتصفح ل تفسير شفرة جافا سكريبت التي 296 00:13:49,330 --> 00:13:51,370 انها مثل، الانتظار، وهذا ليس جافا سكريبت خطأ صالحة. 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 J. مالان: هكذا المقبل ارتفع عدد 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 هذه الطريقة أنه يدرج في قائمة ن في وقت ثابت، وأكد أيضا، 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 ليست، في الواقع، لاغية، بحيث 346 00:16:16,550 --> 00:16:18,690 نحن لا تخلق بطريق الخطأ وسوف segfault هنا. 347 00:16:18,690 --> 00:16:22,840 وأي وقت كنت تستخدم malloc في الحياة، كنت وينبغي التحقق من وجود باطل، لئلا 348 00:16:22,840 --> 00:16:24,090 لديك علة خفية. 349 00:16:24,090 --> 00:16:28,460 >> ثم نحن تهيئة التي كتبها فارغة تعيين ن والسابقة والقادمة. 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 J. مالان: كلا. 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 فارغة على عقدة جديدة. 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 مؤشر السابقة لاغية نفسها. 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 J. مالان: بالضبط. 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 ن، السابقة، والقادمة. 392 00:18:42,070 --> 00:18:44,580 >> انا ذاهب الى وضع عدد 50 هنا، لأن هذا سيكون ن. 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 مؤشر ن ن يحصل. 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 بحيث يضع فارغة أخرى هناك. 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 >> الآن، انا ذاهب الى تهيئة ن أن تكون 34. 419 00:19:51,870 --> 00:19:53,040 وهذا سيكون ن. 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 أدناه في مثل هذه الطريقة أنه يزيل ن من القائمة في الزمن الخطي. 466 00:21:46,740 --> 00:21:48,740 بحيث يكون لديك أكثر من ذلك بقليل مساحة كبيرة للمناورة الآن. 467 00:21:48,740 --> 00:21:52,380 قد نفترض أن ن، إذا كان موجودا في القائمة، سيكون حاضرا 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، التي من شأنها أن تؤول فقط في بعض التفاصيل التافهة في وقت محدود. 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 هو حقل ن في عقدة أنا حاليا تبحث في مساو ل 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 قائمة ولقد وجدت ن، ولست بحاجة للقيام زوجين من الأشياء. 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 J. مالان: بالضبط، بالضبط. 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 BOWDEN: 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 وهاهنا. 613 00:29:11,290 --> 00:29:17,280 حتى يحدث المتصفح لدينا لبناء HTTP طلب أن انها بصدد ارسال 614 00:29:17,280 --> 00:29:22,220 من خلال بعض العمليات إلى الفيسبوك ل الفيسبوك للرد لنا مع 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 يحصل فعلا إلى الفيسبوك؟ 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 إلى عنوان IP الذي كنت فعلا تريد الاتصال. 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 >> لذلك فإنك إرسال طلب HTTP الخاص أكثر من هذا الجهاز. 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 حتى أستطيع أن تكون قيد التشغيل، على سبيل المثال، سكايب. 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 وتقول سكايب، أنا باستخدام المنفذ 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 من خادم الويب في الفيسبوك. 666 00:32:24,600 --> 00:32:26,820 >> DAVID J. مالان: وفي هذه الحالة، حتى على الرغم من أننا لا تتطلب أن الناس 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 BOWDEN: إذن 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 J. مالان: الصادرة رسائل البريد الإلكتروني، 25، موافق. 677 00:33:00,670 --> 00:33:03,760 >> ROB BOWDEN: أنا لا أعرف حتى معظم و- كل من أقل منها تميل إلى أن تكون 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 BOWDEN: لأن في عنوان 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 J. مالان: ولكن هذا مقطع سخيفة من - كان 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 BOWDEN: أي أسئلة حول هذا؟ 691 00:33:46,110 --> 00:33:51,710 واحد القادم، وذلك في تغيير كامل الموضوع، ولكن لدينا هذا مجموعة بي إتش بي ل 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 لذلك تذكر، بناء الجملة فورياش مجموعة كبند في الصفيف. 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 J. مالان: أيضا غرامة هنا سوف وقد كان لاستخدام المدرسة القديمة ل 711 00:35:02,380 --> 00:35:07,340 حلقة مع ط = $ 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 J. مالان: بالضبط. 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 BOWDEN: أي شيء آخر؟ 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID J. مالان: حسنا. 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 إيقاف جافا سكريبت، الذي من شأنه، وبالتالي، تعطيل أي شكل من أشكال 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 على الرغم من أن هناك وجود فعل مختلفة المكتبات، والمكتبات جافا سكريبت ل 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 J. مالان: [ضحك] 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 BOWDEN: وهذا من شأنه قد قبلت. 770 00:37:44,480 --> 00:37:44,810 >> DAVID J. مالان: ماذا؟ 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: أنا خلقت هذه المشكلة. 772 00:37:45,810 --> 00:37:46,735 التي من شأنها أن قد قبلت. 773 00:37:46,735 --> 00:37:47,220 >> DAVID J. مالان: نعم. 774 00:37:47,220 --> 00:37:47,830 >> الحضور: بارد. 775 00:37:47,830 --> 00:37:51,770 >> ROB BOWDEN: ولكن لم نقبل لأول واحد - 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 BOWDEN: نعم. 781 00:38:00,430 --> 00:38:03,000 كان ذلك جوابا مقبولا. 782 00:38:03,000 --> 00:38:06,300 >> DAVID J. مالان: أي شئ حيث شعرنا كان أكثر عرضة من غير المحتمل 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 J. مالان: بالضبط. 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 J. مالان: نعم. 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 ولكن في الواقع، إذا كنت تخزين قائمة مرتبطة من البنيات التي قد يكون لها 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 وشاهدنا في ذلك بشكل واضح مع زيادة في الوقت المناسب من خلال 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 بدلا من ملف CSV لتخزين البيانات. 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 كما كذلك من خلال التحدث إلى ياهو المالية. 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 وباستخدام قاعدة بيانات SQL هو أكثر من ذلك بقليل مقنعة. 850 00:40:56,740 --> 00:41:00,060 انها رأسا على عقب، لأن تحصل الأشياء مثل تحديد وإدراج وحذف. 851 00:41:00,060 --> 00:41:03,790 وتحصل، ويفترض، والفهارس التي الخلية وقواعد البيانات الأخرى، مثل 852 00:41:03,790 --> 00:41:07,510 أوراكل، وبناء لأنك في الذاكرة، والذي يعني حدد الخاص بك هو على الارجح لا 853 00:41:07,510 --> 00:41:09,000 ستكون أعلى إلى أسفل الخطية. 854 00:41:09,000 --> 00:41:11,300 انها تسير فعلا أن يكون شيئا مثل البحث الثنائي أو شيء 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 في حين أن ملف CSV، يمكنك خلق ذلك مع 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 الوقت مستمر، على الأقل إذا كنت تجزئة على كل من الفرد 871 00:41:46,380 --> 00:41:48,990 الحروف في كلمة واحدة، وكأنك قد يكون لpset5. 872 00:41:48,990 --> 00:41:52,720 قد يكون ذلك خمسة التجزئة، وستة تجزئات إذا كان هناك خمسة أو ستة 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 الوقت الواقع المستمر مقارب. 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 من تلك السلاسل التي بفعالية تؤول إلى شيء الخطية. 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 BOWDEN: إذن لسيناريو الصعود، فعلنا لا يقبل من تلقاء نفسها "أسرع". أنت 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 J. مالان: دوم دوم دوم دي. 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 BOWDEN: كان لي في الواقع أي فكرة. 911 00:43:50,400 --> 00:43:51,650 >> DAVID J. مالان: وهي مصنوعة الشعور في رأسي. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB BOWDEN: أنا أفعل هذا واحد. 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 حتى شعبة، شعبة، شعبة ثم النص الأطفال عقدة من تلك DIVS. 931 00:44:53,340 --> 00:44:55,900 هذا الى حد كبير ذلك لذلك الأسئلة. 932 00:44:55,900 --> 00:44:57,860 >> DAVID J. مالان: ومن الجدير بالذكر، على الرغم من أننا لا أسهب في الحديث عن هذه 933 00:44:57,860 --> 00:45:01,040 التفاصيل في الوقت الذي تنفق على جافا سكريبت، أن النظام يفعل، في 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 أن له هو، بشكل عام، فقط لمعلوماتك، ما يسمى وثيقة النظام، حيث 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 BOWDEN: أسئلة على ذلك؟ 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 J. مالان: بالتأكيد. 946 00:45:32,380 --> 00:45:33,810 >> ROB BOWDEN: 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 >> لذلك تذكر أن هنا الرئيسية تدعو فو. 963 00:46:34,910 --> 00:46:37,340 وحتى ذلك الحين المكالمات الرئيسي فو. 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 في مرحلة ما، والمكالمات الرئيسي فو. 970 00:46:53,250 --> 00:46:55,390 كذلك، وعلى الفور، والمكالمات الرئيسي فو. 971 00:46:55,390 --> 00:46:57,130 وهكذا فو يحصل إطار المكدس تلقاء نفسها. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> الآن، في مرحلة ما، فو يجري في العودة. 974 00:47:02,220 --> 00:47:06,810 وذهبت عوائد فو، ونحن بحاجة إلى معرفة في ما سطر من التعليمات البرمجية داخل نحن الرئيسية 975 00:47:06,810 --> 00:47:10,610 كانت من أجل أن تعرف أين علينا أن تستأنف في الرئيسية. 976 00:47:10,610 --> 00:47:13,100 يمكن أن نطلق فو من ككل حفنة من أماكن مختلفة. 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 عوائد فو. 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 وهذا هو خاتم كومة فو في. 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 ذلك مرة واحدة ونحن بالكتابة على عنوان المرسل، وهذا يعني أنه عندما فو 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 وبالتالي فإن السؤال التالي هو استكمال إعادة تطبيق من فو في مثل هذه الطريقة 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 انها نسخ سطر الأوامر الحجة في بعض صفيف في 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 J. مالان: ليس تماما روح السؤال ولكنها مقبولة فقا ل 1028 00:50:13,425 --> 00:50:15,580 المواصفات مع ذلك. 1029 00:50:15,580 --> 00:50:18,260 >> ROB BOWDEN: أسئلة على أي من ذلك؟ 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 J. مالان: هل تريد أن أقول هذا العنوان؟ 1036 00:50:34,580 --> 00:50:37,230 >> ROB BOWDEN: رقم 1037 00:50:37,230 --> 00:50:40,470 >> DAVID J. مالان: حتى في هذا واحد، وهذا كان إما الخبر السار أو أخبار سيئة. 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 ثم عد على ما يصل إلى i. 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 بمثابة كوخ 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 الفضاء بي." نوع من مزعج كأن شيئا آخر. 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 >> حتى تتمكن من إزالة. فب تماما أذكر من المحاضرة. 1078 00:52:30,100 --> 00:52:35,690 ويمكنك القيام به في الواقع. / فو لو كنت قد chmodded ذلك بجعله 1079 00:52:35,690 --> 00:52:36,500 قابل للتنفيذ. 1080 00:52:36,500 --> 00:52:39,630 لذلك التصريح و+ س فو قد فعلت ذلك. 1081 00:52:39,630 --> 00:52:41,460 وإذا كنت أيضا إضافة كوخ هنا. 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 >> حتى طريقة واحدة يمكنك القيام بذلك هو مع مسج، الذي يبدو قليلا 1105 00:53:53,460 --> 00:53:56,880 محير بناء جملة في البداية. 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 العنصر، بعض علامة HTML، وهذا هو أسفل هنا، كنت أفعل ذلك قريبا جدا، 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 هذا واحد هو أكثر من ذلك بقليل واضحة، وإذا كان نحويا ل 1123 00:54:47,110 --> 00:54:51,890 مختلفة بعض الشيء، حيث أقوله، والاستيلاء عنصر HTML الذي فريدة من نوعها 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 . تقديم الوسائل عندما يكون هذا النموذج مع يقدم هذا المعرف، وتنفيذ 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 J. مالان: بالضبط. 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 مقبول تماما عن طريق القيام بشيء يحصل القيمة كذبة فار 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 وهذا هو السبب في انها قليلا مملة لعدم استخدام مسج. 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 طرق مختلفة للقيام بذلك. مسج فقط يميل إلى أن يكون أكثر من ذلك بقليل مقتضبة و 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 يفعل ما في جافا سكريبت؟ 1167 00:56:48,130 --> 00:56:48,740 سلسلة. 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 J. مالان: 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 J. مالان: يحدث مرة واحدة فقط. 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 J. مالان: بالضبط. 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، نحن اعتراض 1200 00:58:06,870 --> 00:58:09,040 أن تقديم النموذج إذا جاز التعبير. 1201 00:58:09,040 --> 00:58:11,290 نحن ثم فعل شيء لدينا مع شفرة جافا سكريبت. 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 ف = القطط أو أيا كان فعلنا، على سبيل المثال، في الصف. 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 انها فعلت بحتة في شفرة جافا سكريبت. 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 J. مالان: حفظ من جانب العميل ذلك. 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 يصل المقبل كان لي يا ماي. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB BOWDEN: OK. 1221 00:59:00,430 --> 00:59:04,990 لذلك كان هذا السؤال الأول عموما الخام للناس. 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 لذلك كان الباحث ليس صحيحا اكتب عن العدد. 1227 00:59:24,430 --> 00:59:29,410 والسبب هو حساب 12 أرقام العدد، وكثافة العمليات ليست كبيرة بما فيه الكفاية ل 1228 00:59:29,410 --> 00:59:31,070 تخزين مجموع أرقام. 1229 00:59:31,070 --> 00:59:36,570 لذلك خيارا صحيحا كان يمكن أن يكون كبيرا الباحث إذا كنت يحدث لنعرف ذلك. 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 الباحث لا. 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 J. مالان: النقد. 1236 01:00:00,550 --> 01:00:01,060 >> ROB BOWDEN: النقد. 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 J. مالان: وأيضا، أيضا، على الرغم من ربما كان ذكي في أخرى 1244 01:00:30,230 --> 01:00:32,760 السياقات على التفكير، وربما هذا فرصة للحصول على كثافة العمليات. 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 يعني أنه يمكن أن يكون مجرد كثافة العمليات. 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 ولكن أذكر أن الباحث في الخلية، في مثل 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 BOWDEN: 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 مع ما يمكن الاستعلام SQL البنك خصم 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 J. مالان: هناك خطأ شائع هنا، على الرغم من أننا في بعض الأحيان غفر لها، 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 BOWDEN: تذكر أن الخلية هي لغة منفصلة من PHP. 1293 01:02:39,780 --> 01:02:42,410 نحن يحدث ليكون كتابة الخلية في PHP. 1294 01:02:42,410 --> 01:02:46,180 وPHP ثم يتم إرساله لأكثر من خادم MySQL. 1295 01:02:46,180 --> 01:02:51,120 لكنك لا تحتاج من أجل PHP التواصل مع خادم MySQL. 1296 01:02:51,120 --> 01:02:51,730 >> DAVID J. مالان: بالضبط. 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 BOWDEN: 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 ذلك مع ما يمكن الاستعلام SQL البنك استرداد أرقام الحسابات من ل 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 مع ما يمكن الاستعلام SQL البنك وثيقة، أي، حذف كل حساب أن 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 J. مالان: دليل قائمة الانتظار. 1333 01:04:11,200 --> 01:04:17,110 حتى في هذا واحد، ونحن منحكم إلى حد ما هيكل المألوفة التي اكتشفنا ل 1334 01:04:17,110 --> 01:04:20,450 بت في الصف جنبا إلى جنب مع من البنيات، الذي كان البيانات 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 ذلك ف، رسالة واحدة فقط. 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 ونحن نطلب منك إكمال تنفيذ إدراج بقائمة الانتظار أدناه في 1367 01:05:50,910 --> 01:05:55,250 مثل هذه الطريقة أن يضيف وظيفة ن ل نهاية ف ومن ثم إرجاع true. 1368 01:05:55,250 --> 01:05:58,690 ولكن إذا ف هو كامل أو السلبية، و يجب أن الدالة بدلا عودة كاذبة. 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 >> لذلك إدراج بقائمة الانتظار، اقترحنا في العينة حلول لتنفيذ على النحو التالي. 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 وغالبا ما ينطوي الحسابية وحدات و المشغل وزارة الدفاع، فإن الجانب في المئة، 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 علينا ان نتذكر أننا فقط وأضاف عدد صحيح إلى قائمة الانتظار. 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 كثافة العمليات في الجزء الأمامي من طابور. 1406 01:07:44,190 --> 01:07:46,410 لإزالة كثافة العمليات، يكفي لننسى ذلك. 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 وإذا ف فارغة، يجب علينا بدلا من ذلك العودة السلبية 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 >> الحضور: س يتم تخزين القيم الإيجابية. 1416 01:08:05,070 --> 01:08:10,950 منذ قمت بتخزين القيم الإيجابية فقط في ف، السلبي هو خطأ. 1417 01:08:10,950 --> 01:08:11,510 >> DAVID J. مالان: OK، صحيح. 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 J. مالان: بالضبط. 1427 01:08:36,630 --> 01:08:38,569 وهذا هو المكان الذي يحصل C تقييدا ​​جدا. 1428 01:08:38,569 --> 01:08:40,590 إذا كنت تريد أن تقول وأنت تسير للعودة إلى الباحث، وكنت قد حصلت على 1429 01:08:40,590 --> 01:08:41,279 للعودة إلى الباحث. 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 الآن، وفي الوقت نفسه، وجافا سكريبت و PHP و يمكن لبعض اللغات الأخرى، في الواقع، 1433 01:08:49,370 --> 01:08:51,310 هل يعود مختلفة أنواع القيم. 1434 01:08:51,310 --> 01:08:54,819 والتي يمكن أن تكون في الواقع مفيدة، حيث هل يمكن العودة رجات إيجابية، الأصفار، 1435 01:08:54,819 --> 01:08:59,439 رجات سلبية أو كاذبة أو فارغة حتى للدلالة على الخطأ. 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 BOWDEN: يمكنك العودة كاذبة. 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 J. مالان: هذا لماذا أنا لم أقل ذلك. 1446 01:09:32,399 --> 01:09:36,450 >> ROB BOWDEN: ولكن ذلك لم يكن صحيحا أنه لا يمكنك العودة كاذبة. 1447 01:09:36,450 --> 01:09:37,700 >> DAVID J. مالان: بالتأكيد. 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 أنا ذاهب لمجرد تذكر في كثافة العمليات. 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 ثم أشرع في العودة ن. 1477 01:10:48,950 --> 01:10:51,530 >> الآن، بالمعنى الدقيق للكلمة، لم أكن يجب أن تعلن ن. 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 لكنني شعرت أن هذا كان أكثر وضوحا للاستيلاء على الواقع كثافة، ووضعها 1483 01:11:01,850 --> 01:11:04,320 في ن، ومن ثم العودة التي من أجل الوضوح ولكن 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 BOWDEN: السؤال الأول حتى هي المشكلة شجرة ثنائية. 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 >> وحتى الآن، ونحن نريد أن نعلن ما البنية ستكون لل 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 لذلك لدينا قيمة نوع الباحث، وحتى بعض قيمة كثافة. 1522 01:13:05,830 --> 01:13:07,220 أنا لا أعرف ما أسميناه في الحل - 1523 01:13:07,220 --> 01:13:08,500 الباحث ن. 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 ذلك أن البنية عقدة لدينا. 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 BOWDEN: حتى طريقة واحدة لتقترب أي مشكلة العودية هو التفكير فقط 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 دعوات متكررة، ونحن نتظاهر تلك مجرد عمل. 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 J. مالان: هذا هو المكان الذي العودية يحصل جميلة حقا. 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 BOWDEN: في الأسئلة؟ 1589 01:16:50,530 --> 01:16:53,490 >> DAVID J. مالان: وأسفل قليلا ل الأرقام، لا أحد يعرف أين 1590 01:16:53,490 --> 01:16:55,190 هذه الأرقام تأتي من؟ 1591 01:16:55,190 --> 01:16:56,610 >> ROB BOWDEN: لدي أي فكرة حرفيا. 1592 01:16:56,610 --> 01:16:59,794 >> DAVID J. مالان: وهي تظهر طوال المسابقة. 1593 01:16:59,794 --> 01:17:01,150 >> الحضور: هل هم نفس الأرقام؟ 1594 01:17:01,150 --> 01:17:01,910 >> DAVID J. مالان: هذه الأرقام. 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 BOWDEN: أي أسئلة مشاركة عن أي شيء على هذه المسابقة؟ 1603 01:17:29,570 --> 01:17:32,608