#вопросы_с_собеседований
Что вы знаете о OutOfMemoryError?
Что вы знаете о OutOfMemoryError?
OutOfMemoryError выбрасывается, когда виртуальная машина Java не может создать (разместить) объект из-за нехватки памяти, а сборщик мусора не может высвободить достаточное её количество.
Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места:
☕️ java.lang.OutOfMemoryError: Java heap space: Не хватает места в куче, а именно, в области памяти в которую помещаются объекты, создаваемые в приложении программно. Обычно проблема кроется в утечке памяти. Размер задается параметрами -Xms и -Xmx.
☕️ java.lang.OutOfMemoryError: PermGen space: (до версии Java 8) Данная ошибка возникает при нехватке места в Permanent области, размер которой задается параметрами -XX:PermSize и -XX:MaxPermSize.
☕️ java.lang.OutOfMemoryError: GC overhead limit exceeded: Данная ошибка может возникнуть как при переполнении первой, так и второй областей. Связана она с тем, что памяти осталось мало и сборщик мусора постоянно работает, пытаясь высвободить немного места. Данную ошибку можно отключить с помощью параметра -XX:-UseGCOverheadLimit.
☕️ java.lang.OutOfMemoryError: unable to create new native thread: Выбрасывается, когда нет возможности создавать новые потоки.
Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места:
☕️ java.lang.OutOfMemoryError: Java heap space: Не хватает места в куче, а именно, в области памяти в которую помещаются объекты, создаваемые в приложении программно. Обычно проблема кроется в утечке памяти. Размер задается параметрами -Xms и -Xmx.
☕️ java.lang.OutOfMemoryError: PermGen space: (до версии Java 8) Данная ошибка возникает при нехватке места в Permanent области, размер которой задается параметрами -XX:PermSize и -XX:MaxPermSize.
☕️ java.lang.OutOfMemoryError: GC overhead limit exceeded: Данная ошибка может возникнуть как при переполнении первой, так и второй областей. Связана она с тем, что памяти осталось мало и сборщик мусора постоянно работает, пытаясь высвободить немного места. Данную ошибку можно отключить с помощью параметра -XX:-UseGCOverheadLimit.
☕️ java.lang.OutOfMemoryError: unable to create new native thread: Выбрасывается, когда нет возможности создавать новые потоки.
#вопросы_с_собеседований
Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресации и на основе метода цепочек. Как реализована HashMap? Почему, по вашему мнению, была выбрана именно эта реализация? В чем плюсы и минусы каждого подхода?
Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресации и на основе метода цепочек. Как реализована HashMap? Почему, по вашему мнению, была выбрана именно эта реализация? В чем плюсы и минусы каждого подхода?
Привет, меня зовут Артём, я являюсь CEO IT-издания Библиотека программиста, и сейчас ищу редактора. Нам нужен грамотный специалист, не понаслышке знакомый с информационными технологиями.
Предстоит:
— писать, редактировать и оформлять новые публикации на сайте Библиотеки программиста (статьи и тесты-викторины)
— редактировать старые публикации по замечаниям читателей
— взаимодействовать с авторами, разработчиками и другими членами команды
— предлагать темы, формировать контент-план и ТЗ для публикаций
писать и редактировать тексты под рекламные кампании
— реагировать на комментарии читателей
Как мы вас себе представляем:
— владеете терминологией, принятой в сообществе IT-разработчиков
— умеете выполнять задания в сжатые сроки
— готовы постоянно поддерживать контакт, оперативно отвечать на возникающие вопросы
— знакомы с HTML, чтобы корректно править старые публикации
— любите объяснять сложные вещи понятным читателю языком, знакомы с инфостилем
— стремитесь увлечь читателя, но не в ущерб фактам
— готовы ежедневно выпускать не менее 1 материала (своего или авторского)
У нас уже есть:
— аудитория (в том числе 350 тыс. VK, свыше 150 тыс. Telegram)
— база публикаций, тестов, обсуждений
— редакционная политика (не придется писать с нуля)
— инструменты оформления и публикации материалов, в том числе планирования
— метрики анализа популярности материалов
— система push-уведомлений
— несколько регулярно пишущих авторов, контент-менеджеры, занимающиеся публикациями в соцсетях, рекламный отдел, команда разработчиков
Если вы подходите:
— зарплатная вилка от 50 до 70 тысяч рублей в месяц
— будем регулярно оплачивать труд 📅 дважды в месяц
— поможем освоиться в команде и работе с инструментами сайта
Чтобы откликнуться, вы можете прислать портфолио из релевантных публикации на ящик [email protected] или выполнить тестовое задание и прислать результат на тот же email.
Предстоит:
— писать, редактировать и оформлять новые публикации на сайте Библиотеки программиста (статьи и тесты-викторины)
— редактировать старые публикации по замечаниям читателей
— взаимодействовать с авторами, разработчиками и другими членами команды
— предлагать темы, формировать контент-план и ТЗ для публикаций
писать и редактировать тексты под рекламные кампании
— реагировать на комментарии читателей
Как мы вас себе представляем:
— владеете терминологией, принятой в сообществе IT-разработчиков
— умеете выполнять задания в сжатые сроки
— готовы постоянно поддерживать контакт, оперативно отвечать на возникающие вопросы
— знакомы с HTML, чтобы корректно править старые публикации
— любите объяснять сложные вещи понятным читателю языком, знакомы с инфостилем
— стремитесь увлечь читателя, но не в ущерб фактам
— готовы ежедневно выпускать не менее 1 материала (своего или авторского)
У нас уже есть:
— аудитория (в том числе 350 тыс. VK, свыше 150 тыс. Telegram)
— база публикаций, тестов, обсуждений
— редакционная политика (не придется писать с нуля)
— инструменты оформления и публикации материалов, в том числе планирования
— метрики анализа популярности материалов
— система push-уведомлений
— несколько регулярно пишущих авторов, контент-менеджеры, занимающиеся публикациями в соцсетях, рекламный отдел, команда разработчиков
Если вы подходите:
— зарплатная вилка от 50 до 70 тысяч рублей в месяц
— будем регулярно оплачивать труд 📅 дважды в месяц
— поможем освоиться в команде и работе с инструментами сайта
Чтобы откликнуться, вы можете прислать портфолио из релевантных публикации на ящик [email protected] или выполнить тестовое задание и прислать результат на тот же email.
Библиотека программиста
Материалы, которые научат и помогут программировать. Книги и лекции, видеоуроки и советы, тесты знаний и обсуждение горячих тем. Присоединяйтесь!
HashMap реализован с использованием метода цепочек, т.е. каждой ячейке массива (корзине) соответствует свой связный список и при возникновении коллизии осуществляется добавление нового элемента в этот список.
Для метода цепочек коэффициент заполнения может быть больше 1 и с увеличением числа элементов производительность убывает линейно. Такие таблицы удобно использовать, если заранее неизвестно количество хранимых элементов, либо их может быть достаточно много, что приводит к большим значениям коэффициента заполнения.
Среди методов открытой реализации различают:
☕️ линейное пробирование;
☕️ квадратичное пробирование;
☕️ двойное хэширование.
Недостатки структур с методом открытой адресации:
☕️ количество элементов в хэш-таблице не может превышать размера массива. По мере увеличения числа элементов и повышения коэффициента заполнения производительность структуры резко падает, поэтому необходимо проводить перехэширование.
☕️ сложно организовать удаление элемента.
☕️ первые два метода открытой адресации приводят к проблеме первичной и вторичной группировок.
Преимущества хэш-таблицы с открытой адресацией:
☕️ отсутствие затрат на создание и хранение объектов списка;
☕️ простота организации сериализации/десериализации объекта.
Для метода цепочек коэффициент заполнения может быть больше 1 и с увеличением числа элементов производительность убывает линейно. Такие таблицы удобно использовать, если заранее неизвестно количество хранимых элементов, либо их может быть достаточно много, что приводит к большим значениям коэффициента заполнения.
Среди методов открытой реализации различают:
☕️ линейное пробирование;
☕️ квадратичное пробирование;
☕️ двойное хэширование.
Недостатки структур с методом открытой адресации:
☕️ количество элементов в хэш-таблице не может превышать размера массива. По мере увеличения числа элементов и повышения коэффициента заполнения производительность структуры резко падает, поэтому необходимо проводить перехэширование.
☕️ сложно организовать удаление элемента.
☕️ первые два метода открытой адресации приводят к проблеме первичной и вторичной группировок.
Преимущества хэш-таблицы с открытой адресацией:
☕️ отсутствие затрат на создание и хранение объектов списка;
☕️ простота организации сериализации/десериализации объекта.
Forwarded from Java jobs — вакансии для java-разработчиков
#вакансия #java #middle #удаленка
Требуется Backend java разработчик (не ниже middle) на постоянную работу.
Основная задача разработка бэкэнда приложений на java с нуля, доработка текущих проектов.
Работа удаленно, с возможными оплачиваемыми командировками в будущем.
На испытательный срок -2000 $
После испытательного - 2500 $
По итогам работы премии.
Требования:
* Хорошее знание Java EE или Spring
* Опыт разработки на Java/Kotlin
* Умение работать с SQL и не-SQL базами данных
* Знание C/C++
* Знание базового английского
Контакт для связи @viksantana
Требуется Backend java разработчик (не ниже middle) на постоянную работу.
Основная задача разработка бэкэнда приложений на java с нуля, доработка текущих проектов.
Работа удаленно, с возможными оплачиваемыми командировками в будущем.
На испытательный срок -2000 $
После испытательного - 2500 $
По итогам работы премии.
Требования:
* Хорошее знание Java EE или Spring
* Опыт разработки на Java/Kotlin
* Умение работать с SQL и не-SQL базами данных
* Знание C/C++
* Знание базового английского
Контакт для связи @viksantana
#вопросы_с_собеседований
Что такое пул строк?
Что такое пул строк?
Пул строк – это набор строк, хранящийся в Heap.
☕️ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;
☕️ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;
☕️ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;
☕️ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением;
☕️ Пул строк является примером паттерна «Приспособленец» (Flyweight).
☕️ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;
☕️ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;
☕️ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;
☕️ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением;
☕️ Пул строк является примером паттерна «Приспособленец» (Flyweight).
Псс… Соскучились? 😝 Photo Lab объявляет о старте онлайн-хакатона PhotoHack Mobile с призовым фондом 500 000 рублей! 🔥
В этот раз перед участниками стоит задача разработать мобильное приложение, используя технологии Photo Lab. При этом речь не идёт о чём-то масштабном и грандиозном, а наоборот, нужно создать нишевый продукт, направленный на решение конкретной задачи.
Где: онлайн
Когда: 12-13 сентября 2020 года
Кого мы ждём: мобильных разработчиков, специалистов по Machine Learning и Data Science, продакт-менеджеров, UI/UX-дизайнеров, авторов креативных идей, а также студентов технических специальностей.
P.S. в команде может быть не более пяти человек 😉
Подробная информация и регистрация на сайте: https://bit.ly/2QnPLpG
Торопитесь! Заявки принимаются до 11 сентября 2020
В этот раз перед участниками стоит задача разработать мобильное приложение, используя технологии Photo Lab. При этом речь не идёт о чём-то масштабном и грандиозном, а наоборот, нужно создать нишевый продукт, направленный на решение конкретной задачи.
Где: онлайн
Когда: 12-13 сентября 2020 года
Кого мы ждём: мобильных разработчиков, специалистов по Machine Learning и Data Science, продакт-менеджеров, UI/UX-дизайнеров, авторов креативных идей, а также студентов технических специальностей.
P.S. в команде может быть не более пяти человек 😉
Подробная информация и регистрация на сайте: https://bit.ly/2QnPLpG
Торопитесь! Заявки принимаются до 11 сентября 2020
#вопросы_с_собеседований
Чем различаются Enumeration и Iterator?
Чем различаются Enumeration и Iterator?
Погрузись в мир Java-разработки и напиши свою первую программу на одном из самых востребованных языков программирования за три дня. Занятия бесплатные, а опыт в написании кода не обязателен для участия — материал будет доступным для всех.
Регистрация займёт меньше минуты: 👉 https://clc.am/O1bwgg.
Java — отличный выбор даже для новичков в коде!
➕ Имеет дружественный и понятный синтаксис.
➕ Востребован на рынке труда.
➕ Java-приложения работают на любом устройстве и в любой операционной системе.
➕ Это один из самых высокооплачиваемых языков в разработке.
Трёх дней достаточно, чтобы узнать о базовых инструментах, которые программисты применяют в работе, и попробовать их на практике.
⭐️ Если попадёшь в тройку лучших участников — получишь сертификат на 30 000 рублей для обучения в Skillbox!
Регистрация займёт меньше минуты: 👉 https://clc.am/O1bwgg.
Java — отличный выбор даже для новичков в коде!
➕ Имеет дружественный и понятный синтаксис.
➕ Востребован на рынке труда.
➕ Java-приложения работают на любом устройстве и в любой операционной системе.
➕ Это один из самых высокооплачиваемых языков в разработке.
Трёх дней достаточно, чтобы узнать о базовых инструментах, которые программисты применяют в работе, и попробовать их на практике.
⭐️ Если попадёшь в тройку лучших участников — получишь сертификат на 30 000 рублей для обучения в Skillbox!
Хотя оба интерфейса и предназначены для обхода коллекций, между ними имеются существенные различия:
☕️ с помощью Enumeration нельзя добавлять/удалять элементы;
☕️ в Iterator исправлены имена методов для повышения читаемости кода (Enumeration.hasMoreElements() соответствует Iterator.hasNext(), Enumeration.nextElement() соответствует Iterator. next() и т.д);
☕️ Enumeration присутствуют в устаревших классах, таких как Vector/Stack, тогда как Iterator есть во всех современных классах-коллекциях.
☕️ с помощью Enumeration нельзя добавлять/удалять элементы;
☕️ в Iterator исправлены имена методов для повышения читаемости кода (Enumeration.hasMoreElements() соответствует Iterator.hasNext(), Enumeration.nextElement() соответствует Iterator. next() и т.д);
☕️ Enumeration присутствуют в устаревших классах, таких как Vector/Stack, тогда как Iterator есть во всех современных классах-коллекциях.
#вопросы_с_собеседований
Оцените количество памяти на хранение одного примитива типа byte в LinkedList?
Оцените количество памяти на хранение одного примитива типа byte в LinkedList?
Каждый элемент LinkedList хранит ссылку на предыдущий элемент, следующий элемент и ссылку на данные.
Для 64-битной JVM каждая ссылка занимает 64 бита (8 байт), размер заголовка каждого объекта составляет 16 байт (два машинных слова). Вычисления аналогичны: 8 + 8 + 8 + 16 = 40байт и 24 байта. Итого 64 байта.
static class Node<E> {Для 32-битных систем каждая ссылка занимает 32 бита (4 байта). Сам объект (заголовок) вложенного класса Node занимает 8 байт. 4 + 4 + 4 + 8 = 20 байт, а т.к. размер каждого объекта в Java кратен 8, соответственно получаем 24 байта. Примитив типа byte занимает 1 байт памяти, но в JCF примитивы упаковываются: объект типа Byte занимает в памяти 16 байт (8 байт на заголовок объекта, 1 байт на поле типа byte и 7 байт для кратности 8). Также напомню, что значения от -128 до 127 кэшируются и для них новые объекты каждый раз не создаются. Таким образом, в x32 JVM 24 байта тратятся на хранение одного элемента в списке и 16 байт - на хранение упакованного объекта типа Byte. Итого 40 байт.
E item;
Node<E> next;
Node<E> prev;
//...
}
Для 64-битной JVM каждая ссылка занимает 64 бита (8 байт), размер заголовка каждого объекта составляет 16 байт (два машинных слова). Вычисления аналогичны: 8 + 8 + 8 + 16 = 40байт и 24 байта. Итого 64 байта.
Язык программирования Go уже давно применяют не только в Google, но и по всему миру: в IBM, Intel, Adobe, Wildberries, Avito. Уже после первого месяца изучения языка можно писать полноценные приложения и приносить пользу, получая за это высокую зарплату.
Но это не только превосходный язык для новичков в программировании. Многие компании переходят на Go и ищут специалистов со знанием двух языков программирования. Освоив Go как второй язык, вы обеспечите себе отличные перспективы карьерного роста.
Востребованная профессия с нуля, 5 проектов в портфолио и помощь с трудоустройством — всё это даёт курс «Go-разработчик» онлайн-университета Geekbrains. Подробности здесь 👉 https://proglib.io/w/9a63a9ba
Но это не только превосходный язык для новичков в программировании. Многие компании переходят на Go и ищут специалистов со знанием двух языков программирования. Освоив Go как второй язык, вы обеспечите себе отличные перспективы карьерного роста.
Востребованная профессия с нуля, 5 проектов в портфолио и помощь с трудоустройством — всё это даёт курс «Go-разработчик» онлайн-университета Geekbrains. Подробности здесь 👉 https://proglib.io/w/9a63a9ba
Practical Android (2018)
Автор: Mark Wickham
Количество страниц: 253
Выберите лучший подход для своего приложения и быстро создайте решение, используя готовые проекты. Эта книга представляет собой сборник проектов, в которых используются передовые методы разработки Android. Книга является идеальным ресурсом для разработчиков, которые имеют некоторый опыт разработки, но не являются экспертами в области Android. Каждая глава включает как минимум один законченный проект, чтобы показать читателю, как реализовываются определённые концепции.
Скачать книгу
Автор: Mark Wickham
Количество страниц: 253
Выберите лучший подход для своего приложения и быстро создайте решение, используя готовые проекты. Эта книга представляет собой сборник проектов, в которых используются передовые методы разработки Android. Книга является идеальным ресурсом для разработчиков, которые имеют некоторый опыт разработки, но не являются экспертами в области Android. Каждая глава включает как минимум один законченный проект, чтобы показать читателю, как реализовываются определённые концепции.
Скачать книгу
Telegram
Книги для программистов (reserved)
Practical Android (2018)
Автор: Mark Wickham
Автор: Mark Wickham
Хочешь бесплатно начуиться программировать?
Прямо сейчас идет новый набор в Школу 21 от Сбербанка в Казани. Это твой шанс бесплатно получить востребованную профессию и найти команду мечты! Обучающимся из других городов предоставляется общежитие.
Получи junior или senior degree без учителей, лекций и оценок
«Школа 21» работает 24/7 — без графиков и расписания, ты сам определяешь, когда учиться. Поступление не зависит от предыдущих знаний, опыта работы, умения программировать и наличия диплома. Поступить в нее может каждый достигший 18-летнего возраста.
Как стать участником?
1. Зарегистрируйся на сайте Школы 21
2. Пройди две онлайн игры на память и логику
3. Собеседование — онлайн интервью
4. И «Бассейн» — четырехнедельный интенсив по программированию
Переходи по ссылке https://clck.ru/QYHRb и успей подать заявку на поступление до 1 сентября!
Количество мест на ""бассейне"" ограничено!
Прямо сейчас идет новый набор в Школу 21 от Сбербанка в Казани. Это твой шанс бесплатно получить востребованную профессию и найти команду мечты! Обучающимся из других городов предоставляется общежитие.
Получи junior или senior degree без учителей, лекций и оценок
«Школа 21» работает 24/7 — без графиков и расписания, ты сам определяешь, когда учиться. Поступление не зависит от предыдущих знаний, опыта работы, умения программировать и наличия диплома. Поступить в нее может каждый достигший 18-летнего возраста.
Как стать участником?
1. Зарегистрируйся на сайте Школы 21
2. Пройди две онлайн игры на память и логику
3. Собеседование — онлайн интервью
4. И «Бассейн» — четырехнедельный интенсив по программированию
Переходи по ссылке https://clck.ru/QYHRb и успей подать заявку на поступление до 1 сентября!
Количество мест на ""бассейне"" ограничено!
#вопросы_с_собеседований
Почему нельзя использовать byte в качестве ключа в HashMap?
Почему нельзя использовать byte в качестве ключа в HashMap?
Поправка: в вопросе имеется в виду byte[].
Хэш-код массива не зависит от хранимых в нем элементов, а присваивается при создании массива (метод вычисления хэш-кода массива не переопределен и вычисляется по стандартному Object.hashCode() на основании адреса массива). Так же у массивов не переопределен equals и выполняется сравнение указателей. Это приводит к тому, что обратиться к сохраненному с ключом-массивом элементу не получится при использовании другого массива такого же размера и с такими же элементами, доступ можно осуществить лишь в одном случае — при использовании той же самой ссылки на массив, что использовалась для сохранения элемента.
Хэш-код массива не зависит от хранимых в нем элементов, а присваивается при создании массива (метод вычисления хэш-кода массива не переопределен и вычисляется по стандартному Object.hashCode() на основании адреса массива). Так же у массивов не переопределен equals и выполняется сравнение указателей. Это приводит к тому, что обратиться к сохраненному с ключом-массивом элементу не получится при использовании другого массива такого же размера и с такими же элементами, доступ можно осуществить лишь в одном случае — при использовании той же самой ссылки на массив, что использовалась для сохранения элемента.