Какие требования выдвигаются к классу объекты которого будут использованы в конструкции try
Перейти к содержимому

Какие требования выдвигаются к классу объекты которого будут использованы в конструкции try

  • автор:

Java 7 try-with-resources

Java-университет

Java 7 try-with-resources - 1

Начиная с седьмой версии Java предлагает улучшенное управление ресурсами, которые должны быть закрыты после окончания работы с ними. К таким ресурсам относятся, например, файлы потоки, соединения с базами данных и сокетами. Этой цели служит специальная языковая конструкция try-with-resources. Для того чтобы это автоматическое закрытие работало создан специальный интерфейс AutoCloseable . В Java 7 все классы ресурсов реализуют этот интерфейс. Его сигнатура выглядит следующим образом:

 public interface AutoCloseable

Интерфейс объявляет метод close() , который автоматически вызывается для объектов, обслуживаемых конструкцией try-with-resources . Несмотря на то, что классы ресурсов в Java 7 реализуют этот интерфейс, множество библиотек, которыми вы пользуетесь этого не делают, поскольку библиотеку еще не обновили для работы с интерфейсом AutoCloseable или же вы просто не имеете возможности обновить библиотеку. В большинстве случаев это решается просто. Наследуйте класс ресурса, который должен участвовать в конструкции try-with-resources . Возьмем для примера ITextRenderer (из проекта Flying Saucer). После окончания работы с ITextRenderer , должен быть вызван метод finishPDF() . Обычно вы бы делали это в блоке finally . Но создавая новый класс, расширяющий ITextRenderer и реализующий интерфейс AutoCloseable , вы можете включить его в конструкцию try-with-resources . Новый класс AutoCloseableITextRenderer будет при этом выглядеть так:

 public class AutoCloseableITextRenderer extends ITextRenderer implements AutoCloseable < @Override public void close() < super.finishPDF(); >> 

Расширение оригинального класса в потомке, является наиболее разумным решением, поскольку новый класс по прежнему будет ITextRenderer . В случае, если исходный класс объявлен как final , необходимо использовать композицию. И вот как при этом будет выглядеть использование:

 try (final AutoCloseableITextRenderer iTextRenderer = new AutoCloseableITextRenderer()) < ByteArrayOutputStream out; // contains the data to be converted to PDF, not shown here. iTextRenderer.setDocumentFromString(new String(out.toByteArray())); iTextRenderer.layout(); iTextRenderer.createPDF(pdfOutputStream); pdfOutputStream.flush(); >

Вот и все. Пожалуйста, обратите внимание, что я не выбрасывал исключение из метода close() в классе AutoCloseableITextRenderer . В Javadoc интерфейса AutoCloseable по этому поводу сказано следующее: Хотя в метод интерфейса декларирован выбрасывать исключения Exception , реализующим этот метод настоятельно рекомендуется использовать при реализации метода более специфические классы исключений, или вообще не выбрасывать исключений, если метод close() не может упасть.

Java. Сложный уровень

Экзамен «Java. Сложный уровень» для пользователей и системных администраторов.

  • Io
  • Jdbc
  • Обобщения тестирование логирование reflection
  • Многопоточность
  • Описание
  • Подробнее о товаре
  • Отзывы (0)
  • Вопросы теста
  • Обратная связь

Форма сдачи теста: Экстерн
Количество вопросов: 30
Время: 30 минут.
Проходной балл: 85%
Срок действия сертификата: неограничен

Сертификат появляется в Вашем профиле ресурса GeekBrains, и Вы можете его распечатать.

GeekBrains

По наличию 12485 шт.

Внимание !
Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier!
При побайтовом чтении из InputStream, метод read() возвращает значение типа:

У какого из типов данных нельзя запросить класс:

все представленные типы, имеют классы
Stringclass
Int []
Char
Void
String

Какой из типов данных не является интерфейсом?

У какого из типов данных нельзя запросить класс:

К какому из представленных классов нельзя подключить Filter?

можно ко всем перечисленным
Handler
Logger
Formatter

Какой фреймворк предназначен для написания юнит-тестов?

За что отвечает метод Class.forName()

загрузку драйвера базы данных
получения ссылки на объект типа Class, ассоциированном с указанным именем класса
проверку существования класса
получение строкового имени класса

Что такое состояние гонки?

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

Назовите один из основных плюсов использования обобщений(Generics)?

обобщения позволяют писать более стабильный код благодаря возможности обнаружения большего числа ошибок на этапе выполнения
обобщения ускоряют работу с коллекциями
обобщения делают код более читабельным
обобщения позволяют писать более стабильный и общий код благодаря возможности обнаружения большего числа ошибок на этапе компиляции

Какой класс или интерфейс пакета java.sql используется при необходимости выполнить хранимую процедуру?

Что из себя представляет объект класса File

ссылку на конкретный файл или каталог
абстрактное описание пути к файлу
ссылку на конкретный файл
нельзя создать объект типа File, поскольку класс File является абстрактным

Какой из классов пакета java.io предоставляет возможность выбора кодировки при чтении данных из потока?

Выберите неправильный вариант запроса

INSERT INTO students (name, score) VALUES (‘Bob’, 20);
SELECT name FROM students WHERE score < 50;
SELECT name FROM students;
INSERT INTO students name = ‘Bob’, score = 20;
SELECT * FROM students;

Выберите неправильный вариант запроса

SELECT * FROM students;
DELETE FROM students;
UPDATE students SET score = 100 WHERE name = ‘Bob’;
UPDATE score = 100 INTO students WHERE name = ‘Bob’;

Что возвращает метод executeUpdate()?

true при успешно выполненном запросе, и false в противном случае
ничего не возвращает
количество измененных записей в БД
тип выполненной операции

Как называется абстрактный базовый класс для чтения потоков данных в символьном представлении?

Какое количество обобщенных типов может использовать класс?

не больше двух
не ограничено
один
класс не может быть обобщенным

Что делает метод reset() в классе ObjectOutputStream ?

очищает файл, в который производилась запись
повторно записывает объекты в файл
сбрасывает информацию об уже записанных объектах в поток
делает откат к ранее установленному состоянию

Выберите верное утверждение

Class.getDeclaredMethods() позволяет получить массив всех методов объявленных только внутри класса, Class.getMethods() позволяет получить массив всех открытых методов класса, в том числе доставшихся ему от родительских классов
Class.getDeclaredMethods() позволяет получить массив всех методов класса, Class.getMethods() позволяет получить массив всех открытых методов класса, в том числе доставшихся ему от родительских классов
Class.getDeclaredMethods() позволяет получить массив всех методов объявленных только внутри класса, Class.getMethods() позволяет получить массив всех открытых методов класса, объявленных только внутри класса
Class.getDeclaredMethods() позволяет получить массив всех открытых методов объявленных только внутри класса, Class.getMethods() позволяет получить массив всех открытых методов класса, в том числе доставшихся ему от родительских классов

Что произойдет при попытке выполнить resultSet.getString(“score”), если столбец score имеет тип INT?

будет брошено SQLException
будет брошено TypeMismatchException
вернется число, приведенное к строке
результат зависит от реализации JDBC драйвера

Можно ли использовать один поток (Stream из пакета java.io) для записи и чтения данных?

В чем особенность ScheduledExecutorService?

хранит в себе результаты выполнения потоков
позволяет запускать задачи по расписанию
позволяет запускать задачи через интерфейс Callable
позволяет менять количество активных потоков

Выберите верное утверждение

размер буфера класса BufferedReader по-умолчанию равен 8192, без возможности его изменения
размер буфера класса BufferedReader по-умолчанию равен 8192, при создании объекта его можно указать
класс BufferedReader использует системный буфер для ускорения операций чтения размером 1 мб

Выберите неверное утверждение

RandomAccessFile реализует интерфейсы InputStream и OutputStream
RandomAccessFile реализует интерфейсы DataInput и DataOutput
RandomAccessFile предоставляет одновременный доступ на чтение и запись
RandomAccessFile реализует интерфейс Closeable

Можно ли с помощью reflection вызвать статический метод класса?

Выберите верное утверждение:

метод Statement.execute() вернет true если запрос удалось выполнить, и false в противном случае
метод Statement.execute() вернет true если запрос сформирован корректно, и false в противном случае
метод Statement.execute() вернет true если результатом выполнения запроса является ResultSet, и false в противном случае

Выберите неверное утверждение

RandomAccessFile позволяет установить курсор на определенный символ по его номеру
RandomAccessFile позволяет установить курсор на определенный байт
RandomAccessFile позволяет выбрать режим работы с файлом: только чтение, чтение/запись

Некоторый поток вызвал метод wait() объекта и находится в состоянии ожидания. Владеет ли данный поток монитором объекта в этом состоянии?

В каком пакете находятся коллекции для работы с многопоточностью?

Как можно запрашивать значения столбцов в ResultSet?

только по имени столбца
только по индексу столбца (начиная с 1)
по индексу столбца (начиная с 1), или по имени
по индексу столбца (начиная с 0), или по имени
только по индексу столбца (начиная с 0)

Какие ограничения накладываются на обобщенные классы?

объекты обобщенных классов нельзя добавлять в коллекции
внутри класса нельзя создавать объекты и массивы обобщенного типа класса
классы не могут быть обобщенными
нельзя создавать объект обобщенного класса, не указав обобщенный тип
нельзя создавать объекты обобщенных классов

Метод shutdownNow() класса ExecutorService

вызывает у всех потоков сервиса метод stop()
моментально останавливает работу активных потоков сервиса
завершает выполнение текущих потоков для возможности дать новые задачи
возможно остановит работу активных потоков пула

В каком случае при вызове DriverManager.getConnection() появляется ошибка «No Suitable Driver»?

JDBC URL содержит ошибку
неверная комбинация имя пользователя/пароль
необходимый драйвер не зарегистрирован

Какой из классов может выполнять запросы вида “SELECT * FROM students WHERE name = ? AND score = ?;”

В чем особенность SequenceInputStream ?

позволяет зациклено читать один и тот же файл
предоставляет последовательный доступ к файлу
позволяет выбрать направление чтения файла, от начала к концу, либо с конца в начало
позволяет работать с несколькими потоками ввода, как с одним

Что произойдет при попытке вызвать interrupt() у потока, находящемся в состоянии sleep?

поток завершит свое выполнение
флаг interrupted изменит свое значение на true
будет брошено InterruptedException
флаг interrupted не изменит своего значения

Что не относится к CRUD операциям?

Каково предназначение класса Semaphore?

приостанавливать работу потоков на заданный промежуток времени
получать информацию о работающих потоках
распараллеливать выполнение задачи на несколько потоков
ограничить доступ к критической секции определенному количеству потоков

Что произойдет при неудачной попытке создания каталога с помощью метода mkdir() ?

метод вернет -1
метод вернет false
будет брошено IOException
метод ничего не вернет (void)

С какими типами данных не могут работать обобщения?

Какие типы аргументов будет принимать метод?

Любые
Object, Number
Number и его производные
только производные от Number, исключая сам Number

Может ли ThreadPool создавать daemon-потоки

Для чего нужен метод Thread.yield()?

для переключения процессора на обработку конкретного потока
для переключения процессора на обработку любого другого потока

Для чего используется Callable.call()?

для запуска задачи в отдельном потоке, которая возвращает результат выполнения
для запуска задачи в отдельном потоке, которая возвращает статус Callable.Success/Called/Failed
то же, что и Runnable.run(), т.к. они появились в разных версиях Java

Что произойдет при попытке выполнить некорректно сформированный SQL запрос?

соединение с базой данных будет автоматически закрыто и программа продолжит работу
будет выброшено SQLException
будет выброшено NullPointerException
метод execute() вернет false, а метод executeQuery() – null

Можно ли с помощью reflection изменить private поле объекта?

Какой запрос позволит очистить таблицу students в SQLite?

DELETE * IN students;
DELETE FROM students;
REMOVE students;
DELETE * FROM students;
DELETE students;

Утверждение: Scanner предназначен только для чтения пользовательского ввода с консоли

Какая проверка отсутствует в классе Assert библиотеки JUnit 4?

Что не может быть обобщенным?

Сколько уровней логирования (включая OFF и ALL) есть в java.util.logging?

Для чего предназначен DataInputStream?

для преобразования текстового потока в бинарный
для чтения примитивных типов данных из бинарного потока
для чтения объектов из бинарного потока

При использовании CachedThreadPool

можно установить максимальное количество потоков, но нельзя уменьшать количество уже созданных потоков
можно установить максимальное количество потоков, и уменьшать количество уже созданных потоков
нельзя установить максимальное количество потоков, и нельзя уменьшать количество уже созданных потоков
можно уменьшать количество уже созданных потоков, но нельзя установить максимальное количество потоков

Какая из коллекций является синхронизированной?

Какой класс или интерфейс позволяет отсылать запросы в БД?

В чем смысл использования ReentrantReadWriteLock?

не позволяет читать данные, пока хотя бы один поток записывает данные, при этом количество пишущих потоков не ограничено
позволяет узнать какая операция (чтение или запись) производится в критической секции в настоящее время
позволяет ограничить доступ к критической секции только на использовании одной операции, либо для чтения, либо для записи
позволяет многим потокам одновременно получить доступ на чтение, и только одному на запись, при этом в единицу времени может производиться либо только чтение, либо только запись

За что отвечает метод flush() ?

чтения файла с байтовый массив
закрытие потока
приостановку записи
создание копии файла
принудительная очистка буфера и запись данных в поток

Можно ли перехватить исключение, возникшие в одном из потоков ExecutorService, не в этом потоке сервиса?

Какой метод класса Thread необходимо вызвать для корректной остановки потока?

С помощью какой аннотации JUnit можно пропустить выполнение теста?

@Test(disable = true)
@Test(disabled = true)
@Skip
@Test(disable)
@Ignore

Что такое deadlock?

состояние, когда два потока ожидают разблокировки ресурсов, захваченных самими потоками
бесконечный цикл
состояние, когда один поток ожидает разблокировки ресурса, захваченного другим потоком

Какой метод должен быть переопределен классом, реализующим интерфейс Runnable для выполнения задачи в отдельном потоке?

boolean run()
void run(int priority)
void run()
int run()

Какой класс или интерфейс предоставляет средства управления транзакциями: setAutoCommit(), commit(), rollback()?

Какой из интерфейсов является обобщенным?

Cloneable
интерфейсы не могут быть обобщенными
Serializable
Comparable
Externalizable

Какой из представленных пакетов используется для ввода/вывода

Какова основная задача интерфейса PreparedStatement?

выполнение хранимых процедур
выполнять параметрические запросы
получение информации о состоянии БД
получение информации о таблицах

Имеется переменная
volatile int count=0;
Будет ли инструкция count++ атомарной?

Какой класс не входит в пакет java.lang.reflect?

Исключение какого типа будет выброшено при попытке выполнить некорректно сформированный SQL запрос:

SQLException
NullPointerException
RuntimeException
IOException

Как называется абстрактный базовый класс для чтения потоков данных в байтовом представлении?

Stream
Thread
InputStream
Reader
FileInputStream

Возможно ли вернуть данные обратно во входящий поток, после их прочтения?

Какой класс или интерфейс может вернуть объект типа DatabaseMetaData?

Что произойдет при попытке повторного создания таблицы через запрос CREATE TABLE students (. если такая таблица уже существует?

будет брошено IOException
будет брошено SQLException
таблица будет пересоздана с очисткой данных
ничего не произойдет

Сколько объектов класса Handler можно подключить к Logger?

сколько угодно
не больше одного
не больше двух
ни одного

Какие требования выдвигаются к классу, объекты которого будут использованы в конструкции try-with-resources ?

реализация интерфейса Stream
реализация интерфейса Serializable
реализация интерфейса Closeable
наследование от классов InputStream или OutputStream
наследование от класса Thread

Какой метод следует использовать для выполнения запросов INSERT и UPDATE?

В чем особенность RandomAccessFile?

предоставляет случайный доступ к файлу на чтение/запись
позволяет прочитать весь файл за одно выполнение read()
может открыть файл, даже занятый другим процессом
оптимизирует операции чтения/записи при использовании многопоточности

Какой модификатор позволяет пропустить поле при сериализации?

При использовании ReentrantReadWriteLock

при захвате writeLock все потоки, захватившие readLock, освобождаются
все утверждения не верны
только один поток может получить доступ к записи, и множество потоков могут получить одновременный доступ к чтению
потоки могут одновременно захватить и readLock и writeLock

Что произойдет при выполнении задачи через интерфейс Callable и попытке запросить результат работы потока с помощью метода get() до его завершения?

вернется null
будет брошено IllegalStateException
будет брошено InterruptedException
поток, запросивший результат выполнения, перейдет в режим ожидания

Вы можете обратится к нам напрямую, через:

По Skype: molodoyberkut
По Telegram: @MolodoyBerkut
По ICQ: 657089516
По Viber: molodoyberkut

Или через форму обратной связи на нашем сайте

Сертификат

  • Сертификат

Получите наши последние новости и специальные предложения

Подвесные потолки: основные требования к конструкции

При отделке потолочных перекрытий помещений в различных зданиях и сооружениях сегодня активно применяются подвесные конструкции. Сложность при их проектировании заключается в том, что нормативная база на текущий момент достаточно слабо адаптирована к реалиям, и потому требования к обустройству подвесных потолков приходится собирать по нескольким разрозненным документам.

С одной стороны, это значительно упрощает процесс проектирования: при необходимости можно заложить в проект практически любые габариты и конфигурацию конструкции. С другой стороны, отсутствие единого регулирующего документа усложняет процесс, поскольку и проектировщикам, и мастерам, которые непосредственно выполняют монтаж, не на что ориентировать при работе.

Данная статья призвана хотя бы частично решить существующие проблемы. Всем, кто работает с подвесными потолками, стоит внимательно ее изучить, и руководствоваться в своей работе сведениями, изложенными ниже.

kassetnuy-potolok

Конструкция подвесных потолочных систем

Подвесные потолочные конструкции монтируются по единой схеме:

podvesnoy-potolok-normativyi

  • Основой выступает потолочное перекрытие, и частично – верхние участки стенового ограждения. В качестве основы обычно используют капитальные конструкции, но иногда допускается закрепление элементов подвесного потолка на дополнительных (промежуточных) опорах балках и т.д.
  • К основе крепятся элементы каркаса. В подавляющем большинстве случаев каркас делают из металла (оцинкованная сталь, алюминиевые сплавы). Допускается также возведение каркасов на основе деревянного бруса (с применением металлических крепёжных и вспомогательных элементов). При этом деревянные детали желательно подвергнуть обработке, снижающей их горючесть.
  • На каркасе фиксируется сам подвесной потолок. Он может быть условно-цельным (натяжное полотно, обшивка из фанеры либо ГКЛ) либо сборным. В качестве сборных элементов используются кассеты (пластиковые, металлические, композитные), рейки ламели, решетчатые секции, модули различной формы и т.д. Примером таких конструкций могут служить металлические потолки от завода Мехбуд.

Способ фиксации подвесной потолочной конструкции и особенности соединения отдельных элементов зависят от конструкции потолка. Так, чаще всего металлический каркас фиксируется на основании с использованием анкерного крепежа. Отдельные потолочные модули закрепляются на каркасе либо с помощью саморезов (или аналогичных деталей), либо с помощью конструктивных элементов – пазов, защелок и т.д.

Нормативные требования к конструкции потолков

Как мы отметили выше, на сегодняшний день отсутствует единый документ, в котором содержатся консолидированные требования конструкции подвесных потолков и их элементов. Потому при проектировании и монтаже рекомендуется опираться на существующую нормативно-правовую базу – ГОСТ (ДСТУ), СНиП (ДБН) и т.д.

Основные требования

Основной документ, который необходимо принимать в расчет при проектировании и изготовлении подвесных потолков — СНиП 3.04.01-87 «Изоляционные и отделочные покрытия» (с изменениями и дополнениями). Согласно требованиям этого норматива:

podvesnoy-potolok-normativyi

  • Подвесные потолочные конструкции монтируются на перекрытия и другие поверхности, обладающие достаточной несущей способностью.
  • Выравнивание потолочного перекрытия и стен, участки которых будут использоваться для крепления элементов каркаса, не является обязательным. При этом желательно устранить крупные дефекты, выполнив ремонт этих поверхностей, а также провести обработку, препятствующую разрушению материала под воздействием влаги и грибка.
  • Конструкция каркаса подвесного потолка определяется проектом. Но при этом она должна быть достаточно прочной, чтобы исключить деформацию под весом элементов подвесного потолка.
  • Перед началом монтажа подвесной конструкции плоскость каркаса проверяется с помощью измерительных инструментов.

podvesnoy-potolok-normativyi

  • Монтаж кассет, панелей, реек, решетчатых секций и других деталей должен осуществляться по разметке, начиная с одного из углов помещения. Пи монтаже необходимо избегать горизонтальных стыков деталей, не предусмотренных проектом.
  • Плоскость, сформированная элементами подвесного потолка, должна быть ровной. Не допускается наличие провисов на стыках и прогонах, отслоений и т.д. Также не допускается вибрация или иная подвижность элементов в местах крепления к каркасу.

Допустимые отклонения габаритов в плоскости подвесного потолка (конструкция любого типа):

  • Уступ между соседними плитами, панелями либо рейками – не более 2 мм.
  • Отклонение плоскости подвесного потолка по вертикали/горизонтали – не более 1,5 мм на 1 м, и не более 7 мм на всю отделываемую поверхность.
  • Отклонение стыка стеновой части облицовки от вертикали – не более 1 мм на 1 м.
  • Максимально допустимая величина прогиба конструкции под собственным весом -не более 1/250 ширины пролета.

podvesnoy-potolok-normativyi

Помимо общих требований к устройству подвесных конструкций стоит ориентироваться и на другие рекомендации. Они приводятся в типовых технологических картах на устройство подвесных потолков и других документах:

  • Для крепления элементов каркаса к несущему основанию используются регулируемые и нерегулируемые подвесы. Для изготовления регулируемых подвесов (с изменяемой геометрии) используется стальная проволока 2,5-3 мм либо пластины из оцинкованной стали толщиной от 0,6-0,8 мм. Жесткие нерегулируемые подвесы производятся из стержней диаметром от 5 до 12 мм, либо из стальной полосы 2-4 мм.
  • Крепление к бетонным и кирпичным поверхностям производится с помощью фиксации кронштейнов дюбель-гвоздями (с пластиковой либо металлической распорной гильзой). Монтаж на деревянных перекрытиях выполняется с помощью гвоздей либо самонарезающих шурупов. Крепление к металлическим трубам, или балкам можно осуществлять с помощью хомутов или болтовых соединений.
  • Инженерные коммуникации, расположенные за плоскостью подвесного потолка, должны фиксироваться на капитальном основании с помощью независимых подвесов и других креплений. Совместная фиксация элементов каркаса и коммуникаций на общих подвесах не допускается.

Обратите внимание! Зазор между подвесной конструкцией и потолочным перекрытием должен быть достаточным для размещения там коммуникаций и (ел это предусмотрено проектом) тепло- либо звукоизоляционных материалов. Величина этого зазора строго не регламентируется, но в большинстве случаев минимальное значение составляет 40-50 мм (в зависимости от используемых элементов каркаса). Максимальный размер зазора ограничен требованиями к расстоянию от пола до потолка – не менее 2,5-2,7 м в жилых помещениях, и не мене 2,1 — в коридорах, холлах и т.д. Для общественных зданий оптимальное расстояние от пола до подвесного пока – 3 м и более.

  • Конструкция подвесного потолка сборного типа (к ним относятся потолки «Армстронг», металлические потолки от завода «Мехбуд» и т.д.) должна допускать демонтаж отдельных элементов без нарушения целостности всей системы. Возможность снятия панелей необходима для доступа в пространство между потолочным перекрытием и подвесной частью потолка для инспекции и ремонта коммуникаций.

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

Требования, касающиеся пожарной безопасности

Отдельная группа требований касается обеспечения безопасности зданий при возможном возгорании. Здесь стоит ориентироваться в первую очередь на СНиП 21-01-97 «Пожарная безопасность зданий и сооружений».

Согласно этому документу и другим действующим регламентам:

podvesnoy-potolok-normativyi

  • Каркасы подвесных потолков в жилых помещениях, общественных зданиях и помещениях, которые являются путями эвакуации, следует монтировать из негорючих материалов. Допускается применение материалов, относящихся к группам горючести Г1 и Г2 (слабо и умеренно горючие).
  • Обшивку каркаса подвесного потолка необходимо выполнять с использованием материалов, класс пожарной опасности которых не превышает КМ4 (умеренная горючесть, умеренная воспламеняемость).
  • При использовании материалов с более высокими показателями горючести необходимо обеспечить дополнительную их обработку антипиренами (например, огнезащитными пропитками для дерева).

podvesnoy-potolok-normativyi

  • При монтаже подвесных потолков в общественных зданиях, детских и медицинских учреждениях действуют более строгие требования: класс опасности материалов на доложен превышать КМ2 (в ряде случаев — КМ1 и КМ0).

Это означает, что применять гипсокартонные листы, фанеру или деревянную вагонку для обшивки потолка можно не всегда. А вот металлические подвесные потолки от завода Мехбуд (кассетные, реечные и модульные) в подавляющем большинстве случаев соответствуют всем противопожарным требованиям.

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

Какие требования выдвигаются к классу объекты которого будут использованы в конструкции try

Автор: Влад Сверчков

Чому назви схожі? Популярність Сфери застосування Продуктивність Динамічна типізація в JavaScript vs строга типізація в Java Простота вивчення Зарплата Підсумки Всім привіт! Друзі, ми продовжуємо серію статей, у яких порівнюємо різні мови програмування. Перша стаття була присвячена Python і Java – двом досить потужним та універсальним мовам, без яких важко уявити сучасне розроблення. Озброївшись об’єктивністю та неупередженістю, ми дослідили найважливіші (для новачків) особливості кожної з них, а вам надали всі результати у компактному та зручному вигляді. Відповідь на запитання “Так яка мова краща?” ми не давали, оскільки вважаємо її недоречною — кожна мова по-своєму гарна у вирішенні завдань одного типу і менш ефективна у вирішенні завдань іншого типу. Ви самі обираєте інструмент в залежності від задач, які перед вами стоять. Так що спочатку визначтеся зі спектром завдань, що вас цікавлять, а лише потім шукайте мову, здатну ефективно з ними впоратися. Отже, у цій статті на нас чекає порівняння двох на перший погляд схожих мов – Java та JavaScript (JS). HR`и та рекрутери часто їх плутають, а новачки та ті, хто випадково проходить повз програмування, взагалі ставлять між ними знак рівності. Насправді Java і JavaScript мають дуже мало подібностей і сьогодні ми торкнемося найцікавіших із них. Також будуть розглянуті головні аспекти кожної мови, сфери їх застосування та зарплатні очікування. Приступаємо! Чому назви схожі? Оскільки назви “JavaScript” та “Java” (читається як “джава” і “джаваскрипт”) підозріло схожі одна на одну, цілком логічно припустити певний взаємозв’язок між цими мовами. Щоб розібратися із цим питанням, звернімося до історії, а саме – до інтерв’ю від 2008 року, в якому брав участь творець JavaScript – Брендан Айх. У ньому засновник JS підтверджує, що подібність двох мов у назві – результат підписання ліцензійної угоди між Netscape і Sun, причому Sun – це компанія-розробник мови Java. Ідея угоди полягала в тому, щоб JavaScript став додатковою скриптовою мовою, яка йде разом з Java — мовою, що компілюється. Якщо звернутися до колиски JS, то спочатку вона називалася Mocha, потім назву змінили на LiveScript. І лише після ліцензійної угоди вона стала JavaScript`ом, яким ми її знаємо і досі. Популярність Щоб порівняти популярність Java та JavaScript, звернімося до відомих веб-ресурсів, які займаються збиранням відповідної інформації. Отже, відповідно до минулорічного опитування Stack Overflow Developer Survey (65 000 респондентів), JavaScript знаходиться на першому місці, а Java – на п’ятому в рейтингу найбільш використовуваних мов програмування. Якщо розглядати індекс TIOBE, а точніше – статистику за липень 2021 року, то Java на 2-му місці, а JavaScript – на 7-му. Індекс популярності мов програмування PYPL станом на липень 2021 року ставить на друге місце Java, а JavaScript – на третє. Як можете бачити, різні ресурси по-різному рахують та визначають рейтингові місця цих двох мов, проте джава і джаваскрипт завжди входять до різноманітних ТОП-10, що безумовно підтверджує їхню перспективність. Сфери застосування Під час встановлення Java у вікні завантаження висвічується напис, який говорить: «Понад 3 мільярди пристроїв використовують Java», що вже показує – Java є серйозним гравцем на IT-арені. Такі цифри обумовлені універсальністю та кросплатформенністю даної мови. За допомогою Java створюється різний інформаційний продукт: серверна частина веб-додатків; Enterprise додатки для бізнесу; мобільні додатки під Android; хмарні сховища даних; настільні додатки; комп’ютерні ігри; Big Data додатки; додатки для трейдингу; програмне забезпечення для банківських та інших систем. Особливо добре Java себе почуває у мобільному розробленні під Android та в Enterprise проєктах, орієнтованих на вирішення бізнес-завдань великих компаній. Андроїд – найпопулярніша мобільна платформа у світі, а ентерпрайз розроблення саме по собі досить великогабаритне, цікаве і складне, що дозволяє тямущим програмістам заробляти солідні гроші в даній галузі. Говорячи ж про JavaScript, не можна не згадати, що жодна клієнтська сторона сучасного веб-додатку не може існувати без тріади HTML, CSS і JavaScript. Ця мова лежить в основі найпопулярніших фронтенд-фреймворків Angular, Vue.js та бібліотек jQuery, React.js. Також на JS за допомогою платформи Node.js ведеться розроблення ще й серверної сторони веб-додатків, створюються десктопні та мобільні програми (завдяки фреймворкам Electron, React Native), веб-ігри. Так що універсальність JavaScript і її інструментарій не менш всеосяжні, ніж у Java. Продуктивність Порівнювати продуктивність JavaScript, як мови фронтенд-розроблення, з Java – мовою серверного розроблення – ми не будемо з очевидних причин. Однак, що, якщо розглянути JS у якості інструмента створення бекенду на платформі Node.js? Хто кому поступається? Тут отримує перевагу Java, яка спочатку задумувалася як потужна, надійна і мультиплатформенна мова, пристосована до багатьох умов розроблення. Вона є високопродуктивнішою за Node.js, але за це джава розплачується більшим споживанням пам’яті. У Node.js же навпаки – програючи у продуктивності, вона менше важить і, відповідно, є гарною у підтримці завдань з низькою ресурсоємністю, де використання Java призводило б до надмірних витрат пам’яті. Динамічна типізація в JavaScript vs строга типізація в Java Строга типізація (далі – СТ) зобов’язує програміста оголошувати кінцевий тип змінних та функцій одразу при написанні коду. Такий підхід передбачає встановлення їх типів ще на момент компіляції. Представником мови програмування з подібним видом типізації є Java. Динамічна типізація (ДТ) не ставить в обов’язкові рамки оголошення кінцевого типу змінних та функцій — це відбувається автоматично під час виконання самої програми. JavaScript використовує ДТ. Мови програмування з ДТ найчастіше відрізняються більш простим синтаксисом, меншим обсягом коду та більшою швидкістю написання програм. Також цей вид типізації підходить для використання узагальненого програмування, яке передбачає застосування однієї і тієї ж ділянки коду під час роботи з різними типами даних – наприклад, алгоритм сортування, який здатний сортувати не тільки цілі числа, а й дійсні, і навіть рядки. При цьому до переваг СТ можна віднести виявлення проблем, пов’язаних з типами, ще перед запуском програми, оскільки перевірки типів проводяться на моменті компіляції, що йде перед виконанням програми. Це призводить до більш високої швидкості роботи коду. Крім цього, СТ змушує дотримуватися своєрідної дисципліни при написанні коду, що усуває хаотичну ситуацію серед змінних та функцій і при цьому дає цілком ясне розуміння, який тип має кожна з них. Питання “Яка типізація краща?” викликає бурхливі обговорення серед програмістів, отже цю відповідь нехай кожен наш читач дасть собі самостійно. Простота вивчення JavaScript дуже часто згадується як одна з найлегших мов для вивчення програмування разом із Python. Багато в чому це досягнення динамічної типізації, яка спрощує синтаксис, знижує кількість коду і робить його більш читаним. Таким чином, для вирішення однієї і тієї ж стандартної програмістської задачі на Java у вас вийде більше рядків коду, ніж при кодингу на JS. Щоб почати працювати з JavaScript, вам навіть не потрібно встановлювати додаткове програмне забезпечення – достатньо текстового файлу з розширенням .html і написаним всередині тегу «script» коду. Результат роботи коду ви зможете побачити, відкривши файл у будь-якому сучасному браузері, оскільки всі необхідні інструменти для інтерпретації JavaScript вже вбудовані в Google Chrome, Mozilla Firefox, Opera та інші. Тим не менш, краще використовувати спеціальні редактори коду, які спростять його написання та зроблять кодинг максимально зручним. Java – більш фундаментальна і поглиблена мова. Це робить її складнішою для вивчення, ніж JS, проте пропрацьованість джава дозволяє реалізовувати складну логіку зі збереженням гарної продуктивності. Для написання першого коду на Java одним файлом не обійдешся – необхідно встановити Java SE Development Kit з офіційного сайту Oracle, а потім завантажити середовище розроблення, наприклад, IntelliJ IDEA. Тільки потім ви зможете розпочати написання свого першого “Hello World!”. Зарплата З оплатою праці програмістів за напрямками, які у даній статті розглядаються, все дуже добре. Якщо вірити зарплатному віджету на DOU.ua, то станом на грудень 2020 року Java та JavaScript розробники рівня Junior в Україні можуть претендувати на наступну суму: Наведемо додаткове розшифрування: I квартиль – це значення з/п, нижче за яке у впорядкованому за зростанням масиві перебуває 25% даних про заробітні плати; III квартиль – значення з/п, вище якого у впорядкованому за зростанням масиві перебуває 25% даних про заробітні плати; медіана – значення з/п, розташоване в середині массиву, що розглядається, котрий упорядковано за зростанням. Як можете бачити, Java розробники мають сильніший зарплатний старт, ніж JS девелопери – це пояснюється тим, що роботодавець висуває більше вимог до джавістів на позицію Junior щодо знання технологій і мови в порівнянні з вимогами до Junior JavaScript розробника. Якщо JavaScript Dev. буде за своїм скілом приблизно рівний із джавістом, він зароблятиме не менше колеги. Зарплати розробників рівня Middle: Тут зарплати Java розробників також перевищують тих, хто займається розробленням на JS. Проте, розрив не такий вже й великий, тому не варто робити поспішні висновки. Тим більше, що в сучасному світі ЗП програмістів дуже залежить від навичок та досвіду роботи – чим більше ви інвестуєте у свої знання та вміння, тим більше роботодавець погодиться інвестувати у вас. Також варто згадати той факт, що розробники часто мають гарний соцпакет, який може покривати походи в спортзал, поїздки на транспорті, повноцінне офісне харчування, страховий пакет і багато іншого. Підсумки Підведемо все вищевикладене під спільний знаменник. Отже, JavaScript: мова, яка є однією з найпопулярніших і найлегших для вивчення і при цьому не залежить від платформи; архіважлива мова у FrontEnd розробленні, котра також успішно застосовується на BackEnd`і за допомогою платформи Node.js; затребувана у розробленні мобільних та десктопних програм завдяки фреймворкам Electron, React Native; дозволяє розробляти і FrontEnd, і BackEnd, що дає можливість реалізувати себе як Web Full Stack Developer за допомогою всього однієї мови програмування, яка покриває обидві стихії веб-розроблення; має меншу продуктивність на BackEnd`і, ніж у Java (якщо використовувати популярну Node.js); динамічно типізована мова, яка відрізняється відносною простотою синтаксису, високим ступенем лаконічності та читабельності коду; мінімально необхідні інструменти для роботи з JS – текстовий блокнот та браузер; Java: одна з найбільш впливових та домінуючих мов програмування на ринку розроблення ПЗ; швидка, безпечна та надійна мова програмування, здатна вирішувати завдання різних напрямків: BackEnd розроблення, ентерпрайз рішення, мобільні додатки під Android, банківські та трейдерські системи, Big Data, вбудовані системи, ігри тощо; успішно застосовується у завданнях зі складною логікою; особливо ефективна у мобільному розробленні під Android та в Enterprise проєктах, орієнтованих на задачі великого бізнесу; статично типізована мова з набором строгих правил, які забезпечують гарну структурованість коду та високу продуктивність написаних програм. Загальний пункт: грошова винагорода Java розробників трохи вища, ніж у JavaScript девелоперів, але все залежить від ваших навичок і досвіду роботи. Ну а яка з цих двох мов краща — суб’єктивне питання. Але ми повторюємо: важлива відповідь не на “яка мова програмування краща?”, а на “яка мова конкретно мені більше подобається? Яке відгалуження в IT мені ближче до душі? Чи подобається мені той спектр завдань, для вирішення яких призначена мова, котру я вподобав?”, а далі просто рухайтеся в обраному напрямку. Успіхів у вашому виборі! Чекайте на нові статті в нашій рубриці і залишайтеся з ITVDN!

500+ питань на співбесіді щодо Ruby

Автор: Влад Сверчков

ТОП-10 найкращих відео з .NET

Автор: Влад Сверчков

Вітаємо! Друзі, цього разу ми підготували для вас вибірку найкращих вебінарів від ITVDN за напрямком .NET. До рейтингу увійшли як пізнавальні вебінари з актуальною інформацією, так і вебінари, орієнтовані на прокачування ваших навичок створення коду. Давайте приступимо до їх розгляду. Як стати C# розробником у 2021 році? .NET чи .NET Core? Автор – Дмитро Охріменко, сертифікований спеціаліст Microsoft (MCTS, MCPD, MCT). Тренер-консультант, експерт з побудови розподілених та веб-орієнтованих додатків. Автор курсів з .NET та FrontEnd розроблення на ITVDN C#/.NET розроблення – це дуже перспективний напрямок у IT, життя якому дала всесвітньо відома компанія MIcrosoft. Якщо вам цікава дана сфера і ви хочете зробити в ній професійний старт, цей вебінар буде для вас дуже доречним! Мета вебінару – допомогти вам розібратися з головними аспектами даної спеціальності, спираючись на тенденції розвитку IT-ринку, правильно розставити пріоритети та допомогти спланувати ваше навчання та кар’єру за напрямком C#/.NET. На заході розглянуто такі важливі питання: Чи є сенс починати вчити C# у 2021 році? Що таке .NET Framework та що таке .NET Core? Що вивчати і в якій послідовності? Карта спеціальності Порівняння веб програми на .NET та на .NET Core Корисні ресурси для навчання та розвитку Питання та відповіді Як стати Full-Stack розробником? Автор – Віталій Ємець, FullStack Developer, Microsoft Certified Specialist Full-stack розробник (вимовляється «фул стек») – це майстер на всі руки у світі веб-розроблення. Йому під силу реалізувати як клієнтський, так і серверний бік додатку, якими зазвичай займаються FrontEnd і BackEnd розробники окремо один від одного. Таким чином, у деяких випадках Full-Stack фахівець може навіть одноосібно вести проєкт від початку до кінця. Які навички необхідно мати, щоб досягти такого рівня майстерності, і який інструментарій повинен бути у справжнього Full-Stack розробника? У чому переваги даної професії та які у неї підводні камені? Як Full-Stack розроблення пов’язане з технологіями C#/.NET? Усі відповіді на ваші запитання ви отримаєте на вебінарі Віталія Ємця. Що нового в C# 8, 9? Автор – Олексій Никифоров, Software Engineer & Business Analyst at HYS-Enterprise C# — це універсальна об’єктно-орієнтована мова, яка є потужним інструментом створення програмного забезпечення з широкою сферою застосування. При такій високій функціональності вона досить нескладна у вивченні і чудово підходить тим, хто збирається зробити перший крок назустріч програмуванню. Цей вебінар передбачає занурення в останні нововведення мови C#. Основний наголос буде зроблено на комунікацію та обговорення, припускаючи, що учасники вебінару – розробники C#, які стежать за новинками цієї мови. Автор пройдеться новими можливостями мови та обговорить, як ці зміни можуть бути використані з метою написання більш виразного та чистого коду. Алгоритми та структури даних у .NET Автор – Ярослав Кучук, .NET Developer На вебінарі розглядається питання фундаментальної алгоритмічної підготовки – від математичного обґрунтування потужності алгоритму до стандартних алгоритмів та структур даних. Базові алгоритми реалізовані на C#; автор аналізує їх з точки зору їхньої потужності. На вебінарі розглядаються такі теми: Поняття алгоритму Складність алгоритму та способи її вимірювання Основні структури даних Стек Черга Зв’язаний список Хеш-таблиця Бінарні дерева пошуку Червоно-чорні дерева Базові сортувальні алгоритми Базові пошукові алгоритми Безпека .NET веб-додатків: часті помилки та методи боротьби з ними Автор – Олексій Голубєв, Lead Software Engineer в компанії SoftServe Мета вебінару – звернути увагу розробників на проблеми у сфері безпеки веб-додатків, які можна усунути ще на етапі розроблення. На вебінарі автор розповідає про найчастіші помилки у додатках, вразливостях, пов’язаних із сторонніми бібліотеками, і те, як їх можна уникнути. Зміст вебінару: Авторизація. Крадіжки сесій та стійкості паролів. Людський фактор. Що розробник може зробити не так і на що звертати увагу. Ін’єкції. Які зустрічаються частіше і про небезпечні WYSIWYG редактори. Рандомізація. Випадковості не випадкові. Вебінар підійде .NET розробникам – вітаються спеціалісти будь-якого рівня. Буде багато практичної інформації, яку можна застосувати як на етапі розроблення, так і на етапі проєктування систем. 6. Техніки тестування для C# розробників. Рівень Advanced Автор – Юрій Наурінський, Senior Fullstack .NET Software Developer На вебінарі буде розглянуто 3 «поглиблені» техніки тестування, якими має володіти досвідчений розробник. Буде трохи теорії, приклади та відповіді на запитання. Усі приклади мовою С#. Нижче наведено техніки, які розглядаються на зустрічі. Property based testing – техніка тестування, що застосовується для перевірки властивостей функції, програми, системи. Ключова ідея в тому, що описуються не заздалегідь задані очікувані значення, а властивості, яким повинні задовольняти тестові приклади. Далі, тестові приклади генеруються випадковим чином, постійно перевіряючи, чи вони задовольняють вищеописаним властивостям. Performance testing – одна з найважливіших технік тестування, яку бажано знати кожному розробнику, котра використовується для відповіді на питання, наскільки швидко працює функція, програма, система, а також її окремі компоненти. Також, може відповідати на питання скільки пам’яті споживає функція, програма, система. Load testing – техніка тестування, про яку бажано мати уявлення кожному веб-розробнику; застосовується для вимірювання поведінки системи під різним навантаженням, зокрема нормальним та піковим. Можуть вимірюватися час відповіді, пропускна спроможність, інші бізнес-орієнтовані метрики. 7. Docker для .NET розробників Автор – Олексій Никифоров, Software Engineer & Business Analyst at HYS-Enterprise Docker – це популярна платформа, яка використовується при розробленні, тестуванні та розгортанні програмного забезпечення. Вона дозволяє скоротити час між написанням коду та доставленням його на “production”. За останні роки популярність Docker’a сильно зросла, і ця технологія стала індустріальним стандартом у сфері контейнеризації програмних рішень. Docker може бути корисним дуже широкому спектру фахівців: розробник, тестувальник, адміністратор, реліз-менеджер і т. д. Незважаючи на те, що Docker написаний на Go і використовує особливості ядра Linux, .NET розробники, які традиційно ведуть розроблення під Windows, можуть отримати величезну користь від використання Docker’a на різних рівнях. Знання даного інструменту підвищить вашу продуктивність та дасть конкурентну перевагу на ринку праці. Вебінар буде корисним фахівцям початкового рівня, які завжди хотіли спробувати Docker. Ознайомлення буде засноване на програмі .NET Core. За завершенням, ви сміливо орієнтуватиметеся в основних концепціях та інструментах і зможете успішно розпочати свій шлях вивчення Docker’а. 8. F# та функціональне програмування для C# розробників Автор – Альберт Ташу, .NET Developer, тренер-консультант навчального центру CyberBionic Systematics, а також сертифікований спеціаліст Microsoft С# – це мультипарадигменна мова, і з кожним релізом вона набуває все більше можливостей, спрямованих на застосування функціонального програмування, яке є однією з найпопулярніших парадигм у сучасном розробленні програмного забезпечення. Для того, щоб легше було розібратися в цій парадигмі, буде розглянута дуже цікава мова платформи .NET – F#. Крім цього, торкнемося основних принципів функціонального програмування та їх застосування при розробленні мовою C#. Зміст вебінару: Введення до мови F# Основи функціонального програмування Застосування функціональних підходів розроблення на C# Рефакторинг проєкту на С# 9. Створення гри «Space Invaders» на C# з нуля Автор – Армен Маілян, C#/.NET Developer, тренер-консультант CyberBionic Systematics Який найкращий спосіб вивчити щось нове? Звичайно ж, перетворити це на гру! Цей спосіб гарний і у навчанні програмуванню. Почніть вивчення мови C#, створивши консольну комп’ютерну гру. Обіцяємо мінімум нудної теорії та максимум практики. Буде цікаво! Кому це буде корисно? Новачкам. Ніколи не програмували? Це не нагода відмовлятися від нового крутого досвіду. Ви маєте шанс зробити свою власну гру на C# і отримати досвід практичного застосування даної мови програмування, а також спробувати себе в ролі розробника ігор. Розробникам-початківцям C#. Ви зможете поглибити та застосувати на практиці свої знання мови C# разом із наставником. Чого ви навчитеся: Розробляти просту гру мовою C#. Розбивати велике завдання на окремі етапи та послідовно їх реалізовувати. Застосовувати на практиці процедурний і об’єктно-орієнтований підхід для написання програм на С#. Розуміти та застосовувати основи алгоритмування. Застосовувати знання основ ООП для створення повноцінної програми. Використовувати функціонал .NET Framework. 10. Створення еволюційної гри Conway’s Game Of Life C# + WPF Автор – Юрій Наурінський, Senior Fullstack .NET Software Developer На вебінарі буде розглянутий Game Of Life – клітинний автомат, придуманий англійським математиком Джоном Конвеєм у 1970 році – і його реалізація за допомогою мови програмування C# та фреймворку WPF. Перш ніж реалізовувати гру, необхідно чітко визначити завдання та постановку правил самої гри. Далі буде розглянуто, як реалізувати саму логіку гри без прив’язки до будь-якого фреймворку. Наступний логічний крок після того, як було реалізовано основну логіку гри — це розгляд прив’язки логіки до фреймворку WPF і надання «життя» грі. Наприкінці вебінару автор розповість, які техніки тестування можна застосувати для гарантії коректності результату логіки гри. Цей вебінар буде цікавий C# розробникам, які бажають заглибитись у розроблення додатків з використанням технології WPF, а також хочуть розглянути з практичної точки зору досить цікаву та відому математичну гру. Вивчайте розроблення .NET на ITVDN!

400+ питань на співбесіді щодо С++

Автор: Влад Сверчков

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 5 апреля 2021 года. Оригинальная версия на украинском языке доступна по ссылке. Junior 1.1 Общие вопросы 1.2 Метапрограммирование 1.3 Препроцессор и компиляция 1.4 Язык C 1.5 Язык С++ и ООП 1.6 STL / Algorithms 1.7 Многопоточность 1.8 Networking 1.9 OS/Linux 1.10 SCM / CI / CD 1.11 Практические задания Middle 2.1 Общее 2.2 Препроцессор и компиляция 2.3 Язык С 2.4 Язык С++ 2.5 Паттерны проектирования 2.6 Метапрограммирование 2.7 OOP/OOD 2.8 STL / Algorithms 2.9 Многопоточность 2.10 Networking 2.11 SCM / CI / CD 2.12 Практические задания Senior 3.1 Общее 3.2 Препроцессор и компиляция 3.3 C/C++ 3.4 OOP/OOD 3.5 STL / Algorithms 3.6 Многопоточность 3.7 SCM / CI / CD 3.8 Практические задания Предлагаем список технических вопросов, которые, вероятно, вам поставят на собеседованиях по C++. Вопросы предоставили специалисты, принимающие участие в проведении технических интервью по этому языку. Учтите, что есть широкий спектр специализаций, поэтому выбирайте свое направление и готовьтесь. Junior Общие вопросы 1. В чем заключаются основные принципы ООП? 2. Что такое сложность алгоритма? 3. Код работает неправильно. Что делать? 4. Объясните такие структуры данных, как стек и очередь. 5. Какие книги, связанные с программированием, читали? Чему с них научились? 6. Что интересного нашли в новых стандартах С++17, С++20? 7. Что такое таблица ASCII? 8. Что такое Unicode? 9. Что такое паттерны проектирования и для чего их используют? 10. Патерны Singleton, Strategy, Template-Method, Decorator? 11. Для чего нужны модульные тесты? 12. Какая разница между модульными и интеграционными тестами? 13. Что такое TDD? Метапрограммирование 14. Что такое шаблонный класс и шаблонная функция? 15. Что такое конструкторы? Какие типы знаете? 16. Может ли конструктор быть шаблонной функцией? 17. Может ли виртуальная функция быть шаблонной? 18. Что такое инстанциация шаблона? 19. Что такое специализация шаблона? Частичная специализация шаблона? 20. Расскажите об имплементации шаблонных классов в срр-файле? Препроцессор и компиляция 21. Как проходит процесс компиляции срр-файлов в бинарный файл? 22. Что такое препроцессор? 23. Как работает препроцессор? 24. Какие знаете команды препроцессора? 25. Как работает директива include? 26. Как работает директива define? 27. Что именно линкует линкер? 28. Что такое оптимизация компилятора? 29. Что такое флажки компиляции? 30. Как защитить хедер от повторного включения? 31. Что делает директива include? 32. Как работают макросы? Язык C 33. Как static влияет на глобальные/локальные переменные? 34. Как сonst влияет на переменную? 35. Какие варианты использования extern знаете? 36. Какие варианты использования volatile знаете? 37. Какие есть битовые операции? 38. Что такое булевая алгебра? 39. Расскажите об этапах разработки библиотеки или программы. 40. Что такое алгоритмы сортировки и какие вы знаете? 41. Какие алгоритмы работы со строками знаете? 42. Какие алгоритмы на графах знаете? 43. Где может храниться переменная? 44. Какая разница между calloc и malloc? 45. Для чего используют realloc? 46. Что такое указатель? 47. Каков размер указателя и от чего он зависит? 48. Какие есть операции с указателями? 49. Что такое struct? 50. Как определить размер структур? 51. Что такое выравнивание в структурах? 52. Что такое union? 53. Какой размер union? C++/OOP 54. Что такое класс? 55. Какие есть основные типы данных в C++? 56. Что такое инкапсуляция? Как она реализуется в C++? 57. Какие есть встроенные типы в С++? 58. Что такое enum? 59. Как соотносится класс и объект? 60. Какая разница между структурой и классом? 61. Разница между private/protected/public и где они используются? 62. Какие методы класса являются стандартными для класса? 63. Что такое абстрактный класс и зачем он? 64. Сколько памяти занимает объект пустого класса class A <>; ? 65. Что случится с функцией, если к ней добавить ключевое слово static? В контексте члена класса? В контексте метода класса? 66. Какие особенности статических полей класса? 67. Какая особенность константных методов-членов класса? 68. Как изменить поле класса в константном методе класса? 69. Какие методы можно вызвать из константных объектов? 70. Что такое куча и стек? Различия, принцип работы. 71. В чем разница между указателем и ссылкой? 72. Для чего нужен указатель на функцию? Как его объявить? 73. Что будет, если забыть вызвать delete? Когда освободится эта память? 74. Что такое умный указатель? Какие умные указатели есть в стандартной библиотеке? 75. Как работает std::unique_ptr? 76. Как работает std::shared_ptr? 77. Расскажите о константности переменной, ссылки, указателя. Что такое константный указатель и указатель на константу? Размер указателя в памяти? 78. Расскажите о передаче аргументов по значению, по ссылке и по указателю. 79. Расскажите о порядке вычисления аргументов функции? 80. Что произойдет, если вернуть ссылку на временный объект? 81. Что такое перегрузки функции? Виды перегрузки. 82. Что такое явное и неявное приведение типов в С++? Расскажите о функциях явного приведения типов в C++. 83. Что такое инициализация переменной в if? 84. Что такое ленивые вычисления в С++? 85. Расскажите о циклах for и range-for. 86. Что делает ключевое слово auto? auto-определение return-типа, аргументов функции? 87. Чем отличаются delete и delete [ ] ? Что случится, если вызвать delete у объекта, созданного через new [ ] ? 88. Обработка ошибок в С++. Какие конструкции используют при обработке exception? 89. Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены? 90. Что такое memory leak? 91. Можно ли выбрасывать exception из деструктора? 92. Как отловить деление на 0 в С++? 93. Как работают константные методы? 94. Что такое лямбда-функция в С++? Как получить доступ к переменным во внешней области видимости? 95. Для чего использовать namespace, anonymous namespace? 96. Как вызвать объект из nested namespace? 97. Как работают inline-функции? Может ли такая функция быть рекурсивной? 98. Что такое полиморфизм? 99. Для чего используется наследование? 100. Какие бывают типы наследования? 101. Для чего используют виртуальное наследование? 102. Как можно решить проблему ромбовидного наследования без использования виртуального наследования? 103. Что случится, если класс-наследник передать по значению в функцию, которая принимает базовый класс? 104. Что случится, если пронаследоваться от базового класса, который не имеет виртуального конструктора? 105. Что случится, если вызвать переопределенную virtual function из конструктора? Может ли конструктор быть виртуальным? 106. Может ли pure virtual function иметь имплементацию? Что случится, если вызвать pure virtual function из конструктора? 107. Какие методы генерируются для класса по умолчанию? В каком случае такие методы не будут генерироваться? Как заставить компилятор добавить/удалить эти методы? 108. Как запретить наследовать класс? 109. Какой порядок конструирования и разрушения классов в иерархии? Порядок инициализации полей класса? 110. Какие есть способы инициализации полей класса? 111. Может ли деструктор быть виртуальным? 112. Что делает ключевое слово virtual? 113. Для чего используют виртуальный деструктор? 114. Что такое глубокое копирование? 115. Что такое виртуальные функции и зачем они нужны? 116. Как защитить объект от копирования? 117. Что такое семантика перемещения? STL / Algorithms 118. Из чего состоит STL? 119. Какие алгоритмы применяли с STL? В чем преимущество использования алгоритмов перед собственноручно написанными функциями? 120. Расскажите о контейнерах стандартной библиотеки vector, list, map, unordered_map. 121. Какие знаете типы итераторов? Чем они отличаются? В каких контейнерах используются? 122. Какая разница между std::set, std::map, std::unordered_multimap? 123. Что такое идиома remove-erase? 124. Как получить наименьшее значение типа? 125. Какая разница между std::map и std::hashmap? 126. Как подсчитать количество элементов в std::list? 127. Что такое сложность алгоритма и от чего она зависит? 128. В чем разница между vector и list и в каких случаях их лучше использовать? Многопоточность 129. Что вам известно о многопоточности? 130. Что общего и различного в процессах и потоках? 131. Как синхронизировать передачи информации между потоками? 132. Какая разница между мьютексом и семафором? 133. Что такое deadlock? 134. Является ли С++ thread-safe? 135. Что такое race-condition? 136. Как избежать состояния гонки? 137. Что такое атомарная операция? 138. Как работать с std::mutex? Networking 139. Что такое сокет? 140. Какие операции можно делать с сокетом? 141. Какая информация нужна, чтобы создать сокет? 142. Какие бывают модели сетей? 143. Расскажите об уровнях модели OSI. 144. Расскажите об уровнях модели TCP/IP. 145. Что такое IP-адрес? 146. Для чего используется маска подсети? 147. Какая разница между IPv4 и IPv6? 148. Сколько памяти необходимо для хранения IPv4? 149. Для чего нужен порт? 150. Сколько максимально может быть портов? 151. Какая разница между TCP и UDP? 152. Для чего такой ненадежный UDP-протокол? OS/Linux 153. Что такое менеджер пакетов? 154. Какие бывают менеджеры пакетов? 155. Какие бывают дистрибутивы Linux? 156. Что такое PID? 157. Для чего используют файловые дескрипторы? 158. Расскажите о стандартных файловых дескрипторах процесса. 159. Что такое Pipe? 160. Что такое Named Pipe? 161. Что такое UID? 162. Расскажите о командах bash. SCM / CI / CD 163. Какие есть виды SCM? 164. Для чего используют системы контроля версий? 165. Какие есть команды git? 166. Какие этапы во время комита изменений? 167. Разница между git fetch и git pull? 168. Какие есть этапы решения merge conflict? Практические задания 169. Посчитайте количество единиц в произвольном числе. 170. Есть структура по типу «односвязный список». Напишите функцию, которая разворачивает список. То есть, первый элемент становится последним, а последний — первым. 171. Напишите реализацию функции int atoi (const char *str); преобразования строки в число. 172. Для структуры типа односвязный список напишите функцию вставки элемента. 173. Реализуйте класс vector. 174. Реализуйте бинарный поиск в массиве. 175. Реализуйте любую сортировку. 176. Реализуйте макрос для сравнения двух строк. 177. Реализуйте реверс строк. 178. Реализуйте перевода числа из строки в int. 179. Реализуйте подсчет слов в предложении. 180. Реализуйте подсчет чисел Фибоначчи. 181. Найдите такие элементы двух массивов, которые попадаются только в каждом из них. Желательно использовать STL. 182. Удалите из unordered_map элементы, которые делятся на 2 и выведите ключи этих элементов. 183. Напишите класс для логирования, который мог бы логировать к консоли или файлу. 184. Напишите функцию для определения, является ли определенный год високосным. 185. Напишите функцию для определения, является ли определенное слово палиндромом. 186. Напишите реализацию паттерна Singleton. 187. Напишите реализацию std::vector с операциями: push_back, push_front, pop_back, pop_front, size, clear. 188. Напишите рекурсивный поиск значения в дереве бинарного поиска. 189. Напишите функцию, которая проверяет, является ли дерево сбалансированным. 190. Напишить функцию для поиска уникального элемента в массиве. Middle Общее 1. Какие курсы прошли или книги прочитали за этот год? Чему научились? 2. Что нравится и не нравится в С++? Чего не хватает? 3. Что интересного нашли в новых стандартах С++17, С++20 (конкретные фичи)? 4. Расскажите о фичах, которые появились в разных версиях языка. 5. Расскажите о модели памяти, которая появилась в С++11 стандарте. 6. Что такое сериализация? Какие библиотеки знаете? 7. Какие знаете паттерны проектирования? 8. Что такое операционная система? Какие существуют типы по назначению? 9. Назвать основные составляющие и принципы работы ОС Linux в качестве примера системы общего назначения. 10. Что такое SFINAE и PIMPL? 11. Назовите порождающие, структурные и поведенческие паттерны программирования и приведите примеры их использования. Препроцессор и компиляция 12. Расскажите о системах автоматизации билд-процесса. 13. Какая разница между статической и динамической библиотеками? 14. Какая разница между исполнительным файлом и динамической библиотекой? 15. Что такое DLL hell? 16. Что такое флажки компиляции (fPIC)? 17. В чем разница между дебаженной и релизной сборкой? 18. Что нужно для использования сторонней библиотеки? 19. Что такое internal linkage? C 20. Что будет, если дважды вызвать free? 21. Как происходит вызов функции? 22. Как происходит передача параметров в функцию? 23. Как прорабатывается константа переменных? 24. Что означает ключевое слово inline? 25. Для чего используют выравнивания, можно ли его контролировать? 26. Расскажите о битовых полях. 27. Для чего нужен extern «C»? 28. Что будет, если в двух файлах сделать функцию с одинаковым именем и параметрами? На каком этапе возникнет ошибка? 29. Как экспортировать/импортировать функции из динамической библиотеки? 30. Какая разница между С-style приведением типов и C++ приведением? C++ 31. Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор? 32. Что такое Uniform initialization? Aggregate initialization? 33. Что такое Reference to temporary object? Как продлить время жизни временного объекта? 34. Что такое делегирующий конструктор? 35. Что такое список инициализации? 36. Какой порядок инициализации полей класса? Что случится, если конструктор инициализирует поля в другом порядке? 37. Что случится, если инициализировать поле другим полем? 38. Что такое copy elision? Сколько раз будет вызван конструктор/деструктор у объекта, которого возвращают по значению? 39. Что такое move-семантика? 40. В каких случаях не будет сгенерирован конструктор копирования? 41. Чем отличается конструктор копирования от оператора присваивания? 42. При каких условиях в конструкторе можно выбросить exception? 43. Что такое конструктор по умолчанию? Для чего нужны default и delete? 44. Чем отличается интерфейс от абстрактного класса? 45. Какие виды полиморфизма в С++? 46. Как реализовано наследование в большинстве компиляторов? 47. Множественное наследование: за и против? 48. Виртуальное наследование и порядок конструирования? 49. Зачем использовать override? 50. Какие есть правила вывода типа при использовании auto? В каких случаях auto может привести к нежелательному копированию объекта? 51. Расскажите обо всех возможных способах использования ключевого слова static в С++. Что такое static initialization order fiasco? 52. Что делает вызов throw; в блоке catch? 53. Чем отличается constexpr от const? 54. Что такое const correctness? 55. В каком случае можно использовать const_cast? 56. Что такое ключевое слово mutable и когда его нужно использовать? 57. Что такое ключевое слово friend и когда его нужно использовать? 58. Расскажите о лямбда-выражениях в С++ и доступ к переменным во внешней области видимости, захват this в лямбду и время жизни лямбды и захваченных переменных? 59. Что такое функтор? Напишите пример. 60. Что такое специализация шаблона? 61. Что такое dynamic_cast и run-time type identification? 62. Что такое exception? Как бросить и поймать? 63. Что будет, если бросить exception из конструктора? А из деструктора? 64. Что будет, если не поймать exception? 65. Что произойдет, если exception выйдет за пределы блока noexcept функции? 66. Для чего можно использовать приватное наследование? 67. Что такое контракт функции? 68. Что такое vptr и vtable? 69. Где содержится vptr? 70. Где содержится vtable? 71. Какая разница между overload and override? 72. Как компилятор различает члены класса и обычные переменные в функциях? 73. Зачем используют exceptions? 74. Что такое блоки try-throw-catch? 75. Расскажите о логике catch-блоков. 76. Что такое move constructor? 77. В чем разница между константным методом и неконстантным? 78. Что такое В-нотация и как определить сложность любого алгоритма? 79. Что такое таблица виртуальных методов? 80. Какие функции класса автоматически генерирует компилятор, если их не определить? 81. Что такое выравнивание данных? 82. Что такое exception? 83. Какие есть стандартные контейнеры и на основе каких структур они построены? 84. Что такое Undefined behavior? Приведите примеры. 85. Как определить, что в программе есть memory leak? 86. Для чего нужен std::make_shared? Чем он лучше создания std::shared_ptr через конструктор? 87. Что будет, если выделить один объем памяти, а записать больше? 88. Что такое переполнение stack? Паттерны проектирования 89. Зачем нужны паттерны? Какие типы паттернов различают? 90. Недостатки паттерна Singleton? Когда он уместен? 91. Преимущества и недостатки PIMPL? 92. В чем разница между паттерн-фабрикой и фабричным методом? Когда использовать какой из них? 93. Что такое паттерн Observer? 94. Як контролировать состояние программы? Машину состояний? Паттерн состояние? 95. Что такое паттерн Visitor? Метапрограммирование 96. Какие есть правила вывода типа в шаблоне? 97. Чем отличается using от typedef? 98. Сколько памяти занимает произвольная структура? Что такое выравнивание объекта? 99. Почему пустая структура занимает 1 байт? Какая минимальная единица адресации в С++? OOP/OOD 100. Что такое SOLID? Что означает каждый из этих принципов? 101. Расскажите о паттернах проектирования. 102. Что такое Dependency Injection? Приведите пример. 103. Какие преимущества и недостатки функционального подхода? 104. Что такое принцип RAII? 105. Что такое принцип DRY? 106. Что такое принцип KISS? 107. Какие преимущества композиции перед наследованием? STL / Algorithms 108. Какие алгоритмы с STL использовали? Каких не хватает? 109. Какими особенностями должен обладать класс, чтобы он был итератором? 110. Какие бывают итераторы? 111. Расскажите об инвалидации итераторов. 112. Как оптимизировать удаление элемента со средины вектора? 113. Как реализован vector? 114. Как реализован list? 115. Как расширить STL-контейнеры? 116. Какие есть алгоритмы в STL? 117. В чем разница между vector, deque, list, set e STL? 118. Когда надо использовать map? Когда — unordered_map? Какая сложность поиска и вставки в этих контейнерах? 119. Как проверить, есть ли в контейнере элементы? Почему вызов container.size() является плохой практикой? 120. Что такое exception safety guarantee? Какую exception safety guarantee имеют STL-контейнеры? 121. Расскажите о типах умных указателей и о подсчете ссылок в них. Многопоточность 122. Является ли С++ thread-safe? 123. В чем разница между многопоточностью и асинхронностью? 124. Что такое многопоточность? Какую функциональность предоставляет С++ для разработки многопоточных приложений? Какие основные проблемы многопоточных приложений? 125. Как передать информацию между несколькими процессами? 126. Как синхронизировать между собой несколько процессов? 127. Какие есть особенности работы с shared memory? 128. Как работает spinlock? 129. Какие вы знаете особенности использования recursive mutex? 130. Расскажите о read-write mutex. 131. Что такое race-condition? Взаимная блокировка? Что такое критическая секция? 132. Как избежать состояния гонки? 133. Чем отличается мьютекс от семафора? 134. Какие примитивы синхронизации реализованы в C++? Преимущества lock_guard? 135. Что случится, если exception выйдет за пределы потока? Какие инструменты есть для безопасной асинхронности в С++? 136. Чем отличается std::launch::async от std::launch::deferred? 137. Что такое атомарная операция? std::atomic? 138. Как работать с std::conditional_variable? 139. Как создать поток с помощью std::thread? 140. На сколько потоков лучше разбить задачу? От чего это зависит? 141. Как работать с std::async? 142. Thread-safe гарантии контейнеров в С++? В чем недостаток интерфейса front() + pop_front()? Networking 143. Что такое TCP handshake? 144. Какая разница между TCP и UDP? 145. Расскажите о протоколах верхнего уровня. 146. Какая разница между HTTP и HTTPS? 147. Расскажите об SSL/TLS handshake. SCM / CI / CD 148. Расскажите о процессах CI. 149. Как отредактировать комит? 150. Расскажите об интерактивном rebase. 151. Какие могут быть способы дебаггинга кода? 152. Для чего нужны Unit test? Чем отличается от Functional Test? 153. Как тестировать код? Какой используете фреймворк? 154. Какие библиотеки знаете для написания тестов? 155. Что такое mock? 156. Сколько тестов нужно написать на одну функцию? 157. Что такое побочный эффект, идемпотентность и чистые функции? 158. Что такое контейнеризация и в чем преимущества и недостатки? Что такое Docker или иной инструмент контейнеризации? 159. Что такое CI/CD и какие преимущества приносит для разработчика? 160. Какие принципы итеративных методологий? 161. Какие преимущества и недостатки code-convention? Практические задания 162. Напишите максимально корректную реализацию класса string с конструктором копирования и оператором присваивания. 163. Напишите реализацию очереди. 164. Реализуйте функцию, которая за один проход найдет уникальный элемент в контейнере. 165. Напишите thread-safe пул потоков. 166. Напишите игру жизни в ООП стиле. 167. Напишите класс, который достает из базы список товаров по фильтру и показывает на консоли. Напишите тесты для него. 168. Любая задача на написание кода, чтобы проверить умение проектировать интерфейсы и придерживаться принципов SOLID, DRY, KISS. 169. Напишите свою реализацию std::atomic. 170. Напишите программу для анализа графов: нахождение циклов, deadlock-состояний, циклов, недоступных состояний. 171. Напишите программу, которая бы проверяла, что в системе запущен только один ее экземпляр. Решение должно быть cross-platform. 172. Проанализируйте C++ код с точки зрения качества: выявить потенциальные memory leak, нерациональное использование STL-контейнеров, алгоритмов, неоптимальные конструкции и тому подобное. 173. Напишите код для решения судоку. 174. Напишите код, который найдет зацикливание в односвязном списке. Senior Общее 1. Как вы понимаете SOLID? 2. Как разработать систему плагинов на С++? 3. Что такое RPC? Какие библиотеки знаете? 4. На что обращать внимание при проведении code review? 5. Какие есть проблемы при написании кроссплатформенного кода? На что обращать внимание? 6. Что делать, если код работает медленно? 7. Какие есть способы и методологии измерения быстродействия кода? Как можно устранить/уменьшить влияние замеров на быстродействие? 8. Что такое SFINAE? Для чего используется? 9. Что такое метапрограммирование? С помощью чего реализуется на С++? 10. Как использовать variadic templates? 11. Как тестировать закрытые методы? 12. Как считать покрытие тестами? Нужно ли это делать? 13. Что такое cache miss и как это выявить? 14. Что такое SIMD-инструкции? Какие необходимые условия и способы их использования? 15. Что такое покрытие кода и как обеспечивается? 16. Опишите принципы lock-free структур данных и свой опыт работы с ними. Препроцессор и компиляция 17. Расскажите о построении билд-системы. 18. Как работать с билд-системами: Make, CMake. 19. Как интегрировать third-party в проект? 20. Что такое барьеры памяти? 21. Расскажите о работе с сырыми указателями и о ручном управлении памятью. 22. Что такое статический анализатор кода? Какие знаете? 23. Что такое динамический анализатор кода? Какие знаете? 24. Проект медленно собирается. Как можно ускорить? C/C++ 25. Расскажите об использовании realloc в контейнерах. 26. Как работают шаблоны? 27. Расскажите о специализации шаблонов. 28. Как работает RTTI? 29. Можно ли использовать exception в конструкторе/деструкторе? 30. Что такое rvalue и lvalue? 31. В чем особенности контейнеров std::set, std::map, std::unordered_map, std::hash? 32. Что такое placement new? Для чего используют? Как сделать placement delete? 33. Как размещается в памяти класс со множественным наследованием и виртуальными функциями? 34. Как работают точки остановки? 35. Что такое уязвимости? Каков механизм их работы? 36. Как написать собственный std::shared_ptr? 37. Что такое curiously recurring template pattern? 38. Опишите назначение и принцип работы std::shared_ptr, std::unique_ptr и std::weak_ptr. 39. Какое назначение и отличия использования std::variant и std::any? 40. Какие улучшения получил std::search в С++17 ? 41. Что такое copy elision и когда он становится возможным? Какие особенности для разных стандартов? 42. Что такое Return Value Optimization? OOP/OOD 43. Объясните принципы SOLID. 44. Объясните принципы KISS. 45. Объясните принципы YAGNI. 46. Какие есть подходы к оптимизации кода? 47. На что стоит обращать внимание при code review? 48. Какие есть паттерны проектирования? Почему не советуют использовать Singleton? 49. Что такое статический полиморфизм? STL / Algorithms 50. Когда std::vector может использовать std::move? 51. Расскажите о своем любимом алгоритме поиска. 52. Что такое lock-free и wait-free алгоритмы? В чем их отличия и способы реализации? 53. Опишите назначение execution policy для параллельных алгоритмов. Многопоточность 54. Расскажите о построении API, рассчитанных на многопоточное использование. 55. В чем разница между kernel-level и user-level потоками? 56. Что такое coroutine? 57. Что делает спецификатор thread_local? 58. Как реализовать синхронизацию в задаче producer-consumer? 59. Як синхронизироваться между различными процессами? SCM / CI / CD 60. Расскажите о настройке процесса менеджмента ветвей репозитория. 61. Расскажите о стратегии разветвления (branching). Практические задания 62. Напишите базовую реализацию std::shared_ptr. 63. Реализуйте алгоритм сортировки. 64. Реализуйте алгоритм хеширования. 65. Реализуйте shared_ptr с расширением для weak_ptr. 66. Реализуйте простейший producer-consumer, используя условные переменные. 67. Опишите как можно подробнее, что происходит в системе, когда приложение делает сетевой запрос. 68. Детально описать дизайн программного компонента, например, системы голосования; учесть при этом высокую нагрузку и сделать ее расширяемой и отказоустойчивой. Выражаем благодарность за участие в статье Александру Жакуну, Ярославу Пушко, Назару Семенишину, Сергею Подоброму, Владимиру Кочуну, Владимиру Новикову, Сергею Кривоносу, Марку Цирульнику, Кириллу Пшеничному, Виктору Шуму, Сергею Братусю.

ТОП-10 найкращих відео з FrontEnd

Автор: Влад Сверчков

Вітаємо! Друзі, сьогодні ми підготували для вас вибірку найкращих вебінарів від ITVDN за напрямком FrontEnd. До рейтингу були включені як пізнавальні вебінари з актуальною інформацією, так і вебінари прикладного характеру, які мають на меті вдосконалення ваших навичок написання коду. Давайте приступимо до їх розгляду. Як стати FrontEnd розробником? Покрокова інструкція для початківців Автор – Тисячний Влад, Middle React.js / React Native Developer. FrontEnd Developer – це розробник, який створює клієнтську сторону веб-сайтів. Ваші улюблені сервіси – соціальні мережі, відеохостинги, інтернет-магазини, – будь-який інтернет-продукт необхідно піднести користувачеві в привабливому та зручному для нього вигляді. В такій задачі не обійтися без фронтенд спеціаліста. Які вимоги висувають роботодавці до FrontEnd-розробника? Що потрібно знати та вміти, з чого почати та як краще спланувати навчання? На вебінарі ви отримаєте відповіді на всі питання, що вас цікавлять, і складете цілісне уявлення щодо професії FrontEnd розробника. Адаптивне верстання на FlexBox та Grid Авторка – Ткаченко Анастасія, FrontEnd Developer. Flexbox та Grid – технології, які широко використовуються у верстанні сайтів та суттєво спрощують реалізацію їх адаптивності. Що вони являють собою? CSS Flexbox (Flexible Box Layout Module) – модель макету гнучкого контейнера – є способом компонування елементів, в основі лежить ідея осі. Flexbox складається з гнучкого контейнера (flex container) та гнучких елементів (flex items). Гнучкі елементи можуть вишиковуватися в рядок або стовпчик, а вільний простір, що залишився, розподіляється між ними різними способами. CSS Grid Layout – система двомірного макету, оптимізованого для дизайну користувацького інтерфейсу. Головна ідея, що лежить в основі макету сітки, полягає у розподілі веб-сторінки на стовпці та рядки. У області сітки, що утворилася, можна поміщати елементи сітки, а керувати їх розмірами і розташуванням можна за допомогою спеціальних властивостей модуля. У ході вебінару були продемонстровані можливості цих технологій та переваги їхньої комбінації на практиці (у якому разі яку технологію варто використовувати) для створення адаптивних сторінок. Створення гри Тетріс на JavaScript | Частина 1, 2, 3 Автор – Ростислав Силівейстр, FrontEnd Developer. Чудовий вебінар, який підійде навіть тим, хто має нульовий рівень знання JavaScript. Навчання програмуванню шляхом реалізації культової гри Тетріс – це той самий випадок, коли ви поєднуєте приємне з корисним, а результати можуть бути гордо представлені своїм знайомим, друзям і родичам. Кожна частина вебінару зачіпає визначені автором теми: Перша частина включає постановку завдання, ознайомлення з правилами гри, реалізацію поля, падіння і переміщення фігур в сторони. Друга частина спрямована на реалізацію обертання фігур, прискорення їх падіння, зникнення заповнених рядів, нарахування очок, переходу до наступного рівня, і навіть базові ігрові опції (старт, пауза, почати заново, game over). Третя частина є останньою — відбувається тестування та виправлення недоліків, оптимізація коду та підбиття підсумків. Після старанного вивчення всіх трьох частин вебінару та завзятої практики ви навчитеся: розбиратися у структурах, типах даних, функціях JavaScript; роботі з DOM у JavaScript; роботі із засобами HTML/CSS для розміщення елементів на сторінці; систематичному підходу до вирішення завдань, тримаючи в увазі всі деталі; розумінню логіки створення ігор; розумінню основ алгоритмів. Memory Game на JavaScript за 2 години Автор – Ярослав Вовченко, FrontEnd Developer. Щоб почати писати мовою JavaScript, не обов’язково одразу заглиблюватися у вивчення документації. На прикладі написання простої Memory Game ви дізнаєтеся, як обирати елементи в DOM, проходити по спискам та масивам, додавати, прибирати елементи та “слухачі дій”. На вебінарі ви разом з автором поринете у практичне розроблення на JavaScript. Для цього необхідно мати базові знання HTML, CSS та JavaScript. Вебінар організований наступним чином: Створення структури проєкту, написання перших файлів. Розмітка та стилізація ігрового поля за допомогою HTML та CSS. Основи роботи з перспективою у CSS. Збереження та порівняння обраних карток. Написання додаткового функціоналу. Підсумки, запитання та відповіді. Цей вебінар буде цікавий тим, хто хоче вивчити основи JavaScript у легкій та доступній формі без багатогодинного читання документації. Об’єктно-орієнтоване програмування JavaScript | ООП у JavaScript Автор – Георгій Клюковкін, Lead Software Engineer. Це відео допоможе вам зрозуміти, у чому відмінність ООП підходу до розробки в мультипарадигменній мові JavaScript від ООП підходу в класичних об’єктно-орієнтованих мовах, як, наприклад, Java. Ви дізнаєтеся, які плюси та мінуси має ООП в JavaScript, а також, які правила ООП ми можемо в ньому застосовувати. Автор торкається наступних тем: Основні принципи ООП. Наслідування vs Композиція. Об’єктно-прототипне наслідування у JS. Функції-конструктори та класи. Single responsibility principle. Вебінар буде корисний розробникам-початківцям JavaScript, або тим, хто працює в іншому напрямку і при цьому бажає розібратися в особливостях ООП на JavaScript. П’ять обов’язкових алгоритмів JavaScript розробника. Автор – Тисячний Влад, Middle React.js / React Native Developer. Якщо Ви розробник-початківець і хочете розібратися в тому, наскільки глибоко потрібно вникати у вивчення алгоритмів і структур даних, як часто і які алгоритми потрібно буде використовувати в роботі, хочете зрозуміти, як від правильного вибору алгоритму залежить швидкість роботи сайту, а також дізнатися, як оптимальність алгоритму впливає на швидкість завантаження інформації на сайті — тоді цей вебінар для Вас. У ньому розглядаються такі теми: Що таке алгоритми та структури даних. Як правильно рахувати складність алгоритму. Чи потрібно знати всі алгоритми і як це впливає на ваш гаманець (приклади реального життя). 5 найважливіших алгоритмів. Практика написання алгоритмів сортування. Відповіді на питання. Підготовка до співбесіди з JavaScript у 2021 році. Автор – Дмитро Мойсеєв, Software Engineer at EPAM Systems. У вебінарі порушуються основні питання на співбесіді з JavaScript, які викликають найбільше нерозуміння, особливо у тих, хто перейшов з іншої мови програмування, а також у тих, хто не знайомий з його складними частинами, такими як замикання, прототипне наслідування та особливості асинхронного виконання коду. Автор торкається наступних тем: Типи даних та їх перетворення. Області видимості та замикання. Прототипне наслідування. Асинхронне виконання коду. Відповіді на запитання учасників вебінару. Даний вебінар буде цікавий тим, хто планує проходити співбесіду на позицію FrontEnd розробника на рівень Junior або Middle Developer. Початківцям він не підійде, тому що в вебінарі не розглядатимуться основи мови, а лише її “гострі кути”. 8. React та Redux на прикладі реального додатку. Автор – Олександр Краковський, Software Engineer at EPAM. Даний вебінар допоможе вам на реальному прикладі розібрати, як взаємодіють та працюють сучасні інструменти розробки – React та Redux. Ви зможете написати свій додаток, який буде працювати з реальним API. У ході реалізації програми будуть виконані наступні пункти: Встановлення залежностей, налаштування проєкту. Створення базових компонентів та підключення Redux. Налаштування залежностей для роботи із запитами до сервера. Створення запитів та оброблення даних через Redux. Запуск програми, виправлення помилок. Аналіз виконаної роботи. 9. Створення першого проєкту на Angular Автор – Генріх Коваленко, FrontEnd Developer. У цьому вебінарі ви познайомитеся зі структурою та компонентами фреймворку Angular, а також створите перший проєкт із використанням Angular CLI. На вебінарі розглядаються наступні теми: Що таке Angular і в чому його відмінність від інших популярних фреймворків та бібліотек. Angular CLI, його встановлення та використання у створенні першого проєкту. У чому призначення компонентів та як їх застосувати для зручності підтримки коду надалі. Обслуговування Angular. Модулі. Пайпи та їх застосування, створення своїх пайпів. Директиви *ngFor та *ngIf. Підсумки. Запитання, відповіді. Даний вебінар буде цікавий тим, хто володіє мовою JavaScript на базовому рівні і хоче познайомитися з Angular для подальшої роботи з даним фреймворком. 10. Як стати React розробником Автор – Олег Мельничук, Full Stack JS Developer. React — бібліотека JavaScript, яка впевнено тримає позиції у світі веб-розроблення поруч із найпопулярнішими фреймворками. На вебінарі піднімається історія виникнення React.js, після чого йде порівняння з іншими популярними веб-технологіями. Автор розповідає, чому React – це гарний вибір для входу до FrontEnd. Ви дізнаєтесь, наскільки потрібний чистий JS і чи можна відразу вивчати React. Буде детально розібраний Roadmap React розробника: що можна пропустити на перших етапах, що краще вивчити детально, а на що не варто витрачати сили. Також, автор надає перелік знань та навичок, з якими можна знайти першу роботу у якості React Developer`a. Буде порушено питання подальшого розвитку – як із Frontend розробника на React можна стати Full Stack або Mobile розробником. Цей вебінар буде цікавий Frontend розробникам-початківцям, а також веб-розробникам, які планують перейти на React або вивчити його як додаткову технологію. Вивчайте FrontEnd розробку на ITVDN!

Що повинен знати FrontEnd розробник у 2021 році

Автор: Влад Сверчков

Верстка сайтов и веб-программирование привлекают большое количество новичков в мир IT. Это связано с достаточно низким порогом вхождения. Количество желающих стать фронтендщиком с каждым годом увеличивается, вследствии чего растут и требования к кандидатам. Какие технологии необходимо изучить, чтобы стать FrontEnd разработчиком в 2021 году? Давайте разберемся. HTML5 & CSS3 HTML5 и CSS3 — это фундаментальные технологии, без знания которых не обойтись ни одному веб-разработчику. С помощью языка гипертекстовой разметки HTML создается разметка (каркас) каждой интернет-страницы. Затем язык стилей CSS преображает сайт и придает ему привлекательный и эффектный внешний вид. Помимо этого, необходимо владеть: кроссбраузерной адаптивной версткой, чтобы уметь создавать сайты под мобильные устройства, планшеты и широкоформатные экраны и для различных браузеров; семантической версткой для повышения качества разметки и улучшения поисковой индексации сайта; валидной версткой, которая предполагает полное соответствие кода разработчика всем стандартам W3C — организации, которая создает и внедряет технологические стандарты для World Wide Web. Уделите особое внимание верстке под мобильные устройства, так как современный веб-потребитель очень много времени проводит в смартфоне. Существует даже специальный подход, при котором сначала верстается веб-сайт под мобильные устройства, а только потом под десктопы — называется Mobile First. Это общие требования по верстке. Теперь же рассмотрим более детально требования конкретно по языку стилей. Здесь вы должны знать основные свойства CSS3: фоны, градиенты, тени, анимации, трансформации, переходы, а также технологии Flex и Grid, о которых мы еще поговорим. Хорошее владение HTML и CSS уже позволяет заниматься версткой сайтов и зарабатывать деньги. Именно с этих двух базовых технологий начинается путь к профессии FrontEnd разработчика. Качественно изучить HTML и CSS вы сможете при помощи следующих наших курсов: HTML5 & CSS3 Стартовый; HTML5 & CSS3 Базовый; HTML5 & CSS3 Углубленный. Flex и Grid CSS Технологии верстки надежных адаптивных веб-страниц, которые позволяют легче создавать динамические сайты и удобнее структурировать их содержимое. Лучше всего Flex-верстку в действии показывает интерактивный сайт flexboxfroggy.com, а Grid-верстку — cssgridgarden.com. На нашем ресурсе также есть курсы, которые хорошо объясняют темы Flex и Grid верстки: “Верстка сайта на CSS Grid”, “Верстка сайта на FlexBox CSS”. Bootstrap 4 Популярная HTML/CSS платформа для разработки адаптивных веб-приложений, которую применяют при создании сайтов и интерфейсов администраторских панелей. Основные преимущества Bootstrap: высокая скорость верстки; кроссбраузерность и кроссплатформенность; наличие хорошей документации, большого сообщества и огромного количества разнообразных обучающих материалов; низкий порог вхождения (необходимо знать лишь основы HTML, CSS, JavaScript и jQuery). Также, будет полезно знать еще 2 CSS-фреймворка: Foundation и Materialize. Первый является комплексным и профессиональным инструментом, который следует принципу Mobile First. Имеет продвинутый интерфейс и позволяет создавать действительно уникальные, элегантные и легко настраиваемые веб-сайты. Под эгидой Foundation были созданы такие веб-сервисы, как: Facebook, Mozilla, Adobe, Amazon, eBay и многие другие. Materialize исповедует принципы Material Design от компании Google, которые преследуют идеи цифровой унификации для более легкого и комфортного восприятия интерфейса. На сайте material.io можно более детально ознакомиться с идеологией материального дизайна. Фреймворк Materialize незаменим при разработке несложного многостраничного веб-сайта или лендинга за счет богатых возможностей уже готовых и встроенных компонентов и стилей. Также, Materialize предоставляет разные компоненты и варианты поведения, обычно не встречающиеся в других фронтенд-фреймворках (поведение волн, scrollFire, scrollSpy, или специфичные для мобильных устройств выдвижные меню и всплывающие подсказки и т. д.). Foundation подходит разработчикам с опытом, в то время, как Materialize — отличный выбор для начинающих девелоперов, которые хотят как можно плотнее познакомиться с материальным дизайном. CSS препроцессоры CSS препроцессор — это программа, которая имеет свой собственный синтаксис, но может сгенерировать из него CSS код. Самыми популярными считаются SASS, Stylus, LESS и PostCSS, однако, наибольшее комьюнити имеет именно SASS. Препроцессоры предназначены для: ускорения процесса написания кода; упрощения чтения кода и дальнейшей его поддержки; минимизации рутинной работы при написании кода. Для повышения эффективности написания CSS кода вполне достаточным будет изучение лишь одного препроцессора. Git & GitHub Git — наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Помимо этого, стоит уметь работать с сервисом онлайн-хостинга проектов, использующих систему контроля версий. В данном случае это GitHub. В тандеме с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах. Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы. Git & GitHub — очень важные инструменты для любого IT-разработчика, изучением которых следует заняться как можно раньше. Мы рекомендуем изучать Git на ITVDN при помощи курса “Основы работы с Git”. Знания о веб-технологиях и сети интернет Чтобы качественно выполнять свою работу, фронтенд разработчик должен разбираться в вебе и понимать принципы его функционирования. Таким образом, необходимо знать: как работает интернет; протоколы HTTP/HTTPS, веб-сокеты; как работают браузеры; что такое DNS и как он работает; что такое доменное имя; что такое хостинг. Также, будет неплохо, если вы попробуете настроить сайт на каком-нибудь бесплатном хостинге, привяжете домен к этому хостингу. JavaScript Язык программирования, который используется как при разработке клиентской стороны веб-приложения, так и серверной. При помощи JavaScript (сокращенно — JS) можно писать даже настольные и мобильные приложения, используя определенные программные платформы и библиотеки. Этот язык позволяет: динамически изменять разметку; осуществлять интерактивное взаимодействие с пользователем; анимировать изображения; совершать валидацию форм; управлять мультимедиа и т. д. Другими словами, JavaScript “оживляет” страницу и добавляет ей функциональности. Хорошее владение данным языком программирования является обязательным для каждого FrontEnd разработчика. Сергей Росоха, Software Architect с 11-летним опыта во FrontEnd/JS, отмечает важность изучения алгоритмов и структур данных на JavaScript: “JavaScript давно уже используется не только для разработки динамических интерфейсов пользователя, но и для написания достаточно сложной бизнес-логики. Поэтому знание алгоритмов и структур данных становится критичным для JS-разработчиков. ” (источник) JavaScript использует официальный стандарт ECMAScript (сокращенно — ES), который подразумевает определенное формальное описание синтаксиса, базовых объектов и алгоритмов. На данный момент существует множество различных версий ES. Работодатели чаще всего требуют знание ES6+. Однако, вначале необходимо изучить чистый JavaScript и лишь потом вникать в новые стандарты. Как ни крути, а классику надо знать. Благодаря хорошему владению JS можно быстро разобраться в любой версии ES и затем освоить любой фреймворк или библиотеку. ITVDN предоставляет возможность изучить JavaScript с нуля до продвинутого уровня при помощи курсов: JavaScript Стартовый; JavaScript Углубленный; JavaScript: Расширенные возможности. Линтеры Инструменты, которые позволяют анализировать качество JavaScript-кода согласно определенному стандарту ES. Они встраиваются в среду разработки и указывают на наличие несоответствий стандарту в коде, если таковые имеются. Данный механизм полезен как для одиночной разработки (для самоконтроля), так и для командной, когда каждый разработчик должен следовать одним и тем же языковым конструкциям, дабы на выходе получить единый, целостный проект. Среди известных линтеров можно выделить ESLint и Prettier. Тестирование Jest, Cypress и Enzyme — главные инструменты модульного тестирования, которое возлагается на плечи разработчика. Но что это такое? Unit тестирование (оно же — модульное тестирование) — процесс, который заключается в создании тестов для проверки работоспособности отдельных участков написанного программистом кода. Выполняется непосредственно автором кода. Какую пользу приносит Unit тестирование: существенное сокращение багов в коде; упрощение рефакторинга кода; обеспечение качественного отделения интерфейса от реализации; лучшее понимание написанного кода; возможность протестировать мельчайшие участки кода. Все три инструмента учить не надо — достаточно научиться управляться лишь с одним из них. Паттерны проектирования JavaScript Это лучшие практики, которые описывают типичные способы решения распространенных задач, возникающих в ходе проектирования программного обеспечения. Знание шаблонов проектирования позволяет писать более чистый, понятный и читаемый код, а также избегать “изобретения велосипеда”. Более того, владение паттернами показывает вашу грамотность, как разработчика, и повышает вашу ценность в глазах работодателя, что поможет выделиться на фоне конкурентов. Чтобы вы могли хорошенько разобраться с темой шаблонов в JavaScript, рекомендуем курс “JavaScript Шаблоны”. Алгоритмы и структуры данных Понимание алгоритмов и структур данных — обязательные знания для любого программиста. К структурам данных относятся: стеки, очереди, связанные списки, графы и т. д. Изучив их, вы сможете управлять сложностью своих программ, делая их более доступными для понимания, а также разрабатывать высокопроизводительные программы, которые будут эффективно работать с памятью. Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач. Когда говорят об алгоритмах, обычно имеют ввиду алгоритмы сортировки и поиска: сортировки прямым включением, прямым выбором, слиянием, пирамидальная, прямой поиск, бинарный, индексно-последовательный и другие. Важно разбираться и в нотации Big O, которая описывает сложность каждого алгоритма. Данный механизм помогает определить, при каких условиях выгоднее использовать тот или иной алгоритм. Отметим, что как новичку, вам не надо нырять вглубь этих тем. Будет достаточно теоретического владения, а также умения написать несколько алгоритмов. В разработке сайтов это не сильно нужно, но практически ни одно собеседование не обходит стороной тему шаблонов, алгоритмов и структур данных. Фреймворки JavaScript Это инструменты, с помощью которых создаются динамические веб/мобильные/десктопные приложения на языке JavaScript. Они ускоряют разработку веб-приложений и предусматривают четко структурированную организацию кода, повышая его качество и чистоту. Самыми популярными фреймворками для фронтенд-разработки можно назвать Vue.js, React и Angular. Каждый из них предназначен для решения своего спектра задач и имеет различную степень сложности: Vue.js — самый легкий (но и с наименьшим сообществом), React — средней сложности, Angular — высокой сложности. Стоит сконцентрироваться на глубоком изучении одного фреймворка, но в то же время очень рекомендуется знать особенности и сферу применения всех вышеперечисленных технологий. Какой фреймворк все же выбрать? Мнения на этот счет расходятся. Инструментарий выбирается индивидуально под проект и трудно предугадать, какие задачи вам нужно будет решать. На данный момент наибольшей популярностью пользуется React, поскольку он сбалансирован как с точки зрения сложности, так и с точки зрения богатства функционала. К тому же, наибольшее количество вакансий припадает именно на этот фреймворк, а значит, что он интересен не только разработчикам, но и бизнесу. Каждый из фреймворков доступен для изучения на платформе ITVDN. По направлению Angular: Angular 11.0 Базовый; Angular Углубленный. По направлению React: React Базовый; React Углубленный. По направлению Vue.js: Vue.js Стартовый; Vue.js Базовый. Инструменты управления состоянием приложения (State Management) Большие веб-приложения постоянно растут в сложности, а потому хранить данные, которые могут использоваться в разных местах становится все сложнее. Для решения этой проблемы были придуманы отдельные библиотеки, идущие параллельно с фреймворками — они служат для управления глобальным хранилищем данных всего веб-приложения и называются менеджерами состояний. Их применение уже стало стандартом во FrontEnd разработке. Для девелоперов, которые используют Vue.js, это VueX, для React-разработчиков — Redux и MobX, для Angular-девов — RxJS, NgRx. JavaScript Core (DOM, AJAX, JSON) DOM (Document Object Model) — объектное представление исходного HTML-документа. Ключевым является понятие DOM-дерева, которое описывает структуру страницы. С помощью объектной модели JavaScript получает полную власть над HTML-документом: возможность редактировать, удалять и добавлять элементы и атрибуты HTML, менять CSS код и т. д. AJAX (Asynchronous JavaScript And XML) — это синтез технологий JavaScript и XML, который фактически представляет собой комбинацию: встроенного в браузер XMLHttpRequest-объекта (чтоб запрашивать данные с веб-сервера); JavaScript и HTML DOM (чтобы отображать или использовать данные). AJAX позволяет веб-страницам совершать асинхронное обновление, обмениваясь данными с веб-сервером. Благодаря этой технологии страница не нуждается в перезагрузке — обновляется лишь конкретная ее часть (вспомните ленту новостей в социальных сетях). JSON (JavaScript Object Notation) — это общий формат обмена данными. Позволяет совершать обмен информацией между программными продуктами, написанными на разных языках. Таким образом, клиент, использующий JavaScript, может легко передавать данные на сервер, который реализован с помощью Ruby/Java/PHP. Все три технологии являют особую ценность для каждого веб-разработчика и раскрывают организацию работы интернет-приложения. БЭМ “Блок, Элемент, Модификатор” — методология, предусматривающая компонентный подход к разработке веб-страниц, в основе которого лежит принцип разделения интерфейса на независимые блоки. Подход БЭМ позволяет повторно использовать существующий код в создании других страниц с сохранением всех его свойств (размеры, шрифт, цвет и т. д.). Webpack Мощный сборщик модулей, который позволяет скомпилировать в один файл несколько разных модулей. Используется во время работы над объемными проектами. Успешно применяется как во фронтенд-разработке, так и при создании бэкенд-приложений. Gulp / Grunt Системы сборки, которые автоматизируют рутинные задачи разработчиков: минификацию кода, оптимизацию изображений, тестирование, анализ качества кода и прочее. Подходят при разработке небольших проектов. TypeScript Кроссплатформенный строго типизированный язык, который является расширением JavaScript. Строгая типизация позволяет уменьшить количество потенциальных ошибок в исходном коде, написанном на TypeScript. Также, этот язык реализует концепции, которые близки объектно-ориентированным языкам, таким как C#, Java и подобным. TypeScript повышает скорость и удобство написания сложных комплексных программ, вследствии чего их становится легче поддерживать, масштабировать и тестировать. В большинстве случаев его необходимо изучать лишь тем, кто ориентирован на работу с фреймворком Angular. SVG Язык разметки масштабируемой векторной графики. Изображения на странице, сделанные с помощью SVG, корректно отображаются на экранах с различным разрешением, не теряя при этом своего качества, в отличии от традиционных растровых .jpeg, .png и других. Английский язык Знание английского языка является одним из основных требований к фронтенд-разработчику, поскольку большое количество полезной информации находится именно на англоязычных сайтах. Уровень чтения технической документации будет достаточным для комфортного пользования иностранными ресурсами. Итоги FrontEnd разработчик — достаточно универсальный боец в мире веб-разработки. Он должен уметь и верстать, и создавать логику работы клиентской части, и понимать работу серверной части веб-приложения. Для освоения такого обширного инструментария стоит запастись временем, терпением и упорством. Перечисленные в статье средства разработки сайтов также имеют аналоги, поскольку для решения разных задач подходят разные веб-инструменты. Однако мы выбрали самые популярные и эффективные из них. Если у вас остались вопросы о последовательности и необходимости изучения тех или иных технологий, ответы вы можете найти в видео ”Как стать FrontEnd разработчиком?”, в котором подробно рассматриваются основные технологии создания клиентских веб-приложений. Для тех, кто хочет стать FrontEnd разработчиком, на ITVDN создана комплексная программа обучения, которая включает в себя 42 видео курса. Желаем вам успехов в достижении ваших целей! Оставайтесь с ITVDN!

Як стати тестувальником

Автор: Влад Сверчков

Всем привет! Вы знаете, как создаются программы и информационные сервисы, которыми все мы пользуемся? Какие специалисты нужны, чтобы появился новый Фейсбук, Вайбер, Инстаграм, новый Windows или какая-то крутая видеоигра? За разработкой программного обеспечения (ПО) стои́т целая команда профессионалов — и далеко не все из них умеют программировать. Типичная команда будет включать в себя таких специалистов, как: бизнес-аналитик — проводит анализ бизнес-проблемы, формирует требования к разрабатываемому продукту; PM (Project Manager) — управляет всеми, кто вовлечен в работу над проектом; тимлид (Team Leader) — управляет командой разработчиков; UX/UI дизайнер — создает приятный дизайн приложения (UI) с хорошим пользовательским опытом (UX); разработчики/программисты — занимаются написанием кода, являются ядром команды; QA специалист — тестирует приложение на каждом этапе его разработки для обеспечения высокого качества продукта. Если ПО не предназначено для использования только внутри компании, а нацелено на внешнюю аудиторию, то еще добавляется маркетинг-команда, которая работает с целевыми потребителями: исследует рынок, определяет клиентуру, привлекает ее внимание, подогревает интерес к продукту и многое другое. Таким образом, в IT найдется хорошая работа даже для тех, кто не любит программировать. И сегодня речь пойдет о таком специалисте, как QA. Чуть выше вы уже узнали, что это, фактически, тестировщик, следящий за качеством ПО на каждом этапе его разработки. В чём специфика данной профессии, чем занимаются эти специалисты, насколько легко стать QA инженером и какие технологии должен знать потенциальный претендент на данную должность — это мы и раскроем в нашей статье. Устраивайтесь поудобней, мы начинаем! Тестировщик, QC Engineer, QA Engineer Очень часто термин “тестировщик” применяется ко всем специалистам, которые так или иначе связаны с проверкой ПО на качество. Тем не менее, в данной сфере существует формальное разделение профессий на три ветви: Tester, QC и QA. Давайте выясним, что означает каждая из них. Тестировщик — специалист, который фокусируется на проведении непосредственных тестов над уже созданным ПО (составление тест-кейсов и баг-репортов, локализация дефектов и другое). Специалист проверяет, все ли работает согласно заявленным требованиям, производит сбор статистических данных и фиксирует их в соответствующих документах. Тестировщик внимательно пользуется разработанным ПО, воспроизводит все возможные действия пользователя, работает с приложением на различных операционных системах, в различных браузерах (если это веб-приложение), на различных мобильных платформах (если это мобильное приложение); помимо ошибок он ищет еще и уязвимости. Что-то вроде техосмотра транспортного средства. Отчеты об ошибках затем направляются разработчикам, которые ответственны за дальнейшее исправление багов. QC (Quality Control) Engineer — специалист, который обеспечивает не только соответствие разрабатываемого ПО заявленным требованиям, но и его соответствие заранее определенным критериям качества продукта в целом. Также, он ответственен за определение готовности продукта к выпуску в продакшн. Цель Quality Control специалиста — формирование объективной картины состояния качества ПО на различных этапах разработки. Можно сказать, что специальность тестировщика является подмножеством специальности QC Engineer. QA (Quality Assurance) Engineer — специалист, который обеспечивает контроль качества разрабатываемого ПО на всех этапах его планирования, проектирования и создания. Работа на этой должности является проактивной и носит превентивный характер, поскольку QA инженер уделяет внимание качеству продукта еще до того, как тот будет создан. Здесь на первый план выходят комплексы мероприятий, процессы и средства обеспечения качества ПО на каждом витке разработки. Непосредственно тестирование системы занимает уже второе место. Главное задание QA — выстроить систему так, чтобы она имела как можно меньше зон, где можно допустить ошибку, соответствовала всем показателям качества, а также была легко тестируема. Специальность QC Engineer является подмножеством специальности QA Engineer. Чтобы вас не путать, в данной статье мы приравняем понятия “тестировщик” и “QA инженер” в пользу второго. Будем расписывать стек технологий и путь становления именно QA специалиста. Таким образом мы сможем затронуть максимальное количество информации касательно направления тестирования. Направления QA Начнем с того, что в QA есть два основных направления — Manual и Automation. Специалисты каждого из них называются мануальный (ручной) тестировщик и тестировщик-автоматизатор, соответственно. Их разница в том, что первый следит за качеством продукта и проводит все тесты вручную, а второй автоматизирует тестирование путем написания скриптов. Automation QA использует определенный язык программирования и фреймворк для того, чтобы создавать программы, которые будут производить тестирование продукта вместо самого специалиста. Такой подход позволяет сократить время на тесты. В обязанности мануального QA инженера входят: анализ и выяснение требований у заказчика либо бизнес-аналитиков; планирование процесса тестирования; написание сценариев тестирования; непосредственно тестирование программного продукта; определение проблемных мест, их документирование; использование систем отслеживания багов (баг-трекинги); обсуждение исправлений с разработчиками, активное взаимодействие с ними; отслеживание жизненного цикла ошибок; повторный тест исправленных дефектов; анализ тестирования; планирование идей по оптимизации качества программного обеспечения; ведение тестовой документации; проверка требований к программному обеспечению; оценка рисков; участие в стенд-апах и других митингах. Тем временем на плечи Automation QA помимо прочего возлагаются такие обязанности, как: написание новых автотестов на основе разработанных вручную; обновление поломанных/устаревших автотестов; прогон автотестов; анализ результатов тестовых прогонов; настройка тестового окружения; ревью кода; оформление автотестовой документации. На самом деле и мануальное, и автоматизированное направление имеют много общих требований, поскольку их фундамент одинаков. Давайте начнем с рассмотрения Manual QA, а затем плавно дополним его инструментами Automation QA. Стек технологий Manual QA Engineer Общая теория по IT Если лет 15 назад в тестировщики брали чуть ли не “с улицы”, то сейчас к претендентам с каждым годом выдвигают все больше и больше требований. Так что потенциальный претендент на должность прежде всего обязан хорошо понимать IT индустрию. Итак, в этот пункт предусматривает такие темы, как: веб-технологии (HTTP, HTTPS, DOM, JSON, cookie, session), клиент-серверная архитектура; базы данных; компьютерные сети; операционные системы (обратить особое внимание на Unix); мелкие подтемы, как, например, системы счисления и т. д. Теория тестирования и тестовая документация Безусловно, любой QA инженер должен знать, с чем он вообще имеет дело. Если на заре разработки тестирование было чем-то интуитивным, то сегодня оно обрело четкие формы, обзавелось своими методиками, инструментарием и специализированным программным обеспечением. Изучив теорию тестирования, вы сможете ориентироваться в данном направлении, понимать принципы, типы и методы тестирования, тест-дизайна, этапы жизненного цикла ПО; узнаете, как правильно составлять тестовую документацию (тест кейс, баг-репорт, чек-лист и т. д.) и многое другое. Основные темы: Тестирование, основные стандарты ISTQB. SDLC и STLC. Методологии разработки ПО. Требования. Анализ и составление требований. Тестовая документация. Уровни, типы, методы и виды тестирования. Техники тестирования. Тест-дизайн Баги и баг-трекинговые системы. Системы контроля тестов. Основы программирования + HTML/CSS Основы программирования мануальному QA нужны не для того, чтобы заниматься непосредственным кодингом, а чтобы уметь читать код разработчика и понимать, что в нем происходит. Здесь важен не сам язык программирования, а банальное понимание того, как создаются программы, что такое переменные, функции, методы, классы, какие есть методологии программирования, как они реализуются и т. д. Для изучения основ отлично подойдет C# либо Java. Возможно, сюда стоило бы включить и Python, но он, пожалуй, слишком легкий для изучения и при работе с другими языками вам придется что-то доучивать. C# с Java же более фундаментальны и зная основы одного из них, вы легко сможете разбираться с кодом любых других популярных языков. Фактически, владение основами программирования необходимо для чтения чужого кода и выявления возможных багов прямо на месте. Отдельно выделяем языки верстки HTML и CSS. Если вы будете работать с веб-приложениями (а как показывает практика — проектов много — очередь и до тестирования “веба” рано или поздно дойдет), то вам будет полезно знать, из чего состоит FrontEnd часть веб-приложения. Также, вы будете работать с инструментами разработчика в браузере и там тоже надо будет взаимодействовать с HTML/CSS кодом. Правила оформления документации. Модель CMMI Если вспоминать три специальности, о которых мы говорили вначале (QA, QC и тестировщик), то этот пункт для тестировщика как такового является ненужным. Но вот для QA инженера он является неотъемлемым. В процессе проектирования ПО, слежения за его качеством необходимо производить соответствующее документирование. Чтобы делать это правильно, надо знать стандарты оформления подобных документов. Важно уделить внимание серии ISO 9000. CMM / CMMI — это набор методологий (моделей) совершенствования процессов разработки ПО. Знание CMMI позволяет QA инженеру грамотно оценивать проект и планировать необходимые процессы по обеспечению качества. SQL SQL — язык запросов, который используется для взаимодействия с данными в реляционных базах данных. Тестировщику он пригодится для того, чтобы выполнять бэкенд-тестирование для проверки тестовых данных, вставки, удаления, обновления их значений в БД. Сказать точный уровень владения SQL нелегко, поскольку все зависит от сложности проекта. На каком-то сгодится базовый уровень SQL, а где-то необходимо быть весьма и весьма подкованным. А если тестирование не связано с бэкендом, то знания языка запросов вовсе не пригодятся. В общем и целом, тестировщик должен обладать следующими знаниями и умениями при работе с БД и SQL: умение распознавать различные типы БД; способность реализовать подключение к БД, используя разные клиенты SQL-соединений; понимание таблиц БД, ключей, индексов, типов отношений между таблицами; умение создавать простые запросы; понимание и умение разбирать по полочкам сложные запросы. Веб-сервисы Веб-служба (или веб-сервис) — это идентифицируемая веб-адресом программная система со стандартизированными интерфейсами. Данный термин описывает стандартизированный способ интеграции веб-приложений с использованием различных протоколов, например: XML, TCP/IP, SOAP, WSDL и UDDI. Веб-служба представляет собой способ связи между двумя электронными устройствами по сети, такими веб-сервисами можно пользоваться независимо от компьютера, браузера или места доступа в Интернет (поиск, веб-почта, хранение документов, файлов, закладок и т. д.). К преимуществам веб-сервисов можно отнести: возможность создания необходимых кондиций для взаимосвязи программных компонентов, которые не будут зависеть от используемых платформ; веб-сервисы используют открытые стандартные протоколы; благодаря XML обеспечивается легкость в формировании и настройки веб-сервисов; использование HTTP гарантирует успешную взаимосвязь систем через межсетевой доступ. Веб-сервисы должны знать разработчики для корректной реализации ПО, а тестировщикам они нужны, чтобы понимать, как работает та или иная веб-система. Jira Система баг-трекинга, которая помогает выявлять, регистрировать и контролировать баги, найденные в разрабатываемом ПО, а также отслеживать процесс устранения этих ошибок. Является командным инструментом, что упрощает процесс взаимодействия разработчиков и тестировщиков, а также различную баг-трекинговую деятельность в принципе. Помимо прямого назначения помогает команде эффективнее работать, расставлять приоритеты и выбирать дальнейшие шаги оптимизации ПО. Postman Популярный и в то же время мощный набор инструментов для тестирования API (в среде разработчиков произносится как “а́пи”). API — это прикладной программный интерфейс; он указывает, каким образом следует обращаться к программе и какие ответы она обязана предоставлять пользователям. Postman относительно простой в использовании, имеет богатый интуитивный интерфейс. Он проверяет запросы с клиентской стороны на серверную, а также отклик со стороны бэкенда. Таким образом можно убедится, что на стороне сервера все работает, даже если фронтенд сторона еще не готова. API можно тестировать и при помощи множества других программных средств (например, JMeter), однако, на сегодняшний день именно Postman является наиболее компромиссным инструментом тестирования запросов, сочетающим в себе простоту и высокую эффективность. Git Git — это популярная система контроля версий, позволяющая вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Одним из самых известных антагонистов Git является SVN — централизованная система, в отличие от децентрализованной Git. Также, в работе вам пригодится и сервис онлайн-хостинга проектов, использующий систему контроля версий. В данном случае это GitHub. В паре с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах. Git нужен скорее для Automation QA, поскольку позволяет в удобном виде хранить код тестов с возможностью вернуться к рабочей версии тестов. Также, тестировщик сможет: иметь доступ к коду разработчиков; организовать список тестов и отслеживать его выполнение; тестировать код с разных устройств (при этом сам код лежит на удаленном репозитории Git); хранить различные настройки для приложения; выполнять другие взаимодействия. Методологии разработки Agile/Scrum Методологии разработки — это своеобразные путеводители по процессам эффективной разработки ПО. Их применение помогает организовать максимально продуктивную работу всех участников, которые напрямую или косвенно задействованы в разработке продукта в соответствии с выбранной стратегией. Agile — семейство гибких методологий разработки программного обеспечения, которое позволяет выпускать продукт небольшими частями, постоянно его дополняя и совершенствуя. При таком подходе технические и бизнес-подразделения работают совместно, ПО постоянно обновляется, обеспечивается быстрое принятие решений и выявление неправильных подходов, приложение проще обслуживать, а качество кода готового продукта более высокое. Agile имеет собственный манифест, который подробно описывает основные принципы, на которых строится гибкая разработка. Scrum является одной из популярнейших реализаций agile-подхода. Его используют многие команды, поэтому знание особенностей работы со scrum-моделью для QA инженера является не менее важным, чем для любого разработчика. Английский язык Знание английского языка — естественное требование для многих профессий в IT, поскольку большинство новых сведений о технологиях, курсы, учебные и справочные материалы появляются в первую очередь на английском. Для работы в команде обычно знаний языка на уровне чтения технической документации, комментирования кода и составления баг-репортов вполне достаточно, однако, если возникнет необходимость вести переговоры и/или переписку с иностранным заказчиком, либо же вы будете в интернациональном коллективе, ваш уровень должен быть выше (тут уже очень желательно иметь уровень не ниже Upper Intermediate). Soft Skills Так называемые “гибкие (мягкие) навыки” — это внутренние качества специалиста, которые помогают ему выполнять работу максимально качественно и без лишнего напряжения. К примеру, для следователя-криминалиста прекрасными софт скиллами будут объективность, внимательность, умение чувствовать своего собеседника, прекрасное дедуктивное мышление и неугасающее стремление докапываться до правды. Для работника на ресепшене критически важными мягкими навыками есть коммуникабельность, дисциплинированность, пунктуальность, обходительность, вежливость и другие. Какие soft skills пригодятся тестировщику? Специалисту, который следит за качеством ПО и проверяет его на прочность, следует обладать следующими навыками: внимательность, умение концентрироваться на задаче; инициативность; усидчивость; организованность, проактивность, нацеленность на результат; стрессоустойчивость; эмпатия к пользователю и вместе с тем понимание бизнес-процессов (умение “переобуваться”); адаптивность; коммуникабельность; умение работать в команде; обладание логическим, системным, упорядоченным мышлением; умение правильно осуществлять декомпозицию (по отношению к системам, задачам, проблемам и т. д.); наличие шестого чувства + немного изобретательности; стремление учиться и умение передавать свои знания другим; Пользовательский опыт (не обязательно, но очень удобно) Было бы неплохо, если б перед тестированием приложения вы уже сталкивались с чем-то подобным в обычной жизни. Если работать предстоит в сфере игростроения, то ваш огромный геймерский опыт будет как нельзя кстати. Работа с проектами из веб-индустрии? Опыт сёрфинга в интернете (соцсети, интернет-магазины, онлайн-сервисы) облегчит понимание логики пользователей, их ожиданий и точек интереса. Automation QA Автоматизированный QA технически является надмножеством позиции Manual QA — он должен знать все то же самое, что и мануальный коллега плюс несколько новых инструментов. Эти инструменты мы сейчас и перечислим. Язык программирования Если в разделе о Manual QA мы говорили об основах программирования, то автоматизатору понадобится именно уверенное владение конкретным языком. Обычно выбирают среди Java и Python, но это не предел. В тестировании можно применять и такие языки, как JavaScript, C#, Ruby, PHP, SmashTest и другие. При помощи выбранного языка вы будете писать автотесты, которые будут выполнять тестирование за человека. Программа работает — тестировщик анализирует результаты. Это упрощает работу, повышает скорость проведения тестов и снимает часть задач с человека. Фреймворк для тестирования Для создания автотестов зачастую используется специальные программное обеспечение — фреймворки. Одним из популярнейших считается Selenium. Он мультиплатформен, ориентирован на работу с веб-приложениями и поддерживает множество популярных языков программирования. Более того, Selenium является основной технологией для множества других инструментов автоматизации браузеров, API и фреймворков. Инструменты нагрузочного тестирования Данный пункт является необязательным, но при этом очень желателен. Нагрузочное тестирование — это вид тестирования, при котором производится тест производительности целевого ПО при различных нагрузках от действий определенного количества пользователей. Наиболее известными инструментами проведения нагрузочного тестирования являются Gatling и JMeter. Как стать тестировщиком? Превращаем список приведенных выше технологий в туториал. Начинаем с пути Manual QA. Вы можете учиться самостоятельно — по книгам или видео курсам, а можете записаться на курсы тестирования для максимально эффективного обучения. В любом случае вначале вам нужно очень хорошо изучить теорию тестирования и базовые темы в IT: веб-технологии, API, клиент-серверная архитектура, базы данных, компьютерные сети, операционные системы (обратить особое внимание на Unix), мелкие подтемы, как, например, системы счисления и т. д. Конкретные темы по тестированию мы расписали в одном из первых наших разделов. Затем вам следует освоить написание тестовой документации (для чистого тестировщика), а QA понадобится еще и знание стандартов по обеспечению качественного ПО (ISO 9000) для дополнительного документирования, модель CMMI. Чтобы беспроблемно читать код разработчиков и понимать, что в нем происходит, следует владеть основами программирования. Для этого лучше выбрать либо Java, либо C# — документация по данным языкам очень информативна, есть большое комьюнити. Более того, множество программ обучения по данным языкам располагает прекрасным бэкграундом (история программирования, как работают вычислительные системы и как они обрабатывают информацию), который закладывает прочный фундамент программирования. Также, стоит освоить языки верстки HTML и CSS — они очень простые и используются в абсолютно всех веб-приложениях Для работы с обеспечением, которое использует базы данных, необходимо изучить основы SQL. Далее приступаем к изучению веб-сервисов, а после — к популярной баг-трекинговой системе Jira и мощному набору инструментов для тестирования API — Postman. Создание программного продукта обычно ведется в команде, потому знание методологии командной разработки является не менее важным, чем предыдущие технологии. Уделите время изучению принципов Agile/Scrum — с их помощью эффективно разрабатывается современное программное обеспечение. Методология гибкой разработки очень важна для тестировщика, поскольку он участвует в производственном цикле так же, как и разработчики. Также, не забудьте подтянуть ваш английский как минимум до уровня Intermediate. Он нужен для комфортного поиска нужной информации в интернете, чтения технической документации, работы с иностранными коллегами, а также — для возможного взаимодействия с заказчиком. Все же английский в IT еще никому не мешал и более того — давал новые карьерные возможности. Чтобы ваша работа приносила вам удовольствие и вы себя не заставляли работать, вам следует обладать следующими софт скиллами: внимательность, умение концентрироваться на задаче; инициативность; усидчивость; организованность, проактивность, нацеленность на результат; стрессоустойчивость; эмпатия к пользователю и вместе с тем понимание бизнес-процессов (умение “переобуваться”); коммуникабельность; другие качества, которые мы указали в соответствующем разделе. С этими навыками и знаниями вы сможете приступать к практике. Изучите Git, начните работать каким-либо проектом: покройте его тестами, напишите тест-документацию. Опубликуйте наработки на GitHub — это даст вам ценный опыт работы с распределенной системой управления версиями и позволит проверить свои навыки в решении реальной задачи. Несколько хороших проектов, и полноценное портфолио готово, а с ним вы можете уверенно подавать резюме на вакансию мануального QA инженера. Если вас интересует автоматизированное тестирование, дополнительно изучите Python, либо Java + фреймворк для тестирования (Selenium, PyTest, Robot Framework или другой). Это позволит вам создавать скрипты, которые будут автоматически выполнять тестирование, избавляя вас от лишней рутины. Очень желательно иметь опыт работы с инструментами нагрузочного тестирования. Это может быть JMeter, Gatling или любой другой популярный аналог. Такой опыт даст вам дополнительный вес в глазах работодателя, что сыграет вам на руку, поскольку конкуренция за место тестировщика весьма высока. Очень желательно, чтобы у вас был наставник, который мог бы следить за вашим прогрессом, отвечать на возникающие вопросы, давать полезные советы и направлять в нужное русло. Итоги В данной статье мы постарались сделать максимальный охват темы тестирования. Была рассмотрена не только специальность тестировщик, но и два её надмножества — QC и QA. Сейчас линии разграничения между этими тремя профессиями по большому счёту стёрты и прослеживаются лишь в серьезных компаниях. В более мелких же тестировщик может запросто выполнять функции QA. Тем не менее, в нашей статье высветлены те технологии и области знаний, которые подойдут как тестировщику, так и QA инженеру. Также, мы рассмотрели ответвления Manual QA и Automation QA. Как выяснилось, без знания мануального тестирования вам не стать автоматизированным тестером. Ведь как можно писать автотесты, если ты в принципе не понимаешь, что, где и как исследовать на предмет багов? Несмотря на высокую конкуренцию за место тестировщика, количество вакансий остается одним из самых больших на рынке труда в IT. Посмотрите популярные ресурсы по трудоустройству в IT и вы сами в этом убедитесь. Поэтому нами и были указаны некоторые необязательные технологии — мы хотим вооружить наших читателей максимально красноречивым стеком, дабы вы были на голову выше конкурентов. Приведенный в статье стек технологий является прочной основой QA специалиста — как мануального, так и автоматизированного. Если этот материал не дал вам в полной мере ответ на вопрос “как стать тестировщиком и что следует для этого учить?”, делимся с вами ссылкой на вебинар одного из авторов ITVDN — действующего QA Engineer Андрея Шевцова. Если вас интересует данное направление и вы хотите стать QA инженером, предлагаем вашему вниманию подборку курсов и вебинаров ITVDN, которые вы найдете на странице специальности Quality Assurance. Желаем успехов в изучении IT технологий! Оставайтесь с ITVDN!

250+ питань з Java для Junior, Middle, Senior

Автор: Влад Сверчков

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 1 февраля 2021 года. Оригинальная версия на украинском языке доступна по ссылке Редакция DOU.ua обратилась к СТО и опытным специалистам, которые проводят интервью по направлению Java, о том, какие теоретические вопросы задают и какие задачи и задания предлагают решить кандидатам. Ведь, готовясь к техническому собеседованию, важно иметь четкий план. На основе полученных ответов составлена эта подборка вопросов с градацией по уровню специалиста. Надеемся, этот список вопросов станет своеобразным путеводителем, который поможет получить желаемую должность. Junior Общие 1. Какие знаете шаблоны проектирования? Расскажите о двух шаблонах, которые использовали в работе. Java Core 2. Какие есть типы данных в Java? 3. Чем отличается объект от примитивных типов данных? 4. В чем разница передачи параметров по ссылке и по значению? 5. Что такое JVM, JDK, JRE? 6. Зачем используют JVM? 7. Что такое bytecode? 8. Какие признаки JavaBean? 9. Что такое OutOfMemoryError? 10. Что такое стектрейс? Как его получить? 11. Назовите все методы класса object. 12. В чем отличие между try-with-resources и try-catch-finally при работе с ресурсами? 13. Что такое конструкторы? Какие типы знаете? 14. Что такое побитовые операции? 15. Объекты каких стандартных классов immutable в Java? 16. Дайте краткую характеристику immutable object. Зачем они нужны? 17. Как создать immutable object? 18. Какие преимущества immutable object перед обычными объектами? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Стартовый (урок 1, урок 2, урок 5), Java Базовый (урок 1, урок 2, урок 8, урок 9). ООП 19. Что такое ООП? Назовите принципы с примерами. 20. В чем преимущества ООП перед процедурным программированием? 21. В чем заключается главная особенность ООП? 22. Расскажите, какие преимущества мы получаем при использовании ООП? 23. Расскажите, какие есть недостатки в ООП? 24. Расскажите о принципе наследования в ООП? Зачем он нужен? 25. Дайте определение принципа полиморфизма в ООП? Как работает полиморфизм? 26. Что такое статический и динамический полиморфизм? 27. Дайте определение принципа абстракции в ООП. 28. Какие элементы языка отвечают за инкапсуляцию? 29. Какие элементы языка отвечают за наследование? 30. Какие элементы языка отвечают за полиморфизм? 31. Что такое SOLID? Приведите примеры. 32. Что такое перегрузки (overloading) метода? 33. Что такое переопределение (override) метода? 34. Что такое класс, объект, интерфейс? 35. Что такое класс POJO? Приведите пример такого класса. 36. Какие элементы могут содержать класс? 37. Дайте определение объекта. 38. Расскажите о наследовании в Java. Какие особенности использования ключевого слова super? 39. Что такое сигнатура метода? Приведите примеры правильных и неправильных сигнатур. 40. Можно ли в конструкторе применять return? 41. Можно ли в конструкторе выкинуть исключение (exception)? 42. Из каких элементов состоит заголовок класса? Напишите пример. 43. Из каких элементов состоит заголовок метода? Напишите пример. 44. Создайте в объекте-наследнике конструктор по умолчанию, если в базовом классе он не определен (но определен другой конструктор). 45. Когда применяется ключевое слово this? 46. Что такое инициализатор? 47. Для наследования класса public class Child extends Parent напишите порядок инициализации объекта. 48. Какие знаете отношения между классами (объектами)? 49. Какие ассоциативные связи между объектами вы знаете? 50. Что такое модификаторы доступа в Java? Назовите их. Для чего используются? 51. Назовите основную особенность статических переменных и методов. 52. Какие основные ограничения действуют на статические переменные и методы? 53. Что означает ключевое слово static? Может ли статический метод быть переопределенным или перегруженным? 54. Может ли метод быть статическим и абстрактным одновременно? 55. Можно ли использовать статические методы внутри обычных? Наоборот? Почему? 56. Что означает ключевое слово final? 57. Что такое abstract? Абстрактный класс? Абстрактный метод? 58. Что такое interface? Может ли быть final interface? 59. В чем разница между абстрактным классом и интерфейсом в Java? 60. Где можно инициализировать статические поля? 61. Что такое анонимные классы? 62. Что такое примитивные классы? 63. Что такое класс «обертка» (wrapper)? 64. Что такое Nested class? Когда используется? 65. Какие модификаторы доступа могут быть у класса? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Java Базовый (урок 1-4, урок 6, урок 7, урок 9), SOLID принципы в Java. Библиотеки и стандарты 67. Что такое Hibernate? В чем разница между JPA i Hibernate? 68. Что такое каскадность? Как она используется в Hibernate? 69. Может ли entity-класс быть абстрактным классом? 70. Что такое entity manager? За что отвечает? 71. Что такое класс Assert? Зачем и как его использовать? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JDBC & Hibernate. String 72. Дайте характеристику String в Java. 73. Какие есть способы создания объекта String? Где он создается? 74. Как сравнить две строки в Java и/или отсортировать их? 75. Предложите алгоритм преобразования строки в знак. Напишите соответствующий код. 76. Как превратить строку в массив байтов и обратно? Напишите соответствующий код. 77. Что такое строковый пул и зачем он нужен? 78. Какие GOF-шаблоны применяются в строковом пуле? 79. Как разделить строку на части? Напишите соответствующий код. 80. Почему массив символов лучше, чем строка для хранения пароля? 81. Какая разница между String, StringBuffer и StringBuilder? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 5). Enum 82. Дайте краткую характеристику Enum в Java. 83. Может ли Enum реализовывать (implement) интерфейс? 84. Может ли Enum расширить (extends) класс? 85. Можно ли создать Enum без экземпляров объектов? 86. Можем ли мы переопределить метод toString() для Enum? 87. Что будет, если не будем переопределять метод toString() для Enum? 88. Можем ли мы указать конструктор внутри Enum? 89. В чем разница между == и equals()? 90. Что делает метод ordinal() в Enum? 91. Можно ли использовать Enum с TreeSet или TreeMap в Java? 92. Как связаны методы ordinal() и compareTo() в Enum? 93. Напишите пример Enum. 94. Можно ли использовать Enum в switch case? 95. Как получить все имеющиеся значения в экземпляре Enum? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Java Базовый (урок 7), Java Углублённый (Урок 3). Stream API 96. Что такое Stream в Java? 97. Назовите основные свойства транзакций. 98. Какие есть уровни изоляции транзакций? 99. Какая разница между Statement и PreparedStatement? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 15). Collections 100. Расскажите об итераторах и об их применении. 101. Какая иерархия коллекций в Java Collection Framework? 102. Какое внутреннее строение ArrayList? 103. Какое внутреннее строение LinkedList? 104. Какое внутреннее строение HashMap? 105. Чем отличается ArrayList от LinkedList? 106. Чем отличается ArrayList от HashSet? 107. Зачем в Java такое многообразие имплементации динамического массива? 108. Зачем в Java такое многообразие имплементации key-value storage? 109. Как отсортировать коллекцию элементов? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый (урок 5), Java Углублённый (урок 3, урок 15). Class Object. Equals and HashCode 110. Дайте краткую характеристику class object в Java. 111. Для чего используют Equals and HashCode в Java? 112. Расскажите о контракте между Equals and HashCode в Java? 113. Какие условия выдвигаются касательно переопределения соглашения при переопределении Equals? 114. Что будет, если не переопределить Equals and HashCode? 115. Какие значения мы получим, если у нас не перераспределены Equals and HashCode? 116. Почему симметричность выполняется, только если x.equals(y) возвращает true? 117. Что такое коллизия в HashCode? Как с ней бороться? 118. Что будет, если элемент, участвующий в контракте с HashCode, меняет свое значение? 119. Напишите методы Equals and HashCode для класса Student, который состоит из полей String name и int age. 120. В чем разница применения if (obj instanceof Student) и if (getClass() == obj.getClass())? 121. Дайте краткую характеристику метода clone(). 122. В чем заключается особенность работы метода clone() с полями объекта типа-ссылки? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый (урок 9). Exceptions 123. Дайте определение понятию exception (исключительная ситуация). 124. Какие знаете особенности использования оператора try . catch? 125. В чем разница между error и exception? 126. Какая разница между checked и unchecked, exception, throw, throws. 127. Какой есть иерархия исключений? 128. Что такое checked и unchecked exception? 129. Нужно ли проверять checked exception? 130. О чем говорит и как использовать ключевое слово throws? 131. Какие возможные способы обработки исключений вы знаете? 132. Напишите пример перехвата и обработки исключения в блоке try-catch метода. 133. Напишите пример перехвата и обработки исключения в секции throws-метода и передачи вызывающему методу. 134. Напишите пример перехвата и обработки исключения с использованием собственных исключений. 135. Какие есть правила для проверки исключений при наследовании? 136. Могли бы ли вы написать код, если блок finally не будет выполнен? 137. Напишите пример обработки нескольких исключений в одном блоке catch. 138. Какой оператор позволяет принудительно выбросить исключение? Напишите пример. 139. Может ли метод main выбросить throws-исключение? Если да — куда передаст? 140. Напишите пример try with resources. Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый (урок 8). Многопоточность 141. Какие средства для работы с многопоточностью знаете? 142. Что такое процесс и поток? Чем отличается процесс от потока? 143. Расскажите о синхронизации между потоками. Для чего используют методы wait(), notify() — notifyAll(), join()? 144. Как остановить поток? 145. Как между потоками обмениваться данными? 146. В чем заключается отличие класса Thread от интерфейса Runnable? 147. Есть потоки Т1, Т2 и Т3. Как реализовать их последовательное выполнение? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 13, урок 14). Практические задания 148. Matrix Diagonal Sum (задача с Leetcode). 149. Move Zeroes (задача с Leetcode). 150. Дан List names. Удалите первую букву из каждого имени и верните отсортированный список. 151. Перевернуть массив. 152. Проверить, является ли строка палиндромом. 153. Написать простой алгоритм сортировки (Bubble, Selection или Shuttle). Как его можно улучшить? 154. Напишите алгоритм (последовательность действий) составления литерала типа int и литералов типа byte. Объясните, что происходит с памятью. Middle Общие 1. В чем преимущества и недостатки ООП, если сравнивать с процедурным/функциональным программированием? 2. Чем отличается агрегация от композиции? 3. Какие паттерны GoF вы использовали на практике? Приведите примеры. 4. Что такое прокси-объект? Приведите примеры. 5. Какие нововведения анонсировано в Java 8? 6. Что такое High Cohesion и Low Coupling? Приведите примеры. Лучше всего тема шаблонов в Java раскрыта в видео курсе Паттерны проектирования в Java. ООП 7. Каким образом можно реализовать множественное наследование в Java? 8. Какая разница между методами final, finally и finalize()? Java Core 9. В чем разница между статическим и динамическим связыванием в Java? 10. Можно ли использовать private или protected переменные в interface? 11. Что такое Classloader и для чего используется? 12. Что такое Run-Time Data Areas? 13. Что такое immutable object? 14. В чем особенность класса String? 15. Что такое ковариантность типов? 16. Какие есть методы в классе Object? 17. Приведите примеры удачного и неудачного использования Optional. 18. Можно ли объявлять main method как final? 19. Можно ли импортировать те же самые package/class дважды? Какие последствия? 20. Что такое Casting? Когда можем получить исключение ClassCastException? 21. Почему современные фреймворки используют в основном только unchecked exceptions? 22. Что такое static import? 23. Какая связь между методами hashCode() и equals()? 24. Когда используют BufferedInputStream и BufferedOutputStream классы? 25. Какая разница между классами java.util.Collection и java.util.Collections? 26. Какая разница между Enumeration и Iterator? 27. В чем разница между итераторами fail-fast и fail-safe? 28. Зачем нужен модификатор transient? 29. Как влияют на сериализацию модификаторы static и final? 30. Какие особенности использования интерфейса Cloneable? 31. Какие особенности использования интерфейса AutoCloseable? 32. Что такое FunctionInterface и чем он отличается от обычного интерфейса? 33. Что такое Atomic types и зачем они нужны? 34. Что такое Happens-before? Какие особенности использования ключевого слова volatile? 35. Расскажите о Heap и Stack память в Java. В чем разница между ними? Где хранятся примитивы? 36. Чем отличается stack от heap памяти? Когда и какая область памяти резервируется? Зачем такое разделение нужно? 37. Какие принципы работы и области памяти Garbage Collector? 38. Как работает Garbage Collector? Расскажите о Reference counting и Tracing. 39. Расскажите о механизме работы autoboxing в Java. 40. Как реализована сериализация в Java? Где мы можем ее увидеть? 41. Расскажите, в чем разница между WeakReference и SoftReference? 42. Что такое generics? Для чего они нужны? Какую проблему решают? 43. Что такое PECS и как используется? Приведите примеры. 44. Зачем на практике могут понадобиться immutable объекты? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый и Java Углублённый. Библиотеки и инструменты 45. Чем полезны инструменты Maven, Ant, Gradle? 46. Что такое Unit Tests? Чем класс JUnit.Assert отличается от ключевого слова assert? 47. Что такое и зачем нужен Spring core? Раскройте понятие Inversion of Control и Dependency Injection. 48. Как «под капотом» работает @Transactional? 49. Как «под капотом» работает Spring? 50. Что такое и зачем нужен Hibernate? Раскройте понятие ORM. 51. Что такое и когда возникает LazyLoadingException? 52. Как «под капотом» работает Hibernate? Как бы вы написали собственный Hibernate? Ответы на некоторые из этих вопросов вы можете найти в видео курсах JDBC & Hibernate, Unit тестирование в Java с JUnit, Spring, Spring MVC. Многопоточность 53. Какие преимущества и недостатки использования многопоточности? 54. Расскажите о четырех способах работы со многими потоками и чем отличается wait . notify . notifyAll от synchronized? От Future? 55. Что такое и зачем нужен ThreadLocal? 56. В чем разница между Thread.sleep() и Thread.yield()? 57. Как работает Thread.join()? 58. Что такое deadlock? 59. Что такое race condition? 60. Для чего использовать volatile, synchronized, transient, native? 61. Расскажите о приоритетах потоков. 62. Что такое потоки-демоны и для чего их устанавливать? 63. Почему нежелательно использовать Thread.stop()? 64. Как реализовать пул потоков? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 13, урок 14). Collections 65. Чем отличается List от Set? 66. В чем разница между HashSet, LinkedHashSet и TreeSet? 67. Какая внутренняя структура HashMap? 68. Какое время поиска элемента в ArrayList, HashSet? 69. Как реализовать свой Stack? 70. Как работает метод put в HashMap? Почему нам нужно высчитывать позицию бакета? В чем преимущества такой операции? 71. В чем разница между HashMap и TreeMap? Когда и где их нужно использовать? 72. Какое внутреннее строение TreeMap? Рассказать об RBT. Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 1, урок 2, урок 3). Stream API 73. Какие есть методы в интерфейсе Stream? 74. Чем отличается метод map от flatMap? 75. Какой функциональный интерфейс использует метод filter? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 15). Базы данных 76. В чем разница между реляционными и нереляционными базами данных? 77. Как хранятся соотношения one-to-one, one-to-many и many-to-many в виде таблиц? 78. Что такое нормализация БД? Приведите примеры из реального проекта. 79. Какие есть виды индексов в БД? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый. Практические задания 80. Valid parentheses (задача с LeetCode). 81. Reverse Linked List (задача с LeetCode). 82. Дано String s, найти длину максимального substring без повтора символов. 83. Определить, является ли односвязный LinkedList палиндромом. Senior Общие 1. Когда лучше использовать наследование, а не агрегацию? 2. Расскажите о принципах работы Kubernetes. Java Core 3. В чем разница между Java NIO и Java IO? 4. Чем отличается Lambda от анонимного класса? 5. Расскажите о Java Memory Model. 6. Какие есть типы памяти в JVM? 7. Опишите жизненный цикл Java-объекта. Каким образом объект переходит из одной области памяти Garbage Collector в другую? Что является триггером такого перехода? 8. Каким образом можно заставить JVM запустить Garbage Collector? 9. Какие существуют Garbage Collectors в JVM и зачем их столько? 10. Какие виды Garbage Collector есть в HotSpot? Как работают? 11. Что будет с Garbage Collector, если finalize() будет долго выполняться или в процессе выполнения получим исключение? 12. Чем ForkJoinPool отличается от ScheduledThreadPoolExecutor и ThreadPoolExecutor? 13. Какая разница между HashMap, WeakHashMap, Hashtable, IdentityHashMap? 14. Что такое LinkedHashMap? 15. Что такое EnumSet? Для чего использовать? Как реализовать? 16. Расскажите об особенностях сериализации в Java. Зачем serialVersionUID и InvalidClassException? 17. В чем проблема сериализации Singleton? 18. Какие бывают алгоритмы обхода деревьев и почему они разные? 19. Что такое deadlock? Какие типы существуют? Нарисуйте схематично, как может произойти. Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый и Java Углублённый. Базы данных 20. Что такое ACID? 21. Что означает CAP-теорема? 22. Какие есть уровни изоляции транзакций? 23. Есть ли смысл отказываться от использования ORM? 24. Что такое n+1 проблема? 25. Что такое cartesian product проблема? Библиотеки и инструменты 26. Каким образом построить monitoring в Java? Расскажите об особенностях использования Java micrometrics или DropWizard, или Prometheus frameworks. 27. Опишите механизм работы ORM. 28. Какие способы выборки данных в Hibernate вы знаете? 29. Какие изоляции транзакций существуют в Hibernate? Spring 30. Что такое IoC и DI? 31. Каков жизненный цикл объектов, которые создает Spring? 32. Какие есть виды контекстов? 33. Как создать и поднять контекст с целью тестирования приложения? 34. Какие возможности Spring предоставляет для коммуникации с базой данных? 35. Какие признаки того, что класс — Java Bean? Чем POJO отличается от Java Bean? 36. Опишите механизм инъекции зависимости в Spring. 37. Почему все зависимости Spring являются Java Beans? Возможно ли использовать Spring для управления зависимостями между не Java Beans классами? 38. Чем Spring singleton отличается от prototype? 39. Есть ли смысл отказываться от использования Dependency Injection? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Spring, Spring MVC. Многопоточность 40. Что такое race-condition? 41. Какие элементы есть в java.util.concurrent пакете? 42. Что такое optimistic и pessimistic locking? 43. Какие особенности многопоточности в Java EE и Spring? Stream API 44. Какие основные принципы Stream API? Практические задания 45. Реализовать сервис, который на вход принимает url и возвращает короткую версию (вроде bit.ly/86gfr3). Редакция DOU.ua благодарит за помощь в подготовке статьи Александра Редька, Антона Наумова, Богдана Чупика, Максима Ляшенко, Александра Навка, Сергея Маленко, Андрея Петрика, Сергея Громового, Дениса Душина, Ивана Чуба. Смотрите также статьи с вопросами на собеседовании по Python, .NET и JavaScript.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *