Обложка канала

Библиотека джависта. Страница 45

20804 @javaproglib

Полезные материалы по всему, что может быть полезно разработчику на Java.

  • Библиотека джависта

    #вопросы_с_собеседований При помощи чего формируются запросы к базе данных? Для выполнения запросов к базе данных в Java используются три интерфейса: ☕️ java.sql.Statement - для операторов SQL без параметров; ☕️ java.sql.PreparedStatement - для операторов SQL с параметрами и часто выполняемых операторов; ☕️ java.sql.CallableStatement - для исполнения хранимых в базе процедур. Объекты-носители интерфейсов создаются при помощи методов объекта java.sql.Connection: ☕️ java.sql.createStatement() возвращает объект Statement; ☕️ java.sql.prepareStatement() возвращает объект PreparedStatement; ☕️ java.sql.prepareCall() возвращает объект CallableStatement;
  • Библиотека джависта

    🧬 «В здоровом теле…»: 7 мифов о биохакинге Как прожить дольше и правда ли что людей будут чипировать? Рассказываем о самых известных заблуждениях, касающихся биохакинга. 🔗 Основной сайт 🔗 Зеркало
  • Библиотека джависта

    В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности? Cтек – участок памяти, тесно связанный с потоками. У каждого потока есть свой стек, которые хранит локальные переменные, параметры методов и стек вызовов. Переменная, хранящаяся в стеке одного потока, не видна для другого. Куча – общий участок памяти, который делится между всеми потоками. Объекты, неважно локальные или любого другого уровня, создаются в куче. Для улучшения производительности, поток обычно кэширует значения из кучи в свой стек, в этом случае для того, чтобы указать потоку, что переменную следует читать из кучи используется ключевое слово volatile.
  • Реклама

  • Библиотека джависта

    🔥Хардкорный тест по JAVA🔥 🚀Вырвись из однотипных задач на Java. Освой продвинутые подходы. Пройди тест из 20 вопросов и проверь свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Java Developer. Professional " от OTUS по специальной цене. ⏰ Время прохождения теста ограничено 30 минут 📌ПРОЙТИ ТЕСТ: https://otus.pw/3tAj/
  • Библиотека джависта

    #вопросы_с_собеседований Для чего нужны функциональные интерфейсы вида _To_Function? DoubleToIntFunction - операция, принимающая аргумент класса Double и возвращающая результат типа Integer; DoubleToLongFunction - операция, принимающая аргумент класса Double и возвращающая результат типа Long; IntToDoubleFunction - операция, принимающая аргумент класса Integer и возвращающая результат типа Double; IntToLongFunction - операция, принимающая аргумент класса Integer и возвращающая результат типа Long; LongToDoubleFunction - операция, принимающая аргумент класса Long и возвращающая результат типа Double; LongToIntFunction - операция, принимающая аргумент класса Long и возвращающая результат типа Integer.
  • Библиотека джависта

    ❇️ Как сделать первый шаг к профессии Java-разработчик? Достаточно прийти за новыми знаниями на открытый урок «Кто такие дженерики?» в OTUS. 👉 https://otus.pw/y2ki/ Почему стоит посетить вебинар? Вместе с сертифицированным Java-разработчиком, Сергеем Петрелевичем, разберем дженерики, изучим, для чего они нужны и как начать использовать. Вебинар дает возможность предварительно попробовать специализацию «Java-разработчик» от онлайн-платформы OTUS и познакомиться с преподавателем. 👉 Чтобы участвовать, зарегистрируйтесь https://otus.pw/xEI9/ Реклама. Информация о рекламодателе на сайте www.otus.ru
  • Библиотека джависта

    В чём заключается различие между методами submit() и execute() у пула потоков? Оба метода являются способами подачи задачи в пул потоков, но между ними есть небольшая разница. execute(Runnable command) определён в интерфейсе Executor и выполняет поданную задачу и ничего не возвращает. submit() – перегруженный метод, определённый в интерфейсе ExecutorService. Способен принимать задачи типов Runnable и Callable и возвращать объект Future, который можно использовать для контроля и управления процессом выполнения, получения его результата.
  • Библиотека джависта

    «Библиотека программиста» находится в поиске авторов оригинальных статей Языки: – Python, JavaScript, TypeScript, Java, C#, Go, SQL. Тематики: – Информационная безопасность, Data Science, базовые концепции языков, продвинутый Python, JS (и т. д), бэкенд веб-приложений, фронтенд-разработка, React, системное программирование, базы данных. Объем: – от 7 до 15 тыс. знаков. ➡️ Заполнить анкету ⬅️ Я хорошо программирую, но пишу «так себе». Что делать? Если вы хорошо программируете, но навыки письма немного отстают, пройдите наш бесплатный курс на Степике «Статьи для IT: как объяснять и распространять значимые идеи».
  • Библиотека джависта

    Что будет, если очередь пула потоков уже заполнена, но подаётся новая задача? Если очередь пула потоков заполнилась, то поданная задача будет «отклонена». Например - метод submit() у ThreadPoolExecutor выкидывает RejectedExecutionException, после которого вызывается RejectedExecutionHandler.
  • Библиотека джависта

    #вопросы_с_собеседований Какого размера должен быть пул потоков? Настраивая размер пула потоков, важно избежать двух ошибок: слишком мало потоков (очередь на выполнение будет расти, потребляя много памяти) или слишком много потоков (замедление работы всей систему из-за частых переключений контекста). Оптимальный размер пула потоков зависит от количества доступных процессоров и природы задач в рабочей очереди. На N-процессорной системе для рабочей очереди, которая будет выполнять исключительно задачи с ограничением по скорости вычислений, можно достигнуть максимального использования CPU с пулом потоков, в котором содержится N или N+1 поток. Для задач, которые могут ждать осуществления I/O (ввода - вывода) - например, задачи, считывающей HTTP-запрос из сокета – может понадобиться увеличение размера пула свыше количества доступных процессоров, потому, что не все потоки будут работать все время. Используя профилирование, можно оценить отношение времени ожидания (WT) ко времени обработки (ST) для типичного запроса. Если назвать это соотношение WT/ST, то для N-процессорной системе понадобится примерно N*(1 + WT/ST) потоков для полной загруженности процессоров. Использование процессора – не единственный фактор, важный при настройке размера пула потоков. По мере возрастания пула потоков, можно столкнуться с ограничениями планировщика, доступной памяти, или других системных ресурсов, таких, как количество сокетов, дескрипторы открытого файла, или каналы связи базы данных.
  • Библиотека джависта

    #вопросы_с_собеседований Что такое «пул потоков»? Создание потока является затратной по времени и ресурсам операцией. Количество потоков, которое может быть запущено в рамках одного процесса также ограниченно. Чтобы избежать этих проблем и в целом управлять множеством потоков более эффективно в Java был реализован механизм пула потоков (thread pool), который создаётся во время запуска приложения и в дальнейшем потоки для обработки запросов берутся и переиспользуются уже из него. Таким образом, появляется возможность не терять потоки, сбалансировать приложение по количеству потоков и частоте их создания. Начиная с Java 1.5 Java API предоставляет фреймворк Executor, который позволяет создавать различные типы пула потоков: • Executor - упрощенный интерфейс пула, содержит один метод для передачи задачи на выполнение; • ExecutorService - расширенный интерфейс пула, с возможностью завершения всех потоков; • AbstractExecutorService - базовый класс пула, реализующий интерфейс ExecutorService; • Executors - фабрика объектов связанных с пулом потоков, в том числе позволяет создать основные типы пулов; • ThreadPoolExecutor - пул потоков с гибкой настройкой, может служить базовым классом для нестандартных пулов; • ForkJoinPool - пул для выполнения задач типа ForkJoinTask; ... и другие. Методы Executors для создания пулов: • newCachedThreadPool() - если есть свободный поток, то задача выполняется в нем, иначе добавляется новый поток в пул. Потоки не используемые больше минуты завершаются и удалются и кэша. Размер пула неограничен. Предназначен для выполнения множество небольших асинхронных задач; • newCachedThreadPool(ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков; • newFixedThreadPool(int nThreads) - создает пул на указанное число потоков. Если новые задачи добавлены, когда все потоки активны, то они будут сохранены в очереди для выполнения позже. Если один из потоков завершился из-за ошибки, на его место будет запущен другой поток. Потоки живут до тех пор, пока пул не будет закрыт явно методом shutdown(). • newFixedThreadPool(int nThreads, ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков; • newSingleThreadScheduledExecutor() - однопотоковый пул с возможностью выполнять задачу через указанное время или выполнять периодически. Если поток был завершен из-за каких-либо ошибок, то для выполнения следующей задачи будет создан новый поток. • newSingleThreadScheduledExecutor(ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков; • newScheduledThreadPool(int corePoolSize) - пул для выполнения задач через указанное время или переодически; • newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) - аналогично предыдущему, но с собственной фабрикой потоков; • unconfigurableExecutorService(ExecutorService executor) - обертка на пул, запрещающая изменять его конфигурацию;
  • Библиотека джависта

    Примитивы, врапперы. Package/unpackage (boxing/unboxing). • Типы-примитивы не создаются в куче, их жизненный цикл ограничен жизненным циклом стек-фрейма • Package — создание типа-обертки в хипе для аналогичного типа-примитива, например при объявлении аргумента как Integer, и при передаче int в качестве аргумента. Unpackage — обратная операция
  • Библиотека джависта

    ⚒ Зачем использовать функциональное программирование, если есть ООП? Легко писать, легко отлаживать и использовать повторно. Правда ли это? Давайте разбираться. https://proglib.io/sh/ygPOrh7i8C
  • Библиотека джависта

    Кастомный отчет для Jira или как приключение затянулось

    Представим ситуацию – вам надо сделать небольшой отчет на основе данных из другой системы. Звучит обыденно и вы сразу в голове представляете, что надо будет делать: узнать какие будут входные данные...

    Хабр
  • Библиотека джависта

    🔥Прокачайте свои навыки разработки на Java! 5 сентября в 20:00 пройдет открытый урок «Не хипом единым живёт Java» с Виталием Куценко, ведущим Java-разработчиком в RND. Когда говорим про память в Java, то чаще всего вспоминают Heap и Garbage Collector. Но у нас есть больше не менее интересного в памяти, о чем мы и поговорим на занятии. 📚После вебинара еще больше технологий и инструментов Java-разработки на онлайн-курсе «Java Developer. Professional» для программистов с опытом от 1 года. 📌Пройдите вступительный тест, чтобы зарегистрироваться на занятие: https://otus.pw/7aXn/
  • Реклама

  • Библиотека джависта

    #вопросы_с_собеседований В чем разница между interrupted() и isInterrupted()? Механизм прерывания работы потока в Java реализован с использованием внутреннего флага, известного как статус прерывания. Прерывание потока вызовом Thread.interrupt() устанавливает этот флаг. Методы Thread.interrupted() и isInterrupted() позволяют проверить, является ли поток прерванным. Когда прерванный поток проверяет статус прерывания, вызывая статический метод Thread.interrupted(), статус прерывания сбрасывается. Нестатический метод isInterrupted() используется одним потоком для проверки статуса прерывания у другого потока, не изменяя флаг прерывания.
  • Библиотека джависта

    Команде VK Звонков очень нужны Java-разработчики: команда объявляет о Weekend Offer. Всего за одни выходные вы можете получить не только оффер, но в дальнейшем большой опыт взаимодействия с другими командами и навыки из разных направлений работы. Просто подайте заявку до 9 сентября на сайте и там же узнайте больше о предстоящих вызовах. Уже 10 и 11 сентября можно пообщаться с руководителем команды бэкенда VK Звонков Алексеем Шпагиным и пройти собеседования, по результатам которых выберут лучших. Успехов! Подать заявку: https://vk.com/javaoffer
  • Библиотека джависта

    🔥Прокачайте свои навыки разработки на Java! 5 сентября в 20:00 пройдет открытый урок «Не хипом единым живёт Java» с Виталием Куценко, ведущим Java-разработчиком в RND. Когда говорим про память в Java, то чаще всего вспоминают Heap и Garbage Collector. Но у нас есть больше не менее интересного в памяти, о чем мы и поговорим на занятии. 📚После вебинара еще больше технологий и инструментов Java-разработки на онлайн-курсе «Java Developer. Professional» для программистов с опытом от 1 года. 📌Пройдите вступительный тест, чтобы зарегистрироваться на занятие: https://otus.pw/7aXn/