एक ब्राउज़र गेम सर्वर का विकास ... एक अनुशासन के रूप में

पिछली गर्मियों के मध्य में, Mail.Ru Group के क्लाइंट गेम्स विभाग के मेलिंग प्रोग्राम के लिए एक पत्र भेजा गया था - “MSTU के साथ हमारे संयुक्त प्रोजेक्ट में जावा पाठ्यक्रम के एक शिक्षक की स्थिति के लिए एक प्रतियोगिता की घोषणा की गई है एन। ई। बाउमन। " एक प्रोग्रामर और विभाग के कर्मचारी के रूप में, मुझे यह पत्र भी मिला। भौतिकी और प्रौद्योगिकी संस्थान के स्नातक के रूप में, और अतीत में, एक शिक्षक और शोधकर्ता, उन्होंने जवाब देने का फैसला किया।
इसलिए मेरे लिए टेक्नोपार्क में एक शिक्षक के रूप में काम करने की कहानी शुरू हुई। वास्तव में इस बारे में (काम के बारे में, टेक्नोपार्क के बारे में, मेरे पाठ्यक्रम के बारे में और छात्रों के बारे में) मैं आपको बताना चाहता हूं।

जावा * पाठ्यक्रम चर्चा डिमोटिवेटर
(*) डिमोनेटिवेटर "1 वर्ष की टेक्नोपार्क की प्रस्तुति" पर पाठ्यक्रम "एडवांस्ड जावा प्रोग्रामिंग" की प्रस्तुति की रिकॉर्डिंग के आधार पर बनाया गया था और डिमोटिवेटर की एक बंद प्रतियोगिता में पहला स्थान जीता था।

लेख का उद्देश्य

मैं लेख के विषयों और उद्देश्यों की समीक्षा के साथ शुरू करूँगा। मैं इस तरह से अपने सभी व्याख्यान शुरू करने की कोशिश करता हूं। तो, मैं बताऊंगा:


पाठ्यक्रम का इतिहास

मैंने मेलिंग लिस्ट का जवाब दिया। साथ आने और अपने मुख्य कार्य के विषय पर एक कोर्स पढ़ने के लिए एक साथ शिक्षण अनुभव प्राप्त करने का एक अवसर है, एक प्रोग्रामिंग भाषा को बेहतर ढंग से सीखने के लिए, अपने आप को और अपने काम पर एक नया नज़र डालें और, इसके अलावा, पैसे कमाएं। कुछ दिनों के बाद, टेक्नोपार्क के प्रमुख ने मुझे पत्र लिखा और मसौदा पाठ्यक्रम पर चर्चा करने का सुझाव दिया।
मैंने यहाँ टेक्नोपार्क के बारे में विस्तार से नहीं लिखा है - टेक्नोपार्क दिमित्री वोलोशिन के प्रमुख का एक उत्कृष्ट लेख है
पाठ्यक्रम के अनुशासन का पूरा नाम जो मुझे पढ़ना था, वह था: "उन्नत जावा प्रोग्रामिंग"। यह उन छात्रों के लिए छह महीने का कोर्स है जिन्होंने टेक्नोपार्क में अध्ययन के पहले सेमेस्टर को सफलतापूर्वक पूरा किया है। पाठ्यक्रम की शुरुआत तक, छात्रों को पहले से ही किसी भी उच्च-स्तरीय भाषा में बुनियादी प्रोग्रामिंग ज्ञान और थोड़ा विकास का अनुभव होना चाहिए।
मुझे 9 व्याख्यान और 6 सेमिनार (प्रत्येक पाठ के लिए 4 शैक्षणिक घंटे) के लिए सामग्री तैयार करनी थी। पाठ्यक्रम वेब डेवलपर्स और सिस्टम आर्किटेक्ट के प्रशिक्षण के लिए एक सामान्य कार्यक्रम का हिस्सा बनना था।
मैं विषय और सामग्री चुनने के लिए स्वतंत्र था, मैं नाम के अनुरूप कोई भी पाठ्यक्रम तैयार कर सकता था। केवल शर्त पाठ्यक्रम की व्यावहारिक अभिविन्यास थी। यही है, छात्रों को न केवल सैद्धांतिक सामग्री को सुनना था, बल्कि कई व्यावहारिक काम भी करने थे - उदाहरण के लिए, उन समस्याओं को हल करें जो हम स्वयं हल करते हैं।
जैसा कि मैंने पहले ही लिखा है, मैं क्लाइंट कंप्यूटर गेम डेवलपमेंट डिपार्टमेंट का कर्मचारी हूं। मैंने एलोड्स ऑनलाइन परियोजना के काम में भाग लिया और अब मैं नई स्काईफॉर्ज परियोजना के सर्वर टीम में काम करता हूं। मैं खेल लिखता हूं। अधिक सटीक रूप से, मैं जावा में एक ऑनलाइन गेम का सर्वर साइड लिख रहा हूं। मुझे उन छात्रों के लिए एक पाठ्यक्रम तैयार करने की आवश्यकता है जो मेरे कार्यकर्ताओं के समान समस्याओं को हल करने की दिशा में व्यावहारिक रूप से उन्मुख होंगे।
इस तरह से अपना काम तैयार करने के बाद, मुझे एहसास हुआ कि हमें किस कोर्स की ज़रूरत है। इस प्रक्रिया में एक कोर्स होना चाहिए जिससे छात्र जावा में अपना गेम सर्वर लिखेंगे
क्या यह जावा कोर्स है? हां। क्या यह एक व्यावहारिक पाठ्यक्रम है? हां। मेरे काम के अनुसार? हाँ! प्रारंभिक शर्तें पूरी होती हैं। आप कार्यक्रम को विकसित करना शुरू कर सकते हैं।
मैंने खुद पाठ्यक्रम की तैयारी पर मुख्य काम किया, लेकिन निश्चित रूप से, मैं कई मुद्दों पर केवल एक ही सोच नहीं था। टीमवर्क के परिणामों का वर्णन करते हुए (प्रबंधन, सहकर्मियों, छात्रों के साथ चर्चा) मैं "हम" लिखूंगा।

