lifeofjuniordev

lifeofjuniordev

Технические глубины и повседневная жизнь программиста. telegram: t.me/life_of_junior_dev
На Пикабу
поставил 1 плюс и 0 минусов
102 рейтинг 8 подписчиков 0 подписок 13 постов 0 в горячем

КАК ПРОШЕЛ JPOINT

🦆 КАК ПРОШЕЛ #jpoint2024

Все очень красиво✨
ЦМТ, в котором проходит конфа, стенды, мерч, презентации.

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

Из других докладов больше всего зашли DevOps для Spring Boot, GraalVM и БД укротитель. О деплое в спринг напишу отдельный пост, когда попробую сам)

На афтерпати больше всего понравились коктейли холиварные темы: JDBC или JPA, REST или GraphQL, виртуальные потоки или реактивщина? Ответ на все вопросы: it depends (кроме первого, на первый - JOOQ).
В общем, 10 уток из 10

👨‍💻 Джуниор

КАК ПРОШЕЛ JPOINT Telegram (ссылка), IT, Программирование, Java, Длиннопост
КАК ПРОШЕЛ JPOINT Telegram (ссылка), IT, Программирование, Java, Длиннопост
КАК ПРОШЕЛ JPOINT Telegram (ссылка), IT, Программирование, Java, Длиннопост
КАК ПРОШЕЛ JPOINT Telegram (ссылка), IT, Программирование, Java, Длиннопост
КАК ПРОШЕЛ JPOINT Telegram (ссылка), IT, Программирование, Java, Длиннопост
Показать полностью 5

КАК УБРАТЬ ПАНЕЛЬ ВКЛАДОК В FIREFOX

КАК УБРАТЬ ПАНЕЛЬ ВКЛАДОК В FIREFOX Текст, Telegram (ссылка), Reddit (ссылка), Браузер, Firefox

С вкладками

КАК УБРАТЬ ПАНЕЛЬ ВКЛАДОК В FIREFOX Текст, Telegram (ссылка), Reddit (ссылка), Браузер, Firefox

Без вкладок

1. В адресной строке введите about:config
2. Измените toolkit.legacyUserProfileCustomizations.stylesheets на true
3. В адресной строке введите about:support
4. Откройте в проводнике папку, указанную в Profile Directory (Папка профиля)
5. Создайте в ней папку chrome, в ней создайте файл userChrome.css
6. Скопируйте в userChrome.css этот код
7. Перезапустите Firefox
8. Если вы хотите, чтобы вкладки были в боковой панели, установите Tree Style Tab

Зачем это делать?
Вкладки занимают очень много места (посмотрите до и после), а нужны они не всегда. Поэтому легче убрать их в сайдбар и открывать его горячей клавишей по необходимости.
Больше всего такой ux популяризировал Arc, но он есть только на мак, да и перелезать на другой браузер ради вкладок не хочется.

На firefox-csshacks, кстати, можно делать и другие комбинации стилей.
Например, вот обсуждение на редите, как убрать вкладки под панель поиска и сделать их растянутыми

👨‍💻 Джуниор

Показать полностью 1

АНТИХЭШ

На платформе для соревнований по программированию CodeForces есть функция взлома. Когда вы решили задачу, появляется возможность посмотреть принятые решения других участников, написать тест, который их сломает и получить за это доп баллы.

Так вот, если в решении используется хэш-мапа или хэш-сет, то зная устройство хэш-функции, можно написать тест, который создаст кучу коллизий и решение не пройдет по времени.

Один из вариантов защиты - добавлять рандомное число к хэшу.

Классная лекция про хэш-функцию и алго задачи, которые с помощью нее решаются

Более подробно о взломах хэшей:
codeforces.com/blog/entry/98994
codeforces.com/blog/entry/62393

👨‍💻 Джуниор

ЧТО НУЖНО ЗНАТЬ ПРОГРАММИСТУ, ЧТОБЫ ПРОЙТИ СОБЕСЕДОВАНИЕ

