डेविड जे मालन: सब ठीक है. कभी पहले तक तो आपका स्वागत है एक प्रश्नोत्तरी के लिए CS50 शवपरीक्षा. हम उद्घाटन लगा इस परंपरा को इस वर्ष. और यह एक अवसर होगा के माध्यम से चलने के लिए प्रश्नोत्तरी के समाधान. और हम में तेजी लाने या आधारित धीमा करेंगे यहां उन के ब्याज पर. आप कर रहे हैं क्योंकि तो आप शायद यहाँ हो आप हो सकता है कि कैसे में रुचि रखते हैं या कुछ के जवाब दिए जाना चाहिए था इन समस्याओं के. तो क्यों न हम एक बार देख ले नहीं है पहले इस खंड में? तो तार हो रही है. यह आप तीन अलग अलग संस्करणों दिया था कि एक कार्यक्रम के अंत में, एक उपयोगकर्ता से एक स्ट्रिंग पाने का मतलब. था यह था कि चाहे या नहीं निर्धारित करने के लिए आप के लिए छोड़ दिया. और हम, प्रश्न 0 में पूछा संस्करण 1 है कि लगता है संकलित और मार डाला. क्यों कार्यक्रम segfault हो सकता है? पहली नज़र में, किसी भी सुझाव के रूप में करने के लिए क्यों? हाँ. दर्शक: तो मैं में यह देख याद को देखने का एक पिछले उदाहरण चार * एस एंड एस के स्कैन को देखकर और यह एक सूचक है, कैसे है क्योंकि देखकर आप में स्कैन क्या यह प्रभावित किया? यह है या है का पता है? डेविड जे मालन: ठीक है. अच्छा. तो अंत में, किसी भी समस्या के स्रोत संभवतः कम करने के लिए जा रहा है उस चर के लिए. और यह वास्तव में एक चर है. कि चर का डेटा प्रकार है चार *, जो यह जा रहा है इसका मतलब एक चरित्र का पता हो. और उसमें अंतर्दृष्टि निहित है. इसके बारे में पता होते जा रहा है अधिक आम तौर पर एक चरित्र या,, में प्रथम चरित्र का पता पात्रों के एक पूरे ब्लॉक. लेकिन पकड़ है कि स्कैन है, उद्देश्य में जीवन, एक पता दिया और दिया जाता है एक प्रारूप कोड,% की तरह, पढ़ने के लिए का हिस्सा में एक स्ट्रिंग उस पते पर स्मृति. लेकिन कोई बराबर चिह्न से पहले क्योंकि वहाँ पहला पर कि अर्धविराम कोड की पंक्ति है, हम वास्तव में नहीं है के साथ किसी भी स्मृति आवंटित malloc, यह नहीं था क्योंकि वास्तव में कुछ आकार की एक सरणी, सभी का आवंटन तुम क्या कर रहे उपयोगकर्ता के पढ़ रही है कुछ पूरा में कुंजीपटल इनपुट कचरा मूल्य, जो डिफ़ॉल्ट रूप से एस में है. तो आप बाधाओं segfault के लिए जा रहे हैं, तो उस पते सिर्फ इसलिए नहीं होता आप कर सकते हैं कि एक मूल्य होने के लिए, वास्तव में, के लिए लिखें. आवंटित करने के लिए नहीं तो बुरा वहाँ अपनी स्मृति. तो सवाल 1 में, हम से पूछा, 2 संस्करण है कि लगता है संकलित और मार डाला. क्यों इस कार्यक्रम segfault हो सकता है? तो यह एक कम छोटी गाड़ी है. और केवल एक ही वास्तव में नहीं है स्पष्ट तरीके से जहाँ आप कर सकते हैं यहाँ एक segfault ट्रिगर. और इस विषयगत है. हम स्मृति में सी का उपयोग कर रहे हैं किसी भी समय, क्या आप एक segfault उत्पन्न करने के लिए कर सकता है 2 संस्करण के साथ? दर्शक: आप में है कि इनपुट का उपयोग करते हैं 49 से अधिक लंबी है कि एक स्ट्रिंग अक्षर. डेविड जे मालन: बिल्कुल. आप कुछ निश्चित लंबाई देख किसी भी समय यह एक सरणी के लिए आता है, अपने रडार यह हो सकता है कि बंद जाना चाहिए समस्याग्रस्त आप की जाँच नहीं कर रहे हैं एक सरणी की सीमाओं. और कहा कि यहाँ समस्या है. हम अभी भी scanf का उपयोग कर रहे हैं. हम अब भी कोशिश का मतलब है, जो% s का प्रयोग कर रहे हैं उपयोगकर्ता से एक स्ट्रिंग को पढ़ने के लिए. यही है, जो, एस में पढ़ा जा रहा है इस बिंदु पर, प्रभावी रूप से है स्मृति का एक हिस्सा का पता या यह बराबर है. यह एक सरणी का नाम है स्मृति के पात्रों की. लेकिन क्या वास्तव में, कि आप एक स्ट्रिंग पढ़ें कि 49 वर्ण, 49 से अधिक लंबी है आप बैकस्लैश के लिए कमरे की जरूरत है क्योंकि 0, आप अतिप्रवाह के लिए जा रहे हैं कि बफर. और अगर तुम भाग्यशाली हो और करने में सक्षम हो सकता है एक 51 वीं चरित्र, 52 वें, 53 वें लिखें. लेकिन कुछ बिंदु पर, ओएस कहने जा रहा है, नहीं. यह निश्चित रूप से स्मृति नहीं है आप को छूने की अनुमति दी हो. और कार्यक्रम segfault जा रहा है. तो वहाँ, heuristics किसी भी होना चाहिए आप निश्चित लंबाई मिल गया है समय, आपके पास सुनिश्चित करें कि आप लंबाई जाँच कर रहे हैं बनाने के लिए यह आप की कोशिश कर रहे है जो कुछ भी की इस बारे में पढ़ने के लिए. दर्शक: तो यह है कि, तुम सकता है हल करने के लिए वास्तव में जाँच एक बयान पड़ा है लंबाई अधिक है से या कम से कम? डेविड जे मालन: बिल्कुल. तुम सिर्फ एक शर्त है कहते हैं, अगर है कि - या यों कहें कि आप जरूरी नहीं पता है अग्रिम में कितने वर्ण उपयोगकर्ता, टाइप करने के लिए जा रहा है क्योंकि आप चिकन और अंडे की है. आप scanf साथ उस में पढ़ा है नहीं, जब तक आप यह है कि कितनी देर तक समझ सकते हैं. लेकिन उस बिंदु पर, यह बहुत देर हो चुकी है आप पहले से ही इस बारे में पढ़ा है क्योंकि स्मृति के कुछ ब्लॉक. एक तरफ, CS50 पुस्तकालय बचा जाता है तो इस मुद्दे को पूरी तरह, याद fgetc का उपयोग करके. और यह एक समय में एक चरित्र पढ़ता टिप पर ही चल जानते हुए, साथ में आपको लगता है कि एक चरित्र अगर अतिप्रवाह नहीं कर सकते आप एक बार में एक ही पढ़ा. पकड़ getstring याद के साथ है हम लगातार फिर से आकार है कि स्मृति की है कि हिस्सा, जो बस एक दर्द है. यह की लाइनों की एक बहुत कुछ है ऐसा करने के लिए कोड. तो एक और दृष्टिकोण के लिए किया जाएगा वास्तव में एक चचेरे भाई का उपयोग, तो scanf की, बात करने के लिए. इनमें से एक बहुत की वेरिएंट हैं वास्तव में जाँच कार्य करता है कि की लंबाई कितने वर्ण आप ज़्यादा से ज़्यादा पढ़ा सकता है. और तुम पढ़ा नहीं है, निर्दिष्ट कर सकता है 50 से अधिक वर्ण. तो यह एक और दृष्टिकोण हो सकता है लेकिन बड़ा आदानों की कम मिलनसार. तो उस संस्करण लगता है, पूछता 2 सवाल 3 संकलित और मार डाला है. क्यों कि कार्यक्रम segfault हो सकता है? तो यह वास्तव में एक ही है , का जवाब भले ही यह एक छोटे से शौक़ीन लग रहा है. हम की तरह लगता है जो malloc का उपयोग कर रहे हैं हम अपने आप को और अधिक विकल्प दे रहे हैं. और फिर हम उस को मुक्त कर रहे हैं अंत में स्मृति. यह अभी भी स्मृति के सिर्फ 50 बाइट्स है. इसलिए हम अभी भी पढ़ने के लिए कोशिश कर सकते हैं 51, 52, 1000 बाइट्स में. इसके लिए segfault जा रहा है वास्तव में एक ही कारण. लेकिन एक और कारण भी है. इसके अलावा वापसी malloc सकता है और क्या स्मृति का एक हिस्सा का पता? यह शून्य लौट सकता है. और हम के लिए जाँच नहीं कर रहे हैं क्योंकि कि, हम कुछ कर रही हो सकता जो यह है कि एक और कारण है, के लिए बेवकूफ हम scanf कह रही हो सकता है, पढ़ने के लिए कीबोर्ड से उपयोगकर्ता इनपुट 0 स्थान में, उर्फ ​​अशक्त. और वह भी है, निश्चित रूप से होगा एक segfault ट्रिगर. तो प्रश्नोत्तरी के प्रयोजन के लिए, हम करेंगे एक के रूप में उन दोनों में से किसी को स्वीकार कर लिया वैध कारण. एक समान है. एक एक छोटे से अधिक सूक्ष्म है. अन्त में, इस कार्यक्रम के लिए सम्मान के साथ स्मृति का उपयोग करते हैं, कैसे संस्करण 2 करते हैं और संस्करण 3 अलग? तो क्या इसके लायक है के लिए, हमने देखा एक संभव का प्रतीत होता है अंतहीन आपूर्ति इस के जवाब. और लोगों के जवाब के बीच में, हम क्या थे के लिए उम्मीद कर रहा है, लेकिन हम अन्य स्वीकार किए जाते हैं चीजों में से कुछ का उल्लेख किया गया था 2 संस्करण उपयोग कर रहा है कि तथ्य तथाकथित ढेर. संस्करण 3 ढेर उपयोग कर रहा है. और कार्यात्मक, यह सच नहीं है एक फर्क है कि बहुत सारे बना. दिन के अंत में, हम अभी भी कर रहे हैं सिर्फ स्मृति के 50 बाइट्स हो रही है. लेकिन संभव है कि जवाब में से एक था हम देख रहे थे कि. आप अपने परीक्षाएँ मिलता लेकिन जैसा कि आप देखेंगे, वापस TFS से, हम किया था कि अन्य चर्चाओं को स्वीकार उनकी असमान स्मृति का उपयोग करता है के रूप में अच्छी तरह से. लेकिन ढेर और ढेर हो गया होता साथ जाने के लिए एक आसान जवाब. कोई सवाल? मैं आप रोब दे. आरओबी BOWDEN: तो समस्या 4. यह आप को भरने के लिए किया था, जहां से एक है सब से बाहर बाइट्स की संख्या में ये उपयोग विभिन्न प्रकार के. हम देखते हैं तो पहली बात. एक 32 बिट वास्तुकला मान, इस CS50 उपकरण की तरह. के बारे में बुनियादी बातों में से एक तो 32 बिट आर्किटेक्चर, हमें बताता है कि वास्तव में कितना बड़ा एक सूचक जा रहा है वास्तुकला में किया जाना है. तो तुरंत, हम जानते हैं कि किसी भी सूचक प्रकार 32 बिट या 4 बाइट्स है. तो इस तालिका को देख, एक नोड * एक सूचक प्रकार है. यही कारण है कि 4 बाइट्स होने जा रहा है. Struct node *, कि सचमुच है नोड स्टार के लिए समान. और इतना है कि 4 बाइट्स होने जा रहा है. स्ट्रिंग है, तो यह एक तरह नहीं लगती अभी तक सूचक, लेकिन typedef, एक स्ट्रिंग सिर्फ एक चार *, जो एक सूचक प्रकार है. इसलिए कि 4 बाइट्स होने जा रहा है. तो इन तीन सब 4 बाइट्स हैं. अब, नोड और छात्र हैं थोड़ा और अधिक जटिल. तो नोड और छात्र को देख, हम देखते हैं एक पूर्णांक और एक संकेत के रूप में नोड. और छात्र दो संकेत है इसके अंदर. तो कम से कम यहां हमारे मामले के लिए, रास्ता हम के आकार की गणना है कि अंत इस संरचना अभी सब कुछ को जोड़ रहा है उस संरचना के अंदर है. तो नोड के लिए, हम एक पूर्णांक है, जो 4 बाइट्स है. हम 4 बाइट्स है जो एक सूचक है. और इसलिए एक नोड जा रहा है 8 बाइट लेने के लिए. और इसी के छात्र के लिए, हम एक है 4 बाइट्स और एक और है कि सूचक 4 बाइट्स है कि सूचक. इसलिए कि अंत करने के लिए जा रहा है ऊपर 8 बाइट्स जा रहा है. तो नोड और छात्र 8 बाइट्स हैं. और इन तीन सब 4 बाइट्स हैं. उस पर सवाल? हां. दर्शक: यह एक 64 बिट किया गया है वास्तुकला, होगा कि उन सभी को दोगुना? आरओबी BOWDEN: यह नहीं होगा उन सभी को दोगुना. इसलिए 64 बिट वास्तुकला, यह, फिर से, परिवर्तन है कि बुनियादी बात यह है कि एक सूचक अब 64 बिट्स है. हाँ. तो एक सूचक 8 बाइट्स है. इसलिए इन 4 बाइट्स थे कि 8 बाइट्स होने जा रहे हैं. दो संकेत था जो एक छात्र,, खैर, अब यह हो रहा है 8 बाइट्स, 8 बाइट हो. यह 16 बाइट्स बनाने जा रहा है. लेकिन एक नोड अभी भी 4 बाइट्स है. तो इस सूचक जा रहा है 8 बाइट हो. इस 4 बाइट्स है. तो एक नोड ही जा रहा है 12 बाइट्स हो. कि एक पर कोई अन्य प्रश्न? तो अगले एक, ये हैं HTTP स्थिति कोड. और आप परिस्थितियों का वर्णन करने के लिए किया था जिसके तहत इन पराक्रम आप को लौटा दी. मैं कुछ छात्रों सुना है कि एक समस्या है वे बनाने की कोशिश की है कि है त्रुटियों को ग्राहक के अंत पर हो. हम अनुरोध बनाने की कोशिश तो जब सर्वर के लिए, कुछ हो जाता है हमारे अंत पर गलत. लेकिन आम तौर पर ये कोड हैं सर्वर के द्वारा दिया जा रहा है. तो हम क्या हो रहा है यह पता लगाने के लिए चाहते हैं गलत या सही सर्वर पर कि इन बातों को वापस करने के लिए कारण बनता है. तो क्यों एक सर्वर रिटर्न might स्थिति कोड 200? किसी भी विचार? हाँ. तो कुछ के बारे में सफलतापूर्वक अनुरोध के माध्यम से चला गया. और वे वापसी करने में सक्षम हो आप के लिए कहा जो भी हो. तो सब कुछ ठीक था. 302 के बारे में क्या पाया? हाँ. दर्शक: सर्वर देख रहा था आप क्या अनुरोध के लिए. लेकिन यह नहीं मिल सकता है. तो वहाँ एक त्रुटि है. आरओबी BOWDEN: तो सर्वर था आप क्या चाहते थे के लिए देख रहे हैं. तो बस यहाँ देख, 302 पाया, यह पता करने में सक्षम था. दर्शक: मैं माफी चाहता हूँ. मिली वे यह पता था कि इसका मतलब है. माफ़ कीजिए. आरओबी BOWDEN: तो 302 पाया. सर्वर को खोजने के लिए सक्षम है तुम क्या चाहते थे. दर्शक: लेकिन यह प्रदर्शित कर रहा है? आरओबी BOWDEN: बीच का अंतर इस 302 और 200 है कि यह क्या आप चाहते हैं जानता है. लेकिन यह वास्तव में, जहां नहीं है आप से पूछना चाहता था. तो 302 एक ठेठ रीडायरेक्ट है. तो आप एक पृष्ठ का अनुरोध किया. यह ओह, मैं चाहता हूँ, जानता है आप इस पर लौटने के लिए. लेकिन यह एक अलग यूआरएल पर है. तो हे, आप वास्तव में यह चाहते हैं. डेविड जे मालन: यह कहा है कि एक टुकड़ा है हम तुम लोगों को एक रीडायरेक्ट दिया कि हैडर समारोह का इस्तेमाल किया है कि समारोह कि, बारी में, स्थान बाहर मुद्रित पेट के, और तब यूआरएल जो करने के लिए आप उपयोगकर्ता को अस्वीकार करना चाहते हैं. आप 302 नहीं देखा था हालांकि स्पष्ट रूप से वहाँ, कि क्या PHP है जादुई हेडर के रूप में सम्मिलित होगा रोब वहाँ ने कहा कि वास्तव में क्या कह - पाया. लेकिन यहाँ के बजाय जाना. आरओबी BOWDEN: ठीक है. तो 403 के बारे में क्या मना किया? दर्शक: मुझे लगता है कि सर्वर मूल रूप से कह रहा है कि ग्राहक घर पृष्ठ का उपयोग नहीं कर सकते हैं. आरओबी BOWDEN: तो हाँ. खैर, ठेठ जवाब हम थे उम्मीद की तरह कुछ फ़ाइलें है उचित chmodded नहीं कर रहे हैं. यह शायद तहत क्या हालात आप उन्हें देखा था. लेकिन वहाँ एक कारण है कि ग्राहक यहां गलती पर हो सकता है. एक और स्थिति कोड वास्तव में नहीं है - 401. तो ये बहुत समान हैं. 401 अनधिकृत है. और 403 से मना किया है. और तो अनधिकृत आप विशेष रूप से आप लॉग इन नहीं कर रहे हैं अगर मिल लेकिन में प्रवेश करने का मतलब हो सकता आप अधिकृत कर रहे हैं कि. लेकिन अगर आप पहले से लॉगिन और आप कर रहे हैं अभी तो, अनुमति नहीं है आप भी मना प्राप्त कर सकते हैं. तो तुम में लॉग इन किया है और नहीं है तो अनुमति, मना भी है आपको मिल सकता है कुछ. डेविड जे मालन: और तंत्र द्वारा इन समस्याओं को आमतौर पर जो कर रहे हैं सर्वर पर है हल क्या आदेश के माध्यम से? Chmod, अगर यह है, वास्तव में, एक अनुमतियाँ फाइल या निर्देशिका पर जारी करते हैं. आरओबी BOWDEN: तो 404 नहीं मिला. हाँ. तो 302 के विपरीत जहां यह बिल्कुल नहीं था तुम लेकिन पूछ रहे हैं जहां यह जानता है कि क्या आप चाहते हैं, यह है, यह सिर्फ है क्या आप चाहते हैं पता नहीं. और आप का अनुरोध नहीं कर रहे हैं वैध कुछ. 418 मैं तो एक चायदानी हूँ और 500 आंतरिक सर्वर. तो तुम ऐसा क्यों हो सकता है? तो segfault - मैं वास्तव में ग्रेडिंग पता नहीं है इस के लिए मानक. लेकिन अपने PHP कोड के लिए कुछ था अगर इसमें गलत, सिद्धांत रूप में, यह हो सकता है वास्तव में, segfault जो मामले में, इस 500 आंतरिक सर्वर त्रुटि, कुछ आपके सर्वर के साथ गलत है विन्यास. या एक वाक्यविन्यास त्रुटि है अपने PHP कोड में. या कुछ बुरा हो रहा है. डेविड जे मालन: हम segfault देखा कुछ लोगों के जवाब के बीच. और तकनीकी रूप से, यह हो सकता है. लेकिन यह है कि एक पीएचपी, कार्यक्रम होगा वास्तव में, अन्य लोगों द्वारा लिखे गए segfaulted, जो केवल तभी उन लोगों बँधा हुआ है और में छोटी गाड़ी कोड लिखा था उनके दुभाषिया होगा PHP खुद segfault. 500 एक segfault की तरह है तो भले ही भावना में, यह लगभग हमेशा है एक विन्यास फाइल मुद्दे का परिणाम कृपया अपने वेब सर्वर के साथ या, रोब कहा, आप की तरह एक वाक्यविन्यास त्रुटि, एक बोली इसे बंद नहीं किया. या आप कहीं अर्धविराम खो दिया है. दर्शक: तो शटल pset के लिए, मैं मैंने ऐसा किया था जब मैं क्लिक एक बार लगता है ब्राउज़र, लेकिन कुछ भी नहीं आया वे सफेद पेज कहा जाता है. लेकिन यह क्योंकि कोड का था. मुझे लगता है कि जावास्क्रिप्ट किया गया लगता है, है ना? आरओबी BOWDEN: हाँ. दर्शक: चाहेंगे कि त्रुटि अभी भी ऊपर आ गए? आरओबी BOWDEN: तो आप कमाई नहीं होती इस त्रुटि क्योंकि सब कुछ वेब सर्वर के नजरिए से पूरी तरह से ठीक था. लेकिन आप index.html का अनुरोध किया. आप shuttle.js का अनुरोध और service.js. और इसे सफलतापूर्वक वापसी करने में सक्षम था आप उन सब बातों के लिए - 200. ठीक है. यह अपने ब्राउज़र की कोशिश की केवल जब जावास्क्रिप्ट कोड की व्याख्या है कि यह पसंद है, इंतजार है, यह नहीं है वैध जावास्क्रिप्ट त्रुटि. अन्य प्रश्न? ठीक है. डेविड जे मालन: तो अगले ऊपर संख्या 11 थी. और 11 scariest था बहुत से लोगों के लिए. तो सबसे महत्वपूर्ण बात यहाँ ध्यान दें यह वास्तव में, के बारे में था एक दोगुना लिंक की गई सूची. लेकिन यह पिछले वर्ष के रूप में ही नहीं था युग्मबंधित सूची समस्या, जो आपको चेतावनी देना नहीं था कि सूची, वास्तव में, unsorted हो सकता है. सूची unsorted था ताकि तथ्य और उस शब्द था कि तथ्य संप्रेषित करने के लिए वहाँ का मतलब था रेखांकित किया यह वास्तव में एक सरलीकरण है कि अन्यथा हो गया होता है की एक और अधिक चुनौतीपूर्ण समस्या और एक लंबे समय तक. यहाँ तो एक आम गलती डाल दिया था अपने एक पर पिछले साल के समाधान पेजर और फिर बस आँख बंद करके नकल है कि सही है जो जवाब के रूप में नीचे एक अलग सवाल का जवाब भावना में समान. लेकिन यहाँ बारीकियों के रूप में निम्नानुसार थे. एक तो, हम एक नोड घोषित किया है यहां हमेशा की तरह परिभाषित किया. तो फिर हम की सूची एक वैश्विक हो परिभाषित सूचक अशक्त करने के लिए प्रारंभ. तो जाहिर है, दो कार्य नहीं है हम यहाँ के लिए प्रोटोटाइप है, सम्मिलित करें और हटा दें. और फिर हम यहाँ कुछ नमूना कोड है के सम्मिलन का एक गुच्छा कर. और फिर हम पूरा करने के लिए आप से पूछना ऐसे में नीचे डालने का कार्यान्वयन यह सूची में n सम्मिलित करता है एक तरीका है कि लगातार समय में, यह भी रेखांकित किया, यहां तक ​​कि पहले से ही मौजूद हैं. तो सम्मिलित करने में सक्षम होने की सुंदरता लगातार समय में यह तात्पर्य यह है कि आप सम्मिलित करने के लिए है कि नए नोड कहाँ? मोर्चे में. तो यह है, शुक्र है, समाप्त कम से कम आवश्यकता के लिए प्रयोग किया जाता है कि मामलों में से एक यह जैसे कोड का और भी अधिक लाइनों, किया पिछले साल और भी कक्षा में जब हम इस तरह की बात के माध्यम से बात की मनुष्यों के साथ और कुछ के साथ मौखिक छद्म कोड. तो यहाँ समाधान में, चलो पर छोड़ देना कि सिर्फ एक दृश्य पर है स्क्रीन. हम निम्नलिखित कर रहे हैं नोटिस. और भी अन्य सरलीकरण नोटिस था कि यह भले ही पहले से ही मौजूद है, तो इसका मतलब है कि भले ही नंबर आप कर सकते हैं, वहाँ पहले से ही है बस आँख बंद करके अन्य डालें यह की नकल. और वह भी एक ही होना चाहिए था सरलीकरण, तुम सकता है कि इतना , अधिक से वास्तव में, कुछ पर ध्यान केंद्रित बौद्धिक दिलचस्प हिस्सा है और जाँच कुछ अतिरिक्त त्रुटि नहीं बस सीमित समय दिया. तो यह नमूना समाधान में, हम आवंटित बाएं हाथ पर एक सूचक एक नोड के लिए यहाँ पक्ष. अब, के रूप में, कि सूचक का एहसास रोब ने कहा, केवल 32 बिट है. और यह वास्तव में शामिल नहीं है जब तक आप एक पते यह पता असाइन करें. और हम दाएँ हाथ पर ऐसा malloc के माध्यम से पक्ष. एक अच्छा नागरिक की तरह, हम चाहते हैं कि जाँच malloc नहीं है, वास्तव में, अशक्त, इतना है कि हम गलती से नहीं बना है यहाँ एक segfault. और किसी भी समय आप जीवन में आप malloc का उपयोग ऐसा न हो कि, अशक्त के लिए जाँच की जानी चाहिए आप एक सूक्ष्म बग है. तब हम ने कहा कि अशक्त को प्रारंभ n और पिछले और अगले बताए. और यहाँ इस मामले में, मैं initialized क्योंकि इस नए, अशक्त करने के लिए पिछले नोड नया होने जा रहा है मेरी सूची की शुरुआत. इसलिए होने जा रहा है यह पहले कुछ भी नहीं है. और मैं अनिवार्य रूप से संलग्न करना द्वारा नए नोड के लिए मौजूदा सूची खुद को सूचीबद्ध करने के लिए अगले बराबर की स्थापना. लेकिन मैं बस अभी तक नहीं कर रहा हूँ. सूची में ही पहले से ही अस्तित्व में है, तो अगर और कम से कम एक नोड वहाँ था पहले से ही जगह में, इस सूची में है अगर यहाँ और मैं मैं यहाँ एक नया नोड सम्मिलित यकीन है कि बनाने की जरूरत है मेरे पूर्व नोड मेरे नए नोड के लिए पीछे की ओर इशारा करती, यह, फिर से, क्योंकि एक दोगुना लिंक की गई सूची. तो हम एक मानसिक स्वास्थ्य की जांच करते हैं. पहले से ही अगर वहाँ सूची, अशक्त नहीं है तो वहाँ एक या अधिक नोड्स, इतनी बात करने के संदर्भ कि वापस जोड़ने. और फिर हम जरूरत बहुत पिछले बात ऐसा करने के लिए वास्तव में वैश्विक अपडेट बात करने के लिए चर सूची ही कि नए नोड के लिए. हाँ. दर्शक: सूचक तीर में [सुनाई] करता है, अशक्त बराबर होती है सूची के साथ सौदा है क्योंकि सूची रिक्त है? डेविड जे मालन: नहींं. यही कारण है कि लगातार किया जा रहा है बस मुझे है यह मेरा है कि अगर में, सावधान शायद कुछ अधिक नोड्स के साथ मूल सूची यहाँ पर और मैं डालने कर रहा हूँ मेरी यहाँ पर नए नोड, वहाँ जा रहा है यहाँ पर कुछ भी नहीं किया जाना है. और मुझे लगता है कि विचार पर कब्जा करना चाहते हैं करने के लिए पहले की सेटिंग से नए नोड पर अशक्त. और शायद, मेरे कोड सही है और सम्मिलित करने के लिए कोई और रास्ता नहीं है इस समारोह के अलावा अन्य नोड्स, मुमकिन है, भले ही सूची पहले से ही है इसमें एक या अधिक नोड्स, संभवतः सूची, पहला नोड, होगा एक अशक्त खुद के पिछले सूचक. दर्शक: और बस एक अनुवर्ती. आप अगले बराबरी सूचक डाल कारण सूची आप सूचक बना रहे है यह इशारा कर रहा है कि सूची में से पहले अगले करने के लिए, मुझे लगता है - मैं नहीं - सिर्फ सूचीबद्ध करता है? डेविड जे मालन: बिल्कुल. और इसलिए हम वास्तव में दो मामलों पर विचार करते हैं यहाँ वास्तव में, भले ही हम उन पर विचार करेंगे आदेश नहीं है कोड में कुछ ठीक ही. लेकिन एक उच्च स्तर पर, अगर यह प्रतिनिधित्व करता है सूची और यह एक 32 बिट है सूचक, सरल परिदृश्य है इस डिफ़ॉल्ट रूप से अशक्त है कि. और मैं सम्मिलित करने के लिए चाहता हूँ 50 नंबर पहला नंबर था. तो मैं आगे जाना है और आवंटित करने के लिए जा रहा हूँ होते जा रहा है जो एक नोड, तीन क्षेत्रों - एन, पिछले और अगले. मैं संख्या 50 रखा जा रहा हूँ यहां, यह पता हो जाएगा. यह अगले हो जाएगा. और यह पिछले हो जाएगा. और इसलिए मैं इस मामले में क्या करते हैं? ठीक है, मैं बस यहाँ लाइन 1 किया है. सूचक एन हो जाता है. मैं तो पिछले कह रहा हूँ, अशक्त हो जाना चाहिए. तो इस अशक्त होने जा रहा है. तो मैं अगले कहने जा रहा हूँ सूची प्राप्त करने के लिए जा रहा है. और यह सिर्फ अच्छी तरह से बाहर काम करता है. इस अशक्त है. और इसलिए मैं नए नोड के बगल में, कह रहा हूँ क्षेत्र यह है जो भी मिलना चाहिए. तो यह है कि वहाँ एक और अशक्त डालता है. और फिर आखिरी बात मैं यहाँ की जांच कर रहा है. सूची यह शून्य के बराबर नहीं है, लेकिन अगर अशक्त करने के लिए बराबर है, तो हम छोड़ कि कुल मिलाकर. और इसलिए मैं सब अगले सूची हो जाता है pictorially में जो परिणाम सूचक, इस तरह एक तस्वीर. तो है कि एक परिदृश्य है. और आप के बारे में पूछ रहे थे कि एक विशेष रूप से इस तरह की स्थिति है, हम पहले से ही एक एक नोड सूची है जहां. और मैं मूल में वापस ऊपर जाना अगर समस्या का बयान, हम करेंगे अगले अभी के लिए, कहते हैं 34 है डालने चर्चा के लिए. तो मैं सिर्फ सुविधा के लिए जा रहा हूँ यहाँ पर कि आकर्षित. मैं सिर्फ malloced किया है. कहते हैं कि मैं बातिल के लिए जाँच कर रहा हूँ मान लेते हैं. अब, मैं को प्रारंभ करने जा रहा हूँ n 34 हो. और यह पता किया जाएगा. यह अगले हो जाएगा. और यह पिछले हो जाएगा. यकीन है कि मैं नहीं था बनाते हैं पीछे की ओर यह मिलता है. पिछले पहले आता है परिभाषा में. मुझे यह ठीक करने दें. यह पिछले है. यह अगले है. इन समान हैं, हालांकि लगातार यह रखते हैं. पिछले. यह अगले है. तो मैं बस की जाँच की, मेरी चिट्ठी malloced गया है अशक्त के लिए, नोड में 34 सौंपा. पिछले अशक्त हो जाता है. तो यह है कि मुझे लगता है कि देता है. अगले सूची हो जाता है. तो सूची यह है. तो यह अब एक ही है इस बैठक के रूप में वे एक के लिए बिंदु है, ताकि तीर उसी में. और फिर मैं देख रहा हूँ अगर सूची अशक्त करने के बराबर नहीं है. और यह इस समय नहीं है. तब मैं सूची करने के लिए जा रहा हूँ पिछले सूचक हो जाता है. तो पिछली सूची पीटीआर हो जाता है. तो इस डालने का प्रभाव पड़ता है यहाँ एक ग्राफिकल तीर. और वह एक छोटे से हो रही है लहराती, लाइनों. और फिर, अंत में, मैं अद्यतन सूचक को इंगित करने के लिए सूची. तो अब यह इस आदमी के लिए अंक. और अब, चलो एक त्वरित करते हैं मानसिक स्वास्थ्य की जांच. यहाँ सूची है, जो है वैश्विक चर. पहला नोड,, वास्तव में, 34 है क्योंकि मुझे लगता है कि तीर पीछा कर रहा हूँ. मैं करना चाहते हैं क्योंकि यह सही है सूची की शुरुआत में डालने सभी नए नोड्स. उनकी अगली क्षेत्र में इस आदमी के लिए मुझे सुराग. मैं जा रहा रखने के लिए, मैं अगले अशक्त है मारा. तो कोई और सूची है. मैं पिछले मारा, तो मैं मिल मैं उम्मीद कर वापस जहां. तो कुछ संकेत अभी भी कर रहे हैं, जाहिर है, हेरफेर करने के लिए. लेकिन आप ऐसा करने के लिए कहा गया था कि तथ्य यह लगातार समय में आप केवल इसका मतलब चीजों की एक निश्चित संख्या है तुम क्या करने की अनुमति दी हो. और उस नंबर क्या है? यह एक कदम हो सकता है. यह दो हो सकता है. यह 1,000 कदम हो सकता है. लेकिन यह तुम नहीं कर सकते हैं, जिसका मतलब परिमित है पाशन की किसी भी तरह चल रहा है यहाँ, कोई प्रत्यावर्तन, कोई छोरों. यह सिर्फ हार्ड कोडित लाइनों हो गया है हम इस नमूने में है कोड के रूप में. तो अगली समस्या 12 के लिए हमें पूछा हटाने के कार्यान्वयन को पूरा यह निकालता है कि इस तरह से नीचे n रैखिक समय में सूची से. इसलिए यदि आप एक छोटे से अधिक है wiggle कमरा अब. तुम्हें पता है, कि n मान सकते हैं कि अगर वर्तमान सूची में, उपस्थित रहेंगे कोई एक बार से अधिक. और वह भी एक प्रश्नोत्तरी आधारित होने का मतलब है सरल बनाने धारणा, तो कि आप 50 नंबर कहीं मिल जाए सूची में, आप भी नहीं करते को जारी रखने के बारे में चिंता करने की ज़रूरत हर संभव की तलाश में, पुनरावृति बस उतरना होगा जो 50 साल की प्रतिलिपि, सीमित समय में कुछ minutia में. तो हटाने के साथ, यह निश्चित रूप से एक था अधिक चुनौतीपूर्ण और अधिक लिखने के लिए कोड. लेकिन पहली नज़र में, स्पष्ट रूप से, यह हो सकता है भारी और की तरह कुछ दिखेगा आप हो सकता है कोई रास्ता नहीं है एक प्रश्नोत्तरी पर साथ आते हैं. लेकिन हम अलग अलग चरणों पर ध्यान देते हैं, उम्मीद है, यह अचानक होगा आप हड़ताल कि ये व्यक्ति के प्रत्येक कदम स्पष्ट समझ में आता है पीछे मुड़कर देखें. तो चलिए एक नजर डालते हैं. तो सबसे पहले, हम सूचक को प्रारंभ होना ही सूची. मैं रैखिक समय चाहते हैं, इसका मतलब है कि मैं कुछ पाश किया जा रहा हूँ. और एक आम रास्ता पर पुनरावृति एक सूची संरचना या किसी भी प्रकार में नोड्स संरचना की iteratively ले रहा है डेटा का सामने करने के लिए एक सूचक संरचना और फिर बस को अद्यतन करने शुरू यह और अपने रास्ते चलना डेटा संरचना के माध्यम से. इसलिए मुझे लगता है कि वास्तव में क्या करने जा रहा हूँ. सूचक है, जबकि मेरे अस्थायी चर, चलो, अशक्त करने के बराबर नहीं है आगे जाकर देखता. मैं भाग्यशाली मिलता है? मैं हूँ वर्तमान नोड में पता क्षेत्र है के बराबर में देख संख्या के लिए मैं देख रहा हूँ? और अगर ऐसा है, हम कुछ करते हैं. अब, इस नोटिस हालत पूरे चारों ओर से घेरे कोड की निम्न पंक्तियाँ. इस बारे में मैं परवाह ही बात है - प्रश्न में एक नंबर ढूँढने. तो कोई और, जो सरल नहीं है धारणात्मक बातें एक छोटा सा. लेकिन अब, मुझे एहसास हुआ, और तुम हो सकता है केवल सोचने के बाद यह एहसास हुआ यह एक बिट के माध्यम से, वहाँ वास्तव में दो मामलों यहाँ. नोड पर है, जहां से एक है एक है जो सूची की शुरुआत कि है, क्योंकि छोटे से परेशान एक विशेष मामला है, तुम सौदा किया है क्योंकि इस बात के साथ, जो केवल विसंगति है. हर जगह और सूची में, यह एक ही बात है. पिछले एक नोड और एक अगले वहाँ नोड, पिछले नोड, अगले नोड. लेकिन इस आदमी को एक छोटे से खास है वह शुरुआत में अगर. तो सूचक सूची के बराबर होती है अगर ही है, इसलिए मुझे लगता है की शुरुआत में हूँ अगर सूची और मैं n मिल गया है, मैं जरूरत चीजों की एक जोड़ी करने के लिए. एक, मैं करने के लिए सूची को बदलने की जरूरत अगले क्षेत्र, 50 को इंगित करें. तो मैं कोशिश कर रहा हूँ कि लगता है 34 को निकालने के लिए. तो इस आदमी के जाने के लिए मिला बस एक पल में. तो मैं कहने जा रहा हूँ, सूची अगले सूचक हो जाता है. खैर, इस सूचक है. अगला यहाँ पर इशारा कर रहा है. तो यह इस तीर सही बदल रहा है अब यहाँ इस आदमी को बात करने के लिए. अब, हम हैं, याद एक अस्थायी चर. इसलिए हम किसी भी नोड्स अनाथ नहीं है, मैं भी में इस आदमी है क्योंकि मेरे हटाने का कार्यान्वयन. तो अब, अगर सूची में ही, अशक्त नहीं है मैं एक छोटे से कुछ को ठीक करने की जरूरत है. मैं अब यकीन है कि इस तीर बनाने की जरूरत है, पहले से इशारा कर रहा है जो 50-34, यह, दूर जाने के लिए मिल गया है क्योंकि मैं छुटकारा पाने के लिए कोशिश कर रहा हूँ अगर 34, 50 बेहतर किसी भी कायम नहीं था के रूप में इसे करने के लिए एक तरह से वापस संदर्भ तीर का सुझाव दिया. इसलिए मैं अभी इस लाइन में किया था. तो फिर मैं काम कर रहा हूँ. यह मामला वास्तव में बहुत आसान है. सूची के सिर से काट रही अपेक्षाकृत सरल है. दुर्भाग्य से, यह नहीं है किसी और कष्टप्रद ब्लॉक. तो अब, मैं इस मामले पर विचार करने के लिए है बीच में कुछ है, जहां. लेकिन यह छोड़कर, बहुत भयानक नहीं है इस तरह वाक्यविन्यास के लिए. तो मुझे लगता है की शुरुआत में नहीं हूँ सूची, मैं कहीं बीच में हूँ. और यहाँ इस लाइन, कह रहा है शुरू आप पर कर रहे हैं जो कुछ नोड पर. पिछले नोड के लिए अगले क्षेत्र के लिए जाओ और सूचक को उस बिंदु. के pictorially यह करते हैं. कि जटिल हो रही थी. इसलिए मैं यहां पिछले एक क्षेत्रों है - चलो यह करते हैं - यहाँ अगले क्षेत्रों. मैं नहीं बल्कि मेरे संकेत को आसान बनाने के लिए जा रहा हूँ एक पूरी गुच्छा के आकर्षित से आगे और पीछे बातें crisscrossing एक दूसरे को. और अब, चलो बस यह 1, 2 है हम कहते हैं चर्चा के लिए 3, भी उस के साथ लाइन नहीं है, हालांकि प्रश्न में समस्या. तो यहाँ मेरे लिंक सूची है. मैं इस में दो को दूर करने की कोशिश कर रहा हूँ कहानी का विशेष संस्करण. तो मैं करने के लिए सूचक को नवीनीकृत किया है इस आदमी की ओर इशारा किया. तो इस पीटीआर है. उन्होंने कहा कि यहां इशारा कर रहा है. यह मौजूद है, जो सूची है विश्व स्तर के रूप में पहले. और वह कोई बात नहीं क्या यहाँ इशारा कर रहा है. और अब, मैं दो दूर करने के लिए कोशिश कर रहा हूँ. सूचक यहां इशारा कर रहा है यदि हां, तो मैं कर रहा हूँ , जाहिर है, का पालन करने के लिए जा रहा 1 में मुझे डालता है जो पिछले सूचक,. मैं फिर कह रहा हूँ कि अगले यह करने के लिए मुझ पर लाता है जो क्षेत्र, यहाँ बॉक्स, जा रहा है बराबर सूचक अगले. तो इस सूचक हैं, तो यह अगले है. इसका मतलब है कि इस तीर आवश्यकताओं इस आदमी को बात करने के लिए. तो कोड की कि लाइन बस क्या है इस का एक छोटा सा है किया. और अब, यह एक तरह लग रही है सही दिशा में कदम. हम अनिवार्य रूप से 2 बाहर कटाव करना चाहते हैं 1 और 3 के बीच की. तो यह हम चाहते हैं कि समझ में आता है इसके चारों ओर मार्ग इस सूचक. तो यह अगली पंक्ति जाँच कर रहा है, तो सूचक अगले रिक्त नहीं है, वहाँ 2 के अधिकार के लिए वास्तव में किसी को, कि हम भी क्या करना है इसका मतलब एक छोटे से यहाँ धज्जी. इसलिए मैं अब इस सूचक का पालन करने की आवश्यकता है और पिछले सूचक पर अद्यतन एक का एक छोटा सा करने के लिए इस लड़के यहां यहां मुद्दा यह लेख. और अब, नेत्रहीन यह अच्छा है. है कि वहाँ में यह एक छोटी सी गड़बड़ है अब और 2 तरफ इशारा करते हुए कोई नहीं. 2 बाईं ओर इशारा कर रहा है. और 2 दाईं ओर इशारा कर रहा है. लेकिन वह, वह जो चाहे कर सकता है क्योंकि वह मुक्त कर पाने के बारे में है. और यह कोई फर्क नहीं पड़ता उन मूल्यों को अब और कर रहे हैं. क्या जरूरी है कि शेष है लोग ऊपर अनुमार्गण रहे हैं और अब उसे नीचे. और वास्तव में, कि हम अगले क्या करते हैं. हम बता जिसका मतलब है कि हम मुक्त सूचक, ऑपरेटिंग सिस्टम, आप का स्वागत है इस पुनः प्राप्त करने के लिए. और फिर अंत में, हम वापसी. वरना संकेत भी, अगर हम अभी तक नहीं लौटे हैं, हम देख रखने के लिए मिल गया है. तो सूचक बस अगले सूचक के बराबर होती है यहाँ इस आदमी को ले जाने का मतलब है. यहाँ इस आदमी को ले जाएँ. यहाँ इस आदमी को ले जाते हैं, वास्तव में, हम नंबर नहीं मिला हम अभी तक के लिए देख रहे हैं. तो सच में, यह पूरी तरह से लग रहा है भारी, मैं पहली बार में लगता है, नज़र, खासकर जब आप संघर्ष अगर इस के साथ प्रश्नोत्तरी के दौरान फिर देखना कुछ इस तरह. और तुम अपने पीठ पर थपकी देने. खैर, मेरे पास कोई रास्ता नहीं है प्रश्नोत्तरी पर उस के साथ आते हैं. लेकिन मैं आप कर सकते हैं, तर्क होता है कि आप तोड़ ये व्यक्ति में यह नीचे बस मामलों और इसके माध्यम से चलना ध्यान से, बेशक, के तहत, यद्यपि तनावपूर्ण हालात. शुक्र है, चित्र बनाया खुश सब कुछ. आप में यह आकर्षित कर सकता किसी भी तरीके की संख्या. आप crisscrossing क्या करने की जरूरत नहीं है यहाँ बात. आप सीधे साथ यह कर सकता है इस तरह लाइनों. लेकिन इस समस्या का सार, सामान्य, महसूस करने के लिए था कि अंत में तस्वीर एक छोटे से देखना चाहिए कुछ इस तरह, क्योंकि लगातार समय आप रखने निहित है कि ठेला और ठेला और ठेला शुरुआत में नई नोड्स सूची की. कोई सवाल? शायद सबसे चुनौतीपूर्ण निश्चित रूप से कोडिंग सवाल. दर्शक: तो करने के लिए इसी तरह की सूची है पिछले उदाहरण में सिर. डेविड जे मालन: बिल्कुल, बिल्कुल. के लिए बस एक अलग नाम एक वैश्विक चर. वर्ल्ड वाइड क्या? आरओबी BOWDEN: ठीक है. तो यह है जहाँ आप एक है पैरा लिखना था. कुछ लोगों को निबंध लिखा इस सवाल के लिए. लेकिन तुम सिर्फ इन छह शब्दों का उपयोग करने की आवश्यकता है क्या होता है जब वर्णन करने के लिए आप facebook.com संपर्क करने की कोशिश. तो मैं सिर्फ इस प्रक्रिया के माध्यम से बात करेंगे इन सभी शब्दों के प्रयोग से. इसलिए हमारे ब्राउज़र में, हम facebook.com लिखें और हिट दर्ज करें. इसलिए हमारे ब्राउज़र एक का निर्माण करने जा रहा है HTTP इसे भेजने के लिए जा रहा है कि का अनुरोध के लिए फेसबुक के लिए कुछ प्रक्रिया के माध्यम से फेसबुक के साथ हमारे लिए प्रतिक्रिया करने के लिए अपने पेज के HTML. इसलिए प्रक्रिया से क्या है जो HTTP अनुरोध वास्तव में फेसबुक के लिए हो जाता है? तो सबसे पहले, हम अनुवाद की आवश्यकता Facebook.com. तो बस, नाम Facebook.com दी वास्तव में HTTP अनुरोध करता है, जहां जाने की जरूरत है? इसलिए हम Facebook.com अनुवाद की आवश्यकता एक आईपी पता करने के लिए, जो विशिष्ट रूप क्या मशीन हम वास्तव में पहचानती है इस अनुरोध भेजना चाहते हैं. आपका लैपटॉप एक आईपी पता है. इंटरनेट से जुड़ा कुछ भी एक आईपी पता है. तो DNS, डोमेन नाम प्रणाली, कि है क्या अनुवाद संभाल करने के लिए जा रहा है facebook.com से एक आईपी पता करने के लिए कि आप वास्तव में संपर्क करना चाहते हैं. इसलिए हम डीएनएस सर्वर से संपर्क करें और कहते हैं, facebook.com क्या है? यह ओह, यह आईपी पते 190.212 है, कहते हैं कुछ, कुछ, कुछ. ठीक है. अब, मैं जानता हूँ कि क्या मशीन मैं संपर्क करना चाहते हैं. तो फिर आप अपने HTTP अनुरोध भेजने कि मशीन के लिए खत्म हो. तो कैसे यह है कि मशीन को प्राप्त करता है? खैर, अनुरोध से चला जाता है रूटर शेख़ी रूटर. कक्षा में उदाहरण याद है, जहां हम वास्तव में रूट देखा कि हम कोशिश की जब पैकेट ले लिया संवाद करने के लिए. हम यह अटलांटिक के ऊपर से छलांग देखा एक बिंदु या जो कुछ पर महासागर. तो पिछले कार्यकाल बंदरगाह. तो यह आपके कंप्यूटर पर अब है. आप वर्तमान में कई बातें कर सकते हैं इंटरनेट के साथ संवाद. तो मैं कहता हूँ, स्काइप चल रहा जा सकता है. मैं खुले एक वेब ब्राउज़र हो सकता है. मैं कुछ हो सकता है कि फाइलें torrenting. तो इन बातों के सभी कर रहे हैं साथ संवाद स्थापित किसी तरह से इंटरनेट. तो आपके कंप्यूटर कुछ डेटा प्राप्त करता है जब इंटरनेट से, यह कैसे करता है क्या पता आवेदन वास्तव में डेटा चाहता है? यह विशेष रूप से है कि क्या यह कैसे पता है डेटा के लिए है विरोध के रूप में आवेदन torrenting वेब ब्राउज़र के लिए? तो यह है कि में बंदरगाहों का उद्देश्य है इन आवेदनों में से सभी पास आपके कंप्यूटर पर एक बंदरगाह का दावा किया. तो कृपया अपने वेब ब्राउजर, हे कहते हैं, मैं पोर्ट 1000 पर सुन रहा हूँ. और अपने torrenting कार्यक्रम कह रहा है, मैं पोर्ट 3000 पर सुन रहा हूँ. और स्काइप मैं पोर्ट 4000 का उपयोग कर रहा हूँ, कहते हैं. आप कुछ डेटा मिलता तो जब अंतर्गत आता है कि इन आवेदनों में से एक, डेटा को जो बंदरगाह के साथ चिह्नित है यह वास्तव में करने के लिए साथ भेजा जाना चाहिए. तो इस ओह, मैं हैं, कहते हैं, बंदरगाह से 1000. मैं तो मैं इस आगे की जरूरत है अपने वेब ब्राउज़र को साथ. तो कारण यह यहाँ प्रासंगिक है वेब सर्वर जाते हैं 80 बंदरगाह पर सुनने के. मैं Facebook.com संपर्क तो, जब मैं कर रहा हूँ कुछ मशीन के साथ संवाद. लेकिन मुझे इस बात का जो बंदरगाह कहने की ज़रूरत मैं के साथ बातचीत करना चाहते हैं मशीन. और वेब सर्वर हो जाते हैं 80 पोर्ट पर सुन रहा है. वे चाहते थे, वे इसे तैयार कर सकती है ऊपर तो यह बंदरगाह 7000 पर के रूप में सूचीबद्ध करता है. और फिर एक वेब ब्राउज़र में, मैं कर सकता 7000: मैन्युअल Facebook.com लिखें पोर्ट 7000 को अनुरोध भेज फेसबुक के वेब सर्वर की. डेविड जे मालन: और इस मामले में भी हम यह अपेक्षा नहीं की थी कि हालांकि लोग यह उल्लेख है, इस मामले में, क्या बंदरगाह अनुरोध वास्तव में करने के लिए जाना होगा? फिर से कोशिश करें. बिल्कुल सही. एक सूक्ष्मता कि तलाश में, लेकिन नहीं कि वहाँ कोई भी पिछले है. आरओबी BOWDEN: तो HTTPS, यह है, क्योंकि के लिए विशेष रूप से सुन एन्क्रिप्टेड, यह बंदरगाह 4430 पर है. दर्शकों: और ईमेल 25 हैं, है ना? डेविड जे मालन: आउटबाउंड ईमेल, 25, हां. आरओबी BOWDEN: मैं भी की सबसे ज्यादा पता नहीं है - कम लोगों में से सभी के लिए होते हैं बातों के लिए आरक्षित. मैं सब कुछ के तहत लगता है 1024 आरक्षित है. दर्शक: क्यों तुम क्या कहना है 3 गलत नंबर था? आरओबी BOWDEN: क्योंकि एक आईपी पते में, अंकों के चार समूहों नहीं है. और वे 0-255 कर रहे हैं. तो 192.168.2.1 एक आम है स्थानीय नेटवर्क आईपी पता. उन सभी के 255 से भी कम हैं नोटिस. तो मैं 300 के साथ शुरू कर दिया है, जब कि शायद हो नहीं सकता नंबरों में से एक रहा. डेविड जे मालन: लेकिन उस मूर्ख क्लिप से - यह है कि वे एक था जहां सीएसआई, था संख्या कि बहुत बड़ा था आईपी ​​पते के लिए. आरओबी BOWDEN: इस पर कोई सवाल? अगले एक में तो पूरा परिवर्तन विषय है, लेकिन हम के लिए इस PHP सरणी है ट्रैक्टर में घरों. और हम एक unordered सूची है. और हम प्रत्येक सूची आइटम बाहर मुद्रित करना चाहते हैं बस घर का नाम शामिल हैं. तो हम एक foreach पाश है. तो वाक्यविन्यास foreach है, याद सरणी में आइटम के रूप में सरणी. तो पाश के प्रत्येक चलना के माध्यम से, घर में से एक पर ले जा रहा है सरणी के अंदर मूल्यों. पहले चलना, घर पर Cabot घर होगा. एक दूसरी यात्रा, घर में होगा इतने पर कूरियर सभा हो और. इसलिए घर के रूप में प्रत्येक ट्रैक्टर के लिए, हम कर रहे हैं बस मुद्रित करने के लिए जा रहा - आप भी प्रतिध्वनित हो सकता था - तो सूची आइटम और घर का नाम और तब सूची आइटम को बंद. घुंघराले ब्रेसिज़ यहां वैकल्पिक हैं. और फिर हम भी प्रश्न में कहा ही है, बंद करने के लिए याद unordered सूची टैग. इसलिए हम PHP मोड से बाहर निकलने की जरूरत है यह करने के लिए आदेश में. या हम प्रतिध्वनित हो सकता था unordered सूची टैग को बंद करें. डेविड जे मालन: यहां भी ठीक होगा के लिए एक पुराने स्कूल का उपयोग करने के लिए किया गया है = 0 0 एक $ मैं साथ पाश और गिनती के लिए उपयोग कर रे की लंबाई आंकड़ा. पूरी तरह से ठीक भी है, बस एक छोटी सी wordier. दर्शक: तो तुम जा रहे थे [सुनाई], आप क्या करेंगे - मैं पाश [सुनाई] है क्या भूल जाते हैं. आप ट्रैक्टर ब्रैकेट मैं $ चाहेंगे? डेविड जे मालन: बिल्कुल. हाँ, बिल्कुल. आरओबी BOWDEN: और कुछ? डेविड जे मालन: सब ठीक है. व्यापार नापसंद. तो जवाब के गुच्छों वहाँ थे इनमें से प्रत्येक के लिए संभव. हम वास्तव में सिर्फ देख रहे थे एक ऊपर और के लिए मजबूर कुछ एक नकारात्मक पक्ष. और संख्या 16 उपयोगकर्ताओं 'मान्य पूछा इनपुट क्लाइंट साइड जावास्क्रिप्ट के साथ के रूप में, बजाय सर्वर साइड की, PHP के साथ के रूप में. तो क्या हुआ की एक ऊपर है कर क्लाइंट साइड? खैर, हम प्रस्तावित चीजों में से एक है आप विलंबता कम है कि, तुम क्योंकि संपर्क करने के लिए परेशान करने के लिए नहीं है कुछ ले सकता है सर्वर, जो मिसे या सेकंड के एक जोड़े उस से बचने के द्वारा और बस उपयोगकर्ताओं को 'इनपुट क्लाइंट पक्ष द्वारा मान्य किया एक पर प्रस्तुत हैंडलर ट्रिगर और सिर्फ वे टाइप किया जाँच नाम के लिए में कुछ और? वे कुछ टाइप किया ईमेल पते के लिए में? वे से एक छात्रावास का चयन किया था ड्रॉप डाउन मीनू? आप उन्हें तात्कालिक प्रतिक्रिया दे सकते हैं गीगाहर्ट्ज़ कंप्यूटर का उपयोग या वे यह है कि जो कुछ भी वास्तव में उनके डेस्क पर. तो यह सिर्फ एक बेहतर उपयोगकर्ता है आम तौर पर अनुभव. लेकिन क्लाइंट साइड करने का एक नकारात्मक पहलू सत्यापन, आप भी बिना इसे करते हैं सर्वर साइड सत्यापन कर रही है कि CS50 से बाहर आने के सबसे अधिक किसी को जानता है आप तो बस आप चाहते हैं किसी भी डेटा भेज सकते हैं एक सर्वर से किसी भी तरीके की संख्या. सच कहूँ तो, सबसे अधिक किसी भी ब्राउज़र में, आप कर सकते हैं सेटिंग्स में और बस के चारों ओर क्लिक करें जावास्क्रिप्ट बंद कर देते हैं, जो होगा, इसलिए, किसी भी रूप में अक्षम करें मान्यता. लेकिन तुम भी याद हो सकता है कि मैं भी का उपयोग कर वर्ग में कुछ रहस्यमय बातें किया Telnet और वास्तव में करने के लिए नाटक मिल भेजकर एक ब्राउज़र हो एक सर्वर के लिए अनुरोध. और कहा कि निश्चित रूप से नहीं है किसी भी जावास्क्रिप्ट का उपयोग कर. वह सिर्फ मेरे आदेशों टाइपिंग है एक कीबोर्ड पर. तो सच में, पर्याप्त के भीतर किसी भी प्रोग्रामर वेब और HTTP के साथ आराम वह या वह जो चाहे डाटा भेज सकता है सत्यापन के बिना एक सर्वर से. और अपने सर्वर भी जाँच नहीं कर रहा है, वे मुझे एक नाम दिया है, यह वास्तव में एक वैध ईमेल पता, किया वे एक छात्रावास का चयन, आप खत्म हो सकता है ऊपर डालने फर्जी या सिर्फ खाली डेटा अपने डेटाबेस में, जो शायद एक अच्छी बात नहीं किया जा रहा है अगर आप यह वहाँ था संभालने थे. तो यह एक कष्टप्रद वास्तविकता है. लेकिन सामान्य तौर पर, क्लाइंट पक्ष में मान्यता महान है. लेकिन यह दो बार के रूप में ज्यादा काम होता है. विभिन्न मौजूद वहाँ हालांकि के लिए पुस्तकालयों, जावास्क्रिप्ट पुस्तकालयों उदाहरण के लिए,, इतना करना है कि एक सिर दर्द की बहुत कम. और आप कोड के कुछ पुन: उपयोग कर सकते हैं सर्वर साइड, क्लाइंट साइड. लेकिन यह आम तौर पर महसूस करते हैं कि अतिरिक्त काम करते हैं. हाँ. दर्शक: तो अगर हम बस कम सुरक्षित कहा - डेविड जे मालन [हंसते हुए] ऊ. वे हमेशा कठिन हैं निर्णय के लिए लोगों को. आरओबी BOWDEN: यही होगा स्वीकार किया गया है. डेविड जे मालन: क्या? आरओबी BOWDEN: मैं इस समस्या को बनाया. यही स्वीकार कर लिया गया होता. डेविड जे मालन: हाँ. दर्शक: कूल. आरओबी BOWDEN: लेकिन हम स्वीकार नहीं किया पहले एक के लिए - खैर, हम क्या देख रहे थे है आप की तरह कुछ करने के लिए नहीं है सर्वर के साथ संवाद. हम सिर्फ तेजी से स्वीकार नहीं किया. दर्शक: क्या बारे में पृष्ठ पुनः लोड नहीं है? आरओबी BOWDEN: हाँ. यह एक स्वीकार किए जाते हैं जवाब था. डेविड जे मालन: हमने महसूस किया, जहां कुछ भी यह संभावना नहीं की तुलना में अधिक होने की संभावना थी क्या आप थे क्या पता था कि एक कठिन है, जो कह रही है कभी कभी आकर्षित करने के लिए लाइन. बजाय एक लिंक की गई सूची का उपयोग करना बनाए रखने के लिए एक सरणी के एक पूर्णांकों की सूची हल. जुड़े हुए के साथ तो एक ऊपर हम अक्सर अदालत में तलब उनके पूरे प्रेरित कि सूचियों परिचय आप गतिशीलता मिलता था. वे विकसित कर सकते हैं. वे सिकुड़ कर सकते हैं. तो तुम हुप्स के माध्यम से कूदने की जरूरत नहीं है वास्तव में और अधिक स्मृति बनाने के लिए एक सरणी के साथ. या फिर आप की जरूरत नहीं है बस कहते हैं, क्षमा करें, उपयोगकर्ता. सरणी भर जाता है. सूची की तो गतिशील विकास. लिंक सूचियों का हालांकि एक नकारात्मक पहलू है? दर्शक: यह रैखिक है. लिंक की गई सूची पर खोज रैखिक है बजाय आप लॉग इन क्या की डेविड जे मालन: बिल्कुल. एक लिंक की गई सूची पर खोज रैखिक है, इसे हल है, भले ही आप कर सकते हैं क्योंकि केवल इन रोटी के टुकड़ों का पालन इन संकेत, सूची की शुरुआत से अंत करने के लिए. आप यादृच्छिक उपयोग और लाभ उठाने नहीं कर सकते हैं, इस प्रकार, द्विआधारी खोज, यह भले ही हल, तुम सकता है कि एक सरणी के साथ करते हैं. और एक अन्य लागत भी नहीं है. हाँ. दर्शक: मेमोरी अक्षम? डेविड जे मालन: हाँ. खैर, मैं यह जरूरी नहीं होता अक्षम कहना. लेकिन यह आप और अधिक स्मृति खर्च करता है, आप प्रत्येक के लिए 32 बिट की जरूरत है क्योंकि अतिरिक्त सूचक के लिए नोड, पर एक अकेले लिंक सूची के लिए कम से कम. अब, आप केवल पूर्णांकों भंडारण कर रहे हैं और आप सूचक को जोड़ रहे हैं, वह है, वास्तव में किस तरह के गैर तुच्छ. यह स्मृति की राशि को दोगुना करने की है. लेकिन वास्तविकता में, यदि आप भंडारण कर रहे हैं एक हो सकता है कि structs की लिंक सूची 8 बाइट्स, 16 बाइट्स, और भी अधिक उसके अलावा, हो सकता है यह कम है एक सीमांत लागत की. लेकिन यह फिर भी एक लागत है. तो उन दोनों में से किसी होता downsides के रूप में ठीक किया गया. 18. लिखने के लिए PHP के बजाय सी का उपयोग एक कमांड लाइन प्रोग्राम. यहाँ तो, इसका इस्तेमाल करने के लिए अक्सर तेज है एक PHP या रूबी या अजगर की तरह भाषा. आप बस जल्दी से खोलने एक पाठ संपादक. आप कई और अधिक कार्य किया है आप के लिए उपलब्ध. PHP कार्यों के पानी के नल है, सी में, आप जबकि बहुत, बहुत कम है. वास्तव में, लोगों को बुरे तरीके से जानते हैं आप हैश तालिकाओं नहीं है कि. आप सूचियों जुड़ा हुआ नहीं है. आप उन चाहते हैं, तो आप के लिए है उन्हें अपने आप को लागू करने. PHP की तो एक उल्टा या वास्तव में किसी भी व्याख्या की भाषा तेज़ी है जिसके साथ आप कोड लिख सकते हैं. लेकिन एक नकारात्मक पक्ष यह है कि हम यह देखकर मैं जल्दी से एक misspeller कोसा PHP का उपयोग कर व्याख्यान में कार्यान्वयन, है कि एक व्याख्या की भाषा का उपयोग आमतौर पर धीमी है. और हम एक साथ प्रदर्शन देखा कि 3 से 0.3 सेकंड से समय में वृद्धि क्योंकि व्याख्या के सेकंड, कि वास्तव में होता है. एक और उल्टा था कि आप कि संकलन की जरूरत नहीं है. तो यह भी विकास को गति संयोग से, आप की जरूरत नहीं है क्योंकि एक कार्यक्रम चलाने के लिए दो चरणों. आप सिर्फ एक है. और इतना है कि सुंदर है सम्मोहक रूप में अच्छी तरह से. किसी SQL डेटाबेस का उपयोग कर के बजाय डेटा स्टोर करने के लिए एक सीएसवी फाइल. तो SQL डेटाबेस pset7 के लिए प्रयोग किया जाता है. सीएसवी फाइल जिसे ज्यादा इस्तेमाल नहीं किया. लेकिन आप के रूप में pset7 में परोक्ष रूप से इसका इस्तेमाल किया अच्छी तरह से याहू वित्त से बात करके. लेकिन सीएसवी सिर्फ एक एक्सेल फाइल की तरह है लेकिन सुपर सरल, कॉलम कहाँ हैं बस के अंदर कॉमा से demarked एक अन्यथा पाठ फ़ाइल की. और किसी SQL डेटाबेस का उपयोग कर रहा है एक छोटे से अधिक सम्मोहक. आप चीजों को पाने की वजह से यह एक ऊपर है जैसे चयन और सम्मिलित करें और हटाएं. और तुम, शायद, अनुक्रमित मिलता है कि MySQL और जैसे अन्य डेटाबेस, ओरेकल, स्मृति में आप के लिए निर्माण, जो अपने चयन शायद नहीं है इसका मतलब नीचे करने के लिए रेखीय शीर्ष होने जा रहा. यह वास्तव में कुछ होने जा रहा है द्विआधारी खोज या कुछ और की तरह भावना में समान. तो वे आम तौर पर तेजी से कर रहे हैं. लेकिन एक नकारात्मक पक्ष यह है कि यह सिर्फ और अधिक काम है. यह और अधिक प्रयास है. आप डेटाबेस को समझना होगा. आप इसे स्थापित करने के लिए है. आप को चलाने के लिए एक सर्वर की जरूरत पर जो डेटाबेस. तुम समझने की जरूरत यह विन्यस्त करने के लिए कैसे. तो ये हैं सिर्फ इन व्यापार नापसंद की तरह. एक सीएसवी फाइल, आप कर सकते हैं जबकि gedit के साथ इसे बनाने के. और तुम जाने के लिए अच्छे हैं. से परे है कि कोई जटिलता नहीं है. बजाय एक हैश तालिका के एक Trie का प्रयोग स्टोर करने के लिए अलग श्रृंखलन के साथ एक याद ताजा शब्दों का शब्दकोश pset5 की. तो एक सिद्धांत में, उल्टा कोशिश करता है कम से कम, क्या है? लगातार समय, कम से कम आप कर रहे हैं व्यक्ति में से प्रत्येक पर hashing आप की तरह एक शब्द में पत्र, pset5 के लिए हो सकता है. यही कारण है कि पांच हैश, छह हो सकता है पांच या छह अगर वहाँ hashes शब्द में पत्र. और वह बहुत अच्छा है. और पर एक ऊपरी ही अगर वहाँ कैसे जब तक आपके शब्द हो सकता है, कि वास्तव में asymptotically निरंतर समय. जबकि अलग से एक हैश तालिका वहाँ उस के साथ, समस्या श्रृंखलन डेटा संरचना की तरह है कि अपने एल्गोरिदम का प्रदर्शन आमतौर पर बातें की संख्या पर निर्भर करता है पहले से ही डेटा संरचना में. और वह निश्चित रूप से मामला है चेन, जिससे तुम डाल अधिक सामान एक हैश तालिका में, अब उन चेन सबसे खराब में है, जिसका मतलब जाना मामला है, आप के लिए देख रहे हो सकता बात सभी तरह से एक के अंत में है उन जंजीरों की, जो प्रभावी रूप से रेखीय कुछ में devolves. अब, व्यवहार में, यह पूरी तरह से कर सकता है कि एक हैश तालिका के मामले में हो चेन इसी से भी तेज है Trie कार्यान्वयन. लेकिन उस के अलावा, विभिन्न कारणों के लिए है कोशिश करता है की एक पूरी बहुत कुछ का उपयोग कर रहे हैं जो स्मृति कि कर सकते हैं, वास्तव में, धीमी गति से बातें नीचे, आप अच्छा नहीं मिलता है क्योंकि कैशिंग बुलाया कुछ का लाभ, जहां करीब एक साथ हैं कि बातें स्मृति में पहुँचा जा सकता है अक्सर अधिक तेजी से. और कभी कभी आप के साथ आ सकते हैं वास्तव में एक अच्छा हैश समारोह. आप का एक सा बर्बाद करने के लिए यहां तक ​​कि अगर स्मृति, तुम, वास्तव में, करने में सक्षम हो सकता है तेजी से और नहीं चीजों को खोजने के रूप में बुरा के रूप में रैखिक. तो संक्षेप में, यह जरूरी भी नहीं था इनमें से एक या दो में से किसी के साथ हम देख रहे थे विशिष्ट बातें. प्रेरक वास्तव में कुछ भी एक ऊपर और नकारात्मक पहलू के रूप में आम तौर पर हमारी आँख पकड़ा. आरओबी BOWDEN: तो उल्टा के लिए, हमने किया अपने दम पर स्वीकार नहीं "तेजी से." आप इसके बारे में कुछ कहना था. आप सैद्धांतिक रूप से तेजी से कहा, भले ही हम आप की तरह समझ गया कि पता था यह 1 से 0 कि. और हैश तालिका, सिद्धांत में, 0 का 1 नहीं है. देखने का समय के बारे में कुछ भी उल्लेख आम तौर पर अंक आप मिल गया. लेकिन "तेजी" समाधान के अधिकांश पर कोशिश करता थे कि बड़ा बोर्ड समाधान से निष्पक्ष धीमी कि हैश तालिकाओं थे. इतनी तेजी से और खुद की वास्तव में सच नहीं है. डेविड जे मालन: डोम डे डोम डोम. मैं शायद एहसास है कि केवल एक हूँ कि कि यह माना जाता है कि कैसे है ठीक है, स्पष्ट हो? आरओबी BOWDEN: मैं वास्तव में नहीं पता था. डेविड जे मालन: यह बनाया मेरे सिर में भावना. आरओबी BOWDEN: मैं इस एक कर रहा हूँ. ठीक है. तो यह आपके आकर्षित करने के लिए किया था, जहां से एक है आप के लिए इसी तरह आरेख हो सकता है अतीत की परीक्षा पर देखा है. तो चलो बस इस पर नजर डालते हैं. तो एचटीएमएल नोड से, हम दो बच्चों, सिर और शरीर. तो हम शाखा - सिर और शरीर. सिर एक शीर्षक टैग है. तो हम एक शीर्षक है. अब, एक बात बहुत से लोगों को भूल गया कि इन पाठ नोड्स रहे हैं इस पेड़ के भीतर तत्वों. तो यहाँ हम अंडाकार रूप में उन्हें आकर्षित करने के लिए हो इन से उन्हें अलग करने के लिए नोड्स के प्रकार. लेकिन नोटिस भी यहाँ हम ऊपर है, मध्य, और नीचे जा रहा है खत्म हो जाएगा पाठ नोड्स. तो उन भूल कुछ हद तक था एक आम गलती की. शरीर तीन बच्चों की है - इन तीन divs. तो div, div, div और फिर पाठ उन divs के नोड बच्चे. यही कारण है कि यह बहुत सुंदर है सवाल है कि के लिए. डेविड जे मालन: और यह ध्यान देने योग्य है, हम इन पर ध्यान केन्द्रित करना नहीं है, भले ही हम पर खर्च समय में विवरण आदेश करता है कि जावास्क्रिप्ट, में तथ्य यह है, बात तकनीकी रूप से. तो सिर में शरीर से पहले आता है एचटीएमएल, तो यह करने के लिए प्रकट करना चाहिए वास्तविक डोम में शरीर के लिए छोड़ दिया. उसकी, बस FYI करें, सामान्य रूप में, यह है कि दस्तावेज़ क्रम में कुछ कहा, जहां यह बात करता है. और तुम एक पार्सर को लागू किया गया है, इमारत में HTML पढ़ता है कि एक कार्यक्रम स्मृति में पेड़, ईमानदार हो, कि शायद intuitively क्या आप वैसे भी करते हैं - ऊपर से नीचे तक, सही करने के लिए छोड़ दिया है. आरओबी BOWDEN: उस पर सवाल? मैं अगले एक करना चाहिए? डेविड जे मालन: यकीन है. आरओबी BOWDEN: ठीक है. तो इस उग आया बफर है हमले प्रश्न. यहां पहचान करने के लिए मुख्य बात यह है, खैर, कैसे हो सकता है एक विरोधी चाल को क्रियान्वित करने में इस कार्यक्रम स्वैच्छिक कोड? तो argv1, पहली कमांड लाइन इस कार्यक्रम के लिए तर्क है, कि हो सकता है मनमाने ढंग से लंबे समय तक. लेकिन यहाँ हम कॉपी करने के लिए memcpy का उपयोग कर रहे हैं argv1, जो यहां बार है. हम तर्क के रूप में इसे पारित कर रहे हैं. और इसलिए यह नाम पट्टी पर ले जा रहा है. इसलिए हम बार memcpying रहे इस बफर सी में. हम कितने बाइट्स नकल कर रहे हैं? खैर हालांकि कई बाइट्स बार के लिए होता है , कि तर्क की लंबाई का उपयोग किया. लेकिन सी केवल 12 बाइट्स विस्तृत है. तो हम एक कमांड लाइन तर्क प्रकार अगर कि 12 बाइट्स से अधिक समय है, हम कर रहे हैं इस बाढ़ के लिए जा रहा विशेष बफर. अब, कैसे एक विरोधी की चाल हो सकती है मनमाने ढंग से कोड को क्रियान्वित करने में कार्यक्रम? इसलिए कि यहां याद मुख्य foo बुला रहा है. और यदि ऐसा है तो मुख्य कॉल foo. चलो इस आकर्षित करते हैं. इसलिए हम अपने ढेर है. और मुख्य एक ढेर फ्रेम है तल पर. कुछ बिंदु पर, मुख्य कॉल foo. खैर, तुरंत, मुख्य कॉल foo. और तो foo अपनी ही ढेर फ्रेम हो जाता है. अब, कुछ बिंदु पर, foo वापस जाने के लिए जा रहा है. और फू रिटर्न चला गया, हम में जानने की जरूरत मुख्य हम के अंदर कोड की क्या लाइन पता करने के क्रम में थे जहां हम मुख्य में फिर से शुरू करना चाहिए. हम एक पूरी से foo कॉल कर सकते हैं विभिन्न स्थानों का गुच्छा. कैसे हम जहां लौटने के लिए जानते हो? खैर, हम कि कहीं दुकान की जरूरत है. कहीं तो सही यहाँ के आसपास, हम दुकान हम एक बार के लिए वापस आ जाना चाहिए जहां foo रिटर्न. और यह वापसी पता है. तो कैसे एक विरोधी के लाभ ले सकता है इस के तथ्य यह है कि इस बफर सी संग्रहीत किया जाता है, चलो यहीं सी है, का कहना है. इसलिए हम ग के लिए 12 बाइट्स मिल गया है. यह सी है. और इस foo के ढेर अंगूठी है. दुर्भावनापूर्ण उपयोगकर्ता अधिक प्रवेश करती है तो अगर 12 से बाइट या वे एक कमांड दर्ज 12 से अधिक लंबी है कि लाइन तर्क वर्ण, तो हम करने जा रहे हैं इस बफर अतिप्रवाह. हम जा रख सकते हैं. और कुछ बिंदु पर, हम दूर जाना हम शुरू पर्याप्त है कि इस वापसी पता overwriting. तो एक बार हम वापसी पता अधिलेखित इसका मतलब यह है कि जब foo रिटर्न, हम जहाँ भी लौट रहे हैं दुर्भावनापूर्ण उपयोगकर्ता द्वारा यह कह रही है यह जो कुछ भी से प्रवेश किया, जो भी मूल्य अक्षर उपयोगकर्ता में प्रवेश किया. और तो दुर्भावनापूर्ण उपयोगकर्ता किया जा रहा है विशेष रूप से चतुर, वह यह हो सकता है printDef में कहीं पर लौटने समारोह या malloc में कहीं समारोह, बस कहीं भी मनमाने ढंग से. वह क्या है लेकिन अगर इससे भी ज्यादा चालाक है उपयोगकर्ता यहीं पर लौटें. और फिर आप निष्पादित शुरू इन कोड की लाइनों के रूप में. तो उस बिंदु पर, उपयोगकर्ता दर्ज कर सकते हैं वह इस क्षेत्र में जो कुछ भी चाहता. और वह पूरा नियंत्रण है अपने कार्यक्रम पर. उस पर सवाल? तो अगला सवाल पूरा हो गया है ऐसे में foo की reimplementation यह अब कमजोर है कि. तो तरीकों की एक जोड़ी है आप यह कर सकता था. हम अभी तक केवल सी है लंबाई 12 की जा रही है. आप इस बदल सकता है अपने समाधान के हिस्से के रूप में. हम यह भी सुनिश्चित करने के लिए एक चेक जोड़ी यकीन बार अशक्त नहीं था. आप की जरूरत नहीं थी हालांकि कि पूरा श्रेय के लिए. इसलिए हम पहले जाँच कर रहे हैं बार की स्ट्रिंग लंबाई. यह तो ठीक है, 12 से अधिक है, तो वास्तव में नकल मत करो. इसलिए कि यह तय करने का एक तरीका है. यह तय करने का एक और तरीका है के बजाय सी होने ही लंबाई 12 की हो, यह है लंबाई strlen (बार) का होना. यह तय करने का एक अन्य तरीका है वास्तव में सिर्फ लौटने के लिए. तो तुम बस के सभी से छुटकारा मिल गया था यह आपको बस सब नष्ट कर दिया था, तो कोड की लाइनों, तुम मिल गया होता पूरा श्रेय, इस समारोह के बाद वास्तव में कुछ भी हासिल नहीं होता है. यह आदेश पंक्ति नकल है में कुछ सरणी में तर्क अपने स्थानीय ढेर फ्रेम. और फिर बात लौट रहा है. और जो भी इसे पूरा चला गया है. तो रिटर्न भी एक पर्याप्त था पूरा श्रेय मिल रहा है की जिस तरह से. डेविड जे मालन: काफी नहीं आत्मा की सवाल है, लेकिन प्रति स्वीकार्य फिर भी कल्पना. आरओबी BOWDEN: उस में से किसी पर सवाल? एक बात है कि आप कम से कम कोड संकलन की जरूरत है. तकनीकी तौर पर आप नहीं कर रहे हैं तो फिर भी कमजोर अपने कोड नहीं करता है संकलन, हम स्वीकार करते हैं कि नहीं था. कोई सवाल? ठीक है. डेविड जे मालन: क्या आप चाहते हो इस शीर्षक का कहना है करने के लिए? आरओबी BOWDEN: नहीं डेविड जे मालन: तो यह एक में, इस अच्छी खबर है या बुरी खबर या तो था. यह सचमुच एक ही समस्या है पहली प्रश्नोत्तरी के रूप में. और यह लगभग एक ही है pset1 समस्या के रूप में. लेकिन यह जानबूझकर किया जा करने के लिए सरल बनाया गया था एक सरल पिरामिड, हो सकता है कि एक एक थोड़ा के साथ हल सरल चलना. और वास्तव में, क्या हम पर हो रहे थे यहाँ, इतना तर्क नहीं था शायद, इस बिंदु से, आप कर रहे हैं, क्योंकि आप थे की तुलना में अधिक आरामदायक छोरों या क्यों छोरों के साथ एक सप्ताह में, लेकिन सच यह है कि अलग तंग करने के लिए आप के साथ एक छोटे से आराम कर रहे हैं PHP बस के बारे में क्या नहीं है कि धारणा प्रोग्रामिंग. यह वास्तव में एक भाषा के रूप में इस्तेमाल किया जा सकता है कमांड लाइन प्रोग्राम लिखने के लिए. और वास्तव में, कि हम कोशिश कर रहे थे क्या है आपका ध्यान आकर्षित करने के लिए. यह एक कमांड लाइन PHP कार्यक्रम है. तो यहाँ सी कोड, जबकि सही सी में, पीएचपी के लिए सही नहीं. लेकिन कोड वास्तव में एक ही है. आप प्रश्नोत्तरी के लिए समाधान की तुलना प्रश्नोत्तरी 1 खिलाफ 0, आप पाएंगे कि इसके लिए छोड़कर, लगभग समान है कुछ डॉलर के संकेत और के लिए एक डेटा प्रकार का अभाव. विशेष रूप से, हम यहाँ एक नज़र रखना अगर, आप इस में, हम पुनरावृति देखेंगे कि मामला, 1 से 7 के माध्यम से ऊपर. हम यह 0 सूचकांक कर सकता था. लेकिन कभी कभी, मैं यह सिर्फ लगता है कि चीजों के बारे में सोचने के लिए मानसिक रूप से आसान 1-7. आप एक ब्लॉक चाहते हैं, तो दो ब्लॉक, फिर तीन, तो डॉट, डॉट, सात डॉट. हम 1 को जम्मू किए जा चुके हैं और फिर मैं करने के लिए ऊपर की ओर गिनती. और यहाँ सब कुछ है अन्यथा समान. लेकिन नोट के लायक हैं चीजों की एक जोड़ी. हम आपको इन दो लाइनों, यह पहली देना goofily एक कुटिया के रूप में नाम एक, तेज धमाके के लिए. और कहा कि अभी पथ निर्दिष्ट करता है, एक प्रोग्राम किया जा सकता है जिसमें फ़ोल्डर, आप उपयोग करना चाहते हैं पाया इस फाइल व्याख्या करने के लिए. और उसके बाद तो लाइन, बेशक, पीएचपी मोड में प्रवेश का मतलब है. और बहुत नीचे लाइन बाहर निकलने के लिए PHP मोड का मतलब है. और इस के साथ, सामान्य रूप में काम करता है, भाषाओं में व्याख्या की. आप लिखते हैं, तो यह एक तरह से परेशान है एक foo.php नामक एक फाइल में कार्यक्रम. और फिर अपने उपयोगकर्ताओं के लिए है बस , इस कार्यक्रम को चलाने के लिए, ठीक है, याद मैं टाइप करने के लिए "PHP अंतरिक्ष foo.php." तरह यदि और कुछ नहीं कष्टप्रद की. और यह भी पता चलता है कि अपने कार्यक्रम सब नहीं है जो PHP में लिखा है, कि उपयोगकर्ता के लिए रोशन. तो आप पूरी तरह. PHP निकाल सकते हैं व्याख्यान से याद करते हैं. और अगर आप वास्तव में. / फू कर सकते हैं आप इसे बनाने के द्वारा यह chmodded गया है निष्पादन योग्य. तो chmod एक + X foo कि किया होता. और तुम भी कुटिया यहाँ जोड़ें. लेकिन वास्तव में, समस्या पर हो रही थी कुछ इस तरह बाहर मुद्रण. कोई HTML, निश्चित रूप से कोई सी कोड, बस कुछ PHP. तो मिलो तो समस्या 25 में लौट आए. और 25 में, आप निम्न दिए गए थे एक था जो कंकाल कोड, बहुत आसान वेब पेज. और रसदार हिस्सा एचटीएमएल के लिहाज से नीचे था यहाँ, हम शरीर के अंदर है, जहां आदानों की अद्वितीय पहचान है कि एक फार्म जो के अंदर दो आदानों, एक था नाम, एक की एक विचार के साथ बटन के एक विचार के साथ. पहला, प्रकार पाठ था प्रकार का दूसरा सबमिट करें. और इसलिए हम वास्तव में, अधिक तुम्हें दे दिया आपको बस इतना, जरूरत से अधिक सामग्री तुम लोग जो साथ विकल्प था इस समस्या को हल करने के लिए. तुम सख्ती की जरूरत नहीं है इन ID के सभी. लेकिन यह आप को हल करने के लिए अनुमति देता है यह अलग अलग तरीकों से. और ऊपर शीर्ष पर, सूचना है कि उद्देश्य को गति प्रदान करने के लिए था इस तरह से एक खिड़की - हैलो, मिलो! - का उपयोग ब्राउज़र में पॉप करने के लिए अगर, सुपर सरल बदसूरत नहीं, चेतावनी समारोह. और हां, तो अंतत: यह नीचे फोड़े धारणा किसी भी तरह के लिए सुनने के लिए प्रपत्र क्लाइंट पक्ष की प्रस्तुतियाँ , किसी भी तरह नहीं सर्वर साइड, द्वारा कि प्रस्तुत करने के लिए जवाब उपयोगकर्ता द्वारा लिखे गए मूल्य हथियाने नाम क्षेत्र में, और उसके बाद एक चेतावनी के शरीर में यह प्रदर्शित करना. तो आप ऐसा कर सकते हैं एक तरह से साथ है एक छोटे से लग रहा है जो jQuery, पहली बार में वाक्य रचना से हैरान करनेवाला. आप शुद्ध डोम कोड के साथ ऐसा कर सकते हैं - आईडी के आधार पर document.getelement. लेकिन इस संस्करण पर एक नज़र रखना. मैं महत्वपूर्ण का एक जोड़ा है लाइनों पहले. एक तो, हम है, जो इस लाइन है आप देखा हो सकता है क्या करने के लिए समान मुझे विश्वास है, में, form2.html 9 सप्ताह में वर्ग से. और यह सिर्फ निष्पादित, कह रहा है निम्नलिखित कोड जब दस्तावेज़ तैयार है. यह महत्वपूर्ण होने के वजह से ही HTML पृष्ठों को शीर्ष पढ़ रहे हैं सही करने के लिए छोड़ दिया तल,. और इसलिए, आप करने की कोशिश कुछ डोम अप करने के लिए यहाँ कोड में कुछ तत्व, कुछ एचटीएमएल टैग, कि नीचे है यहाँ, आप भी जल्द ही यह कर रहे हैं, इस भी नहीं है क्योंकि स्मृति में पढ़ा गया. तो इस document.ready कह कर रेखा, हम कह रहे हैं, यहाँ कुछ कोड, ब्राउज़र है. लेकिन पूरे जब तक इस पर अमल नहीं करते दस्तावेज़ तैयार है, कि डोम है पेड़ स्मृति में मौजूद है. यह एक छोटे से अधिक है वाक्य रचना से एक हैं, तो सीधा थोड़ा अलग है, मैं कह रहा हूँ जहाँ, ले लो जिसका अद्वितीय HTML तत्व पहचानकर्ता आदानों है. कि क्या हैश टैग है , अद्वितीय पहचान को दर्शाता है. और फिर मैं बुला रहा हूँ. सबमिट करें. तो. यहां पेश एक समारोह अन्यथा, है एक विधि के रूप में जाना जाता है, कि बाएं हाथ पर वस्तु के अंदर मैं उजागर नहीं किया है कि वहाँ की ओर. आप एक वस्तु के रूप में आदानों के बारे में सोचना तो अगर स्मृति में - और वास्तव में यह है. यह एक पेड़ में एक नोड है - . साधन प्रस्तुत जब इस फार्म के साथ इस आईडी से प्रस्तुत किया जाता है, पर अमल निम्नलिखित कोड. मुझे परवाह नहीं है क्या का नाम समारोह मैं निष्पादित कर रहा हूँ है. तो यहाँ मैं क्या है, पहले के रूप में उपयोग कर रहा हूँ लैम्ब्डा समारोह या एक बुलाया गुमनाम समारोह. यह सब बौद्धिक नहीं है यह कोई नाम नहीं है दिलचस्प अन्य की तुलना में, आप ही कर रहे हैं, जो ठीक है कभी एक बार यह फोन करने वाला. और अंदर वहाँ मैं वास्तव में संभाल फार्म जमा. मैं पहली बार एक चर घोषित मूल्य कहा जाता है. और फिर इस के प्रभाव क्या है यहाँ भाग अब प्रकाश डाला? कि एक पर क्या करता है मेरे लिए उच्च स्तर? दर्शक: यह मूल्य हो जाता है कि उपयोगकर्ता नीचे HTML में नहीं था. यह तो उस आईडी हो जाता है और इसका मूल्य पाता है. डेविड जे मालन: बिल्कुल. यह अद्वितीय जिसका, नोड पकड़ लेता है पहचानकर्ता नाम है. यह उसमें मूल्य हो जाता है जो है, शायद, क्या उपयोगकर्ता उसे या खुद टाइप. और फिर यह है कि स्टोर में चर मूल्य कहा जाता है. एक अलग रूप में, तुम भी हो सकता था एक छोटे से अलग इस किया. कुछ करने से पूरी तरह से स्वीकार्य झूठ वर मूल्य हो जाता है document.getElementById. यह एक छोटे से है और यह कारण है jQuery का उपयोग नहीं करने के लिए कठिन. "नाम". मूल्य. तो पूरी तरह से स्वीकार्य. ऐसा करने के लिए विभिन्न तरीके. jQuery बस एक छोटे से अधिक संक्षिप्त और हो जाता है निश्चित रूप से अधिक लोकप्रिय प्रोग्रामर के बीच. अब, मैं एक विवेक के एक बिट कर रहा हूँ क्योंकि समस्या में, जाँच बयान हम स्पष्ट रूप से कहा, अगर अभी तक आपके द्वारा लिखा नहीं गया है उसके या उसके एक अलर्ट नहीं दिखा है, नाम है. लेकिन अगर आप अभी से, उस के लिए जाँच कर सकते हैं एक के लिए खाली स्ट्रिंग के लिए जाँच अगर वहाँ बोली गंदें शब्द बोलना वास्तव में वहाँ कुछ भी नहीं है. लेकिन यह बोली गंदें शब्द बोलना के बराबर नहीं है, मैं अलर्ट कॉल करना चाहते हैं. और यहाँ दिलचस्प हिस्सा है हम, प्लस ऑपरेटर का उपयोग कर रहे हैं जो जावास्क्रिप्ट में क्या करता है? जुटना. तो यह PHPs डॉट ऑपरेटर की तरह है. एक ही विचार है, थोड़ा अलग वाक्यविन्यास. और मैं सिर्फ स्ट्रिंग पैदा कर रहा हूँ कि आप स्क्रीन शॉट पर देखा - हैलो, अमुक. और फिर पिछले विस्तार यह है. क्यों मैं झूठे अंदर वापसी इस अनाम समारोह का? दर्शक: कोई मूल्य नहीं है. आप प्रपत्र में डाल दिया. मूल्य नहीं है, तो यह सिर्फ कहते हैं, खाली करने के लिए बराबर है, तो यह करते हैं. कि प्रस्तुत करने में एक रिक्त हुई थी. डेविड जे मालन: ठीक है. हालांकि सावधानी से. यहाँ और कोई नहीं है. और वह वापसी झूठी बाहर है स्थितियां अगर की. तो यह, वापसी झूठी, लाइन पर प्रकाश डाला कोई बात नहीं क्या जब कार्यान्वित फार्म प्रस्तुत है. क्या इस के झूठे अंदर लौटने करता है यह कहा जाता है के रूप में ईवेंट हैंडलर,, प्रश्न में घटना प्रस्तुत करने जा रहा है? दर्शक: क्योंकि यह केवल एक बार होता है. डेविड जे मालन: केवल एक बार होता है. काफी नहीं है. हाँ? दर्शक: यह से फार्म रोकता , डिफ़ॉल्ट व्यवहार के लिए प्रस्तुत पृष्ठ पुनः लोड करना होगा. डेविड जे मालन: बिल्कुल. तो मुझे लगता है, शब्द यहां प्रस्तुत ओवरलोडिंग हूँ मैं कह रहा हूँ क्योंकि, रूप है प्रस्तुत किया जा रहा है. जैसा कि आप सुझाव लेकिन, यह वास्तव में नहीं है सच HTTP तरीके से प्रस्तुत किया गया. आप की वजह से, भेजें पर क्लिक करने के लिए हमारे onsubmit हैंडलर, हम बीच में रोक रहे हैं कि फार्म जमा तो बात करो. हम तो हमारी बात कर रहे हैं जावा स्क्रिप्ट कोड के साथ. लेकिन मैं जानबूझ कर गलत लौट रहा हूँ मैं ऐसा करना नहीं चाहता क्योंकि एक दूसरे विभाजन बाद पूरे फार्म के लिए है खुद वेब को प्रस्तुत किया बदलकर महत्वपूर्ण मूल्य जोड़े के साथ सर्वर ऐसा कुछ हो यूआरएल क्यू = बिल्लियों या जो कुछ भी हमने किया, उदाहरण के लिए, कक्षा में. मुझे लगता है कि ऐसा करने के लिए नहीं करना चाहती क्योंकि इस के लिए कोई सर्वर सुन नहीं है फार्म जमा. यह विशुद्ध रूप से जावास्क्रिप्ट कोड में किया है. मैं भी नहीं था और यही कारण है एक कार्रवाई, मेरे फार्म पर विशेषता क्योंकि मैं इस के लिए इरादा नहीं है कभी सर्वर से जाना. तो यह प्रस्तुत किया जा रहा है. लेकिन हम उस प्रपत्र को बेधने कर रहे हैं जमा और डिफ़ॉल्ट को रोकने करने के लिए वास्तव में है जो व्यवहार, सभी तरह सर्वर से जाना. दर्शक: तो यह क्लाइंट पक्ष रखते हुए. डेविड जे मालन: ध्यान में रखते हुए यह क्लाइंट साइड. बिल्कुल सही. अगला ऊपर MySQL ओह मेरे था. आरओबी BOWDEN: ठीक है. तो यह पहला सवाल आम तौर पर किया गया था लोगों के लिए किसी न किसी. बाद में लोगों को बेहतर चला गया. तो आप सही डेटा का चयन किया था इन स्तंभों के लिए दोनों प्रकार के. और इन दोनों कुछ है उनके बारे में बातें है कि चुनाव कठिन बनाते हैं. तो INT एक मान्य नहीं था संख्या के लिए लिखें. एक 12 अंकों खाते कारण किया जा रहा संख्या, एक पूर्णांक के लिए काफी बड़ा नहीं है कुल अंक की दुकान. तो एक मान्य विकल्प एक बड़ा हो गया होता आप जानते हैं कि करने के लिए होता है अगर int. एक अन्य विकल्प हो सकता था लंबाई 12 की एक चार क्षेत्र. तो उन दोनों में से किसी काम किया होता. इंटरनैशनल नहीं होगा. अब, संतुलन, वापस pset7 करने लगता है. तो हम विशेष रूप से करने के लिए दशमलव इस्तेमाल किया शेयर या के मूल्य की दुकान - डेविड जे मालन: नकद. आरओबी BOWDEN: नकद. हम राशि की दुकान करने के लिए दशमलव इस्तेमाल किया उपयोगकर्ता वर्तमान में है कि नकद. तो हम ऐसा कारण है याद है, क्योंकि, तैरता है. परिशुद्धता में चल मतलब नहीं है. यह ठीक नकदी की दुकान नहीं कर सकते हम जैसे मूल्यों यहाँ चाहते हैं. तो दशमलव ठीक स्टोर करने में सक्षम है कहने के लिए कुछ है, दो दशमलव स्थानों. संतुलन, हम यह चाहते हैं यही कारण है कि नाव दशमलव और नहीं हो. डेविड जे मालन: और भी, भी, हालांकि यह अन्य में चतुर गया हो सकता है सोचने के लिए संदर्भों, शायद इस एक पूर्णांक के लिए एक मौका है. मैं सिर्फ का ट्रैक रखता हूँ पैसे में बातें. हम स्पष्ट रूप से डिफ़ॉल्ट रूप से पता चला है क्योंकि , 100.00 होने का मूल्य उस यह सिर्फ एक पूर्णांक हो सकता है इसका मतलब है. और भी संख्या के साथ एक और सूक्ष्मता यह मतलब नहीं था कि था एक चाल सवाल है. लेकिन याद है कि MySQL में एक पूर्णांक, जैसे सी में, कम से कम में उपकरण, 32 बिट है. और हम करने के लिए आप की उम्मीद नहीं है, भले ही ठीक से पता है कि कितने अंक कि इसका मतलब है, याद है कि सबसे बड़ी संख्या आप संभवतः प्रतिनिधित्व कर सकते हैं एक 32 बिट संख्या के साथ मोटे तौर पर क्या है? हम हमेशा क्या संख्या कहते हैं? 2 मोटे तौर पर क्या है, जो 32 के लिए? आप ठीक पता नहीं करना पड़ेगा. लेकिन मोटे तौर पर जीवन में उपयोगी है. यह लगभग 4 अरब डॉलर का है. इसलिए हम एक बार कुछ कहा है कि. मैं जानता हूँ कि मुझे लगता है कि एक बार कुछ कहा है. और यह लगभग 4 अरब डॉलर है. और वह एक अच्छा नियम है अंगूठे का पता करने के लिए. आप 8 बिट, 256 है, तो जादुई संख्या है. आप 32 बिट, 4 है, तो अरब दे या ले. तो तुम सिर्फ नीचे 4 अरब लिखते हैं, आप यह तुलना में कम अंक देखेंगे कि कि स्पष्ट रूप से नहीं है, जिसका अर्थ है 12, कब्जा करने के लिए पर्याप्त अर्थवत्ता एक 12 अंकीय खाता संख्या. आरओबी BOWDEN: ठीक है. तो अन्य लोगों को बेहतर चला गया. ऐसा लगता है कि बैंक एक 20 डॉलर मासिक लगाता सभी खातों पर रखरखाव शुल्क. क्या एसक्यूएल क्वेरी सकता है बैंक के साथ भले ही, हर गिनती से 20 डॉलर घटा यह कुछ नकारात्मक शेष में परिणाम? तो बुनियादी तौर पर, चार कर रहे हैं प्रश्नों के मुख्य प्रकार - , सम्मिलित का चयन करें, अद्यतन, और हटाना. तो हम क्या कर रहे हैं लगता है यहां का उपयोग करने के लिए जा रहे हैं? अद्यतन. तो चलिए एक नजर डालते हैं. तो यहाँ हम अपडेट कर रहे हैं. क्या तालिका हम खातों को अपडेट कर रहे? तो खातों को अद्यतन करने. और फिर वाक्यविन्यास, क्या कहते हैं खातों में हम अद्यतन कर रहे हैं? ठीक है, हम करने के लिए बराबर संतुलन स्थापित कर रहे हैं शेष राशि शून्य से 20 के मौजूदा मूल्य. तो यह सभी पंक्तियों को अद्यतन करेगा खातों की, घटाकर संतुलन से $ 20. डेविड जे मालन: यहाँ एक आम गलती, हम कभी कभी यह माफ कर दिया है, भले ही वास्तव में यहां PHP कोड के लिए गया था क्वेरी समारोह बुला या डाल सब कुछ के आसपास उद्धरण कि वहाँ होने की जरूरत नहीं थी. आरओबी BOWDEN: MySQL है कि याद रखें PHP से एक अलग भाषा. हम PHP में MySQL लिख सकता हो. और पीएचपी तो यह भेज रहा है सर्वर के लिए खत्म हो. क्रम में लेकिन आप PHP की जरूरत नहीं है एक सर्वर के साथ संवाद. डेविड जे मालन: बिल्कुल. डॉलर के संकेत के साथ तो कोई चर इस संदर्भ में किया जाना चाहिए. यह सिर्फ गणित के सब कर सकते हैं डेटाबेस के भीतर ही. आरओबी BOWDEN: ठीक है. तो अगले एक. यह अगले एक है? हाँ. क्या एसक्यूएल क्वेरी सकता है बैंक के साथ तो इसकी के खाता संख्या पुनः प्राप्त सबसे अमीर ग्राहकों के साथ उन 1,000 से अधिक शेष? तो चार मुख्य प्रकार की जो हम यहाँ चाहते करने जा रहे हैं? चुनें. इसलिए हम चयन करना चाहते हैं. क्या हम चयन करना चाहते हैं? हम चयन करने के लिए क्या स्तंभ चाहते हैं? हम विशेष रूप से चाहते हो जाएगा संख्या को चुनने के लिए. लेकिन आप स्टार, हमने कहा अगर यह भी स्वीकार किया है कि. तो क्या तालिका से संख्या का चयन करें? लेखा. और फिर हम हालत चाहते हैं? जहां 1,000 से अधिक संतुलन. हम भी अधिक से अधिक स्वीकार किए जाते हैं से अधिक या बराबर. पिछले एक. क्या एसक्यूएल क्वेरी सकता है बैंक के साथ करीब, यानी, हर खाते को नष्ट कि $ 0 के एक संतुलन है? तो चार के जो हम कर रहे हैं का उपयोग करना चाहते करने के लिए जा रहे हैं? हटाएँ. तो उस के लिए वाक्यविन्यास? क्या तालिका से हटाएं? लेखा. और फिर शर्त है जिस पर हम इसे हटाना चाहते हैं - शेष राशि शून्य के बराबर होती है. तो खातों से सभी पंक्तियों को हटाने शेष राशि शून्य है. इनमें से किसी पर सवाल? क़तार करना चाहते हैं? डेविड जे मालन: पंक्ति गाइड. तो यह एक में, हम आपको एक कुछ दिया हम एक का पता लगाया है कि परिचित संरचना structs की बगल वर्ग में बिट, एक डेटा था जो भावना में संबंधित संरचना. एक पंक्ति के साथ हालांकि फर्क है हम किसी भी तरह याद था कि जो बड़े में, कतार के सामने था हम और अधिक कर सकता है बात यह है कि इतना स्मृति के कुशल उपयोग, कम से कम हम एक सरणी का उपयोग कर रहे थे. क्योंकि याद है, हम एक सरणी है, तो अगर, उदाहरण के लिए, इस के सामने है कतार, मैं यहाँ कतार में मिलता है, और फिर किसी लाइन में हो जाता है मेरे पीछे मेरे पीछे मेरे,,, और पीछे एक व्यक्ति लाइन से बाहर कदम, तुम सकता है, हम हमारे मानव के कुछ देखा वर्ग में स्वयंसेवकों, हर कोई है इस तरह से पाली. लेकिन सामान्य तौर पर, हर कोई कर होने कुछ समय का सबसे अच्छा उपयोग नहीं है एक कार्यक्रम में, क्योंकि यह मतलब है कि आपके एल्गोरिथ्म में क्या चल रहा है उपगामी रनिंग टाइम? यह रैखिक है. उस तरह की बेवकूफी है पसंद है और मैं महसूस करता हूँ. लाइन में अगले व्यक्ति बगल में है तो में जाने के लिए माना जाता है, जो व्यक्ति दुकान, वे सभी के लिए नहीं है एक साथ ले जाने के लिए. बस उस व्यक्ति बंद साहसपूर्ण हो जाने दो समय उदाहरण के लिए, जब आता है. इसलिए हम वहाँ समय का एक सा बचा सकता है. और ऐसा करने के लिए है कि हालांकि, इसका मतलब है कि उस कतार के सिर या लाइन के सामने करने जा रहा है उत्तरोत्तर गहरा और गहरा स्थानांतरित सरणी में और अंत में हो सकता है हम एक प्रयोग कर रहे हैं वास्तव में चारों ओर लपेट लोगों को स्टोर करने के लिए सरणी इस कतार में. तो तुम लगभग के बारे में सोच सकते हैं एक परिपत्र डेटा के रूप में सरणी इस अर्थ में कि संरचना. तो आप किसी भी तरह का ट्रैक रखने के लिए है इसका आकार या इसके बारे में वास्तव में अंत और फिर यह की शुरुआत है. इसलिए हम आप की घोषणा है कि प्रस्ताव ऐसा ही एक पंक्ति, कॉलिंग यह क्यू, सिर्फ एक पत्र. तो फिर हम सामने हो कि प्रस्ताव शून्य करने के लिए और कहा कि initialized आकार शून्य करने के लिए प्रारंभ किया. इसलिए अभी, वहाँ कुछ भी नहीं उस पंक्ति के अंदर. और हम पूरा करने के लिए आप से पूछना में नीचे enqueue का कार्यान्वयन समारोह n करने के लिए कहते हैं कि इस तरह से है फिर क्यू के अंत और सच देता है. लेकिन क्यू पूर्ण या ऋणात्मक है, तो समारोह के बजाय झूठी वापस आ जाना चाहिए. और हम आपको एक जोड़े को दे दी है मान्यताओं की. लेकिन वे वास्तव में कार्यात्मक नहीं कर रहे हैं प्रासंगिक, कि बस bool मौजूद है, तकनीकी तौर पर, bool नहीं करता है, क्योंकि आप शामिल जब तक सी में मौजूद एक कुछ हैडर फ़ाइल. इसलिए कि सिर्फ यकीन है कि वहाँ कर रहा था कोई यह एक चाल है गया बात का सवाल तरह. तो enqueue, हम नमूने में प्रस्तावित के रूप में निम्नानुसार समाधान को लागू करने के लिए. एक है, हम पहले आसानी जाँच, कम लटका फल. कतार पूर्ण या संख्या है कि आप सम्मिलित करने के लिए कोशिश कर रहे हैं कम है हम में कहा जो शून्य, से समस्या के विनिर्देशन चाहिए हम केवल चाहते हैं, क्योंकि अनुमति नहीं दी गैर नकारात्मक मूल्यों, तो आप चाहिए अभी तुरंत वापसी झूठी. तो कुछ अपेक्षाकृत आसान जाँच त्रुटि. आपको लगता है कि वास्तविक जोड़ना चाहते हैं, हालांकि, तो संख्या, आप का एक सा करना पड़ा यहाँ सोच. यह एक छोटे से परेशान है और इस जहाँ है मानसिक रूप से, आप के लिए है क्योंकि wraparound संभाल करने के लिए बाहर निकालने के. लेकिन विचार के रोगाणु कि यहाँ का है हमारे लिए ब्याज कि wraparound है अक्सर मॉड्यूलर अंकगणितीय निकलता है और माड आपरेटर, प्रतिशत पक्ष, अगर आप एक बड़ा मूल्य से यात्रा कर सकते हैं वापस शून्य करने के लिए और फिर एक और दो और तीन और फिर वापस चारों ओर शून्य करने के लिए, एक और दो और इसके आगे के तीन और बार - बार. तो हम ऐसा करने का प्रस्ताव तरीका है हम में इंडेक्स करना चाहते हैं कि संख्या जहां बुलाया सरणी हमारे पूर्णांकों झूठ बोलते हैं. लेकिन वहाँ पाने के लिए, हम पहले क्या करना चाहते हैं कतार के आकार, लेकिन जो कुछ भी है तब उस को जोड़ने के लिए जो कुछ भी सूची के सामने है. और उस के प्रभाव में हमें डाल दिया है सही कतार में स्थिति और मान नहीं है कि लाइन में पहले व्यक्ति शुरुआत में है, जो वह या वह पूरी तरह से हो सकता है अगर हम यह भी हर किसी को जा रहे थे. लेकिन हम सिर्फ काम बना रहे हैं खुद के लिए हम लिया उस विशेष पथ. इसलिए हम अपेक्षाकृत सरल इसे रख सकते हैं. हम याद करने के लिए है कि हम सिर्फ कतार में एक पूर्णांक गयी. और फिर हम सिर्फ सच वापसी. इस बीच, विपंक्ति में, हम पूछा आपको निम्न कार्य करना. ऐसे में इसे लागू कि यह dequeues, कि, हटा और रिटर्न है कतार के सामने Int. INT निकालने के लिए, यह suffices इसे भूल जाओ. आप अपनी थोड़ी ओवरराइड की जरूरत नहीं है. तो यह वास्तव में अभी भी वहाँ है. सिर्फ एक हार्ड ड्राइव पर डेटा की तरह, हम सिर्फ इस तथ्य की अनदेखी कर रहे हैं यह वहाँ अब है कि. क्यू खाली है और, अगर हम चाहिए बजाय नकारात्मक वापसी 1. तो यह मनमाना लगता है. क्यों नकारात्मक 1 वापसी बजाय झूठी की? हाँ. दर्शक: क्यू जमा कर रहा है सकारात्मक मूल्यों. आप केवल सकारात्मक मूल्यों की दुकान के बाद क्यू में, नकारात्मक एक त्रुटि है. डेविड जे मालन: ठीक है, सच. हम केवल सकारात्मक भंडारण कर रहे हैं तो इसलिए कि मान या शून्य, तो यह ठीक है एक प्रहरी के रूप में एक नकारात्मक मूल्य वापस मूल्य, एक विशेष प्रतीक. लेकिन तुम वहाँ के इतिहास को फिर से लिखना कर रहे हैं क्योंकि हम ही कर रहे हैं कारण गैर नकारात्मक मूल्यों लौटने हम चाहते हैं क्योंकि है एक प्रहरी मूल्य है. इसलिए अधिक विशेष रूप से, क्यों नहीं बस त्रुटियों के मामले में झूठी वापसी? हाँ. दर्शक: आप असफल हुए एक पूर्णांक वापस जाने के लिए. डेविड जे मालन: बिल्कुल. सी हो जाता है और जहां यह है सुंदर बाधा. क्या आप जा रहे हैं कह रहे हैं एक पूर्णांक वापस जाने के लिए, आप मिल गया है एक पूर्णांक वापस जाने के लिए. आप कल्पना और लौट प्रारंभ नहीं कर सकता एक bool या एक नाव या एक स्ट्रिंग या ऐसा कुछ. अब, इस बीच, जावास्क्रिप्ट और PHP और कुछ अन्य भाषाओं में कर सकते हैं, वास्तव में, आप अलग लौट गए मूल्यों के प्रकार. और कहा कि वास्तव में उपयोगी हो सकता है, जहां आप सकारात्मक ints, शून्य लौट सकता है, नकारात्मक ints, या झूठी या अशक्त भी त्रुटि दर्शाता है. लेकिन हमारे पास नहीं है कि सी. में बहुमुखी प्रतिभा तो विपंक्ति साथ, क्या हम है क्या करने का प्रस्ताव है - आरओबी BOWDEN: तुम गलत लौट सकते हैं. यह हैश सिर्फ इतना है कि झूठी है है शून्य करने के लिए झूठी परिभाषित. तो आप वापसी झूठी हैं, आप शून्य लौट रहे हैं. और शून्य, हमारे कतार में एक वैध बात है नकारात्मक 1 नहीं है जबकि अगर झूठी नकारात्मक 1 हो हुआ. लेकिन आप भी नहीं करना चाहिए पता चला है कि जरूरत है. डेविड जे मालन: यह है यही कारण है कि मैं यह भी नहीं कहा. आरओबी BOWDEN: लेकिन यह सच नहीं था आप गलत नहीं लौट सकते हैं. डेविड जे मालन: यकीन है. तो विपंक्ति, हम स्वीकार नोटिस अपने तर्क के रूप में शून्य. हम नहीं कर रहे हैं क्योंकि और है कि अंदर कुछ भी गुजर हम सिर्फ तत्व निकालना चाहते हैं कतार के मोर्चे पर. तो कैसे हम यह कर के बारे में जाना हो सकता है? खैर, सबसे पहले, चलो यह करते हैं त्वरित मानसिक स्वास्थ्य की जांच. कतार आकार 0 है, तो वहाँ किया जा करने के लिए कोई काम. 1 नकारात्मक लौटें. डन. इसलिए कि मेरे कार्यक्रम की कुछ लाइनें है. इसलिए केवल चार लाइनों रहते हैं. तो यहाँ मैं घटती करने का फैसला आकार. और प्रभावी ढंग से आकार decrementing मैं भूल रहा है कि इसका मतलब है वहाँ कुछ में है. लेकिन मैं यह भी अद्यतन करने के लिए जहां संख्या के सामने हैं. तो क्या है कि, मैं जरूरत दो बातें करने के लिए. मैं पहले क्या नंबर याद रखने की जरूरत कतार के सामने है, मुझे लगता है कि बात वापस करने की आवश्यकता है. इसलिए मैं गलती से भूल जाना चाहता हूँ नहीं है इसके बारे में और फिर इसके ऊपर लिखना. मैं सिर्फ एक पूर्णांक में याद करने के लिए जा रहा हूँ. और अब, मैं अद्यतन करना चाहते हैं q.front एक q.front किया जाना है. इस में पहला व्यक्ति था तो अगर रेखा, अब, मैं करने के लिए प्लस 1 क्या करना चाहते हैं लाइन में अगले व्यक्ति पर बात. लेकिन मुझे लगता है कि wraparound संभालना है. और क्षमता एक वैश्विक स्थिर है, तो कि मुझे यकीन करने देने जा रहा है मैं बहुत ही में अंतिम व्यक्ति को इंगित रूप रेखा, सापेक्ष आपरेशन लाएगा पर शून्य करने के लिए मुझे वापस लाइन के सामने. और कहा कि यहां wraparound संभालती है. और फिर मैं n लौटने के लिए आगे बढ़ें. अब, सच पूछिये तो, मैं नहीं था n घोषित करने के लिए है. मैं इसे ले लो और यह स्टोर करने के लिए नहीं था अस्थायी रूप से मूल्य है क्योंकि अभी भी वहाँ. तो मैं सिर्फ सही गणित कर सकता है पूर्व प्रमुख लौटने के लिए कतार की. लेकिन मैं सिर्फ यह और अधिक स्पष्ट किया गया था कि लगा वास्तव INT हड़पने के लिए, यह डाल एन में, और उसके बाद उस लौटने स्पष्टता के लिए, लेकिन सख्ती जरूरी नहीं. अरे. वे सभी मेरे सिर में उच्चरण कर रहे हैं. आरओबी BOWDEN: तो पहला सवाल बाइनरी पेड़ समस्या है. तो पहला सवाल हम कर रहे हैं, है इन नंबरों दिया. और हम किसी भी तरह में उन्हें सम्मिलित करना चाहते हैं इन नोड्स यह है कि इस तरह के एक वैध द्विआधारी खोज पेड़. तो एक बात के बारे में याद करने के लिए द्विआधारी खोज पेड़ यह नहीं है कि है सिर्फ इतना है कि बाईं ओर बात करने के लिए कम और बात है सही अधिक है. यह करने की जरूरत है कि पूरे पेड़ को बाईं कम है, और पूरे पेड़ सही करने के लिए अधिक से अधिक है. मैं फिर शीर्ष पर यहां 34 रखा है, और यदि हां मैं यहाँ 20 रखा, तो इतना है कि वैध है अब तक, क्योंकि 34 यहाँ. 20 छोड़ दिया जा रहा है. तो यह है कि कम है. लेकिन मैं तो यहां 59 नहीं डाल सकते क्योंकि 59 20 के अधिकार पर है, भले ही यह 34 की बाईं तरफ अभी भी है. मन में है कि बाधा के साथ तो, शायद इस को हल करने का सबसे आसान तरीका समस्या है करने के लिए बस की तरह इन नंबरों की - इसलिए 20, 34, 36, 52, 59, 106. और फिर उन डालने बाएं से दाएं. इसलिए 20 यहाँ जाता है. 34 यहाँ जाता है. 36 यहाँ जाता है. 52, 59, 106. और तुम भी साथ पता चल सकता कुछ में plugging और साकार, ओह, मैं पर्याप्त संख्या नहीं है, इंतजार यहाँ पर इस में भरने के लिए. इसलिए मैं reshift करने की जरूरत है मेरी मार्ग नोट होने जा रहा है. लेकिन, अगर अंतिम तीन में कि नोटिस बाएं से दाएं आप पढ़ते हैं, उस में है बढ़ती आदेश. तो अब, हम घोषित करने के लिए क्या चाहते हैं संरचना के लिए होने जा रहा है इस पेड़ में नोड्स. एक द्विआधारी पेड़ में तो हम क्या जरूरत है? इसलिए हम प्रकार के एक मूल्य है INT, तो कुछ इंट मूल्य. मुझे लगता है हम क्या कहा जाता है पता नहीं है समाधान में यह - n int. हम छोड़ बच्चे के लिए एक संकेत की जरूरत और सही बच्चे के लिए एक संकेत. इसलिए यह इस तरह लग रहा है. और यह वास्तव में से पहले देख लेंगे दोगुना से जुड़े कब सूची सामान, इसलिए नोटिस - मैं स्क्रॉल करने के लिए किया जा रहा हूँ सब जिस तरह से वापस नीचे समस्या 11 के लिए. इसलिए, यह इस के समान दिखता है नोटिस हम सिर्फ इन कॉल करने के लिए होता है, सिवाय विभिन्न नामों. हम अभी भी एक पूर्णांक है मूल्य और दो संकेत दिए. यह बजाय इलाज की सिर्फ है कि अगली बात की ओर इशारा करते के रूप में संकेत और पिछले बात है, हम इलाज कर रहे हैं संकेत एक छोड़ दिया बच्चे को इंगित करने के लिए और सही बच्चा. ठीक है. इसलिए कि हमारे संरचना नोड है. और अब, केवल समारोह हम करने की आवश्यकता इस पार है के लिए, लागू जो हम पेड़, छपाई पर जाना चाहते क्रम में पेड़ के मूल्यों बाहर. तो यहाँ देख, हम मुद्रित करने के लिए चाहते हो जाएगा बाहर 20, 34, 36, 52, 59, और 106. हम कैसे पूरा करते हैं? इसलिए यह बहुत समान है. आप अतीत परीक्षा में देखा तो समस्या तुम बाहर मुद्रित करने के लिए चाहते थे कि बीच में कॉमा से पूरे वृक्ष सब कुछ, यह भी वास्तव में था कि तुलना में आसान. तो यहाँ समाधान है. यह काफी आसान था आप बारी बारी से अगर ऐसा किया था. किसी को भी प्रयास किया, तो मुझे नहीं पता iteratively यह करने के लिए. लेकिन पहले, हम अपने बेस मामला है. क्या जड़ रिक्त है तो क्या होगा? तो हम बस वापस जाने के लिए जा रहे हैं. हम कुछ भी मुद्रित नहीं करना चाहती. वरना हम पार करने के लिए जा रहे हैं बारी बारी से नीचे. पूरे बाईं सबट्री प्रिंट. तो कम सब कुछ मुद्रित मेरे वर्तमान मूल्य से अधिक है. और फिर मैं अपने आप को मुद्रित करने के लिए जा रहा हूँ. और फिर मैं नीचे recurse करने के लिए जा रहा हूँ मेरे पूरे सही सबट्री, इसलिए सब कुछ मेरे मूल्य से अधिक. और यह मुद्रित करने के लिए जा रहा है आदेश में सब कुछ बाहर. कैसे यह वास्तव में पर सवाल कि accomplishes? दर्शक: मैं एक सवाल है [सुनाई] पर. आरओबी BOWDEN: करीब पहुंच तो एक ही रास्ता किसी भी पुनरावर्ती समस्या सिर्फ सोचने के लिए है यह पसंद के बारे में आप सोचना होगा के बारे में सभी कोने मामलों. इसलिए हम चाहते हैं कि पर विचार इस पूरे पेड़ को मुद्रित. इतना सब हम पर ध्यान केंद्रित करने जा रहे हैं इस विशेष नोड है - 36. पुनरावर्ती कॉल, हम नाटक उन सिर्फ काम. तो यहाँ, करने के लिए इस पुनरावर्ती कॉल पार, हम भी बिना सोचे इसके बारे में, बस छोड़ दिया traversing तीन, पहले से ही 20 कि प्रिंट की कल्पना और हमारे लिए 34. और फिर जब हम अंत में बारी बारी पर पार कॉल ठीक है, कि सही ढंग से मुद्रित होगा 52, 59, और हमारे लिए 106. तो यह 20, 34 मुद्रित कर सकते हैं, यह देखते हुए और अन्य, 52, 59, 108 मुद्रित कर सकते हैं हम ऐसा करने में सक्षम होने की जरूरत है सभी प्रिंट है उस के बीच में ourself. इसलिए हमारे सामने सब कुछ बाहर प्रिंट. Ourself प्रिंट, इसलिए वर्तमान नोड प्रिंट 36, नियमित printf, और उसके बाद हमें बाद सब कुछ प्रिंट. डेविड जे मालन: यह जहां प्रत्यावर्तन है वास्तव में सुंदर हो जाता है. यह विश्वास की इस अद्भुत छलांग है जहां आप काम का सबसे नन्हा सा है. और फिर तुम चलो किसी को वरना बाकी है. और वह किसी और को आप, विडंबना यह है कि है. गंभीर ब्राउनी अंक के लिए, तो अगर आप सवाल पर स्क्रॉल - आरओबी BOWDEN: सवालों पर? डेविड जे मालन: और करने के लिए एक छोटे से नीचे जहां संख्या, किसी को पता नहीं इन नंबरों से आते हैं? आरओबी BOWDEN: मैं सचमुच पता नहीं है. डेविड जे मालन: वे दिखाई देते हैं प्रश्नोत्तरी भर में. दर्शक: वे एक ही नंबर हैं? डेविड जे मालन: उन लोगों की संख्या. एक छोटी सी ईस्टर अंडे. तो पर ऑनलाइन देख आप उन लोगों के लिए घर, आप को ईमेल के माध्यम से हमें बता सकते हैं heads@CS50.net क्या महत्व इन आवर्ती छह नंबर हैं प्रश्नोत्तरी 1 के दौरान, हम आपको स्नान करेंगे फाइनल में अद्भुत ध्यान के साथ व्याख्यान और एक तनाव गेंद. सूक्ष्म, अच्छा लगा. आरओबी BOWDEN: कोई अंतिम सवाल प्रश्नोत्तरी पर कुछ के बारे में?