• 12.85

  • +19.59

Отличия между слабыми, мягкими, фантомными и обычными ссылками в Java.

    «Слабые» ссылки и «мягкие» ссылки (WeakReference, SoftReference) были добавлены в Java API давно, но не каждый программист знаком с ними. Это свидетельствует о пробеле в понимании где и как их использовать. Ссылочные классы особенно важны в контексте сборки мусора . Как все мы знаем сборщик мусора сам освобождает память занимаемую объектами, но не все программисты знают что решение об освобождении памяти он принимает исходя из типа имеющихся на объект ссылок.
    Главное отличие SoftReference от WeakReference в том как сборщик с ними будет работать. Он может удалить объект в любой момент если на него указывают только weak ссылки, с другой стороны объекты с soft ссылкой будут собраны только когда JVM очень нужна память. Благодаря таким особенностям ссылочных классов каждый из них имеет свое применение. SoftReference можно использовать для реализации кэшей и когда JVM понадобится память она освободит ее за счет удаления таких объектов. А WeakReference отлично подойдут для хранения метаданных, например для хранения ссылки на ClassLoader. Если нет классов для загрузки то нет смысла хранить ссылку на ClassLoader, слабая ссылка делает ClassLoader доступным для удаления как только мы назначим ее вместо крепкой ссылки (Strong reference). В этой статье мы рассмотрим отличия типов ссылок в том числе Strong reference и Phantom reference (фантомная ссылка).

10 ошибок зачастую допускаемых Java разработчиками.

    Этот список включает 10 ошибок зачастую допускаемых Java разработчиками.

    #1. Преобразование массива в ArrayList.
    Для преобразования массива в ArrayList, разработчики часто используют такой способ:

List<String> list = Arrays.asList(arr);

    Arrays.asList() вернет объект класса ArrayList который является внутренним приватным статическим классом (private static class) класса Arrays, а это не класс java.util.ArrayList. Класс java.util.Arrays.ArrayList содержит методы set(), get(), contains(), но не содержит никаких методов для добавления элементов, его размер фиксирован. Для создания настоящего java.util.ArrayList следует сделать так:

ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));

    Конструктор класса java.util.ArrayList может принимать в качестве параметра все объекты реализующие интерфейс Collection, реализацию которого унаследовал и класс java.util.Arrays.ArrayList
(private static class ArrayListextends AbstractListimplements RandomAccess, java.io.Serializable).

10 часто используемых методов для работы с массивом в Java.

    Следующие 10 методов для массивов в Java являются часто используемыми. Они имеют самый высокий рейтинг в Stack Overflow — системе вопросов и ответов о программировании.

Интуитивно понятная, надежная библиотека для работы с временем и датами, наконец-то появилась в Java (Часть 1).

    Наконец-то в Java появился интуитивный, надежный метод работы с датами и временем.
    Принципы даты и времени являются фундаментальными во многих приложениях. Такие разные вещи как даты рождения, сроки аренды, время событий и часы открытия магазина, все основаны на датах и времени, но Java SE не предоставляла удобного способа работы с ними. Начиная с Java SE 8, появился набор пакетов java.time — который предоставляет хорошо структурированный API для работы с датами и временем.

Предыстория
    Когда Java впервые появилась, в версии 1.0, единственным классом для работы с датами и временем был java.util.Date. Первым на что обратили внимание разработчики было то, что он не представляет собой «дату». На самом деле он представляет собой момент времени с точностью до миллисекунд, отмеренный с даты 1-го января 1970-го года. Однако, на основании того что метод toString() у Date выводит дату и время в том часовом поясе который указан в настройках java машины, некоторые разработчики ошибочно сделали вывод о том что Date умеет работать с часовыми поясами.
    Исправить этот класс оказалось настолько сложно (или настолько лениво) что в версии 1.1 пришлось добавить новый класс — java.util.Calendar. К сожалению, класс Calendar оказался не сильно лучше чем Date.

Интуитивно понятная, надежная библиотека для работы с временем и датами, наконец-то появилась в Java (Часть 2).

Время суток
    Итак, идем дальше. Следующей сущностью, после даты, является время суток, представляемое классом LocalTime. Классический пример — представление времени работы магазина, скажем с 7:00 до 23:00. Магазины открываются в это время по всей стране, но фактическое время будет различное, в зависимости от часового пояса.
    LocalTime это класс-значение, в котором хранится только время, без ассоциированной даты и часового пояса. При добавлении или вычитании временного промежутка, он обрежется по полночи. То есть, 20:00 плюс 6 часов это 2:00.
    Использование LocalTime похоже на LocalDate:
LocalTime time = LocalTime.of(20, 30); 
int hour = date.getHour(); // 20 
int minute = date.getMinute(); // 30 
time = time.withSecond(6); // 20:30:06 
time = time.plusMinutes(3); // 20:33:06 

    Модификаторы могут работать и с LocalTime, однако операции с временем обычно не настолько сложны чтобы требовалось использование модификаторов.

В Java 8 можно объединять строки.

    Я уверен, что вы были в ситуации, в которой хотели объединять несколько строк. Если вы писали не на Java, то вероятно вы использовали функцию join() предоставленную вам самим языком программирования. Если вы писали на Java, то не могли этого сделать по простой причине — этого метода не было. Стандартная библиотека классов в Java предоставляла вам инструменты для создания приложений с графическим интерфейсом, для доступа к базам данных, для отправки данных по сети, для XML преобразований или для вызова методов сторонних библиотек. Простой метод для соединения коллекции строк не был включен. Для этого вам необходима была одна из множества сторонних библиотек.

    К счастью, этому пришел конец! В Java 8 мы, наконец, можем объединять строки!

    В Java 8 добавлен новый класс, называемый StringJoiner. Как следует из названия, мы можем использовать этот класс, чтобы объединять строки:

10 самых сложных вопросов на собеседованиях по Java.

10 самых сложных вопросов на собеседованиях по Java.

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

Руководство пользователя IntelliJ IDEA. Основы работы с системами контроля версий.

Основы работы с системами контроля версий

Одна из наиболее приятных вещей в IntelliJ IDEA это замечательная интеграция с основными системами контроля версий, 
такими как Git, GitHub, Subversion, Mercurial, Perforce, TFS, CVS, Visual SourceSafe и Rational ClearCase.

  1. Получить ваш проект из системы контроля версий
    Чтобы импортировать ваш проект из системы контроля версий, нажмите кнопку Check out from Version Control на Welcome screen (приветственное окно IDEA), или в меню VCS (система контроля версий) на главной панели меню.



    Если в вашем проекте есть файлы настройки сборки для Maven или Gradle, IntelliJ IDEA предложит вам использовать их для конфигурации.
  • ,

Руководство пользователя IntelliJ IDEA. Основы рефакторинга.

Основы рефакторинга

IntelliJ IDEA предлагает полный набор функций автоматизированного рефакторинга кода, который приводит к существенному 
росту производительности при правильном использовании. Эта статья научит вас, как это сделать.

  1. Выбор
    Прежде всего, вам даже не обязательно выделять нужный элемент кода перед рефакторингом. IntelliJ IDEA достаточно умна, чтобы понять, какое выражение вы собираетесь реорганизовать, и просто запрашивает подтверждение если возможны несколько вариантов.



Руководство пользователя IntelliJ IDEA. Сервера приложений.

Сервера приложений

IntelliJ IDEA Ultimate поставляется с предустановленной поддержкой большинства популярных проприетарных и открытых 
серверов приложений, включая GlassFish, WebLogic, JBoss EAP, Wildfly, WebSphere, Tomcat, TomEE, Jetty, 
Geronimo, Resin и Virgo.


  1. Сервера приложений
    Чтобы настроить сервер в среде разработки, откройте Settings → Application Servers и нажмите кнопку Add application server. Среда разработки автоматически определит версию установленного сервера и предложит вам выбрать, какие библиотеки вам добавить в список зависимостей если данный сервер используется в проекте.



Руководство пользователя IntelliJ IDEA. Отладчик.

Отладчик

  1. Запуск отладчика
    После того как вы настроите конфигурацию запуска вашего проекта, вы можете запускать его в режиме отладки, нажав Shift + F9



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

Руководство пользователя IntelliJ IDEA. Преобразования кода («предложения»).

Предложения
Разница между inspections (инспекциями) и intentions (предложениями) в том, что inspections помогает 
вам исправить те места в коде, которые кажутся подозрительными Intellij IDEA, а intentions служат для 
внесения изменений в нормальный код для улучшения его структуры.


Чтобы получить список намерений применимых к коду где установлен курсор, просто нажмите Alt + Enter.

  1. Оптимизация выражений и управление скобками
    Поскольку IDE следит за потоком данных в коде, она может помочь вам оптимизировать логические выражения и преобразовать, операторы if / else: