#вопросы_с_собеседований
Какие подклассы класса InputStream вы знаете, для чего они предназначены?
•
•
•
•
•
•
•
•
•
•
•
Какие подклассы класса InputStream вы знаете, для чего они предназначены?
•
InputStream
- абстрактный класс, описывающий поток ввода;•
BufferedInputStream
- буферизованный входной поток;•
ByteArrayInputStream
позволяет использовать буфер в памяти (массив байтов) в качестве источника данных для входного потока;•
DataInputStream
- входной поток для байтовых данных, включающий методы для чтения стандартных типов данных Java
;•
FileInputStream
- входной поток для чтения информации из файла;•
FilterInputStream
- абстрактный класс, предоставляющий интерфейс для классов-надстроек, которые добавляют к существующим потокам полезные свойства;•
ObjectInputStream
- входной поток для объектов;•
StringBufferInputStream
превращает строку (String
) во входной поток данных InputStream
;•
PipedInputStream
реализует понятие входного канала;•
PushbackInputStream
- разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток, позволяет «заглянуть» во входной поток и увидеть, что оттуда поступит в следующий момент, не извлекая информации.•
SequenceInputStream
используется для слияния двух или более потоков InputStream
в единый.#вопросы_с_собеседований
Для чего используется PushbackInputStream?
Разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток. Класс
У класса есть дополнительный метод
Для чего используется PushbackInputStream?
Разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток. Класс
PushbackInputStream
представляет механизм «заглянуть» во входной поток и увидеть, что оттуда поступит в следующий момент, не извлекая информации.У класса есть дополнительный метод
unread()
.#вопросы_с_собеседований
Что вы понимаете под Dependency Injection (DI)?
Внедрение зависимости (Dependency injection, DI) — процесс предоставления внешней зависимости программному компоненту. Является специфичной формой «инверсии управления» ( Inversion of control, IoC), когда она применяется к управлению зависимостями. В полном соответствии с принципом единой обязанности объект отдаёт заботу о построении требуемых ему зависимостей внешнему, специально предназначенному для этого общему механизму. К достоинствам применения DI можно отнести:
• Сокращение объема связующего кода. Одним из самых больших плюсов DI является возможность значительного сокращения объема кода, который должен быть написан для связывания вместе различных компонентов приложения. Зачастую этот код очень прост — при создании зависимости должен создаваться новый экземпляр соответствующего объекта.
• Упрощенная конфигурация приложения. За счет применения DI процесс конфигурирования приложения значительно упрощается. Для конфигурирования классов, которые могут быть внедрены в другие классы, можно использовать аннотации или XML-файлы.
• Возможность управления общими зависимостями в единственном репозитории. При традиционном подходе к управлению зависимостями в общих службах, к которым относятся, например, подключение к источнику данных, транзакция, удаленные службы и т.п., вы создаете экземпляры (или получаете их из определенных фабричных классов) зависимостей там, где они нужны — внутри зависимого класса. Это приводит к распространению зависимостей по множеству классов в приложении, что может затруднить их изменение. В случае использования DI вся информация об общих зависимостях содержится в единственном репозитории (в Spring есть возможность хранить эту информацию в XML-файлах или Java классах), что существенно упрощает управление зависимостями и снижает количество возможных ошибок.
• Улучшенная возможность тестирования. Когда классы проектируются для DI, становится возможной простая замена зависимостей. Это особенно полезно при тестировании приложения.
• Стимулирование качественных проектных решений для приложений. Вообще говоря, проектирование для DI означает проектирование с использованием интерфейсов. Используя Spring, вы получаете в свое распоряжение целый ряд средств DI и можете сосредоточиться на построении логики приложения, а не на поддерживающей DI платформе.
Что вы понимаете под Dependency Injection (DI)?
Внедрение зависимости (Dependency injection, DI) — процесс предоставления внешней зависимости программному компоненту. Является специфичной формой «инверсии управления» ( Inversion of control, IoC), когда она применяется к управлению зависимостями. В полном соответствии с принципом единой обязанности объект отдаёт заботу о построении требуемых ему зависимостей внешнему, специально предназначенному для этого общему механизму. К достоинствам применения DI можно отнести:
• Сокращение объема связующего кода. Одним из самых больших плюсов DI является возможность значительного сокращения объема кода, который должен быть написан для связывания вместе различных компонентов приложения. Зачастую этот код очень прост — при создании зависимости должен создаваться новый экземпляр соответствующего объекта.
• Упрощенная конфигурация приложения. За счет применения DI процесс конфигурирования приложения значительно упрощается. Для конфигурирования классов, которые могут быть внедрены в другие классы, можно использовать аннотации или XML-файлы.
• Возможность управления общими зависимостями в единственном репозитории. При традиционном подходе к управлению зависимостями в общих службах, к которым относятся, например, подключение к источнику данных, транзакция, удаленные службы и т.п., вы создаете экземпляры (или получаете их из определенных фабричных классов) зависимостей там, где они нужны — внутри зависимого класса. Это приводит к распространению зависимостей по множеству классов в приложении, что может затруднить их изменение. В случае использования DI вся информация об общих зависимостях содержится в единственном репозитории (в Spring есть возможность хранить эту информацию в XML-файлах или Java классах), что существенно упрощает управление зависимостями и снижает количество возможных ошибок.
• Улучшенная возможность тестирования. Когда классы проектируются для DI, становится возможной простая замена зависимостей. Это особенно полезно при тестировании приложения.
• Стимулирование качественных проектных решений для приложений. Вообще говоря, проектирование для DI означает проектирование с использованием интерфейсов. Используя Spring, вы получаете в свое распоряжение целый ряд средств DI и можете сосредоточиться на построении логики приложения, а не на поддерживающей DI платформе.
#вопросы_с_собеседований
Что вы понимаете под аспектно-ориентированным программированием (Aspect Oriented Programming — AOP)?
Аспектно-ориентированное программирование (АОП) — это одна из “моделей программирования текущего момента” в мире
Что вы понимаете под аспектно-ориентированным программированием (Aspect Oriented Programming — AOP)?
Аспектно-ориентированное программирование (АОП) — это одна из “моделей программирования текущего момента” в мире
Java
. АОП предоставляет возможность реализации сквозной логики — т.е. логики, которая применяется к множеству частей приложения — в одном месте и обеспечения автоматического применения этой логики по всему приложению. Подход Spring
к АОП заключается в создании “динамических прокси” для целевых объектов и “привязывании” объектов к конфигурированному совету для выполнения сквозной логики.#вопросы_с_собеседований
Какие подклассы класса Reader вы знаете, для чего они предназначены?
•
•
•
•
•
•
•
•
•
•
Какие подклассы класса Reader вы знаете, для чего они предназначены?
•
Reader
- абстрактный класс, описывающий символьный ввод;•
BufferedReader
- буферизованный входной символьный поток;•
CharArrayReader
- входной поток, который читает из символьного массива;•
FileReader
- входной поток, читающий файл;•
FilterReader
- абстрактный класс, предоставляющий интерфейс для классов-надстроек;•
InputStreamReader
- входной поток, транслирующий байты в символы;•
LineNumberReader
- входной поток, подсчитывающий строки;•
PipedReader
- входной канал;•
PushbackReader
- входной поток, позволяющий возвращать символы обратно в поток;•
StringReader
- входной поток, читающий из строки.Хочешь освоить азы главного языка «энтерпрайза», Java, всего за 14 дней?
Школа программирования Хекслет объявляет набор на подготовительный курс: https://clck.ru/rpdjp
Даём только мясную и прикладную информацию. По окончанию курса ты уже владеешь базовым знанием языка и даже напишешь собственную программу!
Прямо сейчас переходите по ссылке ниже и бронируйте место, стартуем завтра, 5 июля!
Школа программирования Хекслет объявляет набор на подготовительный курс: https://clck.ru/rpdjp
Даём только мясную и прикладную информацию. По окончанию курса ты уже владеешь базовым знанием языка и даже напишешь собственную программу!
Прямо сейчас переходите по ссылке ниже и бронируйте место, стартуем завтра, 5 июля!
Какие подклассы класса Writer вы знаете, для чего они предназначены?
• Writer - абстрактный класс, описывающий символьный вывод;
• BufferedWriter - буферизованный выходной символьный поток;
• CharArrayWriter - выходной поток, который пишет в символьный массив;
• FileWriter - выходной поток, пишущий в файл;
• FilterWriter - абстрактный класс, предоставляющий интерфейс для классов-надстроек;
• OutputStreamWriter - выходной поток, транслирующий байты в символы;
• PipedWriter - выходной канал;
• PrintWriter - выходной поток символов, включающий методы print() и println();
• StringWriter - выходной поток, пишущий в строку;
• Writer - абстрактный класс, описывающий символьный вывод;
• BufferedWriter - буферизованный выходной символьный поток;
• CharArrayWriter - выходной поток, который пишет в символьный массив;
• FileWriter - выходной поток, пишущий в файл;
• FilterWriter - абстрактный класс, предоставляющий интерфейс для классов-надстроек;
• OutputStreamWriter - выходной поток, транслирующий байты в символы;
• PipedWriter - выходной канал;
• PrintWriter - выходной поток символов, включающий методы print() и println();
• StringWriter - выходной поток, пишущий в строку;
#вопросы_с_собеседований
В чем отличие класса PrintWriter от PrintStream?
Прежде всего, в классе
Кроме того, методы класса
В чем отличие класса PrintWriter от PrintStream?
Прежде всего, в классе
PrintWriter
применен усовершенствованный способ работы с символами Unicode
и другой механизм буферизации вывода: в классе PrintStream
буфер вывода сбрасывался всякий раз, когда вызывался метод print()
или println()
, а при использовании класса PrintWriter
существует возможность отказаться от автоматического сброса буферов, выполняя его явным образом при помощи метода flush()
.Кроме того, методы класса
PrintWriter
никогда не создают исключений. Для проверки ошибок необходимо явно вызвать метод checkError()
.#вопросы_с_собеседований
Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
•
•
Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
•
OutputStreamWriter
— «мост» между классом OutputStream
и классом Writer
. Символы, записанные в поток, преобразовываются в байты.•
InputStreamReader
— аналог для чтения. При помощи методов класса Reader
читаются байты из потока InputStream
и далее преобразуются в символы.Какие классы позволяют ускорить чтение/запись за счет использования буфера?
•
•
•
•
BufferedInputStream(InputStream in)
/ BufferedInputStream(InputStream in, int size)
,•
BufferedOutputStream(OutputStream out)
/BufferedOutputStream(OutputStream out, int size)
,•
BufferedReader(Reader r)
/BufferedReader(Reader in, int sz),
• BufferedWriter(Writer out)
/BufferedWriter(Writer out, int sz)
#вопросы_с_собеседований
Какой класс предназначен для работы с элементами файловой системы?
Какой класс предназначен для работы с элементами файловой системы?
File
работает непосредственно с файлами и каталогами. Данный класс позволяет создавать новые элементы и получать информацию существующих: размер, права доступа, время и дату создания, путь к родительскому каталогу.AssertJ как способ значительно улучшить код ваших тестов
В 2019-2020 годах на одном из проектов я был идейным вдохновителем перехода на JUnit 5. Для проверок мы использовали стандартные ассерты и Hamcrest. Тогда мне казалось, что этого более чем достаточно.
За последние пару лет, несмотря на менеджерскую позицию, я написал свыше пятисот тестов, и мой подход к тестированию претерпел значительные изменения. В этой статье я постараюсь объяснить, почему AssertJ — это лучшее решение для проверок в тестах, существующее сегодня (год 2022 от Р.X.). Разумеется, всё ниже сказанное — это моё субъективное мнение.
Читать статью
В 2019-2020 годах на одном из проектов я был идейным вдохновителем перехода на JUnit 5. Для проверок мы использовали стандартные ассерты и Hamcrest. Тогда мне казалось, что этого более чем достаточно.
За последние пару лет, несмотря на менеджерскую позицию, я написал свыше пятисот тестов, и мой подход к тестированию претерпел значительные изменения. В этой статье я постараюсь объяснить, почему AssertJ — это лучшее решение для проверок в тестах, существующее сегодня (год 2022 от Р.X.). Разумеется, всё ниже сказанное — это моё субъективное мнение.
Читать статью
Telegraph
AssertJ как способ значительно улучшить код ваших тестов
Привет! В 2019-2020 годах на одном из проектов я был идейным вдохновителем перехода на JUnit 5. Для проверок мы использовали стандартные ассерты и Hamcrest. Тогда мне казалось, что этого более чем достаточно. Один из наших lead-инженеров предлагал AssertJ как…
#вопросы_с_собеседований
Какие методы класса File вы знаете?
Наиболее используемые методы класса File:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Какие методы класса File вы знаете?
Наиболее используемые методы класса File:
•
boolean createNewFile()
: делает попытку создать новый файл;•
boolean delete()
: делает попытку удалить каталог или файл;•
boolean mkdir()
: делает попытку создать новый каталог;•
boolean renameTo(File dest)
: делает попытку переименовать файл или каталог;•
boolean exists()
: проверяет, существует ли файл или каталог;•
String getAbsolutePath()
: возвращает абсолютный путь для пути, переданного в конструктор объекта;•
String getName()
: возвращает краткое имя файла или каталога;•
String getParent()
: возвращает имя родительского каталога;•
boolean isDirectory()
: возвращает значение true
, если по указанному пути располагается каталог;•
boolean isFile()
: возвращает значение true
, если по указанному пути находится файл;•
boolean isHidden()
: возвращает значение true
, если каталог или файл являются скрытыми;•
long length()
: возвращает размер файла в байтах;•
long lastModified()
: возвращает время последнего изменения файла или каталога;•
String[] list()
: возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге;•
File[] listFiles()
: возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге.🔥 Бесплатная Live coding сессия, где будем решать задачу с собеседования в международную FinTech компанию
В прямом эфире Роман Оборин, Senior Java Developer в BNP Paribas и преподаватель курса Middle Java Dev, проведет Live coding сессию по написанию объектно-ориентированного кода на Java, покрытого разными типами тестов: Unit, Integration, Stress.
На Live сoding ты сможешь понаблюдать, как пишет код Senior-разработчик, прокомментировать процесс и решить реальную задачу, которую дают на собеседованиях. Ну и конечно, прокачаешь свои hard skills:
— Структурируешь знания по принципам SOLID
— Прокачаешь знания по разным видам тестирования, в том числе многопоточных программ
— Подготовишься к техническому интервью с этапом Live coding
🚀 Стартуем 14 июля в 19:00 по мск
Регистрируйся бесплатно: https://cutt.ly/aLl5hVI
В прямом эфире Роман Оборин, Senior Java Developer в BNP Paribas и преподаватель курса Middle Java Dev, проведет Live coding сессию по написанию объектно-ориентированного кода на Java, покрытого разными типами тестов: Unit, Integration, Stress.
На Live сoding ты сможешь понаблюдать, как пишет код Senior-разработчик, прокомментировать процесс и решить реальную задачу, которую дают на собеседованиях. Ну и конечно, прокачаешь свои hard skills:
— Структурируешь знания по принципам SOLID
— Прокачаешь знания по разным видам тестирования, в том числе многопоточных программ
— Подготовишься к техническому интервью с этапом Live coding
🚀 Стартуем 14 июля в 19:00 по мск
Регистрируйся бесплатно: https://cutt.ly/aLl5hVI
Сравнение виртуальных и обычных потоков в Java
Мы все знаем и ждем Project Loom для виртуальных потоков и надеемся на бесплатное ускорение своих приложений без или почти без изменения их кода.
Примеры с запуском миллиона потоков все уже видели и они скучные. А какое ускорение будет на самом деле в реальных примерах использования многопоточности в нормально написанном проекте?
Читать статью
Мы все знаем и ждем Project Loom для виртуальных потоков и надеемся на бесплатное ускорение своих приложений без или почти без изменения их кода.
Примеры с запуском миллиона потоков все уже видели и они скучные. А какое ускорение будет на самом деле в реальных примерах использования многопоточности в нормально написанном проекте?
Читать статью
Telegraph
Сравнение виртуальных и обычных потоков в Java
Я люблю стректрейсы и понятный линейный код. И соответственно не люблю реактивщину. Все примеры будут нереактивными с последовательным понятным кодом. Примеры запускались на доступной сегодня jdk. openjdk version "19-loom" 2022-09-20 OpenJDK Runtime Environment…
Делаем микросервисы на Java 😎
Пишете Java-приложения? У вас есть два пути:
🔹 Делать монолитную архитектуру и разрабатывать ПО как единое целое
🔹 Разбить большое приложение на микросервисы и наладить между ними связь
И у второго пути масса преимуществ!
✅ Легче ловить сбои и приводить приложение в порядок
✅ Отдельные компоненты можно масштабировать, при этом не придётся переписывать всю систему
✅ Разные микросервисы — разные технологии разработки
✅ Можно обновлять приложение по отдельным частям
✅ Разработка микросервиса легче, чем монолита
Интересно? Тогда записывайтесь на наш курс по микросервисам на Java.
Вы научитесь:
🔸 Делать микросервисы на Java и Kotlin
🔸 Работать с инструментами для разработки микросервисов
🔸 Использовать популярный Java-фреймворк Spring Boot
Знания прямо по ходу курса можно использовать в работе.
Купите место на курсе по сниженной цене — всего 20 000 рублей. Повышаем цены уже 15 июля.
Старт курса 20 августа, программа и запись на нашем сайте: https://slurm.club/3awhAKa
Пишете Java-приложения? У вас есть два пути:
🔹 Делать монолитную архитектуру и разрабатывать ПО как единое целое
🔹 Разбить большое приложение на микросервисы и наладить между ними связь
И у второго пути масса преимуществ!
✅ Легче ловить сбои и приводить приложение в порядок
✅ Отдельные компоненты можно масштабировать, при этом не придётся переписывать всю систему
✅ Разные микросервисы — разные технологии разработки
✅ Можно обновлять приложение по отдельным частям
✅ Разработка микросервиса легче, чем монолита
Интересно? Тогда записывайтесь на наш курс по микросервисам на Java.
Вы научитесь:
🔸 Делать микросервисы на Java и Kotlin
🔸 Работать с инструментами для разработки микросервисов
🔸 Использовать популярный Java-фреймворк Spring Boot
Знания прямо по ходу курса можно использовать в работе.
Купите место на курсе по сниженной цене — всего 20 000 рублей. Повышаем цены уже 15 июля.
Старт курса 20 августа, программа и запись на нашем сайте: https://slurm.club/3awhAKa
#вопросы_с_собеседований
Как выбрать все элементы определенного каталога по критерию (например, с определенным расширением)?
Метод
Как выбрать все элементы определенного каталога по критерию (например, с определенным расширением)?
Метод
File.listFiles
возвращает массив объектов File
, содержащихся в каталоге. Метод может принимать в качестве параметра объект класса, реализующего FileFilter
. Это позволяет включить в список только те элементы, для которых метод accept
возвращает true
(критерием может быть длина имени файла или его расширение).Это приглашение на «быстрое свидание» с работой мечты в команде Сбера.
One Day Offer — самый короткий путь до оффера. Пройти собеседование и получить ответ в тот же день можно 16 и 17 июля по двум вакансиям: Data Engineer в ИТ-команду «Комплаенс» и Java Developer в ИТ-подразделение «Сеть продаж».
Как это работает?
Шаг 1. 16 июля или 17 июля (в зависимости от вакансии) подключитесь к онлайн-интервью.
Шаг 2. Получите предложение о работе, о которой мечтали, в тот же день.
Шаг 3. А дальше — вместе со своей командой разрабатывайте крутые и важные продукты Сбера.
Прочитать подробнее о вакансиях и отправить заявку на участие в One Day Offer можно здесь.
One Day Offer — самый короткий путь до оффера. Пройти собеседование и получить ответ в тот же день можно 16 и 17 июля по двум вакансиям: Data Engineer в ИТ-команду «Комплаенс» и Java Developer в ИТ-подразделение «Сеть продаж».
Как это работает?
Шаг 1. 16 июля или 17 июля (в зависимости от вакансии) подключитесь к онлайн-интервью.
Шаг 2. Получите предложение о работе, о которой мечтали, в тот же день.
Шаг 3. А дальше — вместе со своей командой разрабатывайте крутые и важные продукты Сбера.
Прочитать подробнее о вакансиях и отправить заявку на участие в One Day Offer можно здесь.
developers.sber.ru
Нам нужны Java Developer и Data Engineer | Мероприятия Цифровой витрины
Нам нужны Java Developer и Data Engineer. Возможность стать частью команды Сбера за один день .
Рефлексия (Reflection) — это механизм получения данных о программе во время её выполнения (runtime). В Java Reflection осуществляется с помощью Java Reflection API, состоящего из классов пакетов java.lang и java.lang.reflect.
Возможности Java Reflection API:
✔️Определение класса объекта;
✔️Получение информации о модификаторах класса, полях, методах, конструкторах и суперклассах;
✔️Определение интерфейсов, реализуемых классом;
✔️Создание экземпляра класса;
✔️Получение и установка значений полей объекта;
✔️Вызов методов объекта;
✔️Создание нового массива.
Возможности Java Reflection API:
✔️Определение класса объекта;
✔️Получение информации о модификаторах класса, полях, методах, конструкторах и суперклассах;
✔️Определение интерфейсов, реализуемых классом;
✔️Создание экземпляра класса;
✔️Получение и установка значений полей объекта;
✔️Вызов методов объекта;
✔️Создание нового массива.
#вопросы_с_собеседований
Существует ли возможность перенаправить потоки стандартного ввода/вывода?
Класс System позволяет вам перенаправлять стандартный ввод, вывод и поток вывода ошибок, используя простой вызов статического метода:
•
•
•
Существует ли возможность перенаправить потоки стандартного ввода/вывода?
Класс System позволяет вам перенаправлять стандартный ввод, вывод и поток вывода ошибок, используя простой вызов статического метода:
•
setIn(InputStream)
- для ввода;•
setOut(PrintStream)
- для вывода;•
setErr(PrintStream)
- для вывода ошибок.