Обновить
128K+

Java *

Объектно-ориентированный язык программирования

238,48
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Идеальный мавен. Часть 2: структура проекта

Время на прочтение7 мин
Охват и читатели38K

Это вторая статья, посвященная мавену и его использованию для организации моих проектов. Целью этой статьи будет структура проекта под управлением мавен. Особых откровений вы не найдёте, скорее набор общих правил для моих проектов. Первую статью можно прочитать здесь.

Читать дальше →

Использование Google FireBase для создания простого чата на Android

Время на прочтение11 мин
Охват и читатели26K
Несколько дней назад я начал разработку простейшего чата под Android, я решил использовать Firebase — простую в использовании базу данных в режиме реального времени, которая хранит свои данные в формате JSON. Несмотря на то, что Firebase предоставляет полный API-интерфейс и документацию по использованию, я обнаружил, что у неё не хватает деталей при попытке применить её к шаблону архитектуры, например MVP, поэтому я решил попробовать и объяснить, как я понял реализацию на Android. Также я расширил шаблон MVP новым слоем, явно для Firebase — Interactors.
Читать дальше →

Дебаты об отличном сервере приложений Java c Tomcat, Jboss, GlassFish, Jetty и Liberty Profile. Часть вторая

Время на прочтение9 мин
Охват и читатели11K
Всем доброго! Как и обещали, вторая часть перевода статьи по теме Java EE. Первую часть можно увидеть тут.

ОПЕРАЦИЯ ПОД ПРИКРЫТИЕМ

Надеемся, вы не только сейчас поняли, что бюджет равен 0, и вообще вас покорил WebLogic ;) До сих пор, мы рассматривали темы, значимые на начальных этапах, во время изучения серверов приложений. Теперь же посмотрим чуть глубже на каждый сервер, чтобы понять, отвечает ли он реальным задачам разработчика:

  • Настоящие показатели производительности;
  • Функционал и Соответствие Open Standards;
  • Администрирование и Управление/UI;
  • Стоимость $$$/Лицензия.

Читайте дальше, уже скоро мы определим, какой сервер приложений лучший из лучших!

Настоящие показатели производительности

Знали ли вы, что Lamborghini Gallardo LP570-4 Superleggra 2011 г. выпуска разгоняется от 0 до 60 км/ч всего за 2.8 с, а Dodge Viper Hennessey Venom GT делает это за целых 2.9 с? Думаю, водителям Viper ооочень скучно ждать, пока их машина разгоняется до 60!


Читать дальше →

Пять идей «на вооружение», или Впечатления от московского «Гейзенбага»

Время на прочтение13 мин
Охват и читатели7.4K
image

Как убедиться, что на конференции, на которую ты берёшь билет, не будет «лажи»? На мой взгляд, лучший способ — стать спикером одной из конференций того же организатора и на себе протестировать процесс отбора и подготовки докладов. Весной я был спикером на конференции, проводимой компанией JUG.ru Group, а всё происходившее перед этим напоминало защиту учёной степени. Несколько раз мой доклад прослушивал программный комитет, после каждого из прогонов я получал длинный список вопросов и замечаний. Один из членов комитета стал «оппонентом» и в бесконечных дискуссиях в Slack-е требовал дополнительных экспериментов, чтобы получить безусловные доказательства эффективности того, о чём я собирался рассказать в докладе. Когда пришла новость, что доклад одобрен — это был ещё не финал: мне было предложено вместе с другими докладчиками пройти двухдневные курсы ораторского мастерства. Пройдя через это испытание, я знаю: ребята из JUG.ru Group не допустят на своих конференциях ни капли «лажи». И я доверяю им: в этом году я посетил большинство их конференций.
Читать дальше →

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

Время на прочтение4 мин
Охват и читатели24K
image

Серьезная уязвимость (CVE-2017-13156) в Android позволяет злоумышленникам изменять код в приложениях, не затрагивая их подписи. Корень проблемы состоит в том, что файл может быть действительным файлом APK и действительным файлом DEX одновременно. Назвали его уязвимостью Януса в честь римского бога двойственности.
Читать дальше →

Dagger 2 для начинающих Android разработчиков. Dagger 2. Часть 1

Время на прочтение7 мин
Охват и читатели67K
Данная статья является четвертой частью серии статей, предназначенных, по словам автора, для тех, кто не может разобраться с внедрением зависимостей и фреймворком Dagger 2, либо только собирается это сделать. Оригинал написан 10 декабря 2017 года. Перевод вольный.

image
Читать дальше →

Мульти-арные функции в Java

Время на прочтение3 мин
Охват и читатели16K

Напомню: арность (англ. arity) — это количество параметров функции. Соответсвенно мульти-арные (это слово можно писать вместе или раздельно) функции — это функции с несколькими параметрами. В Java 8 были введены функции с одним и двумя входными параметрами. А как быть если параметров больше?
Читать дальше →

Arrays, Collections: Алгоритмический минимум

Время на прочтение8 мин
Охват и читатели69K

Arrays, Collections: Алгоритмический минимум


Массивы и списки


Недавно на собеседовании в крупную компанию на должность Java разработчика меня попросили реализовать стандартный алгоритм сортировки. Поскольку я никогда не реализовывал самописные алгоритмы сортировки, а пользовался всегда готовыми решениями, у меня возникли затруднения с реализацией. После собеседования я решил разобраться в вопросе и подготовить список основных алгоритмов сортировки и поиска, которые используются в стандартном пакете java — Java Collections Framework (JCF). Для этого я изучил исходники Oracle JDK 7.80 (UPD: добавлена ссылка).

В самом обобщенном виде результат изучения представлен на рисунке. Подробности — в основном тексте.



Рисунок 1. Методы Arrays, Collections и реализуемые ими алгоритмы
Читать дальше →

Что я узнал после 1000 code review

Время на прочтение4 мин
Охват и читатели24K
Во время работы в LinkedIn большая часть моей работы составляло код-ревью. Вышло так, что некоторые рекомендации я давал много раз, поэтому я решил составить список, которым поделился с командой.

Вот мои 3 (+1 бонусная) наиболее распространенные рекомендации по код-ревью.

image

Рекомендация 1: Выбрасывайте исключения, если что то идет не так


Зачастую паттерн выглядит так:

List<String> getSearchResults(...) {
  try {
    List<String> results = // make REST call to search service
    return results;
  } catch (RemoteInvocationException e) {
    return Collections.emptyList();
  }
}


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

Многопоточное программирование в Android с использованием RxJava 2

Время на прочтение13 мин
Охват и читатели40K
Если вы новичок в общении с RxJava или пытались разобраться в этом, но не довели дело до конца, то ниже вы найдете для себя кое-что новое.

image
Оригинал статьи написан 29 ноября 2017. Перевод вольный.
Читать дальше →

Практическое использование multiple bounds generic в Java

Время на прочтение2 мин
Охват и читатели8.4K

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

Читать дальше →

Настройка валидации DTO в Spring Framework

Время на прочтение6 мин
Охват и читатели54K
Всем привет! Сегодня мы коснёмся валидации данных, входящих через Data Transfer Object (DTO), настроим аннотации и видимости — так, чтобы получать и отдавать только то, что нам нужно.

Итак, у нас есть DTO-класс UserDto, с соответствующими полями:

public class UserDto {

    private Long id;
    private String name;
    private String login;
    private String password;
    private String email;
}

Я опускаю конструкторы и геттеры-сеттеры — уверен, вы умеете их создавать, а увеличивать в 3-4 раза код смысла не вижу — представим, что они уже есть.

Мы будем принимать DTO через контроллер с CRUD-методами. Опять же, я не буду писать все методы CRUD — для чистоты эксперимента нам хватит пары. Пусть это будут create и updateName.
Читать дальше →

Принципы SOLID в действии: от Slack до Twilio

Время на прочтение15 мин
Охват и читатели20K


Похоже, что в наши дни RESTful API существует абсолютно для всего. От платежей до бронирования столиков, от простых уведомлений до развёртывания виртуальных машин — почти всё доступно через простое HTTP-взаимодействие.

Если вы разрабатываете собственный сервис, то часто хотите обеспечить его работу одновременно на нескольких платформах. Проверенные временем принципы ООД (объектно-ориентированного дизайна) сделают ваш код более отказоустойчивым и упростят расширяемость.

В этой статье мы изучим один конкретный подход к проектированию, который называется SOLID (это акроним). Используем его на практике в написании сервиса с интеграцией Slack, а затем расширим для использования с Twilio.
Читать дальше →

Ближайшие события

Почему repository в pom.xml — плохая идея

Время на прочтение5 мин
Охват и читатели17K

Где-то полгода назад я опубликовал туториал, посвящённый добавлению в проект библиотек, которых нет в репозиториях maven. Речь шла о маленьких проектах, и я порекомендовал ставить тег repository прямо в pom.xml, чтобы можно было собирать проект без необходимости править settings.xml.



В комментариях этот подход критиковали sshikov, igor_suhorukov, jbaruch и многие другие. Там же в комментариях мне дали ссылку на статью Брайана Фокса, в которой чётко и понятно изложено, чем чреваты repository в pom.xml. Статья 2009 года, но не потеряла актуальности до сих пор. Перевода на Хабре я не нашел — поэтому предлагаю вашему вниманию свой.

Читать дальше →

Spring Websocket + SockJs. How it works?

Время на прочтение6 мин
Охват и читатели35K
Доброго времени суток уважаемые хабравчане. В данной статье хочу продолжить рассказ устройства Spring Websocket, рассмотрев серверную реализацию Spring Websocket + SockJs.

SockJs — это JavaScript библиотека, которая обеспечивает двусторонний междоменный канал связи между клиентом и сервером. Другими словами SockJs имитирует WebSocket API. Под капотом SockJS сначала пытается использовать нативную реализацию WebSocket API. Если это не удается, используются различные транспортные протоколы, специфичные для браузера, и представляет их через абстракции, подобные WebSocket. Про порт данной библиотеки в мир Spring Frameworks мы сегодня и поговорим.
Читать дальше →

Дебаты об Отличном Сервере Приложений Java c Tomcat, Jboss, GlassFish, Jetty и Liberty Profile

Время на прочтение12 мин
Охват и читатели31K
Всем доброго!
Что ж у нас очередной новый курс Java Enterprise, а это значит, что есть то, чем мы с радостью поделимся с вами. Просьба особо не обращать внимания на версии и даты, т.к. суть от этого особо не меняется (или, если считаете, что меняется, то ждём комментарии).

Вступление: Да начнутся дебаты…

Какой тип сервера приложений Java вам стоит выбрать для следующего проекта? Зависит от того, какое приложение вы разрабатываете, какие у вас потребности, в какой организации работаете и многих других факторов. Без дебатов не обойтись. Поэтому навострите уши и слушайте внимательно.

Что делает сервер приложений сервером приложений, мистер Лебовски?

Что представляет собой сервер приложений — вопрос, вызывающий много споров в силу неточности определения. Википедия, как неоспоримый источник знаний, говорит следующее:
Java Platform, Enterprise Edition, сокращенно Java EE (до версии 5.0 — Java 2 Enterprise Edition или J2EE) — набор спецификаций и соответствующей документации для языка Java, описывающей архитектуру серверной платформы для задач средних и крупных предприятий.
Прости, Википедия, но в целях этой статьи, нам плевать на педантичные описания и полную имплементацию Java EE. Мы больше заботимся о нуждах и желаниях разработчиков.
Большинство разработчиков работают над веб-приложениями и резко используют все навороченные особенности EE-спецификации. На самом деле, ныне доступные сервера, обладающие только базовым функционалом, являются наиболее используемыми, как показал наш Отчет Производительности Разработчиков:


Читать дальше →

Первый в России митап по Apache Ignite, 12 декабря

Время на прочтение1 мин
Охват и читатели2.1K
Друзья, приглашаем всех на посвящённый Ignite митап 12 декабря в московском ImpactHub (метро Китай-Город). Такие мероприятия мы хотим регулярно проводить в Москве и Санкт-Петербурге, и надеемся, что они станут местом встреч российских пользователей и разработчиков Ignite, специалистов по In-Memory Computing, а также всех, кто интересуется распределенными системами. Здесь можно будет обсудить любые вопросы, связанные с работой или развитием экосистемы.

На первом митапе мы хотим познакомить вас российскими банком и крупным телекомом, использующими Ignite каждый день.

Программа встречи:

— 18:30: Сбор гостей;
— 19:00: Рассказ о внедрении Apache Ignite в Сбербанке (Михаил Хасин, Сбербанк);
— 19:45: «Как мы построили Complex Event Processing крупного телеком-оператора на Apache Ignite» (Виктор Ходяков, Gridfore);
— 20:30: Секретный доклад;
— 21:15: Общение в кулуарах, заключительный кофе;
— 22:00: Окончание.
Читать дальше →

[Питер] Встреча JUG.ru с Олегом Ненашевым из CloudBees — Groovy DSL в Jenkins и Pipeline. Реализации и подводные грабли

Время на прочтение1 мин
Охват и читатели4.1K


В понедельник, 4 декабря, в офисе компании Oracle состоится встреча с Олегом Ненашевым, разработчиком в компании CloudBees, которая является одним из основных контрибьюторов Jenkins. Тема встречи — Groovy DSL в Jenkins и Pipeline.

Несмотря на появление новых средств CI/CD, Jenkins остается одним из наиболее популярных серверов автоматизации. Он фактически является распределенным веб-сервисом и предоставляет различные DSL, в том числе с доступом к JVM и внутренним API. Давать такой доступ нужно аккуратно, а то в продакшне будет мучительно больно: security, UX, performance, и т.д. О предотвращении этой боли и пойдет разговор.

Олег расскажет:

  • как в Jenkins реализованы Groovy DSL и почему их так много;
  • как в Jenkins Pipeline реализованы Groovy Sandbox, доступ к API Java, Script Security и персистентность контекста при рестарте;
  • какие архитектурные проблемы это вызывает;
  • как можно при всем этом расширять и поддерживать DSL для частных задач.
Читать дальше →

Dagger 2 для начинающих Android разработчиков. Внедрение зависимостей. Часть 2

Время на прочтение3 мин
Охват и читатели29K
Данная статья является третьей частью серии статей, предназначенных, по словам автора, для тех, кто не может разобраться с внедрением зависимостей и фреймворком Dagger 2, либо только собирается это сделать. Оригинал написан 1 декабря 2017 года. Перевод вольный.

image
Читать дальше →

In-Memory Computing Summit 2017 San Francisco

Время на прочтение2 мин
Охват и читатели2.5K
Не так давно, в конце октября, в Кремниевой долине прошел очередной In-Memory Computing Summit, одним из организаторов и спонсоров которого стала компания GridGain.

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



На саммите было более прочитано более 40 докладов по распределенным системам и вычислениям в памяти. Среди выступавших были сотрудники компаний GridGain, Percona, AMY Robotics, Hazelcast, VoltDB Inc., Dell и других.

Далее мы отдельно упомянем несколько избранных докладов.