👨💻4 способа прокачать свою карьеру в разработке, аналитике, менеджменте и попасть в Яндекс
1️⃣Летние школы Академии Яндекса
Для тех, у кого уже есть опыт в разработке. До 27 апреля продолжается набор в Школу бэкенд-разработки (Python, Java, C++, Go). Обучение бесплатное. Иногородним Яндекс оплатит билеты и проживание на период практики в офисах компании в Москве, Алматы и Белграде. Лучшим студентам — офер в штат Яндекса.
2️⃣Открытый лекторий Академии Яндекса
Если нет времени на Школы, регистрируйтесь на бесплатный Открытый лекторий. Это часть программы Летних школ — 120 лекций по soft skills, бэкенд-, фронтенд- и мобильной разработке, аналитике и продакт-менеджменту.
3️⃣Стажировки по бэкенд-, фронтенд- и мобильной разработке, аналитике и ML
Получите опыт работы над продуктами Яндекса, которыми пользуются миллионы. Подайте заявку на оплачиваемую стажировку (от 3 до 6 месяцев). Иногородним стажёрам Яндекс оплачивает проживание и билеты.
4️⃣Intern Meetup Week и пробные собеседования
Всё про стажировки,...
Java Чистый код: Как его писать? Лучшие практики от экспертов
Разработка программного обеспечения - сложное ремесло.
Всегда существует множество способов написания определенных частей кода или разработки новых функциональных возможностей. В конечном счете, они могут делать одно и то же, но некоторые из них могут быть на порядки более эффективными и простыми для понимания, чем другие.
Именно разработчики должны определить, какой подход будет работать лучше всего и как написать качественный чистый код.
В этой статье мы сосредоточимся на написании чистого кода на Java. Почему так важно писать легко читаемый код? Каковы лучшие практики разработки кода на Java? Продолжайте читать, чтобы узнать!
https://stratoflow.com/java-clean-code/
👉👆
😎Хотите расширить свой стек языком Clojure? Приходите ЗАВТРА, 6.04 в 20:00 мск на бесплатный вебинар «Разработка скриптов на Clojure», приуроченный к старту онлайн-курса «Clojure Developer» в OTUS.
— Clojure — это язык программирования общего назначения, на нём можно разрабатывать абсолютно все. До недавнего времени разработка скриптов на Clojure была трудной задачей в основном из-за медленного старта JVM, но появление GraalVM позволило обойти это ограничение. Скрипты, написанные на Clojure, теперь стартуют практически мгновенно, при этом, в процессе разработки доступен REPL и весь арсенал языка Clojure.
— На занятии мы познакомимся с проектом Babashka и узнаем, как именно эта библиотека помогает разрабатывать скрипты.
✅ Не упустите возможность протестировать курс! После открытого урока вы сможете приобрести курс, доступный в рассрочку.
👉Пройдите полный тест на сайте, узнайте, осилите ли вы обучение, и запишитесь на бесплатный вебинар: https://otus.pw/33in/
Мы создали практическую онлайн-программу «Java-разработчик», которая позволит за 10 месяцев плотной практики стать высокооплачиваемым специалистом.
Учиться на Хекслете удобно:
✔️Все лекции доступны 24/7 на платформе — занимайтесь в удобное время
✔️ Практика прямо в браузере
✔️Наставники, которые помогут в процессе обучения, и кураторы, контролирующие прогресс
Вы также сможете принять участие в открытых проектах Хекслета на GitHub. Научитесь работать с реальными приложениями и закреплять навыки, полученные на курсе, прямо в браузере.
А самое главное — вы станете участником Карьерного трека уже во время обучения.
Пройдете вебинары, которые охватывают все темы по трудоустройству: от составления резюме и рабочих профилей до психологических аспектов собеседования и адаптации на рабочем месте. Получите рекомендации по своему первому резюме от HR-специалистов и более опытных разработчиков.
Мы заинтересованы, чтобы вы нашли первую работу. Получите полную консультацию по профессии и карьере в IT!
JavaFX Game: Пишем Battleship (Морской бой)
Source Code: https://github.com/AlmasB/Battleship/tree/master/src/com/almasb/battleship
👉👆
51 Java -Spring Boot- Лучшие практики для разработчиков приложений
1.Использовать внешний сервер конфигурации
2. Используйте правильные зависимости
3. Сохраняйте модульность приложения
4. Используйте кэширование с умом
5. Контролируйте и протоколируйте свое приложение
6. Используйте последовательный стиль кода
7. Пишите модульные и интеграционные тесты
8. Используйте балансировщик нагрузки
9. Используйте последовательный формат протоколирования
10. Используйте инструмент мониторинга
11. Используйте инструмент сборки
12. Используйте инструмент версионирования кода
13. Использовать IDE
14. Использовать форматтер кода
15. Используйте линкер кода
16. Используйте клиентскую библиотеку HTTP
17. Использовать библиотеку JSON
18. Использовать пул соединений с базой данных
19. Использовать библиотеку безопасности
20. Использовать библиотеку тестирования
21. Использовать фреймворк для инъекции зависимостей
22. Используйте клиентскую библиотеку REST
23. Используйте брокер сообщений
24. Используйте профилировщик
25. Используйте инструмент обзора кода
26. Используйте инструмент статического анализа
27. Используйте инструмент покрытия кода
28. Используйте инструмент непрерывной интеграции
29. Используйте инструмент развертывания
30. Используйте инструмент управления конфигурацией
31. Использовать инструмент контейнеризации
32. Использовать облачную платформу
33. Использовать инструмент миграции баз данных
34. Использовать веб-сервер
35. Использовать инструмент CI/CD
36. Использовать обратный прокси-сервер HTTP
37. Используйте профилировщик JVM
38. Используйте профилировщик базы данных
39. Используйте инструмент нагрузочного тестирования
40. Используйте инструмент непрерывной доставки
41. Используйте API-шлюз
42. Используйте очередь сообщений
43. Используйте сетку сервисов
44. Используйте инструмент управления конфигурацией
45. Используйте конвейер развертывания
46. Использование Swagger для документации Api
47. Использование актуатора
48. Использование AOP
49. Использование рулевых диаграмм
50. Использование распределенной трассировки
51. Использование Lombok
https://connect2grp.medium.com/51-java-spring-boot-best-practices-for-application-developers-cafff2766896
👉👆
JAVA SPRING TRANSACTIONAL: ОСНОВЫ ТРАНЗАКЦИЙ ЗА 7 МИНУТ
00:00 - Определение транзакции, схематичный пример
00:46 - Свойство транзакции
00:59 - Знакомство с кодовой базой
02:05 - Пример, где нужна аннотация Transactional
03:10 - Вызов в пределах одного класса
04:04 - Обработка не всех исключений
04:47 - Область видимости метода
05:10 - Транзакция занимает соединение с БД
06:25 - Повторяем
Код примера: https://github.com/dispikerton/transactional
источник
👉👆
Академия Яндекса продолжает набор в Летние школы для джунов и других спецов с опытом работы. Они пройдут в 3 странах — Россия, Сербия и Казахстан.
— Школа фронтенда;
— Школа мобильной разработки (iOS, Android, Flutter);
— Школа бэкенд-разработки (Python, Java, C++, Go)
— Школа менеджеров (управление проектами и продуктами, маркетинг, продуктовая аналитика)
Сначала пройдут лекции в онлайне, а затем практика в офисах Яндекса в Москве, Белграде и Алматы. Участники будут работать над реальными проектами в фулстек-группах с опытным экспертом-наставником. Лучшие студенты смогут получить оффер в штат или приглашение на стажировку – по внутренней статистике Яндекса, 50% выпускников с каждого потока становятся стажерами или сотрудниками.
Если вы из другого города, но успешно закончите онлайн-этап, Яндекс оплатит билеты и проживание на период практики.
Чтобы попасть в интересующую вас Школу, нужно отправить заявку и пройти конкурсный отбор на основе тестового задания, опубликованного на странице Школ.
Не самые очевидные советы по написанию DTO на Java
Чтобы воспользоваться данными из внешней службы, мы обычно преобразуем полезную нагрузку JSON в объект передачи данных (Data Transfer Object, DTO). Код, обрабатывающий DTO, быстро усложняется, но с этим могут помочь несколько советов. Вполне возможно писать DTO, с которыми легче взаимодействовать и которые облегчают написание и чтение кода. Если объединить их вместе — можно упростить себе работу.
https://medium.com/javarevisited/not-so-obvious-tips-to-write-better-dtos-in-java-c6116895b180
👉👆
Инкапсуляции в Java
Инкапсуляция - это фундаментальная концепция объектно-ориентированного программирования (ООП), которая позволяет разработчикам создавать классы, скрывающие свои внутренние детали и защищающие их состояние и поведение от доступа или изменения извне класса.
В этой статье по программированию мы обсудим инкапсуляцию, ее преимущества и то, как она может быть реализована в Java.
Прежде чем прочитать эту стаью, вы можете прочитать наше руководство "Как работать с классами и объектами в Java", если у вас нет твердого понимания концепций объектно-ориентированного программирования или вам необходимо освежить знания.
https://www.developer.com/java/java-encapsulation/
👉👆
Прокачай свои знания в архитектуре современных распределенных систем
Стремишься занять позицию сеньора или даже архитектора? Этот курс для тебя!
✅Разберешься в event-driven системах
✅Обретешь уверенность на system design интервью в российских и зарубежных компаниях
✅Поймешь как устроен подход event sourcing, паттерн CQRS
✅Твердо поймешь основы Domain-driven design, как его применять
✅Создашь распределенную event-sourcing based систему и сможешь заимплементить распределенную транзакцию
Авторский курс от преподавателя Санкт-Петербургского университета ИТМО и разработчика высоконагруженных систем Андрея Суховицкого.
Твоими менторами станут ребята из Amazon, Revolut, JetBrains, Yandex или Ozon.
❗️Старт курса - 3 апреля, лекции и задания доступны уже сейчас!❗️
Переходи по ссылке и подавай заявку!
Академия Яндекса продолжает набор в Летние школы сразу в трех странах — в РФ, Сербии и Казахстане. Предусмотрено обучение для специалистов с опытом работы по следующим направлениям:
— фронтенд
— бэкенд-разработка (Python, Java, C++, Go)
— мобильная разработка (iOS, Android, Flutter)
— школа менеджеров (управление проектами и продуктами, продуктовая аналитика)
Программа начнется с теории и небольших заданий в онлайне, а затем студенты школ будут практиковаться на реальных проектах в фулстэк-группах с опытными наставниками в офисах Яндекса в Москве, Белграде и Алматы. Всем иногородним студентам, успешно прошедшим отбор и онлайн-этап, Яндекс оплатит билеты и проживание на период оффлайн-обучения.
Для участия необходимо отправить заявку и выполнить тестовое задание, которое размещено на страницах Школ. Дедлайны вступительных испытаний: до 13 апреля (Школа для менеджеров), до 27 апреля (Школы для разработчиков). В общем, go rockstars 🦾
Какими свойствами обладает порождаемое equals() отношение эквивалентности?
☕️ Рефлексивность: для любой ссылки на значение x, x.equals(x) вернет true;
☕️ Симметричность: для любых ссылок на значения x и y, x.equals(y) должно вернуть true, тогда и только тогда, когда y.equals(x) возвращает true.
☕️ Транзитивность: для любых ссылок на значения x, y и z, если x.equals(y) и y.equals(z) возвращают true, тогда и x.equals(z) вернёт true;
☕️ Непротиворечивость: для любых ссылок на значения х и у, если несколько раз вызвать х.equals(y), постоянно будет возвращаться значение true либо постоянно будет возвращаться значение false при условии, что никакая информация, используемая при сравнении объектов, не поменялась.
Для любой ненулевой ссылки на значение х выражение х.equals(null) должно возвращать false.
#вопросы_с_собеседований
Приведите примеры структурных шаблонов проектирования.
Адаптер (Adapter) — объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс.
Мост (Bridge) — структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.
Компоновщик (Composite) — объект, который объединяет в себе объекты, подобные ему самому.
Декоратор (Decorator) — класс, расширяющий функциональность другого класса без использования наследования.
Фасад (Facade) — объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое.
Приспособленец (Flyweight) — это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым.
Заместитель (Proxy) — объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него.
👉👆
Сравните Iterator и ListIterator.
☕️ ListIterator расширяет интерфейс Iterator;
☕️ ListIterator может быть использован только для перебора элементов коллекции List;
☕️ Iterator позволяет перебирать элементы только в одном направлении при помощи метода next(). Тогда как ListIterator позволяет перебирать список в обоих направлениях, при помощи методов next() и previous();
☕️ ListIterator не указывает на конкретный элемент: его текущая позиция располагается между элементами, которые возвращают методы previous() и next().
☕️ При помощи ListIterator вы можете модифицировать список, добавляя/удаляя элементы с помощью методов add() и remove(). Iterator не поддерживает данного функционала.
#вопросы_с_собеседований
😎Хотите расширить свой стек языком Clojure? Приходите ЗАВТРА, 6.04 в 20:00 мск на бесплатный вебинар «Разработка скриптов на Clojure», приуроченный к старту онлайн-курса «Clojure Developer» в OTUS.
— Clojure — это язык программирования общего назначения, на нём можно разрабатывать абсолютно все. До недавнего времени разработка скриптов на Clojure была трудной задачей в основном из-за медленного старта JVM, но появление GraalVM позволило обойти это ограничение. Скрипты, написанные на Clojure, теперь стартуют практически мгновенно, при этом, в процессе разработки доступен REPL и весь арсенал языка Clojure.
— На занятии мы познакомимся с проектом Babashka и узнаем, как именно эта библиотека помогает разрабатывать скрипты.
✅ Не упустите возможность протестировать курс! После открытого урока вы сможете приобрести курс, доступный в рассрочку.
👉Пройдите полный тест на сайте, узнайте, осилите ли вы обучение, и запишитесь на бесплатный вебинар: https://otus.pw/hMtmJ/
⚡️ Один из важных шагов в проверке мобильного приложения — доступность для большого числа людей.
⁉ Как тестироващику автоматизировать проверку доступности (Accessibility)?
📢📢 Узнаем 5 апреля в 20:00 на вебинаре, приуроченном к онлайн-курсу «Kotlin QA Engineer» OTUS.
Какие темы мы затронем на уроке?
- Cтандарты и методы проверки соответствия требованиям Accessibility
- Разметка семантической информации в мобильных приложениях Android XML, Jetpack Compose, KMM и Flutter
- Разработка тестов с использованием Accessibility Test Framework для Android и Google Scanner for A11y (KMM)
- Создание валидаторов для сложных визуальных проверок
В результате мы научимся:
— Проверять готовность мобильного приложения для использования людьми с ограничениями здоровья
— Автоматически проверять соответствие требованиям визуальной контрастности, адаптации верстки под увеличенный шрифт, наличие семантической разметки для вспомогательных инструментов для приложений Android (XML и Compose) и iOS (Flutter и KMM).
— Использо...
Побитовые операции~
: Побитовый унарный оператор NOT;&
: Побитовый AND;&=
: Побитовый AND с присваиванием;| :
Побитовый OR;|=
: Побитовый OR с присваиванием;^
: Побитовый исключающее XOR;^=
: Побитовый исключающее XOR с присваиванием;>>
: Сдвиг вправо (деление на 2 в степени сдвига);>>=
: Сдвиг вправо с присваиванием;>>>
: Сдвиг вправо без учёта знака;>>>=
: Сдвиг вправо без учёта знака с присваиванием;<<
: Сдвиг влево (умножение на 2 в степени сдвига);<<=
: Сдвиг влево с присваиванием.
👉👆
😎Хотите расширить свой стек языком Clojure? Приходите на бесплатный вебинар «Разработка скриптов на Clojure», приуроченный к старту онлайн-курса «Clojure Developer» в OTUS.
— Clojure — это язык программирования общего назначения, на нём можно разрабатывать абсолютно все. До недавнего времени разработка скриптов на Clojure была трудной задачей в основном из-за медленного старта JVM, но появление GraalVM позволило обойти это ограничение. Скрипты, написанные на Clojure, теперь стартуют практически мгновенно, при этом, в процессе разработки доступен REPL и весь арсенал языка Clojure.
— На занятии мы познакомимся с проектом Babashka и узнаем, как именно эта библиотека помогает разрабатывать скрипты.
✅ Не упустите возможность протестировать курс! После открытого урока вы сможете приобрести курс, доступный в рассрочку.
👉Пройдите полный тест на сайте, узнайте, осилите ли вы обучение: https://otus.pw/TutR/
Оптимизация запросов
В этом посте хочу рассказать основы оптимизации запросов в БД. Буду говорить на примере Postgre, но в других БД процесс похож.
Шаг 0. Вспоминаем основы
При выполнении запроса участвуют два процесса:
▪️ Планировщик — составляет план выполнения запроса. Какие таблицы обойти, что проверить и в какой последовательности
▪️ Исполнитель — извлекает данные по заданному плану
Разработчик может создать дополнительные структуры данных — индексы. Индексы помогают быстрее выполнять запросы, но занимают много места. Если данные в таблице занимают 1 ГБ, то индекс с id займёт 250 МБ.
Шаг 1. Ищем, что оптимизировать
Смотрим таблицу pg_stat_statements
— там собирается статистика по запросам. Чтобы получить достоверные данные, берём статистику с продакшн базы.
Ищем запросы, которые выполняются часто или долго.
Шаг 2. Работаем с конкретным запросом
Для экспериментов берём тестовую базу с большим количеством данных. Минимум миллион записей, иначе эффект оптимизаций не будет заметен.
Прогоняем запрос через EXPLAIN ANALYZE:
EXPLAIN ANALYZE SELECT * FROM users where name = ’K’;EXPLAIN пишет только план выполнения запроса. EXPLAIN ANALYZE выполняет запрос и показывает
Index Scan using name_index on
— при выполнении запроса используется индекс, и это отличноSeq Scan on
означает, что происходит долгий последовательный обход таблицы. Причиной может бытьCREATE INDEX index_name ON users(name);Дальше всё просто:
EXPLAIN ANALYZE
▫️ Увидеть в плане выполнения новый индексIntern Meetup Week в Яндексе 🎉
С 17 по 20 апреля в Яндексе пройдёт неделя митапов для начинающих разработчиков. Будет доступен офлайн и онлайн формат.
17 апреля состоится митап для направления Backend: C++, Go, Java
Регистрация по ссылке: https://clck.ru/33qW3U
В программе лекции экспертов о технологиях, общение с руководителями команд и рекрутерами, нетворкинг и подарки.
При отборе на митапы у вас есть шанс получить приглашение на пробное собеседование на стажировку в Яндекс 🔥
📆Когда: 17 апреля 17:00 - 21:30, сбор гостей с 16:30
🌐Где: офис Яндекса, ул. Льва Толстого, 16, м.Парк Культуры и трансляция онлайн
Все подробности и регистрация по ссылке: https://clck.ru/33qW3U
А чтобы быть в курсе всех новостей Young&&Yandex, подписывайтесь на чат-бот.
Бесплатные Летние школы Академии Яндекса в России, Сербии и Казахстане — summer-dev event с возможностью получить оплачиваемую стажировку или даже оффер в штат компании 💻
Специалисты с опытом разработки могут попробовать себя в следующих направлениях:
🔸разработка интерфейсов;
🔸мобильная разработка (iOS, Android, Flutter);
🔸бэкенд-разработка (Python, Java, C++, Go);
🔸школа менеджеров.
Сначала онлайн-этап с лекциями, а потом — практика в офисах Яндекса в Москве, Белграде или Алматы. При успешном прохождении онлайн-этапа оплату билетов и проживания компания берет на себя.
Чтобы принять участие в программе, нужно подать заявку на сайте Академии и выполнить вступительное задание — до 13 апреля для Школы менеджеров, до 27 апреля для Школы разработчиков.
Всем удачи)
Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресации и на основе метода цепочек. Как реализована HashMap? Почему, по вашему мнению, была выбрана именно эта реализация? В чем плюсы и минусы каждого подхода?
HashMap реализован с использованием метода цепочек, т.е. каждой ячейке массива (корзине) соответствует свой связный список и при возникновении коллизии осуществляется добавление нового элемента в этот список.
Для метода цепочек коэффициент заполнения может быть больше 1 и с увеличением числа элементов производительность убывает линейно. Такие таблицы удобно использовать, если заранее неизвестно количество хранимых элементов, либо их может быть достаточно много, что приводит к большим значениям коэффициента заполнения.
Среди методов открытой реализации различают:
• линейное пробирование;
• квадратичное пробирование;
• двойное хэширование.
Недостатки структур с методом открытой адресации:
• Количество элементов в хэш-таблице не может превышать размера массива. По мере увеличения числа элементов и повышения коэффициента заполнения производительность структуры резко падает, поэтому необходимо проводить перехэширование.
• Сложно организовать удаление элемента.
• Первые два метода открытой адресации приводят к проблеме первичной и вторичной группировок.
Преимущества хэш-таблицы с открытой адресацией:
• отсутствие затрат на создание и хранение объектов списка;
• простота организации сериализации/десериализации
👉👆