Проверка четности или нечетности числа без использования оператора %
Хотя этот трюк не намного лучше, чем использование оператора %, но иногда он все-таки более эффективен (с большими числами).
Метод trimToSize()
Метод trimToSize() класса ArrayList в Java обрезает емкость экземпляра ArrayList до текущего размера списка. Этот метод используется для обрезки экземпляра ArrayList по числу содержащихся в нем элементов.
Полезные и неизвестные библиотеки Java
Из этой статьи вы узнаете о некоторых не очень известных, но полезных библиотеках Java.
Смотреть статью
Ветвление switch
В Java существует два основных типа ветвлений: if...else и switch. Первый тип проверят некое условие и если оно верно — выполняет код.
В свою очередь switch получает на вход проверяемое значение и сравнивает его с перезаписанными данными. Если какой-то случай case совпадает, то JVM выполняет соответствующий код.
Отличительной особенностью switch есть то, что все его условия статические и компилируются сразу в байткод.
#для_начинающих
Метод compareTo()
Метод compareTo()
используется для сравнения двух объектов. Обычно он применяется к объектам, реализующим интерфейс Comparable
, чтобы определить их относительный порядок. Вот как обычно выглядит сигнатура метода compareTo()
:
int compareTo(T obj)
T
— это тип объектов, с которыми сравнивается текущий объект. Метод возвращает отрицательное целое число, ноль или положительное целое число в зависимости от того, как текущий объект сравнивается с переданным объектом obj.obj
.obj
.obj
.6 февраля в 18:00 состоится открытый урок «Java Concurrency на практике», где научим:
• Эффективно использовать коллекции в многопоточном окружении.
• Применять различные синхронизаторы для управления потоками.
• Анализировать thread dump'ы для выявления и устранения проблем многопоточности.
Урок будет полезен для опытных Java-разработчиков, особенно Senior уровня, которые хотят углубить знания в области многопоточности, а также повысить эффективность и безопасность кода при работе с коллекциями и синхронизаторами.
Ведущий – Роман Оборин, Senior Software Engineer.
Опыт программирования на Java — 6 лет.
Коммерческий опыт — 10 лет.
Ex-разработчик в Tesco, BNP paribas, Natera.
Это первая лекция курса «Senior Java Developer» от HeadBridge.
Желающие могут присоединиться к действующим студентам, оценить качество и уровень преподаваемого материала, задать интересующие вопросы.
Больше – в прямом эфире!
Регистрация по ссылке: https://clck.ru/38YYU5
После открытого урока будет последняя возможность поступить на обучение в первом потоке 2024 года. Студентам, прошедшим аттестацию, гарантируем выход на реальное собеседование для Senior разработчика с ЗП от 300.000₽.
Стоимость индивидуальна и зависит от необходимых знаний. Доступна оплата в рассрочку.
Реклама. ООО "Платформа непрерывного обучения" ИНН 7839405924
erid: 2VtzqvA5thM
🧑💻 Этичный Хакер — канал, в котором вас научат кибербезопасности и хакингу с нуля.
➖OSINT: руководство для самых маленьких
➖Социальная инженерия. 10 человеческих слабостей, которые помогут управлять людьми
➖Пентест сайта. 12 шагов
➖Интервью с владельцем группировки KILLNET (скоро выйдет)
Присоединяйся к крупнейшему в СНГ комьюнити хакеров — /channel/hack_less
Получение обратного массива
Используем библиотеку Apache Commons Lang.
Библиотека Apache Commons Lang представляет собой набор служебных классов для упрощения работы с классами пакета java.lang.*.
#вопросы_с_собеседований
Назовите основные свойства транзакции.
Атомарность (atomicity) гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной.
Согласованность (consistency). Транзакция, достигающая своего нормального завершения и, тем самым, фиксирующая свои результаты, сохраняет согласованность базы данных.
Изолированность (isolation). Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её результат.
Долговечность (durability). Независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу.
Камерный митап для мобильных разработчиков, где каждый может предложить свой кейс для обсуждения по трем трекам: iOS, Android, Flutter.
Участники митапа — техлиды, руководители разработки и ведущие мобильные разработчики из команд Яндекс Go и Яндекс Про. В завершении вечера afterparty — нетворкинг, настолки, вкусная еда и напитки.
Место встречи: Москва-Сити, башня «Око»
Дата и время: 15 февраля, 18:30
Бесплатно. Количество мест ограничено. Регистрация обязательна
Подробнее
Реклама. ООО "ЯНДЕКС.ТАКСИ". ИНН 7704340310.
Какие подклассы класса Writer вы знаете, для чего они предназначены?
• Writer
— абстрактный класс, описывающий символьный вывод;
• BufferedWriter
— буферизованный выходной символьный поток;
• CharArrayWriter
— выходной поток, который пишет в символьный массив;
• FileWriter
— выходной поток, пишущий в файл;
• FilterWriter
— абстрактный класс, предоставляющий интерфейс для классов-надстроек;
• OutputStreamWriter
— выходной поток, транслирующий байты в символы;
• PipedWriter
— выходной канал;
• PrintWriter
— выходной поток символов, включающий методы print()
и println()
;
• StringWriter
— выходной поток, пишущий в строку;
Узнаем размер каталога с помощью Java
Размер файлов в Java можно получить с помощью класса File. Встроенная функция 'fileName.length()' используется для определения размера файла в байтах.
Каталог может содержать N файлов, для расчета размера каталога требуется суммирование размеров всех файлов.
Подробнее можно посмотреть здесь.
Как эффективно обрабатывать данные в высоконагруженных проектах?
Расскажет опытный эксперт на бесплатном практическом уроке «Асинхронная обработка данных и ее использование в высоконагруженных проектах» от OTUS.
На вебинаре разберём:
- применение асинхронной обработки;
- архитектуру прототипа;
- узкие места прототипа.
📅 Занятие пройдёт 15 февраля в 20:00 мск и будет приурочено к старту курса «Highload Architect». Доступна рассрочка на обучение!
🌐 Для бесплатного участия регистрируйтесь прямо сейчас: https://otus.pw/kRx6/?erid=LjN8K3xwh
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Финтех-команда, разрабатывающая передовую брокерскую платформу, ищет Senior Java Developer. Мы выводим нашего брокера на новый уровень и создаём решения, способные выдержать любую нагрузку и обеспечить доступность сервиса миллионам клиентов. Мы не поддерживаем legacy и полностью переосмысливаем все старые процессы 💻
Тебе необходимо будет писать красивый и эффективный код, разрабатывать архитектуру, писать unit-тесты.
Что мы ждём от кандидата:
•опыт от 3-х лет;
•Java 8+;
•знание Spring Framework, XML/JSON;
•опыт написания unit-тестов, k8s/OpenShift;
•опыт работы с реляционными БД.
Большим преимуществом будет, если вы понимаете, как устроен бизнес глобальных рынков.
Откликайся на вакансию по ссылке 👌
Реклама. Рекламодатель ПАО Сбербанк
На связи админ! Я тут перенес в телеграм бота обновленный на самых последних данных GPT4, который также способен работать с картинками. Если вы искали такого помощника, то переходите и тестируйте его бесплатно 1 день. Далее цена за месяц будет в 3 раза дешевле, чем на офицальном сайте. Пользуйтесь: @Gpt4_NeuroBot
Читать полностью…Какие основные ограничения действуют на статические и “переменные” методы?
Как я и сказал ранее, основное ограничение обычного метода в том, что всегда должен быть некоторый экземпляр, у которого данный метод будет вызываться. А вот статический метод этого не требует, но он и не может ссылаться на ссылку this — на элементы текущего объекта — поскольку текущего объекта для него не существует.
Самый необычный канал про Java, подписывайся – /channel/java_secrets 📲
Будь в курсе последних тенденций, лучших практик и отраслевых секретов Java.
Канал Секреты Java поможет тебе улучшить свой путь разработки Java.
Java-разработчики, вас зовут в Тинькофф
Участвуйте в Java Weekend Offer, если ваш опыт больше 3 лет. Пройдите все этапы собеседования за выходные и, если все понравится, получите оффер.
Сможете решать сложные задачи, расти в сильной команде, работать на топовом стеке и пользоваться бенефитами.
Оставьте заявку до 14 февраля
АО «Тинькофф Банк», ИНН 7710140679
Перечислите принципы, которым вы следуете в многопоточном программировании?
При написании многопоточных программ следует придерживаться определённых правил, которые помогают обеспечить достойную производительность приложения в сочетании с удобной отладкой и простотой дальнейшей поддержки кода.
• Всегда давайте значимые имена своим потокам. Процесс отладки, нахождения ошибок или отслеживание исключения в многопоточном коде – довольно сложная задача. OrderProcessor
, QuoteProcessor
или TradeProcessor
намного информативнее, чем Thread1
, Thread2
и Thread3
. Имя должно отражать задачу, выполняемую данным потоком.
• Избегайте блокировок или старайтесь уменьшить масштабы синхронизации. Блокировка затратна, а переключение контекста ещё более ресурсоёмко. Пытайтесь избегать синхронизации и блокировки насколько это возможно, и организуйте критическую секцию в минимально необходимом объёме. Поэтому синхронизированный блок всегда предпочительней синхронизированного метода, дополнительно наделяя возможностью абсолютного контроля над масштабом блокировки.
• Обрабатывайте прерывание потока с особой тщательностью. Нет ничего хуже оставшегося заблокированным ресурса или системы в неконстистентном, по причине неподтверждённой транзакции, состоянии.
• Помните об обработке исключений. Выброшенные InterruptedException
должны быть адекватно обработаны, а не просто подавлены. Так же не стоит пренебрегать Thread.UncaughtExceptionHandler
. При использовании пула потоков необходимо помнить, что он зачастую просто «проглатывает» исключения. Так, если вы отправили на выполнение Runnable
нужно обязательно поместить код выполнения задачи внутрь блока try-catch
. Если в очередь пула помещается Callable
, необходимо удостоверится, что результат выполнения всегда изымается помощью блокирующего get()
, чтобы в случае возникновения существовала возможнотсь заново выбросить произошедшее исключение.
• Между синхронизаторами и wait()
и notify()
следует выбирать синхронизаторы. Во-первых, синхронизаторы, типа CountDownLatch
, Semaphore
, CyclicBarrier
или Exchanger
упрощают написание кода. Очень сложно реализовывать комплексный управляющий поток, используя wait()
и notify()
. Во-вторых, эти классы написаны и поддерживаются настоящими мастерами своего дела и есть шанс, что в последующих версиях JDK
они будут оптимизированы изнутри или заменены более производительной внешней реализацией.
• Почти всегда использование Concurrent сollection
выгоднее использования Synchronized сollection
, т.к. первые более современны (используют все доступные на момент их написания новшества языка) и масштабируемы, чем их синхронизированые аналоги.
Что такое «сессия»?Сессия
— это сеанс связи между клиентом и сервером, устанавливаемый на определенное время. Сеанс устанавливается непосредственно между клиентом
и веб-сервером
в момент получения первого запроса к веб-приложению
. Каждый клиент устанавливает с сервером свой собственный сеанс, который сохраняется до окончания работы с приложением.
Какие два класса не наследуются от Object?
Ответ:
Не ведитесь на провокации, нет таких классов: все классы прямо или через предков наследуются от класса Object!
Статья, которая 100% будет полезна Java разработчикам, планирующим перейти на виртуальные потоки!
Говорим о важной фиче — виртуальных потоках Java 21. Именно благодаря ей синхронный код становится эффективным! Как это работает, какие есть подводные камни, и из-за чего ваше приложение может зависнуть: рассказали подробно и с наглядными примерами в материале.
Познакомиться с ним можно по ссылке прямо сейчас
#вопросы_с_собеседований
Можно ли так реализовать метод equals?
Нельзя, так как метод hashCode() не гарантирует уникальность значения для каждого объекта.
Но для сравнения экземпляров объекта Object
такой метод допустим, так как там хешкод вычисляется на основании использовании адреса объекта в памяти, поэтому он уникален для разных объектов.
new vs valueOf
Старайтесь всегда использовать метод valueOf
вместо конструктора в стандартных классах-оболочках примитивных типов, кроме тех случаев, когда вам нужно конкретно выделить память под новое значение. Сейчас объясню, почему.
Все оболочки, кроме чисел с плавающей точкой, от Byte до Long, имеют кэш. По умолчанию этот кэш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кэша. Значение из кэша достается в 3.5 раза быстрее, чем при использовании конструктора, плюс идёт экономия памяти.
Помимо этого, наиболее часто используемые значения могут также быть закэшированы компилятором и виртуальной машиной.
🔥Незаменимый инструмент для автоматизации тестирования на Java
👉Освойте его на бесплатном открытом уроке «Возможности тестирования через Spring Contract Testing» от OTUS.
📖На вебинаре вы вместе с опытным экспертом познакомитесь с возможностями тестирования через Spring Contract Testing и получите ответы на любые свои вопросы по теме.
📆Занятие пройдёт 31 января в 20:00 мск и будет приурочено к старту курса «Java QA Engineer. Professional». Доступна рассрочка на обучение!
💪Пройдите бесплатный тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: Пройти тест
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8K3iQd
Какие классы позволяют ускорить чтение/запись за счет использования буфера?
• BufferedInputStream(InputStream in)
/ BufferedInputStream(InputStream in, int size)
,
• BufferedOutputStream(OutputStream out)
/BufferedOutputStream(OutputStream out, int size)
,
• BufferedReader(Reader r)
/BufferedReader(Reader in, int sz),
• BufferedWriter(Writer out)
/BufferedWriter(Writer out, int sz)
Какие методы класса File вы знаете?
Наиболее используемые методы класса File:
• boolean createNewFile()
: делает попытку создать новый файл;
• boolean delete()
: делает попытку удалить каталог или файл;
• boolean mkdir()
: делает попытку создать новый каталог;
• boolean renameTo(File dest)
: делает попытку переименовать файл или каталог;
• boolean exists()
: проверяет, существует ли файл или каталог;
• String getAbsolutePath()
: возвращает абсолютный путь для пути, переданного в конструктор объекта;
• String getName()
: возвращает краткое имя файла или каталога;
• String getParent()
: возвращает имя родительского каталога;
• boolean isDirectory()
: возвращает значение true
, если по указанному пути располагается каталог;
• boolean isFile()
: возвращает значение true
, если по указанному пути находится файл;
• boolean isHidden()
: возвращает значение true
, если каталог или файл являются скрытыми;
• long length()
: возвращает размер файла в байтах;
• long lastModified()
: возвращает время последнего изменения файла или каталога;
• String[] list()
: возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге;
• File[] listFiles()
: возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге.
Алгоритм Кнута – Морриса – Пратта
Алгоритм КМП осуществляет поиск текста по заданному шаблону. В этом поиске сначала компилируется заданный шаблон. Компилируя шаблон, мы пытаемся найти префикс и суффикс строки шаблона. Это поможет в случае несоответствия – не придётся искать следующее совпадение с начального индекса.
Вместо этого мы пропускаем часть текстовой строки, которую уже сравнили, и начинаем сравнивать следующую. Необходимая часть определяется по префиксу и суффиксу, поэтому известно, какая часть уже прошла проверку и может быть безопасно пропущена.
#для_продвинутых
Процедурное программирование
Процедурное программирование в Java основывается на использовании процедур (функций) для разделения программы на отдельные блоки кода, которые могут быть вызваны из других частей программы. Процедурное программирование подразумевает последовательное выполнение инструкций в программе, где основными элементами являются процедуры и данные.
В Java процедуры реализуются с помощью методов. Методы в Java объявляются внутри классов и могут выполнять определенные действия или возвращать результаты. Они могут принимать аргументы и иметь локальные переменные.
#для_продвинутых