Java Guru 🤓
13.2K subscribers
881 photos
16 videos
746 links
Канал с вопросами и задачами с собеседований!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrSQZ

Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Какая первая строка в этой программе станет причиной ошибки компиляции?
Anonymous Quiz
10%
6
5%
7
20%
9
39%
10
6%
12
7%
13
12%
В этом коде нет ошибок
👍18🔥9
Как часто вы делаете code-review в своих проектах? 

Проверка кода – важная часть функционала разработчика, этот процесс помогает выявить ошибки, пропуски, уязвимости и стилистические недочеты. 

Хотите научиться правильно проводить ревью, чтобы повысить качество своих конечных результатов? 

Приходите на бесплатный открытый урок «Code-review онлайн» от OTUS.

Преподаватель курса «С# Developer Professional» Антон Герасименко, .net developer + lead с опытом в разработке более 10 лет:
— проведет code-review нескольких учебных проектов;
— расскажет о сode-review в целом: стоит ли его проводить, кому и когда он полезен.

🔥Во второй части урока у вас будет возможность отправить свой код и разобрать его вместе с преподавателем прямо на вебинаре!

📆 Занятие пройдёт 5 октября в 20:00 мск в рамках курса «C# Developer. Professional». После открытого урока вы сможете поступить на курс на специальных условиях.

➡️Пройдите бесплатное вступительное тестирование прямо сейчас и зарегистрируйтесь на событие: https://otus.pw/yMeG/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Как получить текущий метод

В общем виде задача сводится к получению текущего стек-трейса, и взятию его верхнего элемента. Гарантированного способа не существует, потому что JVM имеет право «терять» фреймы стека (то есть методы цепочки вызовов) при оптимизации.

1. new Exception().printStackTrace(printStream)
Печатает стек-трейс в текстовом виде в поток. Первой строкой выводится toString() объекта Exception, далее стек вызовов до места создания исключения. Соответственно, из потока нужно будет достать и распарсить вторую строку. В зависимости от JVM формат вывода может отличаться.

2. Thread.currentThread().getStackTrace()
3. new Exception().getStackTrace()
Более красивые способы. Возвращают уже массив готовых объектов-фреймов, нужно только взять первый элемент. Эти вызовы дорогие, они всегда загружают весь стек, даже если нужен первый фрейм. От класса-владельца метода в возвращаемом StackTraceElement доступна только строка имени, для доступа через Reflection придется загружать его вручную.

4. StackWalker.getInstance(options, depth).walk(s -> ...)
Самый продвинутый способ, доступный с Java 9 – специально предназначенный для этого класс. Параметрами метода getInstance() можно ограничивать необходимую глубину и детализацию стека. Результаты – экземпляры StackFrame – содержат готовый для рефлекшна Class<?> вызывающего объекта.
👍16🔥6
🔥В OTUS продолжается набор в группу курса Kotlin Backend Developer Professional. Это отличная возможность расширить свои возможности разработки на Kotlin!

18 октября в 19:00 мск. приглашаем на бесплатный открытый урок «Возможности Kotlin для создания DSL на примере JsonBuilder».

⚡️На занятии:

- рассмотрим общую теорию о DSL: назначение, особенности, практика;
- попрактикуемся в создание DSL на примере JsonBuilder;
- рассмотрим возможности Kotlin, полезные для создания DSL;
- узнаем, как создавать собственные DSL и применять их при написании приложения;
- познакомимся с замыканиями и extension-методами.

Этот вебинар – мастхэв для начинающих и продвинутых Kotlin-разработчиков, которые хотят повысить свою ценность для работодателей.

Отправьте заявку, чтобы записаться на урок и получить спец. условия при поступлении в группу.

👉
Регистрация

❗️Легендой курса является разработка стартапа. В рамках легенды обсуждается реализация экстремальных проектов, в которых сочетаются высокая неопределенность и жесткие ограничения по времени и ресурсам. При покупке курса возможна рассрочка платежа. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍5🔥2
Как применяют технологию SPI

Service Provider Interface – технология из стандартной поставки JavaSE. Этой технологией реализуется IoC, не являющаяся при этом DI. С помощью SPI можно легко и без дополнительных инструментов поставлять конкретные реализации сервисов отдельными jar-файлами. Применение обычно похоже на механизм плагинов.

Два основных понятия SPI – это service и service provider. Service – интерфейс или абстрактный класс, который объявляет API требуемого сервиса, и предоставляется основным приложением. Service provider – реализация этого API, наследник класса/интерфейса сервиса, который динамически поставляется в основное приложение библиотекой-плагином. Для одного сервиса может быть предоставлено несколько провайдеров из одной или нескольких библиотек.

На интерфейс сервиса не накладывается никаких ограничений. Провайдер же обязан реализовывать этот интерфейс, и иметь конструктор без параметров. Внутри jar-файла в директории META-INF/services лежат текстовые файлы, где имя файла – полное имя сервиса, а его строчки – полные имена провайдеров этого сервиса, которые поставляются этой библиотекой.
👍7🔥2
🤖 Пройди тест по Java

👩‍💻 Проверь свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Java Developer. Professional" от OTUS по специальной цене.

За 6 месяцев обучения:
- Научишься создавать современные java-приложения
- Поймешь основы функционирования JVM (сборка мусора, byteCode)
- Освоишь приемы применения многопоточности
- Напишите выпускной проект на любую тему под наставничеством преподавателя

🎫Курс можно приобрести в рассрочку

👉 ПРОЙТИ ТЕСТ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2🌭1🤨1
Перечислите стандартные функциональные интерфейсы

Стандартная библиотека содержит пакет java.util.function, в котором хранятся функциональные интерфейсы для большинства случаев жизни. Их можно разделить на 5 групп:

Функции
Обычная обобщенная функция – интерфейс Function<T, R>. Принимает параметр и возвращает значение другого типа. Для примитивов есть не-generic специализации – семейство интерфейсов XtoYFunction. (Здесь и далее вместо X и Y подставляются названия примитивов).

Бинарные функции – функции с двумя параметрами и возвращаемым значением. BiFunction<T, U, R>, ToXBiFunction<T, U>.

Поставщики (Suppliers)
Интерфейсы Supplier<T>, XSupplier – не принимают ничего, возвращают (поставляют) значение.

Потребители (Consumers)
Consumer<T>, XConsumer – принимают (потребляют) значение, ничего не возвращают.
Бинарный вариант, BiConsumer<T, U> и XYConsumer, потребляет два параметра.

Предикаты
Predicate<T>, XPredicate – принимают параметр, возвращают boolean. Кроме самой функции содержат дефолтные реализации логических операций.

Операторы
Унарный (UnaryOperator<T>) и бинарный (BinaryOperator<T>) – просто функция и би-функция с одинаковым типом параметров и результата. Специализации для примитивов XUnaryOperator и XBinaryOperator вдобавок содержат дефолтные реализации методов для композиции операторов.
👍16🔥32
🚀 Как решать проблемы масштабирования приложений?

⚡️ Обсудим на бесплатном открытом уроке «Проблема вертикального масштабирования и синхронизация», который пройдёт в рамках курса «Архитектура и шаблоны проектирования» от OTUS.

На эфире мы сосредоточимся на следующих аспектах:
- Предпосылки возникновения проблемы масштабирования
- Проблемы многопоточности, нежелательные состояния и синхронизация
- Обзор модели вычислений, обходящей ограничения «традиционной», и вариантов её реализации
- Обзор подходов к архитектуре приложений, преобладавших в разное время, их особенности, плюсы и недостатки

🔥 Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени. После этого вы сможете приобрести полный курс в рассрочку на комфортных условиях.

Встречаемся 10 октября в 20:00 мск.

👉 Регистрируйтесь бесплатно прямо сейчас и ставьте событие в календарь

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍6🔥1
Что будет выведено на экран?
👍15🔥4
👍18🔥51
👋Бэкендер, пора расти!

👉Узнайте как на бесплатном вебинаре онлайн-курса «Clojure Developer» — «Особенности Clojure: сфера разработки, основные фишки языка»: регистрация

На бесплатном вебинаре мы:
— рассмотрим, с какими задачами сталкиваются разработчики Clojure и какие основные особенности отличают его от других бэкендовых языков.
— обсудим преимущества, которые предлагает Clojure по сравнению с другими языками.
— изучим, какие возможности и перспективы он предлагает для разработчиков.

Экспертизой поделится руководитель программы и практик Сергей Ткаченко (Clojure Software developer / Team Lead).

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
Как из Java приложения запустить другую программу?

Самый простой и базовый способ – с помощью метода Runtime.getRuntime().exec(). В качестве параметра ему передается строка системной команды. Опциональные можно передать рабочую директорию, и переменные окружения в виде массива строк "имя=значение". Если команде нужны аргументы, они передаются либо массивом, либо в той же строке команды через пробелы.

Рекомендуемый, и более управляемый способ – использование класса ProcessBuilder. Он же применяется внутри метода exec. Билдер дает, например, средства для использования в команде пайплайнов и редиректов ввода-вывода.

В результате запуска команды создается объект класса Process. Его можно сконвертировать в более современный (Java 9+) и функциональный ProcessHandle. Через эти объекты идет работа с вводом-выводом процесса, его характеристиками и статусом.

Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.
🔥12👍4
Внимание, Backend-разработчики и разработчики мобильных приложений на Java!

Присоединяйтесь к IT_ONE CAREER MEETUP, который состоится 26 октября в 18:00. IT_One – разработчик программного обеспечения для крупных игроков российского бизнеса и государственных органов. Компания реализует крупнейшие проекты цифровой трансформации страны. Спектр задач – от поддержки приложения до разработки концептуальной бизнес-архитектуры уровня корпорации.

IT_ONE CAREER MEETUP #2 - это 2 актуальные темы:

Работа с базами данных: эффективное проектирование и оптимизация запросов для backend-разработчиков
Спикер: Александр Черняев, Старший разработчик, IT_One

Узнаем:
— Зачем нужна оптимизация SQL-запросов;
—Организацию процесса мониторинга и оптимизации SQL-запросов разработчиками;
— Общие рекомендации по проектированию и оптимизация SQL-запросов.

Разработка мобильных приложений на Java: Android-разработка с использованием Java
Спикер: Сергей Мехоношин, Старший Android-разработчик, IT_One

Обсудим:
— Историю Java в Android-разработке;
— Java и 2017 год;
— Какое место занимает Java в мобильной разработке под Android сегодня?

Не упустите возможность узнать о последних тенденциях и лучших практиках в вашей области! Присоединяйтесь к нам и получите ценные знания от опытных специалистов. Ждем вас на IT_ONE CAREER MEETUP!

Дата и время: 26 октября в 18:00
Регистрация и подробности: https://clck.ru/362UBb

Реклама. ООО "Акселератор Возможностей". ИНН 9704005146
👍5🔥1
Как сгенерировать хорошее случайное число?

Этот вопрос глубже, чем кажется на первый взгляд. Для начала, нужно разобраться в двух понятиях: псевдослучайные, и истинно случайные числа.

Псевдослучайные числа – это последовательность случайных на вид чисел, на самом деле полученных в результате математического алгоритма. Последовательность таких чисел можно воспроизвести, зная начальные условия (seed, энтропия) и используемый алгоритм. Метод, который используется для генерации чисел в классе java.util.Random, дает криптографически ненадежные псевдослучайные числа – злоумышленник может достаточно легко их предугадывать.

Истинно случайные числа основываются на физических свойствах, которые трудно поддаются измерению. Это могут быть, например, доли секунд текущего системного времени. Алгоритм генерации истинно случайных чисел не позволяет с хорошей точностью угадать следующее число, даже зная предыдущие.

Класс SecureRandom предоставляет доступ к криптографически надежным генераторам случайных чисел. При том, это могут быть как достаточно сложные последовательности псевдослучайных, так и истинно случайные числа. Согласно стандартам безопасности, они будут достаточно непредсказуемы.

Не все случайные числа одинаково случайны. Шанс что рост случайного человека окажется ближе к среднему высок, тогда как у игральной кости одинакова вероятность выпадения любой из граней. В математике это называется распределением вероятностей.

Внутри SecureRandom использует SPI. Мы можем выбирать из различных алгоритмов генерации и их провайдеров, указав их названия в фабричном методе getInstance. Все перечисленные выше свойства определяются именно используемым алгоритмом.
👍22🔥5
Где получить практические знания по микросервисной архитектуре?

С микросервисной архитектурой можно облегчить масштабирование, ускорить разработку и сократить итеративный цикл создания сервисов. Это скилл, который кратно увеличит ваши карьерные возможности.

Начните изучение с бесплатного открытого урока «Основные паттерны аутентификации и авторизации в микросервисной архитектуре» от OTUS.

На эфире обсудим:

- Введение в микросервисную архитектуру.
- Паттерн аутентификации в микросервисах.
- Паттерн авторизации и управление доступом.
- Безопасность и мониторинг

🔥 Преподаватель Станислав Щетинников – директор по развитию в Сбербанке.

📅 Занятие пройдёт 11 октября в 20:00 мск в рамках курса «Microservice Architecture».

