• 19.60

  • +33.90

Как найти работу? Рассылка резюме.

Приветствую вас, будущие сеньеры!


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


Куда отправлять?

А ведь действительно, куда? Нужно же заявить миру о том, что вы готовы работать! В нашем случае, почти все IT-компании имеют свои сайты и на этих сайтах можно найти их почту.
первым делом нужно собрать почты компаний. И их должно быть не 2, не 5 даже не 10, а больше, максимально возможно. (К примеру у меня был список из 131-й почты!).
Есть еще способ, часто на сайтах работы регистрируются компании и их там еще можно найти.
Для тех, кто из Украины, есть сайт для программистов dou ссылка сразу на список компаний. Там можно выбрать свой город и посмотреть. Ресурс вообще очень сильный и всем начинающим я советую его прошерстить!

Сопроводительное письмо

Допустим, вы уже собрали список почт всех IT-компаний, которых смогли. Следующий этап — написать сопроводительное письмо… А что это такое?
Сопроводительное письмо(в моем понимании) — это текст, который прикрепляется в письме вместе с резюме, в котором можно написать цель этого письма, какие-то милости про компанию(например я уверен, что в вашей компании я стану лучше и т.д) и конечно же сказать на какую позицию собиратесь.
Сопроводительное письмо ДОЛЖНО быть на английском языке! Рекрутеры очень любят, когда пишут сопроводительное письмо и написав его, вы будете уже выше тех, кто этого не сделал. Я уверен, что многие этого не пишут. Когда большой конкурс на место, то на первом этапе многое зависит от рекрутера! Пример своего приводить не буду, т.к. хочу еще им пользоваться :)

Рассылка резюме

Теперь уже готово и резюме(конечно же на английском языке) и сопроводительное письмо готово и теперь можно рассылать, но прежде нужно сделать следующее:
  1. С какой почты отправлять? Хорошим тоном будет, если будет почта от гугла(gmail.com) и она будет состоять из шаблона firstName.lastName@gmail.com. Часто бывает, что отсылают со старых почт, которые были зарегистрированы, как brutal.eggs@mail.ru или как-то еще какие-то смешные.
  2. Отправлять каждое письмо отедельно для каждой компании, не делать массовой рассылки! Это видно тем, кто получает и это минус вам!
  3. Отправлять по 5-6 писем каждые 3-4 часа, чтоб не попасть в спам-лист получателей.
  4. ждать ответа:)
Конечно, вы можете подумать, что в компании, которые вы отправляете вы вовсе не нужны, но это ошибочное мнение, потому что:
1. Если в той компании нет джава отдела — ну и ладно. Вам ответы из этой компании тоже не нужны.
2. Если там есть отдал джавы, но нет вакансии — тоже хорошо. Вам ответят, что пока не вакансии, но вас занесут в свою базу и как только появиться — вам напишут.
3. Часто бывает, что позиция джуниора есть, но ее не афишируют, чтоб не было спама от желающих и они ищут своими силами. Вот здесь как раз и смотрят вначале на свою базу данных, в которую вы ДОЛЖНЫ попасть, если хотите быть в числе первых.
4. Как обычно, доля удачи нужна всем!
5. И последний пункт про LinkedIn

Регистрация в LinkedIn


Зарегистрироваться в LinkedIn — это социальная сеть для тех, кто ищет работу и кто ищет работников. В СНГ это соц.сеть для поиска IT специалистов. Это одно из самых любимых мест рекрутеров. Здесь нужно создать свой профиль и максимально заполнить его. Там можно поставить свои навыки, которыми владеешь, чтобы рекрутер мог знать.

djinni.co

djinni.co — портал для тайного поиска программистов. Рекрутеры вначале видят только скилы того, кто ищет работу и только с согласия соискателя могут получить информацию о Вас. очень удобная вещь для тех кто работает и думает поменять. А для нас это еще одно место, где нас могут найти рекрутеры. Так что не брезгуйте этим местом, регистрируйтесь и ждите, авось кто-то напишет)


Итог
Теперь Вы знаете как это можно сделать, время действовать! Хочу пожелать всем удачи в поиске своей первой работы! Стремитесь, ищите и удача возблагодарит вам!

Если вам понравилась статья — ставьте "+" над ней и удачи в поиске работы!

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

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

Паттерн Singleton своими словами.

Привет всем, javaRush!

Расскажу сегодня про паттерн проектирования Singleton(одиночка).

Цель:
Создать класс, у которого будет только ОДИН объект.

Это значит, что сколько бы раз к нему не обращались, возвращаться будет один и тот же объект, который был создан первый раз.

Это удобная вещь и необходимая во многих местах, не зря ее внедряют во фреймворки.

Применение
  • Например необходимо подключить базу данных в проект и класс, который будет отвечать за соединение с ней. Один раз создается соединение и нет нужны создавать его снова и снова
  • Application settings — класс отвечающий за настройки отружения, которые нужны для приложения: хост и порт базы данных и т.д. Они создаются один раз и используются всё время работы приложения.
  • есть еще множество примеров, о которых я не сказал, поэтому пишите в комментариях свои варианты! =)


  • После этого вступления, как я понимаю можно показать уже пример этого класса: (Хотя я уверен, что каждый из нас сможет придумать реализацию этого)
    Вот самый простой пример, когда мы ставим приватным конструктор, т.е. нельзя создавать явно объект. И есть статический метод getInstance(), который предоставляет объект.
    
    public class Singleton {
      private static Singleton instance;
      private Singleton () {}
    
      public static Singleton getInstance() {
        if (instance == null) {
          instance = new Singleton();
        }
        return instance;
      }
    }
    

    Есть проблемы с многопоточностью и тогда можно поставить метод getInstance() маркер synchronized:
    
    public class Singleton {
      private static Singleton instance;
      private Singleton () {}
    
      public static synchronized Singleton getInstance() {
        if (instance == null) {
          instance = new Singleton();
        }
        return instance;
      }
    }
    


    В конце, как обычно, хочу сказать, что если вы думаете иначе или нашли у меня ошибку — пишите в комментариях! Мы все обсудим, с удовольствием :)

    Если Вам понравилась статья, пишите "+" и я буду это знать. Это для меня важно :)


P.S. Добавляю еще реализации:

По мнению Joshua Bloch’а это лучший способ реализации шаблона Enum Singleton

public enum Singleton {
	INSTANCE;
}


Double Checked Locking & volatile

public class Singleton {
        private static volatile Singleton instance;
	
        public static Singleton getInstance() {
		Singleton localInstance = instance;
		if (localInstance == null) {
			synchronized (Singleton.class) {
				localInstance = instance;
				if (localInstance == null) {
					instance = localInstance = new Singleton();
				}
			}
		}
		return localInstance;
	}
}


И еще On Demand Holder idiom:

public class Singleton {
		
	public static class SingletonHolder {
		public static final Singleton HOLDER_INSTANCE = new Singleton();
	}
		
	public static Singleton getInstance() {
		return SingletonHolder.HOLDER_INSTANCE;
	}
}

+ Ленивая инициализация
+ Высокая производительность
— Невозможно использовать для не статических полей класса

Будут вопросы/предложения — пишите в комментарии!


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

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

Паттерн Command своими словами.

Привет всем, Форумчане!


Разобрался-таки основательно(как мне кажется) с паттером Command и хочу попытаться рассказать о нем «своими словами».
Исходя из википедии, можем узнать, что цель его
Создание структуры, в которой класс-отправитель и класс-получатель не зависят друг от друга напрямую. Организация обратного вызова к классу, который включает в себя класс-отправитель.

В принципи написано чётко и правильно, но это в теории. А как же сделать это?
Вот этим начинаются проблемы, т.к. описание уже не так ясно и очевидно.
Поэтому я как разобрался, решил рассказать вам как я это понял, может кому-то и пригодится:

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

В этом паттерне есть четыре термина, пока примем их как данность: команды(command), приемник команд(receiver), вызывающий команды(invoker) и клиент(client).

Пример буду брать с той же википедии, он вполне сносный.

Задача
есть класс Light, который умеет две вещи: включить свет и выключить. Он в терминах паттерна будет «приемник команд(receiver)»
/*Receiver class*/