पाठ्यक्रम का विकास

मैंने कार्यक्रम पर काम करना शुरू कर दिया। पहली कठिनाई जिसने तुरंत मेरी आंख को पकड़ा, वह यह था कि सर्वर बिना क्लाइंट के बेकार है। आप एक "दिव्य सर्वर" लिख सकते हैं, लेकिन अगर कोई इसे एक्सेस नहीं कर सकता है, तो इसका मूल्य छोटा होगा और इसे लिखना दिलचस्प नहीं होगा। अपने क्लाइंट को लिखने की कोई इच्छा या समय नहीं था, खासकर जावा में। निर्णय, सामान्य रूप से, भी हड़ताली था। आप ब्राउज़र को क्लाइंट के रूप में उपयोग कर सकते हैं। और एक ब्राउज़र गेम के लिए एक सर्वर लिखें। वास्तुकला के अनुसार जो मैं नीचे वर्णन करूंगा, सर्वर के दृष्टिकोण से, कोई फर्क नहीं पड़ता है कि किस तरह के क्लाइंट का उपयोग करना है।
सामग्री के चयन के साथ दूसरी कठिनाई एक संतुलन खोजने के लिए थी: उन्हें एक पूर्ण परियोजना बनाने के लिए पर्याप्त होना चाहिए, लेकिन बहुत अधिक नहीं ताकि आवंटित समय में काम पूरा हो सके। 4 महीने तक जो कोर्स चलता है, छात्रों को छोटे ब्राउज़र और / या सोशल गेम्स के विकास के काम के बराबर काम करना चाहिए। जहां तक ​​मैं इस तरह के घटनाक्रम से परिचित हूं, 3-4 लोगों की टीम के लिए इस तरह के खेल बनाने के पूरे चक्र में 1-2 महीने लगते हैं। लेकिन पेशेवर विकास में भाग लेते हैं (अधिक या कम सीमा तक), और वे पूर्णकालिक काम करते हैं। और जिन छात्रों के साथ मुझे काम करने की ज़रूरत थी उनमें से अधिकांश को विकास का अनुभव नहीं है (यह कोई बात नहीं है कि भाषा क्या है, यह महत्वपूर्ण है कि परियोजनाएं बनाने का कोई अनुभव नहीं है) इसके अलावा, मेरे पाठ्यक्रम के अलावा, उनके पास टेक्नोपार्क के 2 पाठ्यक्रम हैं और यह अभी भी ज्ञात नहीं है कि कितने पाठ्यक्रम MSTU हैं।
हमने तय किया कि अपने लक्ष्यों को प्राप्त करने के लिए, हमें कई नियमों का पालन करना चाहिए।

परिणामस्वरूप, कार्यक्रम में निम्नलिखित विषय शामिल थे:
  1. जावा भाषा का इतिहास और विशेषताएं। जावा मंच। जावा संस्करण। कचरा इकट्ठा करने वाला। जावा और C ++ की तुलना करना। जावा में वंशानुक्रम। कीवर्ड: इंटरफ़ेस, क्लास, एनम, फैली, लागू करता है।
  2. क्लास ऑब्जेक्ट और क्लास क्लास <?? साधारण प्रकार के रैपर वर्ग। जेनेरिक्स। टंकण। Iterator और Iterable। जावा संग्रह ब्राउज़ करें। वर्ग संग्रह। बहु सूत्रण। प्रक्रियाएं और सूत्र। इंटरफ़ेस चलाने योग्य। क्लास थ्रेड। नींद (), व्यवधान (), जुड़ना ()। प्रोसेसर के संदर्भ में सूत्र। रुकावट। जावा मेमोरी मॉडल। वाष्पशील। महत्वपूर्ण खंड। तुल्यकालन। Mutexes। सेमाफोर। पर नज़र रखें। मल्टीथ्रेडेड डेटा एक्सेस समस्याएं। परमाणु चर। गतिरोध। प्रतीक्षा () और सूचित ()।
  3. थ्रेड इंटरैक्शन की समस्या का वर्णन। कार्य फ्रंटेंड और खाता सेवा धाराओं की सहभागिता है। दो धाराओं के माध्यम से समस्या को हल करने के पेशेवरों। बातचीत के तरीके बहते हैं। समवर्ती संग्रह। बातचीत का मुख्य विचार संदेशों के माध्यम से बहता है। MessageSystem - डेटा के आदान-प्रदान के लिए एक वस्तु। पता और सार। मेल के साथ सादृश्य। संदेश - संदेश वंशानुक्रम पदानुक्रम। AddressService।
  4. संगठन कोड। चक्रीय निर्भरता की समस्या। इंटरफेस के माध्यम से चक्रीय निर्भरता को हल करना। सर्वर आर्किटेक्चर सर्वर मॉड्यूल और उनकी बातचीत का विश्लेषण। खेल यांत्रिकी। गेम मैकेनिक्स और फ्रंटेंड मॉड्यूल के बीच बातचीत का आरेख। प्रतिकृति। खेल यांत्रिकी के उदाहरण।
  5. परीक्षण के प्रकार। इकाई परीक्षण। कार्यात्मक परीक्षण। लोड परीक्षण। परीक्षण अभ्यास JUnit। सेलेनियम। विश्लेषण किया गया पैरामीटर। जी सी। जीसी के प्रकार। जीसी विकल्प। प्रधान उपकरण जीसी।
  6. सिंगलटन और प्रसंग। घटनाओं, घटनाओं की सदस्यता। कॉलबैक। अनाम वर्ग। रैंडम। समय और तारीख के साथ काम करें। यूनिक्स समय। लोकेल। समय पर सदस्यता। I / O स्ट्रीम बाइट धाराएँ और चरित्र धाराएँ। प्रवाह की विरासत का वृक्ष। फ़ाइल धाराओं। थ्रेड सुरक्षा बंद कर रहा है। फ़ाइल। वीएफएस। कोड उदाहरण।
  7. क्रमांकन / deserialization इंटरफ़ेस सीरियल करने योग्य, क्षणिक क्षेत्र, serialVersionUID। प्रतिबिंब। क्रमांकन में प्रतिबिंब की भूमिका। कक्षा <टी>। फील्ड, मेथड, कंस्ट्रक्टर। परावर्तन हेल्पर उदाहरण। फैक्टरी विधि पैटर्न। SAX और DOM पार्सर। XML फ़ाइल से ऑब्जेक्ट को पुनर्स्थापित करना। संसाधन। संसाधनों को अवरूद्ध करने के लिए ReflectionHelper का उपयोग करना। गेम सर्वर में संसाधनों की भूमिका। ResourceFactory।
  8. बेस वर्क टेम्प्लेट। डेटासेट, डीएओ, प्रबंधक, अभियोजक। JDBC एपीआई डेटाबेस ड्राइवर। कनेक्शन। वक्तव्य। ResultSet। SQL कथन निष्पादित करना। डेटाबेस के साथ काम करने के लिए मॉड्यूल। निर्भरता इंजेक्शन।
  9. एनोटेशन। ऑब्जेक्ट रिलेशनल मैपिंग। हाइबरनेट।


