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

ОглавлениеCore


Скачать 1.53 Mb.
НазваниеОглавлениеCore
Дата17.05.2023
Размер1.53 Mb.
Формат файлаpdf
Имя файлаpolnaya_metodichka (1).pdf
ТипДокументы
#1138113
страница17 из 25
1   ...   13   14   15   16   17   18   19   20   ...   25
collections – набор эффективно работающих в многопоточной среде коллекций
CopyOnWriteArrayList(Set), ConcurrentHashMap.
Итераторы классов данного пакета представляют данные на определенный момент времени.
Все операции по изменению коллекции (add, set, remove) приводят к созданию новой копии внутреннего массива. Этим гарантируется, что при проходе итератором по коллекции не будет ConcurrentModificationException.
Отличие ConcurrentHashMap связано с внутренней структурой хранения пар key-value.
СoncurrentHashMap использует несколько сегментов, и данный класс нужно рассматривать как группу HashMap’ов. Количество сегментов по умолчанию равно 16. Если пара key-value хранится в 10-ом сегменте, то ConcurrentHashMap заблокирует при необходимости только
10-й сегмент, и не будет блокировать остальные 15.
CopyOnWriteArrayList:

volatile массив снутри;

lock только при модификации списка, поэтому операции чтения очень быстрые;

новая копия массива при модификации;

fail-fast итератор;

модификация через iterator невозможна – UnsupportedOperationException.
synchronizers – объекты синхронизации, позволяющие разработчику управлять и/или ограничивать работу нескольких потоков. Cодержит пять объектов синхронизации:
semaphore, countDownLatch, ciclycBarrier, exchanger, phaser.
CountDownLatch – объект синхронизации потоков, блокирующий один или несколько потоков до тех пор, пока не будут выполнены определенные условия. Количество условий задается счетчиком. При обнулении счетчика, т. е. при выполнении всех условий, блокировки выполняемых потоков будут сняты и они продолжат выполнение кода. Одноразовый.
CyclicBarrier – барьерная синхронизация останавливает поток в определенном месте в ожидании прихода остальных потоков группы. Как только все потоки достигнут барьера,
барьер снимается и выполнение потоков продолжается. Как и CountDownLatch, использует счетчик и похож на него. Отличие связано с тем, барьер можно использовать повторно (в цикле).
Exchanger – объект синхронизации, используемый для двустороннего обмена данными между двумя потоками. При обмене данными допускается null-значения, что позволяет использовать класс для односторонней передачи объекта или же просто, как синхронизатор двух потоков. Обмен данными выполняется вызовом метода exchange, сопровождаемый самоблокировкой потока. Как только второй поток вызовет метод exchange, то синхронизатор
Exchanger выполнит обмен данными между потоками.
Phaser – объект синхронизации типа «Барьер», но в отличие от CyclicBarrier может иметь несколько барьеров (фаз), и количество участников на каждой фазе может быть разным.
atomic – набор атомарных классов для выполнения атомарных операций. Операция является атомарной, если ее можно безопасно выполнять при параллельных вычислениях в нескольких потоках, не используя при этом ни блокировок, ни синхронизацию synchronized.
Queues содержит классы формирования неблокирующих и блокирующих очередей для многопоточных приложений. Неблокирующие очереди «заточены» на скорость выполнения,
блокирующие очереди приостанавливают потоки при работе с очередью.

Locks – механизмы синхронизации потоков, альтернативы базовым synchronized, wait, notify,
notifyAll: Lock, Condition, ReadWriteLock.
Executors включает средства, называемые сервисами исполнения, позволяющие управлять потоковыми задачами с возможностью получения результатов через интерфейсы Future и
Callable.
ExecutorService служит альтернативой классу Thread, предназначенному для управления потоками. В основу сервиса исполнения положен интерфейс Executor, в котором определен один метод:
void execute(Runnable thread);
При вызове метода execute исполняется поток thread.
Stream API & ForkJoinPool, как связаны, что это такое?
В Stream API есть простой способ распараллеливания потока методом parallel() или
parallelStream(), чтобы получить выигрыш в производительности на многоядерных машинах.
По умолчанию parallel stream используют ForkJoinPool.commonPool. Этот пул создается статически и живет пока не будет вызван System::exit. Если задачам не указывать конкретный пул, то они будут исполняться в рамках commonPool.
По умолчанию размер пула равен на 1 меньше, чем количество доступных ядер.
Когда некий тред отправляет задачу в common pool, то пул может использовать вызывающий тред (caller-thread) в качестве воркера. ForkJoinPool пытается загрузить своими задачами и вызывающий тред.
Java Memory Model
Описывает как потоки должны взаимодействовать через общую память. Определяет набор действий межпоточного взаимодействия. В частности, чтение и запись переменной,
захват и освобождение монитора, чтение и запись volatile переменной, запуск нового потока.
JMM определяет отношение между этими действиями «happens-before» – абстракцией,
обозначающей, что если операция X связана отношением happens-before с операцией Y, то весь код следуемый за операцией Y, выполняемый в одном потоке, видит все изменения,
сделанные другим потоком до операции X.
Можно выделить несколько основных областей, имеющих отношение к модели памяти:
Видимость (visibility). Один поток может временно сохранить значения некоторых полей не в основную память, а в регистры или локальный кеш процессора, таким образом второй поток, читая из основной памяти, может не увидеть последних изменений поля. И наоборот,
если поток на протяжении какого-то времени работает с регистрами и локальными кешами,
читая данные оттуда, он может сразу не увидеть изменений, сделанных другим потоком в основную память.
К вопросу видимости имеют отношение следующие ключевые слов языка Java: synchronized,
volatile, final.
С точки зрения Java все переменные (за исключением локальных переменных, объявленных внутри метода) хранятся в heap-памяти, которая доступна всем потокам. Кроме этого каждый поток имеет локальную рабочую память, где он хранит копии переменных, с которыми он работает, и при выполнении программы поток работает только с этими копиями.

Переупорядочивание
(reordering).
Для увеличения производительности процессор/компилятор могут переставлять местами некоторые инструкции/операции.
Процессор может решить поменять порядок выполнения операций, если, например, сочтет,
что такая последовательность выполнится быстрее. Эффект может наблюдаться, когда один поток кладет результаты первой операции в регистр или локальный кеш, а результат второй операции попадает непосредственно в основную память. Тогда второй поток, обращаясь к основной памяти, может сначала увидеть результат второй операции и только потом первой,
когда все регистры или кеши синхронизируются с основной памятью.
Также регулируется набором правил «happens-before»: операции чтения и записи volatile переменных не могут быть переупорядочены с операциями чтения и записи других volatile и не volatile переменных.
https://habr.com/ru/company/golovachcourses/blog/221133/

SQL
Что такое DDL? Какие операции в него входят? Рассказать про них
Операторы определения данных (Data Definition Language, DDL):

CREATE создает объект БД (базу, таблицу, представление, пользователя и т. д.);

ALTER изменяет объект;

DROP удаляет объект;

TRUNCATE удаляет таблицу и создает ее пустую заново, но если в таблице были foreigh key, то создать таблицу не получится, rollback после TRUNCATE невозможен.
Что такое DML? Какие операции в него входят? Рассказать про них
Операторы манипуляции данными (Data Manipulation Language, DML):

SELECT выбирает данные, удовлетворяющие заданным условиям;

INSERT добавляет новые данные;

UPDATE изменяет существующие данные;

DELETE удаляет данные при выполнении условия WHERE;
Что такое TCL? Какие операции в него входят? Рассказать про них
Операторы управления транзакциями (Transaction Control Language, TCL):

BEGIN служит для определения начала транзакции;

COMMIT применяет транзакцию;

ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции;

SAVEPOINT разбивает транзакцию на более мелкие.
SetTransaction –
Что такое DCL? Какие операции в него входят? Рассказать про них
Операторы определения доступа к данным (Data Control Language, DCL):

GRANT предоставляет пользователю (группе) разрешения на определенные операции с объектом;

REVOKE отзывает ранее выданные разрешения;

DENY задает запрет, имеющий приоритет над разрешением.
Нюансы работы с NULL в SQL. Как проверить поле на NULL?
NULLспециальное значение (псевдозначение), которое может быть записано в поле таблицы базы данных. NULL соответствует понятию «пустое поле», то есть «поле, не содержащее никакого значения».
NULL означает отсутствие, неизвестность информации. Значение NULL не является значением в полном смысле слова: по определению оно означает отсутствие значения и не принадлежит ни одному типу данных. Поэтому NULL не равно ни логическому значению

FALSE, ни пустой строке, ни 0. При сравнении NULL с любым значением будет получен
результат NULL, а не FALSE и не 0. Более того, NULL не равно NULL!
Команды: IS NULL, IS NOT NULL.
Виды Join’ов?
JOIN – оператор языка SQL, который является реализацией операции соединения реляционной алгебры. Предназначен для обеспечения выборки данных из двух таблиц и включения этих данных в один результирующий набор.
Особенностями операции соединения являются следующее:

в схему таблицы-результата входят столбцы обеих исходных таблиц (таблиц- операндов), то есть схема результата является «сцеплением» схем операндов;

каждая строка таблицы-результата является «сцеплением» строки из одной таблицы- операнда со строкой второй таблицы-операнда;

при необходимости соединения не двух, а нескольких таблиц, операция соединения применяется несколько раз (последовательно).
SELECT
field_name [,... n]
FROM
Table1
{INNER | {LEFT | RIGHT | FULL} OUTER | CROSS } JOIN
Table2
{ON | USING (field_name [,... n])}
Какие существуют типы JOIN?

(INNER) JOIN Результатом объединения таблиц являются записи, общие для левой и правой таблиц. Порядок таблиц для оператора не важен, поскольку оператор является симметричным.

LEFT (OUTER) JOIN. Производит выбор всех записей первой таблицы и соответствующих им записей второй таблицы. Если записи во второй таблице не найдены, то вместо них подставляется пустой результат (NULL). Порядок таблиц для оператора важен, поскольку оператор не является симметричным.

RIGHT (OUTER) JOIN с операндами, расставленными в обратном порядке. Порядок таблиц для оператора важен, поскольку оператор не является симметричным.

FULL (OUTER) JOIN. Результатом объединения таблиц являются все записи, которые присутствуют в таблицах. Порядок таблиц для оператора не важен, поскольку оператор является симметричным.

CROSS JOIN (декартово произведение) При выборе каждая строка одной таблицы объединяется с каждой строкой второй таблицы, давая тем самым все возможные сочетания строк двух таблиц. Порядок таблиц для оператора не важен, поскольку оператор является симметричным.

Что лучше использовать join или подзапросы? Почему?
Обычно лучше использовать JOIN, поскольку в большинстве случаев он более понятен и лучше оптимизируется СУБД (но 100% этого гарантировать нельзя). Так же JOIN имеет заметное преимущество над подзапросами в случае, когда список выбора SELECT содержит столбцы более чем из одной таблицы.
Подзапросы лучше использовать в случаях, когда нужно вычислять агрегатные значения и использовать их для сравнений во внешних запросах.
Что делает UNION?
В языке SQL ключевое слово UNION применяется для объединения результатов двух SQL- запросов в единую таблицу, состоящую из схожих записей. Оба запроса должны возвращать одинаковое число столбцов и совместимые типы данных в соответствующих столбцах.
Необходимо отметить, что UNION сам по себе не гарантирует порядок записей. Записи из второго запроса могут оказаться в начале, в конце или вообще перемешаться с записями из первого запроса. В случаях, когда требуется определенный порядок, необходимо использовать ORDER BY.
Разница между UNION и UNION ALL заключается в том, что UNION будет пропускать дубликаты записей, тогда как UNION ALL будет включать дубликаты записей.
Чем WHERE отличается от HAVING (ответа про то, что используются в
разных частях запроса недостаточно)?
WHERE нельзя использовать с агрегатными функциями, HAVING можно (предикаты тоже).
В HAVING можно использовать псевдонимы, только если они используются для наименования результата агрегатной функции, в WHERE можно всегда.
HAVING стоит после GROUP BY, но может использоваться и без него. При отсутствии предложения GROUP BY агрегатные функции применяются ко всему выходному набору строк запроса, т. е. в результате получим всего одну строку, если выходной набор не пуст.
Что такое ORDER BY?
ORDER BY упорядочивает вывод запроса согласно значениям в том или ином количестве выбранных столбцов. Многочисленные столбцы упорядочиваются один внутри другого.
Возможно определять возрастание ASC или убывание DESC для каждого столбца. По умолчанию установлено возрастание.
Что такое GROUP BY?
GROUP BY используется для агрегации записей результата по заданным атрибутам.
Создает отдельную группу для всех возможных значений (включая значение NULL).
При использовании GROUP BY все значения NULL считаются равными.
Что такое DISTINCT?
DISTINCT указывает, что для вычислений используются только уникальные значения столбца.
Что такое LIMIT?
Ограничивает выборку заданным числом.