public class Light{
     public Light(){  }
   
     public void turnOn(){
        System.out.println("The light is on");
     }

     public void turnOff(){
        System.out.println("The light is off");
     }
}


Создадим интерфейс с одним методом execute(), который будет выполнять и который называется в терминах паттерна «команда(commadn)»
/*the Command interface*/

public interface Command{
    void execute();
}


Необходимо инкапсулировать выполнение умений класса Light. Для этого мы создадим классы TurnOnLightCommand и TurnOffLightCommand, которые реализуют интерфейс Command и которые будут принимать в конструкторе объект класса Light. И каждый из них будет выполнять только одно действие. Один будет вызывать метод turnOn(), а другой turnOff().
/*the Command for turning on the light*/

public class TurnOnLightCommand implements Command{
   private Light theLight;

   public TurnOnLightCommand(Light light){
        this.theLight=light;
       }

   public void execute(){
      theLight.turnOn();
   }
}

/*the Command for turning off the light*/

public class TurnOffLightCommand implements Command{
   private Light theLight;

   public TurnOffLightCommand(Light light){
        this.theLight=light;
       }

   public void execute(){
      theLight.turnOff();
   }
}


Теперь пришло время создать объект, который бы принимал эти инкапсулированные методы объекта Light. Он в терминах паттерна называется вызывающий команды (invoker). Назовем его Switch и пусть он будет принимать в конструкторе переменные Command, которые будут использоваться в созданных методах flipUp() и flipDown().
/*the Invoker class*/

public class Switch {
    private Command flipUpCommand;
    private Command flipDownCommand;

    public Switch(Command flipUpCommand,Command flipDownCommand){
         this.flipUpCommand=flipUpCommand;
         this.flipDownCommand=flipDownCommand;
    }

    public void flipUp(){
         flipUpCommand.execute();
    }
    
    public void flipDown(){
         flipDownCommand.execute();
    }
}


Ну и конечно создадим класс который будет использовать их, чтобы понять что происходит вообще. Он будет именть метод main, в котором и будет происходить всё действие:
/*The test class*/
public class TestCommand{
   public static void main(String[] args){
       // создаем объект, который будет использоваться
       Light l=new Light();
       // создаем объекты для всех умений объекта Light:
       Command switchUp=new TurnOnLightCommand(l);
       Command switchDown=new TurnOffLightCommand(l);
        
       // Создаемтся invoker, с которым мы будем непосредственно контактировать:
       Switch s=new Switch(switchUp,switchDown);
       
       // вот проверка этого, используем методы:
       s.flipUp();
       s.flipDown();
   }
}

На выводе будет следующее:

"The light is on"
"The light is off"


Где это применяется?
По цели ясно, что и для чего это нужно, а именно: в ситуации, когда нужно отделить конкретное исполнение, это очень удобно. Чтоб использование каких-то функций не зависело от конкретной реализации и ее можно было изменять без ущерба для системы.
как-то так...)
Пишите свои комментарии, давайте обсуждать, может что-то можно сделать проще и рассказать лучше, будем всё править, если необходимо) Чтоб для тех, кто будет читать первый раз, было как можно понятнее.

Ну и кому понравится статья — ставьет "+" на ней :) Для меня это важно)


Со временем хочу написать еще про Builder, Singleton и прочие.


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

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

Spring Framework. Введение.

Привет!
Пока администрация JavaRush работает над новыми уровнями я хочу начать серию обучающих статей по Spring Framework. Да, я знаю, что в сети уже много материала на эту тему, но, как показывает практика, все они на уровне Hello World’a. Я же хочу рассказать не о том, как правильно расставить аннотации, а о том, как это все устроено «под капотом». Статья рассчитана на тех, кто уже так или иначе работал с этим фреймворком и знаком с основными понятиями.

Инициализация контекста.

Итак, начнем с основ. На мой взгляд, одним из наиважнейших моментов является понимание того, как происходит настройка контекста и инициализаци бинов.
Как известно, прежде чем Spring начнет работать его необходимо сконфигурировать. В допотопные времена это делали с помощью xml файлов (на некоторых проектах, преимущественно старых, продолжают делать это до сих пор). Вот небольшой пример такого конфигурационного файла:
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="helloWorld" class="ru.javarush.HelloWorld">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

По-большому счету, этого достаточно, чтобы создать пару контроллеров и запустить стартап (который не взлетит). Но как эта конфигурация заставит работать Spring? А вот тут начинается самое интересно. Для того чтобы наша конфигурация была понята Spring’ом существует XmlBeanDefinitionReader. Это внутренний компонент Spring’a, который сканирует (парсит) xml и на основе того, что мы там написали создает BeanDefinition’ы. BeanDefinition – это объект, который хранит в себе информацию о бине. Сюда входит: из какого класса его (бин) надо создать; scope; установлена ли ленивая инициализация; нужно ли перед данным бином инициализировать другой и иные проперти, которые описаны в xml. Все полученные BeanDefinition’ы складываются в HashMap, в которой идентификатором является имя бина (установленное вами или присвоенное спрингом) и сам BeanDefinition объект.
После того, как все BeanDefinition’ы созданы на сцену выходит новый герой – BeanFactory. Этот объект итерируется по HashMap’e с BeanDefinition’ами, создает на их основе бины и складывает в IoC контейнер. Здесь есть нюанс, на самом деле, при старте приложения, в IoC контейнер попадут бины, которые имеют scope Singleton (устанавливается по-умолчанию), остальные же создаются, тогда когда они нужны (prototype, request, session). А теперь небольшое отступление, познакомимся с еще одним персонажем.

Встречайте — BeanPostProcessor. (BPP)

bean post processor

Дело в том, что бин это не обязательно класс бизнес-логики вашего приложения. Бином также называют инфраструктурный бин. Вкратце, инфраструктурный бин это класс, который настраивает бины вашей бизнес-логики (да-да, слишком много бинов). Подробнее о нём я расскажу ниже, но чтобы было чуточку понятнее, что именно BPP настраивает, приведу пример. Всем же знакома аннотация @Autowired? Так вот, именно AutowiredAnnotationBeanPostProcessor ответственен за то, чтобы все ваши классы были внедрены друг в друга.
uknowimean

Вернемся к BeanFactory.
Зная теперь о BPP, нужно уточнить, что итерируясь по HashMap’e с BeanDefinition’ами сперва создаются и кладутся отдельно (не в IoC контейнер) все BeanPostProcessor’ы. После этого создаются обычные бины нашей бизнес-логики, складываются в IoC-контейнер и начинается их настройка с помощью отдельно отложенных BPP.
А происходит это вот как, каждый BPP имеет 2 метода:
postProcessorBeforeInitialization(Object bean, String beanName);
postProcessorAfterInitialization(Object bean, String beanName);
.
Происходит итерация по нашим бинам дважды. В первый раз вызывается метод postProcessorBeforeInitialization, а во второй раз вызывается метод postProcessorAfterInitialization. Наверняка возник вопрос, зачем нужны два метода, объясняю. Дело в том, что для обработки некоторых аннотаций (таких как @Transactional, например) наш бин заменяется proxy классом. Чтобы понять зачем это делается, нужно знать как работает @Transactional, а работает это вот как. В метод, помеченный данной аннотацией необходимо налету добавить еще пару строк кода. Как это сделать? Верно, с помощью создания класса proxy, внутри которого и будет добавлен необходимый код в нужный метод. А теперь представим такую ситуацию, у нас есть класс:
class A {
    @Autowired
    private SomeClass someClass;

    @Transactional
    public void method() {
        // модификатор доступа обязательно public
    }
}

В этом классе 2 аннотации @Autowired и @Transactional. Обе аннотации обрабатываются разными BPP. Если первым отработает AutowiredBPP, то все будет в порядке, но если нет, то мы столкнемся с вот какой проблемой. Дело в том, что когда создается класс proxy, то вся мета-информация теряется. Другими словами, информации об аннотации @Autowired в proxy классе не будет, а значит и AutowiredBPP не отработает, а значит наше поле someClass будет иметь значение null, что, скорее всего, приведет к NPE. Также стоит знать, что между вызовами методов postProcessorBeforeInitialization и postProcessorAfterInitialization происходит вызов init-метода, если он есть. Это по-большому счету второй конструктор, но отличие в том, что в этот момент все наши зависимости уже внедрены в класс и мы можем к ним обратиться из init-метода.

