Сегодня в 18:00 в рамках запуска новой программы «Java-разработчик. Уровень Специалист» пройдет онлайн-встреча с автором курса Судакевичем Игорем.
Обсудим: какие навыки стоит освоить, чтобы стать востребованным Java-разработчиком; как строится обучение на курсе «Java-разработчик. Уровень Специалист».
Дата: 22.04.2024 Время: 18:00-19:00 (МСК)
Спикер: Судакевич Игорь — преподаватель международного уровня, более 15 лет работает в IT. Уполномоченный инструктор корпорации Oracle. Магистр компьютерно-информационных технологий. Инструктор платформы Udemy.
С выпуском стабильной версии JDK 22 в конце марта, вышла окончательная версия FFM API — современного переосмысления доступа к нативной памяти и функциям. Примечательно, что его история начиналась ещё в JDK 14 несколько лет назад, тогда же я и обратил на него своё внимание. Мне стало интересно, возможно ли без поддержки со стороны платформы полноценное портирование этого API, и ответ — ДА!
На скриншоте выше - пример из официальной документации, запущенный на android 8.0. В нём происходит вызов функции qsort из libc, при этом один из параметров — указатель на функцию сравнения. С помощью метода upcallStub можно создать указатель на MethodHandle как на нативную функцию, что и демонстрирует пример. Полная документация исходного апи доступна на официальном сайте oracle
Отдельно отмечу отличия:
Полностью воссоздать API не получилось т.к. до android 9.0 отсутствует его важный компонент — класс VarHandle, поэтому был создан другой класс с теми же методами, но без полиморфного поведения (чуть хуже оптимизация)
MemoryLayout`ы нулевого размера не разрешены (в исходном варианте их поведение не совпадает с фактическим в компиляторах C и C++)
Временно не работают upcall вызовы из потоков, не подключённых к jvm. Скоро исправлю, но ещё не придумал оптимальный путь
Вернул методы MemoryLayout.valueLayout и paddedStructLayout. Не знаю почему их убрали в конечной версии
AXENIX (ex - Accenture) проводит 1day offer для Java разработчиков и Системных аналитиков с опытом работы от 2 лет.
Даты проведения: 13 и 20 апреля соответственно.
Подай заявку до 11 апреля, если ты Java разработчик.
До 18 апреля регистрируйся тут, если интересует мероприятие для Системных аналитиков
Для участия в 1day offer:
Оставь заявку на нашем сайте.
Предварительно пообщайся с рекрутером, чтобы побольше узнать о компании и получи приглашение на one day offer.
Узнай больше о нас и наших проектах от менеджеров практики кастомной разработки.
Прими участие онлайн в собеседовании с экспертами, будет два этапа – техническое и финальное интервью.
Получи оффер в тот же день, если все прошло успешно.
Немного об Axenix
Компания образовалась после локализации российского офиса Accenture.
В практике кастомной разработки мы создаем цифровые решения на микросервисной архитектуре для банков, ритейлеров, металлургических компаний, а также у нас есть команды внутренней продуктовой разработки.
В России мы работаем в офисах в Москве, Твери, Ростове-на-Дону, Краснодаре, Санкт-Петербурге, а также удаленно.
Какие преимущества кроме достойной ЗП?
Современный стек, собственные продукты, годовые бонусы и регулярное повышение по результатам Performance Review, митапы, гибридный режим работы, ДМС для тебя и твоей семьи, дополнительные дни отпуска, корпоративные программы привилегий.
Не буду вдаваться в подробности работы компаратора, потому что такой код даже не скомпилируется! Компаратор не умеет работать с примитивами, ведь он использует дженерик:
public static <T> void sort(T[] a, Comparator<? super T> c);
А так выглядит sort для инта (и такой же метод есть отдельно для каждого примитива):
public static void sort(int[] a);
Невозможность использования с дженериками — одна из главных особенностей примитивов. Ну и причина, по которой массив интов нельзя отсортировать по убыванию)
Приглашаем вас на бесплатный вебинар, посвященный работе с Hibernate — самой популярной реализацией ORM-технологии. В рамках семинара поговорим о том, почему почти в каждом проекте используется Hibernate, разберемся какие плюсы и минусы у этой технологии. А также обсудим, почему Hibernate стал синонимом ORM в мире Java.
Содержание вебинара: • ключевые принципы ORM концепции; • связь между ООП и реляционной моделью в Hibernate; • плюсы и минусы Hibernate; • разработка приложения с использованием Hibernate.
Дата: 05.03.2024 Время: 16:00-17:00 по МСК
Спикер вебинара: Тарасевич Александр — ведущий разработчик с опытом коммерческой разработки на Java более 10 лет.
Некоторые могут помнить, как в комментариях под одной из своих статей на тему Unsafe в Android я писал, что занимаюсь портированием FFM API на эту платформу. Не так давно API окончательно вышло из предварительного доступа и стало полноправной частью JDK 22. Я поймал за хвост вдохновение и с утроенными силами начал писать код и придумывать как перенести непереносимое. Так начались поиски способа рантайм генерации нативного кода под любую из поддерживаемых андроидом архитектур, и он был найден! Выходом стала системная библиотека libLLVM.so, которая умеет делать всё, что мне нужно. Осталось лишь подключить её к java коду без готового линкера. После серии экспериментов и кучи кода родилось это:
На данном скриншоте видно тестовый запуск генерации простенькой функции с выводом полученного машинного кода (он парсится из выходного ELF файла). Я планирую использовать что-то подобное как часть линкера для FFM API.
В общем, работа кипит, и никакие преграды не страшны, если хорошенько постараться. В будущем надеюсь осилить написание цикла статей про нюансы разработки, с которыми пришлось столкнуться.
Если вас заинтересовала тема, за процессом можно следить на github`е проекта
Дженерики могут показаться очень простой темой. Например, вот так в Java выглядят классные и простые методы интерфейса List:
interface List<E> extends Collection<E> {
boolean add(E e);
E set(int index, E element);
}
Но у обобщений много нюансов: вложенность, вариантность, границы и т.д. Это сильно усложняет их использование. Вот не менее классный, но совсем непростой flatMap интерфейса Stream🙈:
Также, реализация дженериков - всегда трейдоф. Мы либо получаем большой исполняемый файл, из-за того, что приходится генерировать код для разных типов. Либо получаем дополнительную нагрузку в рантайме, из-за различных проверок.
Из-за таких сложностей, в языке Go (философия которого - простота и минимализм) дженерики появились аж через 12 лет после релиза языка. А первый коммент про то что нужны дженерики появился меньше чем через 24 часа🙃
Во многих популярных языках дженерики появились не с первой версии, но рано или поздно, разработчики были вынуждены их ввести:
Вы Java-программист и ищите возможность оптимизировать разработку? Тогда вебинар "Java-проекты с ChatGPT: от идеи до реализации" будет вам интересен! Узнайте, как создавать, рефакторить и тестировать код с помощью ChatGPT. Вас ждёт практический гайд и знакомство с JAIG – инструментом, упрощающим генерацию кода.
Дата: 21.02.2024 Время: 16:00 по МСК
Спикер вебинара: Игорь Судакевич – сертифицированный Java-разработчик, инструктор Oracle и Udemy, методист c 15-летним опытом, консультант-репетитор.
Как IT-директору выбрать подрядчика для усиления команды бэкенд-разработки: практический вебинар
Новость для руководителей IT-отделов, техлидов и продукт-оунеров.
Часто внутри компании не хватает компетенций или сотрудников для реализации проектов в срок. В такой ситуации выгодно обратиться за услугами внешних разработчиков для временного усиления команды.
С чего начать поиск подрядчика? Как подготовиться к выводу на проект внешнего разработчика? Как сформулировать требования к программисту и проверить удаленную команду на благонадежность — на эти и другие вопросы ответят руководители компании Programming Store на бесплатном онлайн-вебинаре.
6 февраля, 16:00 МСК
Зарегистрируйтесь, чтобы получить доступ к вебинару и напоминание накануне.
5 критериев готовности команды к работе с внешними разработчиками
Как оценить благонадежность подрядчика
Кейсы из практики: ритейл, производство, медицина
Спикер — Роман Огородников, руководитель проектов по backend-разработке в Programming Store.
Также вы сможете задать вопросы и получить ответы напрямую от директора компании и руководителя backend-направления Алексея Петухова.
После мероприятия все зарегистрированные участники получат на почту инструкцию с ключевыми тезисами из вебинара для эффективного выбора подрядчика.
Programming Store — центр удаленной разработки на платформах 1С, Python, Java, MS Dynamics 365. Уже 10 лет мы работаем по всей России и за рубежом с компаниями- внедренцами и крупными клиентами
25 января 2024 года стартовала онлайн-конференция Java Champions 2024. Мероприятие продлится в виртуальной среде до 30 января. Каждый день будет состоять из 7 сессий. Они начнутся в 9:00 EST и закончатся в 17:00 EST. После каждой презентации участникам будет предоставлено время для общения с докладчиками.
Чемпионы Java — это разработчики со всего мира, получившие признание за вклад в сообщество Java. Чемпионы на конференции J Champions делятся своими знаниями с разработчиками. Аудитория проекта — 14 миллионов Java-разработчиков по всему миру.
Про Youtube-канал для технарей и подкаст про Java в 2023 году 📺
Привет! Пришло время познакомить вас с каналом Cloud.ru Tech. Здесь беседуем с интересными гостями в формате подкастов, делимся новостями из мира IT-технологий и обсуждаем карьеру в IT.
🎧 Сегодня предлагаем посмотреть подкаст про Java — тема будет интересна как заядлым джавистам, так и Junior-разработчикам.
Вместе с Петром Хаустовым — тимлидом из команды СБОЛ.про мы обсудили, зачем и как изучать Java в 2023 году, что делать с синдромом самозванца, а также как джавистам проходить собеседования и находить для себя лучшие условия.
Прочитал тут заметку про красоту замыканий и у меня появились смутные сомнения по поводу того, как появилось эта, в разных смыслах, положительных и отрицательных (я не к тому, чтобы встать на какую-то сторону, я за разумное разнообразие), хитрая техника построения кода.
В большинстве языков является естественным распространение области видимости переменных из внешнего блока во все внутренние блоки кода. Приведу пример, чтобы не было сомнений (псевдо-код намеренно нарушает синтаксис известных мне языков, чтобы не быть отнесенным явно к одному из них):
Function(type par)
{//outer block(see“inner block”father)
Int X = 123;
If(par == someConst)
{//inner block
We can use X here!
}
}
Определение для Лямбда-функции тоже создает внутренний блок кода:
Action Function(type par)
{//outer block (see “inner block” father)
Int X = 123;
If(par == someConst)
goto Label; //we need goto just to escape definition of extra inner block
Return lambda=>
{// inner block
some code that uses X in the block
};
Label:
We can still use X here!
}
Интересно! Это только мне кажется, что передача переменных из окружающего кода в код Лямбда-функции, ВОЗМОЖНО, изначально была ошибкой при разработке компилятора, когда стандартный способ распространения области видимости переменных по недосмотру применили к вновь появившимся инлайн реализациям функций? Но потом кто-то нашел применение такой возможности и, как это часто бывает, «Бага»(bug) превратилась в «Фичю» (feature)?
Сезон Java — всё! Сегодня последний день приёма заявок для участия в сезоне Java one love, и совсем скоро мы узнаем победителя.
А пока встречайте последних участников со статьями о работе с байт-кодом, сборке Java-приложения, задачах фильтрации и гибридных системах мониторинга данных.
Если вы как раз дописываете свою статью — поторопитесь: с завтрашнего дня статьи в сезон не принимаются. Ваши голоса могут повлиять на итоговый рейтинг — голосуем и выбираем победителя сезона по ссылке ? → https://u.habr.com/java1love
Сезон длится до 15 сентября. Спонсор Сезона Java one love — Мир Plat.Form.
В реальной жизни не всегда можно сделать так, чтобы код был красивым, читаемым, без «костылей» и оптимизированным. А статьи в сезоне Java one love помогут примирить внутреннего перфекциониста с реалистом (или хотя бы облегчить боль первого).
Итак, учимся на чужих граблях, когда лучше послушать совет «Работает? Не трогай!», а когда, наоборот, экспериментировать и пробовать новые подходы:
До конца сезона Java one love осталась всего пара недель!
Наш новый участник написал пошаговую инструкцию по созданию нагрузочных тестов для API с генерацией динамических значений. Самое время ворваться в сезон со статьей про интеграционные тесты, если вам есть что о них рассказать ?
Топ самых популярных туториалов в сезоне Java one love:
Тут есть и туториалы «бери и делай», и сложные кейсы промышленной эксплуатации, и небезопасные эксперименты. Есть даже философские статьи, основанные на эмпирическом анализе и опыте разработки.
Самое ценное в сезоне Java One Love — это обмен опытом.
Джуны пишут свои первые статьи о реализации Java-приложений, ищут советы и рекомендации, а опытные джависты демонстрируют редкие решения для серьёзной промышленной эксплуатации: