Содержание

Пять навыков Java, которые точно проверят на собеседовании в 2022 году / Хабр

По данным Хабр.Карьеры за июнь, чаще всего среди всех IT-специалистов российские компании искали backend-разработчиков. При этом самым популярным языков программирования, на которых реализуют backend, является Java. Так, доля вакансий Java-разработчиков среди всех вакансий на backend составляет более 35%.

Программный директор факультета backend-разработки направления «Программирование» Skillbox, директор центра подбора IT-специалистов SymbioWay Даниил Пилипенко рассказал, какие умения должен показать джуниор Java-разработчик, чтобы успешно пройти собеседование.

Умение писать код, который легко поддерживать

Ключевой навык любого разработчика, в том числе, на языке Java –– умение писать чистый код. Чем чище код, тем легче другим разработчикам в нём разбираться и вносить изменения. Вот наиболее типичные признаки чистого кода:

  • Понятные названия переменных
    Называть переменные нужно так, чтобы было понятно, что в них содержится. Например, переменную, отражающую количество денег, можно назвать moneyAmount. Названия вроде a, b или c использовать не стоит.

  • Избегание длинных методов
    Краткость облегчает чтение кода, поэтому создавайте методы длиной не более 20-ти строк. Ещё не стоит создавать методы с более чем тремя параметрами. Компактные методы будет легко использовать, тестировать и изменять.

  • Структура классов и методов
    Имена классов, методов и структура самих классов должны быть созданы понятно и с соблюдением принципов объектно-ориентированного проектирования и принципов SOLID.

  • Минимум комментариев
    Код должен быть понятен без комментариев и содержать их минимальное количество. Тогда при работе разработчику не придется погружаться в длительное изучение комментариев и в их актуализацию. С кодом, в котором много комментариев, часто бывает такое, что сам код меняют, а комментарии остаются старые.

  • Структура по правилам фреймворка
    Приложение должно быть структурировано по файлам и папкам в соответствии с правилами фреймворка, на котором пишется этот код. Если вы пишете код на фреймворке Spring, то контроллеры должны быть максимально плоскими и содержать минимум кода, а основная логика должна быть вынесена в сервисы. Кроме того, работать с базой данных нужно только через классы репозиториев –– не в сервисах или в контроллере, а шаблоны Thymeleaf нужно размещать отдельно. Если соблюдать все эти требования, время поиска любого фрагмента кода в приложении снизится до нескольких секунд. При ошибке в приложении разработчик сможет быстро найти класс и метод, который требует исправлений.

  • Низкий уровень вложенности
    Фрагменты с высоким уровнем вложенности операторов друг в друга делают код слабо поддерживаемым. Каждый дополнительный уровень вложенности приводит к излишним нагрузкам на разработчиков при чтении. Если в вашем коде внутри метода есть оператор if, в нём цикл, в нём ещё один оператор if, а внутри него — switch…case, такой код необходимо переписывать и делать менее вложенным.

Чтобы проверить навык написания поддерживаемого кода, на собеседовании могут дать небольшую задачу на так называемый live coding — написание кода в реальном времени под наблюдением. Тот, кто будет собеседовать кандидата, будет оценивать два фактора: работоспособность и поддерживаемость написанного кода. Также обычно смотрят на скорость работы –– время, которое кандидату потребовалось на решение задачи.

Знание фреймворка Spring

Этот фреймворк используется в большинстве современных веб-приложений на Java. Каждый начинающий Java-разработчик должен понимать, как создавать их. Важно знать, прежде всего, Spring Boot –– специальный вариант фреймворка Spring, который позволяет создавать веб-приложения быстро и удобно.

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

Умение работать с массивами и коллекциями Java

Начинающий разработчик должен понимать разницу между массивом и коллекцией, уметь создавать и изменять массивы и работать с классом Arrays. Важно также знать основные виды коллекций –– ArrayList, HashSet и HashMap. Стоит понимать механизмы работы List, Set и Map: это позволит выбирать оптимальную для решения той или иной задачи коллекцию.

Преимуществом на собеседовании станет и знание других коллекций, которые позволяют удобно оперировать наборами элементов –– их в Java много. Например, знать класс Collections, в котором есть большой набор инструментов для работы с коллекциями.

Разберитесь с принципами работы коллекций. На собеседовании могут спросить, например, что произойдет, если в HashSet добавить два разных объекта с одинаковым хэш-кодом. Это важный навык, так как от выбора класса коллекции может сильно зависеть скорость работы реализуемого приложения.

Знание языка запросов SQL

Практически любое веб-приложение использует базу данных (БД), чаще всего реляционную. Такие БД состоят из таблиц, в которых есть столбцы (поля) и строки (записи). Поля могут быть разных типов –– например, числа, строки, даты, JSON и так далее. Таблицы также могут быть связаны между собой. Чтобы работать с реляционными БД, разработчики используют язык запросов SQL.

С помощью SQL можно получать данные из таблиц, добавлять их туда, изменять и удалять, он также позволяет фильтровать и сортировать данные при выводе. Кроме того, с помощью SQL можно управлять и самими БД –– создавать их, добавлять в них новые таблицы, менять их структуру или удалять, а также управлять связями между таблицами. 

Разработчик должен уметь оптимизировать базы данных, таблицы и отдельные SQL-запросы, чтобы делать работу с БД более быстрой и эффективной. На собеседовании вас могут попросить написать какой-нибудь SQL-запрос или рассказать, например, о том, как работают разные типы оператора JOIN.

Знание принципов клиент-серверного взаимодействия

Формат взаимодействия браузера и просматриваемой веб-страницы с сервером обычно четко регламентирован. Для него используется протокол HTTP или его защищенная версия HTTPS. Они описывают форматы запросов к серверу и его ответов.

Разработчик должен знать протокол HTTP хотя бы верхнеуровнево. В частности, он должен понимать структуру запросов и ответов. Они состоят из строки запроса/ответа, заголовков и тела. Строка запроса содержит адрес ресурса и метод запроса, строка ответа содержит код ответа в числовом формате.

Важно знать популярные коды ответов. Например, 2xx –– коды успешных ответов, 3xx –– коды перенаправлений, 4xx –– коды ошибок на клиенте, 5xx –– коды ошибок на сервере. Вспомните популярную ошибку «Страница не найдена», которую может выдавать браузер –– это код ответа 404.

На собеседовании могут также проверить знания стандарта REST. REST –– это надстройка над протоколом HTTP. REST описывает правила клиент-серверного взаимодействия веб-приложений, по которым операции с сущностями соответствуют определённым методам HTTP. Так, метод GET отвечает за получение ресурса, метод POST –– за создание, PUT –– за полное изменение, a PATCH –– за частичное изменение.

Еще REST регламентирует пути запросов: например, при работе с новостями их список можно получить запросом GET /news. Если разработчик хочет создать новость, то он должен применить запрос POST /news. Чтобы получить конкретную новость, нужно ввести запрос GET /news/id, где id — это идентификационный номер этой новости.

Заключение

Конечно, темы вопросов на собеседованиях могут отличаться от компании к компании. Например, у вас могут проверить знания принципов объектно-ориентированного программирования, задавать более сложные вопросы по SQL и HTTP. Начинающему Java-разработчику также стоит хотя бы в общих чертах понимать, как работает вёрстка — технологии HTML и CSS.

Еще соискателю стоит понимать, как работать с системой контроля версий Git, таск-трекерами, командной строкой bash. Эти навыки являются основными, они позволяют начинать работу в новой команде и компании “гладко”. Те, кто владеет перечисленными навыками, очень быстро после выхода на новое место работы начинают приносить пользу своему работодателю.

Как стать Java разработчиком — путь специалиста Leantech с нуля до уровня Middle / Хабр

Дмитрий

Java Developer

Привет! Меня зовут Дима, я Java-разработчик. Хочу рассказать как я пришел в профессию, вырос до мидла и перешел из госучреждений в аутсорс компанию по разработке приложений. Рассказ будет полезен джунам и тем, кто хочет изучать Java, но боится потратить время впустую.

Я стараюсь следить за трендами в разработке, чтобы знать какие технологии набирают популярность и не отставать от коллег. Так вот, судя по статистике от Github, Java до сих пор находится в топ-3 самых востребованных языков разработки, хоть и немного сдала позиции за последние пару лет. На первом месте JavaScript, а на втором Python.

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

Почему я решил стать программистом

Интерес к технологиям у меня был с детства — в 7-8 лет у меня появился плейстейшен, я много играл в игры и мне была интересна сфера IT. В школе мне нравилась математика, и в старших классах я подумал, почему бы не пойти учиться на программиста.

Я не очень хорошо сдал ЕГЭ, у меня было около 150 баллов, но на техническую специальность мне хватило. Сначала я хотел на информатику и вычислительную технику, но решил подать документы на все специальности, связанные с программной инженерией, чтобы наверняка попасть на программирование. В итоге я поступил в ОмГТУ АСОИУ — универ меня заинтересовал агитацией по разработке роботов, сайтов и стажировками в крупных компаниях.

Универ или самообучение?

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

Универ давал базовые знания, но я понимал, что этого недостаточно. Я старался самостоятельно учиться через YouTube, но в процессе понял, что лучше начать изучение с классических книг по языкам. Потом можно комбинировать с роликами на YouTube, чтобы закрепить информацию. Дело в том, большинство роликов основано именно на этих книгах, а авторы каналов часто пропускают важную информацию — с первоисточником можно заполнить эти пробелы.

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

Лучше всего смотреть разные источники информации, черпать знания отовсюду — учеба, книги, статьи и видео экспертов, потом все это пробовать на практике.

Вот мой топ книг и каналов для обучения для Java-разработчиков:

— Java. Полное руководство | Шилдт Герберт

— SQL. Сборник рецептов | Молинаро Энтони

— Oracle PL/SQL. Для профессионалов | Прибыл Билл, Фейерштейн Стивен

Изучаем Java

Уроки Java

Eugene Suleimanov

Connor McDonald

Java

Как новичку выбрать язык?

Я не сразу определился, на каком языке хочу писать, поэтому пробовал себя в разных направлениях. Попробовал верстку, PHP, изучил базовый синтаксис C++, и понял, что это все не мое. На втором курсе я начал изучать Java и меня зацепило. У джавы простой синтаксис, она легкая для понимания, выражения мыслей и реализации кода. Если вы не знаете, с чего начать, можно попробовать языки разметки HTML и CSS, потом потестить JavaScript, посмотреть приятно ли на нем писать. Тут нет универсальной формулы, все делается методом проб и ошибок.

Кроме того, нужно опираться на рынок труда в вашем городе. Посмотрите, какие языки и технологии используют компании, куда вы хотели бы попасть, и какие языки вообще востребованы. Попробуйте поизучать их, но если синтаксис не нравится, не нужно себя мучать — лучше переключиться на другой язык. Я с первого курса интересовался компаниями, чтобы выбрать, где проходить практику. Когда я пробовал C++, я посмотрел рынок и оказалось, что тогда язык был не актуальным, это тоже повлияло на меня и я решил сменить направление.

Я собрал небольшой рейтинг языков программирования по количеству вакансий на HH на первую половину апреля 2022.

Что делать если после стажировок и тестовых не берут на работу?

Первая моя стажировка была в IT компании и прошла она не очень успешно. Я пришел туда с однокурсниками, нам дали проект — нужно было сделать систему опроса сотрудников на Java. Я не понимал, как это сделать, не знал многих функций и инструментов. Уже на половине практики я понял, что не вытягиваю, для меня это был полный фейл. А друг, с которым я практиковался, знал хорошо и начал делать большую часть работы. В итоге этот провал меня мотивировал совершенствоваться и начать изучать Java глубже. Я читал книжки, смотрел ютуб и понял, что я знаю только базовый синтаксис языка, а там есть еще фреймворки, библиотеки для работы с сетью, форматами передачи данных и т.д.

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

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

Если вы учитесь или работаете, вы все равно можете пойти стажироваться. Помните, что работодатели тоже люди и обо всем можно договориться. Можно, например, попросить дать больше времени на задачу. На стажировках и при выполнении тестовых не стесняйтесь задавать вопросы, даже самые дурацкие — главное разобраться в задании. У меня была ситуация, когда в тестовом было 4 задачи, я сделал две и остальные не понимал из-за ТЗ. Я спросил как это делать, и мне все объяснили, в итоге с задачами я справился.

Многие переживают, что им нечего писать в резюме, так как нет опыта. Напишите, какие курсы и стажировки вы проходили, может быть вы ходили на воркшопы или выполняли тестовые задания — подойдет любой релевантный опыт. Также пишите сопроводительные письма к откликам, HR-ы их читают и они на самом деле даже важнее резюме. Большинство кандидатов просто откликаются на вакансии, поэтому сопроводительное письмо будет вашим преимуществом. В письме можно написать, почему вы хотите работать в этой компании и чем вы будете им полезны.

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

Как я вырос до Middle и попал в крутую аутсорс компанию

На третьем курсе я искал работу, ходил по собеседованиям, ориентировался на Java и базы данных. Я хорошо оформил резюме, но работу удалось найти только к концу четвертого курса — в областной клинической больнице. Там я работал с Oracle и базами данных. Самыми крупными проектами там для меня были система электронных заявок на тех.поддержку и командная разработка онкологической карточки пациента, также мне очень нравилось решать баги в отчетах. В государственных учреждениях особо развития нет, поэтому я начал искать коммерческие компании.

Потом я перешел в единую службу такси (EST) на специалиста по базам данных, также под Oracle. У меня это хорошо получалось, но все равно хотел перейти в Java разработчика. Компании нужно было реализовать один проект на Java, у них не было джавистов и предложили мне это сделать. Я испугался, потому что не представлял как без наставника самому реализовать проект — там была огромная кодовая база, а у меня не было коммерческого опыта с Java, только учебные проекты. Сначала я отказался, но в итоге меня убедили, что все получится и команда будет поддерживать на новой позиции. Первую неделю я изучал ту часть кода, с которой мне предстояло работать, потом мне стали прилетать задачи от мобильного подразделения. В целом, все оказалось не так страшно, как я думал сначала.

Моей основной мотивацией в основном были даже не деньги, а развитие, я мечтал стать Java разработчиком. В EST были отличные инженеры и мне было с кем обмениваться опытом, но компания не выдержала конкуренции с крупными агрегаторами и у них начались финансовые трудности. Тогда мне написали из Leantech и в 2020 году я пришел туда одним из первых джавистов. Это мой первый опыт в аутсорсе, и я могу сказать, что там развития гораздо больше, чем в продуктовых компаниях. Продуктовые компании хоть и развиваются, но у них может быть устаревший стек и база. А в аутсорс компании есть возможность поработать с разными технологиями и улучшить свои знания. Плюс это возможность работать в команде с разными людьми, а обмен знаниями и опытом это самое важное.

Для меня каждый проект в Leantech становится толчком для развития. Например, у меня была возможность позаниматься небольшим pet-проектом по выгрузке данных из Jira — там я предложил использовать Spark, так как хотел поработать с этим инструментом. В аутсорс компаниях ты можешь предлагать новые инструменты и технологии, а не только пользоваться основным стеком компании — даже если в итоге инструмент не подойдет для задачи.

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

Подписывайтесь на Leantech в ВК, там мы делимся знаниями, полезными штуками для разработчиков и новостями IT-индустрии. Также в группе можно следить за актуальными вакансиями.

Java — Язык компьютерного программирования общего назначения, который является параллельным, основанным на классах, объектно-ориентированным и специально разработан таким образом, чтобы иметь как можно меньше зависимостей реализации / Habr

Язык компьютерного программирования общего назначения, который является параллельным, основанный, объектно-ориентированный и специально разработанный, чтобы иметь как можно меньше зависимостей от реализации

Статьи Авторы Компании

Показать первые

Ограничение рейтинга

граф4444

Иннотех корпоративный блог Высокая производительность *Программирование *Java *Apache *

Перевод

На первый взгляд сделать совместимыми REST и Apache Kafka кажется довольно сложной задачей. Однако команда Innotech справилась с задачей. Кирилл Воронкин, ведущий разработчик Innotech, поделился подробностями преобразования несинхронизированных запросов в синхронизированные.

Подробнее

Всего голосов 1: ↑1 и ↓0 +1

Просмотров

460

Комментарии 0

Орион1979

Java *Бизнес-модели *Kubernetes *

Tutorial

В предыдущем посте я описал пример микросервиса на основе kogito на quarkus в нативном режиме, содержащего одну встроенную модель pmml с деревом решений . Хотя его можно успешно использовать для целей прототипирования, в реальной жизни микросервис может содержать несколько моделей прогнозирования. На первый взгляд у меня сложилось впечатление, что включение нескольких моделей должно быть тривиальным расширением прототипа одной моделью. Мы полностью ошиблись в своем предположении, поэтому я решил написать этот пост. Другая причина – отсутствие руководств, в которых 2 (или более) модели помещаются внутрь диаграмм DMN в фреймворке kogito.

Подробнее

Всего голосов 1: ↑1 и ↓0 +1

Просмотров

1.1K

Комментарии 0

Орион1979

Java *Бизнес-модели *Kubernetes *

Учебник

Очень часто мы слышим, что некоторые фреймворки так хорошо подходят друг другу, что их считают «сочетанием на небесах».

В этой статье я хотел бы поделиться нашим опытом интеграции этих фреймворков.

Подробнее

Всего голосов 1: ↑1 и ↓0 +1

Просмотров

1.8K

Комментарии 0

MasterR_GeliOS

Разработка сайта *Java *Apache *

В этой статье я описал проблемы, с которыми столкнулся при интеграции Apache Camel с Spring Boot Actuator Prometheus по сбору метрик и свое решение этой проблемы (которое в инете не нашел).

Подробнее

Рейтинг 0

Просмотров

1.8K

Комментарии 0

Mixxxxa

Корпоративный блог PVS-Studio Информационная безопасность *Java *C++ *C# *

Впервые в PVS-Studio реализована поддержка классификации CWE в версии 6. 21. Он состоялся 15 января 2018 года. С тех пор прошли годы, и мы хотели бы рассказать вам об улучшениях, связанных с поддержкой данной классификации в последней версии анализатора.



Подробнее →

Рейтинг 0

Просмотров

623

Комментарии 0

tagir_valeev

Программирование *Java *Математика *

Перевод

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

 общедоступный статический двойной пресс (двойное значение) {
  если (значение < 0) {
    возвращаемое значение;
  }
  возвращаемое значение;
} 

Кажется, это слишком просто даже для вопроса на собеседовании. Есть ли здесь подводные камни?

Подробнее →

Всего голосов 11: ↑10 и ↓1 +9

Просмотров

31K

Комментарии 5

tagir_valeev

Программирование *Java *

Перевод

В Java 8 представлены два типа функциональных выражений: лямбда-выражения типа s -> System.out.println(s) и ссылки на методы, такие как System.out::println . Поначалу разработчики относились к ссылкам на методы с большим энтузиазмом: зачастую они более компактны, не нужно придумывать имя параметра, и, как гласят городские легенды, ссылки на методы несколько оптимальнее лямбда-выражений. Однако со временем энтузиазм угас. Одной из проблем со ссылками на методы является сложность отладки.

Подробнее →

Рейтинг 0

просмотров

3.

4K

комментариев 1

Алекспатель

Java *Разработка мобильных приложений *Разработка игр *Дизайн игр *Программное обеспечение

Прошедший год был очень непростым для бизнеса и сотрудников. Тем не менее, разработка программного обеспечения не так сильно пострадала и все еще процветает. В то время как техническая экспансия продолжается, разработка Java также претерпевает значительные изменения.

Появление новых концепций и технологий поставило под вопрос потенциал Java-разработчиков. От носимых приложений до решений на основе ИИ — использование Java вызывает беспокойство у коллег.

Более того, разработчикам пора повышать свою квалификацию в соответствии с изменяющимися требованиями отрасли. Если вы являетесь разработчиком Java, вам, конечно, тоже будет интересно, что я говорю о том, что вам следует изучить.

Подробнее

Рейтинг 0

Просмотров

7.2K

Комментарии 3

абондар24

Java *

Песочница

В мире микросервисов проблема высокой нагрузки чрезвычайно велика, особенно когда у нас есть REST API, доступ к которому осуществляется довольно широко. Зачем нам нужен дроссель? Основной ответ — снизить нагрузку на сервис в данный момент.

Разные фреймворки имеют разные решения, в основном какие-то дополнительные библиотеки. Также есть Guava RateLimiter и Bucket4J. Что интересно, Spring MVC, являющийся одним из самых популярных решений для создания REST API (спасибо, Spring Boot), не имеет встроенного ограничителя скорости. Что касается внешних решений, то их не так много.

Сегодня я хотел бы представить небольшую экспериментальную библиотеку для Spring MVC. Он называется SpringRateLimitter. Библиотека очень маленькая, работает во время выполнения. Идея состоит в том, чтобы аннотировать весь оставшийся контроллер или конкретный метод, затем подсчитать количество входящих запросов для аннотированного URI и на основе значений проверить, не превышаем ли мы допустимое количество вызовов. В случае превышения выдается код ошибки HTTP 429, и после окончания периода регулирования конечная точка снова становится доступной.

Итак, как это выглядит. В качестве первого шага необходимо добавить зависимость Maven

Подробнее

Всего голосов 3: ↑3 и ↓0 +3

Просмотров

3.2K

Комментарии 0

силаев_ка

Тестирование ИТ-систем *Программирование *Java *MongoDB *

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

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

Подробнее →

Рейтинг 0

Просмотров

1.1K

Комментарии 0

гбондарчук2019

Информационная безопасность *Программирование *Java *GitHub *Программное обеспечение

Перевод

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


Предыстория

За годы работы в сфере ИТ у меня была возможность работать над проектами в самых разных областях. Несмотря на то, что процесс проверки подлинности требований оставался относительно постоянным, методы реализации механизма авторизации, как правило, сильно отличались от проекта к проекту. Авторизацию приходилось писать практически с нуля под конкретные цели каждого проекта; нам нужно было разработать архитектурное решение, затем доработать его с изменением требований, протестировать и т.д. Все это считалось обычным процессом, которого разработчики не могли избежать. Каждый раз, когда кто-то реализовывал новый архитектурный подход, мы все больше чувствовали, что должны придумать общий подход, который бы охватывал основные задачи авторизации и (что наиболее важно) мог бы повторно использоваться в других приложениях. В этой статье рассматривается обобщенный архитектурный подход к авторизации на примере разработанного фреймворка.


Подходы к созданию фреймворка

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

Мы сосредоточимся на двух стилях кодирования: императивном и декларативном. Императивный стиль примерно как получить результат; декларативный около какое вы хотите получить в результате.

Подробнее →

Рейтинг 0

Просмотров

832

Комментарии 0

иполынкина

Корпоративный блог PVS-Studio Open source *Java *Data Mining *

Если вам кажется, что Новый год только что наступил, а вы пропустили первую половину января, то все это время вы были заняты поиском коварных ошибок в коде, который вы поддерживаете. Это также означает, что наша статья – это то, что вам нужно. PVS-Studio проверил опенсорсный проект ELKI, чтобы показать вам ошибки, которые могут встречаться в коде, как хитро они могут там прятаться и как с ними бороться.

Подробнее →

Всего голосов 3: ↑3 и ↓0 +3

Просмотров

533

Комментарии 1

Alex_Goldberg

Java *C++ *Разработка для Android *

Учебник

В этой части рассматривается использование карт типов, сложные и странные случаи, а также предложения по отладке. Эта часть требует понимания части 1 — использование SWIG в простых случаях.

Это практическое руководство для Android с проектом Android Studio, с которым вы можете поиграть.

Подробнее

Рейтинг 0

Просмотров

1.4K

Комментарии 0

Alex_Goldberg

Java *C++ *Разработка для Android *

Песочница

Tutorial

SWIG — это инструмент для создания межъязыковых интерфейсов — он обеспечивает интероперабельность C++ и других языков и Java в нашем случае). SWIG просто упрощает и автоматизирует межъязыковое взаимодействие; в противном случае вы можете получить тысячи строк рукописного Код JNI - но SWIG покрывает это за вас.

Это руководство предназначено для новичков (часть 1) и для тех, кто имеет опыт работы с SWIG (часть 2). Я начинаю с базовой настройки и использования и заканчиваю сложными и странными случаями, возникающими в процессе разработки. Последние случаи не такие сложные, скорее обычные для современных языков, которые SWIG еще не поддерживает (как и лямбда-выражения).

Это практическое руководство. В отличие от чрезмерно сложной и объемной документации SWIG, в этом руководстве практические примеры показаны. Биты, разработанные мной во время работы над разными проектами или взятые из StackOverflow. Это руководство позволяет быстро запустить проект Android Studio и дает практические примеры использования SWIG. Ссылка на проект Android Studio находится здесь.

Это руководство предназначено в первую очередь для Android. Цель состояла в том, чтобы упростить адаптацию для разработчиков Android. Есть много статей о SWIG, но они в основном предназначены для настольных Java-приложений, и просто попробовать их на Android, чтобы проверить, работает ли решение для конкретной проблемы, довольно накладно. Хотя это руководство включает в себя проект Android Studio, с которым вы можете сразу же поиграть. Разумеется, вся приведенная здесь информация относится к любому Java-приложению.

Предупреждение!  Я должен предупредить вас, что в настоящее время кроссплатформенная разработка предлагает мощные инструменты. Если вы разрабатываете новое приложение, на практике гораздо выгоднее использовать ReactNative, Flutter или Kotlin-Native, чем SWIG. В то время как SWIG больше подходит для подключения библиотеки C++ или существующего ядра приложения C++.

Подробнее

Всего голосов 3: ↑3 и ↓0 +3

Просмотров

2.4K

Комментарии 0

Стефанбазз

Корпоративный блог PVS-Studio Open source *Java *

Новый год неуклонно приближается, поэтому пора подводить итоги. Продолжая традицию, мы вспомнили наши статьи о проверке Java-проектов из мира open-source за этот год и составили рейтинг 10 самых интересных ошибок.

Подробнее →

Всего голосов 1: ↑0 и ↓1 -1

Просмотров

1.3K

Комментарии 0

ВалерийКомаров

Корпоративный блог PVS-Studio Программирование *Java *Apache *Big Data *

Приложения, используемые в сфере больших данных, обрабатывают огромные объемы информации, причем зачастую это происходит в режиме реального времени. Естественно, такие приложения должны обладать высокой надежностью, чтобы никакая ошибка в коде не могла помешать обработке данных. Для достижения высокой надежности необходимо внимательно следить за качеством кода проектов, разработанных для этой области. Статический анализатор PVS-Studio — одно из решений этой проблемы. Сегодня в качестве объекта тестирования анализатора был выбран проект Apache Flink, разработанный Apache Software Foundation, одним из лидеров рынка программного обеспечения для работы с большими данными.

Подробнее →

Всего голосов 1: ↑0 и ↓1 -1

Просмотров

626

Комментарии 0

Лайонез

Программирование *Java *Apache *Промышленное программирование *

Перевод

Учебник

Привет, товарищи!

В этой статье я покажу, как легко настроить приложение Spring Java с помощью брокера сообщений Kafka. Мы будем использовать контейнеры Docker для приложений kafka zookeeper/brocker и настроим авторизацию открытым текстом для доступа как из локальной, так и из внешней сети.

Ссылку на финальный проект на github можно взять в конце статьи.

Подробнее

Всего голосов 1: ↑1 и ↓0 +1

Просмотров

20K

Комментарии 1

ШифаМартин

Java *Управление персоналом *Программное обеспечение

В этом цифровом мире люди предпочитают работать удаленно. Есть множество задач, которые каждый из нас решает каждый день. Если говорить об использовании приложения, то было предсказано, что между 2018 и 2022 годами число загрузок приложений по всему миру увеличится на 25% .

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

Знаете ли вы?

Подробнее

Рейтинг 0

Просмотров

8.8K

Комментарии 10

олегчир

Корпоративный блог JetBrains Java *Big Data *

Плагин Big Data Tools легко интегрирует HDFS в вашу IDE и предоставляет доступ к различным облачным системам хранения (AWS S3, Minio, Linode, Digital Open Космос, ГС, Лазурь). Но разве это конец? Все ли мы реализовали и теперь прогресс остановился? Конечно нет.

В этом кратком дайджесте мы рассмотрим 15 популярных распределенных файловых систем, доступных на рынке, и попытаемся понять их индивидуальные преимущества.

Почти все эти системы бесплатны или имеют открытый исходный код, и вы можете найти исходный код на GitHub. Сайты этих проектов, их документация и онлайн-обзоры предоставляют большую часть информации, которую мы здесь рассмотрим. Кроме HDFS, ни одна из этих технологий еще не была реализована в инструментах больших данных. Но кто знает? Возможно, когда-нибудь мы увидим их в нашем плагине.

Подробнее →

Всего голосов 8: ↑8 и ↓0 +8

Просмотров

5.8K

Комментарии 1

олегчир

Корпоративный блог JetBrains Java *Scala *Big Data *

EAP 11 подключаемого модуля инструментов больших данных для IntelliJ IDEA Ultimate, PyCharm и DataGrip доступен с сегодняшнего дня. Вы можете установить его из репозитория плагинов JetBrains или внутри вашей IDE.

Big Data Tools — это новый подключаемый модуль JetBrains, который позволяет подключаться к кластерам Hadoop и Spark и отслеживать узлы, приложения и задания. Он также поддерживает редактирование и запуск блокнотов Zeppelin внутри IntelliJ IDEA и DataGrip, так что вы можете создавать, редактировать и запускать блокноты Zeppelin, даже не выходя из любимой IDE. Плагин предлагает интеллектуальную навигацию, завершение кода, проверки, быстрые исправления и рефакторинг внутри блокнотов.

Подробнее →

Всего голосов 7: ↑7 и ↓0 +7

Просмотров

1.4K

Комментарии 0

Давайте погрузимся в новые функции JDK / Habr

Java была мечтой программиста, и как лучше всего измерить популярность Java в новой версии Java 13. После первоначального предложения по усовершенствованию Java в функциях JDK произошли улучшения, которые взорвет сознание разработчиков Java новым набором функций после официального релиза 17 сентября 2019 года. .

Как вы думаете, почему Java так популярен?

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

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

Давайте углубимся в статистику и оценим соотношение популярности приложений Java среди других конкурирующих языков программирования.

Согласно недавнему сентябрьскому отчету Tiobe Index, Java-приложения и программисты следят за его положением и усложняют жизнь другим языкам программирования.

Увидев популярность Java среди других языков программирования, давайте вкратце перейдем к функциям Java 13 JDK:

  1. JEP 350: динамические архивы CDS
  2. JEP 351: ZGC: отменить фиксацию неиспользуемой памяти
  3. JEP 353: повторная реализация устаревшего API сокетов
  4. JEP 354: выражения переключения (предварительная версия)
  5. JEP 355: текстовые блоки (предварительная версия)

Поскольку мы не можем ожидать много изменений после первоначального выпуска Java 12, все еще есть изменения на функциональном уровне, которые могут привести программистов Java к новым стабильным функциям. Цель состоит в том, чтобы доработать предварительные функции к следующей LTS-версии, чтобы они были достаточно стабильными и хорошо выглядели в течение следующих трех лет. Ожидается, что к сентябрю 2021 года Java 17 примет на себя наследие Java 8 и 119.0003

В этом блоге я расскажу вам о последних функциях, которые вы можете ожидать от Java 13.

-> Динамические архивы CDS

многое произошло под крышей JVM и внутриклассной библиотеки. Совместное использование данных классов (CDS) было введено еще во времена Java 5. Конечная цель CDS — сократить время запуска приложений Java за счет хранения определенной информации о классах в архивах совместного использования данных классов. Затем данные могут быть загружены во время выполнения и использованы несколькими JVM.

Однако до Java 10 общие архивы были доступны только для Bootstrap ClassLoader. Начиная с Java 10, CDS был расширен за счет совместного использования данных классов приложений (AppCDS). AppCDS позволяет встроенному загрузчику классов системы и платформы, а также определяемым пользователем загрузчикам классов получать доступ к архивам CDS. Списки классов необходимы для создания архивов CDS, чтобы идентифицировать загружаемые классы.

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

Динамические архивы CDS теперь строятся на этом. Цель состоит в том, чтобы сохранить дополнительные тестовые запуски приложения. После выполнения приложения архивируются только вновь загруженные классы приложений и библиотек, которые еще не содержатся в CDS уровня по умолчанию/базового уровня. Динамическое архивирование активируется с помощью команд командной строки. В будущем расширении архивирование классов может выполняться полностью автоматически и прозрачно.

-> ZGC: удалить неиспользуемую память

В настоящее время приложения должны обслуживать тысячи пользователей одновременно. Таким приложениям требуется много памяти, а управление памятью имеет большое значение, что влияет на производительность приложения. Чтобы соответствовать заявленным требованиям, Oracle представила Z Garbage Collector (ZGC) в Java 11, поскольку он обещает очень короткие паузы при очистке памяти кучи размером в несколько терабайт.

Раньше он не освобождал память кучи, зарезервированную для приложений. В результате приложения потребляют гораздо больше памяти, чем необходимо. Особенно страдают приложения, работающие в средах с ограниченными ресурсами. Другие сборщики мусора, такие как G1 и Shenandoah, уже поддерживают освобождение неиспользуемой памяти.

-> Обновленные API-интерфейсы сокетов

API-интерфейсы Java Socket и Java ServerSocket представляют собой фрагменты JDK 1.0. Большинство из них состоит из наследия Java и C Code. Это значительно усложняет обслуживание и расширяемость. Предполагается, что NioSocketImpl заменит устаревший PlainSocketImpl. NioSocketImpl уже основан на существующей реализации New I/O и использует существующую инфраструктуру в JDK.

Предыдущая реализация несовместима с другими запланированными расширениями языка. Например, проблемы параллелизма мешают будущему использованию облегченных пользовательских потоков (файбер, часть Project Loom).

-> Улучшения для выражений Switch

Если вы посмотрите на эту функцию с точки зрения разработчика, то этот момент просто интересен. Например, Switch Expressions был представлен в качестве предварительной версии в Java 12 и был расширен благодаря отзывам пользователей. Выражения Switch являются альтернативой громоздким и подверженным ошибкам операторам switch.

Самое большое изменение в нормах кодирования, которое можно было увидеть в Java 13, — это замена ключевого слова break в выражении switch на yield. Фоном является лучшее различие между оператором switch (с возможным разрывом) и выражениями (с выходом). Оператор yield выходит из переключателя и возвращает результат текущей ветки, аналогично возврату.

Например, приведенный ниже фрагмент кода демонстрирует сценарий, в котором оператор Switch используется с break, а в другой части используется выражение Switch Expression с yield, чтобы устранить разницу между ними.

-> Текстовые блоки вместо необработанных строковых литералов

текстовый блок — это новый тип для определения строкового литерала в языке Java. Его можно использовать для обозначения строки везде, где можно использовать строковый литерал, но он обеспечивает большую выразительность и меньшую случайную сложность. Первая реализация необработанных строковых литералов вызвала много вопросов, поскольку пользователи оставляли отзывы о том же, что вызывало множество вопросов.

В конце концов, многие приложения Java могут обрабатывать фрагменты кода из других языков, таких как HTML или SQL. До сих пор такие строки могли быть определены только громоздким способом, что затрудняло их чтение.

Например, для разрыва строки необходимо использовать дополнительные управляющие команды (экранирование с помощью \n). Другие языки, такие как Groovy, Scala или Kotlin, уже давно предлагают возможность определения многострочных текстов.

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