#вопросы_с_собеседований
Какое худшее время работы метода get(key) для ключа, который есть в HashMap?
Какое худшее время работы метода get(key) для ключа, который есть в HashMap?
O(N). Худший случай - это поиск ключа в HashMap, вырожденного в список по причине совпадения ключей по hashCode() и для выяснения, хранится ли элемент с определённым ключом, может потребоваться перебор всего списка.
UPD. Начиная с Java 8 корзины в HashMap становятся балансированными деревьями, если в них попадает больше определенного кол-ва объектов. Поэтому худший случай будет O(log n). Подробности можно почитать в https://javahungry.blogspot.com/2013/08/hashing-how-hash-map-works-in-java-or.html (спасибо за указание на ошибку)
UPD. Начиная с Java 8 корзины в HashMap становятся балансированными деревьями, если в них попадает больше определенного кол-ва объектов. Поэтому худший случай будет O(log n). Подробности можно почитать в https://javahungry.blogspot.com/2013/08/hashing-how-hash-map-works-in-java-or.html (спасибо за указание на ошибку)
Blogspot
Hashing :How HashMap works in java or How get() method works internally | Java Hungry
One of the most darling question of the core java interviewers is How hash map works in java . Most of the candidates rejection chances increases if the candidate do not give the satisfactory explanation . This question shows that candidate has good knowledge…
#вопросы_с_собеседований
Чем абстрактный класс отличается от интерфейса? В каких случаях следует использовать абстрактный класс, а в каких интерфейс?
Чем абстрактный класс отличается от интерфейса? В каких случаях следует использовать абстрактный класс, а в каких интерфейс?
☕️ В Java класс может одновременно реализовать несколько интерфейсов, но наследоваться только от одного класса.
☕️ Абстрактные классы используются только тогда, когда присутствует тип отношений «is a» (является). Интерфейсы могут реализоваться классами, которые не связаны друг с другом.
☕️ Абстрактный класс - средство, позволяющее избежать написания повторяющегося кода, инструмент для частичной реализации поведения. Интерфейс - это средство выражения семантики класса, контракт, описывающий возможности. Все методы интерфейса неявно объявляются как public abstract или (начиная с Java 8) default - методами с реализацией по-умолчанию, а поля - public static final.
☕️ Интерфейсы позволяют создавать структуры типов без иерархии.
☕️ Наследуясь от абстрактного, класс «растворяет» собственную индивидуальность. Реализуя интерфейс, он расширяет собственную функциональность.
Абстрактные классы содержат частичную реализацию, которая дополняется или расширяется в подклассах. При этом все подклассы схожи между собой в части реализации, унаследованной от абстрактного класса и отличаются лишь в части собственной реализации абстрактных методов родителя. Поэтому абстрактные классы применяются в случае построения иерархии однотипных, очень похожих друг на друга классов. В этом случае наследование от абстрактного класса, реализующего поведение объекта по умолчанию может быть полезно, так как позволяет избежать написания повторяющегося кода. Во всех остальных случаях лучше использовать интерфейсы.
☕️ Абстрактные классы используются только тогда, когда присутствует тип отношений «is a» (является). Интерфейсы могут реализоваться классами, которые не связаны друг с другом.
☕️ Абстрактный класс - средство, позволяющее избежать написания повторяющегося кода, инструмент для частичной реализации поведения. Интерфейс - это средство выражения семантики класса, контракт, описывающий возможности. Все методы интерфейса неявно объявляются как public abstract или (начиная с Java 8) default - методами с реализацией по-умолчанию, а поля - public static final.
☕️ Интерфейсы позволяют создавать структуры типов без иерархии.
☕️ Наследуясь от абстрактного, класс «растворяет» собственную индивидуальность. Реализуя интерфейс, он расширяет собственную функциональность.
Абстрактные классы содержат частичную реализацию, которая дополняется или расширяется в подклассах. При этом все подклассы схожи между собой в части реализации, унаследованной от абстрактного класса и отличаются лишь в части собственной реализации абстрактных методов родителя. Поэтому абстрактные классы применяются в случае построения иерархии однотипных, очень похожих друг на друга классов. В этом случае наследование от абстрактного класса, реализующего поведение объекта по умолчанию может быть полезно, так как позволяет избежать написания повторяющегося кода. Во всех остальных случаях лучше использовать интерфейсы.
#вопросы_с_собеседований
Как устроен HashMap?
Как устроен HashMap?
HashMap состоит из «корзин» (bucket). С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары «ключ-значение» вычисляет хэш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент. Если корзина пустая, то в нее сохраняется ссылка на вновь добавляемый элемент, если же там уже есть элемент, то происходит последовательный переход по ссылкам между элементами в цепочке, в поисках последнего элемента, от которого и ставится ссылка на вновь добавленный элемент. Если в списке был найден элемент с таким же ключом, то он заменяется.
#вопросы_с_собеседований
Чем различаются JRE, JVM и JDK?
Чем различаются JRE, JVM и JDK?
JVM, Java Virtual Machine (Виртуальная машина Java) — основная часть среды времени исполнения Java (JRE). Виртуальная машина Java исполняет байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java. JVM может также использоваться для выполнения программ, написанных на других языках программирования.
JRE, Java Runtime Environment (Среда времени выполнения Java) - минимально-необходимая реализация виртуальной машины для исполнения Java-приложений. Состоит из JVM и стандартного набора библиотек классов Java.
JDK, Java Development Kit (Комплект разработки на Java) - JRE и набор инструментов разработчика приложений на языке Java, включающий в себя компилятор Java, стандартные библиотеки классов Java, примеры, документацию, различные утилиты.
Коротко: JDK - среда для разработки программ на Java, включающая в себя JRE - среду для обеспечения запуска Java программ, которая в свою очередь содержит JVM - интерпретатор кода Java программ.
JRE, Java Runtime Environment (Среда времени выполнения Java) - минимально-необходимая реализация виртуальной машины для исполнения Java-приложений. Состоит из JVM и стандартного набора библиотек классов Java.
JDK, Java Development Kit (Комплект разработки на Java) - JRE и набор инструментов разработчика приложений на языке Java, включающий в себя компилятор Java, стандартные библиотеки классов Java, примеры, документацию, различные утилиты.
Коротко: JDK - среда для разработки программ на Java, включающая в себя JRE - среду для обеспечения запуска Java программ, которая в свою очередь содержит JVM - интерпретатор кода Java программ.
Мы обучим тебя разработке на Java с ментором онлайн, а оплата только после трудоустройства в IT. Поможем составить резюме и подготовим к собеседованиям. Тебя ждет минимум 5 предложений о работе и быстрый карьерный рост благодаря программе поддержки рассчитанной на 2 года.
Пройти тестовое задание 🙋♂️👉 https://clck.ru/Rc6VB
👇Как проходит обучение:
1. Жесткий контроль теории и кода после каждой пройденной темы
2. Обучение только востребованному на рынке стеку технологий: Java Core, Maven, Git, Tomcat, Spring MVC, Core, Security, Hibernate
3. Отработка знаний в реальном бизнес проекте, который дает опыт для резюме
4. Интегрированное полезное общение в групповом чате slack с одногруппниками, наставниками и выпускниками-разработчиками
5. Быстрое карьерное и финансовое развитие за счет двухгодичной программы поддержки от экспертов java сообщества: митапы, мастер-классы, лекции и оффлайн интенсивы
6. Гарантированное трудоустройство с первой зарплатой минимум от 100 000 рублей
Условия участия:
• Пройти входное тестирование
• Обучение минимум 25 часов в неделю
• Проживание или готовность к переезду в Москву для трудоустройства
Пройти тестовое задание 🙋♂️👉 https://clck.ru/Rc6VB
👇Как проходит обучение:
1. Жесткий контроль теории и кода после каждой пройденной темы
2. Обучение только востребованному на рынке стеку технологий: Java Core, Maven, Git, Tomcat, Spring MVC, Core, Security, Hibernate
3. Отработка знаний в реальном бизнес проекте, который дает опыт для резюме
4. Интегрированное полезное общение в групповом чате slack с одногруппниками, наставниками и выпускниками-разработчиками
5. Быстрое карьерное и финансовое развитие за счет двухгодичной программы поддержки от экспертов java сообщества: митапы, мастер-классы, лекции и оффлайн интенсивы
6. Гарантированное трудоустройство с первой зарплатой минимум от 100 000 рублей
Условия участия:
• Пройти входное тестирование
• Обучение минимум 25 часов в неделю
• Проживание или готовность к переезду в Москву для трудоустройства
#вопросы_с_собеседований
Могут ли у разных ссылок на один объект (ref0 == ref1) быть ref0.equals(ref1) == false?
Могут ли у разных ссылок на один объект (ref0 == ref1) быть ref0.equals(ref1) == false?
В общем случае - могут, если метод equals() реализован некорректно и не выполняет свойство рефлексивности: для любых ненулевых ссылок x метод x.equals(x) должен возвращать true.
#вопросы_с_собеседований
О чем говорит ключевое слово final?
О чем говорит ключевое слово final?
Модификатор final может применяться к переменным, параметрам методов, полям и методам класса или самим классам.
☕️ Класс не может иметь наследников;
☕️ Метод не может быть переопределен в классах-наследниках;
☕️ Поле не может изменить свое значение после инициализации;
☕️ Параметры методов не могут изменять своё значение внутри метода;
☕️ Локальные переменные не могут быть изменены после присвоения им значения.
☕️ Класс не может иметь наследников;
☕️ Метод не может быть переопределен в классах-наследниках;
☕️ Поле не может изменить свое значение после инициализации;
☕️ Параметры методов не могут изменять своё значение внутри метода;
☕️ Локальные переменные не могут быть изменены после присвоения им значения.
Forwarded from Java jobs — вакансии для java-разработчиков
🍋Тинькофф это уже давно не только банк, а целая экосистема: счет для бизнеса, страхование, мобильная связь, инвестиции.
💡Мы ищем Java-разработчиков разного уровня в департамент платёжных систем. У нас три направления (банкоматы, платёжная система и интернет-эквайринг), работа в продуктовой команде, в которой есть аналитики, бэк и фрон разработчики, тестеры и тд, команды сформированные.
💰ЗП: 180 000-230 000 (net)
🧩Чем нужно заниматься:
• Участие в разработке и оптимизации производительности внутри программного комплекса Процессингового центра: банковский процессинг, развитие банковских продуктов;
• Участие в разработке интеграционных решений в рамках глобальной информационной инфраструктуры со смежными IT-системами (CRM-системы, АБС, DWH, Личный Кабинет);
📒Что нужно знать:
Опыт работы с Java 8, Spring Framework, опыт с ORACLE, postgreSQL, понимание REST подхода к разработке API, опыт работы с SQL и JDBC, опыт работы с Git, Maven.
🎁Что у нас есть для тебя:
• Офис в Москве
• Проводим митапы, тренинги и мастер-классы, огромная tech-библиотека в твоем распоряжении;
• Компенсируем обеды; чай, кофе и фрукты в кухнях на каждом этаже офиса;
• ДМС и страховку от несчастных случаев;
• Бесплатные курсы английского языка на территории офиса; Скидка 30% на КАСКО и специальные условия на продукты Тинькофф.
📩По всем вопросам можно писать в личные сообщения @akulovaeg
💡Мы ищем Java-разработчиков разного уровня в департамент платёжных систем. У нас три направления (банкоматы, платёжная система и интернет-эквайринг), работа в продуктовой команде, в которой есть аналитики, бэк и фрон разработчики, тестеры и тд, команды сформированные.
💰ЗП: 180 000-230 000 (net)
🧩Чем нужно заниматься:
• Участие в разработке и оптимизации производительности внутри программного комплекса Процессингового центра: банковский процессинг, развитие банковских продуктов;
• Участие в разработке интеграционных решений в рамках глобальной информационной инфраструктуры со смежными IT-системами (CRM-системы, АБС, DWH, Личный Кабинет);
📒Что нужно знать:
Опыт работы с Java 8, Spring Framework, опыт с ORACLE, postgreSQL, понимание REST подхода к разработке API, опыт работы с SQL и JDBC, опыт работы с Git, Maven.
🎁Что у нас есть для тебя:
• Офис в Москве
• Проводим митапы, тренинги и мастер-классы, огромная tech-библиотека в твоем распоряжении;
• Компенсируем обеды; чай, кофе и фрукты в кухнях на каждом этаже офиса;
• ДМС и страховку от несчастных случаев;
• Бесплатные курсы английского языка на территории офиса; Скидка 30% на КАСКО и специальные условия на продукты Тинькофф.
📩По всем вопросам можно писать в личные сообщения @akulovaeg
#вопросы_с_собеседований
В чем разница между notify() и notifyAll()?
В чем разница между notify() и notifyAll()?
GeekBrains открывает факультет обработки естественного языка
Обучение проходит в онлайн-формате 2 раза в неделю в течение 10 месяцев. Студенты факультета смогут с нуля овладеть востребованной профессией NLP-разработчика, ML-инженера или специалиста по Data Science. Программа занятий рассчитана на новичков: в нее входят основы высшей математики (линейная алгебра и матанализ), программирования и машинного обучения. Достаточно подробно изучается теория вероятностей и матстатистика, различные подходы к обработке естественного языка, прототипирование и интеграция, а также бизнес-процесс машинного обучения. Занятия ведут признанные в отрасли эксперты, а решить возникающие в процессе обучения затруднения поможет личный наставник. Успешно окончившие курс студенты получат диплом о профессиональной переподготовке и закрепленную в договоре гарантию трудоустройства.
Подробная информация о новом факультете доступна на нашем сайте: https://proglib.io/w/f1c2a766
Обучение проходит в онлайн-формате 2 раза в неделю в течение 10 месяцев. Студенты факультета смогут с нуля овладеть востребованной профессией NLP-разработчика, ML-инженера или специалиста по Data Science. Программа занятий рассчитана на новичков: в нее входят основы высшей математики (линейная алгебра и матанализ), программирования и машинного обучения. Достаточно подробно изучается теория вероятностей и матстатистика, различные подходы к обработке естественного языка, прототипирование и интеграция, а также бизнес-процесс машинного обучения. Занятия ведут признанные в отрасли эксперты, а решить возникающие в процессе обучения затруднения поможет личный наставник. Успешно окончившие курс студенты получат диплом о профессиональной переподготовке и закрепленную в договоре гарантию трудоустройства.
Подробная информация о новом факультете доступна на нашем сайте: https://proglib.io/w/f1c2a766
Дело в том, что «висеть» на методе wait() одного монитора могут сразу несколько потоков. При вызове notify() только один из них выходит из wait() и пытается захватить монитор, а затем продолжает работу со следующего после wait() оператора. Какой из них выйдет - заранее неизвестно. А при вызове notifyAll(), все висящие на wait() потоки выходят из wait(), и все они пытаются захватить монитор. Понятно, что в любой момент времени монитор может быть захвачен только одним потоком, а остальные ждут своей очереди. Порядок очереди определяется планировщиком потоков Java.
GeekBrains открывает факультет Fullstack JavaScript
Подготовительные курсы пройдут в ноябре, а обучение начнется в январе 2021 года. Рассчитанная на 15 месяцев программа позволит студентам освоить профессию разработчика полного цикла. Успешно окончив курс, они смогут запустить собственные проекты: сайты, мобильные приложения и высоконагруженные сервисы. Преподают на факультете ведущие специалисты из GeekBrains и Delivery Club, а затруднения с домашними заданиями поможет решить наставник. Помимо основ HTML, CSS и JavaScript, в учебную программу входят продвинутые темы: современная фронтенд-разработка, бэкенд-разработка, базы данных, сетевые протоколы, многопоточные приложения, взаимодействие в команде и многое другое. Гарантия трудоустройства закреплена в договоре — опытный HR поможет вам составить резюме.
Получить дополнительную информацию и записаться в группу можно на сайте: https://proglib.io/w/cbf6a980
Подготовительные курсы пройдут в ноябре, а обучение начнется в январе 2021 года. Рассчитанная на 15 месяцев программа позволит студентам освоить профессию разработчика полного цикла. Успешно окончив курс, они смогут запустить собственные проекты: сайты, мобильные приложения и высоконагруженные сервисы. Преподают на факультете ведущие специалисты из GeekBrains и Delivery Club, а затруднения с домашними заданиями поможет решить наставник. Помимо основ HTML, CSS и JavaScript, в учебную программу входят продвинутые темы: современная фронтенд-разработка, бэкенд-разработка, базы данных, сетевые протоколы, многопоточные приложения, взаимодействие в команде и многое другое. Гарантия трудоустройства закреплена в договоре — опытный HR поможет вам составить резюме.
Получить дополнительную информацию и записаться в группу можно на сайте: https://proglib.io/w/cbf6a980
👨🎓 35 приложений для изучения программирования на iOS и Android
Лучшие приложения для Android и iOS, которые научат детей логическому мышлению и основам кодинга. Для взрослых более сложные игрушки: Java, С, машинное обучение и Data Science.
https://proglib.io/sh/q2R9OsS4yE
Лучшие приложения для Android и iOS, которые научат детей логическому мышлению и основам кодинга. Для взрослых более сложные игрушки: Java, С, машинное обучение и Data Science.
https://proglib.io/sh/q2R9OsS4yE
GeekBrains запускает курс «Блокчейн-разработка»
Обучение начнется 2 ноября и продлится 4 месяца. Курс рассчитан на еще не знакомых с темой и уже имеющих некоторый опыт разработчиков. Технологический стек: командная оболочка, TCP/IP, Git и любой язык для backend. Занятия ведут участвующие в блокчейн-проектах преподаватели, а программа на 70% состоит из интерактивных вебинаров. Студенты изучат основы криптографии и распределенного реестра, а затем перейдут к более сложным темам: протоколам консенсуса и анонимизации, смарт-контрактам, закрытым блокчейнам и системам с разрешениями, масштабированию сетей блокчейн и пользовательским аспектам применения технологии. После обучения эксперты криптобиржи Binance проведут для студентов карьерные консультации, а возникающие в процессе затруднения поможет разрешить личный наставник.
Получить дополнительную информацию и записаться в группу можно на сайте: https://proglib.io/w/9b16b77c
Обучение начнется 2 ноября и продлится 4 месяца. Курс рассчитан на еще не знакомых с темой и уже имеющих некоторый опыт разработчиков. Технологический стек: командная оболочка, TCP/IP, Git и любой язык для backend. Занятия ведут участвующие в блокчейн-проектах преподаватели, а программа на 70% состоит из интерактивных вебинаров. Студенты изучат основы криптографии и распределенного реестра, а затем перейдут к более сложным темам: протоколам консенсуса и анонимизации, смарт-контрактам, закрытым блокчейнам и системам с разрешениями, масштабированию сетей блокчейн и пользовательским аспектам применения технологии. После обучения эксперты криптобиржи Binance проведут для студентов карьерные консультации, а возникающие в процессе затруднения поможет разрешить личный наставник.
Получить дополнительную информацию и записаться в группу можно на сайте: https://proglib.io/w/9b16b77c
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