Главная страница

ОглавлениеCore


Скачать 1.53 Mb.
НазваниеОглавлениеCore
Дата17.05.2023
Размер1.53 Mb.
Формат файлаpdf
Имя файлаpolnaya_metodichka (1).pdf
ТипДокументы
#1138113
страница4 из 25
1   2   3   4   5   6   7   8   9   ...   25
Паттерны...................................................................................................................................166
Что такое «шаблон проектирования»?................................................................................166
Назовите основные характеристики шаблонов..................................................................166
Назовите три основные группы паттернов.........................................................................166
Расскажите про паттерн «Одиночка» (Singleton)...............................................................166
Расскажите про паттерн «Строитель» (Builder).................................................................168
Расскажите про паттерн «Фабричный метод» (Factory Method)......................................168
Расскажите про паттерн «Абстрактная фабрика» (Abstract Factory)................................168
Расскажите про паттерн «Прототип» (Prototype)...............................................................169
Расскажите про паттерн «Адаптер» (Adapter)....................................................................169
Расскажите про паттерн «Декоратор» (Decorator).............................................................169
Расскажите про паттерн «Заместитель» (Proxy)................................................................170
Расскажите про паттерн «Итератор» (Iterator)...................................................................170
Расскажите про паттерн «Шаблонный метод» (Template Method)...................................170
Расскажите про паттерн «Цепочка обязанностей» (Chain of Responsibility)...................171
Какие паттерны используются в Spring Framework?.........................................................171
Какие паттерны используются в Hibernate?.......................................................................171
Шаблоны GRASP: Low Coupling (низкая связанность) и High Cohesion (высокая сплоченность)........................................................................................................................171
Расскажите про паттерн Saga...............................................................................................172
Алгоритмы................................................................................................................................173
Что такое Big O? Как происходит оценка асимптотической сложности алгоритмов?...173
Что такое рекурсия? Сравните преимущества и недостатки итеративных и рекурсивных алгоритмов (с примерами)............................................................................174
Что такое жадные алгоритмы? Приведите пример............................................................175
Расскажите про пузырьковую сортировку..........................................................................175
Расскажите про быструю сортировку.................................................................................175
Расскажите про сортировку слиянием................................................................................175
Расскажите про бинарное дерево........................................................................................176
Расскажите про красно-черное дерево................................................................................176
Расскажите про линейный и бинарный поиск....................................................................176
Расскажите про очередь и стек............................................................................................177
Сравните сложность вставки, удаления, поиска и доступа по индексу в ArrayList и LinkedList............................................................................................................................178

Core-1
Что такое ООП?
Объектно-ориентированное программирование (ООП)методология программирования,
основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

объектно-ориентированное программирование использует в качестве основных логических конструктивных элементов объекты, а не алгоритмы;

каждый объект является экземпляром определенного класса;

классы образуют иерархии.
Программа считается объектно-ориентированной, только если выполнены все три указанных требования. В частности, программирование, не использующее наследование, называется не объектно-ориентированным, а программированием с помощью абстрактных типов данных.
Согласно парадигме ООП программа состоит из объектов, обменивающихся сообщениями.
Объекты могут обладать состоянием, единственный способ изменить состояние объекта –
послать ему сообщение, в ответ на которое объект может изменить собственное состояние.
Какие преимущества у ООП?
Легко читается – не нужно выискивать в коде функции и выяснять, за что они отвечают.
Быстро пишется – можно быстро создать сущности, с которыми должна работать программа.
Простота реализации большого функционала – т. к. на написание кода уходит меньше времени, можно гораздо быстрее создать приложение с множеством возможностей.
Какие недостатки у ООП?
Потребление памяти – объекты потребляют больше оперативной памяти, чем примитивные типы данных.
Снижается производительность –многие вещи технически реализованы иначе, поэтому они используют больше ресурсов.
Сложно начать –парадигма ООП сложнее функционального программирования, поэтому на старт уходит больше времени.
Принципы ООП (наследование, инкапсуляция, полиморфизм, абстракция)
Инкапсуляция – это свойство системы, позволяющее объединить данные и методы,
работающие с ними, в классе и скрыть детали реализации от пользователя, открыв только то, что необходимо при последующем использовании.
Цель инкапсуляции – уйти от зависимости внешнего интерфейса класса (то, что могут использовать другие классы) от реализации. Чтобы малейшее изменение в классе не влекло за собой изменение внешнего поведения класса.
Наследование – это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью.

Класс, от которого производится наследование, называется предком, базовым или родительским. Новый класс – потомком, наследником или производным классом.
Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Преимуществом полиморфизма является то, что он помогает снижать сложность программ,
разрешая использование одного и того же интерфейса для задания единого набора действий. Выбор же конкретного действия, в зависимости от ситуации, возлагается на компилятор языка программирования. Отсюда следует ключевая особенность полиморфизма – использование объекта производного класса вместо объекта базового
(потомки могут изменять родительское поведение, даже если обращение к ним будет производиться по ссылке родительского типа).
Абстрагирование – это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, абстракция – это набор всех таких характеристик.
Класс, объект, интерфейс
Класс – это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт).
С точки зрения программирования класс можно рассматривать как набор данных (полей,
атрибутов, членов класса) и функций для работы с ними (методов).
С точки зрения структуры программы класс является сложным типом данных.
Объект (экземпляр) – это отдельный представитель класса, имеющий конкретное состояние и поведение, полностью определяемое классом. Каждый объект имеет конкретные значения атрибутов и методы, работающие с этими значениями на основе правил, заданных в классе.
Интерфейс – это набор методов класса, доступных для использования. Интерфейсом класса будет являться набор всех его публичных методов в совокупности с набором публичных атрибутов. По сути, интерфейс специфицирует класс, четко определяя все возможные действия над ним.
Ассоциация, агрегация, композиция
Ассоциация обозначает связь между объектами. Композиция и агрегация – частные случаи ассоциации «часть-целое».
Агрегация предполагает, что объекты связаны взаимоотношением «part-of» (часть).
Композиция более строгий вариант агрегации. Дополнительно к требованию «part-of»
накладывается условие, что экземпляр «части» может входить только в одно целое (или никуда не входить), в то время как в случае агрегации экземпляр «части» может входить в несколько целых.
Является – «is a», имеет – «has a»
«Является» подразумевает наследование, «имеет» подразумевает ассоциацию (агрегацию или композицию).

Статическое и динамическое связывание
Присоединение вызова метода к телу метода называется связыванием. Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (early binding).
В свою очередь, позднее связывание (late binding) – это связывание, проводимое непосредственно во время выполнения программы в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic), или связыванием на стадии выполнения (runtime binding). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.
Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).
SOLID
Принцип единственной ответственности
Класс должен быть ответственен лишь за что-то одно. Если класс отвечает за решение нескольких задач, его подсистемы, реализующие решение этих задач, оказываются связанными друг с другом. Изменения в одной такой подсистеме ведут к изменениям в другой.
Принцип открытости-закрытости
Программные сущности (классы, модули, функции) должны быть открыты для расширения,
но не для модификации.
Принцип подстановки Барбары Лисков
Необходимо, чтобы подклассы могли бы служить заменой для своих суперклассов.
Цель этого принципа заключаются в том, чтобы классы-наследники могли бы использоваться вместо родительских классов, от которых они образованы, не нарушая работу программы.
Если оказывается, что в коде проверяется тип класса, значит принцип подстановки нарушается.
Принцип разделения интерфейса
Создание узкоспециализированных интерфейсов, предназначенных для конкретного клиента. Клиенты не должны зависеть от интерфейсов, которые они не используют.
Этот принцип направлен на устранение недостатков, связанных с реализацией больших интерфейсов.
Принцип инверсии зависимостей
Объектом зависимости должна быть абстракция, а не что-то конкретное.
Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

В процессе разработки программного обеспечения существует момент, когда функционал приложения перестает помещаться в рамках одного модуля. Когда это происходит,
приходится решать проблему зависимостей модулей. В результате, например, может оказаться так, что высокоуровневые компоненты зависят от низкоуровневых компонентов.
https://ota-solid.now.sh/lsp
Какая основная идея языка?
«Написано однажды – работает везде» (WORA).
Идея основывается в написании одного кода, который будет работать на любой платформе.
За счет чего обеспечивается кроссплатформенность?
Кроссплатформенность была достигнута за счет создания виртуальной машины Java.
Java Virtual Machine или JVM – это программа, являющаяся прослойкой между
операционной системой и Java-программой. В среде виртуальной машины выполняются коды Java-программ. Сама JVM реализована для разных ОС.
Какие преимущества у Java?
Объектно-ориентированное программирование – структура данных становится объектом,
которым можно управлять для создания отношений между различными объектами.
Язык высокого уровня с простым синтаксисом и плавной кривой обучения
синтаксис Java основан на C ++, поэтому Java похожа на C. Тем не менее, синтаксис Java проще, что позволяет новичкам быстрее учиться и эффективнее использовать код для достижения конкретных результатов.
Стандарт для корпоративных вычислительных систем – корпоративные приложения –
главное преимущество Java с 90-х годов, когда организации начали искать надежные инструменты программирования не на C.
Безопасность – благодаря отсутствию указателей и Security Manager (политика безопасности, в которой можно указать правила доступа, позволяет запускать приложения
Java в «песочнице»).
Независимость от платформы – можно создать Java-приложение на Windows,
скомпилировать его в байт-код и запустить его на любой другой платформе,
поддерживающей виртуальную машину Java (JVM). Таким образом, JVM служит уровнем абстракции между кодом и оборудованием.
GC – garbage collector (сборщик мусора).
Язык для распределенного программирования и комфортной удаленной совместной
работы – специфическая для Java методология распределенных вычислений называется
Remote Method Invocation (RMI). RMI позволяет использовать все преимущества Java:
безопасность, независимость от платформы и объектно-ориентированное программирование для распределенных вычислений. Кроме того, Java также поддерживает программирование сокетов и методологию распределения CORBA для обмена объектами между программами, написанными на разных языках.
Автоматическое управление памятью – разработчикам Java не нужно вручную писать код для управления памятью благодаря автоматическому управлению памятью (AMM).

Многопоточность – поток – наименьшая единица обработки в программировании. Чтобы максимально эффективно использовать время процессора, Java позволяет запускать потоки одновременно, что называется многопоточностью.
Стабильность и сообщество – сообщество разработчиков Java не имеет себе равных.
Около 45% респондентов опроса StackOverflow (2018) используют Java.
Какие недостатки у java?

платное коммерческое использование (с 2019);

низкая производительность из-за компиляции и абстракции с помощью виртуальной машины, а также приложения очистки памяти (из-за кроссплатформенности, GC, обратной совместимости, скорости развертывания);

не развитые инструменты по созданию GUI-приложений на чистой java.

многословный код – Java – это более легкая версия неприступного C++, которая вынуждает программистов прописывать свои действия словами из английского языка, это делает язык более понятным для неспециалистов, но менее компактным.
Что такое JDK? Что в него входит?
JDK, Java Development Kit (комплект разработки на Java) – JRE и набор инструментов разработчика приложений на языке Java, включающий в себя компилятор Java, стандартные библиотеки классов Java, примеры, документацию, различные утилиты.
Коротко: JDK – среда для разработки программ на Java, включающая в себя JRE-среду для обеспечения запуска Java-программ, которая в свою очередь содержит JVM-интерпретатор кода Java-программ.
Что такое JRE? Что в него входит?
JRE, Java Runtime Environment (среда времени выполнения Java) – минимально необходимая реализация виртуальной машины для исполнения Java-приложений. Состоит из JVM и стандартного набора библиотек классов Java.
Что такое JVM?
JVM, Java Virtual Machine (виртуальная машина Java) – основная часть среды времени исполнения Java (JRE). Виртуальная машина Java исполняет байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java. JVM может также использоваться для выполнения программ, написанных на других языках программирования.
Что такое byte code?
Байт-код Java – набор инструкций, скомпилированный компилятором, исполняемый JVM, имеется уже около 200 инструкций, 56 в запасе. 1 инструкция = 1 байту.
Что такое загрузчик классов (classloader)?
Основа работы с классами в Java – классы-загрузчики, обычные Java-объекты,
предоставляющие интерфейс для поиска и создания объекта класса по его имени во время работы приложения.

В начале работы программы создается 3 основных загрузчика классов:

базовый загрузчик (bootstrap/primordial). Загружает основные системные и внутренние классы JDK (Core API – пакеты java.* (rt.jar и i18n.jar). Важно заметить,
что базовый загрузчик является «изначальным», или «корневым» и частью JVM,
вследствие чего его нельзя создать внутри кода программы.

загрузчик расширений (extention). Загружает различные пакеты расширений,
которые располагаются в директории /lib/ext или другой директории, описанной в системном параметре java.ext.dirs. Это позволяет обновлять и добавлять новые расширения без необходимости модифицировать настройки используемых приложений. Загрузчик расширений реализован классом sun.misc.Launcher$ExtClassLoader.

системный загрузчик (system/application). Загружает классы, пути к которым указаны в переменной окружения CLASSPATH или пути, которые указаны в командной строке запуска JVM после ключей -classpath или -cp. Системный загрузчик реализован классом sun.misc.Launcher$AppClassLoader.
Загрузчики классов являются иерархическими: каждый из них (кроме базового) имеет родительский загрузчик и в большинстве случаев перед тем как попробовать загрузить класс самостоятельно, посылает вначале запрос родительскому загрузчику загрузить указанный класс. Такое делегирование позволяет загружать классы тем загрузчиком, который находится ближе всего к базовому в иерархии делегирования. Как следствие поиск классов будет происходить в источниках в порядке их доверия: сначала в библиотеке Core API, потом в папке расширений, потом в локальных файлах CLASSPATH.
1   2   3   4   5   6   7   8   9   ...   25


написать администратору сайта