Бонус: Что не нужно знать никому
часть 3

Не изучайте особенности фреймворка.
На своих петах я кучу времени убил на изучение встроенной функции Spring Security для парсинга JWT, на поиск идеального способа обработки исключений в Spring MVC, на доскональное изучение документации Spring Data JPA и плагина для генерации из OpenAPI.

Да, разбираться во всем этом было интересно, но я мог бы намного быстрее сделать задачи, стоявшие передо мной и в дальнейшем мне эти знания даже не пригодились.

Поэтому:
- старайтесь правильно расставлять приоритеты
- ставьте себя во временные рамки
- помните, что лучшее - враг хорошего
- помните о принципах KISS и YAGNI
- и об одном из принципов Agile: работающий продукт — основной показатель прогресса

👨‍💻 Джуниор

ЧТО НУЖНО ЗНАТЬ ПРОГРАММИСТУ, ЧТОБЫ ПРОЙТИ СОБЕСЕДОВАНИЕ

🙌 Часть 3: что нужно знать всем?
часть 2

Git
Основное:
- создание репозиториев
- коммиты, резеты, реверты
- ветки (создание ветки, ребейз и мердж)
- работа с удаленным репозиторием на гитхаб
Для общего развития:
- подходы к работе с гит (имхо, самое полезное - гит флоу)
Курс по гиту от Яндекс Практикума.
Статья о подходах к работе с гитом.

Архитектура
- Принципы SOLID
- ООП (или функциональное программирование, если для вашего языка актуальнее)
- Паттерны проектирования.
Слишком углубляться в них не надо, достаточно прочитать пару статей. Также, не стоит пытаться применить их в своих пет-проектах, это вас только запутает🫠
Хороший сайт с объяснением паттернов (из России заходить под впн).

👨‍💻 Джуниор

КАК С СОРТИРОВКОЙ МАССИВА ИНТОВ ПО УБЫВАНИЮ СПРАВИЛИСЬ НЕЙРОНКИ?

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

Промтп: how to sort an array of ints in java in descending order

Chat GPT 3.5 - 5/10
Правильный, но странный ответ. GPT зачем-то сначала отсортировал исходный массив, потом переложил в массив Integer и отсортировал заново, но теперь в порядке убывания, используя компаратор. Понятно, что первый раз можно было не сортить.

КАК С СОРТИРОВКОЙ МАССИВА ИНТОВ ПО УБЫВАНИЮ СПРАВИЛИСЬ НЕЙРОНКИ? Telegram (ссылка), IT, Программирование, Нейронные сети, Длиннопост

Gemini - 4/10
Первые два пункта отличные. Первый предполагает, что я использую обертки, а второй, что примитивы. Но 3 пункт не сработает! Gemini решил, что если написать свою реализацию компаратора, то что-то изменится, а это не так - массив примитивов все еще нельзя передать.

КАК С СОРТИРОВКОЙ МАССИВА ИНТОВ ПО УБЫВАНИЮ СПРАВИЛИСЬ НЕЙРОНКИ? Telegram (ссылка), IT, Программирование, Нейронные сети, Длиннопост
КАК С СОРТИРОВКОЙ МАССИВА ИНТОВ ПО УБЫВАНИЮ СПРАВИЛИСЬ НЕЙРОНКИ? Telegram (ссылка), IT, Программирование, Нейронные сети, Длиннопост

Copilot (aka Bing) - 7/10
Очень неплохо. Он предположил, что я хочу сортить массив оберток, но предупредил, что если мне нужны примитивы, то надо сначала их конвертировать.

КАК С СОРТИРОВКОЙ МАССИВА ИНТОВ ПО УБЫВАНИЮ СПРАВИЛИСЬ НЕЙРОНКИ? Telegram (ссылка), IT, Программирование, Нейронные сети, Длиннопост

Алиса - 3/10 Сделала ту же ошибку, что Gemini в 3 пункте. Но она и не особо про код, так что прощаем!

КАК С СОРТИРОВКОЙ МАССИВА ИНТОВ ПО УБЫВАНИЮ СПРАВИЛИСЬ НЕЙРОНКИ? Telegram (ссылка), IT, Программирование, Нейронные сети, Длиннопост

GigaChat - 3/10 Опять ошибка из 3 пункта Gemini.

КАК С СОРТИРОВКОЙ МАССИВА ИНТОВ ПО УБЫВАНИЮ СПРАВИЛИСЬ НЕЙРОНКИ? Telegram (ссылка), IT, Программирование, Нейронные сети, Длиннопост

🏆 Победитель - Copitlot
👎 Последнее место, к сожалению, Алиса и GigaChat


👨‍💻 Джуниор

Показать полностью 6

ПОЧЕМУ В JAVA НЕЛЬЗЯ ОТСОРТИРОВАТЬ МАССИВ ИНТОВ ПО УБЫВАНИЮ

Недавно решал задачку, предполагавшую сортировку int[] arr по убыванию.
Я пытался это сделать минут 5... Иии не отсортировал🙂
В джава нет вообще ни единого встроенного механизма сортировки массива примитивов по убыванию и вот почему.

Массивы сортируются с помощью метода Arrays.sort(arr), но сортирует он по возрастанию.
Для сортировки по убыванию нужно передать в него компаратор:

ПОЧЕМУ В JAVA НЕЛЬЗЯ ОТСОРТИРОВАТЬ МАССИВ ИНТОВ ПО УБЫВАНИЮ Telegram (ссылка), IT, Программирование

Не буду вдаваться в подробности работы компаратора, потому что такой код даже не скомпилируется! Компаратор не умеет работать с примитивами, ведь он использует дженерик:

ПОЧЕМУ В JAVA НЕЛЬЗЯ ОТСОРТИРОВАТЬ МАССИВ ИНТОВ ПО УБЫВАНИЮ Telegram (ссылка), IT, Программирование

А так выглядит sort для инта (и такой же метод есть отдельно для каждого примитива):

ПОЧЕМУ В JAVA НЕЛЬЗЯ ОТСОРТИРОВАТЬ МАССИВ ИНТОВ ПО УБЫВАНИЮ Telegram (ссылка), IT, Программирование

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

👨‍💻 Джуниор

ЧТО НУЖНО ЗНАТЬ ПРОГРАММИСТУ, ЧТОБЫ ПРОЙТИ СОБЕСЕДОВАНИЕ

🔙 Часть 2: Что нужно знать бэкендеру?
часть 1

Базы данных и SQL
Основное:
- устройство реляционных баз данных
- виды связей и ключи
- индексы и ограничения
- транзакции, их уровни и ACID
- умение писать SQL-запросы (ddl, dml)
Для общего развития:
- Система управления версиями базы (для джавы это Liquibase). Ей довольно просто пользоваться и она пригодиться в работе.
- другие виды SQL: dcl, tcl
- PL/SQL: не стоит использовать в пет-проектах, но может встретиться в работе.
Интерактивный курс по SQL
Более углубленный курс от PostgresPro
Тренажеры по SQL: sql academy и sql exercises

Сеть (это еще и для фронтендеров🤓)
Основное:
- клиент-серверная архитектура
- HTTP
- REST
Для общего развития:
- OpenAPI
- GraphQL и gRPC
- сетевая модель OSI
Видео про архитектуру клиент-сервер и протоколы
Подробно про REST

Docker: достаточно использовать в пет-проектах и поверхностно знать принцип работы. Докер реально удобная штука, но если вы на винде, придется немного помучиться с WSL.

Linux: достаточно выучить базовые команды (навигация в терминале, изменение прав, создание/удаление/перемещение файлов) и общее устройство файловой системы.

Kafka: дополнительно. Кафка сложно устроена, поэтому не зацикливайтесь на ней. Но немного разобраться можно - это будет плюсом на собесе и поможет в работе.

👨‍💻 Джуниор

Показать полностью
Отличная работа, все прочитано!