Обновить
256K+

Java *

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

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

На что может рассчитывать студент в IT, и какие есть вообще варианты

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


В Петербурге зарплаты для Java-junior'а колеблются от 30 до 60К рублей. За пару лет реально дорасти до 80К, за 3-4 года — до 120К. Это докризисные цены, сейчас многие подняли зарплаты еще процентов на 20, сначала те, у кого клиенты зарубежные, а потом и остальные, чтобы оставаться конкурентноспособными.

Проблема, конечно, в том, как сразу выбрать правильное место, где можно будет расти максимально быстро. Даже зная в общем базовую технологию (Java), дальше открывается такое огромное количество веток от геймдизайна до хардкорного хайлоада, что быстро становится понятно — надо выбирать. Здесь и сейчас, потому что изучить все в деталях не выйдет: мир постоянно меняется, и специалистом в один момент времени можно быть только в чём-то одном.

Я уже несколько лет наблюдаю за поведением IT-студентов с большим интересом. Получается, что после университета у них либо есть нужная хорошая практика как старт; либо же они оказываются перед чертовски странным выбором, где даже непонятно, что и из чего выбирать. И по книгам, Гитхабу или другим самостоятельным образом выучиться достаточно быстро не выйдет — очень много времени будет потрачено просто зря. При этом в мире нужны все: дикий кадровый голод на Java-программистов есть по всему миру. Количество программистов в мире растет на 15% в год то есть, удваивается каждые 5 лет, а в России — еще быстрее. У бизнеса огромный спрос на прогеров. Понятно, что ВУЗы просто не успевают подготовить такое количество кадров.

Надо что-то с этим делать. И вот к каким выводам в Java User Group мы пришли по этому поводу относительно студентов.
Читать дальше →

Volker Simonis — Внутренности SAP JVM [Встреча JUG в Питере]

Время на прочтение3 мин
Охват и читатели8.4K
Уже в эту среду, 14 октября, в петербургском офисе компании Oracle состоится встреча JUG.ru c Фолькером Симонисом из SAP. Тема встречи — внутреннее устройство SAP JVM.

sap-jvm

Наверняка многие из вас слышали про SAP — немецкого гиганта, который делает разные корпоративные системы — бухучёт, контроль за производством, финансы, HR, кадры, управление складом и прочий «Кровавый энтерпрайз», который с большой вероятностью стоит в вашей организации, если ее численность превышает тысячу человек.

Фокус в том, что многие (если не все) из перечисленных решений так или иначе работают на Java, и соответственно внутри них крутится JVM. Прикол в том, что это их собственная JVM. Ну как собственная — в свое время она была лицензирована у Sun вместе с исходниками, из которых и разрабатывалась. В данный момент — она лицензируется у Oracle. Соответственно, это некоторый форк Oracle JDK / JVM со своими косынкой и секретаршами, лицензированный, совместимый и т.д. и т.п.

Однако это не только форк, но и порт, поддерживающий 7 CPU-архитектур: x86, x86_64, SPARC, PowerPC, Itanium, z/Arch and PA-RISC на семи разных операционках: OS X, Windows, Solaris, Linux, AIX, as400 and HP/UX. По заявлению SAP, они поддерживают единую систему конфигурирования, единое поведение, одинаковые плюшки и расширения, инструменты анализа и поддержи на всей этой аццкой комбинации платформ.



Как видно из этой таблички, они до сих пор поддерживают Java с 1.4 до 8 на всех упомянутых платформах. Например, Oracle поддерживает нынче только Java 8, а Azul и Red Hat, как я понимаю, только 6, 7 и 8.

Так вот, у нас большое счастье. В эту среду на питерском JUG Volker Simonis, наш большой друг и разработчик SAP JVM, будет в стандартном двухчасовом формате рассказывать про все это щастье. Он будет выступать на Joker и планировал прилетать в четверг, но мы специально попросили прилететь его на день раньше, чтобы сделать с ним отдельный JVM-ный ивент.
Подробности и регистрация на встречу

Настройка GPIO в Coremodule 920

Время на прочтение6 мин
Охват и читатели8.5K
Требовалось уметь обращаться к GPIO на Coremodule 920 из под Windows 7 x86. Приложение, которому требовался доступ пишется мной на Java.

Поиск решений


  • Попробовать разобраться самостоятельно
  • Обратиться в техподдержку за помощью

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

Из ответа на мой вопрос следовало, что у них есть драйвер на C и только под Linux, что меня не устраивало.
Читать дальше →

Kotlin ❤ FP

Время на прочтение11 мин
Охват и читатели33K
Предлагаю читателям «Хабрахабра» вольный перевод статьи «Functional programming in Kotlin». Автор публикации — Mike Hearn.

image

Те, кто используют .NET, наверняка слышали про F#, универсальный функциональный язык программирования для CLR. Программисты же вне .NET сообщества скорее всего знают про функциональное программирование в связи с языком Haskell.

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

Язык Kotlin (kotlinlang.org) от JetBrains может показаться всего лишь подслащенной Java: синтаксические конвенции, автовывод типов (type inference) и тому подобные мелочи. Но под незамысловатой оболочкой в нем можно найти все самые популярные и прогрессивные конструкции функциональных языков.
Читать дальше →

Фрактальный кустик от новичка для новичков

Время на прочтение4 мин
Охват и читатели22K
Как я уже упоминал, я начинающий (и самый скромный во Вселенной) программист на Java. Иногда душа просит чего-то такого, вот прям чтоб сначала развернулась, а потом опять свернулась. Красоты хочется. А красоту рисовать мы еще не обучены. Зато обучены рисовать палочки и кружочки.

И с боевым кличем «Красота в простоте!», рисуем из палочек. А что мы можем нарисовать красивое и простое, да чтоб коллеги ахнули в восторге? И тут на помощь приходит красивое слово – Фрактал.

Сначала определение: «Фрактал – это структура из частей… бла-бла-бла… самоподобие… бла-бла-бла… красиво… бла-бла-бла...».



И вооруженные этим исчерпывающим знанием давайте нарисуем фрактальное дерево, а точнее кустик.
Читать дальше →

Диагностируем причину, выживаем в JAR hell: не дышим серой и не варимся в котле

Время на прочтение6 мин
Охват и читатели21K
Бывает что в крупном проекте работающем в jvm, внезапно обнаруживается что приложение не работает и даже не запускается при обновлении какой-либо из зависимостей проекта. Такое же возможно из-за любого другого события, которое изменило порядок следования библиотек в classpath приложения.


Добро пожаловать в JAR hell

Тестирование в Яндексе. Как сделать отказоустойчивый грид из тысячи браузеров

Время на прочтение7 мин
Охват и читатели42K
Любой специалист, причастный к тестированию веб-приложений, знает, что большинство рутинных действий на сервисах умеет делать фреймворк Selenium. В Яндексе в день выполняются миллионы автотестов, использующих Selenium для работы с браузерами, поэтому нам нужны тысячи различных браузеров, доступных одновременно и 24/7. И вот тут начинается самое интересное.



Selenium с большим количеством браузеров имеет много проблем с масштабированием и отказоустойчивостью. После нескольких попыток у нас получилось элегантное и простое в обслуживании решение, и мы хотим поделиться им с вами. Наш проект gridrouter позволяет организовать отказоустойчивый Selenium-грид из любого количества браузеров. Код выложен в open-source и доступен на Github. Под катом я расскажу, на какие недостатки Selenium мы обращали внимание, как пришли к нашему решению, и объясню, как его настроить.
Читать дальше →

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

Время на прочтение10 мин
Охват и читатели39K
magicМетапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы (в частности, на стадии компиляции их исходного кода), либо программ, которые меняют себя во время выполнения.

Аннотации, как инструмент метапрограммирования появились вместе с релизом Java 5 в далеком 2004 году. Вместе с ними появился инструментарий Annotation Processing Tool, на смену которому пришла спецификация JSR 269 или Pluggable Annotation Processing API. Что интересно, этой спецификации без малого 10 лет, но свою популярность в Android разработке она начала обретать только сейчас.

О возможностях, которые открывает эта спецификация мы поговорим чуть позже (будет мнооого кода), а сперва, не хотите ли поговорить о компиляции Java кода?
Читать дальше →

Доступна IntelliJ IDEA 15 Preview

Время на прочтение3 мин
Охват и читатели39K
Вчера JetBrains опубликовал превью IntelliJ IDEA 15.

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

image

Во-первых, продолжая адаптировать IDE к Java 8, мы улучшили взаимодействие дебаггера с лямбда выражениями. Теперь при установке брейкпоинта вы можете указать не всю строку, а конкретное лямбда выражение, которое в ней содержится. Точно также вы можете применять Run to cursor по отношению конкретному лямбда выражению вне зависимости от того, на какой строке оно находится. И наконец если вы вызываете Step Into, IDE предложит перейти к лямбда выражению, являющемуся параметром.

image

Кроме того в дебаггер был добавлен экшн Force return, который позволяет прервать исполнение текущего метода и вернуть выбранное вами значение. Это удобно, если вы хотите поменять логику выполнения кода в целях отладки.

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

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

«Мы можем лучше протестировать Java, чем Oracle» — интервью с Андреем Паньгиным из Одноклассников

Время на прочтение14 мин
Охват и читатели25K
Сегодня я приготовил для вас большое интервью с Андреем Паньгиным aka apangin, ведущим инженером Одноклассников. Андрей больше 6 лет проработал JVM-инженером в Sun Microsystems, в том числе, в команде HotSpot, а последние 5 лет работает в Одноклассниках, решая там вопросы, связанные с JVM и производительностью. Так что Андрей по праву считается одним из сильнейших JVM-щиков в России.



Андрей — эксперт в системном программировании, занимался системами хранения и системами передачи информации. Складывал кирпичики, которые лежат в основе портала Одноклассники и обеспечивают надежность и быстродействие сервисов.

Вот о чем мы поговорили с Андреем:

  • чего стоит переезд с Java 7 на Java 8;
  • что происходит с sun.misc.Unsafe;
  • архитектура Одноклассников;
  • инженерные компромиссы, шардинг и GC;
  • системы хранения данных и Cassandra;
  • в чем Одноклассники впереди планеты всей, а чему еще стоит поучиться у Google;
  • как стать крутым системным программистом.


(Я знаю, что начало затянутое. Будем работать над тем, чтобы быстрее раскачиваться и входить в тему.)

Для тех, кому опять некогда смотреть видео, под катом расшифровка интервью.
Читать дальше →

JetBrains опубликовали уточнения к новой лицензионной и ценовой политике

Время на прочтение2 мин
Охват и читатели19K
В начале Сентября JetBrains опубликовали новость о смене модели лицензирования своих продуктов — компания объявила о переходе с бессрочной лицензии на модель «подписки». В случае подписки разработчик имеет доступ к среде разработки только в период оплаченной лицензии, в отличии от старой модели, когда разработчик имел доступ ко всем обновлениям в течении действия оплаченной лицензии, а после истечения мог продолжать пользоваться наиболее свежей версией IDE вышедшей в этот период.
Читать дальше →

Доклад: «Аспектно-ориентированное программирование в распределенных системах для java разработчиков и QA»

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

Под катом — краткое описание доклада про аспектно-ориентированное программирование и применение AspectJ-scripting, а также ссылки на материалы по теме и видеозапись выступления.
Читать дальше →

Автоматизация тестирования Java EE веб-сервисов с помощью SoapUI и Arquillian

Время на прочтение8 мин
Охват и читатели55K
Одним из преимуществ веб-сервисов является относительная простота тестирования. Действительно, в простейшем случае все, что нам нужно для проверки работы веб-сервиса – это отправить правильно сформированный HTTP-запрос любым удобным способом и проверить, что вернулось в ответ. С помощью SoapUI – инструмента для всевозможных видов тестирования веб-сервисов (более подробно о возможностях можно почитать на официальном сайте) – этот процесс можно сделать еще удобнее, автоматизировав его: мы можем создать набор тестов, указав в нем, какие запросы следует отправлять, и задав набор правил, которым должны удовлетворять ответы от сервиса. Но, тем не менее, эти тесты мы по прежнему должны будем запускать руками, а душа жаждет полной автоматизации. Действительно, почему бы не запускать эти тесты автоматически при сборке приложения (на CI-сервере или прямо на машине разработчика)?
Читать дальше →

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

FP на Scala: Invariant Functor

Время на прочтение7 мин
Охват и читатели13K
В статье рассматривается
  • Как такая абстракция теории категорий как инвариантный функтор (Invariant Functor), который иногда называют экпоненциальным функтором (Exponential Functor), выражается на Scala.
  • Два правила (Identity Law, Composition Law), которым доложен следовать каждый инвариантный функтор.
  • Приведен пример инвариантного функтора с состоянием (Value Holder)
  • Приведен пример инвариантного функтора-отношения между элементами множества (полугруппа)

Публикация является продолжением FP на Scala: Что такое функтор? в которой были рассмотрены следующие вопросы
  • Какая имеется связь между теорией категорий, Haskell и Scala.
  • Что такое ковариантный функтор.
  • Что такое контравариантный функтор.

Содержание

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

Регулярные выражениия в Java на примере адреса электронной почты

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


Известно, что регулярные выражения – это, по сути, шаблоны из символов, которые задают определённое правило поиска. И, среди прочего, с их помощью возможно осуществить проверку определённой строки или строк на соответствие некоему заранее заданному паттерну или стандарту.
Одним из наглядных и довольно простых примеров использования регулярных выражений в Java и не только является проверка проверка данных пользователя, ввёдённых при регистрации на определённом сайте на корректность. В первую очередь это касается адреса электронной почты, так как к нему всегда предъявляются определённые орфографические требования.
Читать дальше →

Обзор Intent Sender плагина к Android Studio и отдельных особенностей его разработки

Время на прочтение7 мин
Охват и читатели9.2K
При разработке Android приложений зачастую приходится прибегать к помощи adb для оптимизации своей работы и экономии времени. Adb является единственным инструментом, позволяющим, к примеру, миновать длинную цепочку activity и запустить сразу нужную или отправить broadcast сообщение без ожидания выполнения каких-либо внешних условий. Использование adb влечет за собой все неудобства применения терминала для формирования длинных команд, что и привело меня к написанию плагина для ускорения и упрощения работы с adb при отправке intent на устройства.
Читать дальше →

Публикация логов в Elasticsearch — жизнь без регулярных выражений и без logstash

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

При использовании подхода из данного решения парсинг файлов будет не нужен. При изменении формата логирования или появлении новых сообщений не нужно поддерживать большой набор регулярок. Будем перехватывать вызовы методов error, warn, info, debug, trace логера и отправлять данные сразу в elasticsearch. С этим нам поможет аспектно-ориентированное программирование!
Программа, конфигурация и скринкаст...

FP на Scala: Что такое функтор?

Время на прочтение15 мин
Охват и читатели35K
Специалист, приступающий к изучению функционального программирования, сталкивается как с неоднозначностью и запутанностью терминологии, так и с постоянными ссылками на «серьезную математику».

В этой статье, не используя теорию категорий с одной стороны и эзотерические языковые механизмы Scala с другой стороны, рассмотрены два важнейших понятия
  • ко-вариантный функтор
  • контра-вариантный функтор
которые являются стартовой точкой для понимания всего множества категориальных конструкций, куда можно включить
  • Exponential (Invariant) Functor, BiFunctor, ProFunctor
  • Applicative Functor, Arrow, Monad / Co-Monad
  • Monad Transformers, Kleisli, Natural Transformations

Объяснено происхождение категориальной терминологии, указана роль языковых механизмов в реализации категориальных абстракций и рассмотрено несколько ковариантных (Option, Try, Future, List, Parser) и контравариантных (Ordering, Equiv) функторов из стандартной библиотеки Scala.

Первая статья в «категориальной серии»:
  1. FP на Scala: что такое функтор?
  2. FP на Scala: Invariant Functor

Если Вы желаете сильнее погрузиться в мир Scala, математики и функционального программирования — попробуйте онлайн-курс «Scala for Java Developers» (видео + тесты, всего за 25% цены!).


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

Использование библиотек на Java 8 для приложений под Android с помощью Maven

Время на прочтение8 мин
Охват и читатели17K
Java 8 вышла в начале 2014 года, позволив Java-разработчикам использовать весьма удобные новшества для облегчения программирования тривиальных задач. Среди них — лямбда-выражения, ссылки на методы и конструкторы, реализация интерфейсных методов по умолчанию на уровне языка и JVM, а также использование Stream API на уровне стандартной библиотеки. К сожалению, вялость внедрения таких введений сказывается на поддержке этих средств на других программных платформах, ориентированных на Java. GWT и Android всё ещё не располагают официальной поддержкой хотя бы языковых средств Java 8. Впрочем, весенние SNAPSHOT-версии GWT 2.8.0 уже поддерживали лямбда-выражения. С Android дела обстоят иначе, так как здесь работа лямбда-выражений зависит не только от самого компилятора, но и от среды исполнения. Но с помощью Maven можно относительно просто решить проблему использования Java 8.
Читать дальше →

Шпаргалка Java программиста 2: Триста пятьдесят самых популярных не мобильных Java opensource проектов на github

Время на прочтение39 мин
Охват и читатели178K
Что это и зачем оно надо: Как известно, главное преимущество Java мира в том в нем существует огромное количество open-source проектов на на все случаи жизни, однако найти нужный на github'e не так просто, так как описание проекта часто мало информативно, зачастую сложно даже понять этот проект для Android'a или нет. В этой статье я автоматически и полуавтоматически собрал Java проекты, убрал старые и проекты только для Android'a, выбрал 350 набравших больше всего звезд, разделил по категориям и перевел описания.

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

В чем смысл серии статей 'Шпаргалки Java программиста'
За время работы Java программистом я заметил, что как правило программисты постоянно и планомерно используют от силы 10-20% от возможностей той или иной технологии, при этом остальные возможности быстро забываются и при появлении новых требований, переходе на новую работу или подготовке к техническому интервью приходится перечитывать все документации и спецификации с нуля. Зато наличие краткого конспекта особенностей тех или иных технологий (шпаргалок) позволяет быстро освежить в памяти особенности той или иной технологии.


Другие статьи серии: часть 1. JPA и Hibernate в вопросах и ответах

Update: Внимание, актуальная версия со много большим количеством ссылок, находиться теперь в моем github'e проекте useful-java-links, по этой ссылке.


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