• ,

Первый язык для подростка перед 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
Помогите, нужна мотивация!

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

Стоит ли работать в направлении PEGA BPM?

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

Поправьте меня если я неправильно понял.
Набор видео на Youtube не внушает доверия, толковых мануалов я не обнаружил, а то что есть ограничивается беглым обзором платформы на очень «грязном» английском.

Стоит ли связывать с этим свою жизнь, если хочется работать именно программистом, а не конфигуратором, вооруженным мышкой? Даст ли какой-то опыт, дополнительный вес вакансии для Java разработчика, время работы с PEGA BPM?

Отпугивает заточка под мышку, минимальное вмешательство в код, отсутствие хороших, свободно доступных мануалов.
  • ,

Вопрос про статический import

Вот так бывает. Пишешь на джаве уже год, пишешь, думаешь что пора бы на мидла идти… И тут бац!

*Барабанная дробь*

Аааааа как импортировать статически класс, который находится в одном каталоге с классом в котором нужно произвести импорт? Подробности:

В одном каталоге лежат классы A.java и B.java. В классе B есть нужные мне статические методы, которые я хотел бы видеть у себя в классе А, при этом я не хотел бы каждый раз писать имя класса B для того чтобы использовать его метод. В джаве это решается через стаический импорт (import static wasted.time.ClassName.*;) где вместо звездочки перечисляются статические методы либо просто звездочка, если хотим импортировать все. Подозреваю тривиальное решение, но гугл, скотыняка, подсовывает только абстрактные решения без конкретики.
  • ,

Как инициализировать переменную logger в методе setUp, что бы она выполнялась для всех метод с тэгом @Test?

Как инициализировать переменную logger в методе setUp, что бы она выполнялась для всех метод с тэгом @Test?


public class TestClass {

    private static WebDriver driver;
    
    @BeforeClass
    public static void setUp(){
    	
        System.setProperty("webdriver.chrome.driver", "D://Програмирование//ChromeDriver//chromedriver.exe");
        driver = new ChromeDriver();

    }

    @Test
    public void Login() throws InterruptedException{
    	
    	 ExtentReports logger = ExtentReports.get(TestClass.class);
     	logger.init ("D:\\Програмирование\\report\\newreport.html", true); 
    	logger.startTest("TC1");
    	
    	driver.manage().window().maximize();
        driver.get("https://bigmir.net");
        Thread.sleep(2000);
        logger.log(LogStatus.INFO, "Portal is open");

        if(driver.getPageSource().contains("Clients")){
        	logger.log(LogStatus.PASS, "Data was verify");
        	}else{
        		logger.log(LogStatus.FAIL, "Admin was sign in");
        	}
         
        logger.attachScreenshot("D:\\Програмирование\\report\\pict");
        
        logger.endTest();
    }

    
    @Test
    public void AddCat() throws Exception {
    	
    	 ExtentReports logger = ExtentReports.get(TestClass.class);
     	logger.init ("D:\\Програмирование\\report\\newreport.html", true);
     	
    	logger.startTest("TC2");
   
  	driver.findElement(By.partialLinkText("Tesla")).click();
  	Thread.sleep(2000);

      if(driver.getPageSource().contains("Category with same Name already exists.")){
      	logger.log(LogStatus.PASS, "Cat was added");
        	}else{
        		logger.log(LogStatus.FAIL, "Cat was added");
        	}      
           
      driver.findElement(By.xpath("/html/body/div[6]/div[7]/div/button")).click();
      Thread.sleep(1000);                       
      logger.endTest();
     
    }

    @Test
    public void Setpassword() throws Exception {
    	
    	ExtentReports logger = ExtentReports.get(TestClass.class);
    	logger.init ("D:\\Програмирование\\report\\newreport.html", true);
    	
    	logger.startTest("TC3");
  	  
  	driver.findElement(By.partialLinkText("Tesla")).click();
      Thread.sleep(1000);
      
      driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[1]/nav/div[2]/div[1]/ul/li[3]/a")).click(); //Member
      Thread.sleep(1000);
      driver.findElement(By.partialLinkText("new new")).click(); //Employee
      Thread.sleep(1000);
      driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[3]/div[2]/div/div[2]/div/div[1]/div/div[2]/button")).click(); // Reset password
      Thread.sleep(1000);
      
      logger.log(LogStatus.PASS, "Pass was set");
      
      logger.endTest(); 
      
    }
        
    @AfterClass
    public static void cleanUp(){
    	
    	driver.quit();
    }

}

Зачем используется static и в каких случаях?

Привет всем. Может и глупый вопрос, но не как не могу догнать. Я читал в интернете, смотрел видео и все равно не понимаю. Может тут кто-нибудь объяснит. Заранее спасибо.
  • ,

Сложно ли пересесть с Java на C++ или C#?

Добрый день. Скажите пожалуйста — на сколько сложно будет пересесть с Java на C++ или C# после окончания курса Javarush? Недавно узнал, что моя профильная специальность будет требовать именно знание языков майкрософт, но заканчивать курс заранее совсем не хочется, так как я чувствую, что знания из него откладываются в голове куда лучше разных книг.