Don't wanna be here? Send us removal request.
Text
Структура типичных Java-приложений
Записываю ответы на вопросы из курса «Introduction to Java Online. Module 7 - Основы проектирования и дизайна»
Java Program Structure
1. Что такое Entity? Entity - сущность из бизнес-домена, представленная в программе как класс, в котором есть только поля, геттеры и сеттеры. Никакая логика не должна содержаться в этом классе. 2. Что такое DTO? Как расшифровывается? DTO (Data Transfer Object) — один из шаблонов проектирования, который используется для передачи данных между подсистемами приложения. 3. В чем разница между Entity и DTO? Технически, сущности DTO (Data-transfer object) - это то же самое, что и Entity, но с точки зрения бизнес-домена, эти объекты никак не связаны с ней. Объекты могут быть частью бизнес-домена. Таким образом, они могут реализовывать поведение и применяться к различным вариантам использования в домене. DTO используются только для передачи данных из одного процесса или контекста в другой. Как таковые, они не имеют поведения - за исключением очень простых и обычно стандартизированных функций хранения и поиска. 4. За что отвечает слой Service? Service - класс, который отвечает за бизнес-логику при работе с конкретным Entity или DTO. 5. За что отвечает слой Repository? Слой Repository отвечает за сохранение в базу или получение из базы каких-либо данных
Java: Programming Principles
1. Что такое принцип DRY? Как вы его понимаете? Принцип DRY - это принцип, нацеленный на снижение повторения информации различного рода. Нацелен на уменьшение кода и упрощения связей между сущностями. 2. Что такое принцип KISS? Как вы его понимаете? Принцип KISS - это принцип, запрещающий использование более сложных решений, чем это необходимо. Он происходит от похожих концепций, таких как бритва Оккама, который гласит: "Не следует множить сущее без необходимости". 3. Что такое принцип YAGNI? Как вы его понимаете? Принцип YAGNI - это принцип, при котором в качестве основной цели и/или ценности декларируется отказ от избыточной функциональности. Цель этого принципа в уменьшении количества фич, и, как следствие, количества кода, модулей и зависимостей. 4. Что такое SOLID? Из каких составляющих принципов он состоит? Принцип S.O.L.I.D. - это акроним из 5 основных принципов проектирования программ: Single Responsibility (Принцип единственной ответственности ) - Каждый класс должен иметь одну и только одну причину для изменений. С нарушением SRP система с трудом поддается изменениям, поскольку любое минимальное изменение вызывает эффект «снежного кома», затрагивающего другие компоненты системы. Open Closed Principle (Принцип открытости/закрытости) - Программные сущности должны быть: открыты для расширения (наследования) и закрыты для изменения. Идея в том, что однажды разработанная реализация класса в дальнейшем требует только исправления ошибок, а новые или изменённые функции требуют создания нового класса. Этот новый класс может переиспользовать код исходного класса через механизм наследования. Производный подкласс может реализовывать или не реализовывать интерфейс исходного класса. Liskov Substitution Principle (Принцип подстановки Барбары Лисков) - объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы. Проще говоря, если у вас в проекте повсеместно используется экземпляры класса Collection, то вы вольны заменить их на List, Set или Queue. Interface Segregation Principle (Принцип разделения интерфейса) - много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс об��его назначения. Dependency Inversion Principle (Принцип инверсии зависимостей) - Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. Сюда входя следующие кейсы: * Все типы переменных должны быть объявлены интерфейсом или абстрактным классом. * Все классы должны быть зависимыми только от интерфейсов других классов. Все инициализации переменных должны происходить через паттерн Inversion of Control - например с помощью Factory method или механизмом Dependency injection Теория
0 notes
Text
Основные отличия Java IO и Java NIO
Записываю ответы на вопросы из курса «Introduction to Java Online. Module 6 - Работа с данными» 1. Назовите основные классы потоков ввода/вывода. InputStream, OutputStream, Reader, Writer 2. В чём заключается разница между IO и NIO? Основное отличие между двумя подходами к организации ввода/вывода в том, что Java IO является потокоориентированным, а Java NIO – буфер-ориентированным 3. Какие существуют виды потоков ввода/вывода? байтовые и символьные Теория
0 notes
Text
Java 8 дата и время
Записываю ответы на вопросы из курса «Introduction to Java Online. Module 6 - Работа с данными» 1. Как получить текущую дату с использованием Date Time API из Java 8? java.util.Date currentDate = new java.util.Date(); или java.time.Clock now() 2. Что такое ZonedDateTime? Класс ZonedDateTime представляет собой полную дату, время и часовой пояс. 3. Как получить следующий вторник используя Date Time API из Java 8? java.util.Date currentDate = new java.util.Date(); TemporalAdjuster adj = TemporalAdjusters.next(DayOfWeek.TUESDAY); LocalDate nextTue = currentDate.with(adj); System.out.printf("For the currentDate of %s, the next Tuesday is %s.%n", currentDate, nextTue); 4. В чем отличие классов LocalTime, LocalDate, LocalDateTime? Класс LocalTime оперирует только временем и не сохраняет информацию о часовой поясе и летнем/зимнем времени. Класс LocalDate хранит год, месяц и день. Он используется для хранения и обработки даты без времени. Класс LocalDateTime хранит дату и время. Он является нечтом вроде комбинации LocalDate и LocalTime. 5. Как добавить 1 неделю, 1 месяц, 1 год, 10 лет к текущей дате с использованием Date Time API из Java 8? System.out.printf("1 week from now: %s%n", LocalDateTime.now().plusWeeks(1)); System.out.printf("1 month from now: %s%n", LocalDateTime.now().plusMonths(1)); System.out.printf("1 Year from now: %s%n", LocalDateTime.now().plusYears(1)); System.out.printf("10 Years from now: %s%n", LocalDateTime.now().plusYears(10)); Теория https://urvanov.ru/2016/06/16/java-8-%D0%B4%D0%B0%D1%82%D0%B0-%D0%B8-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F/
0 notes
Text
Java 8 потоки ввода/вывода
Записываю ответы на вопросы из курса «Introduction to Java Online. Module 6 - Работа с данными» 1. Назовите основные классы потоков ввода/вывода. java.io.InputStream и java.io.OutputStream 2. Какие существуют виды потоков ввода/вывода? файлы на диска, устройства, сеть, другие программы, массивы в памяти т. д. Теория https://urvanov.ru/2016/05/13/java-8-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B8-%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0/
0 notes
Text
Java 8 числа
Записываю ответы на вопросы из курса «Introduction to Java Online. Module 6 - Работа с данными» 1. Что означают NaN, POSITIVE_INFINITY, NEGATIVE_INFINITY? NaN - не число, NEGATIVE_INFINITY - минус бесконечность, POSITIVE_INFINITY - плюс бесконечность 2. Как сравнить два целых или вещественных числа? Больше\меньше\равенство? public int compareTo(BigInteger val) 3. Назначение MathContext при работе с BigDecimal? MathContext определяет точность результирующего значения и способ округления 4. Как работать в Java c разными системами счисления? (двоичная, шестнадцатеричная и т.д.) static int parseInt(String s, int radix) Возвращает int. Система счисления задаётся параметром radix (2, 8, 10 или 16). 5. Что такое BigDecimal, BigInteger? Для чего нужны эти классы? BigDecimal - специальный тип для точного хранения десятичных дробей с произвольным количеством знаков после запятой. Этот класс нужен для хранения и обработки денежных сумм. BigInteger позволяет хранить целые числа любой величины Теория https://urvanov.ru/2016/04/17/java-8-%D1%87%D0%B8%D1%81%D0%BB%D0%B0/ #Java #самообразование
0 notes
Text
Особенности работы с java.math.BigDecimal
Записываю ответы на вопросы из курса «Introduction to Java Online. Module 6 - Работа с данными» 1. В чем отличие Double от BigDecimal? Если использовать тип double, то можно заметить, что некоторые десятичные дроби не могут быть записаны без погрешности. Это связано с особенностью хранения данных в формате с плавающей точкой. 2. Что такое BigDecimal, BigInteger? Для чего нужны эти классы? BigDecimal - специальный тип для точного хранения десятичных дробей с произвольным количеством знаков после запятой. Эти классы нужны для хранения и обработки денежных сумм. Теория #Java #самообразование
0 notes