При принудительной остановке (приостановке) потока, stop() прерывает поток в недетерменированном месте выполнения, в результате становится совершенно непонятно, что делать с принадлежащими ему ресурсами. Поток может открыть сетевое соединение - что в таком случае делать с данными, которые еще не вычитаны? Где гарантия, что после дальнейшего запуска потока (в случае приостановки) он сможет их дочитать? Если поток блокировал разделяемый ресурс, то как снять эту блокировку и не переведёт ли принудительное снятие к нарушению консистентности системы? То же самое можно расширить и на случай соединения с базой данных: если поток остановят посередине транзакции, то кто ее будет закрывать? Кто и как будет разблокировать ресурсы?
Освой Java-разработку на трёхдневном онлайн-интенсиве! Будем разбираться в коде сразу на практике и напишем программу для мониторинга активности рабочего стола.
Занятия бесплатные: ⏩ https://clc.am/pMa5PQ.
Количество мест ограничено!
Почему изучение Java — это круто?
✔️ На нём создаются модульные программы, исходный код которых можно использовать многократно.
✔️ Написанные на Java приложения запускаются на разных ОС.
✔️ 3 млрд устройств работают на Java, в том числе Android.
Интенсив проведёт профи в своем деле, который уже более 15 лет работает в сфере Java и веб-разработки, является директором центра SymbioWay и находит IT-специалистов для крупнейших компаний России — Даниил Пилипенко. Он ответит на твои вопросы, поделится полезными советами и лайфхаками из мира программирования!
🎁 В конце интенсива всех участников ждут подарки от Skillbox и издательства «МИФ»!
Занятия бесплатные: ⏩ https://clc.am/pMa5PQ.
Количество мест ограничено!
Почему изучение Java — это круто?
✔️ На нём создаются модульные программы, исходный код которых можно использовать многократно.
✔️ Написанные на Java приложения запускаются на разных ОС.
✔️ 3 млрд устройств работают на Java, в том числе Android.
Интенсив проведёт профи в своем деле, который уже более 15 лет работает в сфере Java и веб-разработки, является директором центра SymbioWay и находит IT-специалистов для крупнейших компаний России — Даниил Пилипенко. Он ответит на твои вопросы, поделится полезными советами и лайфхаками из мира программирования!
🎁 В конце интенсива всех участников ждут подарки от Skillbox и издательства «МИФ»!
#вопросы_с_собеседований
Что такое «денормализация»? Для чего она применяется?
Что такое «денормализация»? Для чего она применяется?
Денормализация базы данных — это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных за счет увеличения избыточности данных.
Telegram
Библиотека джависта
Нормализация - это процесс преобразования отношений базы данных к виду, отвечающему нормальным формам (пошаговый, обратимый процесс замены исходной схемы другой схемой, в которой наборы данных имеют более простую и логичную структуру).
Нормализация предназначена…
Нормализация предназначена…
#вопросы_с_собеседований
Для чего используется SequenceInputStream?
Для чего используется SequenceInputStream?
#вопросы_с_собеседований
Какие подклассы класса Writer вы знаете, для чего они предназначены?
Какие подклассы класса Writer вы знаете, для чего они предназначены?
Убеждён, что Data Science — это не для всех? Мы докажем, что для разработки искусственного интеллекта достаточно базовой арифметики! Попробуй свои силы на бесплатном интенсиве от Skillbox.
Регистрация по ссылке: 🔜 https://clc.am/WZ3rlQ.
Для участия тебе не нужен опыт в программировании!
Что тебя ждёт?
⚙️ Экспресс-введение в Python.
⚙️ Работа с библиотеками Matplotlib и Scikit-Learn.
⚙️ Загрузка и визуализация данных.
⚙️ Построение модели от начала до конца.
⚙️ Оценка качества полученной модели.
⚙️ Подарки от Skillbox и издательства МИФ.
💡 Участвуй в интенсиве и убедись, что стать специалистом Machine Learning может каждый!
Регистрация по ссылке: 🔜 https://clc.am/WZ3rlQ.
Для участия тебе не нужен опыт в программировании!
Что тебя ждёт?
⚙️ Экспресс-введение в Python.
⚙️ Работа с библиотеками Matplotlib и Scikit-Learn.
⚙️ Загрузка и визуализация данных.
⚙️ Построение модели от начала до конца.
⚙️ Оценка качества полученной модели.
⚙️ Подарки от Skillbox и издательства МИФ.
💡 Участвуй в интенсиве и убедись, что стать специалистом Machine Learning может каждый!
☕️ Writer - абстрактный класс, описывающий символьный вывод;
☕️ BufferedWriter - буферизованный выходной символьный поток;
☕️ CharArrayWriter - выходной поток, который пишет в символьный массив;
☕️ FileWriter - выходной поток, пишущий в файл;
☕️ FilterWriter - абстрактный класс, предоставляющий интерфейс для классов-надстроек;
☕️ UPD. OutputStreamWriter - является мостом между символьными потоками и байтовыми потоками. Записанные в него символы кодируются в байты с использованием указанной кодировки;
☕️ PipedWriter - выходной канал;
☕️ PrintWriter - выходной поток символов, включающий методы print() и println();
☕️ StringWriter - выходной поток, пишущий в строку.
☕️ BufferedWriter - буферизованный выходной символьный поток;
☕️ CharArrayWriter - выходной поток, который пишет в символьный массив;
☕️ FileWriter - выходной поток, пишущий в файл;
☕️ FilterWriter - абстрактный класс, предоставляющий интерфейс для классов-надстроек;
☕️ UPD. OutputStreamWriter - является мостом между символьными потоками и байтовыми потоками. Записанные в него символы кодируются в байты с использованием указанной кодировки;
☕️ PipedWriter - выходной канал;
☕️ PrintWriter - выходной поток символов, включающий методы print() и println();
☕️ StringWriter - выходной поток, пишущий в строку.
#вопросы_с_собеседований
Перечислите принципы, которым вы следуете в многопоточном программировании?
Перечислите принципы, которым вы следуете в многопоточном программировании?
При написании многопоточных программ следует придерживаться определённых правил, которые помогают обеспечить достойную производительность приложения в сочетании с удобной отладкой и простотой дальнейшей поддержки кода.
☕️ Всегда давайте значимые имена своим потокам. Процесс отладки, нахождения ошибок или отслеживание исключения в многопоточном коде – довольно сложная задача. OrderProcessor, QuoteProcessor или TradeProcessor намного информативнее, чем Thread1, Thread2 и Thread3. Имя должно отражать задачу, выполняемую данным потоком.
☕️ Избегайте блокировок или старайтесь уменьшить масштабы синхронизации. Блокировка затратна, а переключение контекста ещё более ресурсоёмко. Пытайтесь избегать синхронизации и блокировки насколько это возможно, и организуйте критическую секцию в минимально необходимом объёме. Поэтому синхронизированный блок всегда предпочительней синхронизированного метода, дополнительно наделяя возможностью абсолютного контроля над масштабом блокировки.
☕️ Обрабатывайте прерывание потока с особой тщательностью. Нет ничего хуже оставшегося заблокированным ресурса или системы в неконстистентном, по причине неподтверждённой транзакции, состоянии.
☕️ Помните об обработке исключений. Выброшенные InterruptedException должны быть адекватно обработаны, а не просто подавлены. Так же не стоит пренебрегать Thread.UncaughtExceptionHandler. При использовании пула потоков необходимо помнить, что он зачастую просто «проглатывает» исключения. Так, если вы отправили на выполнение Runnable нужно обязательно поместить код выполнения задачи внутрь блока try-catch. Если в очередь пула помещается Callable, необходимо удостоверится, что результат выполнения всегда изымается с помощью блокирующего get(), чтобы в случае возникновения существовала возможность заново выбросить произошедшее исключение.
☕️ Почти всегда использование Concurrent сollection выгоднее использования Synchronized сollection, т.к. первые более современны (используют все доступные на момент их написания новшества языка) и масштабируемы, чем их синхронизированные аналоги.
☕️ Всегда давайте значимые имена своим потокам. Процесс отладки, нахождения ошибок или отслеживание исключения в многопоточном коде – довольно сложная задача. OrderProcessor, QuoteProcessor или TradeProcessor намного информативнее, чем Thread1, Thread2 и Thread3. Имя должно отражать задачу, выполняемую данным потоком.
☕️ Избегайте блокировок или старайтесь уменьшить масштабы синхронизации. Блокировка затратна, а переключение контекста ещё более ресурсоёмко. Пытайтесь избегать синхронизации и блокировки насколько это возможно, и организуйте критическую секцию в минимально необходимом объёме. Поэтому синхронизированный блок всегда предпочительней синхронизированного метода, дополнительно наделяя возможностью абсолютного контроля над масштабом блокировки.
☕️ Обрабатывайте прерывание потока с особой тщательностью. Нет ничего хуже оставшегося заблокированным ресурса или системы в неконстистентном, по причине неподтверждённой транзакции, состоянии.
☕️ Помните об обработке исключений. Выброшенные InterruptedException должны быть адекватно обработаны, а не просто подавлены. Так же не стоит пренебрегать Thread.UncaughtExceptionHandler. При использовании пула потоков необходимо помнить, что он зачастую просто «проглатывает» исключения. Так, если вы отправили на выполнение Runnable нужно обязательно поместить код выполнения задачи внутрь блока try-catch. Если в очередь пула помещается Callable, необходимо удостоверится, что результат выполнения всегда изымается с помощью блокирующего get(), чтобы в случае возникновения существовала возможность заново выбросить произошедшее исключение.
☕️ Почти всегда использование Concurrent сollection выгоднее использования Synchronized сollection, т.к. первые более современны (используют все доступные на момент их написания новшества языка) и масштабируемы, чем их синхронизированные аналоги.
#вопросы_с_собеседований
Опишите, как обрабатываются JSP страницы, начиная от запроса к серверу, заканчивая ответом пользователю.
Опишите, как обрабатываются JSP страницы, начиная от запроса к серверу, заканчивая ответом пользователю.
Когда пользователь переходит по ссылке на страницу page.jsp, он отправляет http-запрос на сервер GET /page.jsp. Затем на основе этого запроса и текста самой страницы сервер генерирует java-класс, компилирует его и выполняет полученный сервлет, формирующий ответ пользователю в виде представления этой страницы, который сервер и перенаправляет обратно пользователю.
#вопросы_с_собеседований
Чем отличается работа метода wait() с параметром и без параметра?
Чем отличается работа метода wait() с параметром и без параметра?
wait() без параметров освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify()/ notifyAll(),
с параметрами заставит поток ожидать заданное количество времени или вызова notify()/ notifyAll().
с параметрами заставит поток ожидать заданное количество времени или вызова notify()/ notifyAll().
#вопросы_с_собеседований
Что происходит, когда в потоке выбрасывается исключение?
Что происходит, когда в потоке выбрасывается исключение?
☕️ Если исключение не поймано – поток «умирает» (переходит в состяние мёртв (dead)).
☕️ Если установлен обработчик непойманных исключений, то он возьмёт управление на себя. Thread.UncaughtExceptionHandler – интерфейс, определённый как вложенный интерфейс для других обработчиков, вызываемых, когда поток внезапно останавливается из-за непойманного исключения. В случае, если поток собирается остановиться из-за непойманного исключения, JVM проверяет его на наличие UncaughtExceptionHandler, используя Thread.getUncaughtExceptionHandler(), и если такой обработчик найдет, то вызовет у него метод uncaughtException(), передав этот поток и исключение в виде аргументов.
☕️ Если установлен обработчик непойманных исключений, то он возьмёт управление на себя. Thread.UncaughtExceptionHandler – интерфейс, определённый как вложенный интерфейс для других обработчиков, вызываемых, когда поток внезапно останавливается из-за непойманного исключения. В случае, если поток собирается остановиться из-за непойманного исключения, JVM проверяет его на наличие UncaughtExceptionHandler, используя Thread.getUncaughtExceptionHandler(), и если такой обработчик найдет, то вызовет у него метод uncaughtException(), передав этот поток и исключение в виде аргументов.
Hands-On Microservices with Kotlin (2018)
Автор: Juan Antonio Medina Iglesias
Количество страниц: 416
Эта книга поможет читателю разрабатывать и внедрять сервисы, а также создавать готовый к работе, тестируемый, экономичный код, который короче и проще, чем традиционная реализация на Java. Воспользуйтесь преимуществами реактивной парадигмы и неблокирующих технологий, чтобы вывести свои навыки на новый уровень с точки зрения отраслевых стандартов.
Скачать книгу
Автор: Juan Antonio Medina Iglesias
Количество страниц: 416
Эта книга поможет читателю разрабатывать и внедрять сервисы, а также создавать готовый к работе, тестируемый, экономичный код, который короче и проще, чем традиционная реализация на Java. Воспользуйтесь преимуществами реактивной парадигмы и неблокирующих технологий, чтобы вывести свои навыки на новый уровень с точки зрения отраслевых стандартов.
Скачать книгу
Telegram
Книги для программистов (reserved)
Hands-On Microservices with Kotlin (2018)
Автор: Juan Antonio Medina Iglesias
Автор: Juan Antonio Medina Iglesias
💻 30 лучших ноутбуков для программиста в 2020 году
Выбираем в разных ценовых диапазонах самые автономные, легкие, производительные и большие ноутбуки для кодинга. Спойлер: до 30 тысяч достойных кандидатов нет.
https://proglib.io/sh/UxDQ6z0Iqa
Выбираем в разных ценовых диапазонах самые автономные, легкие, производительные и большие ноутбуки для кодинга. Спойлер: до 30 тысяч достойных кандидатов нет.
https://proglib.io/sh/UxDQ6z0Iqa
#вопросы_с_собеседований
Дайте определение понятию «синхронизация».
Дайте определение понятию «синхронизация».