टेक्नोपार्क कार्यक्रम के बारे में अधिक जानकारी आप यहाँ देख सकते हैं।

आपको याद दिला दूं कि पाठ्यक्रम का पूरा नाम "एडवांस्ड जावा प्रोग्रामिंग" है। इसलिए, मुझे हैलो वर्ल्ड से पहले पाठ से दूसरे पाठ में मल्टीथ्रेडिंग तक एक तेज संक्रमण का अधिकार था। पाठ्यक्रम में एनोटेशन में, हमने लिखा कि एक सफल समझ के लिए, छात्रों को जावा में बुनियादी अवधारणाओं से परिचित होना चाहिए। इससे जो कुछ हुआ वह केवल व्यवहार में सीखा जा सकता है।

कोर्स की आवश्यकताएँ

पाठ्यक्रम के नाम ("जावा", "प्रोग्रामिंग" और "उन्नत") बनाने वाले तीन शब्दों में से, "उन्नत" शब्द सबसे अस्पष्ट है। यदि पाठ्यक्रम को जावा का परिचय कहा जाता है, तो यह स्पष्ट होगा कि किस बारे में बात करनी है। "गहराई से" का अर्थ है कि छात्र पहले से ही प्रोग्रामिंग से परिचित हैं - और न केवल एक उच्च-स्तरीय भाषा में, बल्कि विशेष रूप से जावा प्रोग्रामिंग के साथ। हमने तय किया कि छात्रों को पहले से ही पता होना चाहिए:

MSTU के विभिन्न संकायों के दूसरे-पांचवें वर्ष के छात्र टेक्नोपार्क में अध्ययन करते हैं। ट्रेनिंग के पहले सेमेस्टर के बाद वे मेरे कोर्स में आए। प्रेरणा परीक्षण वे पारित; बुनियादी ज्ञान नहीं रखने वाले सभी को बुनियादी ज्ञान प्राप्त हुआ। छात्रों में वे भी थे जिन्होंने पहले से ही जावा में लिखा था और इसके साथ पैसे कमाए थे, और जिन्होंने जावा में पाठ्यक्रम से पहले कुछ भी नहीं लिखा था।
परिणामस्वरूप, पहले व्यावहारिक कार्य के लिए कुछ श्रोताओं ने पहली बार "हैलो वर्ल्ड" लिखा, और दूसरे भाग ने फैसला किया कि टेम्पलेट इंजन और HTTP सत्रों के बिना विकसित करना दिलचस्प नहीं था। पहली दो कक्षाओं के परिणामों के अनुसार, मैंने फैसला किया कि छात्रों को सीमित न करना सही होगा, और उन किसी भी पुस्तकालय का उपयोग करने की अनुमति होगी जो वे जानते थे। और पाठ्यक्रम के मध्य तक, उन्होंने मुझे पूरी तरह से मेरे फ्रंटेंड भाग को लिखने की अनुमति दी, जो कि सर्वर के सभी कार्यों को ब्राउज़र के साथ उस तरह से व्यवस्थित करने के लिए था, जो उन्हें सबसे अच्छा लगता है। उसी समय, जिनके पास पिछले जावा अनुभव नहीं था, वे मेरे कार्यक्रम से सीखते रहे। अतिरिक्त ज्ञान के उपयोग ने मूल्यांकन को प्रभावित नहीं किया।

टेक्नोपार्क में पाठ्यक्रम पढ़ने की विशेषताएं

