[استعراض: مسابقة 1] [علي Nahm، Oreoluwa Barbarinsa، لوكاس فريتاس، روب بودين] [جامعة هارفارد] [هذا CS50.] [CS50.TV] [لوكاس فريتاس] مرحبا الجميع. هذا هو استعراض للمسابقة 1. تماما كما إخلاء، وهذا هو - أعني، نحن ذاهبون لمحاولة تغطية الكثير كمادة ممكن، ولكن هذا لا يعني أن ونحن في طريقنا لتغطية كل الأشياء التي يمكن أن تكون في مسابقة 1. لذا يجب التأكد من أن تأخذ أيضا نظرة على محاضرة، أقسام، كل ما يمكنك. مسابقة 1 ستكون يوم الأربعاء، يوم الأربعاء المقبل. لذا يجب التأكد من دراسة. انها سوف تكون، إلى حد كبير، على غرار المسابقة الأولى بخصوص شكله، لكنه ربما ستكون أصعب بكثير. على الأقل، في العام الماضي عندما أخذت 50، اعتقد انها كانت أصعب بكثير. حتى دراسة الكثير. انا ذاهب لتغطية هياكل البيانات وهوفمان الترميز. هذا شيء أن الكثير من الناس يعتقدون معقدة، ولكن انا ذاهب الى محاولة لجعله أسهل ما يمكن. في المقام الأول، ما نريد يا رفاق لمعرفة مسابقة 1 هو فهم الأوصاف المفاهيمي لكل من هياكل البيانات التي انا ذاهب الى تقديم. وهذا يعني أن ليس لديك إلى الواقع تنفيذ جدول تجزئة في مسابقة الخاصة بك 1. نحن لا نريد لك لتنفيذ جدول تجزئة كامل، وربما سنحاول لجعل لكم تنفيذ بعض الوظائف، العمليات الأكثر شيوعا، ولكن نحن لن تجعلك تنفيذ كل شيء. لذلك فمن المهم أن تفهم المفهوم الكامن وراء كل بنية بيانات وأيضا أن كنت قادرا على رمز في C، مجرد عمليات الأكثر شيوعا لديهم لكل بنية البيانات. وأيضا أن تكون قادرة على استعراض مؤشرات والبنيات، لأنها تظهر كثيرا في هذه الهياكل البيانات. أولا، القوائم المرتبطة. القوائم المرتبطة هي في الواقع مشابهة جدا لصفائف، ولكن الفرق بين قائمة مرتبطة وصفيف، في المقام الأول، هو أن قائمة مرتبطة لديها حجم مرنة للغاية، بينما في صفائف عليك أن تختار إما حجم كبير جدا للمجموعة، حتى تعرف أنك ذاهب لتكون قادرة على تخزين جميع البيانات الخاصة بك في هذا مجموعة، أو لديك لاستخدام malloc لللديهم طول مرنة من مجموعة. في القوائم المرتبطة فإنه من السهل جدا لمجرد الحصول على المزيد من العناصر، وضع المزيد من العناصر في القائمة المرتبطة أو إزالة العناصر. والواقع، إذا كنت لا تريد القائمة المرتبطة ليتم فرزها، يمكنك البحث وإزالة العناصر في وقت ثابت، لذلك يا (1) مرة، حتى أنها مريحة جدا. عليك فقط أن تكون حذرا أن نتذكر دائما أن malloc وخالية من العقد، فقط لأن إذا لم تقم بذلك، سيكون لديك تسرب الذاكرة. القوائم بحيث ترتبط - تعريف عقدة هو تماما مثل ما لدينا هناك. أضع ن الباحث، ولكن يمكنك تخزين أي البيانات التي تريدها. حتى إذا كنت ترغب في تخزين سلسلة، أنه بخير. إذا كنت ترغب في تخزين البنية، أنه بخير، مزدوج، كل ما تريد. أنا فقط وضعت ن الباحث عن الأمثلة هنا. وكان لديك مؤشر إلى العقدة المقبل. لذلك، في الأساس، قائمة مرتبطة لديه بعض البيانات، ومن ثم فإنه يشير إلى العقدة المقبل. إذا كان العنصر الأخير في القائمة المرتبطة، انه سيكون للإشارة إلى NULL. لذلك هذا هو مثال على قائمة مرتبطة. حسنا، لذلك الآن دعونا نرى ما يجب علينا القيام به إذا كنت ترغب في إدراج عنصر في قائمة مرتبطة. أولا، سوف تضاف وظيفة تكون من نوع الفراغ لأنني لا أريد أن يعود أي شيء. وانا ذاهب الى اتخاذ الباحث كوسيطة، لأنني أريد أن أعرف ما تريد إدراجه. فما هو أول شيء يجب أن أقوم به؟ كذلك، يجب أن malloc على newnode، لذلك هذا هو السطر الأول. أنا مجرد خلق عقدة جديدة لوضعها في قائمة مرتبطة. لذلك ماذا يمكنني أن أفعل؟ حسنا، نحن نعرف أن لدينا في تطبيقات القوائم المرتبطة في الصف، ونحن دائما وضع الرأس كمتغير العالمية. وذلك ما يمكننا القيام به هو تغيير الرأس. أنا يمكن أن تجعل هذه العقدة الجديد سيكون الرئيس الجديد، وانه سيكون للإشارة إلى رئيس السابق. كيف يمكننا أن نفعل ذلك؟ أول شيء يجب أن أقوم به هو تغيير 'ن' في عقدة جديدة إلى القيمة، التي تم تمريرها إلى الدالة. ثم newnode هي الخطوة التالية ستكون الرأس. رئيس سوف يتم newnode. حتى انها بسيطة جدا. لحذف عقدة، ونحن نستطيع ان نفعل ذلك مثل - طريقة واحدة يمكن أن نقوم به وهذا هو القول، حسنا، إذا أردت أن حذف، على سبيل المثال، 3، ما يمكن أن تفعله هو مجرد نقطة العقدة السابقة إلى العقدة المقبل من 3. لذلك أود أن يفعل شيئا من هذا القبيل. ولكن ما هي المشكلة مع ذلك؟ لدي تسرب الذاكرة، لذلك أنا لا يستطيعون الوصول إلى الرقم 3 بعد الآن. المشكلة مع ذلك هو انني لن تكون قادرة على تحرير تلك العقدة. انا ذاهب الى أن يكون تسرب للذاكرة و(غير مفهومة) سوف يكرهونني. وذلك بدلا من القيام بذلك، وأود أن من المحتمل أن يكون مؤشر مؤقتة. حتى أضع درجة الحرارة. هو ذاهب للإشارة إلى العقدة التي أريد حذفها. وبعد ذلك يمكن ان تتحرك العقد السابق للإشارة إلى العقدة المقبل من العقدة التي أريد حذفها. وأخيرا، لا أستطيع تحرير المؤشر. لا بد لي من تحرير المؤشر بأنني خلقت هناك حق؟ ليس لدي ل، فقط لأنه - والفرق هو التي تم إنشاؤها باستخدام هذه العقدة malloc، لذلك هو في كومة، في حين أعلن هذا واحد كما التبديل NULL في المكدس فقط. لذلك أنا لم يكن لديك لتحريره. حسنا >>. حتى الآن دعونا نتحدث عن مداخن. أكوام هي واضحة جدا. فعلنا أكوام وطوابير في الدرجة فقط باستخدام صفائف، ولكن يجب أن تكون على دراية - أن يكون مجرد علم يمكنك أيضا القيام مداخن في طوابير باستخدام القوائم المرتبطة أيضا. حتى إذا كان لديك صفيف، ما يمكن أن يكون كومة؟ A المكدس، الأولى، سوف يكون لديك حجم. لديك لتخزين ما هو حجم المكدس أن لديك الآن. وأيضا سيكون لديك مجموعة، في هذه الحالة من الأرقام، لكن إذا كنت تريد، يمكن أن يكون صفيف سلاسل، مجموعة من البنية، أي شيء تريد تخزين. حول كومة: الفرق بين كومة وقائمة مرتبطة هو أن في المكدس لديك حق الوصول إلى العنصر الأخير الذي تم وضعه في كومة فقط. انه دعا في الماضي، لأول مرة. تماما مثل لديك كومة من الصواني، إذا وضعت صينية على الجزء العلوي من المكدس، لديك لإزالة هذا الدرج الأول في الحصول على الأدراج الأخرى. انها نفس الشيء مع المداخن. حتى لو كنت تريد، على سبيل المثال، إضافة عنصر إلى كومة، ماذا علي أن أفعل؟ انه دعا دفعة، وانها جميلة واضحة. أول شيء عليك القيام به هو الاختيار إذا كان حجم المكدس ليس أكبر أو يساوي قدرة المكدس. لأنه إذا كنت بالفعل على قدرة كاملة، لا يمكنك إضافة أي شيء آخر. ثم إن لم يكن، لديك فقط لإضافة عنصر إلى المكدس. وأخيرا، زيادة حجم. حتى انها واضحة جدا. لذلك أنا فقط إضافة رقم 2. وإذا أريد لموسيقى البوب، وهو ما يعني أنني أريد أن إزالة العنصر الأخير الذي تمت إضافته وإرجاع قيمة العنصر، أول شيء لا بد لي من الاختيار هو أن المكدس ليست فارغة. لأنه إذا كان فارغا، وأنا لا يمكن أن يعود أي شيء. في هذه الحالة، وأنا عودته -1. خلاف ذلك، وأنا ذاهب إلى إنقاص حجم المواصفات، والعودة أرقام (s.size). لماذا أنا إنقاص حجم ثم العودة s.size؟ ذلك لأنه، في هذه الحالة، لديه المواصفات حجم 4، وأريد أن أعود العنصر الرابع، أليس كذلك؟ ولكن ما هو فهرس العنصر الرابع؟ ثلاثة. منذ أن كنت حجم - ستكون 3، ويمكنني أن مجرد العودة s.numbers (s.size) لأنه 3. حتى انها مجرد مؤشر. يضع الآن >>. طوابير هي الى حد كبير نفس الشيء. والفرق الوحيد هو أنه بدلا من وجود في الماضي، لأول مرة، عليك أولا في، أولا خارج. ربما لو كنت في انتظار أن تذهب إلى الحفل، أنت لن تكون سعيدة إذا كان لديك كومة بدلا من قائمة انتظار. سوف يكون آخر شخص أن يأتي يكون أول شخص لدخول الحفل. كنت ربما لن تكون سعيدة. في قائمة الانتظار، وأول شخص في الحصول على هو أيضا أول شخص للخروج. حتى في تعريف قائمة انتظار، إلى جانب وجود حجم في مجموعة، لديك أيضا أن يكون الرأس، وهو مؤشر لرئيس المكدس. وبالتالي فإن العنصر الأول في الوقت الحالي. إدراج بقائمة الانتظار هو نفس الشيء مثل دفعة للمداخن. لو كنت ساذجة جدا، وكنت أقول، حسنا، أنا يمكن أن يفعل نفس الشيء بالضبط كما فعلت لدفع. أنا لا يمكن أن تحقق فقط إذا لم تكن تتجاوز قدرة. إذا كان كذلك، أعود كاذبة، وإلا يمكنني تصدير فقط قيمة جديدة ومن ثم زيادة حجم. ولكن لماذا هذا الخطأ؟ دعونا نرى هذا المثال. أحاول إدراج بقائمة الانتظار حفنة من الاشياء، ثم انا ذاهب الى dequeue وإدراج بقائمة الانتظار. هناك الكثير من الأوامر، ولكن الأمر في غاية البساطة. انا ذاهب الى إدراج بقائمة الانتظار 5، وذلك إضافة 5 ثم 7، 1، 4، 6، ثم أريد أن dequeue شيء، وهو ما يعني أنني ذاهب لإزالة العنصر الأول. لذلك أنا ذاهب لإزالة عدد 3، أليس كذلك؟ العنصر الأول. بخير. الآن إذا حاولت إدراج بقائمة الانتظار شيء آخر، ما الذي سيحدث؟ وفقا لتنفيذ بلدي، كنت ذاهبا لوضع الرقم التالي في q.size المؤشر. في هذه الحالة، وحجم هو 8، وبالتالي فإن مؤشر 8 سيكون هنا في المركز الأخير. إذا حاولت إدراج بقائمة الانتظار 1 هنا، وأود أن تكون الكتابة الموقف الاخير إلى رقم 1، والتي هي خاطئة تماما. ما أريد القيام به هو التفاف حولها وانتقل إلى المركز الأول. ربما كنت فقط أن أقول، حسنا، أنا فقط يجب أن تحقق إذا يمكن أن أضع شيئا في الواقع هناك. إن لم يكن، وأنا أقول، أوه، القدرة الكاملة جديدة هو في الواقع قدرة - 1، وأنت لا تستطيع أن تضع عنصرا هناك. ولكن ما هي المشكلة؟ المشكلة هي أنه إذا أنا فقط dequeue الحق في كل شيء هنا ثم أحاول أن أضيف شيئا آخر، فإنها يمكن أن تقول فقط، حسنا، كنت بكامل طاقتها، والذي هو 0. ذلك هو ذهب قائمة الانتظار الخاصة بك. لديك للالتفاف حولها، وطريقة التفاف حول أن يا رفاق المستفادة في psets البصيرة وغيرها تستخدم وزارة الدفاع. يمكنك أن تجرب ذلك في المنزل أن نفهم لماذا كنت ستفعل q.size + q.head قدرة وزارة الدفاع، ولكن إذا تحقق هنا، يمكننا أن نرى أنه يعمل. حتى في المثال الأخير، كان q.size 8 وكان رئيس 1، لأنه كان هنا هذا الموقف من الصفيف. لذلك سوف يكون 8 + 1، 9. أن قدرة وزارة الدفاع 9 يكون 0. فإنه يذهب إلى مؤشر 0. سنكون في المكان المناسب. ثم حاول قائمة الانتظار في المنزل. بعض الأمور الهامة: محاولة لفهم الفرق بين كومة وقائمة انتظار. في المنزل، في محاولة للحصول على دراية تنفيذ إدراج بقائمة الانتظار، dequeue، ودفع والبوب. ونفهم أيضا عندما كنت استخدام كل منها. لذلك دعونا الاسترخاء لمدة 10 ثانية مع مجموعة من Pokemons. والآن دعونا نعود إلى هياكل البيانات. تجزئة الجداول. هناك الكثير من الناس كانوا خائفين من الجداول التجزئة. في مشكلة تعيين 6، المدقق الإملائي. الجداول التجزئة ومحاولات، والكثير من الناس يشعرون بالخوف منهم. كانوا يعتقدون أنهم من الصعب جدا أن نفهم. نعم؟ ضبط [روب بودين] المشكلة 5. ضبط 5 مشكلة، نعم. وذلك بفضل روب. نعم. كان ستة هوف ن 'النفخة، نعم. تعيين 5 والمشكلة المدقق الإملائي، وكان لديك لاستخدام إما جدول تجزئة أو المحاولة. هناك الكثير من الناس يعتقد أنها كانت عظمى من الصعب أن نفهم، ولكنها في الواقع بسيط جدا. ما هو جدول تجزئة، في الأساس؟ جدول التجزئة هو مجموعة من القوائم المرتبطة. والفرق الوحيد بين مجموعة وجدول تجزئة هو أن في جدول التجزئة لديك شيء يسمى دالة تجزئة. ما هي وظيفة تجزئة؟ أنا لا أعرف إذا يا رفاق يمكن قراءة هنا. هذا هو مثال على جدول تجزئة. لذلك يمكنك أن ترى أن لديك صفيف مع 31 عناصر. وما نقوم به في جدول تجزئة ولها وظيفة هاش التي يتم الانتقال إلى ترجمة مفتاح، كل الباحث إلى فهرس. إذا، على سبيل المثال، إذا كنت ترغب في اختيار لB. هاريسون، وأود أن وضع B. هاريسون في وظائف تجزئة بلدي، وظيفة تجزئة سيعود 24. إذا كنت لا تعرف أن أريد لتخزين B. هاريسون في 24. لذلك هذا هو الفرق بين مجرد وجود مجموعة وجود جدول التجزئة. في جدول التجزئة سيكون لديك دالة التي يتم ذاهب لاقول لكم حيث لتخزين البيانات التي تريد تخزينها. للدالة البعثرة، وتريد أن تبحث عن وظيفة تجزئة هذا هو القطعية وزعت بشكل جيد. كما ترون هنا، نرى أن الكثير من البيانات التي أردت أن المخزن كان في الواقع 19 بدلا من استخدام 31 و 30 و 29، والتي كانت كلها مجانية. لذلك كان ظيفة تجزئة التي استعملتها لم توزع بشكل جيد جدا. عندما نقول توزيعها جيدا، فهذا يعني أننا نريد أن يكون، تقريبا، على الأقل 1 أو 2 لكل من - مثل، وجود اختلاف في 1 أو 2 لكل من الأرقام القياسية في المصفوفات. كنت تريد أن يكون، تقريبا، نفس عدد العناصر في كل قائمة مرتبطة في الصفيف. وأنه من السهل للتحقق ما اذا كان صالح في جدول التجزئة، كما عرض الجداول التجزئة. ثم الأشجار. هذه هي شجرة. الأشجار في علوم الكمبيوتر رأسا على عقب لسبب ما. حتى هنا لديك جذر شجرة ثم الأوراق. يجب أن نعرف فقط التسميات للآباء والأمهات والأطفال. كل عقدة لديه أطفال، والتي هي العقد التي هي أقل من الأصل. لذلك، على سبيل المثال، 2 ستكون الوالد لمدة 3 وأخرى للطفل الحق هناك، بينما 3 ستكون الوالد لمدة 1 والأطفال الأخرى التي هي هناك. و1 سيكون الطفل 3 لوهلم جرا. لدينا شيء أكثر إثارة للاهتمام، ودعا شجرة البحث الثنائية، فيه جميع القيم على حق عقدة ستكون على الحق، والحق هنا - على الحق، ستكون أكبر من عنصر في الجذر. حتى إذا كان لدي عدد 5 هنا، جميع العناصر على الحق ستكون أكبر من 5، وعلى اليسار جميع العناصر ستكون أقل من 5. ما الفائدة من هذا؟ حسنا، إذا كنت تريد معرفة ما اذا كان الرقم 7 هو هنا، على سبيل المثال، اذهب فقط لأول 5 وانا ذاهب لرؤية، هو 7 أكبر أو أقل من 5؟ انها أكبر، لذلك وأنا أعلم أنه سيكون لديك لتكون على حق الشجرة. وذلك لدي أقل بكثير الاشياء للنظر في. تنفيذا لشجرة البحث الثنائية، وعقدة، وأنا ذاهب لمجرد أن يكون لديك البيانات، حتى ن الباحث؛ هل يمكن أن يكون أيضا سلسلة أو أي شيء تريد. عليك فقط أن تكون حذرا في تحديد ما هو أكبر، ما هو أقل من ذلك. حتى إذا كان لديك سلاسل، على سبيل المثال، هل يمكن أن تحدد أن جميع تلك الأشياء على اليمين ستكون لدينا طول أكبر، اليسار ستكون لدينا أطوال أقل، وبالتالي انها حقا متروك لكم. كيف يمكنني تنفيذ تجد لBST؟ أول شيء علينا القيام به هو معرفة ما اذا كان الجذر هو NULL. اذا كان NULL، فهذا يعني أن الشيء ليس هناك لأنك لا تملك حتى شجرة، أليس كذلك؟ لذلك أعود كاذبة. خلاف ذلك، وانا ذاهب للتحقق مما إذا كان العدد أكبر من القيمة في الجذر. انا ذاهب الى محاولة العثور على العنصر في الحق من الشجرة. ترى أن أنا باستخدام العودية هنا. ثم إذا كان أقل من ذلك، انا ذاهب لإلقاء نظرة على اليسار. وأخيرا، وإلا، إذا لم يكن أقل أو ليس أكبر، وهو ما يعني أنه من القيمة نفسها. لذلك أنا فقط العودة الحقيقية. يمكنك ان ترى هنا أن اعتدت إذا، إذا، إذا. وتذكر، في مسابقة 0، كان لدينا مشكلة أن كان إذا، إذا، إذا، وكان من المفترض أن تجد عدم الكفاءة، وكان عدم الكفاءة الذي استخدمته إذا. يجب عليك إذا استخدمت، الا اذا، الا اذا وآخر. لذلك، يجب أن استخدمها الا اذا والا اذا وآخر هنا؟ لا أحد - نعم؟ [طالب يتحدث، غير مسموع] هذا ممتاز. حتى انها قالت انها لا يهم، لمجرد أن عدم الكفاءة التي كانت لدينا قبل كان ذلك لأنه، ربما إذا كان راض بعض شرط، لذلك كنت قد أنجزت هذا العمل، ولكن بعد ذلك كانوا في طريقهم لتحقق كل من الشروط الأخرى. ولكن في هذه الحالة، فإنه عاد على الفور، لذلك لا يهم. لذلك لم يكن لديك لاستخدام آخر إذا. وأخيرا، دعونا نتحدث عن محاولات، التي هي المفضلة الجميع. المحاولة هي شجرة من المصفوفات. انها سريعة جدا للبحث عن القيم، لكنه يستخدم الكثير من الذاكرة. وانها عادة ما تكون لتصفية الكلمات، وذلك عند تريد أن تنفذ، على سبيل المثال، وأنا لا أعرف، مثل دليل الهاتف في هاتفك وكنت تريد أن تكون قادرا على كتابة B ولها أسماء الأشخاص الذين لديهم فقط B. فإنه من السهل جدا لتنفيذ ذلك باستخدام المحاولة، على سبيل المثال. كيف تعرف عقدة في محاولة؟ لديك لمجرد الحصول على منطقي أن يتم الانتقال إلى is_word. يمثل ذلك باستخدام كافة الأحرف قبل تلك العقدة، كنت قادرا على تشكيل كلمة واحدة، ومن ثم سيكون لديك مجموعة من المؤشرات إلى العقد. يمكنك أن ترى أن لدينا مجموعة من العقد الأصل، لذلك عقدة * مجموعة؟ نعم؟ لذلك دعونا نرى كيف ستعمل. لالتدقيق الإملائي، لدينا مجموعة من 27 عناصر، لأن لدينا جميع الرسائل بالإضافة إلى اقتباس أحادية. قبل هنا أنا ذاهب لمجرد استخدام 2 لأنني أريد أن أكون قادرا على الكتابة على اللوح. بخير. لذلك هذا هو مثال على المحاولة. إذا أنا فقط تعريف العقدة الأولى، سآخذ مجموعة من العناصر 2 التي هي 2 المؤشرات إلى NULL، لذلك أنا فقط وضعت 'أ' و 'ب'. وانا ذاهب الى لديها منطقي أن يقول is_word. انها سوف تكون كاذبة لأول واحد، للتو، قبل أن لم يكن لديك أي حرفا. حتى كلمة فارغة ليست كلمة. لذلك فمن كاذبة. إذا كنت ترغب في إضافة 'ا' لهذا القاموس، ماذا علي أن أفعل؟ كنت أود أن يكون فقط لmalloc عقدة جديدة ل'أ'، ثم قم بإضافة كلمتها إلى true. لذلك يمثل مجرد أن وجود 'ا' هو ذاهب ليكون صحيحا. معنى؟ ثم إذا كنت ترغب في إضافة 'با'، سآخذ لmalloc 1 ل 'ب'، ثم أنا ذاهب لإعداد منطقية إلى false، لأن 'ب' في حد ذاته ليست كلمة. ثم انا ذاهب الى malloc بعضها البعض ل'أ'، لذلك 'با'، ثم انا ذاهب الى اقامة انها كلمة إلى true. لأن 'با' هو كلمة واحدة. ثم إذا كنت ترغب في معرفة ما إذا كان 'ب' في هذا القاموس، يمكنني أن أذهب فقط لأول واحد، 'ب'. أذهب إلى أسفل، وأنا ننظر إلى كلمة واحدة، وتقول كاذبة. حتى انها ليست كلمة واحدة. إذا كنت تريد أن تحقق 'با'، أذهب إلى أول واحد، 'ب'، ثم انتقل إلى 'أ'، وأنا أرى صحيح، لذلك هو كلمة واحدة. معنى؟ هناك الكثير من الناس الحصول على الخلط من جانب محاولات. لا؟ وأخيرا >>، هوفمان الترميز. هوفمان الترميز مفيد جدا لحفظ الذاكرة وضغط الملفات النصية، فقط لأن الكثير من الأوقات كنت تستخدم 'أ' و 'ه'، على سبيل المثال، في المستندات الخاصة بك، ولكن أنا لا أعرف ما إذا كان استخدام يا رفاق 'ف' أو 'ض' قدر. وجود بايت فقط 1 لكل حرف واحد، كل واحد - 256 حرفا التي لدينا في جدول ASCII ليس الأمثل للغاية، فقط لأن هناك بعض الأحرف التي تستخدمها أكثر من ذلك بكثير، لذلك ربما يجب عليك استخدام ذاكرة أقل لأولئك. كيف يمكنني استخدام الترميز هوفمان؟ علينا أن نفعل شجرة هوفمان.  شجرة هوفمان لديه العقد التي لها الرمز الذي سيكون مثل، 'أ'، 'ب'، 'ج'، والرسالة، أيا كان لديك بريد إلكتروني، تردد هذا هو التردد الذي يظهر الكلمة في النص، التي تم خلق شجرة هوفمان ل، ثم عقدة ما يجري للإشارة إلى يسار شجرة هوفمان وعقدة أخرى التي يتم الانتقال للإشارة إلى الحق. لذلك تماما مثل شجرة. كيف يمكن بناء شجرة هوفمان؟ وأنت تسير في اختيار العقد 2 التي لديها أدنى الترددات. إذا كان لديك ربطة عنق وأنت تسير لاختيار العقد 2 التي لديها أدنى القيم ASCII كذلك. ثم كنت تريد الذهاب لإنشاء شجرة جديدة للخروج من هذه العقد 2 التي ستكون لدينا وتيرة مجتمعة في العقدة الأصل. ثم وأنت تسير لإزالة 2 الأطفال من الغابات واستبدالها مع الوالد. وأنت تسير أن أكرر أن حتى يكون لديك فقط 1 شجرة في الغابة. لذلك دعونا نرى كيف كنت ستفعل شجرة هوفمان لZAMYLA. يمكنك ان ترى هنا أن جميع الرسائل لديهم تردد 1 باستثناء "أ"، وهذا لديه تردد 2. لذلك أنا خلقت العقد لجميع الرسائل أضع في ترتيب قيمة ASCII والتردد. حتى لو كنت تريد إنشاء أول شجرة، فإنه سيكون مع 'L' و 'M'. لذلك فمن هنا. وتواتر الزوج يكون 2 لأنه 1 + 1، ثم 2 التالية مع أدنى الترددات هي 'Y' و 'Z'. ثم لدي كل منهم يجري - يكون ترددها 2. حتى تلك التي هي تلك التي لديها أقل قيمة ASCII لاحد المقبل؟ 'A' و 'L'. لذلك أنا خلق عقدة جديدة، وأخيرا، فإنه من 4 و 2، لذلك 2 ستكون على اليسار. وهذه هي شجرة هوفمان. ثم إذا أريد أن أكتب بعض النصوص، مثل في ثنائي لتحويل إلى نص، باستخدام شجرة هوفمان من السهل جدا. على سبيل المثال، إذا قلت أن تتحرك إلى اليسار هو 0 وتتحرك إلى اليمين هو 1، ما هو ذاهب لتمثيل؟ ذلك مثل 1، 1، الحق في ذلك، والحق، وبعد ذلك 0، اليسار بحيث يكون L، ثم 1، 0، 0. حتى 1، 0، حتى مجرد 1، 0، 'A'. ثم 0، 1، لذلك 'Z'. ثم 1، 0، 0 - لا. 0، ستكون 0 'Y'، لذلك كسلان. ذلك أن كل شيء بالنسبة لي، والذهاب روب لتولي المسؤولية. [روب بودين] لذا، الأسبوع 7 الاشياء. لدينا الكثير ليذهب أكثر سريع حقا. مشغلي المختصة بالبت، تجاوز سعة المخزن المؤقت، مكتبة CS50، ثم HTML، HTTP، CSS. كل ما في مثل 15 إلى 20 دقيقة. مشغلي المختصة بالبت. هناك 6 منهم التي تحتاج إلى معرفته. أحادي المعامل و، تمثل أو، اكس اور، وتحول اليسار، وتحول الحق، وليس. حق التحول وليس بالكاد رأيت في محاضرة على الإطلاق. سنذهب أكثر من ذلك بسرعة هنا، ولكن من الجيد أن نعرف أن هذه هي 6 موجودة. تذكر أن مشغلي المختصة بالبت مثل عند القيام 3 + 4. كنت لا تتعامل مع ثنائي من 3 و 4. مع مشغلي المختصة بالبت أنك تتعامل فعلا مع البتات الفردية للأرقام 3 و 4. لذا فإن أول واحد أننا سوف أقوله هو أحادي المعامل لا، وكل ما يفعله هو انعكاس كافة البتات. حتى هنا، إذا كنت تكتب هذا في C، فإنك لن اكتبها كما ~ 11011 أو أيا كان، وكنت أكتبه مثل ~ 4، ومن ثم فإنه الوجه تمثيل ثنائي 4. حتى هنا، ~ بعض رقم ثنائي 1101101 تسير على الوجه تماما كل من 1 إلى 0 والجميع 0 إلى 1 في. كما قلت هناك، والاستخدام المتكرر لهذا، وسنرى ذلك في بعض الشيء، كما لو أننا نريد أن نخرج مع بعض رقم حيث كل من البتات هي 1، باستثناء واحد منهم. ذلك انها عادة ما تكون أسهل للتعبير عن عدد حيث يتم تعيين مجرد أن بت واحد، ومن ثم اتخاذ ~ منه، لذلك تم تعيين كل شيء آخر عدا عن أن واحدا. وهذا ما نحن ذاهبون إلى استخدام أكثر قليلا. تمثل أو >>. هنا 2 الأرقام الثنائية، وهذه الأرقام 2 هي ممثلة جميلة، لأنها تمثل كل ما يمكن مزيج من البتات يمكن أن تحتاج للعمل على. هنا، عندما كنت OR لتنفيذها كل بت، ونحن ذاهبون لمجرد مقارنة لأسفل على التوالي. حتى على الجانب الأيسر لدينا 1 و 1. عندما كنت أحادي المعامل | تلك، ما أنا ذاهب للحصول على؟ واحد. ثم أحادي المعامل | 0 و 1 هو الذهاب الى تعطيني؟ واحد. أحادي المعامل 1 و 0 ستكون الشيء نفسه، واحد. أحادي المعامل 0 | 0 سوف تعطيني 0. وبالتالي فإن الحالة الوحيدة التي أحصل 0 هو في 0 | 0 القضية. ويمكن أن تفكر في أن مثل الأملاح منطقية. لذلك إذا كنت تفكر في 1 صحيح كما و0 كاذبة كما، والشيء نفسه ينطبق هنا. ذلك صحيح أو صحيح غير صحيح؛ صحيحة أو خاطئة هو الصحيح. خاطئة أو صحيحة صحيح؛ كاذبة أو خاطئة هو الشيء الوحيد الذي كاذبة فعلا. وهنا المثال الذي يجب أن تعرفه كمثال جيد جدا من عندما تستخدم مشغلي المختصة بالبت. إذا كنا هنا أو رأس المال "أ" مع Ox20، وسوف نبحث في هذه في الثانية، نحصل على شيء. وإذا كنا أو صغيرة 'أ' مع Ox20، نحصل على شيء. لذلك دعونا سحب ما يصل جدول ASCII. بخير. ونحن هنا نرى أن "أ" هو - هنا لدينا "أ" هي العشرية 65. ولكن سأذهب مع الست عشري، وهو Ox41. متأكد من أننا رأينا ذلك في الصف. أعتقد أننا رأينا ذلك في الطبقة أنه من السهل جدا لتحويل من ست عشري إلى ثنائي. حتى هنا، وإذا كنت تريد أن تضع 4 إلى ثنائي، أن مجرد ستكون 0100. هذا هو المكان 1، والمكان 2، والمكان 4، لذلك هذا هو 4. ثم أنا يمكن تقسيم 1 إلى ثنائي، والتي ستكون 0001. وحتى هذا سيكون تمثيل "أ" في ثنائي. مع الأخذ صغيرة 'أ'، كما تسير الان لتكون Ox61، حيث تقسيم هذه تصل إلى ثنائي، لذلك 6 - دعونا نفعل ذلك في الواقع - ليس هناك ممحاة؟ ممحاة. Ox61. حتى تقسيم 6 إلى ثنائي ستكون 0 + 4 + 2 + 0. وتقسيم 1 ستكون 0001. أبحث في الفرق بين هذه 2، ونحن نرى أن الفرق الوحيد بين صغيرة ورأس المال "أ" هذا هو بت واحد. ذلك يعود إلى هنا - حسنا. العودة إلى هنا، إذا نظرنا إلى ما هو بت Ox20، Ox20 تقسيم ذلك إلى ثنائي لها، هو 0010، 0000. Ox20، بت فقط أن يتم تعيين هذا البت هو أننا نشعر بالقلق مع، مع التبديل بين رأس المال والصغيرة 'أ'. إذا كنت أو "أ"، والذي هو هذا واحد، 'A'، إذا كنت أو "أ" مع Ox20، ما أنا ذاهب للحصول على؟ [طالب، غير مسموع] حرف صغير 'أ'، لأنه سيكون لهذا الوجه بت إلى 1. وإذا كنت أو 'أ' مع Ox20، ما أنا ذاهب للحصول على؟ أحرف صغيرة لذلك، لمجرد oring 'أ' مع Ox20، أنا ذاهب لمجرد أن هذا oring بت واحد إلى 1؛ انها بالفعل 1، لذلك لا يهم. حتى نحصل على 'أ' و ''. أحادي المعامل AND. مرة أخرى، لا يمكننا التفكير في هذا الأمر لدينا النظير المنطقي و. على الجانب الأيسر لدينا حقيقي وصحيح. انها تسير ليكون صحيحا، وبالنسبة لجميع الحالات، كاذبة وحقيقية أو صحيحة وكاذبة، أو كاذبة وزائفة، أيا من تلك الأشياء صحيحة. فما نحن في نهاية المطاف الحصول على 1000. وحتى الآن، وهنا، وهنا حيث كنت قد استخدمت المختصة بالبت مضمونة لا، حيث كان لدينا Ox20. لذلك هذا هو Ox20. الآن ما أريد القيام به، أحادي المعامل ~ من Ox20. التي يتم الانتقال إلى انعكاس كافة البتات. وذلك لدي 1101، 1111. وهكذا "أ" anded مع ~ Ox20 سوف تعطيني ما؟ بت فقط نحن فعلا بحاجة إلى التفكير في هذا واحد، منذ ذلك الحين، إذا تم تعيين كل من هذه القطع إلى 1، ثم ونحن في طريقنا للحصول على بالضبط ما 'A' كان، باستثناء، ربما، ما هو هذا الشيء. لأنه إذا كان 1، والآن انها ستكون تعيين إلى 0، لأن هذا هو ما، anded مع هذا ستكون 0. فما هو 'A' و ~ Ox20 سوف تعطيني؟ [الإجابة على الطلاب، وغير مسموع] وما هو 'ا' و- انها 'A'. وما هو 'ا' و ~ Ox20 سوف تعطيني؟ 'A.' لأن هذا هو حاليا 1. والقادمة مع هذا 0 سوف تجعل من 0، والآن ونحن في طريقنا للحصول على 'A'. كلاهما "أ"، وأخيرا وليس آخرا من هذا النوع، لدينا XOR. انها تشبه إلى حد كبير أو، إلا أنه يعني حصرا أو. هذا هو مثل ما هو رأيك في العادة على أنه أو في العالم الحقيقي. لذلك يمكنك القيام به إما 'س' أو 'ص'، ولكن ليس على حد سواء. هنا 1 ^ 1 ستكون 0. لأن صحيح، وهذا هو - أنها لا تعمل وكذلك مع منطقية الصواب والخطأ كما أحادي المعامل ووأو فعل، ولكن صحيح ^ الحقيقية هي كاذبة. لأننا نريد فقط أن العودة الحقيقية إذا كان واحد منهم فقط هو الصحيح. حتى 1 ^ 1 0. ماذا عن 0 ^ 1؟ هو 1. 1 ^ 0 1، 0 ^ 0 0. وذلك في ظل جميع الظروف، 0 أحادي المعامل شيئا 0 ستكون 0. 1 أحادي المعامل أو شيئا 0 0 1 أحادي المعامل، اذا كان | أو ^، فإنه سوف يكون 1، وإذا كان وأنه سوف يكون 0. والحالة الوحيدة المختصة بالبت فيها 1 1 1 ليس هو مع أو حصرية. هذا هو 0110. حتى هنا الآن، وذلك باستخدام XOR - لذلك نحن مرة أخرى في 20. 'A' ^ Ox20 هي هذه البتات 2 نحن مقارنة. لذلك 1 ^ 0 سوف تعطيني ما؟ A واحد. 'A' ^ Ox20 سوف تعطيني؟ أحرف صغيرة أ. 'أ' ^ Ox20 سوف تعطيني؟ رأس المال A. لأن ما يقوم به هذا، وهذا XORing مع Ox20 يتم التقليب بشكل فعال ما هذا الشيء هو. إذا كان هذا هو 0، وانه حان الوقت سوف تصبح 1. لأن هذا هو 1، 1 ^ 1 0. لذلك لدينا 'ا' أصبحت 'A'، ونحن 'A' أصبحت 'أ'. حتى XOR هو وسيلة مريحة حقا من مجرد التقليب القضية. كنت فقط أريد أن تكرار عبر سلسلة من الرسائل وتتناوب حالة كل حرف واحد، كنت للتو XOR كل شيء مع Ox20. ونحن الآن لم يقم التحول. تحول اليسار هو مجرد الذهاب الى، أساسا، دفع كل من الأرقام في، أو إلى اليسار، وإدراج 0 وراءها. حتى هنا لدينا 00001101. ونحن في طريقنا لدفع 3 0 في من الناحية اليمنى ونحصل على 01101000. من حيث nonbinary، ونحن نرى أن هذا هو حقا التعامل مع 13 3 تحول اليسار، مما يعطينا 104. تحول ذلك اليسرى، ونحن نرى هنا، خ ذ << هو في الأساس س * 2 ^ ذ. 13 * 2 ^ 3، 2 ^ 3 هو 8، 13 * 8 لذلك هو 104. إذا كنت مجرد التفكير الثنائي بشكل عام، كيف أن كل أرقام، إذا بدأنا من الحق، انها مكان 1، ثم 2 مكان، ثم مكان ال 4 ل. ذلك عن طريق دفع في 0 من الجهة اليمنى، نحن فقط دفع الأمور التي كانت في المكان ال 4 إلى 8 مكان، و والأشياء التي كانت في مكان 8 الى 16 في مكان. كل وردية يضاعف فقط من خلال 2. نعم؟ [طالب] ماذا يحدث إذا تحولت بنسبة 5؟ [بودين] إذا تحولت بنسبة 5 أنك ستخسر مجرد أرقام. حتما، انها نفس الشيء. مثل، الأعداد الصحيحة هي 32 بت فقط، حتى إذا قمت بإضافة 2 أعداد صحيحة كبيرة حقا، انها فقط لا تناسب في عدد صحيح. لذلك فمن نفس الشيء هنا. إذا كنت تحول بنسبة 5، نحن ستخسر مجرد أن واحد. وهذا النوع من ما أعنيه "تقريبا" حيث إذا كنت تحول بعيدا جدا، تفقد بت. تحول الحق ستكون عكس ذلك، أين نحن ذاهبون ليشق 0 قبالة نهاية، وأغراضنا، في ملء 0 من الجهة اليسرى. حتى تفعل هذا، ونحن عكس أساسا ما كان علينا القيام به بالفعل. ونحن نرى أن 0 ثلاثة على اليمين وتراجعت قبالة، ولقد دفعت كل وسيلة من 1101 إلى الحق. يفعل هذا 104 3، الذي هو، على نحو فعال، س / 2 ^ ذ. وحتى الآن، وهنا، انها فكرة مماثلة. لماذا هو فقط ما يقرب من س / 2 ^ ص، وليس في الواقع س / 2 ^ ذ؟ لأنه إذا كنت قد تحولت بنسبة 4، لكنت قد فقدت 1. أساسا، ما كنت أفكر، مجرد التفكير في تقسيم عدد صحيح بشكل عام. لذلك، مثل 5/2 هو 2. انها ليست 2.5. انها نفس الفكرة هنا. عندما نقسم بنسبة 2، نحن يمكن أن يفقد بت غريبة على طول الطريق. وحتى الآن - هذا كل شيء لأحادي المعامل. هذا كل ما تحتاج إلى معرفته. تذكر حالات الاستخدام رأينا في الصف، مثل قناع بت مفيد لمشغلي المختصة بالبت، أو يمكنك استخدامها لأقنعة بت. حروف وأحرف صغيرة، والتحويلات هو مثال تنميط جدا. حسنا، لذلك العازلة الهجمات تجاوز. يتذكر أحد ما هو الخطأ في هذه الوظيفة؟ إشعار أعلنا مجموعة من 12 بايت، 12 حرف، ثم نحن لدينا نسخ إلى المخزن المؤقت من 12 حرف شريط السلسلة بأكملها. فما هي المشكلة هنا؟ الرقم السحري 12 ينبغي البوب ​​الى حد كبير على الفور كما - لماذا 12؟ ماذا لو يحدث شريط أن تكون أكثر من 12 حرفا؟ ماذا لو الشريط الملايين من الأحرف؟ هنا كانت المشكلة memcpy. إذا شريط طويل بما فيه الكفاية، سيكون مجرد تماما - 'ج'، 'ج' لا يهمني أن كان 12 حرفا فقط؛ 'ج' لا يهمني أنه لا يمكن أن يصلح أن العديد من وحدات البايت. فإنه سيتم الكتابة فقط تماما شار، و12 بايت قمنا المخصصة لذلك، وكل شيء في الماضي فإنه في الذاكرة التي لا تنتمي في الواقع إلى أن المخزن المؤقت مع كل ما شريط السلسلة. لذلك كان هذا الصورة رأينا في الصف حيث لدينا لدينا كومة يكبرون. يجب عليك أن تستخدم لهذه الصور أو الحصول على دراية بها مرة أخرى. لدينا كومة دينا أشب عن الطوق، عناوين الذاكرة تبدأ عند 0 في أعلى وتنمو باستمرار لمثل 4 مليارات في الأسفل. لدينا مجموعة 'ج' في مكان ما في الذاكرة، ثم لدينا مؤشر جهدنا لمنع الحق تحته، ثم لدينا هذا الإطار في حفظ مؤشر عنوان عودتنا وكومة روتين حياتنا الأم. نتذكر ما هو عنوان المرسل؟ انها عندما تدعو الرئيسي وظيفة فو، يدعو بار ظيفة، حتما، بمنع العوائد. لذلك عندما يعود شريط، وهم بحاجة إلى معرفة أنه يجري مرة أخرى إلى فو الذي يطلق عليه. وبالتالي فإن عنوان المرسل هو عنوان الدالة التي لديها في العودة إلى عندما ترجع الدالة. السبب في أن من المهم بالنسبة الهجمات تجاوز سعة المخزن المؤقت لأنه، ملائم، قراصنة ترغب في تغيير ذلك عنوان المرسل. بدلا من الذهاب إلى فو، وانا ذاهب للذهاب إلى أي مكان هاكر يريد مني أن أعود إلى. و، ملائم، حيث يريد القراصنة كثيرا أن أعود إلى هي بداية المخزن المؤقت الذي كان لدينا أصلا. حتى إشعار، مرة أخرى، ليتل الهندي. الجهاز هو مثال على نظام الهندي ليتل، حتى يتم تخزين عدد صحيح أو مؤشر مع بايت عكسه. حتى هنا نرى - هو هذا؟ نعم. نرى Ox80، OxC0، Ox35، OxO8. تذكر أرقام ست عشرية؟ نحن لا عكس أرقام ست عشرية في ليتل الهندي، ل2 أرقام ست عشرية تشكل بايت واحد، ونحن عكس بايت. هذا هو السبب في أننا لا تخزين، مثل، 80530CO8. نقوم بتخزين، بدلا من ذلك، كل زوج من الأرقام 2، بدءا من الجهة اليمنى. هذا العنوان يشير إلى عنوان بداية من العازلة لدينا اننا نريد فعلا لنسخ في في المقام الأول. السبب في أن من المفيد لأنه، ما إذا كان المهاجم حدث، بدلا من وجود السلسلة التي كان مجرد سلسلة مؤذية من مثل اسم أو شيء ما، ماذا لو، بدلا من ذلك، كانت هذه السلسلة سوى بعض تعليمات برمجية عشوائية أن تفعل ما أرادوا أن تفعل؟ حتى يتمكنوا من - لا أستطيع أن أفكر في أي رمز بارد. يمكن أن يكون أي شيء، على الرغم من. أي رمز كارثية. إذا أرادوا، فإنها يمكن أن تفعل شيئا فقط في الاعطال ثوانى، ولكن هذا سيكون بلا جدوى. أنها عادة ما تفعل ذلك الإختراق النظام الخاص بك. حسنا >>. مكتبة CS50. هذا هو، في الأساس، getInt، getString، وجميع تلك الوظائف وفرنا لك. لذلك لدينا تشار * سلسلة، وهذا هو التجريد أننا فجر بعيدا في مرحلة ما خلال الفصل الدراسي. تذكر أن سلسلة هو مجرد مجموعة من الأحرف. حتى هنا نرى نسخة مختصرة من getString. يجب أن ننظر إلى الوراء في ذلك أن نتذكر كيف انها تنفذ في الواقع. التفاصيل الرئيسية هي، لاحظ نحصل في حرف واحد في وقت واحد من معيار في، والذي هو مثلنا كتابة على لوحة المفاتيح. حتى حرف واحد في وقت واحد، واذا حصلنا على عدد كبير جدا من الشخصيات، حتى إذا ن + 1 هو أكبر من القدرات، ثم نحن بحاجة إلى زيادة قدرة العازلة لدينا. حتى هنا نحن مضاعفة حجم المخزن لدينا. والتي تحافظ على الذهاب، ونحن إدراج الحرف في المخزن لدينا حتى نتلقى سطر جديد أو نهاية الملف أو أيا كان، في هذه الحالة، نحن القيام به مع سلسلة ثم getString الحقيقي ينكمش الذاكرة، مثل إذا كنا تخصيص الكثير من الذاكرة انها سوف تعود وتنكمش قليلا. لذلك نحن لا يمكن أن تظهر ذلك، ولكن الفكرة الرئيسية هي فقد لقراءة في حرف واحد في كل مرة. فإنه لا يمكن قراءة فقط في كل شيء في آن واحد، لأن عازلة بهم هو فقط من حجم معين. حتى إذا السلسلة التي تحاول إدراج في المخزن المؤقت كبير جدا، فإنه سيكون تجاوز. لذلك نحن هنا منع ذلك من خلال قراءة فقط في حرف واحد في وقت ومتنامية كلما كنا في حاجة إليها. حتى getInt وغيرها من المهام مكتبة CS50 تميل إلى استخدام getString في تطبيقات الخاصة بهم. ولذا فإنني أبرز الأمور الهامة هنا. ويدعو getString للحصول على السلسلة. إذا فشلت getString للعودة الذاكرة، تذكر أن getString mallocs شيء، لذلك كلما كنت استدعاء getString يجب أن لا (غير مفهومة) تحرير هذه السلسلة التي حصلت. حتى هنا، اذا لم malloc شيء، نعود INT_MAX كما أن مجرد العلم، مهلا، لم نكن فعلا قادرة على الحصول على عدد صحيح. يجب أن نتجاهل ما أعود لك، أو يجب أن لا يعتبر ذلك إدخال صالح. أخيرا، على افتراض أن لم تنجح، ونحن نستخدم sscanf مع هذا العلم خاصة، وهو ما يعني، تطابق أول عدد صحيح، ثم يطابق أي حرف بعد ذلك صحيحا. حتى إشعار نريد لها أن تساوي 1. عوائد sscanf فكيف العديد من المباريات إذا قدمت بنجاح؟ فإنه سيعود 1 إذا كان بنجاح يقابل عددا صحيحا، فإنه سيعود 0 اذا لم يطابق عدد صحيح، وأنه سيعود 2 إذا كان يقابل عددا صحيحا تليها بعض الحرف. حتى إشعار نحن إعادة المحاولة إذا كنا تتطابق مع أي شيء ولكن 1. حتى إذا دخلنا 1، 2، 3، C، أو 1، 2، 3، X، ثم 1، 2، 3 سوف تحصل المخزنة في عدد صحيح، سوف X الحصول على تخزين عند الحرف، sscanf سيعود 2، ونحن سوف إعادة المحاولة، لأننا نريد فقط عدد صحيح. تهب بسرعة من خلال HTML، HTTP، CSS. لغة توصيف النص التشعبي هو بنية ودلالات على شبكة الإنترنت. هنا هو مثال من المحاضرة حيث لدينا علامات HTML. لدينا به الرأس، العلامات الجسم، لدينا أمثلة من الأكواد فارغة حيث أننا في الواقع لم يكن لديك علامة بداية وثيقة، لدينا فقط الرابط والصورة. ليس هناك إغلاق صورة العلامة، وهناك مجرد علامة واحدة أن يحقق كل شيء العلامة يحتاج إلى القيام به. الرابط هو مثال؛ سنرى كيف تصل إلى CSS، السيناريو هو مثال على الكيفية التي تصل إلى تشغيل الجافا الخارجية. انها جميلة واضحة، وتذكر، HTML ليست لغة برمجة. هنا، نتذكر كيف سيكون تحديد نموذج أو على الأقل هذا ما ستفعل؟ مثل هذا النموذج لديه عمل والأسلوب. الأساليب التي سوف نرى أي وقت مضى فقط هي GET و POST. حتى تحصل هي النسخة حيث يحصل على وضع الشيء في URL. المنصب هو حيث لا يتم وضعه في URL. بدلا من ذلك، يتم إدراج أية بيانات من النموذج أكثر خفية في طلب HTTP. حتى هنا، والعمل يعرف أين يذهب طلب HTTP. حيث انه سيكون هو google.com / البحث. الأسلوب. تذكر الاختلافات بين GET و POST، و، أقول على سبيل المثال، إذا كنت تريد أن المرجعية شيء. وأنك لن تكون قادرة على المرجعية عنوان URL وظيفة لأنه لم يتم تضمين البيانات في URL. HTTP، الآن، هو بروتوكول نقل النص التشعبي. بروتوكول نقل النص التشعبي، وكنت أتوقع أن نقل لغة توصيف النص التشعبي، ويفعل. لكنه ينقل أيضا أي صور تجد على شبكة الإنترنت، أي إجراء التنزيلات تبدأ في طلب HTTP. حتى HTTP هو مجرد لغة الشبكة العالمية. وهنا تحتاج إلى التعرف على هذا النوع من طلب HTTP. هنا HTTP/1.1 على الجانب يقول فقط هذا الإصدار من أنا باستخدام بروتوكول. انها تسير الى حد كبير دائما أن يكون HTTP/1.1، كما سترى ذلك. ثم نرى أن هذا كان GET، البديل كونها وظيفة، التي قد تراها. وURL الذي كنت أحاول أن زيارة كان www.google.com/search؟q = بلاه، بلاه، بلاه. حتى أن نتذكر أن هذا، علامة الاستفهام ف = بلاه بلاه بلاه، هو نوع من الاشياء التي يتم إرسالها عن طريق نموذج. ان الاستجابة قد يعود لي ننظر بشيء من هذا القبيل. مرة أخرى، بدءا من البروتوكول، والتي سوف يكون ذلك، يليه رمز الحالة. هنا انها 200 OK. وأخيرا، وسيعقب صفحة الويب التي سألت عن الواقع. رمز الحالة المحتملة التي قد ترى، ويجب أن نعرف العديد منهم. 200 OK ربما كنت قد رأيت من قبل. 403 المحرمة، 404 لم يتم العثور على، خطأ خادم داخلي 500 عادة إذا ذهبت إلى موقع على شبكة الانترنت وشيء من كسر أو تعطل كود PHP، و في حين أنه في الأجهزة لدينا هذا المربع البرتقالي الكبير أن تأتي وتقول، مثل، هناك شيئا خطأ، لا يعمل هذا الرمز أو هذه الوظيفة السيئة. عادة المواقع لا أريد منك معرفة ما هي وظائف سيئة في الواقع، وذلك بدلا أنها سوف أعطيكم 500 أخطاء خادم داخلي. TCP / IP هو 1 طبقة تحت HTTP. تذكر أن هناك الإنترنت خارج الشبكة العالمية. مثل إذا كنت تلعب لعبة على الانترنت التي لا تمر عبر HTTP، انها تمر مختلفة - انها لا تزال تستخدم شبكة الإنترنت، ولكن لا يستخدم HTTP. HTTP هو مجرد مثال واحد من بروتوكول مبنية على TCP / IP. IP تعني حرفيا بروتوكول الإنترنت. يحتوي كل كمبيوتر عنوان IP، بل هي تلك الأشياء المكون من 4 أرقام مثل 192.168.2.1، أو أيا كان، وهذا يميل إلى أن يكون واحدا المحلية. ولكن هذا هو نمط من عنوان IP. وبالتالي فإن DNS، خدمة اسم المجال، هذا ما يترجم أشياء مثل google.com إلى عنوان IP الفعلي. حتى إذا قمت بكتابة عنوان IP في URL، التي من شأنها أن تجلب لك إلى Google، ولكن كنت لا تميل إلى تذكر هذه الأشياء. كنت تميل إلى تذكر google.com بدلا من ذلك. آخر شيء لدينا هو والموانئ، حيث هذا هو الجزء TCP الملكية الفكرية. TCP لا أكثر. تفكير، مثل، لديك متصفح الويب الخاص بك قيد التشغيل. ربما لديك بعض تطبيق البريد الإلكتروني على التوالي؛ ربما لديك بعض البرامج الأخرى التي تستخدم تشغيل الإنترنت. أنهم جميعا يحتاجون إلى الوصول إلى شبكة الإنترنت، ولكن جهاز الكمبيوتر الخاص بك ليس لديها سوى 1 بطاقة واي فاي أو أيا كان. حتى الموانئ هي الطريقة التي نحن قادرون على تقسيم كيف قادرون على استخدام الإنترنت في هذه التطبيقات. كل تطبيق يحصل 1 منفذ معين أنه يمكن الاستماع على، وافتراضيا، يستخدم HTTP المنفذ 80. بعض خدمات البريد الإلكتروني استخدام 25. تلك المنخفضة تميل إلى أن تكون مرقمة محفوظة. كنت عادة ما تكون قادرة على الحصول على تلك مرقمة أعلى لنفسك. المغلق، أوراق الأنماط المتتالية. صفحات الويب أننا الاسلوب مع CSS، وليس مع HTML. هناك 3 أماكن يمكنك وضع CSS الخاص بك. يمكن أن تكون مضمنة بين العلامات أسلوب، أو في ملف منفصل تماما ثم ربط فيه. وهنا هو مجرد مثال من CSS. يجب عليك التعرف على هذا النمط، حيث المثال الأول هو أننا مطابقة العلامة الجسم، وهنا نحن تتمحور العلامة الجسم. المثال الثاني، ونحن مطابقة الشيء مع تذييل معرف، ونحن تطبيق بعض الأساليب لذلك. لاحظ أن الرقم تذييل النص محاذاة إلى اليسار، في حين أن مركز هيئة محاذاة النص. تذييل داخل الجسم. فإنه، بدلا من ذلك، مواءمة النصوص اليسار، على الرغم من الجسم يقول مركز مواءمة النصوص. هذا هو المتتالية كل جزء من ذلك. هل يمكن أن يكون - يمكنك تحديد أنماط للجسم، ثم الأشياء في الجسم يمكنك تحديد أنماط أكثر تحديدا، وعمل الأشياء كما كنت تتوقع. محددات CSS أكثر تحديدا الأسبقية. أعتقد أن كل شيء. [علي Nahm] مرحبا الجميع. إذا كان بإمكاني مجرد الحصول على انتباهكم. أنا علي وانا ذاهب للذهاب من خلال PHP و SQL سريع حقا. حتى نتمكن من البدء. PHP هي اختصار ل PHP: التشعبي قبل المعالج. وكما كنت كل أن نعرف، انها لغة البرمجة النصية من جانب الخادم، ونستخدمها لنهاية الخلفي من المواقع، وكيف يفعل الكثير من العمليات الحسابية، وجزء من وراء الكواليس. بناء الجملة. انها ليست مثل C، مفاجأة، مفاجأة. كان لديه دائما أن تبدأ مع، إذا كنت يمكن أن نرى، و- لا أستطيع المضي قدما. يمكنك ان ترى كنت في حاجة إلى أنواع جديدة من الأقواس ثم تحتاج أيضا إلى فب؟ هذا هو دائما كيف يكون لديك لتأطير النص PHP الخاص بك، رمز PHP الخاصة بك. لذلك لا يمكن أن يكون تماما مثل C، حيث يمكنك نوع من وضعه أولا. تحتاج إلى تحيط دائما. والآن، بناء الجملة الرئيسية هي أن كل المتغيرات في حاجة لبدء بالحرف $. ما عليك القيام به عندما كنت تعريفها؛ تحتاج إلى القيام بذلك عندما كنت في اشارة الى لهم في وقت لاحق. كنت دائما بحاجة إلى أن $. انها جديدة أفضل صديق، الى حد كبير. كنت لا - على عكس C، لا تحتاج لوضع أي نوع من نوع متغير هو عليه. وذلك في حين كنت بحاجة ل$، لا تحتاج لوضع، مثل، الباحث العاشر أو سلسلة ذ، إلى آخره، إلى آخره. ذلك اختلاف طفيف. نتيجة لذلك، فهذا يعني أن PHP هو نوع ضعيفة. PHP هي لغة نوع ضعيفة، وأنها متغيرات كتبته ضعيفة. وبعبارة أخرى، وهذا يعني أنه يمكنك التبديل بين أنواع مختلفة من أنواع متغير. يمكنك تخزين الرقم 1 باعتبارها كثافة العمليات، يمكنك تخزينه كسلسلة، ويمكنك تخزين على أنها تطفو، وسوف يكون كل هذا العدد 1. حتى وإن كنت تخزينه في أشكال مختلفة، انها لا تزال - أنواع متغير ما زالوا يحتجزون في نهاية المطاف. حتى إذا نظرتم هنا، إذا كنت تتذكر من pset 7، الكثير منكم ربما كان القضايا مع هذا. علامتين على قدم المساواة، 3 علامات المساواة، 4 علامات متساوية. حسنا، ليست هناك 4 علامات المساواة، ولكن هناك 2 و 3. 2 استخدام علامات متساوية للتحقق من القيم. ويمكن ان تحقق عبر أنواع. حتى إذا كنت يمكن أن نرى في المثال الأول، لدي num_int == num_string. حتى كثافة الخاص بك والخاص على حد سواء سلسلة، من الناحية الفنية، 1، ولكنهم أنواع مختلفة. ولكن لالتساوي مزدوجة، وأنها سوف لا تزال تمر. ومع ذلك، من أجل التساوي الثلاثي، فإنه يتحقق قيمة فضلا عن أنواع مختلفة. وهذا يعني أنه لن يمر في هذه الحالة الثانية هنا، حيث كنت تستخدم 3 علامات المساواة بدلا من ذلك. لذلك هذا هو الفرق الرئيسي الذي يجب أن أظهرت جميع الآن. سلسلة سلسلة هو شيء قوي آخر يمكنك استخدامها في PHP. انها في الاساس مجرد هذه نقطة تدوين مفيد، وهذه هي الطريقة التي يمكنك ربط السلاسل معا. حتى إذا كان لديك القط والكلب لديك، وتريد وضع السلاسل 2 معا، يمكنك استخدام هذه الفترة، وهذا النوع من كيف يعمل. يمكنك أيضا مجرد مكان لهم بجانب بعضها البعض، كما ترون هنا في المثال السفلي، حيث كنت قد صدى سلسلة 1، سلسلة الفضاء 2. سوف نعرف PHP لتحل محلها على هذا النحو. المصفوفات. الآن، في PHP، وهناك 2 أنواع مختلفة من المصفوفات. هل يمكن أن يكون المصفوفات العادية، ويمكن أن يكون أيضا صفائف النقابي، ونحن في طريقنا للذهاب من خلالهم الآن. المصفوفات العادية هي فقط في هذا C، وحتى يكون لديك مؤشرات التي يتم ترقيم. الحق الآن نحن ذاهبون لمجرد إنشاء واحد ووضع - لذلك هذا هو كيف يمكننا إنشاء صفيف فارغ، ثم نحن في طريقنا لل وضعه في مؤشر الرقم 0. نحن ذاهبون لوضع الرقم 6، وقيمة 6. يمكنك أن ترى ذلك في أسفل هنا. Where's - في مؤشر الرقم 1 ونحن في طريقنا لوضع قيمة رقم 4، وهكذا يمكنك أن ترى هناك 6، وهناك 4، وبعد ذلك نقوم بطباعة الأشياء، عندما نحاول وطباعة القيمة المخزنة في مؤشر الرقم 0، ثم سنرى قيمة 6 يجري طباعتها. بارد؟ ذلك أن المصفوفات العادية بالنسبة لك. طريقة أخرى يمكنك أيضا إضافة الأشياء العادية إلى صفائف الآن يمكنك فقط هو إلحاق لهم في نهاية المطاف. وهذا يعني أن ليس لديك لتحديد مؤشر معين. يمكنك أن ترى عدد، ثم في أقواس معقوفة ليس هناك مؤشر محدد. وسوف تعرف - سوف PHP تعرف لإضافتها فقط إلى نهاية القائمة، وبقعة خالية المقبل. حتى تتمكن من رؤية 1 هناك حق في ذلك 0 بقعة، 2 ذهبت هناك حق في المركز الأول. 3 يذهب - يضاف هناك أيضا. لذلك هذا النوع من المنطقي. كنت مجرد باستمرار بإضافة ذلك، وبعد ذلك عندما نقوم مرددا مؤشر رقم 1، فإنه سيتم طباعة قيمة 2. ثم لدينا المصفوفات التي هي صفائف النقابي. صفائف النقابي، بدلا من وجود مؤشرات رقمية، ما يفعلونه هو، لديهم مؤشرات التي كتبها السلسلة. يمكنك أن ترى، بدلا من - أنا تخلصت من كل تلك المؤشرات العدد، والآن حان key1، key2، key3، وانهم في علامات اقتباس مزدوجة، للدلالة على أنهم جميع السلاسل. ولذا فإننا يمكن أن يكون مثالا لهذا. المثال على ذلك هو أن لدينا فريق العمل، وهذا هو اسم الفهرس. نحن ذاهبون لوضع "علي" كاسم، في مؤشر والسعرات الحرارية تؤكل، يمكننا وضع الباحث هذه المرة بدلا من سلسلة، ثم في أمثال المؤشر، ويمكننا وضع مجموعة كاملة داخل منه. لذلك هذا هو نوع من - انها مفهوم مماثل لكيفية كانت لدينا مؤشرات مع الأرقام، ولكن الآن يمكننا تغيير مؤشرات حول أن يكون لهم كسلاسل بدلا من ذلك. يمكنك أيضا القيام بذلك، إلى جانب القيام فقط بشكل فردي، يمكنك أن تفعل كل شيء في قطعة واحدة. لذلك يمكنك أن ترى أن فريق العمل من أن مجموعة، ثم وضعنا لهم في كل واحدة عملاقة مربع مجموعة قوس. بحيث يمكن تسريع الامور. انها اكثر من خيار من الأسلوبية لا. لدينا أيضا الحلقات. في C لدينا الحلقات التي تعمل مثل هذا. كان لدينا مجموعة لدينا، وذهبنا من فهرس 0 إلى نهاية القائمة، ونحن طباعة كل شيء، أليس كذلك؟ إلا أن المشكلة، لصفائف النقابي، نحن لا نعرف بالضرورة تلك المؤشرات العددية لان لدينا الان مؤشرات السلسلة. الآن نحن نستخدم الحلقات فورياش، والتي، مرة أخرى، وكنت على أمل استخدامها في pset 7. سوف حلقات فورياش نعرف تماما كل جزء واحد من القائمة. وليس لديها أن نعرف بالضبط مؤشر العددية التي لديك. ولذلك عليك بناء الجملة فورياش، لذلك فمن فورياش، يمكنك وضع مجموعة. لذلك يطلق مجموعة بلدي pset، وبعد ذلك، كلمة باسم، ثم قمت بوضع هذا المتغير المؤقت المحلية التي كنت تنوي استخدام فقط عن الشيء المحدد الذي يجري لعقد محددة - حالة واحدة أو مقطع واحد من مجموعة. سوف Pset الأسطوانات الاستمرار على 1، ثم ربما سيكون عقد عدد 6، وبعد ذلك سيتم عقد عدد 2. ولكن ما يضمن أن تذهب من خلال كل قيمة واحدة وهذا في صفيف. الوظائف المفيدة التي يجب أن تعرف في PHP هي تتطلب، بحيث يتأكد أن كنت بما في ذلك بعض الملفات، صدى، الخروج، فارغة. أنا أوصي نظرتم pset 7 وإلقاء نظرة على تلك الوظائف. قد يكون لديك لمعرفة تلك، لذلك أود أن أعرف بالتأكيد ما، بالضبط، تلك يفعلون كل شيء. والآن ونحن في طريقنا للذهاب من خلال نطاق بسرعة حقا. في نطاق، PHP هو نوع من شيء غير تقليدي، على عكس C، ولذا فإننا ذاهبون لمجرد الذهاب من خلال ذلك بسرعة. لذلك دعونا نقول أن نبدأ في ذلك السهم الذي لدينا هناك. ونحن في طريقنا للبدء مع $ ط. وبالتالي فإن المتغير 'ط' ستكون 0، ونحن ذاهبون لمجرد الحفاظ على طباعته في هذا المربع بيضاء كبيرة هناك. ونحن في طريقنا للبدء مع I0، ومن ثم نحن في طريقنا لصدى ذلك. ولذلك لا يوجد ل0. ثم ونحن في طريقنا إلى زيادة من قبل للحلقة، وبعد ذلك ستكون قيمة 1. واحد هو أقل من 3، لذلك سيكون لتمرير من خلال ذلك للحلقة، ثم ونحن في طريقنا لرؤيتها المطبوعة مرة أخرى. ونحن في طريقنا إلى زيادة مرة أخرى إلى 2، و 2 هو أقل من 3، لذلك سوف تمرير للحلقة، وأنه سوف طباعة 2. ثم عليك ملاحظة أن 3 ليست أقل من 3، ولذا فإننا سوف الخروج من حلقة ل. حتى الآن لقد خرجت، ثم نحن في طريقنا للذهاب الى فقدان الوظيفة. بخير. ولذلك عليك أن نلاحظ أن هذا المتغير الذي قمنا بإنشائه، و'ط' متغير، لا بالقوالب محليا. وهذا يعني أنه ليس المحلية إلى حلقة، وهذا المتغير لا يزال بوسعنا الوصول وتغيير بعد ذلك، وأنه سوف يكون لا يزال فعالا. حتى إذا ذهبت إلى وظيفة الآن، سترى أننا أيضا استخدام 'ط' متغير، ونحن في طريقنا إلى زيادة 'ط' + +. وكنت أعتقد، في البداية، على أساس سي، أن هذا هو نسخة من 'ط' متغير. انه شيء مختلف تماما، وهو الصحيح. حتى عندما وطباعته، ونحن في طريقنا للطباعة 'ط' + +، والتي سوف تطبع إلى أن 4، ثم نحن في طريقنا لل- آسف. ثم ونحن في طريقنا لانهاء خارج تلك الوظيفة، ونحن في طريقنا لتكون حيث أن السهم الآن. وهذا يعني أن ذلك الحين، ومع ذلك، على الرغم من أن وظيفة تغيير قيمة 'ط'، فإنه لم يغير من وظيفة خارج، لأن وظيفة لديها نطاق منفصلة. وهذا يعني أننا عندما نردد 'ط'، فإنه لم يتغير في نطاق وظيفة، وحتى ذلك الحين ونحن في طريقنا لطباعة 3 مرة أخرى. أشياء مختلفة حول نطاق في PHP مما كانت عليه في C. الآن في PHP و HTML. يستخدم PHP لجعل صفحات الويب الديناميكية. انها نوع من يجعل الأمور مختلفة. لدينا تختلف عن HTML. مع HTML، ونحن دائما يكون مجرد نفس الشيء ثابت، مثل كيف أظهر روب، في حين PHP، يمكنك تغيير الأشياء على أساس من هو المستخدم. حتى لو كان لدي هذا، لقد "تم تسجيل دخولك ك -" ثم الاسم، ويمكنني تغيير الاسم. حتى الآن الاسم هو جوزيف، وأنه لديه "معلومات عني"، ولكن بعد ذلك يمكن أيضا تغيير اسم لتومي. والتي من شأنها أن تكون شيء مختلف. لذلك وبعد ذلك يمكننا أيضا تغيير أشياء مختلفة عنه، وسوف تظهر المحتويات المختلفة استنادا إلى الاسم. ذلك النوع من PHP يمكن تغيير ما يحدث في موقع الويب الخاص بك. نفسه هنا. ومع ذلك، لاحظ أن لديهم محتوى مختلف، حتى ولو كنت لا تزال من الناحية الفنية أن الوصول إلى صفحة ويب نفسه على السطح. توليد HTML. هناك 2 من الطرق المختلفة التي يمكنك القيام بذلك. ولذا فإننا سوف تذهب من خلال هذا الحق الآن. الطريق الأول هو، لديك - نعم، آسف. لذلك عليك فقط العادية للحلقة في PHP، ثم كنت أردد في PHP وكنت أردد من HTML. باستخدام ما أظهرت روب لكم HTML النصي ثم باستخدام الطباعة PHP لطباعة فقط من ذلك إلى صفحة ويب. الطريق البديل هو أن نفعل ذلك كما لو كنت فصل في PHP وHTML. لذلك يمكن أن يكون هناك خط PHP الذي يبدأ لحلقة، ثم هل يمكن أن يكون خط HTML في شيء منفصل، ثم كنت في نهاية الحلقة، مرة أخرى، مع PHP. حتى انها نوع من فصل بها. على الجانب الأيسر، يمكنك أن يكون لديك كل - انها مجرد 1 قطعة من PHP. على اليمين يمكنك أن ترى أن لديك خط من PHP، لديك خط HTML، وكان لديك خط PHP مرة أخرى. بحيث يفصل بها في ما يفعلونه. وعليك ملاحظة أن كلتا الحالتين، على أي منهما، أنها لا تزال تطبع الصورة، الصورة، الصورة، بحيث HTML لا تزال تطبع بنفس الطريقة. ثم عليك أن لا تزال ترى تظهر 3 صور حتى على موقع الويب الخاص بك. لذلك فمن 2 طرق مختلفة لفعل الشيء نفسه. الآن لدينا أشكال والطلبات. كما أظهرت روب لكم، هناك أشكال HTML، وسوف نقوم من خلال هذه مجرد نسيم. لديك عمل وكان لديك الأسلوب، والعمل الخاص بك نوع من يظهر لك أين أنت ذاهب لإرسالها، والأسلوب هو ما إذا كان انها ستكون GET أو POST. وطلب GET، كما قال روب، يعني أنك ذاهب لوضعها في شكل وسترى أنها URL، في حين طلب POST فلن ترى في URL. ذلك اختلاف طفيف. ومع ذلك، هناك شيء واحد وهذا شيء مماثل هو أن وظيفة وGET غير آمنة على حد سواء. لذلك قد تعتقد أن لمجرد أنك لا أرى ذلك في URL، وهذا يعني أن المنصب هو أكثر أمنا، ولكن لا يزال بإمكانك رؤية ذلك في ملفات تعريف الارتباط الخاصة بك في المعلومات التي كنت الإرسال. لذلك لا أعتقد أن ما يقرب من واحد أو الآخر. شيء آخر هو أن نلاحظ أن لديك أيضا المتغيرات القسم. يا رفاق استخدام هذا في pset 7 للحصول على معلومات هوية المستخدم الخاصة بك. ما حدث هو أنه يمكنك استخدام هذه مجموعة النقابي، و$ _SESSION، ثم كنت قادرا على الوصول إلى أشياء مختلفة وتخزين أشياء مختلفة عبر صفحات. آخر شيء هو أن لدينا SQL، لغة الاستعلام الهيكلية، وهذه هي لغة برمجة لإدارة قواعد البيانات. ماذا، بالضبط، هي قواعد البيانات؟ انهم مجموعات من الجداول، ويمكن أن يكون كل جدول أنواع مماثلة من الكائنات. لذلك كان لدينا جدول المستخدمين في pset التمويل الخاص. ولماذا هم مفيدة؟ لأنه وسيلة لتخزين المعلومات بشكل دائم. انها وسيلة لتتبع الأشياء وإدارة الأمور ورؤية الواقع على صفحات مختلفة وحفظ المسار. في حين إذا كنت مجرد تخزينه في تلك اللحظة الفورية واحد ومن ثم استخدامها في وقت لاحق، فلن تكون قادرا على الوصول إلى أي شيء قمت بحفظها. لدينا 4 الأشياء الرئيسية التي نستخدمها لأوامر SQL. لدينا اختيار، إدراج، حذف، والتحديث. تلك هي حقا مهمة بالنسبة لك أن تعرف الرجال لمسابقة الخاص بك. سنذهب بسرعة أكثر حدد الآن. في الأساس، وأنت اختيار الصفوف من قاعدة بيانات. حتى إذا كان لديك، والحق هنا - لدينا هذه الأشياء مختلفة 2، ونحن نريد لتحديد من الجدول الطبقات حيث رهيبة - حيث في العمود رهيبة القيمة هو 1. حتى تستطيع أن ترى هنا، لدينا هذه الأشياء 2 من اسم الفئة، CS50 وStat110، ونحن لدينا معرفات فئة وشعار. لذلك نحن نريد لتحديد كافة تلك المعلومات. ثم يمكنك ان ترى هنا أنه نوع من فتنتقي من هذا العمود رهيبة، حيث كل الأشياء هي 1، ومن ثم فإنه لديه معرف فئة، اسم الفئة وشعار أنه يمكن انتقاء. بالضبط كيف يمكنك أن تفعل هذا في التعليمات البرمجية؟ لديك لاستخدام PHP. ولهذا النوع من كيفية ارتباط PHP و SQL لبعضها البعض. الآن لدينا رمز لنا، ونحن ذاهبون الى استخدام وظيفة الاستعلام لدينا كما فعلنا في pset 7، ونحن في طريقنا لتشغيل الاستعلام SQL. ثم نحن في طريقنا لديك - لدينا دائما لمعرفة ما اذا كان الصف في الثلاثي متساوية إذا كاذبة. ذلك مرة أخرى، وتريد أن تحقق من نوع وقيمة، ثم إذا كان لا يعمل، ثم تريد أن تعتذر، كما جرت العادة، كما فعلنا في pset 7. خلاف ذلك، وتريد أن يتكرر خلال كل شيء مع تلك مفيد فورياش حلقات أننا فقط ذهبت أكثر. الآن أننا حلقات عبر ولقد جعلت من الماضي، دعونا نفترض أن لدينا الاستعلام مرت، والآن لدينا حلقة فورياش لدينا. والصف الأول كان لديه، وحتى هنا في صف واحد، والحق هنا؛ هو محاصر ذلك. انها تسير لطباعة جميع المعلومات وهذا ما حصلت عليه. حتى انها سوف تطبع فى القاع "أريد أن تعلم HTML؟" ثم انها سوف تذهب إلى الصف التالي، لأنها أنجزت أول للحلقة، وحتى ذلك الحين انها سوف تطبع السطر الثاني منه، والتي ستكون STAT110، البحث عن لحظات. آخر شيء واحد هو وجود ثغرات أمنية في SQL. وأنا أعلم تطرق ديفيد على هذا قليلا في المحاضرة. يمكنك أن تقرأ هذا في وقت لاحق. انه مضحك حقا. حقن SQL هو نوع من شيء صعب. دعونا نقول لكم ان مجرد عصا تلك المتغيرات الحق في الاستعلام الخاص بك، كما ترون في هذا السطر الأول. هكذا يبدو على ما يرام، أليس كذلك؟ كنت مجرد وضع في اسم المستخدم وكلمة السر للاستعلام SQL الخاص بك، وأنت تريد أن تشحن تشغيله والحصول على كل ما هو في جدول البيانات الخاص بك. التي يبدو بسيطا جدا. لذلك دعنا نقول شخص يضع في، للكلمة، وهذا النص أو الحق هنا - وينبغي أن يكون في الواقع في المربع الأحمر. لذلك دعونا نقول أنها وضعت ذلك في كلمة - وهذا ما يدخلون. حتى انهم يضعون أو "1" = 1. نوع من كلمة سخيفة لديهم. الآن دعونا فقط استبداله في، وسوف نلاحظ أن في هذا الاستعلام SQL الآن، فالتقييم يكون إلى صحيحا دائما، لأنك سوف نلاحظ أن يمكنك الاستعلام SQL حدد كل هذه المعلومات أو هل يمكن أن يكون فقط 1 = 1. بحيث يجري دائما لتقييم إلى true. التي لن تعمل حقا، لأن ذلك يعني أن القراصنة يمكن كسر في النظام الخاص بك. الحل لهذا هو أن لديك لاستخدام نظام شركة تنمية نفط عمان، وهو ما يعني أن لديك لاستخدام علامات الاستفهام، وهو ما يا رفاق المستخدمة في pset 7، أين أنت ذاهب إلى استخدام علامة استفهام في مكان حيث تريد وضع شيء، ثم وأنت تسير أن يكون فاصلة، ومن ثم سيكون لديك بعد ذلك، بعد سلسلة الخاص بك، المتغيرات المختلفة التي تريد استبدال علامة في سؤالك. لذلك عليك أن نلاحظ هنا أن الآن لدي هذه علامات استفهام حمراء. ثم أضع المتغيرات بعد سلاسل بلدي حتى وأنا أعرف أن تحل محلها في هذا النظام بعد ذلك. والتي تأكد من أن إذا كان شخص يفعل مثل هذا، ولديهم أو 1 = 1 الوضع، من شأنها أن تجعل بالتأكيد، في النهاية الخلفية، وتأكد من أنه لن يكسر الواقع الاستعلام SQL. حسنا، لذلك هذا الى حد كبير ذلك، زوبعة من PHP و SQL. حظا سعيدا لكم جميعا، والآن إلى ولاية أوريغون [Oreoluwatomiwa Babarinsa] حسنا الجميع. الوقت للذهاب على بعض جافا سكريبت وبعض الأشياء الأخرى بسرعة كبيرة لذلك نحن لا يحملون لكم هذه الليلة. جافا سكريبت. نعم. جافا سكريبت هو نوع من شيء بارد، يزعم. الأشياء كنت حقا بحاجة الى معرفته عن جافا سكريبت، انها نوع من مثل نهاية العميل ما التطبيق الويب الخاص بك سوف يتم القيام. هناك بعض الأشياء التي لا تريد أن تأخذ الرعاية من كل وقت على جانب الملقم. جميع التفاعلات قليلا، وتسليط الضوء شيء واحد، مما يجعل شيئا تختفي. كنت حقا لا تريد أن يكون لاجراء محادثات مع الخادم الخاص بك في كل وقت لذلك. وبعض من ذلك ليس من الممكن القيام به على جانب الملقم. هذا هو السبب في أننا بحاجة إلى شيء مثل جافا سكريبت. الأشياء باردة حول تفعيل جافا: يتم كتابتها بشكل حيوي و. ما يعنيه هذا هو أن البرنامج لا يحتاج إلى معرفة ماذا، بالضبط، هي المتغيرات عند الكتابة بها. انها سوف مجرد نوع من الرقم بها كما انها تعمل. الأشياء الأخرى التي هي باردة حول هذا الموضوع: انها لغة متعرج، وهو ما يعني بناء الجملة يشبه C و PHP. ليس لديك إلى إعادة صياغة تفعل الكثير عندما كنت تعلم جافا سكريبت. هنا لدينا قليلا من جافا سكريبت. الشيء المثير للاهتمام هنا هو أنه إذا نظرتم اليها، لدينا قليلا من جافا سكريبت هناك حق في العلامة الرأس. ما هو: هل هو في الأساس مجرد تضمين ملف جافا سكريبت. هذا هو أحد السبل التي يمكن أن تشمل جافا سكريبت في البرنامج. ثم قليلا الثاني هو في الواقع بعض مضمنة جافا سكريبت، مشابهة جدا لنمط مضمن مع CSS، وكنت مجرد كتابة بعض التعليمات البرمجية بشكل سريع جدا هناك. جافا سكريبت لديها صفائف. مجرد طريقة أخرى للحفاظ على بيانات حولها، ومفيدة للغاية. لطيفة جدا وسهلة في بناء الجملة. يمكنك استخدام الأقواس المربعة للوصول إلى كل شيء، وإبقاء كل شيء معا. لا شيء معقد جدا. الشيء باردة حول جافا سكريبت لغات البرمجة وبشكل عام هو أنك لا داعي للقلق حول أحجام صفيف. يمكنك فقط استخدام array.length والحفاظ على مسارها من ذلك، وأيضا مجموعة يمكن أن تنمو أو تتقلص كما كنت في حاجة إليها ل. لذلك أنت لا تحتاج حتى للقلق بشأن أي نوع من، أوه لا، ولست بحاجة لتخصيص المزيد من الأشياء، أو أي شيء من هذا القبيل. الشيء بارد هنا هو أن جافا سكريبت لديه شيء يسمى الكائنات. انها لغة وجوه المنحى، لذلك ما هو عليه، أساسا، على طريقة لتجميع البيانات معا، وتشبه إلى حد ما البنية، ولكن يمكنك الوصول إليه مثل البنية أو في جملة مجموعة النقابي. انها بسيطة جدا وما يمكنك القيام به مع هذه البيانات هو مجموعة معا إذا كان لديك مجموعة من البيانات التي ذات الصلة. لأنه كل الأشياء التي تحتاج لوصف سيارة، لا تحتاج أن يكون ذلك في حفنة من أماكن مختلفة. يمكنك فقط التمسك بها في 1 الكائن في جافا سكريبت. كما تعلمون، بالتكرار هي واحدة من تلك المهام شاقة. كنت فقط تفعل ذلك على مدى أكثر من مرة. كنت بحاجة الى التحدث الى كل كائن في السيارة، أو كنت في حاجة للذهاب من خلال كل عنصر في قائمة أو شيء من هذا القبيل. حتى جافا سكريبت لديه، على غرار PHP، بناء جملة فورياش. في هذه الحالة، انها لفي الحلقة. كنت تريد استخدام هذا فقط على الكائنات. هناك بعض المشاكل التي تحدث إذا كنت تستخدم هذا على المصفوفات. عموما هي واحدة من تلك الأشياء، على الرغم من يمكن أن يكون مفيدا للغاية، لأنك القضاء على الكثير من النفقات العامة لأنك لم يكن لديك لسحب ما يصل كل شيء في وجوه الخاص بك من نفسك. لم يكن لديك أن نتذكر كل الأسماء الرئيسية. كنت مجرد نوع من الحصول عليها مرة أخرى في هذا النحو. في هذا، مع ل، وتريد فقط أن نتذكر أن كنت الحصول على العودة كل المفاتيح، بطريقة مشابهة جدا لتجزئة الجدول. إذا كنت تتذكر من ذلك، عندما كنت وضعت في سلسلة يمكن أن تحصل على شيء من التي من شأنها أن يكون لها قيمة المرتبطة به. ما يمكنك القيام به مع هذا يمكن القول، كل الحق، أنا وضعت في سيارة، وأطلقت عليها اسم فيراري. بحيث يمكنك وضعها في سلسلة فيراري مرة أخرى في وقت لاحق، ويمكنك الحصول على هذا الخروج. ويمكنك أن تفعل ذلك في حلقة، مع لفي الحلقة. حتى مجرد المزيد عن الكائنات. الشيء الرئيسي من هذا عليك أن تتذكر هو أنه يمكنك استخدام بنية الكائن مثل جملة وقتما تشاء مع هؤلاء، إلا إذا كان ما يحدث لاستخدام كسلسلة ليس اسم متغير صالح. حتى اذا نظرتم الى أن هناك، لدينا مفتاح بمسافات. حسنا، إذا كنت لوضع object.key، والفضاء، مع، والفضاء، ومساحات، أن فقط لن يكون له معنى نحويا. لذلك أنت فقط تستطيع أن تفعل ذلك مع هذا النوع من جملة قوس. أيضا، وجافا سكريبت جدا النطاق الحكمة أن PHP. لديك 2 طرق معالجة النطاق. لا يمكن أن يكون فار أمام متغير، وهذا يعني فقط هذا هو العالمي. يمكنك أن ترى ذلك من أي مكان. حتى لو كنت لوضع هذا في بيان إذا، في أي مكان آخر في التعليمات البرمجية بعد هذه النقطة هل يمكن أن نرى هذا المتغير. شيء آخر، رغم ذلك، هو مع فار، انها محدودة إلى أي وظيفة كنت فيه. إذا كنت لا في وظيفة، حسنا، انها العالمي. ولكن إذا كنت في وظيفة انها مرئية فقط ضمن تلك الوظيفة. ليس لدي كمثال على ذلك، ولكن، نعم. انها واحدة من تلك الأشياء التي يمكنك إدارة ما المتغيرات التي تريد أن تكون عالمية، ما المتغيرات التي تريد أن تكون محلية، ولكنك تحتاج إلى توخي الحذر حول هذا الموضوع، لأنك لم يكن لديك نوع من السيطرة الحبوب غرامة تفعله في C، حيث إذا تم التصريح شيء في حلقة for، انها تنوي البقاء في ذلك للحلقة. الشيء نحن نهتم فعلا حول استخدام جافا سكريبت لتتلاعب صفحات الويب، أليس كذلك؟ أعني، لهذا السبب نقوم به هذا. للقيام بذلك، ونحن نستخدم ما يسمى DOM. نموذج كائن المستند. أساسا، ما يفعله هو أنه يأخذ كل ما تبذلونه من HTML ونماذج من ذلك في مجموعة من الكائنات التي يتم تداخل داخل بعضها البعض. عليك البدء بشيء مثل هذا. لديك، على حق لي، وحفنة من التعليمات البرمجية الى ان هناك نوع من - وكنت أعتقد أن سيكون من الصعب جدا التعامل معها، لأنك تريد ان تكون من خلال تحليل مجموعة من النص والحاجة إلى قطعة عدا الأشياء. وماذا لو لم يكن مهيأ بشكل صحيح؟ سوف تحدث أمور سيئة. حتى جافا سكريبت يعتني هذا بالنسبة لك، وتحصل على بنية بيانات لطيفة، مثل واحد على يساري، حيث لديك مجرد وثيقة، وداخل أن لديك ما يسمى HTML، وداخل أن لديك الرأس والجسم، وداخل هذا الرأس كان لديك عنوان، إلى آخره، إلى آخره، إلى آخره. هذا يبسط التلاعب صفحة ويب بحيث انها مجرد، أوه، أنا فقط أريد أن أتحدث إلى هذا الكائن. نوع من طريقة مشابهة جدا كنت أتحدث إلى كائن آخر قمت بها بنفسك. كما قلت، كل DOM هو في كائن المستند. إما انها مجرد مكان واحد ومن ثم يمكنك الذهاب داخلها للعثور على الأشياء، ويمكنك أن تفعل ذلك - وهذا هو النمط القديم للقيام بذلك، هناك، حيث يمكنك القيام document.getElementById، ثم الاسم، وكما يمكنك أن أقول ربما، وهذا يحصل غير عملي جدا بعد حين. لذلك ربما كنت لا تريد أن تفعل ذلك. هذا هو السبب لدينا والشيء التالي ونحن في طريقنا للحديث عن بعد هذا. الشيء الرئيسي هنا هو أن، كل الحق، لديك كل هذه العناصر، أليس كذلك؟ لذلك ربما يمكنني تغيير لون شيء عند تحميل الصفحة. ماذا في ذلك؟ ما إذا كان المستخدم بالنقر بلدي شيئا؟ أريد أن أفعل شيئا مثيرا للاهتمام عندما ينقرون شيء. هذا هو السبب لدينا الأحداث. يمكنك، في الأساس، والعثور على أي عنصر في DOM الخاص بك، ثم يقول، يا. عندما يقوم بتحميل هذا أو ينقر عليه، أو عندما الماوس فوقها، أن تفعل شيئا معها. وما لديك هو، لديك مهام التي تتعامل مع هذا بالنسبة لك. هذه الوظائف هي معالجات الأحداث. ما they're - انها مجرد طريقة أخرى للقول، هذه الوظيفة يتم تنفيذه فقط عندما يحدث هذا الحدث. لذلك يعالج الحدث الذي يحدث. هذا هو كيف سيكون وضع معالج الحدث. لدي بعض زر، وعند النقر فوقه، فإنه ينفجر. لذلك لا انقر فوق الزر. هذا هو أحد السبل لتقترب من ذلك، أليس كذلك؟ لديك علامة زر، وانقر على لديك السلسلة التي تقول، أوه، بالمناسبة، أنا أعمل هذا الشيء تنفجر بالنسبة لي. خلاف ذلك، انها مجرد مثل زر العادية التي أجريتها فقط. يمكنك أيضا القيام بذلك بطريقة أخرى، عن طريق الاستيلاء على العنصر DOM، لكننا سوف توفر بعد أن نتحدث عن مسج. مسج >>: وهي عبارة عن المكتبة التي هي عبر متصفح. يمكنك استخدامه في أي شيء الى حد كبير. وأنها تعطيك فقط الكثير من أدوات للعمل مع. لأن جافا سكريبت، في حين قوية، لا يملك جميع الأدوات التي تحتاجها من خارج منطقة الجزاء لمعالجة حقا التطبيق الويب التي قد ترغب في القيام به. لذلك يبسط الكثير من الأشياء، ويمنحك الكثير من الوظائف من خارج منطقة الجزاء التي عملتم عادة لكتابة نفسك، مرارا وتكرارا وتكرارا. وفقط يجعل الأمور في غاية البساطة. لديك أيضا محددات، والتي تمكنك من اتخاذ جميع تلك العناصر من DOM الخاصة بك أكثر من ذلك بكثير ببساطة، بدلا من الاضطرار لاستخدام هذه المكالمات وظيفة طويلة جدا. أكثر على هذه المنتخبات. لديك، حتى هناك لديك، دعنا نقول أريد الحصول على عنصر مع معرف "الصخرة". حسنا، في مسج، انها مجرد دولار ومن ثم سلسلة يحتوي على الجنيه، ثم "الصخور". انها بسيطة جدا وأسرع بكثير من الطريقة التقليدية جافا سكريبت لمعالجة هذه المشكلة. وكان لديك أشياء مماثلة لفئات وأنواع العنصر. مسج هو - واحدة من الميزات الرائعة هو أن تتمكن من نوع من ضغط أسفل استفساراتكم على DOM الخاص جدا وسريع جدا. الآن نعود إلى التعامل مع الحدث، وهذا هو كيف سيكون التعامل مع حدث واحد في مسج. فما نحن في طريقنا هنا نقوله، كل الحق. لدي العلامة النصي، أليس كذلك؟ وذلك لدي هذا مضمنة جافا سكريبت. ما نحن بصدد القيام به هو أننا ذاهبون إلى القول، كل الحق. عندما يكون المستند جاهزا، وهو ما يعني انه تم تحميل المستند، نحن في سبيلنا للذهاب إلى تلك الوظيفة، ونحن في طريقنا إلى القول، كل الحق، هذه الوظيفة يفعل في الواقع شيء آخر. انها في الأساس قائلا، كل الحق، يحصل لي عنصر مع معرف "myid". ومن ثم إعطاء هذا معالج وظيفة الذي ينفذ عند النقر فوقه. أساسا ما يفعله هو هذا، فإنه يقول، كل الحق. يتم تحميل الصفحة، لذلك أنا ذاهب لفي، والعثور على هذا العنصر، اعطائها معالج الحدث هذا، وأنه يضع أساسا حتى صفحتك بالنسبة لك. وهذه هي الطريقة التي ترغب في التفكير في التعامل مع الحدث. كنت ترغب فقط للتفكير، كل الحق، عندما يحدث شيء، ماذا أريد أن يحدث؟ كنت لا ترغب في التفكير، حسنا، ولست بحاجة للتأكد من المحادثات هذا الشيء لهذا الشيء، هذا الشيء بلاه بلاه بلاه، لأنك تريد فقط أن أتحدث شيء من حيث الأحداث. عندما يحدث هذا، وهذا يحدث. وعندما يحدث ذلك، يحدث ذلك. واذا كانت الامور تؤدي أمور أخرى، وهذا أمر عظيم. ولكنك لا تريد أن تجرب وتفعل كود معقدة أين أنت مما اثار أشياء متعددة في نفس الوقت، لأنك مجرد الذهاب لتمنح لنفسك صداعا. حسنا. الآن يمكن أن نحصل على صفحتنا على التعامل مع الأحداث، ولكن دعنا نقول المستخدم بالنقر فوق زر بلدي. ماذا لو كنت تريد إرسال هذا الطلب مرة أخرى إلى الخادم، ولكن لا أريد لإعادة تحميل الصفحة، لأن الحاجة إلى تحميل صفحة جديدة في كل مرة يحصل نوع من مملة، ولماذا أحتاجه لهدم رأس مرة أخرى، وتذييل الصفحة مرة أخرى، وجميع عناصر الصفحة مرة أخرى فقط لتحديث المعايدة أو الوقت؟ ولهذا السبب لدينا شيء من هذا القبيل اياكس. ما يمكننا القيام به هنا مع اياكس هو أننا نستطيع أن نقول، كل الحق، أريد أن إرسال بعض البيانات إلى الخادم، وأريد الحصول على رد حتى أتمكن من تحديث صفحتي، أو ربما مجرد القيام ببعض حساب حسابي التي لا تظهر بالضرورة أي شيء للمستخدم. ماذا تحتاج للقيام بذلك؟ حسنا، كنت في حاجة الى URL تحتاج إلى التحدث. الخادم الخاص بك لا يمكن مجرد الاستماع سحرية في أي مكان من. تحتاج إلى أن يكون مكان معين كنت ترسل هذه البيانات ل. وتحتاج أيضا بعض البيانات لإرسالها، أو ربما انها استعلام dataless. كنت ترغب فقط في بينغ مرة أخرى إلى الخادم ويقول: مهلا، أنا على قيد الحياة، أو شيء من هذا القبيل. ثم كنت تريد وظيفة الذي يعالج أساسا مع النجاح. دعونا نقول لكم نعود بعض المعلومات من الخادم الخاص بك، وكنت ترغب في تغيير عنوان المستخدم على الصفحة الخاصة بهم. لذلك كنت الحصول على المعلومات مرة أخرى، وكنت دفع ذلك إلى الشاشة. ما يحدث هو، عندما تكون الصفحة جاهزة، قمت بإنشاء على نقرة وظيفة لهذا الزر يسمى غريتر. ما هذا ثم يفعله هو، عندما يتم الضغط على هذا الزر، تتحدث إلى greetings.php، وجعل لكم طلب وظيفة، وأقول لكم، يا، يحصل لي شيء من الصفحة الخاصة بك. نحن لا حقا بحاجة لوصف ذلك، ولكن greetings.php، دعنا نقول فقط، يعيد "مرحبا العالم". حتى نعود هذا "مرحبا العالم"، وعلى نجاح هذه، على افتراض أي شيء يذهب على نحو خاطئ، ثم نحن فقط تذهب إلى هذا المكان المستهدف أننا المحدد، ونحن مجرد عصا الاستجابة في هناك. وهذا هو وسيلة بسيطة للغاية لإنشاء استعلام اياكس. بسرعة جدا، روب نوع من ذكر هذا بالفعل، أشياء يمكن أن تسوء، يمكن أن تحدث أمور سيئة، لذلك أردت أن تتعرف على هذه الرموز استجابة HTTP. ما هي هذه ليست سوى، مثل، 200، ذهب كل شيء بخير. شيء آخر، حدثت أمور سيئة. انها عموما الشيء الذي تريد أن تذكر. ولكن من الجميل أن تعرف كل من هذه. وأخيرا، بعد أن نكون قد ذهبت من خلال كل ذلك، نحن بحاجة إلى التحدث بسرعة كبيرة حول تصميم و ومن ثم يمكننا أن نسمح لكم جميعا الرحيل. التصميم. الأشياء التي تريد أن تتذكرها. اسأل نفسك هذه الأسئلة: من الذي سوف تستخدم هذا؟ ما سوف يتم استخدامه ل؟ ماذا المستخدمين بلدي يهتمون؟ ما لا يهتمون؟ أنت فقط لا تريد أن تجعل التطبيق وتركها تنمو فقط ويصبح هذا العملاق، وتستهلك كل شيء، أنه لا يمكنك حتى النهاية. كنت تريد أن يكون الأهداف المنفصلة والخطط والأشياء التي ترغب في معالجتها. جعله سهل. كل هذا يقول، في الأساس، تجعل من السهل بالنسبة للمستخدم لاستخدامه، لا تجعل من فقاعة عملاقة من النص مثل هذه الشريحة هو، في الواقع. أردت فقط أن يكون شيئا حيث أنه من السهل جدا لشخص ما ليذهب في وتفعل ما تريد القيام به. كنت لا تريد ان يكون لهم للتنقل 5 صفحات للحصول على وظيفة لديك رئيس من موقعك. إذا كان المشاركة في 5 صفحات قبل أن يتمكن حتى من بحث شيئا، لا يمكن لأحد استخدامه. وأخيرا، نموذج ورقة، مجموعة التركيز. يكون التصميم الجيد والممارسات الاختبار. فقط لأنك تعتقد أنه يعمل للكم، لا يعني أي شخص آخر يعتقد أنه يعمل. ولكن نعم، هذا كل شيء. [CS50.TV]