Итак, еще раз алгоритм инициализации контекста:
1. XmlBeanDefinitionReader сканирует наш xml-конфигурационный файл.
2. Создает BeanDefinition’ы и кладет их в HashMap.
3. Приходит BeanFactory и из этой HashMap отдельно складывает все BeanPostProcessor’ы.
4. Создает из BeanDefinition’ов бины и кладет их в IoC-контейнер.
5. Тут приходят BPP и настраивают эти бины с помощью 2х методов.
6. Готово.

Собственно, на этом всё, пишите понравилась вам статья и стоит ли продолжать писать подобные туториалы.

История успеха спустя 1.5 года от начала обучения.

Осторожно! Много Букв!



Для начала расскажу немного о себе.
Мне 25 лет. До того, как начать изучать Java учился на математическом факультете, на прикладной математике. Казалось бы, с программированием у меня должно быть если не отлично, то по крайней мере хорошо. Но это был не мой случай, т.к. все предметы, где мелькало программирование — я саботировал и сдавал как-то на удаче, сам ничего не писал. Так вот и получилось, что я от программирования был далек. Ясное дело, что с образованием математика в нашей стране много не заработаешь кроме как программистом. Поэтому и выбор пал именно на это. И так совпало, что решил учить Java. Это не было связано с каким-то анализом рынка или поиском по количеству рабочих мест, востребованности на рынке труда. Просто так совпало. И когда решил узнать как это делать — то наткнулся на JavaRush. Как-то не хотелось учиться только по книгам, но и на очные курсы я смотрел нехотя, т.к. денег стоят они много, а реально профита мало. Поэтому JavaRush для меня был лучшим решением. Пройдя первые 3 уровня, я понял что курс мне нравится и что можно покупать подписку. Тем более, что я попал на акцию и приобрел за пол цены. Было это в конце августа / начале сентября 2015 года.

План обучения.
Прочитав что нужно делать, я решил составить план того, как я должен учиться, чтоб добиться цели и закончить курсы, потому как времени на медленное изучение у меня уже не было. Задача стояла получить быстро знания, причем так чтоб не отвадить желание и чтоб мозгам было время отдохнуть. Потому что такая нагрузка, которую я хотел могла помешать мне.
Для этого решил:
  • Что нужно учиться пять дней в неделю(пн-пт).
  • В выходные дни я буду заниматься чем угодно, только не этим.
  • Каждое занятие будет идти в общей сложности 4 часа, причем между каждым часом будет перерыв в 15 минут, для того чтоб пройтись, отдохнуть и сделать чай.
Итого 20 часов в неделю. Неплохо, да? К тому же иногда приходилось заходить в университет, т.к. я еще учился в магистратуре.
К декабре я уже был на 20 уровне и думал, что знаю очень и очень многою Но были у меня и кризисы, когда ничего не получалось и казалось, что дальше не смогу (см. моя статья помогите, нужна мотивация).


Переход на новый уровень.
Через три месяца после начала обучения, я побеседовал со знакомым на тему того, что я еще должен знать, чтоб устроиться на работу…
И тут понеслось: какие-то не знакомые слова, базы данных (о ужас!) и многое другое дали мне понять, что нужно ускоряться и делать еще больше. Ясно, что с грамматикой джавы мне не получить работу, я начал ускоряться в разных направления:
  • Купил себе книгу Head First «Изучаем Java». Ее рекомендуют на 4-м уровне в курсе. Но я как-то не внимательно читал и пропустил этот факт. Там рассказываются теже вещи, но под другим углом, что помогает понять их лучше и основательне. Советую.
  • Начал искать все тематические тусовки в своем городе и ходить на них, пусть даже я многого не понимал, зато со вмеренем понял, что это было не зря и они мне очень помогли. например так
  • Есть еще один ресурс, который нужно прошерстить от начала и до конца — это dou — сайт для программистов. Там можно посмотреть какие бывают ивенты, какие нынче зп в украиском ИТ, можно прочитать много очень полезных статей, особенно рекомендую Материалы по теме «Пособие для будущего Java разработчика» и Java Enterprise: что и как учить. Эти статьи будут помошником для вас и не будут давать расслабляться.
  • Нашел короткие и информативные видеоуроки на youtube по MySQL, советую.
  • Видеоуроки Головача тоже не остались без внимания. Их много, много воды, но разъясняет многие вещи достаточно хорошо.
  • Так же нужно понимать что такое HTML и CSS. Без этого никак, тут мне помогла в этом HtmlAcademy. Там можно проходить задания бесплатно.
  • Зарегистрировался в соц.сети linkedIn, где начал выставлять свои навыки и что я ищу работу(а вдруг повезет и меня найдут). Добавлял всех подряд в друзья расширяя круг своих друзей. Чтоб вы понимали насколько, то сейчас у меня больше 10 000 друзей в линкедине. Для начала это нужно. И это помогло, команда андроид фрилансеров искала новичка себе и мне написали. Я понимаю, что случай из ряда вон выходящий, но это случилось.

Первые неудачи
Конечно параллельно учебе, я начал искать интернатуру в компаниях так, чтоб со временем можно было работать. Меня пригласили на собеседование в интернатуру. Поговорив с HR-ром, ко мне позвали преподавателя по английскому, с которым я «пообщался». К этому моменту я вовсе был не готов и вышло, что я больше слушал, чем говорил. И на тему расскажи о себе, я что-то промямлил, но ничего особенного. А вот при общении с техлидом я отвечал на некоторые вопросы, на многие ответа не знал и на ответ, что обучаюсь в JavaRush, он сказал что передо мной был еще один студент оттуда. Я был на 27 уровне, а он уже на 34. Поговорив он сказал, что мне перешлют тестовое задание, по которому решат годен ли я. Я его как-то сделал, причем не весь функционал. Через некоторое время мне написали, что я им не подхожу… Обидно, но я решил извлечь опыт из этого и пошел дальше.

Первая работа.
Как я уже говорил, составив страницу в linkedin'е через 1.5-2 месяца мне написал некий андроид разработчик с предложением работать с ними. Ясное дело, что речь шла об минимальной зп. Мы пообщались при встрече и мне предложили работу. Понятно, что она была слабо оплачиваемая, но другого у меня не было и я радовался тому, что было. Начиная с конца января я начал работать на квартире одного из них на анроиде. Всё было новое, все другое. Но кое как и как-то я работал, что-то делал. Было страшно и всё не понятно, это были не задачки в JavaRush. Всё нужно было делать, читать, узнавать что и как. У меня был тестовый проект, который я делал и который мог стать чем-то большим со временем. И так прошло до мая. Потом как-то начал разваливаться наш коллектив, все это поняли и начали искать работу.

Поиск новой работы.
Не зная как это делать, я решил что буду рассылать всем компаниям, которые есть в моем городе. А как узнать какие есть компании? В этом мне помогл тот факт, что я прошерстил dou вдоль и поперек. Там есть раздел компании и можно выбрать город, которому идет поиск. В описании есть почта (почти всегда есть), на которую можно писать. Чтоб всё выглядело хорошо, я написал свое резюме на английском языке, только так и надо. Конечно было много воды, воды, воды, т.к. писать особо нечего было, писал всё подряд. Также к каждому письму писал сопроводительное письмо(рекрутеры любят это), где я указал кем именно я хочу быть, а то часто выходит, что присылают резюме и не ясно на какую позицию претендуют. Сопроводительное письмо было также на английском. Совсем забыл, английский нужен ОЧЕНЬ сильно. Реально, если ты не можешь прочитать ответ на стековерфлоу, то ты не жилец и делать тебе в программировании нечего. Составил себе на речь на собеседование английского на тему: Tell me about yourself. Очень полезная вещь, я вам скажу.

