Java áááş áĄááźáŹá¸ááŹáááşááźáŽá¸ááŹááŹá
ááŹá¸ááťáŹá¸áážááˇáş áááşáááŻáˇáá˝áŹááźáŹá¸ááááşá¸á Java áááş áĄáááşááźáąáŹááˇáş áááááŻáśá¸ áááşáá°áááˇáşááááşá¸á Java ááᯠáĄá
ááž áááşáá°ááźáŽá¸ áĄááźáŹá¸ááŹááŹá
ááŹá¸ááťáŹá¸ááźááˇáş ááááŻááááşááąá¸ááŹá¸ááźááşá¸á
á˝ááşá¸áááşááᯠáĄááŻáśá¸ááťááźááşá¸ááźááˇáş áá°ááŽááąá¸áááˇáş áĄá
áŽáĄá
ááşáá
áşááŻááᯠáááşááŽá¸ááźááŤá
ááŻáˇá Java áá˝ááş ááŻááşááŻááşáážáŻááŻááş áááşááŽá¸ááźááşá¸áážááˇáş áĄááźáŹá¸ááŹááŹá
ááŹá¸ááťáŹá¸ááźááˇáş ááŽáá˝ááşááźááşá¸ááźáŹá¸ ááźáŹá¸ááŹá¸ááťááşááťáŹá¸ááᯠá
áŹáááşá¸ááźáŻá
áŻááźááŤá
ááŻáˇá Mikhail Zatepyakin áááş áĄááŹáááşááŤáááşáá°ááťáŹá¸áĄáá˝ááş áĄá
ááşá¸áĄááąá¸áá
áşááŻáá˝ááş á¤áĄá
áŽáááşááśá
áŹááᯠáááşááźáŹá¸áá˛áˇáááşá
- áĄáŹá¸ááŻáśá¸áá˛áááşášáááŹá፠ááťá˝ááşááąáŹáˇáşááŹáááş Misha ááŤá ááťá˝ááşáŻááşáááş Yandex.Market ááž developer áá áşáŚá¸ááźá áşááźáŽá¸ áááąáˇáá˝ááş Java ááᯠááąáˇááŹáááşáážááˇáş áááşá¸ááᯠááááąáŹááşá á˝áŹááźáŻááŻááşáááşá¸ááᯠááźáąáŹááźááŤáááşá ááťááŻá¸ááźáąáŹááşá¸ááŽááťáąáŹáşááąáŹááąá¸áá˝ááşá¸ááᯠáááşááąá¸áááŻááşáááş- áĄáá˝áąáˇáĄááźáŻáś áážá áşááąáŤááşá¸ááťáŹá¸á á˝áŹáážáááąáŹ áááŻááşááŹááąáŹ developer áááŻááşáᲠáĄáááşááźáąáŹááˇáş á¤ááŹááşáááşá¸ááᯠááźáąáŹááźááááşáááşá¸á ááááşááąáŹáˇ áá˝ááşáá˛áˇáá˛áˇ áá áşáážá áşáá˝á˛ááąáŹááşá ááťá˝ááşááąáŹáşáááŻááşáááŻááş Java ááᯠáááźáŹááąá¸ááŽá ááąáˇááŹáá˛áˇááŹááŤá ááŤááźáąáŹááˇáş áááşáááŻááŻáśá áśáá˛áˇ ááťááŻáˇáá˝ááşá¸ááťááşáá˝áą áážáááąáá˛áááŻááŹááᯠááťá˝ááşááąáŹáş áážááşááááąááŤááąá¸áááşá
áá˝ááşáá˛áˇáááˇáşáá áşáážá áşá ááťá˝ááşááąáŹáş Yandex.Market áá˝ááş áĄááŻááşáááşáá áşááŻááá˛áˇáááşá Beru áĄáá˝ááş backend ááᯠááŽáá˝ááşáá˛áˇáááşá Market áááŻááşáááŻááşáĄáá˝ááşá áááşááŻáśá¸ááŹááźá áşáááŻááşááŤáááşá áĄááŻááťá˝ááşááąáŹáşá áááźáŹá¸áĄáá˝á˛áˇáá áşááŻáážáŹ áááşááźáŽá¸áĄááŻááşááŻááşááąáááşá ááťá˝ááşáŻááşáááŻáˇáááş ááŻááşáááşá¸ááŻááşááąáŹáşáááŻááşáááşááťáŹá¸áĄáá˝ááş Yandex.Market áĄáá˝ááş áá˝á˛ááźááşá¸á áááşááźáŹáážáŻááááşááąáŹááşá¸áá áşááŻááᯠáááşááŽá¸ááŤáááşá
á
áááŻááşááźá
ááŻáˇá ááŹááźáąáŹááˇáş Java ááᯠáááşáá˝áąáˇááťááť áážáŻááąáŹááˇáşáááą áááşáá°áááŹáá˛á ááááşááąáŹáˇ Java áᏠáĄáá˝ááşááŹáááşááźáŽá¸áá˛áˇ programming language áá
áşááŻááŤá áááşá¸áá˝ááş áĄáá˝ááşááźáŽá¸ááŹá¸ááąáŹ áĄáááŻááşáĄáááşá¸áá
áşááŻáážááááşá
áĽáááŹáĄáŹá¸ááźááˇáşá áááŻáá˛áˇáááŻáˇááąáŹ TIOBE áĄáá˝ážááşá¸ááááşá¸á ááááŻááááşá¸áááşá¸ááŹááŹá ááŹá¸ááťáŹá¸á áá°ááźááŻááşááťáŹá¸áážáŻáááŻááşáᏠáĄáá˝ážááşá¸ááááşá¸áá áşááŻáážáááźáŽá¸ Java áááş áááŻááąááŹáá˝ááş ááááĄáááˇáşáážááááşá áááŻáˇáĄááźááş áĄááŻááşáááŻááşááťáŹá¸áá˝ááş áá áşáááşááąááąáŹááąááŹáĄááťáŹá¸á áŻáááş Java áĄááźáąáŹááşá¸ááźá áşáááşá áááŻáááŻáááşáážáŹ Java áá˝ááş ááŽáá˝ááşááźááşá¸ááźááˇáş áááşáááş áĄááŻááşáá áşááŻááᯠáĄááźá˛áááşá¸áážáŹáá˝áąáááŻááşáááşá
áá˝ááşááźá°áááŽáááş áĄáá˝ááşááźáŽá¸ááŹá¸ááąáŹááźáąáŹááˇáşá áááşááąá¸ááŹá¸ááąáŹááąá¸áá˝ááşá¸áááŻááşá¸áááş Stack Overflow áááŻáˇáááŻááş áĄááźáŹá¸áááŻááşáĄááťááŻáˇáá˝ááş áĄááźáąáá˝áąáˇááááˇáşáááşá Java áá˝ááş áá˝áśáˇááźááŻá¸ááŹááąáŹáĄááŤáá˝ááş áááşáááş JVM áá˝ááş ááŻááşááᯠáĄáážááşááááş ááąá¸ááŹá¸ááąááąáŹááźáąáŹááˇáş áááşáááş JVM ááᯠáĄááŻáśá¸ááźáŻáááˇáş Kotliná Scala áážááˇáş áĄááźáŹá¸ááŹááŹá ááŹá¸ááťáŹá¸áááŻáˇ áĄáá˝ááşááá° ááźáąáŹááşá¸áááŻááşáááşá
áĄáá°ááŤá áážáŻááąáŹááˇáşááž ááťáŹááŹá¸ á ááąáŹááşá¸ááťááŻá¸á ááŹáᲠá ááááŻááááşá¸áááşá¸ááŹááŹá
ááŹá¸áĄááťááŻá¸ááťááŻá¸áážáááŤáááşá áá°áááŻáˇáᏠááá°ááŽáá˛áˇááźáżááŹáá˝áąááᯠááźáąáážááşá¸áááŻááşáááşáááŻáᏠáááşááááŤáááşá áĽáááŹáĄáŹá¸ááźááˇáşá Python áááş áĄááźááşááźáżááŹááťáŹá¸ááᯠááźáąáážááşá¸áááşáĄáá˝ááş áá
áşááźáąáŹááşá¸áááşá¸ááąáŹ script ááťáŹá¸ááąá¸ááŹá¸ááźááşá¸áĄáá˝ááş ááąáŹááşá¸áá˝ááşááŤáááşá
áĄááąáŤááşá¸áááşáá˝ááşá áááşáááş executable code ááᯠáĄááźááˇáşáĄá ááááşá¸ááťáŻááşáááŻááşáááşá áĽáááŹáĄáŹá¸ááźááˇáşá ááťá˝ááşáŻááşáááŻáˇáá˝ááşááŹá¸ááťáŹá¸á Yandex ááąáŹááşá¸áá°áá˛áˇááŹá¸ááťáŹá¸áážááááşá áááşá¸áááŻáˇáááŻááşááᯠpluses ááźááˇáşááąá¸ááŹá¸áááşá áĄáááşááźáąáŹááşáˇ? Java áá˝ááş áĄáážááŻááşá áŻááąáŹááşá¸áá° áážáááŤáááşá áááşá¸áááş ááááŻáĄááşááąáŹ áĄááŹááášááŻááťáŹá¸á RAM ááᯠáážááşá¸áááşá¸ááąá¸áááşá á¤áĄááŹáááş áá°áˇáĄáááŻááᯠá áááşááźáŽá¸ ááášááŹááᯠáááşáááˇáşá áąáááşá áááŻáááŻáááşáážáŹ áááşá¸áááş ááťááşááąáŹ ááááŻááááşááťáŹá¸ááᯠáááşáááˇáşáᏠáĄááŹááášááŻááťáŹá¸ááᯠááąáá˝ááşáááşá áĄááŹááášááŻááťáŹá¸á áážááşááŹááşááᯠáážááşá¸áážááşá¸áááşá¸áááşá¸ ááźá áşá áąáááşá ááŽáááŻáĄááŹááťááŻá¸áᏠáááŻááşá¸áážáŹ áĄááŻááşááŻááşáááş ááĄáąá¸ááŤáá°á¸á áááşááááŻááşá¸áááş á¤áĄáááŻááşáĄáááˇáşáá˝ááş áááşá¸ááážááşááŹááşááᯠáážááşá¸áááşá¸á áąááźáŽá¸ áááşá¸ááᯠááŻáśá¸ááááźááˇáşáᲠááźáąáŹááˇáşáááşá¸á á˝áŹááąáŹááşá¸áážááşáááşááźá áşáááşá áááŻáˇááźáąáŹááˇáş áááŻááşá¸áááş ááąáŹááşá¸ááťááŻá¸ááťáŹá¸ááᯠááąá¸ááŹá¸áááşá
Java áááş áááşáááˇáşááźáżááŹááťáŹá¸ááᯠááźáąáážááşá¸ááąá¸ááááşá¸á áááşá¸áááş áá°ááąáŤááşá¸ ááŤáááşáážááˇáşááťáŽááąáŹ áážá
áşááťáŹá¸áĄáá˝ááşá¸ ááąá¸ááŹá¸áá˛áˇááąáŹ ááźáŽá¸ááŹá¸ááąáŹ ááááŻááááşááťáŹá¸ááᯠááŽáá˝ááşáááşáĄáá˝ááş áĄááááĄáŹá¸ááźááˇáş ááŹááŹá
ááŹá¸áá
áşááŻááźá
áşáááşá áĄáá°á¸áááźááˇáşá Yandex.Market áážá backend áĄááťáŹá¸áĄááźáŹá¸ááᯠJava ááźááˇáşááąá¸ááŹá¸ááŹá¸áááşá ááťá˝ááşáŻááşáááŻáˇáá˝ááş ááźááŻáˇááąáŤááşá¸ááťáŹá¸á
á˝áŹáá˝ááş ááźááˇáşááąááąá¸áĄáá˝á˛áˇáá
áşááŻá
áŽáážáááźáŽá¸ áá°áááşáŚá¸áážááááşá ááŻááşááᯠááááşá¸ááááşá¸ááá˝ááşáá°áááşá áááşá¸ááᯠáááşáážá
áş áááŻáˇáááŻááş áááŻáˇáááşáááŻá ááąáŹááşááśáˇááąá¸ááŹá¸ááźáŽá¸ áá
áşááťáááşáááşá¸áá˝ááş áá°áá
áşááťáŹá¸áááşááŹááźáŽá¸ á¤ááŻááşááᯠááŹá¸áááşáááşá
ááŹááŹá ááŹá¸áá áşááŻáá˝ááş áááşáááˇáşááááąáááášáááŹááťáŹá¸ áážááááˇáşááááşá¸á áááŻáˇáážáᏠáááşá¸áážáááŻááşááᯠáĄáá˝ááşááá° ááśáˇáááŻá¸áááŻááşááźáŽá¸ áĄáááşá¸ááźáŽá¸ááťáŹá¸áá˝ááş áĄáá˝ááşááá° ááŽáá˝ááşáááŻááşá áąáááşá ááááŚá¸á á˝áŹá áááşá¸áááş áááşáááŻááşááąáŹ ááŻááşááźá áşáááˇáşááźáŽá¸ áážáŻááşáá˝áąá¸ááąáŹ ááááŻááŹáááŻááşáᏠááźáąáážááşá¸ááťááşááťáŹá¸ááᯠáĄááąáŹááşáĄáááşááąáŹáşáááş áá˝ááşáá°áááˇáşáááşá áááŻáááŻáááşáážáŹá áĄáááˇáşááźááˇáş abstractions á áááşáááŻáˇááᯠááąá¸áááş áá˝ááşáá°áááˇáşááŤáááşá á¤áĄááŹáĄáŹá¸ááŻáśá¸áááş Java ááž ááťá˝ááşáŻááşáááŻáˇáĄáŹá¸ ááąá¸ááąáŹááşááŤáááşá áááşá¸áááş áĄááŹááášááŻááᯠáŚá¸áááşááąáŹ ááŹááŹá ááŹá¸áá áşááŻááźá áşáááşá áĄáááˇáşááźááˇáş abstractions ááťáŹá¸áážááˇáş áážáŻááşáá˝áąá¸ááąáŹ ááááŻááŹáááşááŹááťáŹá¸ááᯠáĄááąáŹááşáĄáááşááąáŹáşáááş áĄáážááşááááşáá˝ááşáá°ááŤáááşá
Java áĄáá˝ááş áá°ááąáŹááşááťáŹá¸áážááˇáş á áŹááźááˇáşáááŻááşááťáŹá¸á á˝áŹáááşá¸ áážáááŤáááşá áĄáááşááźáąáŹááˇáşáááŻááąáŹáş ááŹááŹá ááŹá¸áááş 15 áážá áşááťáąáŹáşááźáŽááźá áşááąáŹááźáąáŹááˇáş ááźá áşáááşá áááŻáĄááťáááşáá˝ááşá ááąá¸áááŻááşáááťážááᯠááąá¸áážááşááŹá¸ááąáŹááźáąáŹááˇáş áááşáááŻáĄááşáááťážáĄáá˝ááş á áŹááźááˇáşáááŻááşááťáŹá¸á á˝áŹáážááááşá
ááťá˝ááşááąáŹáˇáşáĄááźááşáĄáááąáŹáˇ JA áá
áŹá¸áááŹá¸áá
áşááąáŹááşáážáŹ áááşáĄááźáąááśáĄáááşáĄááťááşá¸áá˝áą áážááááˇáşáá˛á áááááŻáśá¸áĄááąáá˛áˇá ááŤá Java core language áá˛áˇ áááŻááŻáááŤá ááąáŹááşáá
áşááŻáááąáŹáˇ Dependency Injection framework áá
áşááťááŻá¸ááŤá ááąáŹááşá
ááŽááŹááźá
áşáá˛áˇ Kirill á ááŽáĄááźáąáŹááşá¸ááᯠáááŻááźáŽá¸ááźááˇáşá
áŻáśáĄáąáŹááş ááźáąáŹááźááŤááááˇáşáááşá ááŤáĄáááşá¸áááşáá˛ááá˝áŹá¸áá°á¸á ááąáŹááşáá
áşááŻáááąáŹáˇ ááááŻááŹáá˛áˇ ááŽáááŻááşá¸ááŻáśá
áśáá˝áąááŤá áĄáááŽááąá¸áážááşá¸ááźáŽá¸ááťáŹá¸áááŻááąá¸áááşáĄáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş ááááŻááŹáááşááŹááźáąáŹááşáážáááąáŹááŻááşááᯠááąá¸ááŹá¸áááŻááşáááşáááŻáĄááşáááşá áááşá¸áááş ááąááŹááąáˇá
áşáážááˇáş ááŻááşááąáŹááşáááˇáş áĄááŻááşááťáŹá¸áĄáá˝ááş SQL áááŻáˇáááŻááş ORM áĄááťááŻá¸áĄá
áŹá¸áĄááťááŻáˇááźá
áşáááşá ááźáŽá¸ááąáŹáˇ ááŤá backend áá˛áˇ áááŻáááşáááŻááşáááşá
áá˝áŹá¸! Java core á ááŽáážáŹ áĄááąáááááᯠááŤááááşáážáŹáá˝áąáˇáážáŹáááŻááşáá°á¸- áááşá¸ááŹááŹá
ááŹá¸áááŻááşáááŻááşáááááŻáˇáááŻáááşá ááŹáá˝áąááᯠáááááŹá¸áááˇáşáá˛á ááááŚá¸á
á˝áŹá Java áááş áááźáŹááąá¸ááŽáážá
áşááťáŹá¸áĄáá˝ááşá¸ ááŹá¸áážááşá¸ááťáŹá¸á
á˝áŹááᯠááŻááşááąáá˛áˇááźáŽá¸ áááŻáááŻáááşáážáŹ 2014-2015 ááŻáážá
áşáá˝ááş ááášááááźáąáŹááşááᯠááŻááşááąáá˛áˇááźáŽá¸á áááŻáˇááąáŹááş áĄáášááá áááá áááá ááŹá¸áážááşá¸áĄáá
áşááťáŹá¸á
á˝áŹáážááˇáş áááşá¸áááŻáˇáá˝ááş áĄáááşá¸á
áŹá¸áĄáá
áşááťáŹá¸á
á˝áŹááᯠááááşáááşááąá¸áá˛áˇáááşá áĽáááŹáĄáŹá¸ááźááˇáşá Java Stream API á lambda á
áááşáááŻáˇá ááŻááşááŻááşááąá¸ááŻááşáá˝ááş áĄááŻáśá¸ááźáŻáááˇáş áĄáá˝ááşáĄáąá¸ááźááąáŹá áááşáááşááąáŹá áĄáąá¸ááźááąáŹ áĄááŹááťáŹá¸á áĄááşááŹááťá°á¸ááťáŹá¸áá˝ááş áááşá¸áááŻáˇááąá¸ááŹá¸áááşááťáŹá¸áážááˇáş áááşáááááŻááąáŹáĄááŹááťáŹá¸á áááŻáˇááźáąáŹááˇáş áááşáááş Java-4 á
áŹááźááˇáşáááŻááşáážá á
ááşááž á
áŹáĄáŻááşáá
áşáĄáŻááşááᯠáá°áá˝áŹá¸ááźáŽá¸ áááşá¸ááᯠááąáˇááŹáááş ááááˇáşááŤá á¤áááşáážáŹ ááťá˝ááşáŻááşáááŻáˇá áĄá
áŽáĄá
ááşááźá
áşáááş- ááťá˝ááşáŻááşáááŻáˇáááş Java-8 áááŻáˇáááŻááş áááŻáˇáááş áááŻááąáˇááŹáááşá
Stream APIá var á áááşáááŻáˇáá˛áˇáááŻáˇááąáŹ áááşá¸áá áşááŽáá˝ááşáážáŻááťáŹá¸ááᯠááťá˝ááşáŻááşáááŻáˇ áĄáŹááŻáśá ááŻááşááŤáááşá áááşá¸áááŻáˇááᯠáĄááşááŹááťá°á¸ááťáŹá¸áĄáá˝ááşá¸ ááąá¸ááźááşá¸ááźáŽá¸ ááŻááşááŻááşááąá¸áá˝ááş áĄááźá˛áá áą áĄááŻáśá¸ááźáŻááŤáááşá áááŻáááŻáááşáážáŹá Stream API áááş loops ááťáŹá¸áááş ááťáŹá¸á á˝áŹáĄáąá¸áááşá ááąááŻááťáĄáŹá¸ááźááˇáşá áĄáá˝ááşáĄáąá¸ááąáŹ áĄááŹááźá áşáááşá ááąááťáŹáááŻááźáŻááŤá
áááŻáˇáĄááźááş áááşáááˇáşááąá¸áá°ááťáŹá¸á ááźá˝ááşá¸ááťááşááťáŹá¸áážááˇáş áĄááźáŹá¸áĄááŹááťáŹá¸ áážáááŤáááşá áááşáááŻááşáááŻááşááŻááşááąá¸áá áşááŻááąá¸ááąááá˝áąáˇ áááˇáşáĄáá˝ááş áĄááąá¸áááŤáá°á¸áááŻáˇáááşáá˛áˇáĄááŹáá˝áąááŤá ááŽááźá˝ááşá¸ááťááşáá˝áąááᯠáááşá¸ ááááŻáĄááşáá°á¸á áááşáá°áá˝áą áááŻáĄááşááąáá˛á ááŤááąáááˇáş áĄááşááŹááťá°á¸áá˝áąáážáŹ áá°áááŻáˇááᯠááąááťáŹááąáŤááş ááąá¸ááááˇáşáááşá áá°áááŻáˇá ááŻááşááŻááşááąá¸áážáŹ áááˇáşáĄáá˝ááş ááąááťáŹááąáŤááş áĄááŻáśá¸áááşááŤááááˇáşáááşá ááąáá°ááťáĄáŹá¸ááźááˇáş áááşáááş ááźá˝ááşá¸ááťááşááťáŹá¸á áááşááá˛áá˛áážááˇáş áĄááźáŹá¸áĄááŹááťáŹá¸ááᯠáĄáŹááŻáśá ááŻááşáááˇáşáááşá
ááąááŹáá˝á˛áˇá
ááşá¸ááŻáśááťáŹá¸á áá˝á˛áˇá
ááşá¸áááşááąáŹááşááŻáśááťáŹá¸áááŤáᲠáááşááá˝áŹá¸áááŻááşááŤá áááŻáˇááąáŹáş áĄá
áŻáśá áĄááááŹááşáážááˇáş á
áŹáá˝ááşááťáŹá¸áážáááźáąáŹááşá¸ áááşáááááŤá áĄáá˝ááşááąáŹááşá¸ááŤáááşá áážááˇáş áá˝á˛ááźáŹá¸ááźáŹá¸ááŹá¸ááąáŹ áá˝á˛áˇá
ááşá¸ááŻáśááťáŹá¸ááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸á áĽáááŹáĄáŹá¸ááźááˇáşá Java áážá áá°ááŽááąáŹáĄááááŹááşáá˝ááş HashMap áážááˇáş TreeMap áĄááŤáĄáááş áĄááąáŹááşáĄáááşááąáŹáşáážáŻááťáŹá¸á
á˝áŹáážááááşá áááşá¸áááŻáˇáá˝ááş áá˝á˛ááźáŹá¸ááąáŹ ááąáŹááŤááášáááŹááťáŹá¸ áážááááşá áááşá¸áááŻáˇáááş áĄáá˝ááşá¸áááŻááşá¸áá˝ááş áááşááąáŹááşááŻáś áá˝á˛ááźáŹá¸áááşá áááşá¸áááŻáˇ áááşáá˛áˇáááŻáˇ áá˝á˛ááźáŹá¸ááźáŽá¸ áááşáááˇáşáĄááťáááşááᯠáĄááŻáśá¸ááźáŻááááşááᯠáááááş áááŻáĄááşááŤáááşá
á¤ááąááŹáááşááąáŹááşááŻáśááťáŹá¸áááş áĄáá˝ááşá¸áááŻááşá¸áĄááŻááşááŻááşááŻáśááᯠáááşááááŤá áĄáá˝ááşáĄáąá¸ááźááŤááááˇáşáááşá áááŻáááŻáááşáážáŹá áááşá¸áááŻáˇá asymptotics ááťáŹá¸ááᯠáááááşááá˝ááşáá°á፠- áĄááąáŹááşá¸áĄá áŹá¸áááşááťážáĄááŻááşááŻááşáááşá pass áááşááťážááźáŹááźáŹáĄááŻááşááŻááşáááşá áááŻáˇááąáŹáşáĄáá˝ááşá¸áá˝ááşáááşááąáŹááşááŻáśáĄááŻááşááŻááşááŻáś - áĽááᏠHashMap áážáááŻáśá¸áá áşááŻáśá¸áááŻááŹááŹáá˛á
áá áşáááşááťáŹá¸áážááˇáş ááááşááťáŹá¸ááᯠáĄáŹááŻáśá ááŻááşáááşáááşá¸ áááŻááşáááşááŤáááşá á¤áĄááŹááťáŹá¸áááş ááŻááşááŻááşáážáŻááŻááşáá˝ááş áĄááŻáśá¸ááťáŹá¸ááąáŹ áĄááŹááťáŹá¸áááŻááşááąáŹáşáááşá¸ áĄááşááŹááťá°á¸ááťáŹá¸áá˝ááş áááşá¸áááŻáˇáááş ááąáááşá¸á áŹá¸áááşá áááŻáˇááźáąáŹááˇáş áááşáááş áá áşáááşááťáŹá¸ááᯠááźááşá áĄááťááşáážááˇáş áĄááááşáĄáááşáážá ááááşááťáŹá¸ááᯠááźááşááťáąáŹáşáááŻááşáááşáááŻáĄááşáááşá ááŤáá˝áąáĄáŹá¸ááŻáśá¸áᏠáááŻá¸áážááşá¸áá˛áˇ algorithms áá˝áąááŤá
ááźáŽá¸ááŹá¸ááąáŹááŻááşááťáŹá¸á áážáŻááşáá˝áąá¸ááąáŹá á áŹááźááˇáşáááŻááşááťáŹá¸á multi-class ááŻááşááťáŹá¸ááᯠá áááşááąá¸ááŹá¸áááşáážááˇáşáááźááŻááşáááşá áááşááąáŹááşáážáŻá áá áşááťáŹá¸áážááˇáş áážáŽáááŻáážáŻááťáŹá¸ááᯠááźáąáážááşá¸ááźááşá¸ááážááᲠáááˇáşáĄáá˝ááş áááşáá˛ááźáąáŹááşá¸ áááşáááąáŹááąáŤááşááŹáááşááźá áşáááşá áááşá¸áááŻáˇáááş áĄááááĄáŹá¸ááźááˇáş Maven áážááˇáş Gradle áááŻáˇááźá áşáááşá áááşá¸áááŻáˇáááş áááˇáşáááąáŹááťááşáááŻáˇ á áŹááźááˇáşáááŻááşááťáŹá¸ááᯠáá áşááźáąáŹááşá¸áááşá¸ áááşáá˝ááşá¸áá˝ááˇáşááźáŻáááşá áááŻáááŻáááşáážáŹ áááşáááş one-line xml áááŻááąá¸ááźáŽá¸ áááąáŹááťááşáá˛áááŻáˇ á áŹááźááˇáşáááŻááşááťáŹá¸ááᯠáááˇáşáá˝ááşá¸ááŤá ááąáŹááşá¸áá˝ááşááąáŹá áá áşááťáŹá¸á áááşá¸áááŻáˇáááş áááˇáşáážááşá¸ááźáąáĄáŹá¸ááźááˇáş áá°ááŽáááşá Maven áááŻáˇáááŻááş Gradle ááᯠáĄááŻáśá¸ááźáŻááŤá
ááąáŹááşáá áşáᯠ- áĄááťááŻáˇááąáŹááŹá¸áážááşá¸ááááşá¸ááťáŻááşáážáŻá áá áşá Git áááş áá°ááźááŻááşááťáŹá¸ááźáŽá¸ ááťá°áááŻááŽáááşááťáŹá¸á á˝áŹáážáááąáŹááźáąáŹááˇáş ááťá˝ááşáŻááşáĄááźáśááźáŻááŤáááşá áá°áááŻááşá¸ááŽá¸ááŤá¸ Git áááŻáĄááŻáśá¸ááźáŻááźáááşá áááşá¸áááşáĄáąá¸ááźááąáŹáĄááŹááźá áşáááşá áááşá¸ááážááá˛áááşáááąáááŻááşááŤá
áá áşááťááŻá¸ááťááŻá¸ááąáŹ áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáááşáááşá¸ááťááşá IntelliJ Idea ááᯠáĄááźáśááźáŻáááŻááŤáááşá áááşá¸áááş áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻááŻááşáááşá¸á ááşááᯠáĄáá˝ááşáĄáážáááşááźážááˇáşááąá¸áááşá áááˇáşáĄáá˝ááş ááťáŹá¸á á˝áŹáá°ááŽááąá¸áááşá áááˇáşáĄáá˝ááş boilerplate code áĄáŹá¸ááŻáśá¸áááŻááąá¸ááąá¸áááşá ááąáá°ááťáĄáŹá¸ááźááˇáş áááşá¸áááş áĄáąá¸ááźáááşá
ááááŻááşááž áááˇáşááşááťáŹá¸- SQLZOO , habrapost
SQL ááťáąáŹááąáŹááşááąáŹááşááśááźáŻáá°ááťáŹá¸áĄááźáąáŹááşá¸ áĄáááşá¸áááşá ááŽááąááŹáážáŹ áááşá
ááŹááąáŹááşá¸áá˛áˇ ááá
ášá
áá
áşáᯠáážááá˛áˇáááşá ááťá˝ááşáŻááşáááŻááááĄááŻááşáááşáĄááşááŹááťá°á¸áá
áᎠáážá
áşáááşáĄáááŻáá˝ááş HR áážááááşá¸áááąá¸áá
áşáŚá¸áááş ááťá˝ááşáŻááşáááŻááŻááşá¸áááşááźáŽá¸ áážá
áşáááşáĄáá˝ááşá¸ SQL áážááˇáş HTTP áĄááźáąáŹááşá¸ ááťá˝ááşáŻááşáĄáŹá¸ ááąáˇááŹáááş áááŻáĄááşááźáąáŹááşá¸ ááźáąáŹááźáŹá¸áá˛áˇááŤáááşá ááźáŽá¸ááąáŹáˇ SQL ááŤáážáááŻááş HTTP áĄááźáąáŹááşá¸ ááŹááž ááááááąáŹááşááŤáá˛á ááźáŽá¸ááąáŹáˇ ááŽáĄáááŻááşá
áŹá¸áááŻááşáááŻáá˝áąáˇáá˛áˇáááş-
ááąááŹááąáˇá áşááááŻááŹáááŹáááŻáááşá¸ áááááŻáˇááąáŹááşá¸ááŤáááşá áááşá¸áááŻáˇáááş ááąáŹáˇááťáŹá¸á áĄáá˝ážááşá¸ááťáŹá¸á ááŻáśáážááşááźáŻááŻááşááźááşá¸ áĄááťááŻá¸áĄá áŹá¸ááťáŹá¸ááźá áşáááşá Habre áá˝ááş á¤áĄááźáąáŹááşá¸áĄááŹáážááˇáşáááşáááşáááˇáş áááŻáˇá áşááťáŹá¸á á˝áŹáážááááşá
Java áá˝ááş SQL áĄááźááşá JPA áá˛áˇáááŻáˇááąáŹ Object-relational mapping systems áĄááťááŻá¸áĄá
áŹá¸ááťáŹá¸áážááááşá ááŻááşáá
áşááťááŻáˇáážááááşá ááááááşá¸áááşá¸áá˝ááş SQL ááŻááşáĄááťááŻáˇáážááááş - SELECT id name FROM info.users WHERE ID IN userIdsá áĄááŻáśá¸ááźáŻáá°ááťáŹá¸ ááąááŹááąáˇá
áşáážá áááŹá¸ááž áááşá¸áááŻáˇá ID ááťáŹá¸áážááˇáş áĄáááşááťáŹá¸ááᯠááá°áááşá
áááŻáˇááąáŹááşáá˝ááşá áĄááźáąááśáážáĄááŹááášááŻááᯠJava áĄááŹááášááŻáĄááźá áşáááŻáˇááźáąáŹááşá¸áá˛ááąá¸ááąáŹááźáąááŻáśááŤáážáááťááşáá áşááŻáážááááşá ááźáŽá¸ááąáŹáˇ ááŽááŻááşááᯠáĄáážááşááááş áĄááąáŹááşáĄáááşááąáŹáşáá˛áˇ áĄáąáŹááşáážáŹ áááááááşá¸áááşá¸áá áşáᯠáážáááŤáááşá á¤áĄááŹáĄáŹá¸ááŻáśá¸ááᯠJPA áááŻáĄááŻáśá¸ááźáŻá áĄáąáŹááşáá˝ááşááąáŹáşááźááŹá¸ááąáŹ á áŹááźáąáŹááşá¸áá áşááźáąáŹááşá¸ááźááˇáş áĄá áŹá¸áááŻá¸áááŻááşááŤáááşá áĄáá°áá°ááŤáᲠ- All ByIdIn áááŻáážáŹááŤá áááŻáááŻáááşáážáŹ áááşá¸áááşá¸ááĄáááşáááŻáĄááźáąááśá áááşá¸áááş áááˇáşáĄáá˝ááş SQL query áá áşááŻááŻááşááąá¸áááşá
áĄáááşá¸áááŻááşáá˛áˇáĄááŹá ááŤáááŻááşáááŻááş SQL ááᯠáááááŻááşá¸á JPA ááᯠááŻáśá¸áááşá ááąáá°ááťáĄáŹá¸ááźááˇáş áááááŹá¸ááŤá SQL ááᯠááąáˇááŹáááŻáˇ áĄáááşá¸ááťááşá¸ááąáááşáááŻáááş ááŤáᏠááąá¸áĽáááşááŤáá˛á ááąááŻááťáĄáŹá¸ááźááˇáşá ááŽá¸á
áá˝áąáŚá¸á Spring framework áááŻááŹááᯠáááşáá°ááźáŹá¸áá°á¸áá˛á áááşá¸áááşáážá
áşááąáŹááşáážááááşáááŻáᏠáááşá¸ááźááşááŹá¸á áĄááźáąáŹááşá¸ááźááťááşááážááᲠáááŻááşááŤáá°á¸á Spring áááş Java backend áá
áşáááşááąááŹáááŻááşá¸á áááŻáĄááşááťááşááťáŹá¸áá˝ááş áááˇáşáá˝ááşá¸ááŹá¸áááşá áĄá˛ááŤááážááááşá ááźáŽá¸ááŹá¸áá˛áˇ áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáážáŹ áááşáážáŹááž ááážááááŻááşááŤáá°á¸á áá˝áąáŚá¸áááŻáᏠááŹáá˛á áááááŻáśá¸áĄááąáá˛áˇá ááŤá Dependency Injection framework áá
áşááŻááŤá ááŽáĄááźáąáŹááşá¸áááşá¸ ááŤááŤáááşá
Spring Boot áááş áááˇáşááŹááŹáĄááşáááŽááąá¸áážááşá¸ááᯠáááŻááşáá áşááŻáááşá¸ááźááˇáş ááŻááşááąáŹááşáááŻááşá áąáááˇáş Spring áĄáááŻááşá¸áá áşááŻááźá áşáááşá áááşáááş THID áááŻáˇáá˝áŹá¸áᏠáááŻááşáĄááťááŻáˇááᯠáážáááşááŤá áááŻáĄááŤáá˝ááş áááˇáşááŹááŹáĄááşááşááŽááąá¸áážááşá¸ááᯠlocalhost 8080 áá˝ááş á áááşáááşáááşááąááźáŽááźá áşáááşá áááŻáááŻáááşáážáŹ áááşáááş ááŻááşáá áşááźáąáŹááşá¸ááᯠáááąá¸áááąá¸ááąáŹáşáááşá¸ áááşá¸áááş áĄááŻááşááŻááşááąááźáŽááźá áşáááşá áĄáááşá¸áááŻááşáá˛áˇáĄááŹá áá áşááŻááŻááąá¸áááş ááŽá¸ááąáŹááşá
áá˝áąáŚá¸ááąáŹááşáááş áĄáá˝ááşááźáŽá¸ááŹá¸áááşá áááşá¸áááş áááşáááŹááŹáĄáááŽááąá¸áážááşá¸ááᯠááąáŹááşáá°ááŻáśááŹáá áážáŽáááŻáážáŻáááŻá¸áá˝ááşá¸áážáŻáááŻáááşá¸ ááźáąáážááşá¸ááąá¸áááşá áááşá¸áááş áááˇáşáĄáŹá¸ REST API áááşá¸áááşá¸ááťáŹá¸ áááşááŽá¸ááźááşá¸áĄááŤáĄáááş áĄááŹááťáŹá¸á á˝áŹááᯠááŻááşááąáŹááşáááŻááşá áąááŤáááşá áááŻáááŻáááşáážáŹ áááşáááş áááşá¸áááşá¸áĄááťááŻáˇááᯠááąá¸ááŹá¸áá˛áˇááźáŽá¸ Get mapping áážááşááťááşááᯠáááşá¸áá˝ááş áá˝á˛ááŹá¸áááşá áááŻáá˝ááş áááˇáşááś Hello world ááᯠáááşááąá¸ááąá¸áááˇáş localhost áá˝ááş áááşá¸áááşá¸áĄááťááŻáˇáážáááąááźáŽááźá áşáááşá ááŻááşááťááşá¸áážá áşááźáąáŹááşá¸áá˛áˇ áĄááŻááşááŻááşááŤáááşá ááááşááąáŹááşá¸áá˛áˇáĄááŹáá˛á
Spring áááş á áŹááąá¸ááźááşá¸á áŹááąá¸áá˝á˛ááťáŹá¸ááᯠáááŻáááŻáá˝ááşáá°á áąáááşá ááźáŽá¸ááŹá¸ááąáŹ áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáá˝ááş á ááşá¸áááşááźááşá¸ááážááᲠáááşá¸áááşá¸ááážáááŤá ááŻááşááᯠá ááşá¸áááşáááş áááŻáĄááşáááşá á¤áááşáá˝ááşááťááşáĄáá˝ááşá Java áá˝ááş áĄáąá¸ááźááąáŹá áŹááźááˇáşáááŻááşáá áşáᯠJUnit 5 áážááááşá ááąááŻááťáĄáŹá¸ááźááˇáş JUnit ááźá áşááąáŹáşáááşá¸ ááąáŹááşááŻáśá¸ááŹá¸áážááşá¸áážáŹ ááášá áááźáąáŹááşááźá áşáááşá á ááşá¸áááşáááşáĄááŹáĄáŹá¸ááŻáśá¸á áĄáááŻááşáĄááŹáážááˇáşáĄááźáŹá¸áĄááŹáĄáŹá¸ááŻáśá¸áážááááşá
ááźáŽá¸ááąáŹáˇ áĄáááşá¸ááąáŹááşá¸áá˛áˇ Mockito áá°ááąáŹááşáá áşááŻáážááááşá áááˇáşáá˝ááş á ááşá¸áááşáááŻááąáŹ ááŻááşááąáŹááşááťááşáĄááťááŻáˇáážááááşáᯠááźááşááąáŹááşááźááˇáşááŤá ááŻááşááąáŹááşááťááşáááş áĄáááşáá áşááąááŹáá˝ááşá áĽáááŹáĄáŹá¸ááźááˇáş áááˇáş ID ááźááˇáş VKontakte áááŻáˇáááşááąáŹááşááźáŽá¸ ID ááž VKontakte áĄááŻáśá¸ááźáŻáá°á áááááŻáśá¸áážááˇáş ááąáŹááşááŻáśá¸áĄáááşááᯠáááşááśááážáááźááşá¸áĄááŤáĄáááş ááŻááşááąáŹááşááťááşáĄááťáŹá¸áĄááźáŹá¸ááᯠááŻááşááąáŹááşáááşá á ááşá¸áááşáážáŻááťáŹá¸áá˝ááş áááşáááş VKontakte áááŤáááşáááŻááşáááşáážáŹ áá°á¸áááşá¸ááŤáááşá ááŤááąáááˇáş áááşááŻááşááąáŹááşáááŻááşá á˝ááşá¸ááᯠá ááşá¸áááşáááŻáˇ áááŻááŤáááşá ááŤááźáąáŹááˇáş áááşá Mockito áááŻááŻáśá¸ááźáŽá¸ ááŽáĄáááşá¸ááᯠáĄááŻáááŻá¸ááźáŽá¸ áĄááŻáá°ááŻááşáá˛áˇááŹááŤá
ID áá áşááŻáážááˇáşáááŻáá˛áˇáááŻáˇááąáŹááąáŹááşá¸áááŻáážáŻáá áşááŻáááşá¤áĄáááşá¸áááŻáˇááąáŹááşáážáááąáŹáĄááŤáááşá¸áááşááąáŹááşááŻáśá¸áĄáááşáĄááťááŻáˇ áĽááᏠVasya Pupkin áááŻááźááşááąá¸áááşááŻáááşááźáąáŹááááˇáşáááşá áĄááŻááşááźá áşáááşá áááŻáááŻáááşáážáŹ mok one class áĄáá˝ááş ááŻááşááąáŹááşáááŻááşá á˝ááşá¸áĄáŹá¸ááŻáśá¸ááᯠáááşá ááşá¸áááşáááşááźá áşáááşá áĄáááşá¸áááŻááşáá˛áˇáĄááŹá
ááááŻááşááž áááˇáşááş
ááŽáááŻááşá¸ááŻáśá áśááťáŹá¸á ááŤááŹáá˛? á¤áĄááŹááťáŹá¸áááş áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáá˝ááş ááźá áşááąáŤáşááŹáááˇáş ááŻáśáážááşááźáżááŹááťáŹá¸ááᯠááźáąáážááşá¸áááşáĄáá˝ááş ááá°ááŹááŻáśá áśááťáŹá¸ááźá áşáááşá áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáá˝ááşá áá°ááŽááąáŹ áááŻáˇáááŻááş áĄááŹá¸áá°ááźáżááŹááťáŹá¸ áááźáŹáá ááąáŤáşááąáŤááşááŹááŤá áá áşáááşá¸áááşá¸ááźááˇáş ááąáŹááşá¸á á˝áŹááźáąáážááşá¸áááŻááşáááşááźá áşáááşá áááŻáˇááźáąáŹááˇáşá áá°ááťáŹá¸áááş á¤ááźáżááŹááťáŹá¸áááŻááźáąáážááşá¸áááşá¸áĄáá˝ááş áĄááąáŹááşá¸ááŻáśá¸áĄááąáˇáĄááťááˇáşááťáŹá¸á áĄááťááŻáˇááąáŹ ááŻáśá áśááťáŹá¸ááźááˇáş ááąáŤáşááŹááźáááşá
refactoring.guru áá˝ááş ááąáááşá¸áĄá áŹá¸ááŻáśá¸ ááŻáśá áśááťáŹá¸ááŤáááˇáş áááşáááŻááşáá áşáᯠáážáááŤáááşá áááşá¸ááᯠáááşáááşáááŻááşáááşá áááşáááˇáşááŻáśá áśááťáŹá¸ áážááááşááᯠáážáŹáá˝áąááŤá ááŽáĄááŻááŽááťáŹá¸á á˝áŹááᯠáááşááŤá ááźáżááŹá áááşáá˝áąáˇáážáŹ áĄááŻáśá¸ááááşááŹáá˛á ááááşááąáŹáˇ áĄááąáˇáĄááťááˇáşááážáááąáŹ ááŻáśá áśááťáŹá¸áááş áĄáá°á¸áĄááŻáśá¸ááááşááąá
Singletone áááŻáˇáááŻááş Builder áá˛áˇáááŻáˇááąáŹ ááŻáśá áśáĄááťááŻáˇáĄááźáąáŹááşá¸ áááşááźáŹá¸ááááˇáşáááşá ááŽá ááŹá¸áá˝áąááᯠáááşáá°ááźáŹá¸áá°á¸áá˛á áá°áá˝áąáĄááťáŹá¸ááźáŽá¸á áááşáááŻááşáááŻááş áĄááąáŹááşáĄáááşááąáŹáşáááŻááşáá˛áˇ áááŻá¸áážááşá¸áá˛áˇ ááŻáśá áśáá˝áąáážáááŤáááşá áááŻáˇááąáŹáş ááŻáśá áśáĄááťáŹá¸á áŻ- ááťá°ááŹá á ááşááŻáśá ááťááşáážáŹá Ꮰ- áááşá¸áááŻáˇááᯠáááşáááˇáşááąááŹáá˝ááş áĄááŻáśá¸ááťááááşááᯠááážááşá¸áááşá¸ááŤá
áĄááźáŹá¸áá°áááŻááşáá˝ááş á¤ááŻáśá áśááᯠáĄááŻáśá¸ááźáŻáááˇáşááąááŹááᯠáááşáá˝áąáˇáá˝ááş áááşááá˝áąáˇáááťááşá¸á áááşá¸ááᯠáááşáááŻááşáááŻááş áĄááŻáśá¸ááťáááŻááşáááşáááŻááşááąá áááŻáˇááźáąáŹááˇáş ááŻáśá áśááťáŹá¸ááźááˇáş ááąáˇááťááˇáşáááş áĄáá˝ááşáĄááąá¸ááźáŽá¸ááŤáááşá refactoring.guru áá˝ááş áááşá¸áááŻáˇáĄááźáąáŹááşá¸áááşááŻáśááťážáá áĄáá˝ááşáĄááąáŹááşáĄáá°ááźá áşááąáááşá áááŻáˇááąáŹáş áááşá¸áááş ááąááťáŹááąáŤááşááŻááşááąáŹááşáááťááŻá¸áááşááŤáááşá
áĄáááşááźáąáŹááˇáş ááŻáśá
áśááťáŹá¸ áááŻáĄááşááááşá¸á áááˇáşáá˝ááş áááşáážááşááŹá¸ááąáŹ User class áá
áşááŻáážááááş áááŻááźááŤá
ááŻáˇá áááşá¸áá˝ááş Id áážááˇáş Name áá
áşááŻáážááááşá áĄááŻáśá¸ááźáŻáá°áááŻááşá¸áá˝ááş Id áážááˇáş Name áá
áşááŻá
áŽáážááááŤáááşá áááşáááşááááşá á
áŹáááşáááşá¸á
User ááᯠáĄá ááźáŻáááŻáˇ áááşá¸áááşá¸áá˝áąá ááŹáá˝áąáá˛á - constructor áááŻáˇáááŻááş setter áážá áşááťááŻá¸áážááááşá ááťááşá¸áááşáážáŻáážá áşááŻááŻáśá¸áá˛áˇ áĄáŹá¸áááşá¸ááťááşáá˝áąá ááŹáá˝áąáá˛á
áááşááąáŹááşáá°á áĄááŻáśá¸ááźáŻáá°áĄáá áş (áá "áá˝ááşá¸")á áĄáááşááźáąááŤáááşá áĄáᯠááťá˝ááşááąáŹáşáááŻáˇáážáŹ User class ááážááá°á¸á ááŤááąáááˇáş ááááşá¸áĄáá˝ááş ááŻáá áşááŻááŤáá˛áˇ áĄááźáŹá¸áá áşááŻáááŻáˇ áááŻááźááŤá ááŻáˇá áááşáááŻááşááśááŤááşááŻáá áşááŻááŤáážáááąáŹ constructor áá áşááŻáážáááááˇáşáááşá á¤ááááşá¸áááŹááşá¸ááťáŹá¸áááş áááşáá˛áˇáááŻáˇááźá áşááźáŽá¸ áááşá¸áááŻáˇáĄáááşááž áááşáááˇáşáá ášá ááşá¸áĽá ášá áŹááᯠáááŻááşáááŻááşááźáąáŹááşá¸ áážááşá¸áážááşá¸áááşá¸áááşá¸ááááááŤá ááŽáááŻááşááŹá áááąáŹáşáá°á¸á
ááŻááááá˝áąá¸ááťááşáážáŻáážáŹ setter ááźá áşáááşá áááşáážááşá¸áážááşá¸áááşá¸áááşá¸ááąá¸ááŹá¸áááş- setId(7), setName("Bond")á áááşáááşáááşáážáŹ áááşáĽá ášá áŹááᯠáááŻááşáááŻááşáááşáááŻáᏠáááşááŹá¸áááşááŤáááşá ááŤááąáááˇáş setter áážáŹ ááźáżááŹáážááááşá ááááŚá¸á á˝áŹá áááşáááş áá áşá áŻáśáá áşááŻááᯠááŹáááşááąá¸áááş ááąáˇáá˝áŹá¸áááŻááşááźáŽá¸á ááŻááááĄááąáážááˇáşá áááşááĄááŹááášááŻáááş ááźáąáŹááşá¸áá˛áááŻááşááąáŹ áĄáá˝ááşáĄááźááşááźá áşááŹáááşá áááşá¸áááş ááťááşááťážááşáááŻáśááźáŻáśáááˇáşáĄááźááş ááŻááşááááşáááŻááşáážáŻááᯠáĄáááşá¸áááşááťáąáŹáˇá áąáááşá áĄá˛ááŤááźáąáŹááˇáş áá°áá˝áąá áááŻááşáá˛áˇááŻáśá áś - Builder ááąáŤáşááŹáááşá
ááŤá ááŹáĄááźáąáŹááşá¸áá˛á ááťááşá¸áááşáááşá¸ áážá
áşááŻá
ááŻáśá¸á áĄáŹá¸ááŹááťááşááťáŹá¸âsetter áážááˇáş constructorâááᯠáá
áşááŻáááşá¸áá˝ááş ááąáŤááşá¸á
ááşáááş ááźááŻá¸á
áŹá¸ááźááŤá
ááŻáˇá áááşáážááşáá°áĄááąáŤáşáĄááźáąááśá áááşá¸áááŻááşáááŻááşáááşááąáŹááşáááˇáş Id áážááˇáş Name áĄáá˝ááşááťáŹá¸ááŤáážááááˇáş áĄááŹááášááŻáá
áşááŻááźá
áşáááˇáş Builder áážááˇáş áááşá¸áááş áááˇáşáĄáŹá¸ áááˇáşáááşááťááşáĄáŹá¸ááŻáśá¸áážááˇáşáĄáá° ááŻáśá¸á
á˝á˛áá°áĄáá
áşááᯠááźááşááąá¸áááˇáş Build áááşá¸áááşá¸áá
áşááŻáážááááşááźá
áşáááşá ááťá˝ááşáŻááşáááŻáˇáááş áááźáąáŹááşá¸áá˛áááŻááşááąáŹ áĄááŹááášááŻáá
áşááŻáážááˇáş setter áá
áşááŻááᯠááážáááŤáááşá áĄáąá¸ááŤ!
ááźáżááŹáá˝áąá ááŹáá˝áąáá˛á á¤áá˝ááş ááťá˝ááşáŻááşáááŻáˇáá˝ááş ááášááááş Builder áážááááşá ááźáżááŹáážáŹ áĄááťááŻáˇááąáŹ áááşáááşááťáŹá¸áá˝ááş á á áşááąá¸áááş ááąáˇááťááşááąáááŻááşááąáŹááźáąáŹááˇáş ááźá áşáááşá ID áááŻáá˝áŹá¸ááąáŹááşááźááˇáşáážáŻáááşááąáˇáá˝áŹá¸ááŤáá á¤ááá ášá áá˝ááş Builder áá˝ááş int áĄááťááŻá¸áĄá áŹá¸áááş ááťááşááźááşááźááşá¸ááážáááąáŹááźáąáŹááˇáş áááşá¸ááᯠááŻááááŻáˇ áĄá ááźáŻááŹá¸áááşá áĄáááşá ááťá˝ááşáŻááşáááŻáˇáááş áĄáááş âáá˝ááşá¸â ááᯠááźáŻááŻááşááźáŽá¸ ID ááŻáśá¸áááŻáˇ áá˝áŹá¸ááąáŹááşáááş ááąáˇáá˝áŹá¸ááŤáá ááťá˝ááşáŻááşáááŻáˇáá˝ááş id â0â áážááˇáş âáá˝ááşá¸â áĄáááşáážáááąáŹ áĄááŻáśá¸ááźáŻáá°áĄáá áşáá áşáŚá¸ ááážááááşááźá áşáááşá ááĄáąá¸áá°á¸á
ááŤááᯠáááŻááşáááŻáˇ ááźááŻá¸á áŹá¸ááźááŤá ááŻáˇá Builder áá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş int áááŻáˇ int áááŻáˇ ááźáąáŹááşá¸áá˛áá˝áŹá¸áááşááźá áşááźáŽá¸ áááşá¸áááş nullable ááźá áşá áąáááşá áĄááŻááąáŹáˇ áĄááŹáĄáŹá¸ááŻáśá¸á ááąáŹááşá¸ááŤáááşá
"áá˝ááşá¸" áĄáááşááźááˇáş áĄááŻáśá¸ááźáŻáá°áĄáŹá¸ áááşááŽá¸áááş ááźááŻá¸á
áŹá¸ááŤá áááşá¸á ID ááᯠáááˇáşáá˝ááşá¸áááş ááąáˇáá˝áŹá¸ááŤáá ID áááş nullable áááŻááşááąáŹááźáąáŹááˇáşá Builder áá˝ááş nullá áĄáááĄááť pointer ááźá˝ááşá¸ááťááşááźá
áşááąáŹááźáąáŹááˇáş null pointer ááźá˝ááşá¸ááťááşáá
áşáᯠááážáááŤáááşá
ááŤááąáááˇáş ááŹáááşáááˇáşáááŻáˇ ááąáˇááąááąá¸áá˛áˇáĄáá˝ááş object replay ááᯠnull áááŻáˇ áááşáážááşáááŻááşááŤáááşá ááᯠááťá˝ááşáŻááşáááŻáˇáááş ááťá˝ááşáŻááşáááŻáˇááĄááŹááášááŻááᯠBuilder áážáááşááąáŹááşááąáŹáĄááŤá áááşá¸áááş áĄáá˝ááşáááş ááťááşááźááşááźááşá¸ááážáááźáąáŹááşá¸ á
á
áşááąá¸áááşá ááŤáá˝áąáĄáŹá¸ááŻáśá¸áááŻááşáá°á¸á
ááąáŹááşááŻáśá¸ áĽáááŹááᯠááźááˇáşááĄáąáŹááşá á¤ááá ášá áá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş ID runtime áá˝ááş null ááᯠáá áşáááşá¸áá áşááŻáś áááˇáşááŤáá áááşáááş áááşá¸ááᯠááźáŻááŻááşáá˛áˇááźáąáŹááşá¸ ááťááşááťááşá¸áááááźááşá¸áááş ááąáŹááşá¸ááŤáááşá
áĄááŻáśá¸ááźáŻáá°áááşááŽá¸áážáŻáá˝ááş áĄáážáŹá¸áĄáá˝ááşá¸áá
áşááŻááᯠá
á˝ááˇáşáá
áşáááş áááŻáĄááşááąáŹáşáááşá¸ ID áá˝ááş null áᯠáááşáážááşáááˇáşáĄááŤáá˝ááşá áááŻáˇááźáąáŹááˇáş Builder áá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş setter Integer ááᯠint áááŻáˇááźáąáŹááşá¸áááşááźá
áşááźáŽá¸á áá°á null ááźá
áşáááşáᯠááťááşááťááşá¸ááťáááşáááŻááŤáááşá
áááŻáááŻááźáąáŹááááş ááŹáĄááťááşáá˛á áááŻá¸áážááşá¸ááąáŹ Builder ááŻáśá áśáá áşááŻáážááááşá áááŻáˇááąáŹáş áááşá¸ááĄááąáŹááşáĄáááşááąáŹáşáážáŻáá˝ááşáááş áááááŹááşáĄááťááŻáˇááŤáážááááşá áááŻáˇááźáąáŹááˇáş ááá°ááŽááąáŹááŻáśá áśááťáŹá¸á áĄááąáŹááşáĄáááşááąáŹáşáážáŻááťáŹá¸ááᯠááźááˇáşáážáŻáááş áĄáá˝ááşááąáŹááşá¸áá˝ááşááŤáááşá ááŻáśá áśáá áşááŻá áŽáá˝ááş áĄááąáŹááşáĄáááşááąáŹáşáážáŻ ááŤáááşááťáŹá¸á á˝áŹáážááááşá ááŤáá˝áąáĄáŹá¸ááŻáśá¸á áĄáááşá¸á áááşáááşá áŹá¸áááŻáˇááąáŹááşá¸áááşá
ááŻááşááŻááşáážáŻááŻááşáá˝ááş Builder ááᯠááťá˝ááşáŻááşáááŻáˇ áááşáááŻáˇááąá¸áááşáááşá¸á á¤áá˝ááş ááťá˝ááşáŻááşáááŻáˇááĄááŻáśá¸ááźáŻáá°ááźá
áşáááşá ááťá˝ááşáŻááşáááŻáˇáááş Lombok á
áŹááźááˇáşáááŻááşááž Builder áááşáááşáážáŻááᯠáááşá¸áážááˇáş áá°á¸áá˝á˛ááŻááşááąáŹááşááźáŽá¸ áááşá¸áááş ááťá˝ááşáŻááşáááŻáˇáĄáá˝ááş Builder áá
áşááŻááᯠáááşááŽá¸ááąá¸ááŤáááşá áááŻáááŻáááşáážáŹá ááťá˝ááşáŻááşáááŻáˇáááş áááşáááˇáşááŻááşáááŻááťáž áááąá¸áááşááąáŹáşáááşá¸ Java áááş á¤áĄáááşá¸áá˝ááş Builder áážááááşáᯠáááşááąááźáŽá¸á áááşá¸ááᯠá¤áá˛áˇáááŻáˇ ááąáŤáşáááŻááşáááşá
Java áá˝ááş áá˝ááŻááşááŹááźáŹá¸ááąá¸ááźááşá¸ááᯠáážáąáŹááşáážáŹá¸áááŻááşáááˇáş áĄáąá¸ááźááąáŹ á áŹááźááˇáşáááŻááşááźá áşáááˇáş Lombok áĄááŤáĄáááş áĄááŹáĄáŹá¸ááŻáśá¸ááŽá¸ááŤá¸áĄáá˝ááş á áŹááźááˇáşáááŻááşááťáŹá¸ áážáááźáąáŹááşá¸ ááťá˝ááşáŻááşááźáąáŹáá˛áˇááźáŽá¸ááźá áşáááşá áááşááąáŹááşáá°á ááá°ááŤá
Patterns ááťáŹá¸áááş ááááŻááŹáááşááŹááťáŹá¸ááźá
áşáááŻááşáááş - áá°áááşá¸á
áŹá¸áá
áşááŻáááşá¸áĄáá˝ááşááŹáá á
áá
áşáá
áşááŻááŻáśá¸áážááˇáşáááşá¸ áááşáááŻááşááŤáááşá á
áá
áşááŽáááŻááşá¸áá˝ááş áĄáá˝ááşááąáŹááşá¸áá˝ááşááąáŹ ááááŹááá
áşáᯠáážááááş- Single Responsibility Principleá áá°ááŹáá˝áąááźáąáŹááąááŹáá˛á áĄáááşá¸áá
áşááŻá
áŽáááş áááşá¸ááááŻááşáááŻááşááŻááşááąáŹááşáááŻááşá
á˝ááşá¸áĄááťááŻáˇáĄáá˝ááş ááŹáááşáá°ááááşáá°ááąáŹáĄááťááşááźá
áşáááşá á¤ááá
ášá
áá˝ááşá ááťá˝ááşáŻááşáááŻáˇáá˝ááş ááŻáśá¸á
á˝á˛áá°ááťáŹá¸á JSON áĄááŹááášááŻááťáŹá¸áážááˇáş áááşáá˝ááşááąá¸áááˇáş Controller áá
áşááŻáážááááşá JSON áĄááŹááášááŻááťáŹá¸ááᯠJava áĄáááŽááąá¸áážááşá¸ááźááˇáş áĄááŻááşááŻááşáááˇáş ááąáŹáşáááşááťáŹá¸áĄááźá
áşáááŻáˇ ááźáąáŹááşá¸ááąá¸áááˇáş Facade áážááááşá á¤ááąáŹáşáááşááťáŹá¸áážááˇáş áĄááŻááşááŻááşááąáŹ áážáŻááşáá˝áąá¸ááąáŹááŻáášáááážáááąáŹ áááşááąáŹááşáážáŻáá
áşááŻáážáááŤáááşá á¤ááąáŹáşáááşááťáŹá¸ááᯠááąááŹááąáˇá
áşáá˛áááŻáˇ áááˇáşáá˝ááşá¸ááźáŽá¸ ááąááŹááąáˇá
áşááž ááźááşáááşááá°áááˇáş Data Access Object áá
áşááŻáážááááşá ááźáŽá¸ááąáŹáˇ ááąááŹááąáˇá
áşáááŻááşáááŻááşáááşá¸ áážááááşá áá
áşáááşá¸áááŻáááąáŹáş áááşá¸áááş áĄáááşá¸áá
áşááŻáááşá¸áá˝ááş áááŻááşáᲠáá˝á˛ááźáŹá¸ááąáŹ áĄáááşá¸ááŤá¸ááŻááᯠááźáŻááŻááşááąááźáŽá¸ áááşá¸áááş áĄááźáŹá¸ááŻáśá
áśáá
áşááŻááźá
áşáááşá
Java ááᯠáááşáááŻáááŻááąáˇááŹáááşáá°ááźáŽá¸áááşáážááˇáşáá
áşááźááŻááşáááş ááąááŹááąáˇá
áşáá
áşááŻááŤáážááááşááźá
áşááźáŽá¸á áĄááźáŹá¸ APIs ááťáŹá¸áážááˇáşáĄááŻááşááŻááşáᏠáááşáááŹááŹáĄáááŽááąá¸áážááşá¸ááᯠREST API ááąáŹááşáááşááťáŹá¸ááśááźááááˇáş áááˇáşáááŻááşáááŻááşáááąáŹááťááşááᯠááąá¸ááŹá¸ááźááşá¸áááş ááąáŹááşá¸ááŤáááşá á¤áĄááŹáááş áááşááááŻááşááąá¸ááŹááááşáá˝ááş áááˇáşáá˝ááşá¸áááş ááąáŹááşá¸áá˝ááşááąáŹáĄááŹááźá
áşááąááááˇáşáááşá áááşá¸áááş áááşááááŹááąá¸áĄáá˝ááş áĄáąá¸ááťááşá¸ááąáŹáĄááŻáśá¸áááşáá
áşááŻááźá
áşááááˇáşáááşá ááŽáááşá¸áá˛áˇáá˝áŹá¸ááźáŽá¸ááąáŹáˇ áĄááŻááşááááŻááşááŤáááşá
á¤áááşáážáŹ ááťá˝ááşáŻááşá ááŹááŹáĄáááŽááąá¸áážááşá¸á áĽáááŹáá
áşááŻááźá
áşáááşá ááŻááááážá
áşáážáŹ ááąáŹááşáťáŹá¸ááąá¸áá˝áąáá˛áˇ áá˝á˛ááąá¸áááşá áá˝á˛ááťáŹá¸ááťááşá¸ááááşáĄáá˝ááş áááŻáááŻááşá¸áĄááşáááŽááąá¸áážááşá¸ááᯠááąá¸ááŹá¸áá˛áˇááźáááşá áááŻááąááŹáá˝ááş áĄááŻáśá¸ááźáŻáá°ááťáŹá¸áááş VKontakte áážáá
áşáááˇáş ááąáŹáˇááşáĄááşáááşáááŻááşáááşá ááźáąááŻáśááąáŤáşáá˝ááş áĄáážááşááťáŹá¸ááŹá¸áááşá áĄááźá
áşáĄááťááşááťáŹá¸áááşááŽá¸áááşá áááşá¸áááŻáˇááá°áááşááťááşá¸ááťáŹá¸ááᯠáááşá¸áááŻáˇááś ááááşááąáŤáşááźááşá¸á áĄááźá
áşáĄááťááşááťáŹá¸á ááŻáśááťáŹá¸ááᯠááááşá¸áááşá¸ááźááşá¸á
áááşááźááˇáş ááŻááşááąáŹááşáááŻááşáááşá
áááąáŹááťááşáážáŹ ááŤááŹááŻááşáá˛áˇáá˛á SQL áááŻáĄááŻáśá¸áááźáŻáᲠSpring Boot áá˝ááşááŹááŹáĄáááŽááąá¸áážááşá¸áá áşááŻááąá¸áá˛áˇáááşá ááŤáá°áˇáááŻááááá°á¸ JPA ááŻáśá¸áááşá ááŹáá˝áąááŻááşáááŻááşáá˛áˇáá˛á OAuth-2 áážáá áşáááˇáş VK áááŻáˇ áááşááąáŹááşááŤá áĄááŻáśá¸ááźáŻáá°á áááŻáááşáááŻáá°ááŤá áááşá¸áážááˇáşáĄáá° VK áááŻáˇáá˝áŹá¸ááŤá áááşá¸áááş áĄáážááşááááşáĄááŻáśá¸ááźáŻáá°ááźá áşááźáąáŹááşá¸ á á áşááąá¸ááŤá VKontakte áážáá áşáááˇáş ááŻáśá¸á á˝á˛áá°ááťáŹá¸áĄááźáąáŹááşá¸ áĄááťááşáĄáááşááťáŹá¸ ááá°ááŤá áĄááťááşáĄáááşááťáŹá¸ááᯠááąááŹááąáˇá áşáá áşááŻáá˝ááşááŹáá JPA áážáá áşáááˇáşáááşá¸ ááááşá¸áááşá¸áááŻááşáá˛áˇáááşá ááŹááşááŻáśááťáŹá¸áážááˇáş áĄááźáŹá¸áááŻááşááťáŹá¸ááᯠáá˝ááşááťá°ááŹáážááşááŹááşáá˝ááş ááťá˝ááşá¸ááťááşá á˝áŹ ááááşá¸áááşá¸ááźáŽá¸ ááąááŹááąáˇá áşáá˝ááş áááşá¸áááŻáˇááśáááŻáˇ áááˇáşááşááťáŹá¸ááᯠááááşá¸áááşá¸ááŤá ááąááŹááąáˇá áá˝ááş CLOB áĄááŹááášááŻááťáŹá¸ áážáááąááźáąáŹááşá¸ áááŻáĄááťáááşáá˝ááş ááťá˝ááşáŻááşááááá˛áˇáááźááˇáş á¤áááşá¸áĄáááŻááşá¸ ááŻááşáá˛áˇááŤáááşá ááŻáśá¸á á˝á˛áá°ááťáŹá¸á ááááŻááşá¸áááˇáşáĄáááŽááąá¸áážááşá¸ááťáŹá¸áĄáá˝ááş REST API áá áşááŻáážááá˛áˇáááşá áĄááźáąááśááŻááşááąáŹááşáááŻááşá á˝ááşá¸áĄáá˝ááş áá°áá áşá ááşá¸áááşáážáŻááťáŹá¸áážááá˛áˇáááşá
[âŚ] ááťá˝ááşáŻááşá áĄáąáŹááşááźááşááąáŹ Java ááᯠááąáˇááŹááźááşá¸á ááá°ááŹááąá¸áá áşááŻá ááášááááŻááşááááážá áşáážáŹ C# ááᯠáááşááźáŹá¸áá˛áˇááźáŽá¸ OOP ááááŻááááşá¸áááşá¸ááᯠááŹá¸áááşáááąáŹááąáŤááşáá˛áˇááŤáááş - áááşáĄáááşá¸áá˝áąá áĄááşááŹááąáˇá áşáá˝áąá abstraction áá˝áąáááŻáĄááşááá˛á ááŹááźáąáŹááˇáşáááŻáĄááşááŹáá˛á ááŤááŹááŤáˇáááŻáĄááťáŹá¸ááźáŽá¸áá°ááŽááąá¸áá˛áˇááŤáááşá áĄá˛ááŤááážááááş Java áááşáá°áááŻáˇá ááąáŹáşááąáŹáşáááşáá˛ááŤáááşá ááŹááźáąáŹááˇáş áááşáááşá¸áá˝áą áááŻáĄááşáááşáááŻáᏠáážááşá¸áážááşá¸áááşá¸áááşá¸ ááááááŤáá°á¸á
ááášááááŻááş ááŻááááážá
áşáážáŹ áá°áááŻáˇ Java core ááᯠáááşáááşááąá¸ááąáááˇáş áĄá˛ááŽáážáŹ ááááşáᲠSpring ááᯠáááŻááşáááŻááşáá˝áŹá¸ááąáˇááŹááźáŽá¸ áĄáááşáážáŹááźáąáŹáá˛áˇáá˛áˇ ááťá˝ááşááąáŹáˇáşáááąáŹááťááşááᯠáááşáááşá¸á
áŹáá˝ááş ááąá¸áá˛áˇááŤáááşá ááŤáá˝áąáĄáŹá¸ááŻáśá¸áá˛áˇ ááťá˝ááşááąáŹáş Yandex áážáŹ áĄááŻááşáááşáá˝áŹá¸áá˛áˇááźáŽá¸ áĄááşááŹááťá°á¸ááźáąááźáŽá¸ Yandex.Market ááᯠáááşáá˛áˇáááşá áĄá˛ááŽáážáŹ Beru áĄáá˝ááş ááąáŹááşáá˝ááşáááą ááąá¸áá˛áˇáááşá ááŤá ááťá˝ááşááąáŹáşáááŻáˇáá˛áˇ á
áťáąá¸áá˝ááşáá˛áˇ Yandex.Market áááŻááşáááŻááşáĄáá˝ááşááŤá
áĄá˛ááŽááąáŹááş áá˝ááşáá˛áˇáá˛áˇ ááźáąáŹááşáááąáŹááşá áá°ááŽáá˛áˇ Market áá˛áážáŹ áááźáŹá¸áĄáá˝á˛áˇááᯠááźáąáŹááşá¸áá˝ážáąáˇáá˛áˇáááşá ááťá˝ááşáŻááşáááŻáˇáááş á áŽá¸áá˝áŹá¸ááąá¸ááŻááşááąáŹáşáááŻááşáááşááťáŹá¸áĄáá˝ááş áá˝á˛ááźááşá¸á áááşááźáŹáážáŻááźáŻááŻááşááŤáááşá ááťá˝ááşáŻááşáááŻáˇáááş áá˝á˛ááźááşá¸á áááşááźáŹáážáŻáááŻááşáᏠááááşááąáŹááşá¸áá˝ááş áážáááąáááşá ááťáąáŹááąáŹááşááąáŹááşááśáá˝ááş ááťá˝ááşáŻááşáááŻáˇ ááŻáśá¸áŚá¸áážáááŤáááşá áááŻáˇááźáąáŹááˇáş ááťá˝ááşáŻááşáá˝ááş áááąáŹááťááşáĄááąáŤáş ááźááŹáá˝ážááşá¸áááŻá¸áážáŻ áĄáá˝ááşááťáŹá¸ááźáŹá¸ááŤáááşá ááááşááᯠá áááşáááşá áŹá¸áááŻáˇááąáŹááşá¸áááşá áááŻáááŻáááşáážáŹá ááťá˝ááşáŻááşáááŻáˇáááş á áťáąá¸áá˝ááşáá˝ááş áĄáážááşááááş ááąááŹááᯠááąá¸ááąáŹááşáááş - áĄááąáŹááşá¸áĄáááşáááş áĄáááşáĄááťááŻá¸áĄá áŹá¸á áááşáááˇáşááąáŹáşáááşááťáŹá¸áá˝ááşá á áŽá¸áá˝áŹá¸ááąá¸ááŻááşááąáŹáşáááŻááşáááşááťáŹá¸á ááŹáááşááźáŽá¸ááŻáášáááŽááťáŹá¸áĄáá˝ááş ááźá áşáááşá ááźáŽá¸ááąáŹáˇ ááŤáááŻáˇááŻáśá¸ááąáŹááşáá˛áážááááşá ááŤáááŻáˇáááŽááŻááşááąá¸áááşá áĄáááşá¸áááŻááşáááşá
ááťáąá¸áá°á¸áááşááŤáááş! áĄááŻáśá¸áááşááąáŹáááˇáşááşááťáŹá¸
-
-
-
-
-
-
-
-
source: www.habr.com