ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

ජාවා අනෙකුත් ජනප්‍රිය භාෂාවලට වඩා වෙනස් වන්නේ කෙසේද? ඉගෙනීමට පළමු භාෂාව Java විය යුත්තේ ඇයි? මුල සිටම සහ වෙනත් භාෂාවලින් ක්‍රමලේඛන කුසලතා යෙදීමෙන් ඔබට ජාවා ඉගෙන ගැනීමට උපකාර වන සැලසුමක් නිර්මාණය කරමු. අපි Java හි නිෂ්පාදන කේතය සෑදීම සහ වෙනත් භාෂාවලින් සංවර්ධනය කිරීම අතර වෙනස්කම් ලැයිස්තුගත කරමු. අනාගත සහභාගිවන්නන් සඳහා වූ රැස්වීමකදී Mikhail Zatepyakin මෙම වාර්තාව කියවා ඇත සීමාවාසික Yandex සහ අනෙකුත් ආරම්භක සංවර්ධකයින් - Java Junior හමුවීම.


- හැමෝටම ආයුබෝවන්, මගේ නම මිෂා. මම Yandex.Market හි සංවර්ධකයෙක් වන අතර, ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද යන්න අද මම ඔබට කියමි. ඔබට සාධාරණ ප්‍රශ්නයක් ඇසිය හැක: වසර ගණනාවක පළපුරුද්දක් ඇති ප්‍රබල සංවර්ධකයෙකු නොව මම මෙම කතාව පවසන්නේ ඇයි? කාරණය නම් මම මීට වසර එකහමාරකට පමණ පෙර මෑතකදී ජාවා හැදෑරීමයි, එබැවින් එය කෙබඳුද සහ එහි ඇති අන්තරායන් මොනවාදැයි මට තවමත් මතකයි.

වසරකට පෙර මම Yandex.Market හි සීමාවාසික පුහුණුවක් ලැබුවා. මම Beru සඳහා පසුබිම සංවර්ධනය කළෙමි, වෙළඳපොළ සඳහාම, ඔබ එය භාවිතා කළ හැකිය. දැන් මම එහි වෙනත් කණ්ඩායමක දිගටම වැඩ කරනවා. අපි ව්යාපාරික හවුල්කරුවන් සඳහා Yandex.Market සඳහා විශ්ලේෂණ වේදිකාවක් නිර්මාණය කරමු.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

අපි පටන් ගනිමු. ප්‍රායෝගික දෘෂ්ටි කෝණයකින් ජාවා ඉගෙන ගන්නේ ඇයි? කාරණය නම් ජාවා යනු ඉතා ප්‍රසිද්ධ ක්‍රමලේඛන භාෂාවකි. එය ඉතා විශාල ප්රජාවක් ඇත.

උදාහරණයක් ලෙස, එවැනි TIOBE දර්ශකයක් ඇත, ක්රමලේඛන භාෂාවල ජනප්රියත්වය පිළිබඳ ජනප්රිය දර්ශකයක් වන අතර ජාවා එහි පළමු ස්ථානයට පත්වේ. එසේම, රැකියා අඩවි වල, බොහෝ පුරප්පාඩු ජාවා ගැන බව ඔබට පෙනෙනු ඇත, එනම් ජාවා තුළ සංවර්ධනය කිරීමෙන් ඔබට සැමවිටම රැකියාවක් සොයාගත හැකිය.

ප්‍රජාව ඉතා විශාල බැවින්, ඔබට ඇති ඕනෑම ප්‍රශ්නයකට සමහර Stack Overflow හෝ වෙනත් වෙබ් අඩවි වල පිළිතුරක් ලැබෙනු ඇත. එසේම, ජාවා හි සංවර්ධනය කරන විට, ඔබ සැබවින්ම JVM මත කේතය ලියන්නේ, එබැවින් ඔබට පහසුවෙන් Kotlin, Scala සහ JVM භාවිතා කරන වෙනත් භාෂා වෙත මාරු විය හැකිය.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

මතවාදී දෘෂ්ටි කෝණයකින් ජාවා ගැන හොඳ කුමක්ද? විවිධ ක්‍රමලේඛන භාෂා තිබේ. ඔවුන් විවිධ ගැටළු විසඳයි, ඔබ එය දන්නවා. උදාහරණයක් ලෙස, ඉක්මන් ගැටළු විසඳීම සඳහා තනි පේළි ස්ක්‍රිප්ට් ලිවීම සඳහා පයිතන් විශිෂ්ටයි.

ප්ලස් පැත්තේ, ඔබට ක්‍රියාත්මක කළ හැකි කේතය සම්පූර්ණයෙන්ම පාලනය කළ හැකිය. උදාහරණයක් ලෙස, අපට කාර්, Yandex රියදුරු රහිත මෝටර් රථ තිබේ, ඒවායේ කේතය ප්ලස් වලින් ලියා ඇත. ඇයි? ජාවා සතුව එවැනි දෙයක් තිබේ - කුණු එකතු කරන්නා. එය RAM අනවශ්‍ය වස්තූන් ඉවත් කරයි. මේ දේ ඉබේ පටන් අරන් ලෝකය නවත්තනවා, ඒ කියන්නේ වැඩසටහනේ ඉතිරි ටික නවත්තලා වස්තු ගණන් කරන්න යනවා, වස්තු පිළිබඳ මතකය පැහැදිලි කරනවා. ඩ්‍රෝන් එකක එහෙම දෙයක් ක්‍රියාත්මක වෙනවා නම් ඒක නියමයි. ඔබේ ඩ්‍රෝනය කෙළින්ම ධාවනය කරනු ඇත, මේ මොහොතේ එහි මතකය ඉවත් කර පාර දෙස කිසිසේත් නොබලයි. එබැවින්, ඩ්රෝන් වාසි මත ලියා ඇත.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

ජාවා විසඳන ගැටළු මොනවාද? එය මූලික වශයෙන් වසර ගණනාවක් පුරා, දුසිම් ගනනක් හෝ සිය ගණනක් විසින් ලියන ලද විශාල වැඩසටහන් සංවර්ධනය කිරීම සඳහා වූ භාෂාවකි. විශේෂයෙන්ම, Yandex.Market හි බොහෝ පසුබිම් ජාවා වලින් ලියා ඇත. අපට නගර කිහිපයක බෙදා හරින ලද කණ්ඩායමක් ඇත, එක් එක් පුද්ගලයින් දස දෙනෙකු. තවද කේතය නඩත්තු කිරීම පහසුය, එය වසර දහයක් හෝ ඊට වැඩි කාලයක් සඳහා සහය ලබා දී ඇති අතර, ඒ සමඟම නව පුද්ගලයින් පැමිණ මෙම කේතය තේරුම් ගනී.

භාෂාවක තිබිය යුතු ලක්ෂණ මොනවාද, එවිට එහි ඇති කේතය පහසුවෙන් සහය වන අතර එය විශාල කණ්ඩායම් තුළ පහසුවෙන් සංවර්ධනය කළ හැකිය. පළමුවෙන්ම, එය කියවිය හැකි කේතයක් විය යුතු අතර, එය සංකීර්ණ වාස්තුවිද්යාත්මක විසඳුම් ක්රියාත්මක කිරීමට පහසු විය යුතුය. එනම්, ඉහළ මට්ටමේ වියුක්තයන් ලිවීමට පහසු විය යුතුය, මේ සියල්ල ජාවා අපට ලබා දෙයි. මෙය වස්තු-නැඹුරු භාෂාවකි. ඉහළ මට්ටමේ වියුක්ත කිරීම් සහ සංකීර්ණ ගෘහ නිර්මාණ ශිල්පය ක්‍රියාත්මක කිරීම ඇත්තෙන්ම පහසුය.

ජාවා සඳහා රාමු සහ පුස්තකාල විශාල ප්‍රමාණයක් ද ඇත, මන්ද භාෂාව වසර 15 කට වඩා පැරණි බැවිනි. මෙම කාලය තුළ, ලිවිය හැකි සෑම දෙයක්ම එහි ලියා ඇත, එබැවින් ඔබට අවශ්ය විය හැකි සියල්ල සඳහා පුස්තකාල ටොන් ගණනක් ඇත.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

මගේ මතය අනුව ආරම්භක JA ක්‍රීඩකයෙකුට තිබිය යුතු මූලික කුසලතා මොනවාද? මුලින්ම කියන්න ඕන මේක Java core language එක ගැන දැනුමක්. ඊළඟට යම් ආකාරයක යැපුම් එන්නත් රාමුවකි. මීළඟ කතානායක කිරිල්ල මේ ගැන වඩාත් සම්පූර්ණයෙන් කතා කරනු ඇත. මම වැඩිය ගැඹුරට යන්නේ නැහැ. ඊළඟට ගෘහ නිර්මාණ ශිල්පය සහ මෝස්තර රටා. විශාල යෙදුම් ලිවීමට වාස්තු විද්‍යාත්මකව ලස්සන කේතයක් ලිවීමට අපට හැකි විය යුතුය. තවද මෙය දත්ත සමුදාය සමඟ වැඩ කිරීමේ කාර්යයන් සඳහා යම් ආකාරයක SQL හෝ ORM වේ. තවද මෙය පසුබිමට වඩා අදාළ වේ.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

යන්න! ජාවා හරය. මම ඇත්තටම මෙහි ඇමරිකාව සොයා නොගනු ඇත - ඔබ භාෂාවම දැන සිටිය යුතුය. ඔබ අවධානය යොමු කළ යුතු දේ. පළමුවෙන්ම, Java මෑත වසරවලදී බොහෝ අනුවාද නිකුත් කර ඇත, එනම් 2014-2015 දී හත්වැන්න නිකුත් කරන ලදී, පසුව අටවන, නවවන, දහවන, නව අනුවාද රාශියක් සහ නව සිසිල් දේවල් රාශියක් ඒවා තුළ හඳුන්වා දෙන ලදී. , උදාහරණයක් ලෙස, Java Stream API , lambda, ආදිය. නිෂ්පාදන කේතයේ භාවිතා කරන ඉතා සිසිල්, නැවුම්, සිසිල් දේවල්, ඔවුන් සම්මුඛ සාකච්ඡා වලදී අසන දේ සහ ඔබ දැනගත යුතු දේ. ඒ නිසා Java-4 library එකේ රාක්කෙන් පොතක් අරන් ඉගෙන ගන්න යන්න එපා. මෙය අපගේ සැලැස්මයි: අපි Java-8 හෝ ඊට වැඩි ඉගෙන ගනිමු.