🚩 Зарегистрируйтесь на событие прямо сейчас: https://otus.pw/iNR1/
👍7
Каким будет результат компиляции и выполнения данного кода?
👍16🔥5
Каким будет результат компиляции и выполнения данного кода?
Anonymous Quiz
38%
3,3
2%
0,0
5%
0,3
19%
3,0
8%
Ошибка выполнения
29%
Ошибка компиляции
👍26🔥3🌭2🌚1
⚡️ Познакомьтесь с библиотекой Kafka Streams

Для чего используют Kafka Streams? Она позволяет быстро и просто писать код Java/Scala на стороне клиента, при этом разворачивать и использовать распределенное приложение на сервере Kafka в соответствии с DevOps-подходом.

Изучите этот инструмент на бесплатном открытом уроке «Kafka Streams» от OTUS.

📢 Вы узнаете:

- как создать граф обработчиков с использованием DSL;
- как читать сообщения из топика;
- как фильтровать и преобразовывать сообщения;
- что происходит при изменении ключа;
- как организовать роутинг сообщений;
- как работать с состоянием, какие при этом возникают нюансы;
- как работает join потоков сообщений.

➡️ Занятие пройдёт 16 октября в 20:00 мск в рамках курса «Apache Kafka».

🏹 Пройдите бесплатное вступительное тестирование и зарегистрируйтесь на событие: https://otus.pw/Vc0A/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1🤨1
Какой выбрать тип для даты/времени?

В пакете java.util расположены старые классы стандартной библиотеки Java: Date (дата+время), Calendar (конвертация и манипуляция), TimeZone (смещение часового пояса). Эти классы обладали рядом известных проблем. Экземпляры были изменяемыми, что делало их потоко-небезопасными. Работа с датами через календарь была неудобной, не было нормальной поддержки часовых поясов и интернационализации.

Постепенно стандартом де-факто стала сторонняя библиотека Joda-Time. Её разработчики решили все названные выше проблемы.

В Java 8 был добавлен пакет java.time, который взял решения из Joda-Time в стандарт, создатель библиотеки участвовал в разработке. Ключевые классы пакета:
• LocalDate, LocalTime и LocalDateTime – локальные для пользователя дата/время.
• ZonedDateTime – дата/время в определенной часовой зоне.
• Period и Duration – периоды дат и времени соответственно.

Отдельно существуют классы Date и Time пакета java.sql. Это представление даты и времени для обмена данными через JDBC. Не стоит пользоваться ими вне уровня доступа к данным, хотя бы потому, что это классы-наследники старого java.util.Date.
👍21🔥4
⁉️ Как создать TCP/IP-серверное приложение в Java?

Стек протоколов TCP/IP позволяет обеспечивать доставку информации в необходимое место назначения. Умение с ней работать – важный скилл для разработчика.

🦾 Изучите эту технологию на бесплатном открытом уроке «TCP/IP-сервер в Java» от OTUS.

На эфире:

- Посмотрим, какие есть варианты реализации TCP/IP-серверного приложения в Java.
- Изучим пару примеров, их особенности и области применения.

📌 Занятие пройдёт 17 октября в 20:00 мск в рамках курса «Java Developer. Professional». После бесплатного вебинара вы сможете продолжить обучение на курсе в рассрочку.

Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени!

👉 Зарегистрируйтесь на событие прямо сейчас, чтобы ничего не пропустить.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥21
Как сгенерировать уникальный идентификатор?

UUID (universally unique identifier) – стандарт, описывающий способ создания правильных уникальных идентификаторов. Значения генерируются на основании таких источников информации, как системное время и MAC-адрес, за счет чего они остаются с достаточной вероятностью уникальными, даже будучи сгенерированными независимо. Можно с разных машин добавлять в базу данных записи с UUID-идентификаторами, и не бояться конфликта.

UUID бывает пяти разных версий, версия определяет способ создания. Формат остается одинаковым: это строковое шестнадцатеричное представление 128-битного целого числа (два long-а), разделенное дефисами на группы фиксированного размера:

25b32eaa-3017-4ad7-9224-383f6bfa5212


В Java уникальный идентификатор представляется иммутабельным классом UUID из пакета java.util. В нём нет сложной логики, только getter-ы для описанных в стандарте составных частей, конструктор и статические фабричные методы.

Единственный конструктор позволяет создать экземпляр по двум указанным половинам значения (старшие и младшие 64 бита в виде long параметров). nameUUIDFromBytes строит из заданного массива байтов UUID версии 3. randomUUID генерирует случайный уникальный идентификатор версии 4, с применением SecureRandom.
👍17🔥3