воскресенье, 14 февраля 2016 г.

Принцип единственности ответственности


Принцип единственности ответственности

Формулировка: не должно быть больше одной причины для изменения класса

Что является причиной изменения логики работы класса? Видимо, изменение отношений между классами, введение новых требований или отмена старых. Вообще, вопрос о причине этих изменений лежит в плоскости ответвенности, которую мы возложили на наш класс. Если у объекта много ответвенности, то и меняться он будет очень часто. Таким образом, если класс имеет больше одной ответственности, то это ведет к хрупкости дизайна и ошибкам в неожиданных местах при изменениях кода.

SOLID (object-oriented design)

SOLID - это 5 принципов проектирования классов в ООП.

1) Single responsibility principle(S):
Каждый класс должна быть возложена только одна определенная обязанность.

2) Open/closed principle(O):
Программные сущности должны быть открыты для расширения, но закрыты для изменений.

3) Liskov substitution principle(L):
Для каждого объекта o1 типа S существует объект o2 типа T, который для всех программ P определен в терминах T, то поведение P не изменится, если o2 заменить на o1 при условии, что S является подтипом T.
Другими словами, функции, которые используют ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом.
(Derived classes must be substitutable for their base classes)

4) Interface segregation princilpe(I):
Лучше иметь множество специализированых интерфейсов, чем один универсальный.

5) Dependency inversion principle(D):
Зависимости в системе должны строиться на основе абстракций. Модули нижнего уровня не должны зависеть от модулей верхнего уровня. И те и те должны зависеть от абстракций. В свою очередь, абстракции не должны зависеть от деталей. Детали должны зависить от абстракций.

Top 10 causes of performance issues in Java.

Cause #1: The JVM spends more time performing garbage collection due to
  • improper Garbage Collection (GC) configuration. E.g. Young generation being too small.
  • Heap size is too small (use -Xmx). The application footprint is larger than the allocated heap size.
  • Wrong use of libraries. For example, XML based report generation using DOM parser as opposed to StAX for large reports generated concurrently by multiple users. 
  • Incorrectly creating and discarding objects without astutely reusing them with a flyweight design pattern or proper caching strategy.
  • Other OS activities like swap space or networking activity during GC can make GC pauses last longer. 
  • Any explicit System.gc( ) from your application or third party modules.
Run your JVM with GC options such as 
  • -verbose:gc (print the GC logs) 
  • -Xloggc: (comprehensive GC logging) 
  • -XX:+PrintGCDetails (for more detailed output) 
  • -XX:+PrintTenuringDistribution (tenuring thresholds)
to understand the GC patterns.

среда, 10 февраля 2016 г.

Что такое ООП? Принципы ООП.

      Итак, для разминки начнем пожалуй с самого банального вопроса на собеседовании на позицию Java developer. Ничего нового я придумывать не буду, просто копипаст с понравившейся статьи. 

Немного теории:

Объектно-ориентированное программирование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов.
В центре ООП находится понятие объекта.
Объект — это сущность, экземпляр класса, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.
Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.
Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм; то есть возможность объектов с одинаковой спецификацией иметь различную реализацию.
Хочу выделить что очень часто натыкаюсь на мнение, что в ООП стоит выделять еще одну немаловажную характеристику — абстракцию. Официально ее не вносили в обязательные черты ООП, но списывать ее со счетов не стоит.
Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения не значимые  Соответственно, абстракция — это набор всех таких характеристик.
Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.
Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом
Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

воскресенье, 24 января 2016 г.

Interview for Java Juniors

      I have working Software Engineer for almost two years and now I faced with interesting opportunity: interviewing candidates for Java Junior positions. I thought that I know almost all what a common java junior must know, but a was wrong =) I forget many things and now I going to post some questions and answers to remember it. Two of the three questions per day.

суббота, 1 марта 2014 г.

Final Exam?

Неа, выкладывать свои ответы я не буду т.к. вопросы ребята не меняют, и было бы не правильно выкинуть всем на показ ответы на финальный экзамен, да и на домашку я тоже зря выкидывал xD скажу только то, что я успешно сдал этот экзамен, 8/10) домашка у меня тоже на 84%, так что в скором времени надеюсь получить сертификат)

MongoDB. Homework 6.

Всем привет, долго я тут не писал, особо не было времени, да и ждал, пока закончатся on-line курсы MongoDB, так как негоже выкладывать ответы до того, как придут результаты)

Homework: Homework 6.1

Which of the following statements are true about MongoDB replication. Check all that apply.