Stream API, var යනාදී නවෝත්පාදනයන් කෙරෙහි අපි දැඩි අවධානයක් යොමු කරමු. ඒවා සම්මුඛ සාකච්ඡා වලදී අසනු ලබන අතර නිෂ්පාදනයේදී නිරන්තරයෙන් භාවිතා වේ. එනම්, Stream API ලූප වලට වඩා සිසිල් ය, සාමාන්යයෙන්, ඉතා සිසිල් දෙයක්. අවධානය යොමු කිරීමට වග බලා ගන්න.

ඒවගේම පුනරාවර්තක, ව්‍යතිරේක ආදී සියලුම දේවල් තියෙනවා. ඔබ විසින්ම කුඩා කේතයක් ලියන තාක් කල් ඔබට නොවැදගත් ලෙස පෙනෙන දේවල්. ඔබට මෙම ව්‍යතිරේක අවශ්‍ය නැත, කෙසේ වෙතත් ඒවා අවශ්‍ය කාටද? නමුත් ඔවුන් අනිවාර්යයෙන්ම සම්මුඛ සාකච්ඡා වලදී අසනු ඇත, ඔවුන් නිසැකවම නිෂ්පාදනයේදී ඔබට ප්රයෝජනවත් වනු ඇත. පොදුවේ, ඔබ ව්යතිරේක, පුනරාවර්තක සහ වෙනත් දේවල් කෙරෙහි අවධානය යොමු කළ යුතුය.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

දත්ත ව්යුහයන්. ඔබට ව්‍යුහයන් නොමැතිව යා නොහැක, නමුත් කට්ටල, ශබ්දකෝෂ සහ පත්‍ර ඇති බව ඔබ නොදන්නේ නම් එය විශිෂ්ට වනු ඇත. තවද ව්යුහයන්ගේ විවිධ ක්රියාත්මක කිරීම්. උදාහරණයක් ලෙස, Java හි එකම ශබ්දකෝෂය HashMap සහ TreeMap ඇතුළු බොහෝ ක්‍රියාත්මක කිරීම් ඇත. ඔවුන්ට විවිධ අසමමිතික ඇත, ඒවා ඇතුළත වෙනස් ලෙස ව්‍යුහගත වී ඇත. ඒවා වෙනස් වන්නේ කෙසේද සහ කුමන එක භාවිතා කළ යුතුද යන්න ඔබ දැනගත යුතුය.

මෙම දත්ත ව්‍යුහයන් අභ්‍යන්තරව ක්‍රියා කරන ආකාරය ඔබ දන්නේ නම් එය ද ඉතා සිසිල් වනු ඇත. එනම්, ඔවුන්ගේ අසමමිතිය දැන ගැනීම පහසු නැත - ඔට්ටුව කොපමණ ක්‍රියා කරයිද, පාස් කොපමණ කාලයක් ක්‍රියා කරයි, නමුත් ව්‍යුහය ඇතුළත ක්‍රියා කරන්නේ කෙසේද - උදාහරණයක් ලෙස, HashMap හි බාල්දියක් යනු කුමක්ද.

ගස් හා ප්රස්ථාර කෙරෙහි අවධානය යොමු කිරීම ද වටී. මේවා නිෂ්පාදන කේතයේ එතරම් සුලභ නොවන නමුත් සම්මුඛ සාකච්ඡා වලදී ඒවා ජනප්‍රියයි. ඒ අනුව, ඔබට ගස්, පළල සහ ගැඹුරින් ප්රස්තාර හරහා ගමන් කිරීමට හැකි විය යුතුය. මේ සියල්ල සරල ඇල්ගොරිතම වේ.

ඔබ ඕනෑම විශාල කේතයක්, සංකීර්ණ, පුස්තකාල භාවිතා කරමින්, බහු-පන්ති කේතයක් ලිවීමට පටන් ගත් වහාම, පද්ධති ගොඩනැගීමකින් තොරව සහ පරායත්තතා නිරාකරණය කිරීමකින් තොරව ඔබට අපහසු බව ඔබට වැටහෙනු ඇත. මේවා මූලික වශයෙන් Maven සහ Gradle වේ. එක් පේළියකින් ඔබේ ව්‍යාපෘතියට පුස්තකාල ආයාත කිරීමට ඒවා ඔබට ඉඩ සලසයි. එනම්, ඔබ එක් පේළියක් xml ලියා ව්‍යාපෘතියට පුස්තකාල ආයාත කරයි. විශිෂ්ට පද්ධති. ඒවා ආසන්න වශයෙන් සමාන වේ, එකක් භාවිතා කරන්න - Maven හෝ Gradle.

ඊළඟ - යම් ආකාරයක අනුවාද පාලන පද්ධතියක්. මම Git නිර්දේශ කරන්නේ එය ජනප්‍රිය නිසා සහ නිබන්ධන ටොන් ගණනක් තිබෙන නිසා. සෑම කෙනෙකුම පාහේ Git භාවිතා කරයි, එය සිසිල් දෙයක්, ඔබට එය නොමැතිව ජීවත් විය නොහැක.

සහ යම් ආකාරයක සංවර්ධන පරිසරයක්. මම IntelliJ Idea නිර්දේශ කරමි. එය සංවර්ධන ක්‍රියාවලිය බෙහෙවින් වේගවත් කරයි, ඔබට බොහෝ උපකාර කරයි, ඔබ සඳහා සියලුම බොයිලේරු කේතය ලියයි, පොදුවේ, එය සිසිල් ය.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

විනිවිදකයේ සබැඳි: SQLZOO, habrapost

SQL. පසුගාමීන් ගැන ටිකක්. ඇත්තටම මෙතන විහිලු නඩුවක් තිබුණා. මගේ දෙවන සීමාවාසික සම්මුඛ පරීක්ෂණයට දින දෙකකට පෙර, HR ගැහැණු ළමයෙක් මට කතා කර, දින දෙකකින් ඔවුන් මගෙන් SQL සහ HTTP ගැන අසයි, මට එය ඉගෙන ගත යුතු බව පැවසුවා. මම SQL හෝ HTTP ගැන කිසිවක් දැන සිටියේ නැත. මට මේ අපූරු වෙබ් අඩවිය හමු විය - SQLZOO. මම පැය 12 කින් ඒකේ SQL ඉගෙන ගත්තා, මම කිව්වේ, SQL සින්ටැක්ස්, SELECT විමසුම් ලියන්නේ කෙසේද, JOIN, ආදිය. ඉතා සිසිල් වෙබ් අඩවිය, මම එය බෙහෙවින් නිර්දේශ කරමි. ඇත්ත වශයෙන්ම, පැය 12 කින් මම දැන් දන්නා දේවලින් 90% ක් ඉගෙන ගත්තා.

ඒවගේම database architecture එක දැනගෙන ඉන්න එකත් ලොකු දෙයක්. මේවා සියලු වර්ගවල යතුරු, දර්ශක, සාමාන්යකරණය වේ. Habré එකේ මේ ගැන පෝස්ට් මාලාවක් තියෙනවා.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

ජාවා වල, SQL වලට අමතරව, JPA වැනි වස්තු-සම්බන්ධතා සිතියම්කරණ පද්ධති සියල්ලම ඇත. යම් කේතයක් තිබේ. පළමු ක්‍රමයේ යම් SQL කේතයක් ඇත - SELECT id name from info.users WHERE id IN userIds. පරිශීලක දත්ත ගබඩාවෙන්, වගුවෙන්, ඔවුන්ගේ හැඳුනුම්පත් සහ නම් ලබා ගනී.

ඊළඟට, යම් වස්තුවක් පාදයේ සිට ජාවා වස්තුවක් බවට පත් කරන යම් සිතියම්කරුවෙකු ඇත. තවද මෙම කේතය සැබවින්ම ක්‍රියාත්මක කරන තුන්වන ක්‍රමයක් පහත ඇත. මේ සියල්ල පහත ලියා ඇති එක් පේළියකින් JPA භාවිතයෙන් ප්‍රතිස්ථාපනය කළ හැකිය. එය එකම දේ කරයි - All ByIdIn සොයා ගන්න. එනම්, ක්‍රමයේ නම මත පදනම්ව, එය ඔබ වෙනුවෙන් SQL විමසුමක් ජනනය කරයි.

හරිම අපූරු දෙයක්. මමම, මම SQL නොදන්නා විට, JPA භාවිතා කළෙමි. පොදුවේ, අවධානය යොමු කරන්න. ඔබ SQL ඉගෙන ගැනීමට කම්මැලි නම්, එය විනාශයකි. සහ, පොදුවේ, ගින්න!

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

වසන්තය. වසන්ත රාමුව වැනි දෙයක් ගැන අසා ඇත්තේ කවුද? ඔයාලා කී දෙනෙක් ඉන්නවාද කියලා ඔයාට පේනවද? හේතුවක් නැතුව නෙවෙයි. සෑම දෙවන ජාවා පසුපෙළ පුරප්පාඩුවකම අවශ්‍යතා තුළ වසන්තය ඇතුළත් වේ. එය නොමැතිව, විශාල සංවර්ධනයක් තුළ කොතැනකවත් නැත. වසන්තය යනු කුමක්ද? මුලින්ම කියන්න ඕන මේක Dependency Injection රාමුවක්. මේ ගැනත් කියන්නම් ඊළඟ කථිකයා. නමුත් කෙටියෙන් කිවහොත්, මෙය ඔබට සමහර පන්තිවල පරායත්තතා අනෙක් ඒවාට ආනයනය කිරීම පහසු කිරීමට ඉඩ සලසන දෙයකි. එනම් යැපීම් පිළිබඳ දැනුම සරල කර ඇත.

Spring Boot යනු ඔබගේ සේවාදායක යෙදුම එක් බොත්තමකින් ධාවනය කිරීමට ඉඩ සලසන Spring කොටසකි. ඔබ THID වෙත ගොස්, බොත්තම් කිහිපයක් ඔබන්න, දැන් ඔබට ඔබගේ සේවාදායක යෙදුම දේශීය සත්කාරක 8080 මත ක්‍රියාත්මක වේ. එනම්, ඔබ තවමත් කේත පේළියක් ලියා නැත, නමුත් එය දැනටමත් වැඩ කරයි. හරිම අපූරු දෙයක්. ඔබ ඔබේම දෙයක් ලිව්වොත් ගින්දර!

වසන්තය යනු ඉතා විශාල රාමුවකි. එය ඔබගේ සේවාදායක යෙදුම ලබා ගැනීම පමණක් නොව යැපුම් එන්නත් නිරාකරණය කරයි. REST API ක්‍රම නිර්මාණය කිරීම ඇතුළුව දේවල් රාශියක් කිරීමට එය ඔබට ඉඩ සලසයි. එනම් ඔබ යම් ක්‍රමයක් ලියා එයට Get mapping annotation එක අමුණා ඇත. දැන් ඔබට දැනටමත් දේශීය සත්කාරකයේ යම් ක්‍රමයක් තිබේ, එය ඔබට Hello world ලියයි. කේත පේළි දෙකක් සහ එය ක්රියා කරයි. සිසිල් දේවල්.

වසන්තය ලිවීමේ පරීක්ෂණ ද පහසු කරයි. විශාල සංවර්ධනයක් තුළ පරීක්ෂණයකින් තොරව ක්රමයක් නොමැත. කේතය පරීක්ෂා කිරීම අවශ්ය වේ. මෙම කාර්යය සඳහා, Java හි සිසිල් පුස්තකාලයක් ඇත JUnit 5. සහ පොදුවේ JUnit, නමුත් නවතම අනුවාදය වන්නේ පස්වන අනුවාදයයි. පරීක්ෂණ සඳහා සෑම දෙයක්ම, සියලු ආකාරයේ ප්රකාශ සහ වෙනත් දේවල් තිබේ.

ඒ වගේම නියම Mockito රාමුවක් තියෙනවා. ඔබට පරීක්ෂා කිරීමට අවශ්‍ය යම් ක්‍රියාකාරීත්වයක් ඇති බව සිතන්න. ක්‍රියාකාරීත්වය මධ්‍යයේ කොතැනක හෝ ඔබේ හැඳුනුම්පත සමඟ VKontakte වෙත ලොග් වීම ඇතුළු බොහෝ දේ කරයි, සහ VKontakte පරිශීලකයාගේ පළමු සහ අවසාන නම හැඳුනුම්පතෙන් ලබා ගනී. ඔබ බොහෝ විට පරීක්ෂණ සඳහා VKontakte ඇතුළත් නොකරනු ඇත, එය අමුතු දෙයක්. නමුත් ඔබට ක්‍රියාකාරීත්වය පරීක්ෂා කිරීමට අවශ්‍ය වේ, එබැවින් ඔබ මෙම පන්තිය සෑදුවේ, Mockito භාවිතා කර, mok it, එය අනුකරණය කිරීම.

එවැනි සහ එවැනි හැඳුනුම්පතක් සහිත ඉල්ලීමක් මෙම පන්තියට පැමිණෙන විට, එය යම් වාසගමක් ආපසු ලබා දෙන බව ඔබ කියනු ඇත, උදාහරණයක් ලෙස, Vasya Pupkin. සහ එය වැඩ කරනු ඇත. එනම්, ඔබ mok one class සඳහා සියලුම ක්‍රියාකාරීත්වය පරීක්ෂා කරනු ඇත. හරිම අපූරු දෙයක්.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

ස්ලයිඩයෙන් සබැඳිය

මෝස්තර රටා. එය කුමක්ද? මේවා සංවර්ධනයේදී පැන නගින සාමාන්ය ගැටළු විසඳීම සඳහා සැකිලි වේ. සංවර්ධනයේ දී, සමාන හෝ සමාන ගැටළු බොහෝ විට පැනනගින්නේ කෙසේ හෝ හොඳින් විසඳා ගැනීම විශිෂ්ට වනු ඇත. එමනිසා, මෙම ගැටළු විසඳන්නේ කෙසේද යන්න පිළිබඳව මිනිසුන් හොඳම භාවිතයන්, ඇතැම් සැකිලි ඉදිරිපත් කළහ.

වඩාත්ම ජනප්රිය රටා සහිත වෙබ් අඩවියක් තිබේ - refactoring.guru, ඔබට එය කියවිය හැකිය, කුමන රටා තිබේදැයි සොයා බලන්න, න්යාය පොකුරක් කියවන්න. ගැටලුව වන්නේ එය ප්රායෝගිකව නිෂ්ඵල වීමයි. ඇත්ත වශයෙන්ම, ප්රායෝගිකව තොරව රටා විශේෂයෙන් ප්රයෝජනවත් නොවේ.

Singletone හෝ Builder වැනි සමහර රටා ගැන ඔබට ඇසෙනු ඇත. මෙම වචන ඇසුවේ කවුද? ගොඩක් අය. ඔබ විසින්ම ක්රියාත්මක කළ හැකි එවැනි සරල රටා තිබේ. නමුත් බොහෝ රටා: උපාය, කර්මාන්තශාලා, මුහුණත - ඒවා යෙදිය යුත්තේ කොතැනද යන්න පැහැදිලි නැත.

මෙම රටාව යොදන ස්ථානයක් වෙනත් පුද්ගලයෙකුගේ කේතයෙහි ඔබ ප්‍රායෝගිකව දකින තුරු, ඔබට එය ඔබටම යෙදිය නොහැක. එබැවින් රටා සමඟ පුහුණුවීම් ඉතා වැදගත් වේ. refactoring.guru හි ඒවා ගැන කියවීම එතරම් ප්‍රයෝජනවත් නොවේ, නමුත් එය අනිවාර්යයෙන්ම කිරීම වටී.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

