#вопросы_с_собеседований
Что такое пул строк?
Что такое пул строк?
Пул строк – это набор строк, хранящийся в Heap.
☕️ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;
☕️ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;
☕️ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;
☕️ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением;
☕️ Пул строк является примером паттерна «Приспособленец» (Flyweight).
☕️ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;
☕️ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;
☕️ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;
☕️ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением;
☕️ Пул строк является примером паттерна «Приспособленец» (Flyweight).
Перечислите основные агрегатные функции.
Агрегатные функции
- функции, которые берут группы значений и сводят их к одиночному значению.SQL
предоставляет несколько агрегатных функций:COUNT
- производит подсчет записей, удовлетворяющих условию запроса; SUM
- вычисляет арифметическую сумму всех значений колонки; AVG
- вычисляет среднее арифметическое всех значений; MAX
- определяет наибольшее из всех выбранных значений; MIN
- определяет наименьшее из всех выбранных значений.Advanced hiring: попадите в команду Luxoft за несколько дней
У Luxoft крутые новости − попасть в команду теперь можно гораздо быстрее. В компании хорошо понимают, что время – это важный ресурс, поэтому упростили процесс найма. Уже сейчас вы можете получить job offer всего за несколько дней после успешного прохождения технического интервью.
Advanced hiring даёт возможность выбрать проект после принятия оффера. В зависимости от ваших компетенций, опыта и интересов мы подберем для вас оптимальное решение и лучшую команду.
Узнать об открытых вакансиях можно по ссылке.
Еще больше новостей в телеграм-канале Luxoft.
У Luxoft крутые новости − попасть в команду теперь можно гораздо быстрее. В компании хорошо понимают, что время – это важный ресурс, поэтому упростили процесс найма. Уже сейчас вы можете получить job offer всего за несколько дней после успешного прохождения технического интервью.
Advanced hiring даёт возможность выбрать проект после принятия оффера. В зависимости от ваших компетенций, опыта и интересов мы подберем для вас оптимальное решение и лучшую команду.
Узнать об открытых вакансиях можно по ссылке.
Еще больше новостей в телеграм-канале Luxoft.
#вопросы_с_собеседований
Что такое autoboxing («автоупаковка») в Java и каковы правила упаковки примитивных типов в классы-обертки?
Что такое autoboxing («автоупаковка») в Java и каковы правила упаковки примитивных типов в классы-обертки?
Автоупаковка - это механизм неявной инициализации объектов классов-оберток (
☕️ Автоупаковка происходит при прямом присваивании примитива классу-обертке (с помощью оператора =), либо при передаче примитива в параметры метода (типа класса-обертки).
☕️ Автоупаковке в классы-обертки могут быть подвергнуты как переменные примитивных типов, так и константы времени компиляции (литералы и final-примитивы). При этом литералы должны быть синтаксически корректными для инициализации переменной исходного примитивного типа.
☕️ Автоупаковка переменных примитивных типов требует точного соответствия типа исходного примитива типу класса-обертки. Например, попытка упаковать переменную типа byte в Short без предварительного явного приведения byte в short вызовет ошибку компиляции.
☕️ Автоупаковка констант примитивных типов допускает более широкие границы соответствия. В этом случае компилятор способен предварительно осуществлять неявное расширение/сужение типа примитивов:
☕️ неявное расширение/сужение исходного типа примитива до типа примитива, соответствующего классу-обертке (для преобразования int в Byte, сначала компилятор самостоятельно неявно сужает int к byte);
☕️ автоупаковку примитива в соответствующий класс-обертку. Однако в этом случае существуют два дополнительных ограничения: a) присвоение примитива обертке может производится только оператором = (нельзя передать такой примитив в параметры метода без явного приведения типов) b) тип левого операнда не должен быть старше чем Character, тип правого не должен старше, чем int: допустимо расширение/сужение byte в/из short, byte в/из char, short в/из char и только сужение byte из int, short из int, char из int. Все остальные варианты требуют явного приведения типов).
Дополнительной особенностью целочисленных классов-оберток, созданных автоупаковкой констант в диапазоне -128 ... +127 является то, что они кэшируются JVM. Поэтому такие обертки с одинаковыми значениями будут являться ссылками на один объект.
Byte, Short, Integer, Long, Float, Double, Character, Boolean
), значениями соответствующих им исходных примитивных типов (byte, short, int...
), без явного использования конструктора класса.☕️ Автоупаковка происходит при прямом присваивании примитива классу-обертке (с помощью оператора =), либо при передаче примитива в параметры метода (типа класса-обертки).
☕️ Автоупаковке в классы-обертки могут быть подвергнуты как переменные примитивных типов, так и константы времени компиляции (литералы и final-примитивы). При этом литералы должны быть синтаксически корректными для инициализации переменной исходного примитивного типа.
☕️ Автоупаковка переменных примитивных типов требует точного соответствия типа исходного примитива типу класса-обертки. Например, попытка упаковать переменную типа byte в Short без предварительного явного приведения byte в short вызовет ошибку компиляции.
☕️ Автоупаковка констант примитивных типов допускает более широкие границы соответствия. В этом случае компилятор способен предварительно осуществлять неявное расширение/сужение типа примитивов:
☕️ неявное расширение/сужение исходного типа примитива до типа примитива, соответствующего классу-обертке (для преобразования int в Byte, сначала компилятор самостоятельно неявно сужает int к byte);
☕️ автоупаковку примитива в соответствующий класс-обертку. Однако в этом случае существуют два дополнительных ограничения: a) присвоение примитива обертке может производится только оператором = (нельзя передать такой примитив в параметры метода без явного приведения типов) b) тип левого операнда не должен быть старше чем Character, тип правого не должен старше, чем int: допустимо расширение/сужение byte в/из short, byte в/из char, short в/из char и только сужение byte из int, short из int, char из int. Все остальные варианты требуют явного приведения типов).
Дополнительной особенностью целочисленных классов-оберток, созданных автоупаковкой констант в диапазоне -128 ... +127 является то, что они кэшируются JVM. Поэтому такие обертки с одинаковыми значениями будут являться ссылками на один объект.
Forwarded from Java jobs — вакансии для java-разработчиков
#вакансия #удаленка #java
Локация: Удаленка или Томск.
Опыт: от 2-х лет.
Технический стек: Java 8, HTML, CSS, Git.
Требования:
- экспертное владение Java 8
- опыт использования Spring Framework, Hibernate ORM, JDBC, JMS, JMX
- опыт проведения модульного тестирования (JUnit и TestNg)
- опыт работы с инструментами Git, Jenkins, Sonar, Maven, Gradle, Nexus, Jira или аналоги, Confluence или аналоги
- опыт работы с сервером приложений WildFly (JBoss)
- понимание работы SQL и NoSQL хранилищ: PostgreSQL, Cassandra, Apache Ignite
- опыт использования стэка технологий Hadoop, Apache Kafka
Заработная плата: от 150 000 до 250 000 рублей на руки.
Условия:
Корпоративная техника при работе из офиса.
Проект: SUPL Group — разработчик ПО для различных сфер, разрабатывает образовательную платформу, платформу для работы аккредитационных лабораторий, маркетплейс ПО, маркетплейс курсов обучения и тд
Разработчик необходим для работы над:
B2C маркетплейс образовательных курсов (планируемая аудитория — 100 тыс. пользователей).
B2C маркетплейс программного обеспечения (планируемая аудитория — 20 тыс. пользователей).
B2B проект для аккредитационных лабораторий (планируемая аудитория — 10 тыс. пользователей).
Задачи:
- Развивать образовательную экосистему.
- Добавлять новые и развивать уже имеющиеся функции.
У нас большие планы, рост и развитие, будет много тестирования и исследования.
Команда: Product Manager, Team Lead, Frontend Dev, Backend Dev, Designer.
Контакты: @v_pokrovskiy
Локация: Удаленка или Томск.
Опыт: от 2-х лет.
Технический стек: Java 8, HTML, CSS, Git.
Требования:
- экспертное владение Java 8
- опыт использования Spring Framework, Hibernate ORM, JDBC, JMS, JMX
- опыт проведения модульного тестирования (JUnit и TestNg)
- опыт работы с инструментами Git, Jenkins, Sonar, Maven, Gradle, Nexus, Jira или аналоги, Confluence или аналоги
- опыт работы с сервером приложений WildFly (JBoss)
- понимание работы SQL и NoSQL хранилищ: PostgreSQL, Cassandra, Apache Ignite
- опыт использования стэка технологий Hadoop, Apache Kafka
Заработная плата: от 150 000 до 250 000 рублей на руки.
Условия:
Корпоративная техника при работе из офиса.
Проект: SUPL Group — разработчик ПО для различных сфер, разрабатывает образовательную платформу, платформу для работы аккредитационных лабораторий, маркетплейс ПО, маркетплейс курсов обучения и тд
Разработчик необходим для работы над:
B2C маркетплейс образовательных курсов (планируемая аудитория — 100 тыс. пользователей).
B2C маркетплейс программного обеспечения (планируемая аудитория — 20 тыс. пользователей).
B2B проект для аккредитационных лабораторий (планируемая аудитория — 10 тыс. пользователей).
Задачи:
- Развивать образовательную экосистему.
- Добавлять новые и развивать уже имеющиеся функции.
У нас большие планы, рост и развитие, будет много тестирования и исследования.
Команда: Product Manager, Team Lead, Frontend Dev, Backend Dev, Designer.
Контакты: @v_pokrovskiy
#вопросы_с_собеседований
Что делает оператор EXISTS в SQL?
Что делает оператор EXISTS в SQL?
EXISTS
берет подзапрос, как аргумент, и оценивает его как TRUE
, если подзапрос возвращает какие-либо записи и FALSE
, если нет.#вопросы_с_собеседований
В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?
В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?
Building Java Programs: A Back to Basics Approach (2019)
Автор: Stuart Reges, Marty Stepp
Количество страниц: 1232
Книга познакомит вас с основами Java. Она рассчитана на тех, кто прошел начальный курс подготовки в области компьютерных наук и хочет далее развиваться в сфере Java. В пятом издании книги были добавлены некоторые разделы, включая несколько проектов, примеров кода и упражнений.
Скачать книгу
Автор: Stuart Reges, Marty Stepp
Количество страниц: 1232
Книга познакомит вас с основами Java. Она рассчитана на тех, кто прошел начальный курс подготовки в области компьютерных наук и хочет далее развиваться в сфере Java. В пятом издании книги были добавлены некоторые разделы, включая несколько проектов, примеров кода и упражнений.
Скачать книгу
Telegram
Книги для программистов (reserved)
Building Java Programs: A Back to Basics Approach (2019)
Автор: Stuart Reges, Marty Stepp
Автор: Stuart Reges, Marty Stepp
Библиотека джависта | Java, Spring, Maven, Hibernate
#вопросы_с_собеседований В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?
☕️ Cтек – участок памяти, тесно связанный с потоками. У каждого потока есть свой стек, которые хранит локальные переменные, параметры методов и стек вызовов. Переменная, хранящаяся в стеке одного потока, не видна для другого.
☕️ Куча – общий участок памяти, который делится между всеми потоками. Объекты, неважно локальные или любого другого уровня, создаются в куче. Для улучшения производительности поток обычно кэширует значения из кучи в свой стек, в этом случае для того, чтобы указать потоку, что переменную следует читать из кучи, используется ключевое слово volatile.
☕️ Куча – общий участок памяти, который делится между всеми потоками. Объекты, неважно локальные или любого другого уровня, создаются в куче. Для улучшения производительности поток обычно кэширует значения из кучи в свой стек, в этом случае для того, чтобы указать потоку, что переменную следует читать из кучи, используется ключевое слово volatile.
Зачем нужны SOLID принципы? Что нужно сделать с множеством сущностей, чтобы код удовлетворял DIP?
💻Об этом расскажет в четверг, 20 января в 19.00 МСК Евгений Тюменцев, профессионально занимающийся разработкой многопоточных кросс-платформенных приложений на С++, Директор компании по разработке программного обеспечения «Hello World! Technologies».
Евгений ответит на все вопросы, а также всем участникам будет доступна запись вебинара и презентация спикера.
Зарегистрироваться бесплатно.
💻Об этом расскажет в четверг, 20 января в 19.00 МСК Евгений Тюменцев, профессионально занимающийся разработкой многопоточных кросс-платформенных приложений на С++, Директор компании по разработке программного обеспечения «Hello World! Technologies».
Евгений ответит на все вопросы, а также всем участникам будет доступна запись вебинара и презентация спикера.
Зарегистрироваться бесплатно.
#вопросы_с_собеседований
Напишите потокобезопасную реализацию класса с неблокирующим методом BigInteger next(), который возвращает элементы последовательности: [1, 2, 4, 8, 16, ...].
Напишите потокобезопасную реализацию класса с неблокирующим методом BigInteger next(), который возвращает элементы последовательности: [1, 2, 4, 8, 16, ...].
class PowerOfTwo {
private AtomicReference<BigInteger> current = new AtomicReference<>(null);
BigInteger next() {
BigInteger recent, next;
do {
recent = current.get();
next = (recent == null) ? BigInteger.valueOf(1) : recent.shiftLeft(1);
} while (!current.compareAndSet(recent, next));
return next;
}
}
#вопросы_с_собеседований
Что такое статическое и динамическое связывание?
Что такое статическое и динамическое связывание?
Присоединение вызова метода к телу метода называется связыванием. Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (early binding).
В свою очередь, позднее связывание (late binding) это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic) или связыванием на стадии выполнения (runtime binding). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.
Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).
В свою очередь, позднее связывание (late binding) это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic) или связыванием на стадии выполнения (runtime binding). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.
Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).
#вопросы_с_собеседований
Что такое JDBC?
Что такое JDBC?
JDBC
, Java DataBase Connectivity
(соединение с базами данных на Java
) — промышленный стандарт взаимодействия Java-приложений
с различными СУБД
. Реализован в виде пакета java.sql
, входящего в состав Java SE
.JDBC
основан на концепции драйверов, которые позволяют получать соединение с базой данных по специально описанному URL
. При загрузке драйвер регистрирует себя в системе и в дальнейшем автоматически вызывается, когда программа требует URL
, содержащий протокол, за который этот драйвер отвечает.Простой рабочий алгоритм использования SOLID на практике
Зачем нужны SOLID принципы? Что нужно сделать с множеством сущностей, чтобы код удовлетворял DIP?
🚀Расскажет завтра Евгений Тюменцев, профессионально занимающийся разработкой многопоточных кросс-платформенных приложений на С++, Директор компании по разработке программного обеспечения «Hello World! Technologies».
🚀Всем участникам будет доступна запись вебинара и презентация спикера. Главное, чтобы вы были зарегистрированы на сайте.
Зачем нужны SOLID принципы? Что нужно сделать с множеством сущностей, чтобы код удовлетворял DIP?
🚀Расскажет завтра Евгений Тюменцев, профессионально занимающийся разработкой многопоточных кросс-платформенных приложений на С++, Директор компании по разработке программного обеспечения «Hello World! Technologies».
🚀Всем участникам будет доступна запись вебинара и презентация спикера. Главное, чтобы вы были зарегистрированы на сайте.
Может ли имя класса не совпадать с именем файла?
Компилятор требует, чтобы в .java файле был не больше чем один публичный класс верхнего уровня, и чтобы его название совпадало с названием файла. Все специальные символы также должны быть в имени файла.
Protected и private классов верхнего уровня не бывает в принципе, а вот на package-protected это ограничение не распространяется. Это значит, что класс без модификатора доступа может иметь любое имя. Также это значит, что рядом с основным публичным классом файла (или вместо него) можно объявить любое количество других классов без модификатора доступа, с произвольными именами. Они будут доступны внутри всего пакета.
Так что ответ – может.
Компилятор требует, чтобы в .java файле был не больше чем один публичный класс верхнего уровня, и чтобы его название совпадало с названием файла. Все специальные символы также должны быть в имени файла.
Protected и private классов верхнего уровня не бывает в принципе, а вот на package-protected это ограничение не распространяется. Это значит, что класс без модификатора доступа может иметь любое имя. Также это значит, что рядом с основным публичным классом файла (или вместо него) можно объявить любое количество других классов без модификатора доступа, с произвольными именами. Они будут доступны внутри всего пакета.
Так что ответ – может.
«Библиотека программиста» находится в поиске переводчика технических статей и автора оригинальных статей.
Обязанности:
– Письменный перевод с английского на русский язык технических статей (Medium, Dev.to и т. д.)
– Написание оригинальных статей.
Объем:
– от 3 до 10 тыс. знаков с пробелами.
Тематика:
– Мобильная разработка, информационная безопасность, Data Science, бэкенд веб-приложений, фронтенд-разработка, системное программирование, базы данных.
Языки:
– Python, SQL, JavaScript, C#, Java.
Пишите на [email protected]
Обязанности:
– Письменный перевод с английского на русский язык технических статей (Medium, Dev.to и т. д.)
– Написание оригинальных статей.
Объем:
– от 3 до 10 тыс. знаков с пробелами.
Тематика:
– Мобильная разработка, информационная безопасность, Data Science, бэкенд веб-приложений, фронтенд-разработка, системное программирование, базы данных.
Языки:
– Python, SQL, JavaScript, C#, Java.
Пишите на [email protected]
Java Programming (2018)
Автор: Joyce Farrell
Количество страниц: 870
Даже если вы начинающий программист, книга поможет вам быстро приступить к разработке полезных программ, при этом овладев основными принципами структурного и объектно-ориентированного программирования. Книга содержит уникальные, понятные для читателя объяснения и содержательные упражнения по программированию. Дополнительные цифровые учебные ресурсы в MindTap предоставляют интерактивные инструменты обучения, а также IDE (среда разработки) для отработки и развития ваших навыков.
Скачать книгу
Автор: Joyce Farrell
Количество страниц: 870
Даже если вы начинающий программист, книга поможет вам быстро приступить к разработке полезных программ, при этом овладев основными принципами структурного и объектно-ориентированного программирования. Книга содержит уникальные, понятные для читателя объяснения и содержательные упражнения по программированию. Дополнительные цифровые учебные ресурсы в MindTap предоставляют интерактивные инструменты обучения, а также IDE (среда разработки) для отработки и развития ваших навыков.
Скачать книгу
Telegram
Книги для программистов (reserved)
Java Programming (2018)
Автор: Joyce Farrell
Автор: Joyce Farrell