• ,

Наследование в Hibernate: моя первая публикация на Хабрахабре

Доброго дня всем коллегам-джаварашевцам!

Согласно опросу, проведенному сайтом «Мой круг», примерно половина работодателей так или иначе обращает внимание на «сторонние увлечения» соискателя, а именно на участие в профильных IT-сообществах.

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

Наиболее заметными сообществами, на участие в которых обращают внимание российские работодатели, являются StackOverflow, GitHib и Хабрахабр.

Я работаю Java-developer'ом чуть более 4-х месяцев, и пока первоначальный «запал» не окончательно растерян, тоже решил приучить себя не деградировать в свободное от работы время, а заниматься чем-нибудь полезным:) Выбора «куда идти», в общем-то, не было: GitHub — это в основном место для opersource-проектов, где неопытному разработчику чаще всего нечего делать; формат StackOverflow мне просто не особо нравится (хотя «по долгу службы» пользуюсь им, конечно, регулярно). Собственно, поэтому мой выбор пал на Хабр — крупнейший в стране коллективный IT-блог.

Статья посвящена реализации наследования в библиотеке Hibernate.
Поскольку хибер для java-разработчика — практически must-have, думаю, она будет интересна здешним читателям:)

habrahabr.ru/post/337488

Приятного прочтения!

Магический пинок - промежуточные результаты обучения

Добрый день!

Вчера написал очень душевный текст, со своими некоторыми мыслями и ПК просто вырубился. В черновики ничего не сохранил и моя поэма ушла в мусор. Хотел бы начать что-то писать, может кому-то помогут рассуждения, а может мне нужно выговориться и получить некоторые слова поддержки, да в целом всё равно.

На JR я с начала июля 2017 года, год назад я получил высшее образование по специальности: «Экономика», особых перспектив на сегодняшний момент у человека с таким образованием просто нет. Ну разве пойти продавать что-нибудь или стать, менеджером по работе с клиентами. Работа тоска смертная и я всё чаще замечаю, что я какой-то отсталый. Прокачки скилов не происходит, каждый день как с копирки — ты сидишь и звонишь. Псевдомотивация продавцов, меня вообще выбешивает.

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

Я успел поработать в банке, на предприятии в автопроме, сейчас в ИТ-компании (мелкой) и все позиции менеджерские, продажи, работа с клиентами. И примерно в начале весны меня всё больше и больше стало выбешивать абсолютно всё… Работа, материальный достаток и прочее. Я начал смотреть на разные сферы, думал пойти на разработчика конфигураций 1С. Всегда хотел работать головой и делать что-то глобальное, а не просто просиживать свою жизнь. И тут произошёл один случай, который встряхнул меня.

Я подошёл к директору и прямо спросил: «Что мне делать?! Не хочу быть шариком на телефоне.» Ответ последовал такой, чтобы я посмотрел на программирование, про 1С забыл как страшный сон и почитал: «Четвёртая промышленная революция». Собственно тут и началось… Я понял, что всё чем я занимался чушь полная, а примеры автоматизации указанные в книге показывают, на какой стороне лучше быть.

Таким образом я попал на JR и пошёл по бесплатному курсу, за два месяца прошёл 8 уровней (хотел быстрее вернуться домой чтобы продолжать решать задачи, на работе в свободное время смотрел лекции), в прошлом знания Pascal помогли мне разобраться со многими простыми вещами. Заказал «Философия Java» и вместе с прохождением курса я знакомлюсь с теорией. Проблема в том, что мне сейчас обидно, что я не начал это делать раньше. В школе у меня всегда было 50 на 50, я одинаково мог разобраться в технических науках, так и в гуманитарных. Я даже был в информационном классе с углубленной математикой и информатикой, но из-за особого стиля преподавания, я откровенно забил на программирование. Мне стало стрёмно, что я всегда не успевал за остальными, решали 3-4 человека из класса с которыми только и работал преподаватель.

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

Что вы думаете, стоит или не стоит бежать впереди паровоза? Пройти как основу JR и уже потом подтянуть всё остальное (минимальное для прохождения на juniora)?
  • ,

Создание собственной коллекции

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

при этом при добавлении элемента все элементы увеличивают свое значение на добавляемый элемент

Недопустим ввод в коллекцию null, символов и других значений, кроме целых чисел.

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

Что изучать дальше?

Добрый вечер. Мне 15 лет. Прошёл первые 10 уровней Javarush, немного изучал Android разработку, делаю свои приложения. Разработка под Android очень нравится, но чувствую что надо ещё что-то по Javе подучить. Порекомендуйте, пожалуйста, какие интересные книги по Java для развития почитать или что-нибудь другое.
P.S Стоит ли покупать подписку на Javarush, и какую?
P.P.S Также, интересно было бы узнать, как делать программы на java под Windows и сделать самому такую.
P.P.P.S Ещё ищу хороший и объемный материал по Android разработке