टेक्नोपार्क स्वैच्छिक है। इस अर्थ में कि हम छात्रों से ट्यूशन नहीं लेते हैं, किसी भी अनुबंध पर हस्ताक्षर नहीं करते हैं और हमें अपनी कक्षाओं में भाग लेने के लिए बाध्य नहीं करते हैं - छात्रों को व्याख्यान और सेमिनार में भाग लेने में रुचि होनी चाहिए। यह उनकी अपनी इच्छा होनी चाहिए। तो, कक्षाएं खुद को मुख्य रूप से दिलचस्प होना चाहिए। यदि छात्र जो हो रहा है उसमें रुचि रखता है, तो वह व्याख्यान सामग्री को भी याद रखेगा और, सबसे अधिक संभावना है, अगले पाठ में आएगा। हमने तय किया कि सिर्फ जावा कोर्स ही नहीं, बल्कि गेम डेवलपमेंट कोर्स भी पर्याप्त नहीं है। व्याख्यान, हमारी समझ में, किसी तरह से एक शो होना चाहिए। सबसे पहले, यह शैक्षिक सामग्री के लिए चित्रण में परिलक्षित होता था। नीचे व्याख्यान से तीन उदाहरण दिए गए हैं:


बैटमैन गुड़िया - थीम "जावा I / O में डेकोरेटर पैटर्न" के लिए चित्रण,

ट्री ट्रैवर्सल - "एक्सएमएल दस्तावेजों के साथ काम करना" विषय के लिए चित्रण

बहुत सारे कोड के साथ एक स्लाइड पर Wookiees - इसलिए आंख पर आराम करने के लिए कुछ है

स्लाइड के अलावा, ध्यान आकर्षित करने के लिए अप्रत्याशित प्रश्न पूछना बहुत उपयोगी था। उदाहरण के लिए, “पृथ्वी से चंद्रमा तक की दूरी को कौन याद करता है? अगर हमारे पास चंद्रमा पर डेटाबेस के साथ एक सर्वर है, तो डेटाबेस में लिखते समय न्यूनतम देरी क्या होगी? ” या "कोरियाई ऑनलाइन गेम किसने खेला? क्या आप WRC शब्द की व्याख्या कर सकते हैं? "
धारणा पर एक सकारात्मक प्रभाव उन नामों और खेल शब्दों का उल्लेख है जो छात्रों को विश्वविद्यालय में सुनने की उम्मीद नहीं करते हैं।

प्रशिक्षण सर्वर वास्तुकला और अभ्यास

इससे पहले कि मैंने इस भाषा में शिक्षण सिद्धांत के दृष्टिकोण से समझा जा सकता है, इस कोर्स के बारे में जो कुछ भी लिखा था, वह सब कुछ नहीं। यदि हम केवल उपरोक्त कार्यक्रम पर व्याख्यान देने के लिए खुद को सीमित करते हैं, तो पाठ्यक्रम में चर्चा किए गए कई सवालों के अर्थ अस्पष्ट रहेंगे। उदाहरण के लिए, हमें दूसरे व्याख्यान में मल्टीथ्रेडिंग की आवश्यकता क्यों है, पांचवें में लोड परीक्षण क्यों, और पाठ्यक्रम के अंत में केवल एनोटेशन क्यों? यदि आप गृहकार्य और व्यावहारिक कार्यों के पाठ्यक्रम पर विचार करते हैं तो यह विषमता समझ में आ जाएगी।
मैं कार्य के विवरण के साथ शुरू करूँगा। विकास के लिए प्रस्तावित प्रशिक्षण सर्वर में 8 मॉड्यूल शामिल हैं:



प्रत्येक मॉड्यूल के बारे में विवरण:
  1. मुख्य - सभी अन्य मॉड्यूल पर निर्भर करता है। मुख्य () फ़ंक्शन शामिल है। सर्वर शुरू होने के समय अन्य सभी मॉड्यूल बनाता है। अलग-अलग थ्रेड्स में फ्रंटएंड, dbService और गेमचैनिक्स चलाते हैं। जेट्टी लाइब्रेरी की शुरुआत, जेटी के सामने वाले हिस्से के लिए एक लिंक देता है।
  2. फ्रंटेंड जेट्टी घटनाओं के लिए एक हैंडलर है (एक ब्राउज़र के माध्यम से, उपयोगकर्ता जेट्टी के अनुरोध को पारित करता है, जेट्टी फ्रंटेंड से कॉल हैंडल करता है), और एक सेवा जो अपनी स्ट्रीम में रहती है। फ्रंटेंड केवल उस उपयोगकर्ता डेटा को संग्रहीत करता है जिसे पृष्ठ बनाने और उसे ब्राउज़र पर वापस भेजने की आवश्यकता होती है। सभी गणना गेममैकेनिक्स स्ट्रीम में होती हैं। फ्रंटएंड का कार्य उपयोगकर्ता से एक अनुरोध को स्वीकार करना है, इसे वांछित सेवा में स्थानांतरित करना और उपयोगकर्ता को पृष्ठ (अतुल्यकालिक मोड में) देना है।
  3. dbService - एक सर्वर-डेटाबेस संचार सेवा। एक अलग स्ट्रीम में रहता है, डेटाबेस से कनेक्शन रखता है। अन्य मॉड्यूल के अनुरोधों को संसाधित करता है और उन्हें उत्तर देता है। dbSerivice कई हो सकते हैं, प्रत्येक अपने स्वयं के धागे में।
  4. gameMechanics एक सर्वर सेवा है जिसमें सभी गेम इवेंट होते हैं। खेल की दुनिया इस धारा में रहती है। अन्य सभी सेवाओं के लिए, यह सिर्फ एक ब्लैक बॉक्स है। छात्रों द्वारा लिखे गए विभिन्न गेम केवल गेम मैकेनिक्स में भिन्न होने चाहिए। गेम मैकेनिक्स सभी घटनाओं की गणना करता है और फ्रंटेंड को एक प्रतिकृति भेजता है।
  5. messageSystem सभी थ्रेड्स के लिए एक सामान्य ऑब्जेक्ट है जिसके माध्यम से थ्रेड्स के बीच डेटा का आदान-प्रदान किया जाता है। प्रत्येक थ्रेड के लिए एक संदेश कतार है। किसी दूसरे धागे को चालू करने के इच्छुक व्यक्ति को एक विशेष वस्तु उपयुक्त कतार में रखनी चाहिए - एक संदेश। प्राप्तकर्ता इस संदेश को कतार से प्राप्त करेगा और इसे सुविधाजनक समय पर संसाधित करेगा। प्रक्रिया के परिणामस्वरूप प्रतिक्रिया संदेश भेजा जा सकता है।
  6. रिसोर्ससैस्टम - सिंगलटन, जो सभी सेवाओं को सर्वर ऑपरेशन मापदंडों (संसाधनों) के साथ फाइलों तक पहुंचने की अनुमति देता है। आप यहां संसाधनों के बारे में अधिक पढ़ सकते हैं।
  7. उपयोगिताएँ - समय, यादृच्छिक संख्या और लॉग के साथ काम करने के लिए सेवाओं और सहायकों का एक सेट।
  8. आधार - सभी सेवाओं के इंटरफेस और बेस कक्षाओं का एक सेट।

आप Allod सर्वर की वास्तुकला के साथ प्रशिक्षण सर्वर की वास्तुकला की तुलना कर सकते हैं। उधार पूरा नहीं हुआ है, लेकिन यह स्पष्ट है कि हमने उनकी नकल करने की पूरी कोशिश की।
अब उस क्रम के बारे में जिसमें हमने यह सब लिखा है। काम को 6 सेमिनारों में विभाजित किया गया था:
  1. "हैलो वर्ल्ड," ग्रहण के लिए एक परिचय, जेट्टी के लिए एक परिचय। लोकलहोस्ट पर वेब सर्वर शुरू करना: 8080, जो "हैलो सर्वर" के साथ एक पेज देता है। उपयोगकर्ता को या तो जेट्टी सत्रों के माध्यम से या फॉर्म पर छिपे हुए फ़ील्ड के माध्यम से याद रखना। एक ऐसा पेज बनाएं जो हर टी मिलीसेकंड पर एक बार खुद से पूछे।
  2. रनिंग फ्रंट एक अलग थ्रेड में। इस स्ट्रीम से गणना उपयोगकर्ता से सर्वर पर आए कॉल की संख्या को स्ट्रीम करती है। DbService प्रोटोटाइप के एक अलग थ्रेड में चल रहा है (जो अब तक डेटाबेस का उपयोग नहीं करता है, लेकिन केवल मेमोरी में कैश के माध्यम से पहुंच का अनुकरण करता है)। संदेशों के माध्यम से इन प्रवाहों की पारस्परिक क्रिया के लिए एक संदेश प्रणाली लिखना।
  3. खेल यांत्रिकी पर काम की शुरुआत। छात्र तय करते हैं कि वे कौन सा खेल लिखेंगे, और तर्क का विकास शुरू करेंगे। एक अलग थ्रेड में एक GameMechanics मॉड्यूल बनाना, फ़्रंटेंड से यांत्रिकी और इसके विपरीत संदेशों को अग्रेषित करना। पहले से ही लिखित मॉड्यूल का परीक्षण। इकाई परीक्षणों और कार्यात्मक परीक्षणों का विकास।
  4. समय और यादृच्छिक संख्या (यदि वे यांत्रिकी के लिए आवश्यक हैं) के साथ काम करने के लिए उपयोगिताओं का निर्माण। फ़ाइल सिस्टम के साथ काम करने के लिए एक मॉड्यूल बनाना। सर्वर कोड से फाइलों (संसाधनों) तक सभी मापदंडों का स्थानांतरण।
  5. डेटाबेस के साथ काम करें। "नकली" dbService को वास्तविक में बदलना।
  6. शट डाउन करना और सर्वर की सुरक्षा करना।

सेमिनार बहुत जीवंत थे। मेरे सहायक और मैं छात्रों के बीच दौड़े, कठिनाई की बदलती डिग्री के बहुत सारे सवालों के जवाब दिए। छात्रों ने एक दूसरे को अपने फैसले दिखाए। हमने सभी के लिए सामान्य समस्याओं और कठिनाइयों की जांच की। कुछ प्रश्न वास्तव में दिलचस्प थे, और "मेरी अपने और जावा के बारे में कुछ नया सीखने की इच्छा" पूरी तरह से संतुष्ट थी।
जिस दृष्टिकोण से एक महीने में राज्य के एक छात्र ने "जावा में कुछ नहीं लिखा था" राज्य में जाता है "ने एक वेब सर्वर लिखा जो 3 थ्रेड्स में काम करता है" कठिन लग सकता है। हालांकि, जैसा कि अभ्यास से पता चलता है, यह वह है जो सबसे अच्छा काम करता है।

पहले सेमेस्टर के परिणाम

अधिकांश छात्रों ने उपरोक्त कार्यक्रम में महारत हासिल की। सामग्री की धारणा के साथ समस्याएं तीसरे व्याख्यान में थीं, जिसके अंत तक हमने संदेश प्रणाली के माध्यम से प्रवाह की बातचीत की जांच की। अब मैंने उसी व्याख्यान को छात्रों की दूसरी स्ट्रीम में पढ़ा। और अब यह मुझे प्रतीत होता है कि समस्याएँ धारणा के साथ इतनी अधिक नहीं थीं जितनी सामग्री को समझाने की मेरी क्षमता थी। पाठ्यक्रम को बार-बार पढ़ना, जहां तक ​​मैं छात्रों की आंखों की चमक के आधार पर निर्णय ले सकता हूं, बहुत अधिक उत्पादक है।
लगभग सभी व्याख्यानों में, मैंने अपना कोड दिखाया और दिखाया कि यह कैसे काम करता है। नतीजतन, भले ही छात्र को व्याख्यान में कुछ समझ में नहीं आया हो, वह इसे रिकॉर्ड में देख सकता है और कोड के जटिल अनुभागों की प्रतिलिपि बना सकता है। मैंने अपने कोड के लिए स्रोत कोड नहीं दिया था, और, परिणामस्वरूप, जब व्याख्यान से कोड उधार लिया गया था, तब भी इस कोड को कम से कम फिर से लिखना पड़ा।
प्रथम सेमेस्टर का मुख्य परिणाम, मेरा मानना ​​है कि छात्रों द्वारा प्रस्तावित वास्तुकला के अनुसार आवंटित समय में एक वेब-नॉर्थ प्रोजेक्ट लिखने की क्षमता साबित होती है। दस के छह समूह सर्वर सुरक्षा तक पहुंचे। छह के तीन समूहों ने सभी सर्वर मॉड्यूल को लागू करने के अलावा, रचनात्मक रूप से कार्य से संपर्क किया और दिलचस्प गेम मैकेनिक्स विकसित किया।
और, पाठ्यक्रम पूरा करने के बाद एक छात्र सर्वेक्षण:


परीक्षा और टिकट

परीक्षा केवल उन छात्रों द्वारा ली गई थी जो समय पर व्यावहारिक कार्य पूरा करने में असमर्थ थे। हमने तय किया कि ये सिद्धांतवादी थे, और वे आर्किटेक्ट के रूप में मान्यता प्राप्त करने में सक्षम हो सकते हैं। एक उत्कृष्ट चिह्न प्राप्त करने के लिए, 49 प्रश्नों में से दो समान सेटों से यादृच्छिक रूप से लिए गए 3 प्रश्नों का उत्तर देना आवश्यक था। जिस विकल्प में छात्र दो समान प्रश्न निकालता है, हमने उसे नहीं छोड़ा। इस मामले में, उन्हें दो बार एक ही सवाल का जवाब देना पड़ा। सच है, परीक्षा में ऐसे भाग्यशाली नहीं थे।
पाठ्यक्रम की पूरी तस्वीर के लिए, मैं सवालों की एक सूची देता हूं:
  1. जावा भाषा का इतिहास और विशेषताएं।
  2. जावा मंच। जावा संस्करण। जीसी, जेवीएम, जेडीके, जेआरई। बाईटकोड।
  3. संकुल, वर्ग, चर और विधियों के नामकरण के नियम। जावा अनुप्रयोग चलाना
  4. क्लास ऑब्जेक्ट और क्लास क्लास <?? इन वर्गों की मुख्य विधियाँ।
  5. जावा में सरल प्रकार। साधारण प्रकार के रैपर वर्ग।
  6. जावा में सामान्य प्रोग्रामिंग। अपनी स्वयं की टेम्पलेट कक्षाएं और विधियाँ बनाना।
  7. जावा में संग्रह। Iterator, Iterable।
  8. प्रक्रियाएं और सूत्र।
  9. इंटरफ़ेस चलाने योग्य। क्लास थ्रेड। प्रारंभ () और रन () विधियाँ।
  10. थ्रेड क्लास के तरीके: नींद (), इंटरप्ट (), ज्वाइन ()।
  11. कीवर्ड अस्थिर और सिंक्रनाइज़ हैं। सिंक्रनाइज़ किए गए तरीके और अभिव्यक्ति।
  12. मल्टीथ्रेडेड डेटा एक्सेस समस्याएं। दौड़ की स्थिति। गतिरोध।
  13. ऑब्जेक्ट क्लास के तरीके: प्रतीक्षा करें (), सूचित करें () और InformAll ()।
  14. मल्टीथ्रेडेड अनुप्रयोगों के पेशेवरों और विपक्ष।
  15. बातचीत के तरीके बहते हैं।
  16. java.util.concurrent।
  17. MessageSystem। पता और सार।
  18. . .
  19. . .
  20. , .
  21. .
  22. GC. GC. GC.
  23. .
  24. : Singleton Context.
  25. Events. .
  26. . Callback.
  27. .
  28. . Unix time. Locale.
  29. I/O Streams. .
  30. : Throwable, Error, Exception, try, catch, finally.
  31. /. Interface Serializable.
  32. transient. transient .
  33. Reflection. reflection .
  34. Factory method.
  35. SAX-.
  36. DOM-.
  37. .
  38. JDBC API.
  39. class Connection JDBC API. , Connection.
  40. Dependency Injection. .
  41. class Statement JDBC API. , Statement.
  42. class ResultSet JDBC API. .
  43. DataSet ( ORM).
  44. DAO ( ORM).
  45. Annotation. . .
  46. Object Relational Mapping.
  47. Frontend — .
  48. Game Mechanics — .
  49. Database Service — .


निष्कर्ष

, . , — . – , . , .

धन्यवाद

:
– QA SkyForge, .
– Mail.Ru Group.
– SkyForge.
– web- SkyForge.

Source: https://habr.com/ru/post/In177953/


All Articles