Спустя некотое время я получил 4 приглашения на собеседование. Практика рассылки всем компаниям была оправдана, причем тем, у кого не было таких позиций — они обычно не отвечали вовсе. На собеседованиях было сложно, было стыдно, было не уютно, но я прошел их, в некоторых просто говорили, в других нужно было сделать пару заданий, например нужно было написать интерпритатор на джаве на язык BrainFuck. Задача оказалась интересной и я рад, что ее выполнил, хоть меня в ту компанию и не взяли. Искал я работу либо на Java либо на Android. Хотя хотелось больше на джаву, мобильная разработка мне не особо интересна. Зарплатные ожидания были минимальны, нужно было найти работу, всё остальное было уже не важно. Спрашивали меня на понимание Баз данных, о там как создать таблицы в для определенных ситуаций. Это всё касается SQL баз данных, про NoSQL никто не спрашвивал.

Первый оффер.
В одном месте мне написали и отказали, в другом тоже. Остались две компании, в одной на позицию андоид разработчика, в другой — на джава. Позвонили с компании по поводу андроид и сказали, что я им подхожу и мне делают оффер. Это была победа. Я был очень рад. Но мне так жне позвонили в компании за джава позицию и я метался и не знал что делать, поэтому попросил подождать день с моим ответом, чтоб я смог позвонить узнать за позицию джава разработчика. Позвонив в компанию за джава позицию, я сказал, что мне сделали предложение, но я хочу узнать от вас еще результат. Меня пригласили в офис к ним поговорить и сказали, что результат разговора мне понравится. И они оказались правы, переговорив с ними, мне сделали оффер во второй компании, собственно которую я и выбрал.

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

P.S. нужно стремиться, стремиться, стремиться и никогда не сдаваться!

P.S.S я весь курс не прошел до конца, остановился на 30-м уровне. А когда получил работу, то был на 27. И реально скажу, что начиная с 20-го уровня нужно искать работу и разиваться помимо Java. Освоить хотя бы издалека фреймворк для автоматизации проектов (Ant, Maven, Gradle). Вещь не сложная и очень нужная.

Всем, кому понравилась статья — ставьте "+", чтоб я знал :) Для меня это важно :)


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

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

Иннополис - кто-то что-то о нем слышал?

Доброго времени суток, коллеги.

Собственно, сабж по ссылке:
apply.innopolis.ru/stc/

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

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

Вопрос ко всем: кто-нибудь слышал хорошее/плохое об этих курсах? Может, у кого-то там учились знакомые, друзья?

Спрашиваю потому что ситуацию для России типична — «как-то все подозрительно хорошо звучит».
На слух, конечно, здорово, но придется ведь дома все бросить, включая хоть и нелюбимую, но худо-бедно оплачиваемую работу. И бросить ради, по сути, кота в мешке.

Поделитесь инфой, если она у кого-то есть.
  • ,

Как создать исполняемый jar в Intellij IDEA / how to create jar in IDEA

Создаем исполняемый jar в Intellij IDEA

Как оказалось, не так то и просто найти в просторах интернета информацию об этом. Есть много ссылок на то, как это делается в Eclipse, а про Intellij IDEA сказано не многим больше нуля. Поэтому я создал этот пост.

IntelliJ IDEA дает возможность быстро создавать исполняемый JAR-файл вашей программы, содержащий модули со всеми зависимостями.

Для того, чтобы создать JAR, необходимо проделать всего 3 пункта:

1. Нажмите кнопку ‘+’ в диалоговом окне Project Structure и выберите соответствующий пункт (Рисунок 1):

Рисунок 1 – Project Structure -> Artifacts -> Jar -> From modules with dependencies

2. Далее IntelliJ IDEA показывает диалог, позволяющий настроить новый артефакт (Рисунок 2):

Здесь нужно выбрать главный класс вашего проекта и нажать ОK

Рисунок 2 – Диалог создания нового артефакта JAR

3. После нажатия клавиши ОК, вы можете создать файл Jar с помощью пункта меню Build -> Build Artifact

По умолчанию все библиотеки будут извлечены в целевой Jar. Сам исполняемый файл будет сгенерирован в директории out -> artifacts вашего проекта (Рисунок 3):

Рисунок 3 – Месторасположение сгенерированного JAR файла

Все, теперь исполняемый файл можно запускать.


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

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