Programming Kotlin (2019)
Автор: Venkat Subramaniam
Программисты не просто так используют Kotlin, им это нравится. Даже Google признал его первоклассным языком для разработки под Android. С Kotlin вы можете смешивать императивный, функциональный и объектно-ориентированный стили программирования и получать выгоду от подхода, наиболее подходящего для рассматриваемой задачи. Работая с данной книгой, вы научитесь использовать многие возможности этого очень лаконичного, элегантного и выразительного языка с помощью простых для понимания примеров. Вы научитесь писать простые в обслуживании, высокопроизводительные приложения JVM и Android, работать с асинхронностью программ и многому другому.
Скачать книгу
Автор: Venkat Subramaniam
Программисты не просто так используют Kotlin, им это нравится. Даже Google признал его первоклассным языком для разработки под Android. С Kotlin вы можете смешивать императивный, функциональный и объектно-ориентированный стили программирования и получать выгоду от подхода, наиболее подходящего для рассматриваемой задачи. Работая с данной книгой, вы научитесь использовать многие возможности этого очень лаконичного, элегантного и выразительного языка с помощью простых для понимания примеров. Вы научитесь писать простые в обслуживании, высокопроизводительные приложения JVM и Android, работать с асинхронностью программ и многому другому.
Скачать книгу
Telegram
Книги для программистов (reserved)
Programming Kotlin (2019)
Автор: Venkat Subramaniam
Автор: Venkat Subramaniam
#вопросы_с_собеседований
Для чего используются ключевые слова volatile, synchronized, transient, native?
Для чего используются ключевые слова volatile, synchronized, transient, native?
volatile - этот модификатор вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной. Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все же данные, содержащиеся в объекте, синхронизированы не будут!
synchronized - это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.
Ключевые слова transient и native к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе - сигнализирует о том, что метод реализован в платформо-зависимом коде.
synchronized - это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.
Ключевые слова transient и native к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе - сигнализирует о том, что метод реализован в платформо-зависимом коде.
#вопросы_с_собеседований
Что такое Semaphore?
Что такое Semaphore?
Semaphore – это новый тип синхронизатора: семафор со счётчиком, реализующий шаблон синхронизации Семафор. Доступ управляется с помощью счётчика: изначальное значение счётчика задаётся в конструкторе при создании синхронизатора, когда поток заходит в заданный блок кода, то значение счётчика уменьшается на единицу, когда поток его покидает, то увеличивается. Если значение счётчика равно нулю, то текущий поток блокируется, пока кто-нибудь не выйдет из защищаемого блока. Semaphore используется для защиты дорогих ресурсов, которые доступны в ограниченном количестве, например подключение к базе данных в пуле.
#вопросы_с_собеседований
В чем разница между композицией и агрегацией?
В чем разница между композицией и агрегацией?
Ассоциация обозначает связь между объектами. Композиция и агрегация — частные случаи ассоциации «часть-целое».
Агрегация предполагает, что объекты связаны взаимоотношением «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.