Рубрика «java»

Статья представляет собой очень краткое введение в Simula.

Simula ((SIMIUlation LAnguage) ), первый язык программирования с классами и объектами, незаслуженно почти забытый, но из которого выросло современное ООП в том виде, в котором оно присутствует в нашем коде. Это язык для имитационного моделирования реальности. Разработчики новых языков программирования «оглядывались» на Simula при добавлении механизмов объектно-ориентированного программирования в свой язык. Однако Simula упоминается настолько редко, что в русской википедии на момент публикации был только хеллоуворд, а в сети куча устаревших ссылок.

Simula — 50 лет ООП - 1

Бьерн Страуструп, говоря о причинах создания C++, сказал так: «Этот язык возник потому, что автору потребовалось написать программы моделирования, управляемые прерываниями. Язык SIMULA-67 идеально подходит для этого, если не учитывать эффективность.»
Читать полностью »

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

Dagger 2 advanced part 1 image
Читать полностью »

Прошло полтора года как Microsoft закрыл случайно оказавшийся в корзине с Xamarin-ом RoboVM. Уже и официальный robovm.com канул в лету. Последняя opensource версия 1.8 была форкнута группой MobiVM и поддерживается на искусственном дыхании в рабочем состоянии и сейчас.

Сам RoboVM (тут и далее MobiVM форк я буду называть так) тесно переплетен с MacOSX и в оригинальном виде, будучи запущенным в Windows/Linux встречает сообщением, что код писать можно, компилировать нельзя. Встречая в cmake файлах/сети упоминании о Windows, принял вызов и решил довести дело к какому-либо результату.

Понадобится:

Читать полностью »

Подборка ресурсов для соискателя на вакансию программист - 1


Занимаясь с 2013 г. обучением Java и трудоустройством выпускников, я накопил достаточно большую коллекцию ссылок на темы составления резюме, онлайн тестов, подготовки к собеседованию и прохождения интервью, поиска работы и советов новичкам. Часть подходит всем кандидатам, часть (по подготовке) специфична для Java. Предлагаю Вашему вниманию эту подборку:

Читать полностью »

От переводчика:

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

Нахождение 3-го элемента от конца в односвязном списке или n-го узла от хвоста является одним из каверзных и часто задаваемых вопросов по проблемам односвязных списков на собеседованиях. Задача, в данном случае, в том, чтобы решить проблему всего в один проход цикла, т.е., нельзя снова пройтись по связному списку и нельзя идти в обратном направлении, т.к. список односвязный. Если вы когда-нибудь решали проблемы связных списков, например, нахождение длины, вставки или удаления элементов, вы должны уже быть знакомы с вопросом обхода списков. В данной статье мы используем тот же самый алгоритм, который мы использовали для нахождения срединного элемента связного списка в один проход цикла. Этот алгоритм также известен как «алгоритм черепахи и зайца» из-за скорости двух указателей, используемых алгоритмом для обхода односвязного списка.
Читать полностью »

Всем доброго и постепенно наступающего!

До окончания этого года остаётся не так уж и много времени, но мы ещё похоже успеем запустить два курса, одним из которых будет курс по Java EE. Так что держите первую часть заметок по Servlet 4.0

Новый крупный релиз API Servlet охватывает протокол HTTP/2 и прогнозирует потребности в ресурсах.

Долгожданное обновление для Java EE 8 включает в себя обновления существующих API: JAX-RS 2.1, Bean Validation 2.0, JavaServer Faces (JSF) 2.3, Contexts and Dependency Injection (CDI) 2.0, JSON with Padding (JSONP) 1.1 и Servlet 4.0, а также два новых API: JSON-Binding (JSON-B) и Java EE Security. Среди этих API, Servlet 4.0 представляет собой достаточно крупное обновление, первое с 2009 года.

Импульс, который вызвал этот большой релиз (а не точечное обновление), — это глобальное развертывание протокола HTTP/2 и множество новых возможностей, которые он приносит. Это обновление для HTTP является первым за почти 20 лет и устраняет многие недостатки HTTP 1.x. Новые возможности многочисленны (мультиплексирование запросов/ответов, сжатие заголовков, приоритизация потоков и push-сервер), но наиболее заметной функцией для пользователей Servlet API является Server Push, о котором я расскажу в этой статье.

Server Push — это не единственное примечательное дополнение к Servlet 4.0. Этот релиз также представляет усовершенствования в виде Servlet Mapping API, который поддерживает распознавание URL-отображений во время выполнения, за счет улучшений получения ссылочных путей. В этой статье обсуждаются эти функции, и как Server Push был интегрирован в API JavaServer Faces 2.3.