Что такое EXISTS?
EXISTS берет подзапрос, как аргумент, и оценивает его как TRUE, если подзапрос возвращает какие-либо записи, и FALSE, если нет.
Расскажите про операторы IN, BETWEEN, LIKE

IN определяет набор значений.
SELECT * FROM Persons WHERE name IN ('Ivan','Petr','Pavel');

BETWEEN определяет диапазон значений. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым по алфавитному или числовому порядку.
SELECT * FROM Persons WHERE age BETWEEN 20 AND 25;

LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется чтобы находить подстроки. В качестве условия используются символы шаблонизации (wildkards) – специальные символы, которые могут соответствовать чему-нибудь:
◦ _ замещает любой одиночный символ. Например, 'b_t' будет соответствовать словам 'bat' или 'bit', но не будет соответствовать 'brat'.
◦ % замещает последовательность любого числа символов. Например '%p%t' будет соответствовать словам 'put', 'posit', или 'opt', но не 'spite'.
SELECT * FROM UNIVERSITY WHERE NAME LIKE '%o';
Что делает оператор MERGE? Какие у него есть ограничения?
MERGE позволяет осуществить слияние данных одной таблицы с данными другой таблицы.
При слиянии таблиц проверяется условие, и если оно истинно, то выполняется UPDATE, а если нет – INSERT. При этом изменять поля таблицы в секции UPDATE, по которым идет связывание двух таблиц, нельзя.
MERGE Ships AS t -- таблица, которая будет меняться
USING (SELECT запрос ) AS s ON (t.name = s.ship) – условие слияния
THEN UPDATE SET t.launched = s.year – обновление
WHEN NOT MATCHED – если условие не выполняется
THEN INSERT VALUES(s.ship, s.year) – вставка
Какие агрегатные функции вы знаете?
Агрегатных функции – функции, которые берут группы значений и сводят их к одиночному значению.
Несколько агрегатных функций:

COUNT производит подсчет записей, удовлетворяющих условию запроса;

CONCUT соединяет строки;

SUM вычисляет арифметическую сумму всех значений колонки;

AVG вычисляет среднее арифметическое всех значений;


MAX определяет наибольшее из всех выбранных значений;

MIN определяет наименьшее из всех выбранных значений.
Что такое ограничения (constraints)? Какие вы знаете?
Ограничения – это ключевые слова, которые помогают установить правила размещения данных в базе. Используются при создании БД.
NOT NULL указывает, что значение не может быть пустым.
UNIQUE обеспечивает отсутствие дубликатов.
PRIMARY KEY – комбинация NOT NULL и UNIQUE. Помечает каждую запись в базе данных уникальным значением.
CHECK проверяет, вписывается ли значение в заданный диапазон (s_id int CHECK(s_id > 0)).
FOREIGN KEY создает связь между двумя таблицами и защищает от действий, которые могут нарушить связи между таблицами. FOREIGN KEY в одной таблице указывает на
PRIMARY KEY в другой.
DEFAULT устанавливает значение по умолчанию, если значения не предоставлено (name
VARCHAR(20) DEFAULT 'noname').
Какие отличия между PRIMARY и UNIQUE?
По умолчанию PRIMARY создает кластерный индекс на столбце, а UNIQUE – некластерный.
PRIMARY не разрешает NULL записей, в то время как UNIQUE разрешает одну (а в некоторых СУБД несколько) NULL запись.
Таблица может иметь один PRIMARY KEY и много UNIQUE.
Может ли значение в столбце, на который наложено ограничение FOREIGN
KEY, равняться NULL?
Может, если на данный столбец не наложено ограничение NOT NULL.
Что такое суррогатные ключи?
Суррогатный ключ – это дополнительное служебное поле, автоматически добавленное к уже имеющимся информационным полям таблицы, предназначение которого – служить первичным ключом.
1   ...   13   14   15   16   17   18   19   20   ...   25


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