• ,

Уровень 28. Ответы на вопросы к собеседованию по теме уровня.

Всем привет!
Решил продолжить обучение на джавараше, несмотря на то, что работу по java я уже нашел.
Дисклеймер:
Этот блог я веду для самого себя, очень лениво, и, можно сказать, из под палки. Я буду очень рад, если он окажется для кого-то полезным, однако не стоит использовать его в качестве основного источника для поиска ответов на вопросы уровня.

1 Какие приоритеты нитей бывают?
Каждый поток в системе имеет свой приоритет. Приоритет – это некоторое число в объекте потока от 1 до 10, более высокое значение которого означает больший приоритет. Система в первую очередь выполняет потоки с большим приоритетом, а потоки с меньшим приоритетом получают процессорное время только тогда, когда их более привилегированные собратья простаивают.

Работать с приоритетами потока можно с помощью двух функций:

void setPriority(int priority) //устанавливает приоритет потока.

Возможные значения priority — MIN_PRIORITY, NORM_PRIORITY и MAX_PRIORITY.

int getPriority() // получает приоритет потока.

Источник
Если приоритет не задан, то нить получает приоритет 5 — средний.

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

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

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

2 Можно ли остановить нить, снизив ее приоритет до 0?
Нет. Будет брошен IllegalArgumentException

3 Зачем нужен класс ThreadGroup?

Чтобы любая нить не могла останавливать и прерывать все нити подряд, было введено понятие «группы нитей». Нить может оказывать влияние только на другие нити, которые содержатся в той же группе, что и она. ThreadGroup – это класс, который управляет группами нитей. Такой подход позволяет защитить нити от нежелательного изменения.

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

Иными словами для управления группами потоков

4 В какой группе нитей состоит main-thread?
main

5 Что такое паттерн ThreadPool
Паттерн ThreadPool общими словами — группа потоков, которые решают группы задач. Задачи организованы в очередь. Как только поток завершает работу над задачей, он запрашивает следующую задачу из очереди, до тех пор, пока все задачи в очереди не будут выполнены. После этого поток может завершиться, либо уснуть, до тех пор, пока в очереди не появятся новые задачи.

6 Зачем нужен класс ThreadPoolExecutor?
Для решения большого количества небольших задач группой потоков. Использование класса позволяет избегать расточительного использования ресурсов машины. Тк Создавать для каждой задачи свою нить бывает не очень рационально. Для каждой нити Java-машина выделяет довольно много ресурсов.
Другими словами – создание и уничтожение отработавшей нити может тратить больше ресурсов и времени, чем само выполняемое задание.
Java-разработчики придумали элегантное решение этой проблемы — ThreadPoolExecutor.
ThreadPoolExecutor – это класс, который имеет внутри две вещи:
А) Очередь задач, в которую можно добавлять задачи, по мере их появления в программе.
Б) Пул-нитей (группа нитей) – которые эти задачи исполняют.
При этом нити не уничтожаются после выполнения задания, а засыпают. Чтобы начать выполнять новое задание, как только оно появится.

7 Сколько способов создать нить вы знаете? (Thread, Runnable, Callable)
public class ThreadsTests {
    //Способ 1
    static class ThreadExampleRunnable implements Runnable{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    }
    
    //Способ 2
    static class ThreadExampleFromThread extends Thread {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    }

    //Способ 3
    static class ThreadExampleFromCallable implements Callable{
        @Override
        public String call() throws Exception {
            return Thread.currentThread().getName();
        }
    }
    
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        new Thread(new ThreadExampleRunnable()).start(); //Способ 1
        new ThreadExampleFromThread().start(); //Способ 2

        //Способ 3
        ExecutorService service = Executors.newFixedThreadPool(5);
        Future<String> task = service.submit(new ThreadExampleFromCallable());
        System.out.println(task.get());

    }
}


8 Для чего используется класс Future?
Этот объект можно использовать, чтобы узнать, завершилось ли уже выполнение задачи, а также, чтобы получить результат ее выполнения.
boolean cancel(boolean mayInterrupt); // Останавливает задачу. 
boolean isCancelled(); //Возвращает true, если задача была остановлена.
boolean isDone(); //Возвращает true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //Возвращает результат вызова метода call или кидает исключение, если оно было.


9 В чем преимущества Callable над Runnable?
Используя Callable мы можем узнать завершилась ли задача, и узнать её результат, гораздо проще, чем при использовании Runnable

10 Можно ли отменить выполнение задачи, если использовать класс Future?
Можно, если задача лежит в очереди и ожидает своего исполнения, иначе не факт

Мои ответы на вопросы собеседований из 40 уровня

Собственно, такие вопросы были на этом уровне:
1. Что такое IP-адрес?
2. В чем отличие host и domain?
3. Какие методы в HTTP вы знаете
4. Чем отличаются методы GET, POST и HEAD?
5. Что такое REST?
6. Зачем нужен класс Calendar в Java?
7. Как преобразовать дату в Java к нужному формату?
8. В чем отличие URI и URL?
9. Что такое сокеты?
10. Отличие классов Socket и URL?

А вот мои ответы:
1. IP-адрес — это уникальный сетевой адрес узла в компьютерной сети, построенной на стеке протоколов TCP/IP. В сети Интернет требуется глобальная уникальность адреса; в случае работы в локальной сети требуется уникальность адреса в пределах сети. В версии протокола IPv4 IP-адрес имеет длину 4 байта, а в версии протокола IPv6 IP-адрес имеет длину 16 байт. Обычно IP-адрес в версии протокола IPv4 записывают в виде четырёх десятичных чисел со значениями от 0 до 255, разделённых точкой, например, 192.168.0.3.

2. Домен — это адрес сайта или определённая зона, которая имеет своё имя, не похожее ни на какое другое имя в системе доменных имён. Домены бывают первого уровня, второго уровня, третьего уровня и т.д. Обычно домен первого уровня не доступен обычным пользователям для регистрации (примеры доменов первого уровня — ".ru", ".com", ".net"). Обычно домены третьего и следующих уровней называют субдоменами.
Хост — это определённый компьютер или сервер, подключенный к локальной или глобальной сети. Хост обладает обладает уникальным адресом в среде сервисов TCP/IP (IP-адресом).

3.GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE, LINK, UNLINK, CONNECT.

4.

                        GET	POST	HEAD
---------------------------------------------
Тело Запроса            Нет	Есть	Нет
Тело Ответа             Да	Да	Нет
Кеширование
результата Запроса      Да	Нет	Да, заголовки	
Идемпотентность         Да	Нет	Да


Метод GET используется для запроса содержимого указанного ресурса. Метод POST применяется для передачи пользовательских данных заданному ресурсу. Метод HEAD обычно применяется для извлечения метаданных, проверки наличия ресурса (валидация URL) и чтобы узнать, не изменился ли он с момента последнего обращения. Метод HEAD аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Метода GET считает упрощённой версией POST, потому как метод GET не предполагает полноценного запроса, только URL в качестве такового.

5. REST — это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Термин был введён Роем Филдингом в 2000 году. Также им были введены требования, которым должно удовлетворять распределённое приложение, чтобы соответствовать архитектуре REST (такие приложения ещё называют RESTful). Вот эти требования:
1) Модель «Клиент-Сервер» (означает, что сеть должна состоять из клиента и сервера; сервер — это тот, кто обладает ресурсами, клиент — тот, который их запрашивает))
2) Отсутствие состояния (означает, что ни клиент, ни сервер не отслеживают состояния друг друга)
3) Кеширование (клиенты и промежуточные узлы могут кешировать результаты запросов; сооответственно, ответы сервера должны иметь явное или неявное обозначение, что они кешируемые или некешируемые)
4) Единообразие интерфейса (означает, что между клиентами и серверами существует общий язык взаимодействия, который позволяет им быть заменяемыми или изменяемыми, без нарушения целостности системы):
а) Определение ресурса (означает, что каждый ресурс должны быть обозначен постоянным идентефикатором)
б) Управление ресурсами через представление (означает, что клиент хранит ресурс в виде его представления, и при желании изменения ресурса он отправляет серверу информацию о том, в каком виде он хотел бы видеть этот ресурс; сервер же рассматривает этот как запрос как предложение, и сам решает, что делать ему с хранимым ресурсом)
в) Самодостаточные сообщения (каждое сообщение содержит достаточно информации, чтобы понять, как его обрабатывать)
г) Гипермедиа (означает, что клиенты изменяют состояние системы только через действия, которые динамически определены в гипермедиа на сервер)
5) Система слоёв (означает, что в системе может быть больше двух слоёв (клиент и сервер), и при этом каждый такой слой знает только о своих соседних слоях, и не знает об остальных слоях, и взаимодействует только с соседними слоями)
6) Код по требованию (означает, что функциональность клиента может быть расширения за счёт загрузки кода с сервера в виде апплетов или сценариев)

Удовлетворение этим требованиям позволяет добиться следующего:
* Надёжность
* Производительность
* Масштабируемость
* Прозрачность взаимодействия
* Простота интерфейсов
* Портативность компонентов
* Лёгкость внесения изменений
* Способность эволюционировать, приспасабливаясь к новым требованиям

6. Он нужен для более удобной работы с датой и временем. Он позволяет работать с датой в рамках календаря, то есть позволяет прибавлять и отнимать дни от какой-то конкретной даты, причём будут учитывать и високосные года. Кроме того, он позволяет представить время миллисекундах в удобном виде — год, месяц, день, часы, минуты, секунды. Также есть много методов для установки и получения разных параметров даты и времени, например: день недели, день месяца, день в году, номер недели в месяце, номер недели в году.

7. Для этого существует удобный класс SimpleDateFormat. Экземпляру этого класс можно передать шаблон представления даты, и тогда он в таком виде будет возвращать дату (в формате строки String), либо считывать дату (из строки String). Выглядит это всё следющим образом:
Date date = new Date(); // получаем текущую дату
SimpleDateFormat formatter = new SimpleDateFormat(«d-MM-yy HH:mm:ss»); //создаём экземпляр класса SimpleDateFormat
//и передаём ему шаблон представления даты и времени
String dateAsString = formatter.format(date); //преобразуем дату в строку заданного формата

Date dateAfterConversion = formatter.parse(dateAsString); //преобразуем строку обратно в дату

8. URI расшифровывается как Uniform Resource Identifier и переводится как «унифицированный идентификатор ресурса». URI — это последовательность символов, идентифицирующая абстрактный или физический ресурс. URL расшифровывается как Uniform Resource Locator. То есть это некий унифицированный указатель на ресурс, однозначно определяющий его месторасположение. URL служит стандартизированным способом записи адреса ресурса в сети Интернет.
Их отличия в том, что URI — это некоторый идентификатор ресурса, который позволяет этот ресурс как-то идентифицировать, а URL — это указатель на ресурс, он даёт информацию о том, где находится ресурс. Таким образом URL — это URI, который помимо индетификации ресурса, даёт информацию о его местонахождении.

9. Сокеты — это связка IP-адрес + порт, позволяющая из внешней сети однозначно идентифицировать программу на компютере или сервере. В Java для работы с сокетами есть два класса Socket и ServerSocket. Экземпляры первого класса играют роль клиента, экземпляры второго — роль сервера. Клиент может отправлять и принимать сообщения через сокет. Сервер же постоянно отслеживает запросы пользователей и отвечает на них.
Для того, чтобы отправить данные через сокет, в классе Socket существует класс getOutnputStream(), возвращающий исходящий поток, с которым уже можно работать как обычно. Для приёма информациию нужно воспользоваться методом getInputStream(), который возвращает входящий поток. Дальше с этим потоком можно работать как с обычно потом ввода. Также стоит отметить, что при создании клиентского сокета (экземпляра класса Socket) в конструктор нужно передать ip-адрес сервера и порт, на котором он работает принимающая программа-сервер.
При создании серверного сокета (экземпляра класса ServerSocket) нужно указывать только порт, через который будет работать программа. После этого вызывается метод accept(). Этот метод ожидание подключение клиента, а после этого возвращает экземпляр класса Socket, необходимый для взаимодействия с этим клиентом. Дальше работать идёт с экземпляром класса Socket, как в первом случае (в случае клиента).

10. Главное отличие в том, что класс URL предназначен для работы с URL-строкой (парсинг URL-строки), а Socket используется для соединения с удалённым сервером и отправки информации на сервер и/или приёма информации от сервера (хотя, используя класс URL, можно получить доступ к ресурсу, на который указывает сам URL; но делается это не напрямую, а через объект класса URLConnection). Также, если смотреть в общем, то Socket используется для связи с сервером (другой программой), а URL — для доступа к ресурсу (например, к файлу). Кроме того, URL и URLConnection ориентированы в основном на работу с HTTP, тогда как Socket может работать с любыми протоколами.

Мои ответы на вопросы собеседований из 38 уровня

Здравсвтвуйте. Опять-таки, похоже нет ответов на вопросы из этого уровня. Поэтому, как обычно, выкладываю свои. Вдруг, кому помогут (или кто-то что-то дополнит или ответит лучше).
Итак, были такие вопросы:
1. Что такое Agile?
2. Что такое Scrum?
3. Какие роли Scrum вы знаете?
4. Что такое спринт? Расскажите с подробностями
5. Кто такие QA?
6. Кто такой product owner?
7. Расскажите об иерархии исключений
8. Что делать если JVM выкинула Error?
9. Какие нововведения в области исключений из Java 7 вы знаете?
10. Зачем нужны аннотации? Как ими пользоваться?

А теперь мои ответы:
1. Agile — это серия подходов к разработке программного обеспечения, ориентированных на использование итеративной разработки, динамическое формирование требований и обеспечение их реализации в результате взаимодействия внутри самооранизующихся рабочих групп, состоящих из специалистов разных профилией. Существует несколько методик, относящих к гибкой методологии разработки, в частности экстремальное программирование, DSDM, Scrum, FDD.

Основные концепции agile-методов:
* люди и взаимодействие важнее процессов и инструментов;
* работающий продукт важнее исчерпывающей документации;
* сотрудничество с заказчиком важнее согласование условий контракта;
* готовность к изменениям важнее следованию первоначального плана.

Также были сформулированы основные приципы такого подхода:
* удовлетвореие клиента за счёт ранней и бесперебойной поставки ценного программного обеспечения;
* приветствие изменений требований даже в конце разработки (это может повысить конкурентноспособность продукта на рынке);
* частая поставка рабочего программного обеспечения (каждый месяц или каждую неделю, или даже ещё чаще);
* тесное, ежедневно общение заказчика с разработчика на протяжении всего проекта;
* проектом занимаются мотивированные личности, обеспеченые нужные условиями работы, поддержкой и доверием;
* рекомендуемый метода передачи информации — личный разговор (лицом к лицу);
* работающее программное обеспечение — лучший измеритель прогресса;
* спонсоры, разработчики и пользователи должны поддерживать постоянный темп на неопределённый срок;
* постоянно внимание улучшению технического мастерства и удобному дизайну;
* простота — искусство не делать лишней работы;
* лучшие технические требования, архитектура и дизайн полуются у самороорганизованной команды;
* постоянная адаптация к изменяющимся условиям.

Основной проблемой разработки было признано то, что никто из участников ни на одном этапе не обладает всей полнотой информации о том, что делать.

2. Scrum — это одна из методик гибкой разработки. Она делает акцент на качественном контроле процесса разработки. Основая особенность скрама — это разбиение процесса разработки на итерации имеющий чёткую протажённость по времени (обычно 2-6 недель; их называют «спринтами»).
В начале спринта проводится «планирование спринта» — совещание на 3-4 часа, где обсуждаются основные задачи, которые будут решаться на протяжении спринта. В конце спринта проводится «демо» — демонтрация результатов работы команды за этот спринт.
Перед самым первым спринтом заказчик (или его представитель) формирует список требований, предъявляемых к будущему продукту. Такие требования называются «user story», а самого заказчика называют «product owner». Также в этом списке заказчик (PO) указывает приоритет для каждой задачи. Сначала будут реализовываться задачи с более высоким приоритетом. Весь список называется «product backlog», или «резерв продукта».
Кроме product owner, среди участников ещё выделяют scrum-мастера: он проводит все совещания, следит за соблюдением всех принципов скрама, разрешает противоречения и защищает команду от отвлекающих факторов. Обычно в качестве скрам-мастера выступает кто-то из команды.
На первом совещании в начале спринта каждой задаче, кроме того, что назчается приоритет, даётся ещё приблизительная оценка в «абстрактных человеко-днях», которые ещё называют «story point». Затем команда решает, сколько она успеет выполнить задач за время спринта. Например, заказчик отобрал 7 задач, а команда сможет сделать только 5. Тогда остальные две задачи пойдут на следующий спринт. Если заказчику это не нравится, он может повысить их приоритет, но тогда другие задачи выпадут из спринта. Кроме того, скрам-мастер может разбить некоторые задачи на более мелкие и расставить им различные приоритеты, чтобы заказчик остался доволен.
Список отобраных задач на спринт называются «sprint backlog», или «резерв спринта». Для лучшей наглядности обычно составляется таблица, в которой указываются задачи, которые нужно реализовать, которые находятся в процессе реализации, и те которые уже выполнены. Также строится диаграмма «сгорания задач». Она графическ показывает, сколько ещё задач осталось выполнить. В идеале график сгорания задач к концу спринта должен опустится до нуля.
Также в течение спринта каждый день или через день проводятся небольшие совещания внутри команды на 5-15 минут, где каждый участник команды рассказывает, что сделал за этот день (или эти два дня), что ещё ему предстоит сделать, а также рассказывает о том, что ему мешает что-то сделать.
Когда спринт завершается, scrum-master проводит demo, на котором демонстрируется список всего, что полностью сделано. Затем проводится «разбор полетов» — совещание тоже на пару часов. На нем обычно пытаются выяснить, что было сделано хорошо, а что (и как) можно было сделать лучше.
Обычно за 2-3 спринта можно выявить основные проблемы, которые мешают команде работать эффективнее, и устранить их. Это приводит к большей продуктивности, не увеличивая нагрузку на команду. Такое было невозможным до эры гибких методологий.
Также в середине спринта, иногда еще проводят «вычесывание» — совещание посвященное планированию следующего спринта. На нем обычно уточняют приоритеты задач, а так же могут разбить некоторые задачи на части и/или добавить новые задачи в product backlog – резерв продукта.

3. В крам участников делят на «свиней» и «кур». «Свиньи» полностью задействованы в процессе, «куры» — только частично. К категории «свиней» относят следующие роли:
* Скрам-мастер (проводит совещания, следит за выполнением принципов скрама и пр.; это кто-то из команды, produst owner не может быть скрам-мастером);
* Владелей продукта (Product Owner) (представляет интересы конечных пользователей и других заинтересованных в продукте сторон);
* Команда разработки (Development Team) (кросс-функциональная команда, состоящая из специалистов разных профилей: разработчиков, тестировщиков, дизайнеров, архитекторов и т.д. Размер команды в идеале составляет от 3 до 9 человек. Команда является единственные полностью вовлечённым участником разработки и отвечает за результат как единое целое. Никто, кроме команды, не может вмешиваться в процесс разработки на протяжении спринта).

К «курам» относятся следующие роли:
* Пользователи (Users)
* Клиенты, продавцы (Stakeholders) (лица, которые инициируют проект и для кого проект будет приносить выгоду. Они вовлечены в скрам только во время обзорного совещания по спринту (Sprint Review));
* Управляющие (Managers) (люди, которые управляют персоналом);
* Эксперты-консультанты (Consulting Experts).

4. Спринт — это одна итерация цикла разработки программного обеспечения в Скраме. Обычно спринт жёстко фиксирован по времени. Продолжительность спринта выбирается на основании размера команды, специфики работы, требований, размера проекта. Чаще всего это подбирается опытным путём, на основании проб и ошибок. В среднем спринт может быть продолжительность от 2 недель до 4 (хотя в некоторых компания его продолжительность бывает равна и 6 неделям). Для оценка объёма работ в спринте может быть использована предварительная оценка, измеряемая в очках истории. Предварительная оценка фиксируется в беклоге проекта.

5. QA расшифровывается как Quality Assuarance (то есть «Гарантия качества», если перевести дословно). К этой категории относятся тестировщики. Это люди, которые выявляют в программе баги и ошибки. Для этого они используют разные средства, как ручные, так и автоматические. После выявления багов и ошибок они сообщают об этом разработчикам, и те исправляют эти ошибки.

6. Product Owner (владелец проекта) — это заказчик или представитель заказчика. Это либо кто-то со стороны клиента (сторонняя фирма или физ.лицо), либо какой-то другой сотрудник фирмы, определящий требования к конечному продукту и следяющий за их выполнений (например, бизнес-аналитик). Как уже было сказано, он определяет требования к продукту и задачи, которые дожна решить команда разработки, чтобы получить конечный продукт. Список требований (или задач) он оформляет в определённым порядке и с заданным приоритетом для каждого требования (задачи). Обычно он участвует в планировании спринта (перед началом спринта) и в демонтрации результатов спринта (после окончания спринта).

7. Во главе иерархии исключений в Java стоит класс Throwable. От не наследуются два класса: Error и Exception. Объекты первого класс выбрасываются, когда возникают какие-то серьёзные ошибки в работе программы и джава-машины в целом (а также в работе ОС и аппаратной части копьютера), так, что программа больше не может продолжать работать и закрывается. Это может быть недостаток памяти (OutOfMemoryError) или переполнение стека (StackOverflowError).
Экземпляры второго класса могут выбраться при самых различных исключительных ситуаций. Собственно от этого класса наследуется класс RuntimeException и все остальные классы. Первый класс так выделяют, потому что, во-первых, исключительные ситуации такого типа являются непроверяемые (unchecked), а, во-вторых, к данным исключительным ситуациям относятся ошибки выполнения программы. Обычно это возникает из-за несовершенства кода. Все остальные исключительные ситуации обычно являются следствием непредвиденного стечения обстоятельств, например, ошибки ввода-вывода.
Также исключения делятся на проверяемые (checked) и непроверяемые (unchecked). Первые необходимо либо отлавливать в блоке try-catch, либо указывать в качестве выбрасываемых в сигнатуре метода (используя слово throws). Непроверяемые этого не требуют, и выбор остаётся за программистом. К проверяемым относятся исключения типа Throwable (а также наследуемые от него) и типа Exception (и наследуемые от него, кроме исключений типа RuntimeException). К непроверяемым относятся исключения типа Error (а также наследуемые от него) и исключения типа Runtime (и наследуемые от него).

8. Ничего, программа просто закроется. Обычно это критические ошибки, не всегда возникшие по вине программиста (например, выход из строя жёсткого диска или сбой операционной системе). Правда, среди них есть две ошибки, которые могу следствием несовершенства кода — это StackOverflowError и OutOfMemoryError. Первый тип ошибок возник, при переполнении стека вызовов — то есть, когда вызывается слишком много методов и стек вызовов становится слишком больший (типичный пример — бесконечная рекурсия или рекурсия с большим количеством итераций). Вторая ошибка — OutOfMemoryError — возникает, когда переполняет память отведённая под объекты, то есть когда создаётся слишком много тяжеловесных объектов, и они все держатся в памяти (или когда сборщик мусора не успевает их уничтожать).

9. В Java 7 в плане исключение были введены три новых «вещи»:
* Multicatching. Это когда в одном catch-блоке сразу обрабатывается несколько исключений:
try {
} catch (Exception1|Exception2|Exception3|… | ExceptionN ex) {}
В таком случае параметр ex будет неявно иметь модификатор final. Кроме того, байт-код, сгенерированный компиляцией такого кода (с единым catch-блоком) будет короче, чем байт-код, сгенерированный компиляцией кода с несколькими catch-блоками.

* Try-with-resources. Эта контрукция позволяет после слова try в скобках указать открываемые ресурсы, которые сами закроются после окончания конструкции try () {} catch{}. В качестве ресурса в данной конструкции может быть использован любой объект, реализующий интерфейс AutoCloseable.
Во время закрытия ресурсов тоже может быть брошено исключение. В try-with-resources добавлена возможность хранения «подавленных» исключений, и брошенное try-блоком исключение имеет больший приоритет, чем исключения, получившиеся во время закрытия. Получить последние можно вызовом метода getSuppressed() от исключения, брошенного try-блоком.

* Rethrowing. Перебрасывание исключений с улучшенной проверкой соответствия типов.
Компилятор Java SE 7 тщательнее анализирует перебрасываемые исключения. Рассмотрим следующий пример:

static class FirstException extends Exception { }
static class SecondException extends Exception { }
public void rethrowException(String exceptionName) throws Exception {
try {
if («First».equals(exceptionName)) {
throw new FirstException();
} else {
throw new SecondException();
}
} catch (Exception ex) {
throw e;
}
}

В примере try-блок может бросить либо FirstException, либо SecondException. В версиях до Java SE 7 невозможно указать эти исключения в декларации метода, потому что catch-блок перебрасывает исключение ex, тип которого — Exception.

В Java SE 7 вы можете указать, что метод rethrowException бросает только FirstException и SecondException. Компилятор определит, что исключение Exception ex могло возникнуть только в try-блоке, в котором может быть брошено FirstException или SecondException. Даже если тип параметра catch — Exception, компилятор определит, что это экземпляр либо FirstException, либо SecondException:

public void rethrowException(String exceptionName) throws FirstException, SecondException {
try {
//…
} catch (Exception e) {
throw e;
}
}

Если FirstException и SecondException не являются наследниками Exception, то необходимо указать и Exception в объявлении метода.

10. Аннотации используются для размещения рядом с классом, полем, методом или переменой какой-то дополнительной, служебной информации (метаданных), относящейся к ней. Чтобы указать аннотацию, надо над заголовком класса или метода, либо надо объявлением поля или переменной, написать после @ название аннотации (класса аннотации), например так:

@Override
public void doSomeThing() {
}


Кроме того, у аннотации могут быть свойства, они указывают в скобках через запятую в виде пар «ключ=значение», где в качестве ключа выступает название свойства, а качестве значения — собственно, значение, которое должно принять это свойство. Выглядит это так:
@CatInfo(manager=Catmanager.class, unique=true)
class Cat {}
Если указывается указывает значение только для одного свойства, то имя свойства и знак равно можно не писать: @SuppressWarnings(«unchecked).
Также можно вообще не ставить скобки, если никаким свойствам не присваиваются никакие значения.
Чтобы создать свою аннотацию, надо указать модификатор доступа, потом после пробела ключевое слово „@interface“ и дальше опять после пробела имя аннотации (принять начинать его с большой буква). Дальше идёт тело аннотации в фигурных скобках. Внутри тела указываются свойства в виде объявлений методов (как в интерфейсах). Также у свойств можно указать значения по умолчанию (они их будут принимать, если при указании аннотации в нужном месте, этому свойству не будет присвоено какое-то значение). Всё вместе это выглядит так:
@interface CatManager
{
Class manager();
boolean unique();
String name() default „Unknown Cat“;
}

Аннотации выполняют следующие функции:
а) дают необходимую информацию для компилятора;
б) дают информацию различным инструментам для генерации другого кода, конфигураций и т. д.;
в) могут использоваться во время работы кода;
е) повышают читабельность кода и его понимание программистами.
На данный момент компилятором используют три аннотации: @Deprecated, @Override и @SuppressWarnings. Первой аннотацией помечаются устаревшие методы и классы, нерекомендованные к использованию (комплятор по их поводу показывает предупреждение). Вторая аннтоцая ставится над переопределёнными методами класса-наследника (это позволяет контролировать связь между исходным методом и переопределённым). Третья аннотация позволяет подавлять (не выводить) некоторые исключительные предупреждения, обычно выводимые компилятором в связи с данным методом или классом (например, что он уже устарел и нерекомендован к использованию).

Первая работа: почему так сложно найти?

Самое сложное для человека, который изучал программирование некоторое время, найти свою первую работу.

Сложно это по многим причинам. И я попробую объяснить новичкам, как процесс поиска работы джуниором выглядит изнутри.

Резюме


Представьте, что вы работодатель, который открыл набор людей в свою компанию. Заходите на Head Hunter. Там — десятки, а то и сотни объявлений от соискателей. У каждого есть как минимум одно резюме, у самых инициативных — больше. Еще столько же откликнулось на вашу вакансию. Читаем:

Java, HTML, ООП, Английский язык, C/C++, грамотная и поставленная речь, Android

Вы бы взяли такого человека? Я бы — никогда. Америку я не открою, сказав, что резюме — это самая важная часть в поиске работы. Еще раз — САМАЯ важная. Это 80% успеха. Это ваш билет на поезд. Может быть вы и не доедете куда хотели, но поездка не оставит вас без новых впечатлений.

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



Запрашиваемая зарплата не соответствует опыту? Программист-все-умею-и-могу? Но мы ищем Java специалиста и знаем, что человек с опытом работы 5 лет не может запрашивать 40 тысяч в Питере.

Итак, ваше резюме — это ваша валюта. Ее стоимость пропорциональна времени, в нее вложенному. Резюме сложное, продуманное, интересное — большой спрос.

В ключевые навыки пишем только то, что делаем лучше всего. Ищем работу Java-программистом — вписываем только Java и все, что к ней относится напрямую. C++ — это хорошо, но не в ключевых навыках, а в разделе «Дополнительная информация», с обязательным указанием, что имели некоторый опыт, знакомы с данной технологией, есть теоретическая подготовка в чем-либо.

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

Эффекта разорвавшейся атомной бомбы просмотров резюме можно достичь, указав ссылку на личный git аккаунт.
Даже если там тестовое задание с калькулятором для компании N. HR не понимает код, но ей сказали, что ссылка на репозиторий — это круто. Пожалуй, круче только опыт работы, но пока у нас его нет.

Самоучкам, на мой взгляд, сложнее. Да, часто слышно, что «вышка» необязательна. Но это не значит, что ее игнорируют. В теории, да и на практике, человек с профильным образованием имеет хотя бы теоретические знания, прошел курс математики. А это несомненный плюс перед самоучкой, знания которого хаотичны и неполны. Из личного опыта — не взяли на стажировку в Mail.ru, т.к. они обязаны были заключать договор с институтом. То есть даже без образования, являясь лишь студентом, вам могут быть открыты дороги туда, куда нет доступа самоучкам.

Отклики

Несмотря на то что вам ну очень хочется попасть на свою первую работу, не стоит откликаться на все подряд. Вам точно хочется работать в финансовой сфере? А в генетике? Интересен front или только back? Готовы отсидеть полгода в тестировании? Уверены, что не попросят больше? Хуже, чем быть безработным, только заниматься тем, что не нравится.

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

Почитайте отзывы о компании в интернете, найдите сайт, если есть. Давно ли открылась компания? Государственная или западный филиал? Если знаете английский, то поищите компанию, выполняющую заказы для иностранных клиентов. Это может пригодиться в будущем для потенциального переезда заграницу.

Собеседование

Самая неоднозначная часть в поисках. В разных компания проходит по-разному. Кто-то предпочитает скайп, кто-то личное присутствие. Первая встреча может быть только с HR. Бывает, что несмотря на хороший опыт работы, только по личному неприятию вас девушкой, просто «потому что», вы даже не дойдете до технических специалистов.

Вопросы тоже разные. На моем первом собеседовании были простейшие вопросы по Java SE. Методы Object класса, коллекции, базовое понимание ООП. На других — от «Как бы вы узнали, в случае больших задержек в работе приложения, что именно не оптимизировано?» до «Что такое Java EE, Spring, контейнер в нем же?» или просьб написать свой алгоритм StringBuilder.reverse(). Об этом написано много и это не самое главное.

А главное это то, что вы можете узнать для себя о компании. Некоторые собеседующие обращаются к вам на «Вы», к вашим промахам терпеливы, пытаются помочь выйти из затруднения подсказками, понимая, что вы волнуетесь. Другие — откровенно смеются во весь голос вам в лицо. Третьи просят сделать откровенный бред, вроде «Напишите по памяти на листке бумаги сортировку пузырьком», что у меня вызывает недоумение, так как не могу представить где и для чего использовать этот алгоритм. При этом они отказываются от вашего предложения написать сортировку слиянием взамен.

Собеседование в компании, где я сейчас работаю, было достаточно простым, недолгим и очень приятным. За примерно 20 минут меня спросили о моем опыте программирования, проектах в которых участвовал, кто я в целом такой. Общие вопросы вширь. В конце сказали: «Вот вам тестовое задание. Залить на гит и описаться на почту в течение такого-то срока. Вам ответят тогда-то.». Позже я узнал, что вместе со мной пытались устроиться еще несколько студентов/выпускников. Кто-то некрасиво вел себя во время собеседования, а кто-то просил зарплату больше, чем я (40000р.), при этом выполнив задание не до конца или хуже. В итоге я попал в невероятно уютный коллектив с классным начальником и удобным ритмом работы.

После/до технической части у вас будет возможность задать вопросы о компании. Обязательно нужно спрашивать следующее:

  • На какой проект вас поставят
  • Версия Java и технологии проекта
  • Будете вы разработчиком или тестировщиком (первое время)
  • Ваши обязанности/характер работы (fullstack, back)
  • Зарплата (если в вакансии не было указано), льготы, бесплатные плюшки (от кофе до книг и курсов)
  • Когда будет дан ответ приняты вы или нет (добивайтесь точной даты)
  • Misc: График, митинги, обед, отпуск и больничный и их оплачиваемость etc.

Подведем итог. Может быть не совсем прозрачно, но я хотел вам показать, что нет универсальных ситуаций того, как проходят собеседования. Еще раз, я очень советую вам не гнаться за всеми вакансиями подряд, вести себя нетерпеливо из-за изнывающего «лишь бы взяли». Ваш вклад в резюме и профиль на github могут устроить вас в компанию мечты с адекватными условиями работы, коллективом, «резиновыми» часами работы и атмосферой, в которой вы будете профессионально расти как тесто на дрожжах. Рассылая же сотни резюме, вы рискуете попасть лишь в какую-то там компанию.

Напоследок обширная и более подробная статья по теме от mail.ru.

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

Собеседование. Нужно ваше мнение

Всем привет! Вот и я уже дошла до 32 уровня JavaRush и решила закинуть удочку и поймать свою удачу на просторах вакансий Junior Java Developer.
Мне немного улыбнулась удача и мне прислали тестовое задание. Но перед ссылкой на его выполнение написали такое вот сообщение:
Добрый день! Спасибо, что заполнили нашу анкету!

Как и договорились, мы внесли Ваш профиль в список приглашенных к тестированию. Вот основные условия написания онлайн-теста:

Когда Вы начнете тест, Ваша попытка будет списана. Будьте внимательны и приступайте к тесту, когда будете готовы.
Время на написание теста: 30 минут.
Вопросы по Java приводятся на английском языке.
Структура теста: 10 вопросов J2SE, 4 вопроса J2EE. Рассчитайте Ваше время с учетом структуры теста.
По итогам анализа ответов теста, если Вы справитесь с 70-80% вопросов, мы пришлем Вам ссылку на следующее задание.
Мы просим Вас быть максимально внимательными, соблюдать регламент и быть предельно честными — для теста Вам необходимы только Ваши знания.

На JavaRush мы изучали JavaCore, а тут вопросы будут по J2SE + J2EE. Я не стала пока переходить по ссылке, т.к хочу понять стоит ли сейчас туда лезть с моими познаниями или стоит что-то дополнительно изучить.

Ребята, помогите понять.Кто знает J2SE + J2EE это тоже самое, что мы изучали или это что-то гораздо тяжелее? Если второе, то киньте ссылки на какие-нибудь источники, чтобы можно было дополнительно изучить J2SE и J2EE.

Здесь можно посмотреть тестовое задание, которое мне давали.

История одного собеседования: интересные вопросы

Недавно мне довелось посетить собеседование на позицию стажёра в одной из крупных IT-компаний.
Это было моё первое IT-собеседование и, на мой взгляд, оно выдалось интересным. В общей сложности меня “допрашивали” больше 3 часов (этому предшествовали ещё домашние задания и тест в офисе на компьютере).
Хочу отдать должное собеседующему, который не ставил крест, когда я отвечал на вопрос неверно, а с помощью своих наводящих вопросов заставлял меня вдумываться и приходить к верному ответу.

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

Вторая часть собеседования... Завершающий этап.

Привет всем, дорогие форумчане.

Вот решился Я написать продолжение моего собеседования. Первая часть моего собеседования.

Были серьёзные причины, почему я так давно не писал об этом. Потому что в дуще должно было все устаканиться. Все учпокоиться, чтоб я смог это описать.

Перейду к сути:
Пригласили меня на второй этап. Рекрутер сказал, что первое на первом собеседовании я им понравился и, что оказалось очень важно для них, понравился именно личностно. Что говорит о том, что нужно помимо технической части, развивать еще и softskill. Без этого никак.

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

Но вышло что-то странное, как мне показалось: меня начали спррашивать про логические задачи. Причем далекие от программирования, чисто на способность мыслить. Я отвечал в слух, чтобы показать как именно я мыслю.
Была задача, ответ на которую я не знал, но мы вместе думали и пришли к выводу.
А я всё ждал, когда начнутся настоящие вопросы. И опять ничего. Потом, вконце девушка спросила меня про Docker. У нее не получалось там кое-что. Я как смог поконсультировал ее, т.к. разбираюсь в этом.
И так прошло 1,5 часа. Я их даже не заметил.
Задал вопросы, которые меня интересовали(какой будет проект, какие технологии). Потом побеседовал с зам. директором, у которого задал более приземленные вопросы(рабочее место, особенности оформления, испытательный срок и т.д.) и всё...

Сказали, что через 3 дня все решится.
Я вообще не понял, почему меня не спрашивали более серьёзно, т.к. я претендовал на позицию Middle и ожидал соответствующего разговора.
Потом как пришел домой и побеседовав с женой, я понял, что просто напросто меня попросили прийти и показать другому работнику, с кем я буду работать дальше.
Это мой черновик от 20 февраля 2017 года

23 марта 2018. Я опять пришел к тому, что хочу делиться информацией.
Особенно это понимаю, когда начинаю повторять то, что раньше делал.

По итогу хочу сказать, что мне сделали предложение, ОЧЕНЬ крутое. А потом за неделю до выхода мне сказали, что проект отпал и нужно во мне исчезла. Для меня это был шок, очень большой шок. Я не понимал, как такое может быть. Но это случилось и с этим нужно было жить. Я собрался с мыслями и пошел к своему нынешнему руководству с разговором на тему, что я хочу остаться и честно рассказал о том, что произошло и как.

Хочу заметить, что когда я говорил, что ухожу, я старался сделать это максимально безконфликтно, что сразу же сказалось на том, как я возвращался обратно.

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

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

Тестовое задание: "Написать Интерпретатор на язык BrainFuck"

Привет всем!

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

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

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

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

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

Английский для IT и для собеседования.

Приветсвтую Вас, дамы и господа! =)


Так получилось, что я последнее время готовился к собеседованию и нужно было подготоовиться к английскому.
Тема эта так же важна, как и само программирование, т.к. вся документация на английском, всё самое свежее на английском, самые классные книги на английском.
Да, скажете вы, что есть же переводы книг на русский… Это правда, но и правда то, что большинство переводов никудышние и не передают суть вопроса. А иногда и вовсе вводят в заблуждение.

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