රටා අවශ්ය වන්නේ ඇයි? ඔබට යම් පරිශීලක පන්තියක් ඇතැයි සිතමු. ඒකට Id එකක් සහ නමක් තියෙනවා. සෑම පරිශීලකයෙකුටම හැඳුනුම්පතක් සහ නමක් තිබිය යුතුය. ඉහළ වම්පස ඇත්තේ පන්ති කාමරයයි.

පරිශීලක ආරම්භ කිරීමට ක්රම මොනවාද? විකල්ප දෙකක් තිබේ - එක්කෝ කන්ස්ට්‍රක්ටර් හෝ සෙටර්. ප්රවේශයන් දෙකෙහිම අවාසි මොනවාද?

ඉදිකිරීම්කරු. නව පරිශීලක (7, "බැඳුම්කර"), හරි. දැන් අපි කියමු අපට පරිශීලක පන්තියක් නැත, නමුත් සංඛ්‍යාත්මක ක්ෂේත්‍ර හතක් සහිත වෙනත් එකක් තිබේ. ඔබට අඛණ්ඩ අංක හතක් අඩංගු කන්ස්ට්‍රක්ටරයක් ​​ඇත. මෙම අංක මොනවාද සහ ඒවායින් කුමන දේපල අයත් වන්නේද යන්න පැහැදිලි නැත. නිර්මාණකරු විශිෂ්ට නොවේ.

දෙවන විකල්පය සෙටර් වේ. ඔබ පැහැදිලිව ලියන්න: setId(7), setName("Bond"). කුමන දේපල කුමන ක්ෂේත්‍රයට අයත් දැයි ඔබට වැටහේ. ඒත් සෙටර්ට ප්‍රශ්නයක් තියෙනවා. පළමුව, ඔබට යමක් පැවරීමට අමතක විය හැකි අතර, දෙවනුව, ඔබේ වස්තුව වෙනස් විය හැකි බවට හැරේ. මෙය නූල් ආරක්ෂිත නොවන අතර කේතයේ කියවීමේ හැකියාව තරමක් අඩු කරයි. මිනිසුන් සිසිල් රටාවක් ඉදිරිපත් කළේ එබැවිනි - බිල්ඩර්.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

මේ කුමක් ගැනද? ප්‍රවේශයන් දෙකෙහිම වාසි-සෙට්ටර් සහ කන්ස්ට්‍රක්ටර්-එකකින් ඒකාබද්ධ කිරීමට උත්සාහ කරමු. අපි යම් වස්තුවක් සාදන්නෙමු, Builder, එහි Id සහ Name ක්ෂේත්‍ර ද ඇත, එයම සකසනය මත පදනම්ව ගොඩනගනු ඇත, සහ සියලු පරාමිති සහිත නව පරිශීලකයෙකු ඔබට ආපසු ලබා දෙන Build ක්‍රමයක් ඇති. අපි වෙනස් කළ නොහැකි වස්තුවක් සහ කට්ටලයක් ලබා ගනිමු. සිසිල්!

ගැටලු මොනවාද? මෙන්න අපි සම්භාව්ය Builder. ගැටලුව වන්නේ අපට තවමත් යම් ක්ෂේත්‍රයක් පරීක්ෂා කිරීමට අමතක විය හැකි වීමයි. තවද අපට හැඳුනුම්පත නැරඹීමට අමතක වූවා නම්, මෙම අවස්ථාවෙහිදී Builder හි එය ශුන්‍යයට ආරම්භ කරනු ලැබේ, මන්ද int වර්ගය nullable නොවේ. තවද අපි "බැඳුම්කර" යන නම සාදා හැඳුනුම්පත කාර්යාලයට යාමට අමතක කළහොත්, අපට "0" හැඳුනුම්පත සහ "බැඳුම්කර" යන නම සහිත නව පරිශීලකයෙකු ලැබෙනු ඇත. සිසිල් නොවේ.

අපි මෙය සමඟ සටන් කිරීමට උත්සාහ කරමු. Builder හි අපි int ලෙස int වෙනස් කරන්නෙමු, එවිට එය nullable වේ. දැන් සියල්ල විශිෂ්ටයි.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

අපි "Bond" යන නම සහිත පරිශීලකයෙකු නිර්මාණය කිරීමට උත්සාහ කළහොත්, ඔහුගේ හැඳුනුම්පත තැබීමට අමතක වූ විට, අපට ශුන්‍ය ලක්ෂ්‍ය ව්‍යතිරේකයක් ලැබෙනු ඇත, මන්ද හැඳුනුම්පත ශුන්‍ය නොවන අතර, සාදන්නාට ශුන්‍ය, විශේෂයෙන් පොයින්ටර් ව්‍යතිරේකයක් ඇත.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

නමුත් අපට තවමත් නමක් තැබීමට අමතක විය හැක, එබැවින් අපි වස්තුව නැවත ධාවනය ශුන්‍ය ලෙස සකසන්නෙමු. දැන්, අපි Builder වෙතින් අපගේ වස්තුව ගොඩනඟන විට, එය ක්ෂේත්‍රය ශුන්‍ය නොවන බව පරීක්ෂා කරයි. ඒ විතරක් නෙවෙයි.

අපි අවසාන උදාහරණය බලමු. මෙම අවස්ථාවෙහිදී, අපි කෙසේ හෝ ID ධාවන කාලය තුළ ශුන්‍ය තැබුවහොත්, ඔබ එය කළ බව වහාම දැන ගැනීම ඉතා හොඳ වන අතර ඔබ දැන් වැරැද්දක් කිරීම සිසිල් නොවේ.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

ඔබට දෝෂයක් ඇති කිරීමට අවශ්‍ය වන්නේ පරිශීලක නිර්මාණය කරන මොහොතේ නොව, ඔබ හැඳුනුම්පතට ශුන්‍ය ලෙස සැකසූ විටය. එබැවින්, Builder හි අපි Integer සකසනය int ලෙස වෙනස් කරන්නෙමු, ඔහු වහාම ඔවුන් ශුන්‍ය ලෙස විසි කළ බවට දිවුරනු ඇත.

කෙටියෙන් කිවහොත්, කාරණය කුමක්ද? සරල Builder රටාවක් ඇත, නමුත් එහි ක්රියාත්මක කිරීම පවා සමහර සියුම්කම් ඇත, එබැවින් රටා වල විවිධ ක්රියාත්මක කිරීම් දෙස බැලීම ඉතා සිසිල් ය. සෑම රටාවක්ම ක්රියාත්මක කිරීම් දුසිම් ගණනක් ඇත. මේ සියල්ල ඉතා සිත්ගන්නා සුළුය.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

නිෂ්පාදන කේතයේ අපි Builder ලියන්නේ කෙසේද? මෙන්න අපේ User. අපි එයට ලොම්බොක් පුස්තකාලයෙන් බිල්ඩර් භ්‍රමණයක් අමුණන්නෙමු, එයම අපට සාදන්නෙකු ජනනය කරයි. එනම්, අපි කිසිදු කේතයක් ලියන්නේ නැත, නමුත් Java දැනටමත් සිතන්නේ මෙම පන්තියට Builder එකක් ඇති බවත්, අපට එය මෙලෙස හැඳින්විය හැකි බවත්ය.

ජාවා සතුව බොයිලර් ප්ලේට් ලිවීමෙන් වැළකී සිටීමට ඉඩ සලසන සිසිල් පුස්තකාලයක් වන ලොම්බොක් ඇතුළු සෑම දෙයක් සඳහාම පාහේ පුස්තකාල ඇති බව මම දැනටමත් පවසා ඇත. ඉදි කරන්නා, ලබා ගන්න.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

රටා වාස්තු විද්‍යාත්මක විය හැකිය - එක් පන්තියකට පමණක් නොව සමස්තයක් ලෙස පද්ධතියට සම්බන්ධ වේ. පද්ධති නිර්මාණයේ එවැනි සිසිල් මූලධර්මයක් ඇත: තනි වගකීම් මූලධර්මය. ඔහු කතා කරන්නේ කුමක් ගැනද? සෑම පන්තියක්ම එහිම ක්‍රියාකාරීත්වයන් සඳහා වගකිව යුතු බව ය. මෙම අවස්ථාවේදී, අපට පරිශීලකයන්, JSON වස්තූන් සමඟ සන්නිවේදනය කරන පාලකයක් ඇත. ජාවා යෙදුම ක්‍රියා කරන JSON වස්තු ආකෘති බවට පරිවර්තනය කරන ෆැසෙඩ් ඇත. මෙම ආකෘති සමඟ ක්‍රියා කරන සංකීර්ණ තර්කනයක් ඇති සේවාවක් තිබේ. මෙම ආකෘති දත්ත ගබඩාවට දමා දත්ත සමුදායෙන් ලබා ගන්නා Data Access Object එකක් ඇත. ඒ වගේම database එකත් තියෙනවා. වෙනත් වචන වලින් කිවහොත්, මේ සියල්ල එක පන්තියක නොවේ, නමුත් අපි විවිධ පන්ති පහක් සාදන්නෙමු, එය තවත් රටාවකි.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

ඔබ ජාවා වැඩි වශයෙන් හෝ අඩුවෙන් ඉගෙන ගත් පසු, දත්ත සමුදායක් ඇති ඔබේම ව්‍යාපෘතියක් ලිවීම, වෙනත් API සමඟ වැඩ කිරීම සහ ඔබේ සේවාදායක යෙදුම REST API සේවාලාභීන් වෙත හෙළිදරව් කිරීම ඉතා හොඳයි. මෙය ඔබගේ ජීව දත්ත පත්‍රයට එක් කිරීම ඉතා හොඳ දෙයක් වනු ඇත, එය ඔබගේ අධ්‍යාපනයට සිසිල් අවසානයක් වනු ඇත. මේකෙන් ගිහින් රස්සාවක් ගන්න පුළුවන්.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

