В своей работе я часто сталкиваюсь с использованием шаблонов проектирования DTO.
Данные на клиенте и на сервере в наших проектах структурируются по-разному. На стороне сервера этого требует оптимальное представление информации в базе данных и повышение производительности. На стороне клиента нет необходимости иметь закрытую информацию (пароль, email, роль и т.п.). Для этого могут использоваться специальные объекты – DTO (Data Transfer Object), которые содержат только те поля, которые нужны [на фронтенде]. Подробнее об этом можно найти статьи в интернете, например эту.
Но сегодня я хотел рассказать о том, какой инструмент есть для преобразования entity в dto и обратно, тем самым избегая boilerplate code.
Библиотека MapStruct – это генератор кода, который значительно упрощает реализацию сопоставлений между типами Java-компонентов на основе подхода соглашения, а не конфигурации. С MapStruct нужно создать интерфейс, а библиотека автоматически создаст конкретную реализацию во время компиляции.
Разобравшись с этой или подобной библиотекой, применяя ее, разработчик сокращает количество кода и время разработки.
Быстрый старт можно начать прямо на официальном сайте, по ссылке.
С принципами работы можно ознакомиться на примерах от разработчиков, доступных тут, или найдя статью наподобие этой.
Данные на клиенте и на сервере в наших проектах структурируются по-разному. На стороне сервера этого требует оптимальное представление информации в базе данных и повышение производительности. На стороне клиента нет необходимости иметь закрытую информацию (пароль, email, роль и т.п.). Для этого могут использоваться специальные объекты – DTO (Data Transfer Object), которые содержат только те поля, которые нужны [на фронтенде]. Подробнее об этом можно найти статьи в интернете, например эту.
Но сегодня я хотел рассказать о том, какой инструмент есть для преобразования entity в dto и обратно, тем самым избегая boilerplate code.
Библиотека MapStruct – это генератор кода, который значительно упрощает реализацию сопоставлений между типами Java-компонентов на основе подхода соглашения, а не конфигурации. С MapStruct нужно создать интерфейс, а библиотека автоматически создаст конкретную реализацию во время компиляции.
Разобравшись с этой или подобной библиотекой, применяя ее, разработчик сокращает количество кода и время разработки.
Быстрый старт можно начать прямо на официальном сайте, по ссылке.
С принципами работы можно ознакомиться на примерах от разработчиков, доступных тут, или найдя статью наподобие этой.
Отличная статья о том, как у нас учат будущих ИТ-специалистов, четко подсвечивает основные недостатки.
Пока система кардинально не изменится, мы так и будем получать выпускников, которые знают максимум C/C#, а потом вынуждены самостоятельно в экстренном режиме доучивать Java, Go и другие языки, без которых выдержать конкуренцию невозможно.
Нужны изменения в программах образования, которые будут актуальными. Пока что нам предлагают только курсы для освоения цифровых профессий (даже со скидкой). Конечно, этого недостаточно для улучшения ситуации, но плюсы в такой инициативе тоже есть. Студенты могут получить инфу, которой им не хватило в универе, и таким образом восполнить пробелы. И составить более полное представление о конкретном направлении смогут.
Надеюсь все-таки, что масштабные изменения не заставят себя ждать.
Пока система кардинально не изменится, мы так и будем получать выпускников, которые знают максимум C/C#, а потом вынуждены самостоятельно в экстренном режиме доучивать Java, Go и другие языки, без которых выдержать конкуренцию невозможно.
Нужны изменения в программах образования, которые будут актуальными. Пока что нам предлагают только курсы для освоения цифровых профессий (даже со скидкой). Конечно, этого недостаточно для улучшения ситуации, но плюсы в такой инициативе тоже есть. Студенты могут получить инфу, которой им не хватило в универе, и таким образом восполнить пробелы. И составить более полное представление о конкретном направлении смогут.
Надеюсь все-таки, что масштабные изменения не заставят себя ждать.
Хабр
О процессе подготовки ИТ специалистов в ВУЗах. Взгляд работодателя, подсмотренный изнутри
Работая в ИТ сфере региона, пережившего массовый исход ИТ специалистов, мы попали в непривычную ранее для фирмы ситуацию, когда спрос на нашу работу растет и ширится, а удовлетворить его уже попросту...
Как и обещал, начинаю постепенно делиться литературой по структуре данных.
Robert Lafore, Data Structures & Algorithms in Java
Основа основ. Со своими минусами: на мой вкус, воды многовато, местами изложены прописные истины, но для того, чтобы сформировать в голове базу, подходит.
Главное - не читайте в русском переводе: большая часть примеров там не запускается, еще и в предисловии вместо Java пишут JavaScript.
Robert Lafore, Data Structures & Algorithms in Java
Основа основ. Со своими минусами: на мой вкус, воды многовато, местами изложены прописные истины, но для того, чтобы сформировать в голове базу, подходит.
Главное - не читайте в русском переводе: большая часть примеров там не запускается, еще и в предисловии вместо Java пишут JavaScript.
Давненько не было никаких теоретических вопросов. Вспомним, что мы знаем о классах и методах?
Класс B определен как внутренний нестатический класс для A. Какие из нижеперечисленных утверждений верны?
Anonymous Poll
23%
Класс B имеет доступ ко всем полям и методам класса A, не отмеченным спецификатором доступа private
54%
Класс B имеет доступ ко всем полям и методам класса A независимо от спецификаторов доступа
20%
Класс A имеет доступ ко всем полям и методам класса B, не отмеченным спецификатором доступа private
32%
Класс A имеет доступ ко всем полям и методам класса B независимо от спецификаторов доступа
21%
Класс A не имеет доступа ни к каким полям и методам класса B
В классе А некоторые методы объявлены с модификатором static. Какие из нижеперечисленных утверждений верны?
Anonymous Poll
43%
Эти методы могут вызывать только другие статические методы
4%
Эти методы могут быть вызваны только экземплярами класса А
55%
Эти методы должны обращаться только к статическим данным
61%
Эти методы могут быть вызваны до того, как будут созданы какие-либо экземпляры класса А
17%
Все вышеперечисленные утверждения верны
Одна из моих любимых статей о важности системного подхода, пусть и напоминает по стилю расхожие мотивирующие цитаты.
Часто наблюдаю, как джуны пытаются решать задачи, не задумываясь об альтернативных подходах. И почти никогда – как кто-то из них применяет комплексное мышление. А ведь это ключевое умение для программиста.
Как еще развивать навык мыслить системно? Самый простой способ – отказываться от ежедневных привычных действий: менять маршрут от дома до работы, очередность рутинных задач. А еще расширять кругозор. Так постепенно приучаешься видеть в любой ситуации множество вариантов, среди которых затем находишь решение.
Часто наблюдаю, как джуны пытаются решать задачи, не задумываясь об альтернативных подходах. И почти никогда – как кто-то из них применяет комплексное мышление. А ведь это ключевое умение для программиста.
Как еще развивать навык мыслить системно? Самый простой способ – отказываться от ежедневных привычных действий: менять маршрут от дома до работы, очередность рутинных задач. А еще расширять кругозор. Так постепенно приучаешься видеть в любой ситуации множество вариантов, среди которых затем находишь решение.
Хабр
Думай как программист. Урок по решению задач
Если вы интересуетесь программированием, то возможно слышали фразу: «Каждый должен учиться программированию, потому что оно учит думать.» — Стив Джобс Наверное вы тоже задавались вопросом,...
Allen_B_Downey_Think_Data_Structures_Algorithms_and_Information.pdf
5.2 MB
Довольно интересная и насыщенная информацией книга: там и анализ алгоритмов, и хэш-таблицы, и двоичное дерево. Она небольшая и ориентирована скорее на опытных разрабов, но из-за этого некоторые темы разобраны не так подробно, как следовало бы (про DFS вот совсем мало). Зато даны реальные примеры, а не псевдокод. Рекомендую.
Очень спорная статья.
С одной стороны, прекрасно понимаю всеобщую усталость от теоретических вопросов, которые никакого отношения к происходящему на проекте не имеют. С другой, уверены, что хотите взять на работу человека, который не может внятно объяснить, чем LinkedList отличается от ArrayList?
Считаю, что выявлять реальный технический бэкграунд кандидата какими-то другими методами, кроме тех собеседования – ненадежно и некорректно. Разумеется, собеседование не должно состоять только из теорвопросов, все же это собеседование, а не экзамен. Но именно такие вопросы поставят всех кандидатов в равное положение. А вот с теми, кто на них ответил, можно уже и про опыт на прошлых проектах поговорить, и бизнес-задачи им предложить на декомпозицию.
С одной стороны, прекрасно понимаю всеобщую усталость от теоретических вопросов, которые никакого отношения к происходящему на проекте не имеют. С другой, уверены, что хотите взять на работу человека, который не может внятно объяснить, чем LinkedList отличается от ArrayList?
Считаю, что выявлять реальный технический бэкграунд кандидата какими-то другими методами, кроме тех собеседования – ненадежно и некорректно. Разумеется, собеседование не должно состоять только из теорвопросов, все же это собеседование, а не экзамен. Но именно такие вопросы поставят всех кандидатов в равное положение. А вот с теми, кто на них ответил, можно уже и про опыт на прошлых проектах поговорить, и бизнес-задачи им предложить на декомпозицию.
Хабр
Почему технические собеседования не нужны
Ремарка - речь пойдет о 98% собеседований в постсоветском пространстве на позицию Java Developer. Начну вот с чего: знание Collections Framework, его иерархии наследования, внутренней работы...
Выше уже писал об этом, но повторюсь: не бывает бесполезных базовых знаний. Те, кто кричит, что алгоритмы им не нужны, обычно не используют на максимум эффективности даже язык, на котором пишут каждый день, не то что какие-то другие доступные инструменты. Без алгоритмического анализа не получится решать по-настоящему сложные интересные задачи и прокачивать свой скил.
Поэтому в свое время я был очень рад, когда обнаружил запись курса по книге Кормена “Алгоритмы: построение и анализ”: информация усваивалась куда легче. Один из лекторов – Чарльз Лейзерстон, соавтор Кормена, так что объяснение буквально из первых рук.
Первую лекцию стоит посмотреть, чтобы понять, зайдет ли вам такой формат. Полный курс со всеми материалами есть на сайте открытых курсов MIT.
Поэтому в свое время я был очень рад, когда обнаружил запись курса по книге Кормена “Алгоритмы: построение и анализ”: информация усваивалась куда легче. Один из лекторов – Чарльз Лейзерстон, соавтор Кормена, так что объяснение буквально из первых рук.
Первую лекцию стоит посмотреть, чтобы понять, зайдет ли вам такой формат. Полный курс со всеми материалами есть на сайте открытых курсов MIT.
Держите задачку.
В программе определены класс Shape и его наследник класс Circle:
1 class Shape {
2 double square;
3 Shape(double r){
4 square = 3.14 * r* r;
5 }
6 }
7 class Circle extends Shape {
8 double r;
9 Circle (double rad) {
10 r = rad;
11 super(rad);
12 }
13 }
Выполнение программы завершилось ошибкой.
В программе определены класс Shape и его наследник класс Circle:
1 class Shape {
2 double square;
3 Shape(double r){
4 square = 3.14 * r* r;
5 }
6 }
7 class Circle extends Shape {
8 double r;
9 Circle (double rad) {
10 r = rad;
11 super(rad);
12 }
13 }
Выполнение программы завершилось ошибкой.
Какие изменения необходимо включить в текст программы, чтобы исключить ошибку?
Anonymous Quiz
8%
добавить в описание класса Circle описание конструктора без параметров
64%
изменить очередность следования строк 10 и 11
8%
изменить имя переменной в строке 3 на отличное от r и rad
13%
заменить ключевое слово super в строке 11 на Shape
8%
добавить в описание класса Shape описание конструктора без параметров
GitHub рассказали, что почти треть нового кода на платформе написана с помощью сервиса на базе искусственного интеллекта Copilot.
В комментариях к новости кто-то уже успел похоронить профессию программиста. Забавно, но рановато. Да и сам инструмент пока скорее для фана, чем для реальной пользы – лучше самому написать, чем потом переписывать 40% кода нейросети. Для новичков тоже польза сомнительная, особенно для тех, у кого еще база в голове окончательно не сложилась.
Посмотрим, как все будет развиваться дальше.
В комментариях к новости кто-то уже успел похоронить профессию программиста. Забавно, но рановато. Да и сам инструмент пока скорее для фана, чем для реальной пользы – лучше самому написать, чем потом переписывать 40% кода нейросети. Для новичков тоже польза сомнительная, особенно для тех, у кого еще база в голове окончательно не сложилась.
Посмотрим, как все будет развиваться дальше.
vc.ru
GitHub рассказала, что почти треть нового кода на платформе написана с помощью ИИ-сервиса Copilot — Разработка на vc.ru
А половина разработчиков продолжила использовать Copilot после пробного периода.