AccessibleObject AccessibleObject
— это базовый класс для объектов Field
, Method
и Constructor
. Он позволяет помечать рефлектируемый объект как подавляющий проверки контроля доступа языка Java по умолчанию при его использовании.
Контроль доступа в Java языке запрещает:
—Использование приватных членов за пределами их класса верхнего уровня;
— Членов пакета за пределами их пакета;
— Защищенных членов за пределами их пакета или подклассов;
— Публичных членов за пределами их модуля, если они не объявлены в экспортируемом пакете, и пользователь не читает их модуль.
Важно: использование AccessibleObject может привести к проблемам безопасности, поэтому его следует использовать с осторожностью.
#для_продвинутых
OutOfMemoryError
«OutOfMemoryError» ошибка в Java, указывающая на то, что приложению не хватило памяти для выполнения операции. Это может произойти, когда программа пытается выделить больше памяти, чем доступно в куче (heap), которая используется для хранения объектов и данных во время выполнения Java-приложения.
В результате JVM (Java Virtual Machine) больше не может выделить дополнительную память, и возникает ошибка «OutOfMemoryError».
#для_начинающих
Лямбды как параметры и результаты методов
В Java лямбда-выражения — это компактный способ представления анонимных функций. Они часто используются для передачи функциональности как параметров в методы и возвращаются в качестве результатов методов, когда требуется работать с функциональным программированием.
#для_продвинутых
Уже слышали про GitVerse?
Это новая платформа для совместной разработки и хостинга кода от СберТеха. Сервис полностью российский – работать с ним удобно, безопасно и надежно.
С GitVerse разработчики смогут создавать проекты с открытым и закрытым кодом, переносить репозитории с других площадок, привлекать новых участников и назначать задачи.
А еще:
- делать код-ревью и объединять изменения;
- оптимизировать рабочий процесс: назначать ответственных за ревью и отслеживать результат;
- получать запросы на слияние и объединять ветки;
- подписываться на обновления пользователей и репозиториев и оставаться в курсе активностей команды;
- общаться с ИТ-сообществом, узнавать новости и читать материалы про open source.
Вся функциональность GitVerse доступна разработчикам бесплатно.
Зарегистрируйтесь и откройте возможности GitVerse уже сейчас.
😨Вы видели этот хардовый тест для Java QA Engineer'ов (не для новичков)? Его проходят всего 30%
👉 Пройдите тест из 20 вопросов онлайн-курса «Java QA Engineer. Professional» и узнайте, осилите ли вы обучение в OTUS.
🟢 Пройти тест: https://otus.pw/2brK/
💣Все, кто успешно пройдет тест, получит доступ к записям уроков курса для знакомства с форматом обучения и спец.цену на курс.
💻 За 4 месяца обучения на курсе вы освоите:
— популярные инструменты автоматизации
— полный спектр технологий тестирования на Java
— ключевые инструменты автоматизации UI- и API-тестирования
— навыки работы с RestAssured и JsonSchemaValidator
— навыки работы с Appium
— многопоточное тестирование с помощью Selenoid
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8JxHS6
Прямой обход дерева
Прямой обход дерева (pre-order traversal) — это один из способов обхода бинарного дерева. В этом способе сначала посещается корневой узел, затем левое поддерево и затем правое поддерево. Прямой обход широко используется для вывода структуры дерева и выполнения операций на каждом узле в нужном порядке.
#для_продвинутых
Сбер запускает масштабный проект и ищет Java-разработчика 😉
Присоединяйся к команде и создавай с нуля ERP-систему на современном стеке Platform V для учёта, планирования хозяйственной деятельности и расчёта заработной платы.
В работе используем:
⎯ Java 17, Spring Framework
⎯ Микросервисную архитектуру
⎯ Service Mesh, Kafka
⎯ WildFly, PostgreSQL, приложения с открытым исходным кодом
⎯ Сервисы Jenkins, Ansible, Git/BitBucket, Nexus, Jira, Confluence
⎯ Плечо друга и ценные советы ИТ-лидера
Какие задачи будут в планере:
• Участие в полном цикле разработки компонентов и сервисов с нуля
• Проектирование и разработка backend, API
• Оптимизация производительности продуктов и сервисов
• Внедрение масштабного продукта класса ERP для учёта и планирования хозяйственной деятельности в банке (и не только…)
• А ещё разработка коммерческой версии продуктов и сервисов
Расшифруй сообщение на картинке и откликайся 💚
Стек-трейс
Стек-трейс (stack trace) представляет собой список вызовов методов в обратном хронологическом порядке, начиная с метода, в котором произошло исключение. Стек-трейс позволяет отследить, какие методы были вызваны перед возникновением исключения, и предоставляет информацию о местоположении, где произошло исключение.
#для_продвинутых
Как написать собственное исключение?
Для создания собственного исключения нужно создать новый класс, который наследуется от класса Exception
или RuntimeException
.
В этом примере мы создаем класс CustomException
, который наследуется от класса Exception
.
Далее, мы используем пользовательское исключение в методе myMethod()
класса MyClass
. Если выполняется определенное условие, мы выбрасываем исключение CustomException
с сообщением об ошибке.
#для_начинающих
Рассмотрим задачу по созданию простого сервиса для управления задачами (To-Do list). Ваша задача — написать простую программу, которая позволяет добавлять задачи, удалять задачи и выводить список текущих задач.
Мы импортируем две библиотеки. ArrayList
используется для хранения списка задач, а Scanner
— для ввода данных с клавиатуры. Затем определяем класс ToDoList
и объявляем переменную tasks
типа ArrayList
, которая будет хранить наши задачи.
Затем создаем объект Scanner для считывания ввода с клавиатуры и бесконечный цикл для взаимодействия с пользователем.
Выводим меню с четырьмя действиями для пользователя, читаем выбор пользователя с клавиатуры и в зависимости от выбора пользователя, программа вызывает соответствующий метод. Этот метод запрашивает у пользователя новую задачу, добавляет её в список и выводит сообщение.
Таким образом, программа предоставляет простой интерфейс для взаимодействия с To-Do list, позволяя пользователю добавлять, удалять и просматривать задачи.
29 февраля 12:00 МСК
Вебинар «Надежное облако для команды разработки: как увеличить маржинальность проектов»
❓ Как облачные технологии могут стать одним из дополнительных источников заработка для команды разработки
❓ Как вы можете повысить маржинальность проектов ваших клиентов, расположив их в облаке ITGLOBAL.COM
Приглашаем разработчиков приложений, сервисов, сложных AI-проектов на вебинар, посвященный размещению проектов разработки в облачной инфраструктуре.
Вебинар будет полезен вам, если:
🔹 вы реализуете проекты по разработке;
🔹 вам требуются свободные ресурсы для тестирования и запусков;
🔹 вы хотите сократить time-to-market ваших проектов;
🔹 вам требуются мощные ресурсы для работы с AI, HPC и графикой;
🔹 вам важно снизить издержки на инфраструктуру для разработки и production.
🔗 Регистрация
Стать сотрудником Яндекса быстрее и проще, чем кажется. Участвуйте в днях быстрого найма: решите тестовое, пройдите несколько секций собеседования и получите офер за несколько дней.
Ближайшее мероприятие:
• 23-24 марта — Fast Track для С++ разработчиков, офер за 2 дня в команды Фудтеха Яндекса.
Зарегистрироваться
Java Developer — мастхев для любого джависта
За ручку проведём тебя к первому офферу, расскажем о сложных вещах простыми словами и научим смеяться с айтишных мемов.
👉🏻 Подписывайся и прокачивай свои навыки
Реализуйте в Java класс, представляющий стек (stack), который поддерживает операции push, pop и получение минимального элемента (getMin) — все операции должны выполняться за константное время (O(1)). Напишите код и объясните, как вы решите эту задачу.
Объяснение:
В этом коде используется два стека: stack
для хранения элементов стека и minStack
для хранения минимальных элементов.
В методе push
, при добавлении нового элемента в стек проверяется, является ли он минимальным. Если да, то он также добавляется в minStack
.
В методе pop
, при извлечении элемента из стека проверяется, является ли этот элемент минимальным. Если да, то он также удаляется из minStack
.
Методы top
и getMin
просто возвращают верхний элемент стека и минимальный элемент соответственно.
Сложность:
Временная сложность для всех операций: O(1). Все операции выполняются за константное время, так как мы используем два стека и не производим поиск по всему стеку для поиска минимального элемента.
Пространственная сложность: O(n). Где n — количество элементов в стеке. Мы используем два стека, но их размер ограничен размером стека.
Как в Java реализуется принцип "Double-Checked Locking" в контексте создания экземпляров синглтонов и какие особенности данного подхода нужно учитывать, чтобы избежать проблем с многопоточностью?
В Java, "Double-Checked Locking" используется для минимизации затрат на синхронизацию при создании экземпляров синглтонов в многопоточных средах. Этот подход включает двойную проверку: сначала проверяется, был ли уже создан экземпляр без блокировки, а затем, если экземпляр не создан, происходит блокировка и повторная проверка. Важно использовать ключевое слово volatile для переменной экземпляра синглтона, чтобы обеспечить корректную работу в многопоточной среде из-за проблем с упорядоченностью чтения/записи в Java Memory Model.
Привет! Это Podlodka Crew — организатор онлайн IT-конференции по различным технологиям.
Уже 11 марта запускаем четвёртый сезон звёздной Podlodka Java Crew с Филиппом Дельгядо, Гришей Кошелевым, Владимиром Картяевым и другими топовыми спекерами. Тема — наболевшая: интеграции между сервисами.
Если вы знакомы с болью интеграций не понаслышке, то ловите подробности:
🌟Kafka и Open-API. Разберём популярный подход к проектированию серверных приложений API-First. Рассмотрим программный продукт, доступный для серверных приложений, использующих брокеры сообщений.
🌟OAuth 2.0. Выясним, что лучше: взять готовое решение или реализовать собственный сервис. Обсудим подходы к реализации функционала и научимся встраивать двухфакторную авторизацию.
🌟Service Mesh. Погрузимся в реальные кейсы внедрения и деплоймента, поделимся опытом организации взаимодействия сервисов. Посмотрим на типичные проблемы и варианты их решения.
🌟GraphQL. На воркшопе раз и навсегда определим, когда и зачем он нужен, какие у него преимущества и недостатки. Обучимся версионировать схему и API. Объясним, как масштабировать GraphQL после внедрения. Бонус: разбор разных подходов на практических кейсах.
Это не все сессии грядущего сезона.
Больше подробностей и билеты забирайте на сайте:
https://podlodka.io/javacrew
Реклама. ИП Толстая Елена Петровна ИНН:507503278104, erid:2SDnjdSigqn
🔥 Годнота
Наткнулся на базу с 1700 вопросов с собеседований на Java разработчика. Фишка в том что просчитана вероятность с которой вопрос буден задан и есть примеры ответов. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам 😏
Ковариантность типов
Ковариантность типов — это вариантность типов в системе типов языка программирования. Ковариантность означает, что типы могут быть связаны отношением «родитель-потомок» в иерархии классов или интерфейсов, и этот относительный порядок сохраняется при передаче аргументов методам или возвращении значений из методов. Другими словами, ковариантность позволяет использовать подтип (потомок) вместо его родителя без необходимости явного приведения типов.
#для_начинающих
Монитор
Монитор представляет собой механизм, который обеспечивает синхронизированный доступ к критическим секциям кода, что позволяет избежать состояния гонки (race condition) и обеспечивает координацию между потоками.
Ключевое слово synchronized
может быть применено к методам или блокам кода. Когда метод или блок кода помечен как synchronized
, только один поток может выполнить этот код или метод в определенный момент времени. Если другой поток попытается войти в синхронизированный блок или вызвать синхронизированный метод, он будет ожидать, пока первый поток не завершит выполнение.
#для_продвинутых
Мёртвая нить
Мёртвая нить (deadlock) означает ситуацию, когда две или более нити (потока исполнения) блокируются и ожидают ресурсы, которые удерживают друг друга, что приводит к тому, что ни одна из них не может продолжить свою работу. В итоге программа оказывается в застойном состоянии, так как нити блокируют друг друга и не могут разблокироваться без внешнего вмешательства.
Чтобы избежать мёртвой нити, следует стремиться к тому, чтобы нити блокировали ресурсы в одном и том же порядке. Если это невозможно, можно использовать техники, такие как использование метода tryLock()
из java.util.concurrent.locks.Lock
, которые позволяют более гибко управлять блокировками и избегать мёртвой нити.
#для_начинающих
Checked exceptions
Checked exceptions — это исключения, которые должны быть обработаны или объявлены в сигнатуре метода при помощи throws
ключевого слова. Они обычно представляют собой ситуации, которые программист может предвидеть и обработать. Примеры таких исключений включают: IOException
, SQLException
, FileNotFoundException
.
Если вы вызываете метод, который объявляет checked exception, вы должны либо обработать это исключение с помощью конструкции try-catch
, либо продолжить передачу исключения вверх по стеку вызовов.
#для_начинающих
Абстрактные классы
Абстрактные классы — это классы, которые не могут быть инстанциированы напрямую, то есть нельзя создать объект абстрактного класса при помощи оператора new. Они предназначены для обеспечения базовой структуры и функциональности для других классов, которые наследуются от них. Абстрактные классы представляют собой в некотором роде «заготовки» для подклассов, указывая на общие атрибуты и методы, которые они должны реализовать.
#для_начинающих
Сделайте новый шаг в своей карьере: приглашаем на курс по 1C разработке мобильного приложения
Знания и опыт разработки мобильных приложений на 1С могут открыть возможности карьерного роста в сфере разработки ПО, особенно там, где 1С широко используется. Это станет ценным навыком, который отличает вас от других 1С разработчиков.
Именно этому в Слёрме начнут учить уже в феврале — на курсе "1С разработчик: мобильное приложение + интеграция".
🌀 Вы научитесь создавать и интегрировать мобильные приложения для бизнес-решений на платформе 1С;
🔮 На реальных примерах разберёте создание HTTP-сервисов с помощью RPC;
☕️Создадите мобильное приложение с расширенным функционалом.
Курс идет 6 недель в формате потока:
➕ Все задания и итоговый проект проверяют спикеры курса и готовят подробное код-ревью.
➕ На время потока будет создан чат. В нём вы сможете задать любой вопрос по разработке на 1С и оперативно получить ответ.
➕ На протяжении курса вы будете разрабатывать мобильное приложение на платформе «1С: Предприятие» и интегрировать сервисы API.
Узнать программу курса и записаться на поток вы можете по ссылке.
Реклама. ООО «Слёрм» г. Лиски, ОГРН 1193668020545
Готовы улучшить свое владение Java?
Присоединяйся к нашему каналу - /channel/java_secrets 📲
Свежие советы, лучшие практики, примеры кода и обсуждения, чтобы стать настоящим профессионалом в программировании на Java.
🫡 Повышай свой уровень!
ServletContextServletContext
— это интерфейс, который предоставляет методы для взаимодействия с контекстом сервлета. Контекст сервлета — это область, в которой работает сервлет, и предоставляет средства для обмена данными между сервлетами, а также для доступа к различным ресурсам, таким как файлы, базы данных и другие.
Некоторые из основных методов, предоставляемых интерфейсом ServletContext
, включают:getInitParameter
(String name): Возвращает значение инициализационного параметра сервлета, указанного по имени.getInitParameterNames()
: Возвращает имена всех инициализационных параметров сервлета.getAttribute
(String name): Возвращает значение атрибута, сохраненного в контексте сервлета по имени.setAttribute
(String name, Object object): Устанавливает значение атрибута в контексте сервлета.getRequestDispatcher
(String path): Возвращает объект RequestDispatcher, который используется для включения другого ресурса (например, другого сервлета или JSP-страницы) в текущий запрос.getRealPath
(String path): Преобразует виртуальный путь в абсолютный путь на сервере.
#для_продвинутых
PushbackInputStreamPushbackInputStream
— это класс, который обеспечивает возможность «откатывать» (push back) один или несколько байтов в поток ввода. Этот класс является подклассом FilterInputStream
и добавляет функциональность для отката байтов.
Когда вы считываете байты из PushbackInputStream
, вы можете использовать метод unread
, чтобы вернуть один или несколько байтов обратно в поток. Это может быть полезно, например, если вы прочитали несколько байтов и поняли, что они не являются частью ожидаемых данных, и вы хотите вернуть их обратно для последующего считывания.
#для_продвинутых
Метод newSingleThreadExecutor()
Метод newSingleThreadExecutor()
используется для создания ExecutorService
с единственным рабочим потоком. ExecutorService
предоставляет удобный способ управления выполнением задач в асинхронном режиме.
В примере выше создается ExecutorService
с одним рабочим потоком, и две задачи (task1 и task2) передаются на выполнение с использованием метода submit()
. Закрытие ExecutorService
выполняется с помощью метода shutdown()
, который гарантирует, что больше никакие задачи не будут приняты, и потоки будут завершены после завершения всех текущих задач.
#для_продвинутых
#вопросы_с_собеседований
Расскажите о принципе работы алгоритма сортировки QuickSort. Напишите Java-код для реализации этого алгоритма и объясните его эффективность. Также, укажите, какие могут быть проблемы с производительностью в некоторых случаях и как можно их решить.
Алгоритм QuickSort
относится к семейству алгоритмов быстрой сортировки. Он использует подход "разделяй и властвуй", разбивая массив на подмассивы, сортируя их и затем объединяя весь массив.quickSort
: Рекурсивная функция, которая разделяет массив и вызывает сама себя для подмассивов.partition
: Функция, которая определяет местоположение опорного элемента (pivot) и переставляет элементы так, чтобы элементы меньше pivot находились слева, а больше — справа.QuickSort
в среднем случае имеет сложность O(n log n), что делает его одним из самых эффективных алгоритмов сортировки. QuickSort
может показывать плохую производительность в случае уже отсортированных или почти отсортированных данных. Это может быть улучшено, выбирая разумные опорные элементы или переходя к другому алгоритму, например, Insertion Sort
, для небольших подмассивов.
Почему Map не наследуется от Collection?
Это связано с различиями в их целях и использовании. Интерфейс Collection представляет собой общие методы для работы с группой объектов, таких как добавление, удаление и проверка наличия элемента. Он ориентирован на работу с коллекциями объектов, где каждый объект является элементом коллекции.
Интерфейс Map, с другой стороны, представляет собой отображение ключей на значения. Он не рассматривает элементы коллекции как отдельные объекты, а предоставляет доступ к значению, связанному с определенным ключом. Это более общий и мощный подход, который не сводится к работе с отдельными элементами коллекции.
Интерфейс Map включает в себя методы для управления парами ключ-значение и обеспечивает эффективный доступ к значениям по ключу. По этим причинам он не является подтипом Collection. Однако, классы, реализующие интерфейс Map, часто предоставляют методы, которые позволяют работать с элементами коллекции или возвращают представление коллекции ключей, значений или записей (ключ-значение).
Таким образом, хотя Map и Collection предоставляют абстракции для работы с группой объектов, они решают разные задачи, и поэтому не существует иерархического отношения наследования между ними.
#для_продвинутых
✔️ Телеграм-канал Яндекса специально для разработчиков
Опенсорс-проекты, которые меняют мир. Большие программы для поддержки белых хакеров. Наука в ML и резиденции для молодых учёных. Подборки статей и видео, которыми вдохновляются инженеры Яндекса. Говорим об этом в канале Yandex for Developers.
Подписывайтесь 👉 @Yandex4Developers