Написал игру на Java в 14 лет.

Предыстория
В младших классах я очень любил компьютерные игры. Со временем у меня все больше и больше появлялось желание
создать что-то свое. Я узнал об одной очень интересной профессии — Программист. Программист, в моем понимании творец, писатель в своем роде, он может создать что захочет, написав строчки кода. Я сразу же загорелся желанием стать им. К тому же, зарплата у программистов довольно высокая.
Начало
Первым, как я считал «языком программирования» для меня стал html. Я изучил его примерно за несколько недель. Дальше css, и тут меня занесло в этот неизведанный мир… Я начал верстать простые страницы, делать прототипы сайтов, сидел на разных форумах, в общем мне все это безумно нравилось.
Как я познакомился с Java
У меня был выбор, идти дальше изучать веб, или пойти в ПО программирование. Я выбрал ПО. Начал искать курсы облазил весь гугл и нашел JavaRush. Очень зацепили фишки, что курс построен в виде игры, и что во время обучения присутствует юмор. Примерно за месяц прошел первые 10 уровней. Потом нужно было покупать подписку, но я так и не решился. К следующему НГ я понял, что нужно что-то менять, и купил долгожданную подписку. С этого момента я решил серьезно заниматься. На данный момент мне 14 лет, я достиг 27 уровня. Недавно захотелось написать что-то самому, с нуля. И у меня это получилось. Я написал игру GetFoodGame. Для запуска дважды кликните по файлу GetFoodGame.jar. Идея такова: сверху падают фрукты а игрок, управляю вазой с помощью стрелочек (Влево, Вправо) ловит их. Когда вы не смогли поймать 2 фрукта, появляется окошко, с надписью что вы проиграли. По моему мнению, реализовал я не очень хорошо (мягко говоря) слишком много костылей. Буду рад конструктивной критике ;) Всем хорошего настроения, и успехов !)
  • ,

Первый язык для подростка перед Java

Уважаемые коллеги! Прошу посоветовать первый для изучения язык программирования, если вторым языком будет, скорее всего, Java. Мальчику пятнадцать. С английским языком у него проблем нет — почти как родной.
Заранее благодарю за аргументированные ответы.
  • ,

Использование UML в разработке и сопровождении java-программ

UML (Unified Modeling Language) — унифицированный язык моделирования.
Узнал об UML из замечательного повествования на форуме от alex8894
Обзор CASE-средств для построения диаграмм UML.
В книге «UML for Java Programmers» Robert Cecil Martin, насколько понял, используются стандарты UML 1, т. к. ныне действующий UML вступил в действие уже после её опубликования. Однако, полагаю, основные принципы построения подобных блок-схем остались без существенных изменений.
Учебный пример из лекции:

/*
 * © Volodya Mozhenkov 2015
 * GPL version 3.0
 * Almost University http://www.almost-university.com/
 * VladimirMozhenkov@yahoo.com
 *
 */
// файл Main.java
public class Main
{
    private static void printRes(MyResult r)
    {
        if(r.hasResult())
        {
            System.out.print("Результат исполнения: ");
            System.out.println(r.getResult());
        }
        else
        {
            System.out.println("Результат отсутствует");
        }
    }
    public static void main(String[] args)
    {
        MyCalculator c1 = new MyCalculator('/');
        MyResult r = c1.calculate(4, 2);
        printRes®;
        r = c1.calculate(40, 13);
        printRes®;
        r = c1.calculate(1, 0);
        printRes®;

        c1 = new MyCalculator('^');
        r = c1.calculate(2, 25);
        printRes®;
    }
}

// файл MyCalculator.java
public class MyCalculator
{
    private class ResultClass implements MyResult
    {
        boolean valid;
        int result = 0;
        public ResultClass()
        {
            valid = false;
        }
        public ResultClass(int result)
        {
            this.result = result;
            valid = true;
        }
        public int getResult()
        {
            return result;
        }
        public boolean hasResult()
        {
            return valid;
        }
    }
    private char operation;

    public MyCalculator(char operation)
    {
        this.operation = operation;
    }

    public MyResult calculate(int a, int b)
    {
        MyResult res;

        switch(operation)
        {
            case '*':
                res = new ResultClass(a*b);
                break;
            case '/':
                if(b!=0)
                {
                    res = new ResultClass(a/b);
                }
                else
                {
                    res = new ResultClass();
                }
                break;
            case '+':
                res = new ResultClass(a+b);
                break;
            case '-':
                res = new ResultClass(a-b);
                break;
            default:
                res = new ResultClass();
                break;
        }
        return res;
    }
}

// файл MyResult.java
public interface MyResult
{
    public int getResult();
    public boolean hasResult();
}

И, используя одну из бесплатных версий программ, довольно быстро нарисовал такую блок-схему этой программы на смартфоне (естественно с шибками, так как только начал интересоваться UML):
Image Hosted by PiXS.ru
Интересно было бы посмотреть и сравнить с тем, какую UML- схему/диагамму этой же программы построит Intellij IDEA.
  • ,

Начинающим Java-разработчикам дадут шанс посетить крупнейшую в Восточной Европе конференцию по Java почти бесплатно

Почему нужно: Кто только начинает свою карьеру в качестве Java разработчика, тот на 100% может быть уверен, что JEEConf будет ему интересна, но если Его компания не хочет за Него заплатить, и такой человек не имеет достаточно высокую зарплату, чтобы купить билет, то программный комитет конференции сделает всё возможное, чтобы дать таким желающим возможность посетить конференцию почти бесплатно.
Время и место: 26-27 мая 2017 года, Киев.
Как попасть: Как я понял, возможности более дешёвого посещения конференции три: почти бесплатное посещение — для недавно начавших работать Java разработчиков, которым компания не может оплатить билет, второй вариант — около 150 долларов по самой ранней стоимости для остальных желающих, при покупке билета заранее, как только будет такая возможность на сайте конференции, плюс при наборе группы от 5 человек даётся скидка в 10%, и третий вариант — 50% скидки студенту универа. Будет программа для Junior, возможно там будет скидка для неработающих Java-новичков 40%. Пока не могут сказать. Нужно следить за обновлениями. На сайте указано, что 1000 билетов будут доступны на основных днях конференции, и 15 билетов на обучение в учебные дни, которые будут организованы как семинары до начала конференции. Билеты будут продаваться в 4 этапа. Окончательный вариант программы конференции будет опубликован 6 апреля.
Сайт мероприятия: jeeconf.com/
xpinjection.com/articles/jeeconf-2017-call-for-speakers/


Вот список тем, которые программный комитет конференции выбрал в качестве приоритетных на 2017 год:

Java 9
functional programming in Java (StreamEx, jOOL, Javaslang, etc)
Spring 5
reactive model and implementations (RxJava, Vert.x, Akka, Play, etc.)
accelerators like Spring Boot, JHipster, etc.
web development
distributes systems
cloud development and infrastructure
machine learning and big data

По правилам конференции, большая часть докладов будет напрямую связана с Java/JVM платформой и основана на практическом опыте докладчиков. Участников ожидают 5 параллельных тематических потоков и дополнительный зал для альтернативных форматов (мастер-классы, BoF, панельные дискуссии).

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

Ну и конечно же, можно вспомнить, как это было в прошлом году:
www.youtube.com/watch?list=PLYj3Bx1JM6Y7BKivc3eZwRUhWwBmbIFXg&v=H7rjoRGwL8o
  • ,

level07.lesson09.task04 У кого быстрее алгоритм работает? Конкурс.

Интересно, полагаю, будет посмотреть на самые быстродействующие алгоритмы решения этой задачи. Естественно, что число записей в списке должно быть таким, чтобы время выполнения программы на компьютере можно было бы легко вычислить. Так создадим единый список из ста тысяч строк и сравним время выполнения…

N.B.!
1. Согласно пункту 2.2. предложенной задачи: «удваивать все слова содержащие букву «л».», для единообразия станем так:

На входе:
роза
лира
лоза
ложка
коза
кора
коралл
сорока
носорог
финал

На выходе:
лира
лоза
лоза
ложка
ложка
коза
коралл
финал
финал


2. Список один и тот же, и хотя он формируется путем десяти тысячекратного повторения из десяти строк, считаем его случайным.
3. Срок самостоятельной публикации конкурсных вариантов решения этой задачи истекает 5 февраля 2017 года в 12 часов дня (время московское).
4. Каждый участник форума может самостоятельно оценить быстродействие предложенных вариантов на своем компьютере и поставить «плюсик» тому, кого он считает победителем в этом конкурсе."


/*
ТЕКСТ КОНКУРСНОЙ ЗАДАЧИ СО ВСЕМИ КОРРЕКТИРОВКАМИ ИСХОДНОЙ ЗАДАЧИ level07.lesson09.task04:
*/


/*

2. Метод fix должен:
2.1. удалять из списка строк все слова, содержащие букву «р»
2.2. удваивать все слова содержащие букву «л».
2.3. если слово содержит и букву «р» и букву «л», то оставить это слово без изменений.
2.4. с другими словами ничего не делать.
Пример:
роза
лира
лоза
ложка
коза
кора
коралл
сорока
носорог
финал
...
Выходные данные:
лира
лоза
лоза
ложка
ложка
коза
коралл
финал
финал
...
*/



import java.util.ArrayList;

public class ManipulationsWithTheList {

    public static void main(String[] args) throws Exception
    {
        long startTime = System.currentTimeMillis();

        ArrayList<String> list = new ArrayList<String>();

        for (int i = 0; i < 10000 ; i++) {
            list.add("роза");
            list.add("лира");
            list.add("лоза");
            list.add("ложка");
            list.add("коза");
            list.add("кора");
            list.add("коралл");
            list.add("сорока");
            list.add("носорог");
            list.add("финал");
        }

        list = fix(list);

        for (String s : list)
        {
            System.out.println(s);
        }

        long timeSpent = System.currentTimeMillis() - startTime;

        System.out.println("Эта программа выполнялась " + timeSpent + " миллисекунд.");
    }

    public static ArrayList<String> fix(ArrayList<String> list)
    {
        //напишите тут ваш код

    }
}


Дополнение от 31.01.2017
Уважаемые коллеги!
Настоятельно прошу еще раз ознакомиться со всеми условиями конкурсной задачи. Особо отмечу следующее:
на входе упорядоченная коллекция строк;
на выходе также должна быть упорядоченная коллекция строк (вывод её в консоль используется исключительно для визуального подтверждения верности произведенных манипуляций с исходной псевдослучайной коллекцией);
— сколько времени выполнялся метод fix, просьба, вывести в консоль дополнительно.

Ссылки на все конечные полные тексты программ участвующих в конкурсе будут находиться в самом первом сообщении темы. Просьба к участникам опубликовать их в своих сообщениях с пометкой: «НА КОНКУРС», чтобы я смог бы их собрать вместе и опубликовать.

Конкурсанты:
Torin текст программы содержит отклонения от конкурсной задачи
JuriMik текст программы
Javin текст программы
Himeg текст программы
Тестирование

Проводилось на:
Intel Core i7-2600 CPU @ 3.4 GHz x 4, RAM 16 GB

Windows 7 professional x64
JRE 1.8.0_121
IDE Eclipse Java EE IDE for Web Developers. Version: Neon.1a Release (4.6.1)

Linux Mint 17 Cinnamon 64-bit (v. 2.2.16) 3.13.0-24-generic
JRE 1.8.0_25
IDE Eclipse Java EE IDE for Web Developers. Version: Neon.2 Release (4.6.2)

Средние арифметические значения времени выполнения метода fix (в миллисекундах) подсчитывались по десяти попыткам:
  • ,

Начинающим Java-разработчикам дадут шанс посетить крупнейшую в Восточной Европе конференцию по Java почти бесплатно

Почему нужно: Кто только начинает свою карьеру в качестве Java разработчика, тот на 100% может быть уверен, что JEEConf будет ему интересна, но если Его компания не хочет за Него заплатить, и такой человек не имеет достаточно высокую зарплату, чтобы купить билет, то программный комитет конференции сделает всё возможное, чтобы дать таким желающим возможность посетить конференцию почти бесплатно.
Время и место: 26-27 мая 2017 года, Киев.
Как попасть: Как я понял, возможности более дешёвого посещения конференции три: почти бесплатное посещение — для недавно начавших работать Java разработчиков, которым компания не может оплатить билет, второй вариант — около 150 долларов по самой ранней стоимости для остальных желающих, при покупке билета заранее, как только будет такая возможность на сайте конференции, плюс при наборе группы от 5 человек даётся скидка в 10%, и третий вариант — 50% скидки студенту универа. На сайте указано, что 1000 билетов будут доступны на основных днях конференции, и 15 билетов на обучение в учебные дни, которые будут организованы как семинары до начала конференции. Билеты будут продаваться в 4 этапа. Окончательный вариант программы конференции будет опубликован 6 апреля.
Сайт мероприятия: jeeconf.com/
xpinjection.com/articles/jeeconf-2017-call-for-speakers/


Вот список тем, которые программный комитет конференции выбрал в качестве приоритетных на 2017 год:

Java 9
functional programming in Java (StreamEx, jOOL, Javaslang, etc)
Spring 5
reactive model and implementations (RxJava, Vert.x, Akka, Play, etc.)
accelerators like Spring Boot, JHipster, etc.
web development
distributes systems
cloud development and infrastructure
machine learning and big data

