sobota 25. července 2015

Jak jsem získal práci v Německu

Začátkem července jsem se dozvěděl, že nemáme dost peněz ve firmě a do konce července skončím. Tak jsem začal shánět práci. Chtěl jsem pokračovat v tom, co dělám, tedy programovat webové aplikace.

Protože jsem se chtěl naučit německy, tak jsem si říkal, že bych mohl pracovat v Německu, Rakousku či Švýcarsku. První věc, kterou jsem udělal, bylo vytunit svůj Linkedin profil. Napsal jsem do současné pozice technologie, které jsem kdy použil. Také jsem se zmínil o tom, že jsem několikrát pracoval dálkově.

Práci budu hledat výhradně přes internet, a to přes Linkedin a Stackoverflow Careers. Na Linkedin jsem si předplatil Premium účet. Ten je zdarma po dobu 30 dní, ale musíte zadat číslo kreditky. Poté vám z účtu zadrží částku 1 euro, asi aby zjistili, že účet je správně. Ale nevemou vám to z účtu a po pár dnech se částka zase objeví zpátky. S Premium účtem se prý váš profil objevuje výše při vyhledávání, vaše aplikace na pracovní pozice se dostane na přední pozice u HR a také máte více možností při vyhledávání práce (které stejně není použitelné pro Evropu, třeba výše platu funguje jen pro USA). A nejlepší vychytávkou je možnost vidět u jednotlivých pracovních pozic porovnání, kolik lidí se tam přihlásilo, jaké mají úrovně a skilly a v jakém procentu bych se umístil mezi nimi. Funguje to až od 10 přihlášených lidí na pozici a výše. Také tam lze vidět statisku dané firmy, ale také se to zobrazuje až pro větší počet zaměstnanců registrovaných na Linkedin. Nevím, zda mi Premium účet pomohlo k nalezení práce, ale když je to zadarmo, proč to nezkusit.

Na Stackoverflow Careers je vyhledávání práce o dost lepší, protože lze filtrovat výsledky podle firem, které vám dovolí pracovat dálkově, pomohou vám s vízem nebo s přestěhováním. U pracovních nabídek navíc vidíte, do jaké míry firma splňuje Joelův test. Máte tam také vlastní profil. Údaje do nich můžete naimportovat z Linkedinu. Ale třeba kolega nemohl založit účet na Careers. Je to možná tím, že má málo bodů na Stackoverflow.

Zaslání aplikace na Linkedinu je v některých případech poměrně jednoduché. Stačí kliknout na jedno tlačítko a potvrdit. Skoro pokaždé se ale stalo, že firmy po mě stejně v následných emailech požadovaly poslat CV. V jiných případech firma odkazuje z Linkedinu na jejich vlastní stránku, a tam už musíte vyplňovat miliony věcí o sobě a přidat průvodní dopis a CV.

Na Stackoverflow je nutné při zaslání aplikace na pozici napsat i nějaký průvodní dopis, což byla poměrně otrava. Nakonec však větší procento odpovědí přišlo z nabídek na StackOverflow. Na druhou stranu práci jsem nakonec sehnal z inzerátu na Linkedin.

Množství práce bylo pro mě trochu omezené, protože jsem hledal firmu, která nepožadovala němčinu. Navíc musela používat ty technologie, které umím, jinak bych tam neměl co dělat. Pokud umíte němčinu, obrovsky se vám rozšíří počet pracovních míst, o které se můžete ucházet.

Skoro všechny pohovory měla následující strukturu: prvně mi zavolala nebo napsala paní z HR. Pokud mi zavolala, ptala se na obecné věci jako proč se chci stěhovat do Německa, proč hledám práci, jaký si představuji plat atd. Pokud mi psala, tak mi psala podobné otázky, ale často tam přidaly i nějaké programátorské otázky, ať na ně odpovím. Tohle první kolo s HR zabírá cca 90 min.

Druhé kolo bylo čistě technické. Zavolal mi jeden či dva lidi z technického týmu a různě se vyptávali. Některé z těžších otázek můžete vidět v předchozím příspěvku. Jednou mi i dali úlohu, ať zpracuji přímo při pohovoru a ať přitom říkám, jak bych postupoval. Prostě jako při ústním zkoušení ve škole. Po hovoru následovalo v některých případech zaslání úlohy a požadavek ho splnit do týdne. Úlohy byly stylem - udělej web aplikaci CRUD, použij onu  technologii na backendu a jinou na frontendu, aby to byla single page aplikace apod.

Do třetího kola jsem se dostal jen s jednou prací (protože jsem ji pak přijal a napsal ostatním, že už mám práci), kde mi zavolali paní project managerky a ptali se mě na práci v týmu a osobnostní otázky, tedy nic technického. Řekl jsem pravdu a také jsem se pak jich zeptal na nějaké otázky ohledně práci ve firmě a jejich osobní názory.

A pak přišla akceptace a podrobná nabídka pozice. Dostal jsem lehce víc, než jsem si řekl, ale během pohovorů jsem zjistil, že v Německu jsou vysoké daně (tak 40% - 45%), takže ve výsledku mám jen průměrný plat. A ještě budu žít v Mnichově, což je nejdražší německé město, ale podle statistik nejlepší město v Německu. Takže u platů to žádná výhra není. Moje doporučení pro příště je předem zjistit náklady na život a říct si o čistou než o hrubou mzdu.

Co je ale lepší, jsou volné dny a nemocenské. Dostanu 28 dní placeného volna (+ svátky atd.) a nemocenské se tu prý platí 100% platu prvních 6 týdnů a pak 70% do 3 let. Je to výrazné zlepšení oproti živnosti. Dále jsou zahrnuty pití a ovoce zdarma v práci, sprcha, flexibilní pracovní doba a možnost home office. Také dostanu nějakej MacBook, ale asi jen pro práci. A čas od času budu moci jet do Berlína pracovat v jejich druhé pobočce. A proplatí mi i německé kurzy, tak se snad naučím mluvit německy jako Irma.


tl;dr
Práci v zahraničí jsem hledal přes Linkedin a StackOverflow Careers. Na Linkedin jsem si navíc zaregistroval prémiový účet na měsíc zdarma. Všechny kola pohovoru jsem dělal online. Nakonec po skoro 3 týdnech hledání a pohovorů jsem si našel práci, která mi vyhovuje.

úterý 21. července 2015

Otázky z prac. pohovorů

Během pohovorů do pozice Java programátora jsem pochytil pár zajímavých otázek, u kterých jsem si nevěděl rady. Předkládám tu některé z nich:


1) Co je statická synchronized metoda?
Výtah ze specifikace Javy: A synchronized method acquires a monitor (§17.1) before it executes. For a class (static) method, the monitor associated with the Class object for the method's class is used. For an instance method, the monitor associated with this (the object for which the method was invoked) is used.
Pokud je synchronized na statické metodě, zámek je na třídě. Tudíž opravdu jen jedno vlákno může přistupovat do této metody


 2) Mohou 2 vlákna volat stejnou synchronized metodu v tu samou chvíli?
Ano, protože synchronized na metodě získává zámek na objektu. Pokud tedy máme 2 různé objekty stejné třídy, mohou volat v jednu chvíli tu samou metodu.
Zdroj: http://stackoverflow.com/questions/9382015/can-two-threads-access-a-synchronized-method-at-the-same-time


3) Může v Javě existovat statické třídy?
Ano, může existovat jako nested class (vnořené třídy?). Statické vnořené třídy mohu vytvářet bez nutnosti mít instanci vnější třídy.

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

4) Jaký je rozdíl mezi nested a inner class?
Nested class se dělí na statické a nestatické. Statické jsem popsal o otázku výše, nestatické se nazývají inner class.
Pro zajímavost, v Javě existují 4 druhy vnořených tříd: 
  • static class: declared as a static member of another class
  • inner class: declared as an instance member of another class
  • local inner class: declared inside an instance method of another class
  • anonymous inner class: like a local inner class, but written as an expression which returns a one-off object


5) Mohu přetížit (overload) metody public void fun(List<String> x) a public void fun(List<Integer> x)?
Ne. Generics kontroluje kompilátor, ale při překladu do bajtkódu se maže generics typy (tzv. Type erasure proces) a konverze do správného typu je zajištěno pomocí casting. Proto v bajtkódu by tyto metody byly od sebe nerozlišitelné.


6) Úloha:
Write a method that tells whether a given positive integer is happy. A happy number is found using the following process: Take the sum of the squares of its digits, and continue iterating this process until it yields 1, or produces an infinite loop.

For example the number 49:
4^2 + 9^2 = 97
9^2 + 7^2 = 130
1^2 + 3^2 + 0^2 = 10
1^2 + 0^2 = 1

Therefore number 49 is happy. Similarly 10 is happy, but 2, 3, 4, 5, 6, 8 or 9 are not happy.