Реальность такая, что во многих компаниях собеседование проходит в три этапа:

  • Общение с HR. На этом этапе рассказывают про компанию, какие они классные, чем они занимаются и т.д. и попутно смотрят насколько адекватен, собеседник. Если он неадыкват, то дальше никакого общения не будет.
  • Собеседование на английском… Вот здесь как раз будут смотреть, насколько честно вы признались в резюме, какой у вас уровень. И реально, если вы будете молчать и ничего не отвечать, то на этом этапе собеседование для вас закончится… Здесь будет общение не на тему программирования, а так просто в вольной теме или зачастую «Tell me about yourself».
  • Если вы успешно прошли первые два этапа — поздравляю, вы сможете поговорить с техническим специалистом на тему вашей профессиональной граммотности.


Исходя из этого списка, я хочу рассказать о том, как я это делал, какие выводы и примеры.
На своей первое собеседование я шел и про тему английского как-то не подумал… цитата из моей статьи:
Поговорив с HR-ром, ко мне позвали преподавателя по английскому, с которым я «пообщался». К этому моменту я вовсе был не готов и вышло, что я больше слушал, чем говорил. И на тему расскажи о себе, я что-то промямлил, но ничего особенного.
И после этого я вынес важный урок, что к английскому нужно готовиться также чательно, как и к техническим вопросам.
Реально за короткий срок грамматику всю не повторишь и не изучишь, а вот сделать небольшую шпаргалку для себя — это можно. Пусть она будет состоять из простых предложений, пусть она будет не доскональной, но она Будет! и вам будет что сказать.

С такими мыслями я составил свой первый рассказ, который понятно я выучил, может не дословно, но приближенно к тексту:
Hello. my name is roman. I AM studiNG AT SomeUniversity. I have HAD an experiance in android development. Ive been working with freelansers team since January. I have strong communication skills and I am fast learning person.
I have many hobbies, for example i play guitar and love camping.
My grandfather father and I are bee-keepers. Really. I am not afraid when bees are stinging me. I know what need to do if you want to get some honey from bee-hive.
I like sport, thats why i go to the gym EVERY OTHER DAY day. I lIKE this.
Also i do not drink alkohol and smoke the cigarretes.
Небольшой, но уже какой-то. Там где выделено большими буквами — это мне редактировала моя жена, которая читала это. У нее с английским получше, чем у меня.

На другом собеседовании я использовал эту шпаргалку и всё было хорошо, меня слушали и кивали. Но я не подумал о том, что мне же будут еще задавать вопросы и хорошо бы, чтоб я мог на них ответить. На этом я прокололся. Опять начал мямлить и говорить мало и медленно.
Из этого собеседования я вынес, чтонужно было к моему рассказу еще подумать ответы на предполагаемые вопросы...

И вот я плавно подошел к тому, что готовился пару дней назад. За это время я несколько поднатаскался с английским(как я считаю) и получил вот такой шаблончик:
Hello!
My name is Roman. I live in SomeCity. I’m working as Java developer in IT company.
On this job, I’m developing microservices structure. For dependency injection, I’m using Guice(pronounced as juice). It’s lightweight framework from Google. Also, we’re using Jersey. As build tools, we are using Gradle. Gradle it’s the most powerful of all those tools. Because it has life circle as Maven and it has tasks as Ant. And all of this you can combine as you want on Groovy. it’s mean that you do all thing in groovy script. Also, I’m making different tests. I’m using JUnit 4, Mockito and JMeter. For database we use MongoDB where we store metadata for our application.

I love sports, that’s why 3 times per week I go to the gym. Also, I like to play volleyball, badminton and sometimes I can go to play soccer with my old friends, but it doesn’t mean that I’m good in it.
Also, I have many hobbies, for example, I play the guitar. Every summer I go to the forest near Chuguev on the Severskiy Donec beach. It’s place called “Figurovka”. Every night we seat around the bonfire and sing songs while I play the guitar. It’s about the night, as for day we usually play volleyball and badminton.
you know badminton is more difficult than volleyball because while you play volleyball you can rest instead of badminton when you need to move all the time if you want to win. When I speak about badminton I mean professional badminton when you have badminton court and rules.

Next, it is a hobby and a family business. My father and I are beekeepers. We know how to get honey :D.
we have about 40 colonies of bees. It’s normal for us. I love it because working with bees it’s very healthy for the body. They are very smart. of course, we sell honey. Bees produce many commodities. For example honey, beeswax, pollen, propolis and else. Also, we produce Medovucha. It’s lightweight alcohol beverage, which does not contain ethanol.
Also, we provide pollination services.

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

Английский для IT
И конечно хочу добавить несколько слов из своего опыта про то, как развивать свой английский в IT.
Это только лично мое мнение и оно никоим образом не претендует быть правдой в последней инстанции, но если кто-то вынесет для себя что-то интересное — я буду только рад.

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

Да, именно так, сейчас я читаю книгу «The Linux CommandLine» на английском и завел себе тетрадь, в которую вписываю неизвестные мне слова, которые они используют. И это реально работает, это помогает мне.

Вконце хочу пожелать всем Джаварашевцам удачи в прокачке своих скилов, успешном поиске работы и intermediate английского!

Всем, кому понравилась статья, ставте "+", пишите в комментариях, давайте вести диалог.

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

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

Восемь вещей, которые мне помогли найти работу

Привет, войтишник! Решил поделиться своей историей. Начав обучение в конце 2014 и несколько раз забрасывая все куда подальше, 2 месяца назад я получил работу.

В этой статье я не буду рассказывать о том, как и что я писал в резюме, о чем говорил с HR и как я учил английский (об этом будет отдельный пост). Я не буду углубляться в то что я и где учил. Я просто поделюсь своими наблюдениями и размышлениями, возникавшими у меня по ходу обучения по поводу и без. Я поделюсь тем, что считаю хорошим и плохим в околовойтишной сфере. А так же перечислю 8 вещей, которые помогли мне стать программистом. Поехали!