#вопросы_с_собеседований
В чем разница между композицией и агрегацией?
В чем разница между композицией и агрегацией?
Ассоциация обозначает связь между объектами. Композиция и агрегация — частные случаи ассоциации «часть-целое».
Агрегация предполагает, что объекты связаны взаимоотношением «part-of» (часть). Композиция - более строгий вариант агрегации. Дополнительно к требованию «part-of» накладывается условие, что экземпляр «части» может входить только в одно целое (или никуда не входить), в то время как в случае агрегации экземпляр «части» может входить в несколько целых.
Агрегация предполагает, что объекты связаны взаимоотношением «part-of» (часть). Композиция - более строгий вариант агрегации. Дополнительно к требованию «part-of» накладывается условие, что экземпляр «части» может входить только в одно целое (или никуда не входить), в то время как в случае агрегации экземпляр «части» может входить в несколько целых.
Например, книга состоит из страниц, и мы не можем вырвать страницу из книги и вложить в другую книгу. Страницы четко привязаны к конкретной книге, поэтому это композиция. В тоже время мы можем взять и перенести книгу из одной библиотеки в другую - это уже агрегация.
#вопросы_с_собеседований
Какие разновидности сборщиков мусора реализованы в виртуальной машине HotSpot?
Какие разновидности сборщиков мусора реализованы в виртуальной машине HotSpot?
Java HotSpot VM предоставляет разработчикам на выбор четыре различных сборщика мусора:
☕️ Serial (последовательный) — самый простой вариант для приложений с небольшим объемом данных и не требовательных к задержкам. На данный момент используется сравнительно редко, но на слабых компьютерах может быть выбран виртуальной машиной в качестве сборщика по умолчанию. Использование Serial GC включается опцией -XX:+UseSerialGC.
☕️ Parallel (параллельный) — наследует подходы к сборке от последовательного сборщика, но добавляет параллелизм в некоторые операции, а также возможности по автоматической подстройке под требуемые параметры производительности. Параллельный сборщик включается опцией -XX:+UseParallelGC.
☕️ Concurrent Mark Sweep (CMS) — нацелен на снижение максимальных задержек путем выполнения части работ по сборке мусора параллельно с основными потоками приложения. Подходит для работы с относительно большими объемами данных в памяти. Использование CMS GC включается опцией -XX:+UseConcMarkSweepGC.
☕️ Garbage-First (G1) — создан для замены CMS, особенно в серверных приложениях, работающих на многопроцессорных серверах и оперирующих большими объемами данных. G1 включается опцией Java -XX:+UseG1GC.
Обязательно сообщайте в комментариях👆 о найденных неточностях, если таковые имеются.
☕️ Serial (последовательный) — самый простой вариант для приложений с небольшим объемом данных и не требовательных к задержкам. На данный момент используется сравнительно редко, но на слабых компьютерах может быть выбран виртуальной машиной в качестве сборщика по умолчанию. Использование Serial GC включается опцией -XX:+UseSerialGC.
☕️ Parallel (параллельный) — наследует подходы к сборке от последовательного сборщика, но добавляет параллелизм в некоторые операции, а также возможности по автоматической подстройке под требуемые параметры производительности. Параллельный сборщик включается опцией -XX:+UseParallelGC.
☕️ Concurrent Mark Sweep (CMS) — нацелен на снижение максимальных задержек путем выполнения части работ по сборке мусора параллельно с основными потоками приложения. Подходит для работы с относительно большими объемами данных в памяти. Использование CMS GC включается опцией -XX:+UseConcMarkSweepGC.
☕️ Garbage-First (G1) — создан для замены CMS, особенно в серверных приложениях, работающих на многопроцессорных серверах и оперирующих большими объемами данных. G1 включается опцией Java -XX:+UseG1GC.
Обязательно сообщайте в комментариях👆 о найденных неточностях, если таковые имеются.
#вопросы_с_собеседований
Что такое «система управления базами данных»?
Что такое «система управления базами данных»?
Система управления базами данных (СУБД) - набор средств общего или специального назначения, обеспечивающий создание, доступ к материалам и управление базой данных.
Основные функции СУБД:
☕️ управление данными;
☕️ журнализация изменений данных;
☕️ резервное копирование и восстановление данных;
☕️ поддержка языка определения данных и манипулирования ими.
Основные функции СУБД:
☕️ управление данными;
☕️ журнализация изменений данных;
☕️ резервное копирование и восстановление данных;
☕️ поддержка языка определения данных и манипулирования ими.
Что мотивирует вас откликнуться на вакансию?
#вопросы_с_собеседований
Что такое статическое и динамическое связывание?
Что такое статическое и динамическое связывание?
Присоединение вызова метода к телу метода называется связыванием. Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (early binding).
В свою очередь, позднее связывание (late binding) - это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic) или связыванием на стадии выполнения (runtime binding). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.
Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).
В свою очередь, позднее связывание (late binding) - это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic) или связыванием на стадии выполнения (runtime binding). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.
Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).
❇️ Мы ищем редактора-копирайтера для подготовки публикаций
Что делать:
— Подготовка нативных материалов по IT-тематике согласно контент-плану. Темы: программирование, информационная безопасность, Data Science и другие. Форматы материалов: лонгриды, обзоры, интервью, тесты, викторины и переводы англоязычных публикаций.
— Редакторская работа со структурой материала под ключ.
— Коммуникация с командой по внесению правок.
— Факт-чекинг, корректура написанных материалов.
Требования:
— Опыт написания материалов для IT-медиа, продукта или компании.
— Понимание целевой аудитории и SEO-оптимизации.
— Умение написания материалов, полезных как для читателя, так и заказчика.
— Знание английского языка для чтения и перевода иностранных источников.
— Приветствуется знание основ программирования и других направлений в IT-сфере.
— Готовность к выполнению тестового задания (оплачиваемое).
— Работа в команде с главным редактором.
Условия:
— Удаленная работа с соблюдением дедлайнов.
— Оплата 40-50 тыс.руб. в зависимости от опыта работы, выплаты два раза в месяц.
С кем связаться:
Откликнуться на вакансию: [email protected]. Присылайте несколько предложений о себе и опыте работы, ссылки на примеры публикаций. Резюме присылать не нужно. В случае взаимного интереса, мы пришлем вам тестовое задание.
Что делать:
— Подготовка нативных материалов по IT-тематике согласно контент-плану. Темы: программирование, информационная безопасность, Data Science и другие. Форматы материалов: лонгриды, обзоры, интервью, тесты, викторины и переводы англоязычных публикаций.
— Редакторская работа со структурой материала под ключ.
— Коммуникация с командой по внесению правок.
— Факт-чекинг, корректура написанных материалов.
Требования:
— Опыт написания материалов для IT-медиа, продукта или компании.
— Понимание целевой аудитории и SEO-оптимизации.
— Умение написания материалов, полезных как для читателя, так и заказчика.
— Знание английского языка для чтения и перевода иностранных источников.
— Приветствуется знание основ программирования и других направлений в IT-сфере.
— Готовность к выполнению тестового задания (оплачиваемое).
— Работа в команде с главным редактором.
Условия:
— Удаленная работа с соблюдением дедлайнов.
— Оплата 40-50 тыс.руб. в зависимости от опыта работы, выплаты два раза в месяц.
С кем связаться:
Откликнуться на вакансию: [email protected]. Присылайте несколько предложений о себе и опыте работы, ссылки на примеры публикаций. Резюме присылать не нужно. В случае взаимного интереса, мы пришлем вам тестовое задание.
Всем привет, на связи Слёрм!
Мы запускаем видеокурс по Docker, приглашаем всех желающих регистрироваться по ссылке http://to.slurm.io/sBsGwQ
Наш курс по Docker будет комплексным и обширным, мы начнем с введения и разбора основных абстракций, а закончим тем, что скрывается у Docker под капотом. Курс подойдет как разработчикам, так и системным администраторам.
Цена: 5 000 рублей.
Старт курса: 31 июля.
Видеозаписи: доступны навсегда.
Все студенты получат стенд от Selectel для прохождения практической части.
Мы запускаем видеокурс по Docker, приглашаем всех желающих регистрироваться по ссылке http://to.slurm.io/sBsGwQ
Наш курс по Docker будет комплексным и обширным, мы начнем с введения и разбора основных абстракций, а закончим тем, что скрывается у Docker под капотом. Курс подойдет как разработчикам, так и системным администраторам.
Цена: 5 000 рублей.
Старт курса: 31 июля.
Видеозаписи: доступны навсегда.
Все студенты получат стенд от Selectel для прохождения практической части.
Android Test-Driven Development by Tutorials (2019)
Авторы: Victoria Gonda, Fernando Sproviero, Lance Gleason
Написание приложений — сложный процесс. Написание тестируемых приложений обычно ещё сложнее, но это не обязательно. Чтение и понимание всей официальной документации Google по тестированию может занять много времени и запутать. Из этой книги вы узнаете о разработке на основе Android-тестов быстрым и простым способом: следуя простым и легким для чтения туториалам. Эта книга предназначена для разработчиков среднего уровня, которые уже знакомы с основами разработки под Android на Kotlin, но хотят изучить Android-тестирование.
Скачать книгу
Авторы: Victoria Gonda, Fernando Sproviero, Lance Gleason
Написание приложений — сложный процесс. Написание тестируемых приложений обычно ещё сложнее, но это не обязательно. Чтение и понимание всей официальной документации Google по тестированию может занять много времени и запутать. Из этой книги вы узнаете о разработке на основе Android-тестов быстрым и простым способом: следуя простым и легким для чтения туториалам. Эта книга предназначена для разработчиков среднего уровня, которые уже знакомы с основами разработки под Android на Kotlin, но хотят изучить Android-тестирование.
Скачать книгу
Telegram
Книги для программистов (reserved)
Android Test-Driven Development by Tutorials (2019)
Авторы: Victoria Gonda, Fernando Sproviero, Lance Gleason
Авторы: Victoria Gonda, Fernando Sproviero, Lance Gleason
#вопросы_с_собеседований
Stack считается «устаревшим». Чем его рекомендуют заменять? Почему?
Stack считается «устаревшим». Чем его рекомендуют заменять? Почему?
Stack был добавлен в Java 1.0 как реализация стека LIFO (last-in-first-out) и является расширением коллекции Vector, хотя это несколько нарушает понятие стека (например, класс Vector предоставляет возможность обращаться к любому элементу по индексу). Является частично синхронизированной коллекцией (кроме метода добавления push()) с вытекающими отсюда последствиями в виде негативного воздействия на производительность. После добавления в Java 1.6 интерфейса Deque, рекомендуется использовать реализации именно этого интерфейса, например, ArrayDeque.
#вопросы_с_собеседований
Что такое Optional?
Что такое Optional?
Опциональное значение Optional — это контейнер для объекта, который может содержать или не содержать значение null. Такая обёртка является удобным средством предотвращения NullPointerException, т.к. имеет некоторые функции высшего порядка, избавляющие от добавления повторяющихся if null/notNull проверок:
Optional<String> optional = Optional.of("hello");
optional.isPresent(); // true
optional.ifPresent(s -> System.out.println(s.length())); // 5
optional.get(); // "hello"
optional.orElse("ops..."); // "hello"
Попробуй свои силы в Java-разработке, пройди трёхдневное обучение от Даниила Пилипенко, директора центра SymbioWay, и напиши своё первое приложение.
Бесплатный доступ по ссылке: 👉 https://clc.to/vBHB_Q.
⚡️ На интенсиве ты познакомишься с синтаксисом языка Java, научишься работать с файлами, создавать потоки, подключать внешние библиотеки.
🎧 В результате разработаешь приложение, которое записывает звук с микрофона компьютера и отправляет записи в Dropbox.
🎁 Авторы трёх лучших проектов получат сертификаты на 30 000 рублей для поступления на любой онлайн-курс университета Skillbox, а все участники, дошедшие до конца, — электронную книгу Кея Петерсона и Дэвида Колба «Век живи — век учись» от издательства «МИФ».
Бесплатный доступ по ссылке: 👉 https://clc.to/vBHB_Q.
⚡️ На интенсиве ты познакомишься с синтаксисом языка Java, научишься работать с файлами, создавать потоки, подключать внешние библиотеки.
🎧 В результате разработаешь приложение, которое записывает звук с микрофона компьютера и отправляет записи в Dropbox.
🎁 Авторы трёх лучших проектов получат сертификаты на 30 000 рублей для поступления на любой онлайн-курс университета Skillbox, а все участники, дошедшие до конца, — электронную книгу Кея Петерсона и Дэвида Колба «Век живи — век учись» от издательства «МИФ».
#вопросы_с_собеседований
В чём разница между «конкуренцией» и «параллелизмом»?
В чём разница между «конкуренцией» и «параллелизмом»?
Мы снова проводим конкурс (с увеличенным призовым фондом) во ВКонтакте для самых креативных из вас на лучший мем для статьи с нашего сайта. Правила простые:
1. Вы берете произвольную статью с сайта, не утратившую свою актуальность
2. Делаете для нее мем
3. Отправляете в предложенные новости ссылку и вашу картинку
4. Мы оформляем и публикуем.
Автор картинки с публикацией с наибольшим охватом среди всех нам отправленных получит 15 тысяч рублей. Поехали: https://vk.com/proglib
Срок окончания конкурса — 18 августа 2020 года.
1. Вы берете произвольную статью с сайта, не утратившую свою актуальность
2. Делаете для нее мем
3. Отправляете в предложенные новости ссылку и вашу картинку
4. Мы оформляем и публикуем.
Автор картинки с публикацией с наибольшим охватом среди всех нам отправленных получит 15 тысяч рублей. Поехали: https://vk.com/proglib
Срок окончания конкурса — 18 августа 2020 года.
Конкуренция — это способ одновременного решения множества задач.
Признаки:
☕️ Наличие нескольких потоков управления (например Thread в Java, корутина в Kotlin), если поток управления один, то конкурентного выполнения быть не может
☕️ Недетерминированный результат выполнения. Результат зависит от случайных событий, реализации и того как была проведена синхронизация. Даже если каждый поток полностью детерминированный, итоговый результат будет недетерминированным
Параллелизм — это способ выполнения разных частей одной задачи.
Признаки:
☕️ Необязательно имеет несколько потоков управления
☕️ Может приводить к детерминированному результату, так, например, результат умножения каждого элемента массива на число, не изменится, если умножать его по частям параллельно.
Признаки:
☕️ Наличие нескольких потоков управления (например Thread в Java, корутина в Kotlin), если поток управления один, то конкурентного выполнения быть не может
☕️ Недетерминированный результат выполнения. Результат зависит от случайных событий, реализации и того как была проведена синхронизация. Даже если каждый поток полностью детерминированный, итоговый результат будет недетерминированным
Параллелизм — это способ выполнения разных частей одной задачи.
Признаки:
☕️ Необязательно имеет несколько потоков управления
☕️ Может приводить к детерминированному результату, так, например, результат умножения каждого элемента массива на число, не изменится, если умножать его по частям параллельно.