По правилам конференции, большая часть докладов будет напрямую связана с Java/JVM платформой и основана на практическом опыте докладчиков. Участников ожидают 5 параллельных тематических потоков и дополнительный зал для альтернативных форматов (мастер-классы, BoF, панельные дискуссии).

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

Ну и конечно же, можно вспомнить, как это было в прошлом году:
www.youtube.com/watch?list=PLYj3Bx1JM6Y7BKivc3eZwRUhWwBmbIFXg&v=H7rjoRGwL8o

Технические вопросы на собеседовании.

Привет всем, Джаварашовцы!

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

Так вот, собеседование проходило по такому плану
  1. JavaCore
  2. ООП
  3. REST
  4. Базы данных.
  5. Инструменты, которыми пользуешься.

JavaCore

  • Вначале меня попросили нарисовать иерархию интерфейсов у Коллекций.(Это было не сложно, там всего их несколько(Collection,List,Set,Queue,Map). )
  • В чем различие ArrayList и LinkedList(это один из замых заезженных вопросов и ответов в инетах просто тьма). Обсудили скорость выполнения запросов в них и какая разница между листами.
  • Вопрос про класс Object. какие у него методы, что они делают.
  • Рефлексия. что делает метод getClass(). Очень интересный вопрос, разберите его. Особенно про то, как получить всё про класс, пусть даже там приватные методы или переменные.
  • Спросили за многопоточность. Слабенько, как я считаю, так рассказать как ты понимаешь что такое многопоточность. Что нужно, чтоб запустить новый поток. Реально, если вы 20+ уровень, то эти вопросы для вас покажутся смешными.
  • Что можешь сказать про Stream. Это имеется в виду не про Java 8. Имеется в виду потоки ввода и вывода. Как базовые интерфейсы, какие они (символьные и байтовые). На понимание, никакой конкретики.
  • Исключения. Здесь опять-таки попросили нарисовать иерархию исключений, какие бывают, какие из них checked, а какие unchecked. Что нужно делать с Runtime исключениями. Назовите самое часто попадающее(NullPointerException)
  • Вопрос с тем, что нужно делать с checked исключениями(пробрасывать дальше или обработать — понятно и то и другое.)

ООП

  • Что такое ООП в двух словах?
  • Какие еще есть парадигмы программирования? В чем их различие от ООП
  • Какие основные принципы ООП?(наследование, полиморфизм и инкапсуляция) Рассказать про каждый из них. Пока всё абстракатно, не привязываясь к какому-то языку.
  • Задача на понимание проектирования систем: есть Лошадь и Птица. Нужно получить Пегаса. принцип «has a» и «is a»

REST

  • Что такое REST. В википедии об этом говориться очень круто. Реально статьи из википедии для ознакомления хватит
  • HTTP. Здесь тоже общие фразы. Его методы, для чего каждый из них.
  • Коды состояния HTTP. на какие пять частей делиться, расскажите про самые известные (200,204,404,500,501). Зачем они. Спросили еще про 401 и 403. Но я не знал их. Сказали они важные.

Базы данных

Здесь я рассказал, что знаю MySQL. Рассказал про три нормальные формы. Рассказал про Join'ы, какие бывают и нарисовал пересечение областей, в котором используются разные джоины. Рассказал про то, как я понимаю реляционную БД. Не забыл еще о про MongoDB — это NoSQL база данных. Через некоторе время я напишу и про это.

Другие Инструменты
Здесь мы прошлись по моем резюме. У меня было написано, что использую Maven/Gradle для сборки, использую JIRA для тасков, git, Docker, Swagger. Для Continuous Integration — Stash, Bamboo, Puppet. Для тестирования JUnit, Mockito, JMeter.


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

Это была первая часть собеседования. Теперь жду результаты и если да, то будет вторая часть. Напишу о ней как только так сразу.
Всем кому статья понравилась и была полезна — ставьте "+". Пишите в комментариях.

См. также мои другие статьи:
Тестовое задание: «Написать Интерпретатор на язык BrainFuck»
Тестовое задание «Image Comparison»
Java — быстрее, сильнее и выше! Зарплаты украинских программистов.
История успеха спустя 1.5 года от начала обучения
Технические вопросы на собеседовании.
Как найти работу? Рассылка резюме
Профессиональное выгорание. Как устоять?
Английский для IT и для собеседования
Паттерн Command своими словами.
Паттерн Singleton своими словами.
Как создать исполняемый jar в Intellij IDEA / how to create jar in IDEA
Помогите, нужна мотивация!

Подписывайтесь на мой блог Паттерны Проектирования пишите в нем статьи!