Servlet 4.0: Делаем больше быстрее. Server Push - 1

Читать полностью »

Привет! Сегодня в нашем блоге Макс Туев, архитектор Surf, одной из наших сертифицированных студий. Ребята занимаются заказной разработкой, поэтому сроки важны не меньше, чем качество кода. Подходы и технологии, которые тормозят разработку, здесь не подходят. Хороший пример такого — RecyclerView.Adapter. Под катом Макс расскажет, как сэкономить время и нервы. Слово Максу.
Головная боль от RecyclerView.Adapter — выход есть - 1
Читать полностью »

История последних дней. Есть у нас два SQL Server'а (2016 c SSD диском) и Express Edition (2012 с традиционным HDD). Аппаратно оба компьютеры примерно похожи (CPU/RAM/LAN). В целом 2016 «отдает» данные в 2-5 раз быстрее, за исключением некоторого набора таблиц, для которых 2012 работает быстрее в 1,5-2 раза. Такое поведение полностью противоречит какой бы то ни было логике. Любые манипуляции с настройками базы данных только ухудшают ситуацию. 2016 все более замедляется, но только для этого набора таблиц.

Для понимания парадоксальности ситуации — на обоих серверах развернута одна и та же база (с одного и того же файла backup'a). В этой базе порядка 600 таблиц. Те 5-6 которые ведут себя удивительно ничем не отличаются от десятков подобных (по структуре и количеству записей) с которыми такой проблемы нет. На обоих «серверах» — Windows 10 с последними обновлениями (это сервера разработок, а не продуктивные). На обоих SQL Server'ах последние сервис паки (без hot fix'ов). Никакие специальные «режимы» (trace flags и пр.) SQL Server'ов не включены.

Загадка сия была велика, но мой коллега ее решил. Вы даже знаете как…
Читать полностью »

Недавно я провел исследование о main() методе в Java и то, как он служит точкой входа для любого приложения Java. Это заставило меня задуматься, а как насчет Android-приложений? Есть ли у них основной метод? Как они загружаются? Что происходит за кулисами до выполнения onCreate()? Майкл Бэйли очень подробно рассказал о том, как работает Main Thread, так что это быстрый обзор его доклада плюс дополнительная информация из Android Open Source Project (AOSP).

В этой статье мы рассмотрим:

  1. Что происходит от нажатия на иконку приложения до запуска MainActivity
  2. Найдем основной метод приложения и узнаем, как основной поток (он же UI, он же Main Thread) получает свое назначение.
  3. Рассмотрим роль, которую играют Looper & Handler в передаче сообщений, которые в конечном итоге приводят к созданию вашей Activity.

Что происходит при запуске приложения

При запуске любого приложения, многое происходит глубоко внутри на уровне ядра, например начальная загрузка Zygote, загрузка классов в JVM, а для JVM — найти основной метод static void main(String args []) и вызывать его. В случае Android JVM находит основной метод main() в ActivityThread. Затем он вызывает main(), после чего ядро передает управление вашему приложению. Итак, мы нашли точку входа — ActivityThread, но прежде чем подробно изучить это, давайте посмотрим на дорожную карту процесса, чтобы визуализировать всю операцию.
Читать полностью »

Закончив очередной проект на Java, я попытался разобраться в причинах накопившегося раздражения. Да я люблю Яву и все такое, но… Есть несколько «но», которые досаждают. Приходится писать довольно много шаблонного кода, с генерацией которого вполне может справиться сам компилятор, IDE, конечно, выручает, но это не решение проблемы, а скорее костыль: если что-то изменилось, нужно перегенерить и вычистить и т.д. Проверки на null! Это зубная боль, по-хорошему, нужно делать их всегда дабы не нарваться на «нежданчик» в виде NullPointerException в самый неподходящий момент. Короче говоря, появилось желание посмотреть, что еще появилось в природе и сможет ли это нечто заменить мне Java. Дальше имеет смысл описать участников данного сравнения. Сразу скажу, что не претендую на полноту анализа, к сожалению, у меня было слишком мало времени, чтобы как следует познакомиться с каждым языком.

Обязательные требования к претендентам, которые у меня были:

• Язык общего назначения
• Кроссплатформенность (хотя бы Windows/Linux)
• Стабильность
• Статическая типизация
• Автоматическая уборка памяти
• Поддержка полноценной объектно-ориентированной парадигмы
• Хорошая поддержка в IDE (Eclipse, IDEA или на худой конец NetBeans)
• Безгемморойный доступ к существующим фреймворкам/библиотекам
• Производительность на уровне Java
Читать полностью »