මෙන්න මගේ සේවාදායක යෙදුමේ උදාහරණයක්. මගේ දෙවෙනි අවුරුද්දේ මම කොල්ලෝ එක්ක වාර පේපර් එකක් ලිව්වා. ඔවුන් සිදුවීම් සංවිධානය කිරීම සඳහා ජංගම යෙදුමක් ලියමින් සිටියහ. එහිදී, පරිශීලකයින්ට VKontakte හරහා ලොග් වීමට, සිතියමේ ලකුණු ස්ථානගත කිරීමට, සිදුවීම් නිර්මාණය කිරීමට, ඔවුන්ගේ මිතුරන්ට ඔවුන්ට ආරාධනා කිරීමට, සිදුවීම්වල පින්තූර සුරැකීමට යනාදිය හැක.

මම ව්යාපෘතියේ කළේ කුමක්ද? SQL භාවිතා නොකර Spring Boot හි සේවාදායක යෙදුමක් ලිවීය. මම ඔහුව දැන සිටියේ නැත, මම JPA භාවිතා කළෙමි. එය කුමක් කළ හැකිද? OAuth-2 හරහා VK වෙත ලොග් වන්න. පරිශීලකයාගේ ටෝකනය ගන්න, එය සමඟ VK වෙත යන්න, එය සැබෑ පරිශීලකයෙකු දැයි පරීක්ෂා කරන්න. VKontakte හරහා පරිශීලකයින් පිළිබඳ තොරතුරු ලබා ගන්න. එය JPA හරහා ද දත්ත ගබඩාවක තොරතුරු සුරැකීමට හැකි විය. පරිගණක මතකයේ පින්තූර සහ අනෙකුත් ගොනු දක්ෂ ලෙස සුරකින්න, දත්ත ගබඩාවේ ඒවාට සබැඳි සුරකින්න. ඒ වෙලාවේ මම දත්ත ගබඩාවේ CLOB වස්තූන් ඇති බව නොදැන සිටි නිසා මම එය මේ ආකාරයෙන් කළා. පරිශීලකයන්, සේවාදායක යෙදුම් සඳහා REST API එකක් තිබුණි. සහ මූලික ක්‍රියාකාරීත්වය සඳහා ඒකක පරීක්ෂණ තිබුණා.

[…] මගේ සාර්ථක ජාවා ඉගෙනීමේ කුඩා උදාහරණයක්. විශ්ව විද්‍යාලයේ මගේ පළමු වසරේ දී, මට C# ඉගැන්වූ අතර OOP වැඩසටහන්කරණය පිළිබඳ අවබෝධයක් ලබා දෙන ලදී - පන්ති, අතුරුමුහුණත්, වියුක්තකරණය යනු කුමක්ද සහ ඒවා අවශ්‍ය වන්නේ ඇයි? ඒක මට ගොඩක් උදව් කළා. මෙය නොමැතිව, ජාවා ඉගෙනීම තරමක් අපහසු ය; පන්ති අවශ්‍ය වන්නේ මන්දැයි පැහැදිලි නැත.

ජාවා ඉගෙන ගන්නේ ඇයි සහ එය ඵලදායී ලෙස කරන්නේ කෙසේද? Yandex වාර්තාව

විශ්ව විද්‍යාලයේ මගේ දෙවන වසරේ, ඔවුන් නැවතත් ජාවා හරය ඉගැන්වූ නමුත් මම එතැනින් නොනැවතී, මම වසන්තය ඉගෙනීමට ගොස් මා ඉහත සඳහන් කළ මගේ ව්‍යාපෘතියක් වන පාඨමාලා කෘතියක් ලිවීය. මේ සියල්ල සමඟ, මම Yandex හි සීමාවාසික පුහුණුවක් සඳහා ගොස්, සම්මුඛ පරීක්ෂණයක් සමත් වී, Yandex.Market වෙත ගියෙමි. එහිදී මම Beru සඳහා පසුපෙළ ලිව්වෙමි, මෙය අපගේ වෙළඳපොළයි, සහ Yandex.Market සඳහාම.

ඊට පස්සේ මාස හයකට කලින් මම ඒ Market එකේම වෙන කණ්ඩායමකට මාරු වුණා. අපි ව්‍යාපාරික හවුල්කරුවන් සඳහා විශ්ලේෂණ කරන්නෙමු. අපි ඉන්නේ විශ්ලේෂණාත්මක වේදිකාවේ, අපි තුන් දෙනෙක් පිටුපසින් ඉන්නවා, ඒ නිසා මට ව්‍යාපෘතියට විශාල බලපෑමක් තියෙනවා. එය ඇත්තෙන්ම ඉතා සිත්ගන්නා සුළුය. එනම්, අපි ඇත්ත වශයෙන්ම වෙළඳපොලේ දත්ත සපයන්නෙමු - විකුණුම් මොනවාද, කුමන කාණ්ඩවලද, කුමන මාදිලියේද, ව්යාපාරික හවුල්කරුවන් සඳහා, විශාල ප්රසිද්ධ සමාගම්. අපෙන් තිදෙනෙක් පමණක් ඇත, අපි මෙම කේතය ලියන්නෙමු, එය ඉතා සිසිල් ය.

ඔයාට ස්තූතියි! ප්රයෝජනවත් සබැඳි:
- "Java 8. ආරම්භක මාර්ගෝපදේශය".
- දත්ත ව්යුහයන්.
- SQLZOO.
- දත්ත සමුදාය සාමාන්‍යකරණය.
- මෝස්තර රටා.
- මෝස්තර රටා.
- පිරිසිදු කේතය.
- ඵලදායී ජාවා.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න