Привет, друзья! 👋
Мы готовим статью о том, что делать, если вы наврали в резюме, и нам нужна ваша помощь! 🤔 Поделитесь своим опытом и мнением, а самые интересные и полезные советы мы обязательно включим в нашу статью.
❓ Сталкивались ли вы когда-нибудь с ситуацией, когда пришлось преувеличить свои навыки в резюме? Как вы с этим справились?
❓ Какой, по вашему мнению, самый эффективный способ исправить ситуацию, если вы немного приукрасили свое резюме?
❓ Как вы думаете, какая «ложь» в резюме может быть простительной, а какая — абсолютно недопустимой?
Не стесняйтесь делиться своими историями и мнениями в комментариях! 💬 Ваш опыт может помочь другим избежать подобных ситуаций или найти выход, если они уже в них оказались. Спасибо за участие!
Мы готовим статью о том, что делать, если вы наврали в резюме, и нам нужна ваша помощь! 🤔 Поделитесь своим опытом и мнением, а самые интересные и полезные советы мы обязательно включим в нашу статью.
❓ Сталкивались ли вы когда-нибудь с ситуацией, когда пришлось преувеличить свои навыки в резюме? Как вы с этим справились?
❓ Какой, по вашему мнению, самый эффективный способ исправить ситуацию, если вы немного приукрасили свое резюме?
❓ Как вы думаете, какая «ложь» в резюме может быть простительной, а какая — абсолютно недопустимой?
Не стесняйтесь делиться своими историями и мнениями в комментариях! 💬 Ваш опыт может помочь другим избежать подобных ситуаций или найти выход, если они уже в них оказались. Спасибо за участие!
Статья подробно объясняет, как использовать CompletableFuture в Java для создания асинхронного и параллельного кода. В ней рассматриваются ключевые аспекты, такие как создание, объединение задач, обработка исключений и жизненный цикл CompletableFuture. Если собираетесь освоить передовые техники работы с асинхронными операциями в Java и значительно улучшить производительность своего кода, эта статья будет полезна.
Читать статью.
Please open Telegram to view this post
VIEW IN TELEGRAM
Concurrency Deep Dives
A Guide to CompletableFuture - Concurrency Deep Dives
An in-depth practical guide to Java's CompletableFuture, covering all its concepts. Also contains insights on how it works internally.
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
💪🛠️ Прокачай свой бэкенд: 9 инструментов, которые стоит знать
От браузерной ИИ-песочницы PostgreSQL до суперскоростного валидатора email — обзор новейших инструментов, которые упростят вашу работу и повысят продуктивность.
Читать статью
От браузерной ИИ-песочницы PostgreSQL до суперскоростного валидатора email — обзор новейших инструментов, которые упростят вашу работу и повысят продуктивность.
Читать статью
Forwarded from Java jobs — вакансии для java-разработчиков
#дайджест #javadevjob
Вакансии Java разработчиков уровня Junior
▪️Java developer
Самара. Тим — системный интегратор полного цикла
Подробнее
▪️Java-разработчик
Москва. Gridnine Systems — IT решения, повышающие эффективность бизнеса наших клиентов
Подробнее
Вакансии Java разработчиков уровня Middle
▪️Java разработчик
Москва. DIGINETICA — разработка сфере искусственного интеллекта
Подробнее
▪️Backend-разработчик
Екатеринбург. Русофт — разработка, системная интеграция, инфраструктурных решений
Подробнее
Вакансии Java разработчиков уровня Senior
▪️Java-разработчик
Санкт-Петербург. НПП ТЕЛДА — разработка индивидуальных бизнес-решений
Подробнее
▪️Java Developer
Удаленка. TIQUM — разработка и внедрение ПО
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии Java разработчиков уровня Junior
▪️Java developer
Самара. Тим — системный интегратор полного цикла
Подробнее
▪️Java-разработчик
Москва. Gridnine Systems — IT решения, повышающие эффективность бизнеса наших клиентов
Подробнее
Вакансии Java разработчиков уровня Middle
▪️Java разработчик
Москва. DIGINETICA — разработка сфере искусственного интеллекта
Подробнее
▪️Backend-разработчик
Екатеринбург. Русофт — разработка, системная интеграция, инфраструктурных решений
Подробнее
Вакансии Java разработчиков уровня Senior
▪️Java-разработчик
Санкт-Петербург. НПП ТЕЛДА — разработка индивидуальных бизнес-решений
Подробнее
▪️Java Developer
Удаленка. TIQUM — разработка и внедрение ПО
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
samara.hh.ru
Вакансия Junior Java developer в Самаре, работа в компании TEAMSCORE (вакансия в архиве c 29 августа 2024)
Зарплата: не указана. Самара. Требуемый опыт: не требуется. Полная занятость. Дата публикации: 26.08.2024.
Эта статья представляет 10 Java-библиотек, которые могут кардинально изменить ваш подход к программированию. Вы узнаете, как такие инструменты, как Lombok, Jackson и Apache Commons, могут существенно упростить ваш код, улучшить его производительность и сделать разработку более эффективной. Если вы хотите узнать, как сделать свой код чище и функциональнее, эта статья станет отличным гидом в мир передовых Java-библиотек.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека программиста
☕📦 10 Java-библиотек, которые изменят твой код навсегда
Из этой статьи вы узнаете о ключевых возможностях 10 популярных библиотек для Java: работа с коллекциями, строками, JSON, логами, датами и временем и многое другое.
Используете ли вы VPN?
Anonymous Poll
14%
Нет, мне лень
29%
Очень редко по особым случаям
40%
Регулярно
17%
Почти не выключаю/каждый день
🔍 Что такое ElasticSearch
ElasticSearch — это распределенная поисковая система с открытым исходным кодом, которая позволяет быстро и эффективно обрабатывать и анализировать большие объемы данных. Она идеально подходит для приложений, требующих гибкости в поиске и высокой скорости обработки запросов. Благодаря интеграции с Kibana и Logstash, ElasticSearch становится мощным инструментом для мониторинга и анализа данных в реальном времени.
📌 Use cases:
▪️ Мгновенный поиск по большим объемам данных
▪️ Гибкая схема индексации и поиска
▪️ Легкость в масштабировании и интеграции
ElasticSearch — это распределенная поисковая система с открытым исходным кодом, которая позволяет быстро и эффективно обрабатывать и анализировать большие объемы данных. Она идеально подходит для приложений, требующих гибкости в поиске и высокой скорости обработки запросов. Благодаря интеграции с Kibana и Logstash, ElasticSearch становится мощным инструментом для мониторинга и анализа данных в реальном времени.
▪️ Мгновенный поиск по большим объемам данных
▪️ Гибкая схема индексации и поиска
▪️ Легкость в масштабировании и интеграции
Please open Telegram to view this post
VIEW IN TELEGRAM
Укажите верный порядок дефолтных портов для программ: Tomcat, PostgreSQL, Redis, Kafka
Anonymous Quiz
5%
5432, 9092, 8080, 6379
9%
8080, 6379, 5432, 9092
3%
9092, 6379, 8080, 5432
82%
8080, 5432, 6379, 9092
2%
6379, 9092, 8080, 5432
📶 Паттерны коммуникации в распределенных системах
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
👨💻 Подробнее читайте в статье.
📨 Материал взят из нашей еженедельной email-рассылки, посвященной бэкенду. Подпишитесь, чтобы быть в числе первых, кто получит дайджест.
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Вам наверняка понравится этот инструмент, если работаете с JSON 👇
Вложенные JSON-файлы часто сложно читать.
𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.
Также поддерживает YAML и XML.
Вложенные JSON-файлы часто сложно читать.
𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.
Также поддерживает YAML и XML.
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Что такое абстрактные классы?
Абстрактные классы — это классы, которые не могут быть инстанциированы напрямую, то есть нельзя создать объект абстрактного класса при помощи оператора new. Они предназначены для обеспечения базовой структуры и функциональности для других классов, которые наследуются от них. Абстрактные классы представляют собой в некотором роде «заготовки» для подклассов, указывая на общие атрибуты и методы, которые они должны реализовать.
Абстрактные классы — это классы, которые не могут быть инстанциированы напрямую, то есть нельзя создать объект абстрактного класса при помощи оператора new. Они предназначены для обеспечения базовой структуры и функциональности для других классов, которые наследуются от них. Абстрактные классы представляют собой в некотором роде «заготовки» для подклассов, указывая на общие атрибуты и методы, которые они должны реализовать.
Какое значение propagation позволяет выполнить метод в новом контексте транзакции, независимо от того, была ли начата транзакция ранее?
Anonymous Quiz
4%
SUPPORTS
73%
REQUIRES_NEW
12%
MANDATORY
11%
REQUIRED
Ситуация, когда несколько потоков пытаются одновременно читать и записывать общие данные, что приводит к непредсказуемым результатам.
Пример: Представьте, что два человека пытаются одновременно снять деньги с одного банковского счета. Без должной координации они могут снять больше денег, чем доступно на счете.
Ситуация, когда два или более потока застревают в ожидании друг друга для освобождения ресурсов, что приводит к тупиковой ситуации.
Пример: Два человека держат предметы, которые нужны друг другу, и оба ждут, пока другой первый отдаст свой предмет.
Ошибки, возникающие из-за неправильной обработки взаимодействия потоков, часто проявляющиеся как случайные проблемы.
Пример: Если два работника пишут в один и тот же файл без координации, их работа может перемешаться.
Основная проблема заключается в том, что сигнал на прерывание лишь уведомляет поток о необходимости остановки, но сам поток должен обработать этот сигнал и завершить свою работу самостоятельно.
Пример: Если вам нужно, чтобы рабочий остановился, вы посылаете ему сигнал "стоп". Но нет гарантий, что это случится.
Ситуация, когда разные потоки имеют устаревшее или несогласованное представление о разделяемой памяти.
Пример: Если один человек обновляет общий документ, а другие видят старую версию, они могут работать с неверной информацией.
Ситуация, когда несколько потоков конкурируют за один и тот же ограниченный ресурс, что приводит к задержкам.
Пример: Если несколько работников одновременно пытаются воспользоваться одним принтером, им приходится ждать своей очереди.
Ситуация, когда потоку постоянно отказывают в доступе к ресурсам из-за приоритета других потоков.
Пример: Если одного работника постоянно обходят вниманием в пользу других, он никогда не сможет выполнить свою работу.
Please open Telegram to view this post
VIEW IN TELEGRAM
Сравнение через equals() и ==
▪️ "==" используется для сравнения примитивных типов данных (например, int, char, boolean), проверяя, равны ли их значения. Однако, когда речь идет об объектах, "==" сравнивает их ссылки, то есть проверяет, указывают ли обе переменные на один и тот же объект в памяти.
▪️ Метод equals(), в свою очередь, предназначен для сравнения содержимого объектов. Это значит, что equals() проверяет, эквивалентны ли сами данные, хранящиеся в двух объектах, а не то, ссылаются ли они на одно и то же место в памяти.
Используйте == для сравнения примитивов и ссылок на объекты, когда вам важно знать, являются ли они одной и той же сущностью. Для сравнения содержимого объектов всегда применяйте equals().
▪️ "==" используется для сравнения примитивных типов данных (например, int, char, boolean), проверяя, равны ли их значения. Однако, когда речь идет об объектах, "==" сравнивает их ссылки, то есть проверяет, указывают ли обе переменные на один и тот же объект в памяти.
▪️ Метод equals(), в свою очередь, предназначен для сравнения содержимого объектов. Это значит, что equals() проверяет, эквивалентны ли сами данные, хранящиеся в двух объектах, а не то, ссылаются ли они на одно и то же место в памяти.
Используйте == для сравнения примитивов и ссылок на объекты, когда вам важно знать, являются ли они одной и той же сущностью. Для сравнения содержимого объектов всегда применяйте equals().
Please open Telegram to view this post
VIEW IN TELEGRAM
Этот метод используется для оптимизации больших наборов данных путем их постраничной передачи клиенту, что повышает отзывчивость сервиса и улучшает пользовательский опыт.
Этот подход предполагает отправку логов в буфер без блокировки и немедленное возвращение управления, вместо того чтобы записывать данные на диск при каждом вызове. Логи периодически сбрасываются на диск, что значительно снижает нагрузку на систему ввода-вывода.
Часто запрашиваемые данные могут храниться в кэше для ускорения их извлечения. Клиенты сначала проверяют кэш перед обращением к базе данных, а такие решения для хранения данных, как Redis, обеспечивают более быстрый доступ благодаря хранению в оперативной памяти.
Чтобы сократить время передачи данных, запросы и ответы можно сжимать, что ускоряет процессы загрузки и выгрузки.
Эта техника включает использование пула открытых соединений для управления взаимодействием с базой данных, что снижает накладные расходы, связанные с открытием и закрытием соединений каждый раз, когда требуется загрузить данные. Пул управляет жизненным циклом соединений для эффективного использования ресурсов.
Please open Telegram to view this post
VIEW IN TELEGRAM