Java core, it sphere

У цій статті я розповім про те, через які етапи проходить java об'єкти при їх створенні. Іншими словами, я розповім про життєвий цикл java об'єктів.

Для початківця java розробника дуже важливо розуміння життєвого циклу класу. Це допоможе швидко вирішувати виниклі помилки компіляції і запобіжить появу численних багів.

Коли в методі main ми створюємо якийсь об'єкт, java бере на себе турботу щодо виконання різних етапів створення об'єкта.

Наприклад, ми маємо наступний код у файлі Main.java.

public class Main

public static void main (String [] args)

System. out. println ( "Start main");

System. out. println ( "End main");

private static int staticField = 2;

System. out. println ( "ObjectCircle class static field" + staticField);

System. out. println ( "ObjectCircle class static code block");

Вийшов дуже цікаві результат. Виходить, що через те, що ми метод main перенесли в сам класу ObjectCircle, ClassLoader набагато раніше завантажив в пам'ять класи ObjectCircle і ParentObjectCircle. Це звичайно ж пояснюється тим, що метод main знаходиться в класі ObjectCircle і для виконання методу main його потрібно завантажити. Але для завантаження класу ObjectCircle потрібно попередньо завантажити в пам'ять ще й клас ParentObjectCircle. Тому сталася ініціалізація статичних полів і статичних блоків коду в цих класах ще до виконання методу main.

Настав час підбити підсумки.

При першій згадці класів в додатку, java використовуючи клас ClassLoader завантажує необхідний клас в пам'ять і після цього починає ініціалізацію статичних змінних, а потім виконуються статичні блоки коду. Але, якщо даний клас є нащадком якогось іншого класу, то ClassLoader спочатку виконає всі ті ж етапи для батьківських класів, а вже потім для того якого потрібно.

Після того як всі необхідні етапи при завантаженні класів в пам'ять пройдені, відбувається створення об'єктів даного класу. Але воно починається не з виконання конструктора, а з ініціалізації спершу не статичних змінних і потім виконання не статичною блоків коду. А вже потім виконується конструктор.

Перевизначенні методу finalize може призводити до проблем пов'язаних з некоректним звільненням ресурсів. Це пов'язано з тим, що немає ніякої гарантії, що метод finalize буде викликаний. Використовуйте його тільки, якщо на все 100% знаєте до чого це призведе.

Java core, it sphere

Сподіваюся Ви розумієте, що від junior не вимагають глибоких знань. Колись, хтось мені сказав, що junior повинен знати все, але чуть-чуть. Тому не кидайтеся вчити все, аж до асемблера. Коротше, докладніше буду описувати по ходу.

Ще додам, що в цьому топі перераховані тільки надзвичайно важливі теми. Це зовсім не означає, що в наступному будуть не важливі. Там так само будуть ті, без яких не обійтися. Ще до них додадуться вже професійні навички, які на порядок збільшать вашу конкурентну перевагу. Поїхали.

Перше місце! ООП

Мушу зауважити, що якщо Ви все вивчили, як я сказав раніше, це ще не означає, що Ви в повній мірі застосовуєте ООП, коли програмуєте. ООП це така штука, яку не можна взяти так і зрозуміти відразу. Для цього потрібен не один рік досвіду.

Раз Ви новачок, то Вас швидше за все, на співбесіді, попросять пояснити, як працює ООП на тій мові, який Ви вивчаєте. Може дадуть шматок коду, в якому ієрархія класів і скажуть визначити, який метод викликається при тих чи інших умовах.

Друге місце! Java core

Другим за важливістю йде java core. Це досить широке поняття. На знання java core, Вас можуть попросити вирішити тест. Цей тест буде з розряду, що буде якщо виконається даний код. Ви заздалегідь можете потренуватися вирішувати такі тести. В інтернеті повно ресурсів, які дозволять пройти таку перевірку безкоштовно. Пошукайте OCJP (SCJP) tests online.

Зверніть увагу на те, що я сказав, що вам МОЖУТЬ дати такий тест. Якщо його не дадуть, то швидше за все спитають усно. У цьому випадку Ви можете проскочити.

Третє місце. Java Collections

Також надзвичайно важлива тема. Питання по колекціях будуть вас переслідувати всю вашу майбутню кар'єру, незалежно від того junior Ви або senior.

Насамперед вивчіть основні інтерфейси і зрозумійте для чого вони потрібні і чим відрізняються. Список не великий це Collection List, Set, Queue і Map. Не потрібно заучувати всі їхні методи, краще навчитеся користуватися ними.

Четверте місце. Servlets

Сервлети - це теж дуже важлива штука. Дуже часто на співбесіді мене питали про життєвий цикл сервлетів.

Чесно кажучи, писати серверну частину для веб і андроїд додатків можна і не знаючи про сервлетах. Але це майже те ж саме, якщо назвати людину програмістом після того, як він зробив свій перший сайт на wordpress. За цим якщо не хочете, щоб у Вас був комплекс не повноцінності, то вчіть сервлети.

П'яте місце. Synchronization

Раз вже ми торкнулися сервлетів, які можуть обробляти безліч паралельних запитів, то цей час згадати трохи синхронізацію потоків і багато потоковість. Я не вважаю потоки щодо важливою темою. Їх ще торкнемося пізніше. Набагато важливіше вміти синхронізувати доступ до загальних ресурсів між декількома потоками.

Навчіться користуватися ключовим словом synchronized. Так вийшло, що я влаштувався на свою першу роботу не знаючи про існування класів Semaphore і СountDownlatch. Тому я вважаю, що це не сильно важливо, але якщо буде вільний час, то поколупатися їх.

Шосте місце. JDBC

Сьоме місце. SQL

Зараз в мене полетить купа каміння. Але я повинен Вам відкрити завісу таємниці. Завжди кажуть, що SQL потрібно знати дуже добре і це правда. Але для новачка є поблажки. Він повинен його знати достатньо, щоб пройти співбесіду, а далі, майже завжди, буде можливість залізти в википедию і підглянути, якщо що забув. За великим рахунком, це можна сказати, практично про все, що було сказано вище.

На співбесіді Вас швидше за все попросять написати запит, який витягне дані відразу з двох таблиць по деякому умові. Цю вибірку доведеться згрупувати і впорядкувати. Це типове завдання. Тому заздалегідь потренуйтеся.

Як Ви могли помітити, найміцніші знання Вам будуть потрібні по Java core. По всьому іншому можна створити видимість наявності у Вас досвіду використання. Це пояснюється тим, що зазвичай тільки по Java core можуть дати вирішувати тест. А тест, як Ви розумієте вже складніше, обдурити. Хоча може попастися такий інтерв'юер, який так буде чіплятися, що пиши пропало.

Ще доповню, що в моє слово "обдурити" я вкладаю трохи інший зміст. Я думаю, що майже у всіх новачків є деяка своя оцінка їх знань. І часто вона дуже низька. Тобто, ти думаєш, що нічого не знаєш, а на роботу тебе взяли. Виходить ти думаєш, що обдурив інтерв'юера. Хоча він може просто закрив очі на деякі твої прогалини і фірма готова їх закрити за свій рахунок. Виходить, що обман існує тільки в твоїй голові.

У наступній статті я розповім про просунутих фішках, які не просто полегшать вам життя як розробника, а й на порядок збільшать Ваш шанс знайти роботу.