Результати пошуку за запитом: видеокурс c*
Як правильно укласти договір на розробку сайту: поради для фрілансерів
Автор: Богдана Гайворонська
Фрілансери не завжди укладають договір на розробку сайту із замовниками, покладаючись на домовленості, озвучені усно чи сформульовані в переписці. Адже сам процес узгодження і підписання документів займає певний час і потребує зусиль. Втім, співпраця на довірі доволі ризикована для обох сторін. Крім того, що один із учасників може безкарно відмовитися від виконання своїх обов’язків, є чимало ньюансів, які ускладнюють співпрацю в разі відсутності документально завірених алгоритмів роботи. Навіть коли обидві сторони мають намір добросовісно виконати всі домовленості, їх може підвести банальне непорозуміння.
Договір не лише гарантує захист як виконавця, так і замовника. Він є певною дорожньою картою, яка описує кожен етап робіт, кожну можливу ситуацію, дії партнерів у разі форсмажорів та алгоритм врегулювання спірних питань.
Навіть підписання типового договору частково зменшує ризики, але ми все ж радимо створювати окремий контракт для кожного замовника.
Хостинг-провайдер та реєстратор доменних імен Cityhost.ua пропонує читачам нашого блогу матеріал, створений спільно з IT-юристами, щоб розібратися в усіх аспектах створення договору на розробку сайту.
Етапи узгодження та укладання договору
Укладання договору починається в той момент, коли замовник та виконавець обговорюють та узгоджують всі деталі проєкту. Тому цей етап також має бути задокументований у вигляді брифу. Крім того, потрібно скласти детальне ТЗ та сформувати сам договір. Давайте розглянемо кожен крок на цьому шляху.
Заповнення брифу
Замовники дуже не люблять заповнювати бриф і намагаються пропустити цей етап, обговоривши всі деталі по телефону або в чаті. Часто відбуваються ситуації, коли замовник каже «Ви професіонал, подивіться самі, що там потрібно зробити і викладіть свої пропозиції». Така позиція нерідко виливається у результат: «Ні, це не те, що потрібно, запропонуйте щось інше».
Насправді ж бриф дуже потрібен для співпраці, бо в ньому містяться відповіді на важливі для виконавця запитання. Кожен розробник укладає свій бриф, який може виглядати подібним чином:
Назва та галузь роботи компанії.
Цільова аудиторія.
Локація (місцева, всеукраїнська, міжнародна).
Цінності, місія.
Корпоративний стиль — слоган, корпоративні кольори, стиль промо-матеріалів (бажано надіслати ці матеріали на пошту).
Тип сайту, який бажаєте замовити (візитка, інтернет-магазин, корпоративний сайт, наявність/відсутність блогу тощо).
Орієнтовна структура сайту, назви розділів.
Побажання щодо оформлення сайту.
Приклади сайтів, на які ви б хотіли орієнтуватися.
Можна розробити типовий бриф, але все ж варто вносити в нього додаткові запитання, призначені для конкретного замовника.
Складання технічного завдання
Після заповнення брифу замовник уточнює питання та вносить пропозиції, яким він бачить майбутній сайт — основну концепцію, кількість розділів, візуальний стиль. На основі цих перемовин складається технічне завдання і одночасно з тим починається розробка договору.
У техзавданні прописується конкретний результат і всі послуги, які надає розробник. Це дуже важливо, оскільки «зробити сайт» — доволі розмите поняття. Може трапитися, що власники фірми звернулися до фрілансера, який тільки пише код, і не займається дизайном і контентом. Тож він буде чекати від замовника макет, тексти та фото. Інші ж фрілансери можуть зробити сайт «під ключ» і мають розгалужену мережу субпідрядників — дизайнерів, копірайтерів, фотографів тощо.
Техзавдання прописується максимально детально і включає в себе вимірювані параметри, на кшталт: «Сайт має складатися з 5 розділів: головна сторінка, сторінка «Про нас», сторінка контактів, сторінка для представлення товару, розділ для блогу».
Якщо у сайту є блог або розділ новин, у ТЗ також пишеться, чи має виконавець заповнити цей розділ 2-3 новинами, чи робить тільки структуру блогу.
Чим докладніше буде описано кожен нюанс розробки сайту, тим менше залишиться простору для непорозумінь.
Обговорення та узгодження тексту договору
Для початку потрібно визначитися з типом договору. Існують два типи — договір на надання послуги та договір підряду. Вони відрізняються тим, що у першому випадку ключовим є сам процес роботи, а у другому — результат. Наприклад, SEO-просування не має кінцевого результату і триває завжди, доки існує сайт — тоді заключається договір на співпрацю. Для розробки сайту більше підходить договір підряду, оскільки замовнику потрібен сайт, його цікавить завершена робота та її плоди.
Далі потрібно прописати почергово всі головні етапи співпраці:
Надання замовником матеріалів розробнику. Це можуть бути тексти, фото, відео, логотип тощо.
Створення та затвердження макету.
Розробка сайту.
Внесення правок.
Перевірка та прийом роботи.
Підписання актів про виконання робіт.
Оплата виконаної роботи.
Це орієнтовний перелік, бо у кожного сайту можуть бути свої етапи. Наприклад, виконавець не лише розробляє сайт, а й проводить маркетингові дослідження, вивчає ринок, аналізує конкурентів та на основі отриманої інформації дає рекомендації замовнику щодо концепції сайту — це окремий етап, який також потребує зусиль та впливає на формування вартості замовлення.
Основні правила складання договору
Є елементи договору, без яких він не зможе стати чітким документом, що дисциплінує сторони в процесі роботи.
Терміни
Обов’язково потрібно прописати терміни виконання кожного етапу. Якщо уважно придивитися до порядку дій, ви побачите, що частина роботи залежить від виконавця (створення сайту, внесення правок), а друга частина — від замовника (надання матеріалів, перевірка, прийом роботи). Якщо в договорі прописана тільки фінальна дата, коли розробник повинен здати сайт, він може потрапити у часову пастку — строки затягнуті, але не з його вини.
Також потрібно прописати дії сторін в разі, якщо хтось із партнерів виконує свої обов’язки неналежним чином. Наприклад, якщо замовник не здійснив прийом роботи протягом семи днів, вона автоматично вважається прийнятою.
Прописуйте не конкретні дати, а час між етапами, наприклад: «Розробник зобов’язується надати початковий макет сайту протягом 4 днів з моменту отримання матеріалів».
Вимірюваність
Всі пункти в договорі мають бути описані таким чином, щоб їх можна було виміряти якимось конкретним параметором — часом, дією, результатом. Наприклад, обговорення та внесення правок відбувається протягом тижня після того, як розробник надішле електронною поштою посилання на готовий сайт на таку-то адресу (конкретну). Таким чином знижується вірогідність плутанини, коли одна сторона чекає результат у Вайбері, інша пише повідомлення у Фейсбуці, а час спливає.
Конкретика
Дуже важливо прописувати чіткі формулювання. До прикладу, «надати макет сайту» — це нечітке формулювання. А ось «надати макет сайту у вигляді проекту в Figma з доступом редактора» — це вже щось конкретне. Так само потрібно прописувати, на які матеріали очікує розробник — фотографії у форматі .png з розширенням не менше 600 пікселів по ширині, тексти у форматі Google Docs з відкритим коментуванням.
Далеко не всі замовники орієнтуються в комп’ютерних технологіях. Якщо ваш клієнт — невелике будівельне підприємство чи ФОП, який ремонтує велосипеди, для нього не існує ніяких опцій за замовчанням. Тому конкретний і детальний опис всіх вимог та етапів — це скоріше необхідність, інакше на клієнта і розробника може чекати багато сюрпризів.
Збалансованість
У договорі мають бути рівномірно дотримані права та обов’язки обох сторін. Не має бути такого, що в усьому винен замовник або вся відповідальність лежить на виконавцеві. Якщо якийсь етап роботи залежить від дій певної сторони — вона несе відповідальність за його реалізацію або сплачує неустойку (чи підпадає під інші санкції) в разі невиконання обов’язків з власної вини.
Пункти договору, які потребують уваги
У цей розділ винесемо ті аспекти співпраці, про які фрілансери-початківці можуть не знати чи не вміти правильно їх врегулювати.
1) Кількість та порядок поправок, внесення змін у ТЗ
Важливим є питання кількості можливих правок та внесення змін у технічне завдання.
Найкращий і перевірений метод — коли замовник надсилає всі правки в одному документі, а виконавець вносить їх всі одразу. Оптимально робити три кола правок; якщо у клієнта з’являються додаткові правки, це має оплачуватися. Така політика в першу чергу захищає виконавця від десятків переробок і дисциплінує замовника, який з більшою уважністю вирішує, чи потрібна ця правка.
Правки мають бути конкретними та аргументованими, без формулювань на кшталт «зробіть якось інакше, але не так, як є».
Щодо ТЗ — всі зміни, які замовник хоче внести в нього вже під час роботи, мають також додатково оплачуватися. В разі потреби можна прописати, які зміни та якого масштабу можна вносити, скільки коштує кожна з них. Одна справа поміняти фотографію, і зовсім інша, коли замовник на фінальній стадії вирішує замінити CMS (по факту це означає робити все наново).
2) Авторські та майнові права
Питання авторських прав стосується як матеріалів, які використовуються на сайті під час розробки, так і використання матеріалів сайту після завершення робіт.
Важливо відстежувати, чи є унікальним контент, який надає замовник або пропонує виконавець. Для убезпечення обох сторін потрібно прописати порядок дій для запобігання ситуаціям, коли можуть бути порушені авторські права третіх оосіб або одного з учасників проєкту. Наприклад, сторона, яка надає матеріали, має долучити документи, які підтверджують право власності на них — квитанції на придбання фото- та відео-матеріалів чи інший контент. Або для спрощення процедури можна просто зазначити, що відповідальність за порушення авторського права несе сторона, яка надала матеріали.
До об’єктів авторського права відносяться назва сайту, тексти, фото, відео, дизайн та код. У договорі має бути вказано, кому належать майнові та авторські права на всі елементи проєкту після його завершення та чи може розробник використовувати якісь із матеріалів для подальшої роботи.
Для орієнтиру використовуйте Закон про авторське право і суміжні права.
3) Співпраця з іншими підрядниками
Сайт складається з багатьох компонентів, і не всі роботи підрядник може виконати самостійно. Якщо він звертається до субпідрядників для створення дизайну чи текстів, це також має бути зафіксовано у договорі. Але в будь-якому разі за якість кінцевого результату відповідає виконавець.
4) Відповідальні особи за комунікацію з виконавцем
Цей момент особливо вартий уваги, якщо компанія-замовник велика, в ній є багато різних відділів та працівників. Скоріш за все, виконавець не працюватиме напряму з директором, а спілкуватиметься з кимось із менеджерів. В такому разі договір має містити ПІБ, посаду та контакти особи, відповідальної за комунікацію. Не завадить також вказати, які канали спілкування вважаються офіційними — ними можуть бути не лише пошта, а й акаунт у Телеграмі чи сторінка у Фейсбуці.
В разі, якщо різні аспекти будуть узгоджуватися з різними людьми, це також має бути вказано. Наприклад, за фінансові питання відповідає бухгалтер, за узгодження макету — дизайнер компанії, всі інші питання — до менеджера. Але все ж краще, коли проект курує одна конкретна людина і несе відповідальність за своєчасну та ефективну комунікацію.
5) Форсмажорні обставини
Бувають ситуації, коли хтось не може виконати свої обов’язки з причин, які не залежать від нього. На цей випадок потрібно винести окремим пунктом подолання форсмажорних обставин: що можна вважати такими обставинами та порядок дій в разі їхнього виникнення (наприклад, відстрочка для виконавця для завершення робіт або відстрочка оплати для замовника). Зазвичай в цей перелік входять пожежі, стихійні лиха, бойові дії, страйки, введення карантину та інші обставини, які не можна передбачити та підготуватися до них.
6) Фінансові питання
В цю категорію входить не лише порядок оплати за виконану роботу (аванс, гонорар) а й супутні витрати. Сюди можна віднести оплату домена та хостинга, замовлення текстів, дизайну, фотозйомки тощо. Виконавець може ці витрати включити в суму гонорару, але можна і покласти їх на замовника. Це все обговорюється і прописується. Також у договорі мають бути зафіксовані такі моменти як порядок оподаткування, розрахункова валюта, рахунки для отримання коштів, порядок перерахунку та спосіб підтвердження отримання коштів виконавцем.
7) Прийом роботи або відмова від нього
На перевірку та прийом роботи виділяється певний термін, протягом якого замовник може висунути обгрунтовані зауваження та вимоги щодо доопрацювання сайту або відмовитися прийняти роботу, надавши чіткі аргументи. Відмовитися від прийому роботи можна тільки в разі, якщо сайт не відповідає технічному завданню, виконаний з порушенням законів або має інші об’єктивні недоліки, які унеможливлюють його використання і які можна довести. Не можуть бути враховані суб’єктивні аргументи, коли сайт виконаний за всіма домовленостями, але розробник уявляв собі його якось інакше. Якщо розробник виконав всі пункти ТЗ і договору, клієнт не може відмовитися від підписання акту.
В разі, якщо йдеться про масштабні проєкти з великою сумою оплати, радимо звернутися за консультацією до юриста, який допоможе прописати договір максимально чітко та уникнути «шпарин» для подвійного трактування.
Що повинен знати FrontEnd розробник у 2023 році
Автор: Влад Сверчков
Основні технології
HTML5 & CSS3
Flex та Grid CSS
CSS препроцесори
Git & GitHub
Знання про веб-технології та мережу інтернет
JavaScript
JavaScript Core (DOM, AJAX, JSON)
REST API
Алгоритми та структури даних
Фреймворки JavaScript
Інструменти керування станом програми (State Management)
TypeScript
Основи Figma
Англійська мова
Необов’язкові технології
Патерни проєктування JavaScript
Лінтери
Тестування
Webpack
Gulp / Grunt
SOLID принципи
Зарплати FrontEnd розробників
Підсумки
FrontEnd – одна з найлегших професій розробника в ІТ. Вона вигідно вирізняється тим, що поєднує в собі програмування та творчість, оскільки девелопер працює над оживленням дизайнерського макету та створенням відповідної користувацької логіки. Також перевагою фронтенду є те, що побачити результат своєї роботи можна майже одразу – в будь-якому браузері.
Відносна легкість фронтенду породжує велику популярність серед бажаючих потрапити в ІТ, а враховуючи наслідки відкритої агресії по відношенню до України – особливо велику популярність, адже це можливість працювати віддалено (на ІТ-компанію або на фрилансі) і отримувати гарну зарплату. Відповідно, конкуренція серед Trainee/Junior FrontEnd розробників шалена, а тому роботодавці вимушені закручувати гайки і підвищувати вимоги до кандидатів, аби відібрати найкращих.
Тож як стати фронтенд розробником? Якими технологіями необхідно володіти, аби стати Intern/Junior FrontEnd розробником у 2023 році? Проаналізувавши вакансії на українському ринку айті, ми склали список актуальних інструментів, які зазвичай вимагають роботодавці від кандидатів. Їхній перелік – нижче у статті.
Frontend developer roadmap. Основні технології
HTML5 & CSS3
HTML5 і CSS3 – це фундаментальні технології, без знання яких не обійтися жодному веб-розробнику. За допомогою мови гіпертекстової розмітки HTML створюється розмітка (каркас) кожної веб-сторінки. Потім мова стилів CSS збагачує візуальне оформлення сайту і надає йому привабливого та ефектного зовнішнього вигляду. Крім цього, необхідно володіти:
кросбраузерним адаптивним верстанням, щоб вміти створювати сайти під мобільні пристрої, планшети і широкоформатні екрани та для різних браузерів;
семантичним верстанням для підвищення якості розмітки та покращення пошукової індексації сайту;
валідним верстанням, яке передбачає повну відповідність коду розробника всім стандартам W3C - організації, яка створює та впроваджує технологічні стандарти для World Wide Web.
Приділіть особливу увагу верстанню під мобільні пристрої, тому що сучасний веб-споживач дуже багато часу проводить у смартфоні. Існує навіть спеціальний підхід, при якому спочатку верстається веб-сайт під мобільні пристрої, а потім під десктопи – називається Mobile First.
Це загальні вимоги щодо верстання. Тепер розглянемо більш детально вимоги безпосередньо щодо мови стилів – CSS. Тут ви повинні знати основні властивості CSS3: фони, градієнти, тіні, анімації, трансформації, переходи, а також технології Flex та Grid, про які ми ще поговоримо.
Гарне володіння HTML та CSS вже дозволяє займатися верстанням сайтів та заробляти гроші. Саме з цих двох базових технологій починається шлях до професії FrontEnd розробника.
Якісно вивчити HTML та CSS ви зможете за допомогою наступних наших курсів:
HTML5 & CSS3 Стартовий;
HTML5 & CSS3 Базовий;
HTML5 & CSS3 Поглиблений.
Flex та Grid CSS
Технології верстання надійних адаптивних веб-сторінок, які дозволяють легше створювати динамічні сайти та зручніше структурувати їх вміст. Найкраще Flex-верстання в дії показує інтерактивний сайт flexboxfroggy.com, а Grid-верстання – cssgridgarden.com.
На нашому ресурсі також є курси, які гарно пояснюють теми Flex та Grid верстання: "Верстання сайту на CSS Grid", "Верстання сайту на FlexBox CSS".
CSS препроцесори
CSS препроцесор — це програма, яка має власний синтаксис, але може згенерувати з нього CSS-код. Найпопулярнішими вважаються SASS, Stylus, LESS і PostCSS, проте найбільше ком'юніті саме у SASS. Препроцесори призначені для:
прискорення процесу написання коду;
спрощення читання коду та його подальшої підтримки;
мінімізації рутинної роботи під час написання коду.
Для підвищення ефективності написання CSS-коду цілком достатнім буде вивчення лише одного препроцесора.
Git & GitHub
Git - найбільш популярна система контролю версій, яка дозволяє вести історію розроблення проєкту з можливістю доступу до кожної збереженої версії.
Крім того, варто вміти працювати з сервісом онлайн-хостингу проєктів, який використовує систему контролю версій. У даному випадку це GitHub. У тандемі з Git він дозволяє розробникам зберігати свій код онлайн у хмарному сховищі, а потім взаємодіяти з іншими розробниками у різних проєктах.
Дані системи дозволяють команді програмістів працювати над одним проєктом одночасно, зберігаючи внесені зміни, і навіть відслідковувати виконання завдань кожним членом групи.
Git & GitHub — дуже важливі інструменти для будь-якого IT-розробника, вивченням яких слід зайнятися якомога раніше.
Ми рекомендуємо вивчати Git на ITVDN за допомогою курсу «Основи роботи з Git».
Знання про веб-технології та мережу інтернет
Щоб якісно виконувати свою роботу, фронтенд розробник повинен розбиратися у вебі і розуміти принципи його функціонування. Таким чином, необхідно знати:
як працює інтернет;
протоколи HTTP/HTTPS, веб-сокети;
як працюють браузери;
що таке DNS та як він працює;
що таке доменне ім'я;
що таке хостинг.
Також буде непогано, якщо ви спробуєте налаштувати сайт на якомусь безкоштовному хостингу, прив'яжете домен до цього хостингу.
JavaScript
Мова програмування, яка використовується як при розробленні клієнтської сторони веб-застосунку, так і серверної. За допомогою JavaScript (скорочено JS) можна писати навіть настільні та мобільні додатки, використовуючи певні програмні платформи та бібліотеки. Ця мова дозволяє:
динамічно змінювати HTML-розмітку;
здійснювати інтерактивну взаємодію з користувачем;
анімувати зображення;
здійснювати валідацію форм;
керувати мультимедіа тощо.
Іншими словами, JavaScript "оживлює" сторінку та додає їй функціональності. Гарне володіння цією мовою програмування є обов'язковим пунктом для кожного FrontEnd розробника.
JavaScript використовує офіційний стандарт ECMAScript (скорочено - ES), який має на увазі певний формальний опис синтаксису, базових об'єктів та алгоритмів. На даний момент існує багато різних версій ES. Роботодавці найчастіше вимагають знання ES6+.
Однак спочатку необхідно вивчити чистий JavaScript (vanilla JavaScript) і лише потім вникати в нові стандарти. Як не крути, а класику треба знати. Завдяки гарному володінню JS можна швидко розібратися в будь-якій версії ES, а потім опанувати будь-який фреймворк або бібліотеку.
ITVDN надає можливість вивчити JavaScript з нуля до поглибленого рівня за допомогою курсів:
JavaScript Стартовий;
JavaScript Базовий;
JavaScript: Розширені можливості.
JavaScript Core (DOM, AJAX, JSON)
DOM (Document Object Model) – об'єктне представлення вихідного HTML-документу. Ключовим є поняття DOM-дерева, яке описує структуру сторінки. За допомогою об'єктної моделі JavaScript отримує повну владу над HTML-документом: можливість редагувати, видаляти та додавати елементи і атрибути HTML, змінювати CSS-код тощо.
AJAX (Asynchronous JavaScript And XML) – це синтез технологій JavaScript і XML, який фактично являє собою комбінацію:
вбудованого в браузер XMLHttpRequest-об'єкту (щоб запитувати дані з веб-сервера);
JavaScript та HTML DOM (щоб відображати або використовувати дані).
AJAX дозволяє веб-сторінкам здійснювати асинхронне оновлення, обмінюючись даними з веб-сервером. Завдяки цій технології сторінка не потребує перезавантаження – оновлюється лише конкретна її частина (згадайте стрічку новин у соціальних мережах).
JSON (JavaScript Object Notation) – це загальний формат обміну даними. Дозволяє здійснювати обмін інформацією між програмними продуктами, котрі написані різними мовами. Таким чином, клієнт, який використовує JavaScript, може легко передавати дані на сервер, реалізований за допомогою Ruby/Java/PHP.
Всі три технології мають особливу цінність для кожного веб-розробника та розкривають організацію роботи інтернет-застосунку.
REST API
API – Application Programming Interface – це набір правил, при дотриманні яких програми можуть між собою взаємодіяти. Розробник створює API на сервері та дозволяє клієнтам звертатися до нього.
Красномовним прикладом буде API від Google Maps, котрий дозволяє веб-розробнику вказати на гугл мапі розташування певної будівлі (точку видачі інтернет-замовлень, офіс компанії абощо) на своєму сайті. Таким чином програміст позбавляє себе необхідності самому розроблювати власну мапу і користується вже готовим рішенням від Google, використовуючи набір правил від API.
REST – Representational State Transfer – це архітектурний підхід, котрий регламентує, як саме API мають виглядати. Цьому набору правил має слідувати девелопер під час створення власного застосунку. Простими словами, REST – це звичайний запит виду «клієнт-сервер» з використанням HTTP-протоколу.
Фронтенд розробнику необхідно розбиратися у REST API, оскільки ця технологія використовується усюди, де є необхідність працювати з даними від сервера.
Алгоритми та структури даних
Розуміння алгоритмів та структур даних – обов'язок будь-якого грамотного програміста.
До структур даних відносяться: стеки, черги, зв'язані списки, графи тощо. Вивчивши їх, ви зможете керувати складністю своїх програм, роблячи їх більш доступними для розуміння, а також розробляти високопродуктивні програми, які ефективно працюватимуть з пам'яттю.
Знання алгоритмів дозволить вам створювати складні конструкції для ефективного розв'язання широкого спектра завдань. Коли говорять про алгоритми, зазвичай мають на увазі алгоритми сортування та пошуку: сортування прямим включенням, прямим вибором, злиттям, пірамідальне, прямий пошук, бінарний, індексно-послідовний та інші.
Важливо розумітися і на нотації Big O, яка описує складність кожного алгоритму. Даний механізм допомагає визначити, за яких умов вигідніше використовувати той чи інший алгоритм.
Зазначимо, що як новачкові, вам не треба пірнати вглиб цих тем. Буде достатньо теоретичного володіння, розуміння, де яку структуру даних слід використати, а також уміння написати декілька алгоритмів. У розробленні сайтів це не дуже потрібно, але практично жодна співбесіда не оминає тему алгоритмів і структур даних.
Фреймворки JavaScript
Це інструменти, за допомогою яких створюються динамічні веб-/мобільні/десктопні застосунки мовою JavaScript. Вони прискорюють розроблення веб-додатків та передбачають чітко структуровану організацію коду, підвищуючи його якість та чистоту.
Найпопулярнішими фреймворками для фронтенд розроблення можна назвати Vue.js, Angular та бібліотеку React. Кожен із них призначений для вирішення свого спектру завдань і має різний ступінь складності: Vue.js – найлегший (але й з найменшою спільнотою), React – середньої складності, Angular – високої складності. Варто сконцентруватися на глибокому вивченні одного фреймворку, але в той же час дуже рекомендується знати особливості та сферу застосування всіх перерахованих вище технологій.
Який фреймворк все ж обрати? Думки щодо цього розходяться. Інструментарій вибирається індивідуально під проєкт та важко передбачити, які задачі вам потрібно буде вирішувати. На даний момент найбільшою популярністю користується React, оскільки він збалансований як з точки зору складності, так і з точки зору багатства функціоналу. До того ж найбільша кількість вакансій припадає саме на цей фреймворк, а значить, що він цікавий не тільки розробникам, а й бізнесу.
Кожен із фреймворків доступний для вивчення на платформі ITVDN. За напрямком Angular:
Angular 11.0 Базовий;
Angular Поглиблений.
За напрямком React:
React Базовий;
React Поглиблений.
За напрямком Vue.js:
Vue.js Стартовий;
Vue.js Базовий.
Інструменти керування станом програми (State Management)
Великі веб-застосунки постійно зростають у складності, а тому зберігати дані, які можуть використовуватися в різних місцях, стає все складніше. Для вирішення цієї проблеми були вигадані окремі бібліотеки, що йдуть паралельно з фреймворками — вони служать для управління глобальним сховищем даних усього веб-застосунку і називаються менеджерами станів. Їх застосування вже стало стандартом у FrontEnd розробленні. Для девелоперів, які використовують Vue.js, це VueX, для React-розробників – Redux і MobX, для Angular-девів – RxJS, NgRx.
TypeScript
Кросплатформна строго типізована мова, яка є розширенням JavaScript. Строга типізація дозволяє зменшити кількість потенційних помилок у вихідному коді, написаному на TypeScript. Також ця мова реалізує концепції, які близькі до об'єктно-орієнтованих мов, таких як C#, Java та подібних. TypeScript підвищує швидкість та зручність написання комплексних програм, внаслідок чого їх стає легше підтримувати, масштабувати та тестувати.
У вакансіях ця мова зустрічається досить часто незалежно від цільового фреймворку. При цьому для Angular розробників знання TypeScript є обов'язковим. Через високу затребуваність даної мови ми помістили її у список обов’язкових для вивчення.
Основи Figma
Figma – це популярний дизайнерський інструмент для створення інтерактивних прототипів застосунків або веб-сайтів. З його допомогою дизайнер створює дизайн, який фронтенд-розробник потім верстає за допомогою HTML/CSS і додає інтерактивність при участі JavaScript.
Знання основ фігми дозволяє девелоперу зручно взаємодіяти з дизайнерським прототипом: швидко дізнаватися необхідні розміри тих чи інших елементів, робити експорт картинок та іконок тощо. Додатковий плюс – можливість використання браузерної версії Figma.
Англійська мова
План навчання Front-end повинен обов'язково включати підтягування English. Знання англійської є однією з основних вимог до фронтенд-розробника, оскільки велика кількість корисної інформації знаходиться саме на англомовних сайтах. Рівень читання технічної документації буде достатньо для комфортного користування іноземними ресурсами (Intermediate).
Однак чим вищий рівень вашої англійської, тим більші шанси отримати job-офер. Інгліш використовується не тільки при роботі з документацією, а і при комунікації з командою та клієнтами. Серед програмістів побутує вислів: «Яку мову програмування слід вчити першою? Вчи англійську!». Тому не пошкодуйте ваш час і гарненько підтягніть англійську – цілком можливо, що саме гарне володіння нею стане вирішальним при розгляді вашої кандидатури.
Необов’язкові технології
Патерни проєктування JavaScript
Це найкращі практики, які описують типові способи вирішення поширених завдань, що виникають під час проєктування програмного забезпечення. Знання шаблонів проєктування дозволяє писати більш чистий, зрозумілий і читабельний код, а також уникати "винайдення велосипеда". Більше того, володіння патернами показує вашу грамотність як розробника і підвищує вашу цінність в очах роботодавця, що допоможе виділитися на тлі конкурентів.
Щоб ви могли добре розібратися з темою шаблонів JavaScript, рекомендуємо курс “JavaScript Шаблони”.
Лінтери
Інструменти, які дозволяють аналізувати якість JavaScript-коду відповідно до стандарту ES. Вони вбудовуються в середовище розроблення і вказують на наявність невідповідностей стандарту коду, якщо такі є. Даний механізм корисний як для одноосібного розроблення (для самоконтролю), так і для командного, коли кожен розробник повинен слідувати тим самим мовним конструкціям, аби на виході отримати єдиний, цілісний проєкт. Один із найвідоміших лінтерів – ESLint.
Це необов’язковий інструмент для роботодавця, але він дуже корисний для веб-розробників у силу його можливостей з контролю якості коду.
Тестування
Jest та Cypress– головні інструменти модульного тестування, яке покладається на плечі розробника. Але що це таке?
Unit тестування (воно ж – модульне тестування) – процес, який полягає у створенні тестів для перевірки працездатності окремих ділянок написаного програмістом коду. Виконується безпосередньо автором коду.
Яку користь приносить Unit тестування:
суттєве скорочення багів у коді;
спрощення рефакторингу коду;
забезпечення якісного відокремлення інтерфейсу від реалізації;
краще розуміння написаного коду;
можливість протестувати найдрібніші ділянки коду.
Усі інструменти вчити не треба — достатньо навчитися працювати лише з одним із них.
Webpack
Потужний збирач модулів, який дозволяє скомпілювати в один файл кілька різних модулів. Використовується для роботи над об'ємними проєктами. Успішно використовується як у фронтенд-розробці, так і при створенні бекенду.
Gulp / Grunt
Системи збирання, які автоматизують рутинні завдання розробників: мініфікацію коду, оптимізацію зображень, тестування, аналіз якості коду та інше. Підходять для розроблення невеликих проєктів.
SOLID принципи
SOLID – це принципи, які є своєрідним ременем безпеки для тих, хто працює відповідно до парадигм об'єктно-орієнтованого програмування. Вони були створені з метою убезпечити ООП-орієнтованого розробника від незрозумілого, заплутаного спагеті-коду, який також ще й дуже важко підтримувати.
SOLID - це акронім, який складається з п'яти букв, що кодують п'ять основних принципів:
S - Single Responsibility Principle (принцип єдиної відповідальності)
O - Open-Closed Principle (принцип відкритості-закритості)
L - Liskov Substitution Principle (принцип підстановки Барбари Лісков)
I - Interface Segregation Principle (принцип розділення інтерфейсу)
D - Dependency Inversion Principle (принцип інверсії залежностей)
Володіння цими принципами дозволяє грамотно проєктувати та розробляти такі програмні системи, які з великою ймовірністю зможуть тривалий час розвиватися, розширюватися та підтримуватися.
Хоча SOLID принципи написані переважно для ООП, їхні ідеї цілком застосовні і до сучасного JavaScript розроблення, що допоможе фронтенд-розробникам створювати більш чистий та лаконічний код.
Зарплати FrontEnd розробників
Звернемося до статистики, опублікованої на сторінці української IT-спільноти DOU, а саме – до зарплатної аналітики українських розробників за літо 2023 року. Медіанна зарплата всіх українських розробників, які взяли участь в опитуванні (а їх 6605), наступна:
Intern Software Engineer – 450 USD;
Junior Software Engineer – 1000 USD;
Middle Software Engineer – 2600 USD;
Senior Software Engineer – 4900 USD.
Тепер поглянемо на медіанну ЗП FrontEnd розробників:
Junior – 950 USD;
Middle – 2500 USD;
Senior – 4750 USD.
Виходить, медіана фронтендників на всіх тайтлах трохи менша, ніж загальна медіана, проте розрив досить невеликий.
Погляньмо, скільки заробляє цей фахівець за межами України. У цьому нам допоможуть результати опитування Stack Overflow Developer Survey 2023 (понад 90 000 респондентів із США, Індії, Німеччини, Канади, Великої Британії та інших країн). Ця цифра – 59 970 USD на рік (приблизно 5000 USD на місяць).
При цьому буде важливо сказати, що фронтендники з даного опитування мають у середньому 8 років професійного кодингу – і це один із найнижчих показників. Нижче за них розташовуються лише Data Scientist / ML Specialist – 7.9 років досвіду, а також студенти, які мають трохи більше 2.8 років досвіду у професійному створенні коду.
Підсумки
FrontEnd розробник – досить універсальний боєць у світі веб-розроблення. Він повинен вміти і верстати, і створювати логіку роботи клієнтської частини, і розуміти роботу серверної частини веб-застосунку. Для опанування такого великого інструментарію варто запастися часом, терпінням та завзятістю. Зазначені у статті засоби розроблення сайтів також мають аналоги, оскільки для вирішення різних завдань підходять різні веб-інструменти. Однак ми вибрали найпопулярніші та найефективніші з них.
Якщо у вас є бажання опановувати цю професію і ви хочете самостійно “помацати”, чим займається фронтенд розробник, на ITVDN створено комплексну програму навчання у форматі відео навчання, яка включає 44 відео курси. Аби отримати доступ до всіх відео курсів на ITVDN терміном на 12 місяців з можливістю скачувати на ваш пристрій відео матеріали (що дуже актуально під час блекаутів), радимо розглянути пакет підписки «Преміум Plus».
Якщо ж вам більше до вподоби живе онлайн навчання з тренером та у групі з іншими учнями, пропонуємо формат Live Online для вивчення спеціальності FrontEnd (Angular або React напрямки).
Бажаємо вам успіхів у досягненні ваших цілей!
Залишайтеся з ITVDN!
Яку ІТ-спеціальність обрати у 2023 році?
Автор: Влад Сверчков
Коротко про українське ІТ в 2022 році.
Український ІТ-спеціаліст у 2022 році.
Аналітичні огляди сучасного ІТ.
Які ІТ-спеціальності будуть затребувані у 2023 році?
Кому потрібне гарне володіння англійською мовою?
Висновки.
Вітаємо наших читачів!
Українське ІТ демонструє чудові міцність та адаптивність навіть в умовах повномасштабної війни. Так, багатьом айтішникам довелося здійснити вимушене переселення в інші регіони країни, ба навіть інші держави, аби знаходитися у відносній безпеці. Однак більшість зберегла за собою роботу і доходи, які дозволяють не тільки забезпечувати себе та свої родини необхідними умовами та засобами для життя, але ще й активно донатити на армію та різноманітні волонтерські проєкти – середній донат станом на червень 2022 року становив $270 на місяць (відповідно до результатів опитування на DOU).
Стабільність та гарні умови праці, можливість віддаленої роботи з будь-якої точки світу, де є інтернет, велика кількість ІТ-напрямків на вибір – ці та інші особливості стали вельми затребуваними у багатьох українців. З’явилася велика кількість бажаючих спробувати свої сили в ІТ, і піднялися одні з найголовніших питань: “З чого почати? Яку ІТ спеціальність обрати у 2023 році?”.
А й дійсно – як грамотно оцінити ситуацію на ринку ІТ та обрати собі спеціальність, яка:
буде подобатися;
матиме гарні кар’єрні перспективи;
буде забезпечувати задовільні умови праці та ЗП?
Будемо розбиратися з цим у даній статті. Ми розглянемо найголовніші спеціальності, які будуть оптимальними для новачків та матимуть попит на ринку ІТ ще довгий час.
Коротко про українське ІТ в 2022 році
Не встиг світ оговтатися від кризи, спричиненої коронавірусом, як одразу з’явилася нова внаслідок повномасштабного вторгнення росії на територію України.
Відповідно до аналітики Opendatabot – українського ресурсу, що надає доступ до державних даних та аналізує відкриті дані, – ІТ-послуги стали єдиним напрямком бізнесу, який показав приріст у 2022 році в порівнянні з 2021 – аж на 27% (січень-травень 2022). А друге дослідження показує, що за 8 місяців даного року відбулося зростання експорту ІТ-послуг на 16% у порівнянні з відповідним періодом у 2021 році. У серпні 48% усіх послуг, що експортувалися Україною, належали саме ІТ-галузі.
Красномовною є і статистика Джину – українського ресурсу з анонімного пошуку вакансій.
Попит на Djinni перевищує кількість пропозицій майже втричі. У вересні – 18 779 відкритих вакансій і 52 405 кандидатів.
З посту в телеграм-каналі Джину легко бачити, що у серпні 2022 було понад 250 тисяч відгуків на вакансії – це при тому, що з серпня 2021 по лютий 2022 кількість відгуків кожного місяця коливалася в межах від 77 до майже 111 тисяч.
Ще один серпневий пост демонструє залежність середньої кількості відгуків на вакансію від вимоги до досвіду кандидата. Таким чином:
кандидати без досвіду – 75.25 відгуків на вакансію;
1 рік досвіду – 31.36 відгуків;
2 роки – 12.39;
3 роки – 5.76;
5 років – 4.1.
У новачків сезон справжніх “голодних ігор”.
Тим не менш, ІТ-сектор демонструє гарну стійкість та позитивну динаміку попри негаразди війни. Це перспективна галузь, яка не тільки дає масу переваг українцям-айтішникам, але й гарно підживлює економіку.
Варто не забувати, що така успішність багато в чому залежить від закордонних замовників, адже переважна більшість українських ІТ-продуктів та ІТ-послуг експортуються за кордон – приблизно 95% (за матеріалами “Економічної правди”).
Український ІТ-спеціаліст у 2022 році
Звернемося також і до свіжого портрету українського ІТ-спеціаліста від DOU за 2022 рік (15 135 респондентів).
Найбільша кількість чоловіків відповідно до напрямків:
DevOps, SRE (97.3%);
системне адміністрування (95.8%);
CTO, найвищі керівні посади (92.9%);
розроблення ПЗ, Software Engineering (91.3%);
розроблення ігор (89.5%);
Data Science (80.3%);
технічна служба підтримки (70%);
тестування (65.8%);
менеджерські посади (64.9%).
Найбільша кількість жінок у HR/Recruiting (90%), маркетингу (64%) та технічному письменництві (62%). За ними йдуть дизайн (45.6%), сфера продажів (44%) та аналітика (42.5%).
Відповідно до картинки вище, найбільша кількість опитаних українських айтішників працює у якості розробників. Далі йде професія тестувальника, менеджера, HR/рекрутера і т. д.
З картинки вище видно, що найчастіше респонденти мають тайтл Middle (1-5 років досвіду) та Senior (3-9 років). Розробники рівня Junior складають 16.2% (до 2-х років досвіду), а інтерни – всього 1.3% (без досвіду).
Найбільша кількість початківців (Junior та Intern) серед:
HTML Coder (45%);
Data Science (27%);
Game Developers (25%);
аналітики (24%);
тестувальники (23%).
При цьому ІТ України нараховує багато початківців. 6% опитаних знаходяться в ІТ менше року, 59% працевлаштовані в ІТ 5 років або менше, а 71% мають до 6-ти років досвіду за своєю поточною спеціалізацією.
87% респондентів мають вищу освіту, а 8% з них – навіть дві. Ще 5% є студентами і тільки на шляху до отримання диплому. Науковим ступенем володіє близько 2% опитаних. Найчастіше це ті, хто розробляє ПЗ під різну електроніку (Hardware Engineers – 9%), Data Science спеціалісти (7%) і представники найвищих керівних посад – CTO/CEO (6%).
Щодо англійської: в цьому році 53% респондентів оцінили свій рівень як Upper Intermediate (вище середнього) або Advanced (поглиблений). 33% визначають свій рівень як Intermediate (середній).
На зображенні бачимо, що найбільш цікава робота у керівників найвищої ланки (а хто б сумнівався?), спеціалістів у сфері маркетингу та HR/рекрутерів (критерії “цікава” та “дуже цікава”).
Найбільш невдоволеними виявилися сисадміни, Support та спеціалісти з продажів. Фахівці перших двох напрямків спеціалізуються на вирішенні технічних проблем, тому часті смикання під час роботи, необхідність швидко все полагодити та афілійовані із цими процесами стреси для них не є рідкістю. Ще можна додати відносно невисоку медіанну ЗП – $1000-$1045 – трохи вища за Junior розробника. А невдоволення спеціалістів із продажів можна пов’язати з великою відповідальністю і наслідками частого спілкування з різними клієнтами: Sales Manager-и повинні завжди демонструвати впевненість, знати все про свою компанію та свій продукт, діяти так, аби не заплямувати їх імідж, швидко знаходити відповіді на запитання клієнтів та виконувати інші професійні обов’язки.
Аналітичні огляди сучасного ІТ
Скористаємося аналітикою всесвітньовідомого ресурсу Stack Overflow, яким користується абсолютно кожний програміст сучасності. Порівняємо останні на сьогоднішній день опитування, проведені даним ресурсом – Stack Overflow Developer Survey 2022 (70 000 респондентів) та Stack Overflow Developer Survey 2021 (80 000 респондентів). В опитуваннях брали участь фахівці із різних куточків світу.
З ілюстрації вище видно, що найпопулярнішими напрямками, в яких працюють ІТ-спеціалісти, є:
Електронна комерція – інтернет-магазини, фінансові та торгові угоди і транзакції, проведені через інтернет тощо.
Фінансові технології – оптимізація та вдосконалення фінансових послуг, які надає той чи інший бізнес, компанія, корпорація і т. д.
Розроблення мобільних додатків під Android та iOS.
Медіа сфера.
Медичні технології – поліпшення якості та безпеки медичних послуг різноманітного характеру.
Розроблення ігор під різноманітні платформи.
Далі йдуть напрямки, що цьогоріч не перетнули 5-відсотковий бар’єр.
Із зображення вище бачимо, що найбільша кількість спеціалістів належить до наступних ІТ-напрямків:
FullStack – розроблення серверної + клієнтської частини вебдодатків;
BackEnd – серверна сторона вебдодатків;
FrontEnd – клієнтська частина вебдодатків;
Desktop or enterprise – розроблення настільних додатків (Desktop-додатків), розроблення додатків для потреб бізнесу (Enterprise).
На наступних сходинках йдуть:
розробники мобільних додатків – як для Android, так і для iOS;
DevOps спеціалісти – синхронізують всі етапи розроблення ПЗ: від створення коду до тестування та релізу;
інженери з хмарних технологій – займаються хмарною (cloud) інфраструктурою;
адміністратори баз даних;
системні адміністратори.
Переглянемо перші позиції цього ж рейтингу, але за 2021 рік.
Спостерігаємо аналогічну картину: перші позиції зайняті напрямками FullStack, BackEnd, FrontEnd, Desktop, Enterprise, Mobile Development, DevOps.
Звернемося і до рейтингів мов програмування. Опитування Stack Overflow 2022:
Опитування Stack Overflow 2021:
Перше місце в обох рейтингах займає мова програмування JavaScript, яка широко застосовується у web девелопменті (і у FrontEnd, і в BackEnd царинах). Далі йдуть мови верстання – HTML & CSS – інструменти, які застосовуються під час створення візуальної складової вебсайтів та вебдодатків (FrontEnd). На третє місце цьогоріч потрапляє SQL – мова запитів для роботи з реляційними базами даних (БД), яку обов’язково використовують розробники серверної частини вебдодатків, адміністратори БД та інші спеціалісти.
Python, Java та C# – дуже затребувані серед роботодавців та популярні серед розробників мови програмування, які вирізняються широким спектром застосування, зрозумілістю синтаксису, відносною простотою. Вони потрапляють у кожен ТОП-10 різноманітних мовних опитувань вже протягом багатьох років; їхня перспективність та актуальність обіцяє утримуватися ще довгий час. Особливою популярністю користується Python, оскільки його синтаксис максимально простий та лаконічний.
TypeScript – це та сама JavaScript, тільки з декількома нововведеннями та строгою типізацією для збільшення читаності коду і зменшення кількості ймовірних помилок. Використовується у веброзробці разом із відповідними фреймворками та платформами.
Node.js – платформа, яка розширює можливості та область застосування JavaScript (бекенд, настільні додатки, мікроконтролери).
Bash/Shell/PowerShell – інструменти, які найчастіше стають у нагоді системним адміністраторам та DevOps інженерам, бо дозволяють автоматизувати різноманітні рутинні процеси, завдяки чому вони і отримали високі позиції в рейтингу.
C/C++ – це сучасні корифеї від світу ІТ-розроблення. Непрості у вивченні мови, які при цьому мають дуже великі можливості та потужності. Незамінні під час створення ресурсоємного ПЗ, ігор, мікроконтролерів тощо.
PHP – класична мова серверного розроблення. Незважаючи на її вік, досі популярна та затребувана.
Розглянемо також і рейтинг мов відповідно до індексу TIOBE. Він щомісячно оцінює популярність мов програмування та вважається респектабельним джерелом – маса аналітиків посилається на нього в ході своїх досліджень.
Рейтинг TIOBE відрізняється від опитування Stack Overflow – це пов’язано з різницею опорних точок цих аналітик. Стек оверфлоу спирається на опитування, а статистика TIOBE ґрунтується на кількості кваліфікованих інженерів у всьому світі, а також на кількості курсів та сторонніх постачальників. Такі відомі пошукові рушіїі та сервіси, як Google, Yahoo!, Wikipedia, Amazon, Bing, YouTube та Baidu використовуються у розрахуванні рейтингів. Варто зазначити, що TIOBE не вказує, яка мова є найкращою, або якою написано найбільшу кількість коду. Він може бути використаний, аби виявити, чи відповідають ваші навички запитам сучасності, або, щоб прийняти стратегічне рішення щодо того, яку мову слід використати для створення нового додатку або програмної системи. Більше інформації стосовно методів визначення індексу за посиланням.
Рейтинг мов відповідно до індексу PYPL має наступний вигляд:
PYPL створений за рахунок аналізу того, наскільки часто люди шукають в пошуковій системі Google туторіали (інструкції) з мов програмування. Простіше кажучи, чим більше гуглять туторіали до тієї чи іншої мови, тим вища її позиція в рейтингу.
Розглянемо список популярних вебтехнологій відповідно до опитування Stack Overflow за 2022-й та 2021-й роки відповідно:
Як видно з діаграм, головні позиції належать FrontEnd бібліотекам та фреймворкам – jQuery, React.js, Vue.js, Angular, BackEnd-технологіям (Node.js, Express) а також технологіям .NET платформи – ASP.NET та ASP.NET Core. Після них йдуть фреймворки Django і Flask (Python).
Список інших фреймворків, бібліотек та інструментів розроблення:
Наразі перше місце посідає платформа .NET від компанії Майкрософт. Потім йдуть технології напрямку Python: NumPy (дає доступ до низки математичних конструкцій), Pandas (маніпулювання даними та їх аналіз). За ними – фреймворк Spring (Java), який призначений для веброзроблення. Менш популярними є інструменти Python для роботи з даними та ML – TensorFlow, Scikit-learn, а також платформи для мобільного розроблення – Flutter та React Native.
Отримані відомості вже дають достатньо уявлення про те, що зараз відбувається на ринку IT-послуг і дозволяють робити певні прогнози щодо затребуваності IT-професій.
Які ІТ-спеціальності будуть затребувані у 2023 році?
FrontEnd Developer
FrontEnd – це відгалуження у розробленні, спрямоване на створення клієнтської сторони вебдодатків, вебсайтів або іншого ПЗ та інформаційних систем: зовнішній вигляд застосунків, користувацька логіка, анімації – все, із чим користувач може взаємодіяти напряму.
Коли кажуть про FrontEnd або BackEnd, найчастіше мають на увазі саме Web стихію. Насправді ж, фронтенд і бекенд бувають не лише у вебі але й у десктопних та мобільних застосунках. Однак історично склалося, що під цими двома термінами розуміють саме веб складову, тому і в цій статті ми будемо притримуватися цих традицій.
Відповідно до аналізу Stack Overflow Developer Survey 2022 та 2021 років, а також аналізу індексів TIOBE та PYPL, ядро фронтенду – HTML, CSS та JavaScript – досі є затребуваним і використовується багатьма розробниками.
Крім того, ресурси з пошуку роботи в ІТ містять велику кількість вакансій FrontEnd Developer. Наприклад, на вже згаданому Djinni на момент написання статті було опубліковано 1399 пропозицій за напрямком JavaScript / FrontEnd, тоді як на C# / .NET, Java та Python спеціальності припадало 678, 884 та 514 вакансій відповідно.
ІТ-індустрія має великий попит на FrontEnd розробників, тому немає жодних сумнівів, що цей напрямок буде актуальним і у 2023-му році.
BackEnd Developer (Python, Java, C#, PHP)
BackEnd – це відгалуження у розробленні, спрямоване на створення серверної сторони вебдодатків або вебсайтів: взаємодія застосунку з БД, робота з даними користувача, серверна та обчислювальна логіка, програмно-апаратна частина сервісу – все, що приховано від користувача і знаходиться “під капотом”.
На озброєнні BackEnd девелопер тримає одну з популярних мов програмування: C# / PHP / Python / Java / JavaScript (Node.js) / Ruby тощо. Також даний спеціаліст знає безліч супутніх технологій та інструментів серверного розроблення.
BackEnd розвивається паралельно з FrontEnd-ом, айті-ринок має багато відповідних пропозицій з гарними умовами праці, тому перспективність вивчення даного напрямку є очевидною.
Full Stack Developer
Синтез двох вищеописаних спеціальностей. Не секрет, що будь-який працедавець цінує співробітника, який може успішно виконувати декілька задач, поєднуючи в собі обов’язки інших спеціалістів. Так само і в ІТ – особливо цінними є розробники, які здатні своїми знаннями та навичками покрити декілька професій, а в даному випадку – FrontEnd та BackEnd.
Детальний розбір спеціальності Full Stack Developer ви знайдете в нашій статті. В ній ми пояснюємо специфіку даного напрямку, необхідні для вивчення технології, переваги та недоліки професії, а також даємо важливі поради щодо опанування цього фаху.
Mobile Developer (Android / iOS)
Мобільне розроблення є відносно молодим, оскільки зародилося трохи більше двох десятків років тому. За цей час воно зазнало багатьох змін і сьогодні очолює одну з головних позицій в ІТ. При цьому напрацюваннями фахівців цієї сфери користується майже кожна людина — це не лише смартфони та планшети, а й фітнес-браслети, смарт годинники, електронні книги, складові “інтернету речей” та інші гаджети.
Найбільш популярні мови мобільного розроблення: Java / Kotlin під Android розроблення та Objective-C / Swift під iOS.
DevOps інженер
DevOps – це методологія, котра є симбіозом розроблення (Development) та системного адміністрування (Operations). Її головна мета – збільшення частоти випуску релізів. Фахівці даного напрямку також повинні розбиратися у використанні хмарних технологій та мати навички автоматизації інфраструктури.
DevOps Engineers обирають Python у якості основної мови програмування за її лаконічність, багатозадачність та підтримку великого різноманіття спеціальних пакетів, створених для підвищення ефективності цієї мови програмування, а також за інші переваги. Python в основному використовують разом із командною оболонкою Bash, маючи на меті спростити процеси розгортання ПЗ та автоматизувати різні завдання системного адміністрування (написання скриптів).
Фактично, DevOps спеціалісти – це програмісти-сисадміни. Бізнес дуже любить фахівців-мультитулів, тому ця професія дуже актуальна, престижна та є однією з найбільш високооплачуваних в ІТ.
CyberSecurity
IT-індустрія нарощує свої об’єми та потужності, а отже, зростає затребуваність і тих, хто має її захищати. На це і направлена діяльність фахівця з кібербезпеки. Цей напрямок має декілька відгалужень, і ви можете як захищати інфраструктуру від проникнення та вибудовувати надійну оборону (напрямок "захисту"), так і виявляти вразливості шляхом різноманітних хакерських методів – такі фахівці називаються пентестерами (напрямок "атаки").
Можете зануритися в аналіз та ризики (посада Security Analyst та Risk Compliance Specialist відповідно), займатися захистом інфраструктури та пошуком комп'ютерних вірусів (Malware Researcher), а також випробувати себе в багатьох інших «кібербезпекових» спеціальностях – ця сфера дає багато можливостей для реалізації людям із сильними аналітичними здібностями, уважністю, розсудливістю та стресостійкістю.
Database Administrator, DBA
Комфортна життєдіяльність у сучасному світі дуже залежить від баз даних: картотека пацієнтів лікарні, облік студентів та їх успішності, облікові записи користувачів різних сервісів, банківські рахунки, різноманітний контент в інтернеті тощо. Існує реальна потреба у спеціалістах, які вміють грамотно обслуговувати ці БД і супутню інфраструктуру.
Крім цього DBA бере на себе такі функції, як вироблення вимог до баз даних, їх проєктування, реалізація, ефективне використання та підтримка цілісності БД, включаючи керування обліковими записами користувачів БД та захист від несанкціонованого доступу.
Тут важливо володіти мовою запитів SQL, однією із СУБД (PostgreSQL, наприклад), а також різними технологіями та прийомами системного адміністрування.
PM (Project Manager)
Сучасне IT має гострий дефіцит гарних, талановитих проєктних менеджерів – управлінців, котрі керують IT-проєктом загалом. Часто це колишні програмісти чи тестувальники. Однак щоб стати проджект менеджером, необов'язково мати айтішне минуле.
Ключові обов’язки PM: проєктування та розстановка пріоритетів, планування виконання завдань, контроль, комунікації, а також оперативне вирішення проблем всередині проєкту. Найголовніше завдання – зробити так, щоб ідея замовника була реалізована в межах заданих термінів з урахуванням обмеженості ресурсів.
Звичайно, даний перелік обов'язків виконаний широкими мазками. Насправді PM-и часто працюють понаднормово і їхній робочий стан можна описати як "білка в колесі". Але важко щось протиставити післясмаку успішно виконаного проєкту.
Нюанс цієї професії полягає в тому, що посада PM-а передбачає значну конкуренцію. Відповідно до даних, у вересні 2022-го року на сайті DOU на одну вакансію PM-а відгукнулося більше 34-х кандидатів (всього 184 вакансії). Більша кількість відгуків лише у FrontEnd, HR, QA та Legal (право). Тому, щоб отримати бажаний job-офер, необхідно мати не тільки досвід і знання, а й гарні організаторські здібності, а також інші важливі для цієї професії особистісні якості.
QA Engineer, тестувальник
Фахівець із забезпечення якості, він же – тестувальник. І хоча QA та тестувальник – це трішки не одне і те ж саме, але ми прирівняємо їх один до одного, бо це не грає значної ролі в даній статті.
Сфера відповідальності тестувальника – виявлення несправностей, багів ПЗ, допущених розробниками. Затребуваність цих фахівців важко оскаржити, адже кожний програмний продукт перед появою може пройти не одну ітерацію тестування, де виявляється вагома кількість багів. Виходить, без QA ми мали б дуже недопрацьоване ПЗ, а виробник — провал продукту на ринку, падіння репутації та, ймовірно, навіть банкротство.
Тестувальників ділять на два види – Manual QA Engineer та Automation QA Engineer. Перші виконують всю роботу вручну, а другі використовують інструменти автоматизації, у тому числі мови програмування (наприклад Java, Python), що підвищує цінність такого співробітника, і, відповідно, його зарплату. Конкуренція за місце тестувальника в українських реаліях надзвичайно висока, тому для отримання першого job-оферу потрібно буде докласти багато зусиль.
Data Scientist
Вчений-експерт, головними завданнями якого є вилучення з великого масиву даних корисної інформації, яка потім може використовуватися в різних сферах; в основному, це бізнес та наука.
Даний фахівець повинен мати чудове аналітичне мислення, володіти математичним апаратом (включаючи мат. статистику та мат. моделювання), знати програмування (Python, R) та бази даних (як реляційні, так і нереляційні). З початку 2010-х років професія Data Scientist вважається однією з найбільш привабливих, високооплачуваних та перспективних в IT.
Data Analyst
Якщо Data Scientist орієнтується на предиктивну аналітику, то Data Analyst працює з інформацією постфактум. У цього спеціаліста менш технічна роль — він працює зі вже готовими даними, а саме: проводить дескриптивний аналіз, інтерпретує та візуалізує результати, а також презентує звіт своїм замовникам.
При цьому з БД, мовами Python і SQL та іншими інструментами збору та оброблення інформації аналітик також має бути гарно знайомий, аби ефективно виконувати покладені на нього задачі.
Кому потрібне гарне володіння англійською мовою?
Відповідно до вже згаданого портрета ІТ-спеціаліста, високий рівень англійської у тих, хто спілкується з іноземними замовниками та клієнтами або займається просуванням продуктів: Customer Success Manager, Project Manager, найвища ланка керівництва, спеціалісти з продажів, архітектори, техліди.
Також англійська на рівні Upper Intermediate+ у технічних письменників та спеціалістів з роботи з даними (Data Scientists, аналітики).
Розробникам буде достатньо рівня Intermediate, аби читати технічну документацію без зайвих проблем. Однак бажано мати Upper Intermediate та вище, оскільки це не тільки сприяє більш комфортній взаємодії з англомовними ресурсами та іноземними колегами, але й підштовхує вас вгору кар’єрними сходами і, звичайно ж, позитивно впливає на ЗП (відповідно до зарплатного опитування від DOU за літо 2022 року).
Висновки
У цій статті ми постаралися дати вичерпну відповідь на запитання: “Яку IT-спеціальність варто обрати у 2023 році?”. У наших судженнях та висновках ми спиралися на такі авторитетні ресурси (міжнародні та українські), як Stack Overflow, Djinni, DOU, індекси TIOBE та PYPL. Також була проведена кореляція з минулим роком, аби продемонструвати стабільність ринку ІТ-професій та показати, що вкладені вами сили та час у навчання не будуть марними, а обраний вами напрямок нікуди не зникне.
На лідерських позиціях, як і в минулі роки, залишаються Web, Enterprise та Mobile розроблення. Тестувальники також затребувані, хоча і мають надзвичайно велику конкуренцію серед початківців, оскільки це один із найлегших способів потрапити в ІТ, а з початком повномасштабного вторгнення інтерес до ІТ зріс так само стрімко, як і під час ковіду.
Висока затребуваність також і у DevOps інженерів при відносно невисокій конкуренції – 3.7 відгуки на одну вакансію у вересні 2022 року (всього вакансій – 243, джерело).
Звичайно, повномасштабна війна наклала свій відбиток на ІТ у вигляді міграції бізнесів та айтішників на захід України, різкого притоку новачків, збільшення “дистанційних” вакансій та проблем з електроенергією через обстріли росіянами нашої енергетичної інфраструктури, але зарплати залишилися високими – десь навіть підвищилися, – та й в цілому ІТ стоїть і забезпечує як айтішників, так і нашу армію.
То ж навіщо чекати відповідного моменту? Беріть момент та робіть його відповідним! ITVDN – це освітня платформа для онлайн навчання програмуванню та інформаційним технологіям.
Наш портал налічує понад 230 відео курсів та має власні програми навчання за 15 найпопулярнішими IT-професіями, серед яких:
Верстальник сайтів
FrontEnd Developer
Java Developer
Python Developer
C# / .NET Developer
Android Developer
Unity / Game Developer
PHP Developer
та інші.
Формат навчання – записані відео курси, за якими можна навчатися у будь-який зручний час. Таким чином, ви зможете опанувати IT-професію, не виходячи з дому. З усіма спеціальностями можна детально ознайомитись, перейшовши на сторінку спеціальностей ITVDN.
Окрім записаних відео курсів наша освітня платформа надає навчання у новому форматі – Live Online. Він передбачає регулярні онлайн заняття з ментором у невеликих групах із 6-25 осіб, на яких пояснюється новий матеріал, обговорюються нюанси виконання практичних завдань, є перевірка ДЗ та чат для спілкування з одногрупниками, а також доступ до відео курсів ITVDN. У процесі навчання учні також розробляють власний курсовий проєкт, який наприкінці захищають та додають до свого портфоліо.
На даний момент Live Online навчання проводиться за чотирма найпопулярнішими IT-спеціальностями:
C#/.NET Developer
Frontend Developer
Java Developer
Python Developer
Якщо вас зацікавив формат Live Online, переходьте за посиланнями та ознайомтеся з подробицями пропозицій щодо кожної з чотирьох спеціальностей.
Також пропонуємо вашій увазі підбірку вебінарів, які допоможуть вам розібратися в головних моментах тієї чи іншої мови програмування або спеціальності:
Чи варто вчити Ruby у 2023 році?
Як стати Java розробником у 2023 році?
Яку мову програмування вчити в 2023 році?
Огляд корисних ресурсів для вивчення C# та .NET з нуля
Як швидко вивчити Python. Покроковий план з нуля
Як стати PHP розробником та отримати офер від ІТ-компанії
Старт кар’єри в Java розробці. Особистий досвід, актуальні тренди та підводні камені
Що таке DevOps
та інші корисні вебінари – у нашому каталозі.
Сподіваємось, що наша стаття була корисною для вас.З радістю приймемо будь-які побажання та з розумінням і повагою – будь-які зауваження. Обирайте IT-професію вашої мрії та нехай ніщо не зупиняє вас на шляху до неї!
Вивчайте ІТ-спеціальності на ITVDN!
Вебінари Артема Мураховського з програмування на Python
Автор: Редакция ITVDN
Коли людина робить те, що вона любить, що вона сама обрала як свою справу, вона надихає інших жити і творити.
Таким був Артем Мураховський. Він працював Python розробником, у вечірній час проводив курси по пайтон у CyberBionic Systematics і провів декілька класних вебінарів на ITVDN.
На жаль, Артем загинув у березні цього року в боях під Авдіівкою, захищаючи Україну. На згадку про нього ми підготували добірку його вебінарів. Дивіться. Тут він живий. Слава герою!
Чи варто вчити Python?
Python – вельми популярна мова програмування, яка широко використовується у різних напрямках ІТ-розробки: серверна веб-розробка, десктопні та мобільні додатки, ігри, Data Science, ML, тестування ПЗ, спрощення адміністрування ОС тощо.
На вебінарі ви дізнаєтеся, хто такий Python розробник і що він робить, які знання, вміння та навички йому потрібні, з чого розпочати та як спланувати своє навчання за даним фахом, а також отримаєте корисні поради і підбірку літератури.
Прогноз погоди мовою Python
Інтенсивний тренінг зі створення Telegram-бота, який сповіщує вас про актуальну погоду. Мінімум теорії, максимум практики – підійде як новачкам, які не знайомі з програмуванням, так і розробникам-початківцям, що прагнуть випробувати себе.
Ви познайомитеся з базовим синтаксисом Python, навчитеся працювати із запитами, дізнаєтесь, що таке API і скористаєтесь Telegram API, створите бота для Telegram і навчитеся використовувати існуючі сервіси для прив'язки до вашого додатку.
BlackJack мовою Python
Інтенсивний тренінг зі створення карткової гри BlackJack для новачків та розробників-початківців. Ви навчитеся:
Писати просту програму на Python, повторюючи діі тренера.
Розбивати задачі на дрібні підзадачі і успішно їх вирішувати.
Проектувати архітектуру програми.
Писати програми на рівні класів.
Вирішувати алгоритмічні задачі.
Розуміти призначення патернів проектування.
Автоматизація парсингу сайтів
Інформація – це нафта 21-го століття. На вебінарі ми розглянемо один із найпоширеніших підходів збору та обробки інформації – парсинг сайтів (мовою Python).
Ми візьмемо один із популярних сайтів із робочими вакансіями і на його прикладі розберемо бібліотеки для парсингу веб-сайтів, бібліотеки для роботи із запитами. Розберемо види популярних баз даних і зрозуміємо, де і яку потрібно використовувати.
ТОП-10 найкращих відео з Python
Автор: Влад Сверчков
Вітаємо!
Друзі, цього разу ми підготували для вас підбірку найкращих вебінарів від ITVDN за напрямком Python. До рейтингу увійшли як пізнавальні вебінари з актуальною інформацією, так і вебінари, орієнтовані на прокачування ваших навичок створення коду. Давайте приступимо до їх розгляду.
Пишемо API додаток на Python за допомогою FastAPI та Docker
Автор – Антон Козаченко, Python Back-end Developer з Латвії
На вебінарі автор розбирає приклад написання API додатку на Python за допомогою фреймворку FastAPI та інструменту Docker. Розглядається фреймворк FastAPI, також створюється декілька методів API. Автор розглядає Docker, пише свою конфігурацію та запускає контейнери. Додатково відбувається покриття API додатку тестами.
План вебінару:
Ознайомлення із фреймворком FastAPI.
Написання кількох endpoint-ів API.
Написання тестів для цих endpoint-ів.
Написання конфігурації для Docker.
Запуск додатку в Docker containers.
Запуск тестів.
2. Підготовка до технічної співбесіди з Python ➤ Як пройти співбесіду на Junior Python?
Авторка – Людмила Міщенко, Python розробниця
Вебінар присвячений ключовим моментам технічної співбесіди на позицію Junior Python Developer. Розглядаються найчастіші питання, логічні та технічні завдання. Ви дізнаєтесь, як правильно готуватися до співбесіди. Приділено увагу тому, як отримати користь від проходження технічного інтерв'ю та як залишити приємне враження про себе у спеціалістів компанії. Також автор порушує теми важливості роботи над помилками та аналізу співбесіди.
План вебінару:
Як готуватися до технічної співбесіди?
На які запитання має знати відповідь Junior Python Developer?
На що у відповідях кандидатів найбільше звертають увагу?
Чи потрібні (і яку роль грають) pet-projects для фахівця-початківця?
Як не розгубитися під час кодингу на співбесіді? (+ поради та лайфхаки)
Робота над помилками та аналіз фідбеку після співбесіди.
3. Що краще: Django, Flask чи FastAPI? Огляд фреймворків для веб-розроблення на Python.
Автор – Максим Кузнєцов, Senior Python Developer
В даному вебінарі розглядаються декілька популярних веб-фреймворків на Python (Django, Flask, FastAPI). Автор порівнює їхню продуктивність і пояснює, для яких цілей який фреймворк більше підійде.
План вебінару:
Огляд Django та його фічі.
Огляд Flask та його фічі.
Огляд FastAPI та його фічі.
Порівняння продуктивності.
Коли який фреймворк вигідно застосовувати.
Відповіді на питання.
Даний вебінар буде цікавий Python розробникам-початківцям, і тим, хто збирається перейти на Python і хоче спланувати своє навчання з урахуванням особливостей різних інструментів.
4. Створення гри BlackJack на Python з нуля (Частина 1 та Частина 2)
Автор – Артем Мураховський, Python Developer, тренер-консультант CyberBionic Systematics
"Створення гри BlackJack на Python" – це дводенний інтенсивний тренінг зі створення відомої карткової гри. Вебінар покликаний у захоплюючій формі познайомити новачків з Python та попрактикуватися у написанні коду цією мовою. Мінімум теорії та максимум практики – що ще потрібно для швидкого старту в програмуванні?
Чому можна навчитися, вивчивши відео матеріали тренінгу та випробувавши отримані знання на практиці:
Писати просту програму мовою Python
Розбивати завдання на дрібні підзадачі та успішно їх вирішувати
Проєктувати архітектуру програм
Писати програми на рівні класів
Розв'язувати алгоритмічні задачі
Розуміти призначення патернів проєктування
План першого відео (першої частини):
Знайомство із середовищем розроблення PyCharm та мовою програмування Python.
Розбір основних елементів мови.
Створення архітектури програми на рівні класів.
Поліпшення архітектури з використанням патернів.
Створення перших об'єктів.
План другого відео (другої частини):
Створення структури проєкту.
Наслідування та композиція.
Створення спеціальних типів даних.
Зв'язок компонентів між собою.
Тестування.
Підбиття підсумків.
5. Об'єктно-орієнтоване програмування в Python ➤ Що таке ООП та як воно працює.
Автор – Бондаренко Кирило, Data Scientist / Python Developer, "CreatorIQ"
Об'єктно-орієнтоване програмування (ООП) – дуже важлива парадигма у сучасному програмуванні. Цей вебінар розкриває основні принципи ООП і показує, як вони реалізовані у мові Python.
Наскільки важливим є знання ООП для Python розробника? Як часто доводиться використовувати ООП у роботі? У яких проєктах, у яких завданнях? Чи візьмуть вас працювати без знання ООП? Ці та інші питання будуть поставлені в даному вебінарі.
Теми, що розкриваються:
Що таке ООП і як це працює у Python.
Приклади розв'язання задач через ООП.
Підбиття підсумків. Відповіді на питання.
6. Створення чат-бота "прогноз погоди" на Python
Автор – Артем Мураховський, Python Developer, тренер-консультант CyberBionic Systematics
Якщо ви хочете випробувати свої сили в програмуванні на Python і створити власного Telegram-бота, який сповіщатиме вас про актуальну погоду, цей відеоролик буде дуже доречним.
Підійде як новачкам, які ніколи не програмували, так і розробникам-початківцям, які бажають поглибити і застосувати на практиці свої знання Python.
План:
Рівні моделі мережі Інтернет.
Що таке бібліотеки на Python.
Що таке API.
Telegram API.
Бібліотеки для Telegram API.
Робота з чистим API.
Чого ви навчитеся:
Реалізовувати нескладну програму мовою Python, яка прогнозуватиме погоду.
Основам базового синтаксису мови Python.
Теоретичним основам API – зрозумієте, як він працює.
Працювати із запитами.
Створювати роботів для месенджеру Telegram.
Використовувати існуючі сервіси для прив'язки до вашої програми.
Автоматизація парсингу сайтів на Python
Автор – Артем Мураховський, Python Developer, тренер-консультант CyberBionic Systematics
В епоху машинного навчання інформація стає нафтою XXI століття. Проєкти, пов'язані зі збором та аналізом даних, виходять на перші позиції у глобальних компаніях та в стартапах.
Як збирати та обробляти інформацію? Залежно від цілей проєкту, дані можуть збиратися абсолютно різні. На вебінарі ми розглянемо один із найпоширеніших підходів – парсинг сайтів.
Ми візьмемо один із популярних сайтів з робочими вакансіями та на його прикладі розберемо бібліотеки для парсингу веб-сайтів, бібліотеки для роботи із запитами. Розберемо види популярних баз даних і зрозуміємо, де і яку потрібно використовувати.
План вебінару:
Що таке парсинг веб-сайтів?
Бібліотеки для парсингу веб-сайтів.
Бібліотеки для роботи із мережею.
Написання коду парсерів.
SQL та NoSQL – за яких завдань який тип використовується.
Написання коду менеджерів баз даних.
8. Створення простої казуальної гри на Python
Авторка – Людмила Міщенко, Python розробниця
На вебінарі буде розглянуто реалізацію простої гри на Python. Суть гри полягає у навчанні людей, особливо дітей, вести еко-дружній спосіб життя – правильно сортувати сміття. Тобто, користь буде не тільки для вас у отриманні нових знань у програмуванні, а й у спробі виявити більше турботи про нашу планету.
План вебінару:
1. Постановка задачі.
а) Мета вебінару – створити свою гру на Python, яка вчить сортувати сміття;
б) правила гри – обирати правильний кошик для різного типу сміття; закінчення гри за таймером; наприкінці гри користувач отримує суму зароблених балів за правильно обрані кошики.
2. Реалізація програми:
а) встановлення модулів;
б) завантаження потрібних зображень;
в) написання логіки влучення сміття в кошик (поведінка кошика);
г) оголошення та опис елементів сміття (органіка, пластик, папір) – клас поведінки сміття;
д) виклик написаних класів та запуск гри.
3. Отримання результатів:
а) запуск та тестування коду;
б) проходження гри;
в) аналіз виконаної роботи – додавання та зміна умов гри, оптимізація коду, майбутні доопрацювання.
9. Структури даних у Python. Рівень Advanced
Автор – Бондаренко Кирило, Data Scientist / Python Developer, "CreatorIQ"
Якщо ви маєте труднощі з розумінням документованих структур мови Python, таких як list, tuple, dict, set, цей вебінар для вас. Ми розбиратимемося з тим, як написати такі структури даних, як черги (queues), дерева (trees), розглянемо роботу зі вкладеними словниками (nested dicts), а також застосування ООП для розширення можливостей існуючих структур даних.
Матеріал цієї зустрічі буде корисний Python розробникам із різних областей, зокрема Data Science спеціалістам та web-розробникам.
План вебінару:
Робота з розширенням структур даних мови через наслідування та ООП.
Робота з комбінованими структурами, такими як nested dict, defaultdict, named tuple і т. д.
Написання незадокументованих структур даних, таких як дерева, черги, зв'язані списки та інші.
Цей вебінар буде цікавий розробникам, які добре знайомі з Python, знають про імпорт бібліотек і хочуть заглибитися в роботу зі структурами даних для більшої ефективності роботи з ними.
10. Як стати Python розробником у 2021 році?
Автор – Артем Мураховський, Python Developer, тренер-консультант CyberBionic Systematics
В останні роки мова програмування Python стрімко набирає популярність. За даними Stack Overflow Developer Survey 2019, в якому взяли участь понад 87 тисяч IT-фахівців з різних країн, Python випередила навіть таких постійних та безперечних лідерів, як Java, С# та С++.
Зараз вона широко використовується в Data Science (машинне навчання, аналіз даних, візуалізація), розробленні вбудованого програмного забезпечення та реалізації серверної частини веб-додатків. Також за допомогою Python можна створювати ігри, десктопні та мобільні програми, писати тести для ПЗ та спрощувати адміністрування ОС.
Програма зустрічі:
Хто такий Python розробник і що він робить?
Які знання, вміння та навички потрібні Python розробнику?
Вимоги до розробників рівня Junior.
З чого розпочати вивчення мови Python?
Складання плану навчання.
Рекомендована література.
Відповіді на питання.
Вивчайте Python розроблення на ITVDN!
Співбесіда з QA. 250+ питань для Junior, Middle, Senior
Автор: Влад Сверчков
Junior
1.1 Теория тестирования.
1.2 AQA
1.2.1 Программирование и Selenium
1.2.2 TestNG/JUnit, Git, CI
1.3 Web
1.4 Mobile
1.5 Практические задания
Middle
2.1 Теория
2.2 AQA
2.2.1 Selenium
2.2.2 Тестовая инфраструктура
2.3 Web
2.4 Mobile
2.5 Практические задания
Senior
3.1 Теория
3.2 Практические задания
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 12 января 2022 года. Оригинальная версия на украинском языке доступна по ссылке.
Эту подборку вопросов, которые ставят кандидатам разных уровней на технических собеседованиях на позицию QA, составили совместными усилиями практики. Список – лишь ориентир. Кандидатам советуем пробежаться по вопросам и отметить неизвестные слова, погуглить и заодно повысить шансы пройти собеседование.
Интервьюерам – пополнить свой запас интересных вопросов. Но не переборщите :)
Если вы не претендуете на позицию QA, просмотрите переводы подборок вопросов по другим популярным IT-специальностям.
Junior
Теория тестирования
1. Что такое тестирование?
2. Зачем тестировать ПО?
3. Какие существуют этапы тестирования?
4. Какие типы тестирования можете назвать?
5. Какие уровни тестирования знаете?
6. Какие техники тест-дизайна знаете?
7. Что такое техника анализа классов эквивалентности?
8. Что такое техника анализа предельных значений? В чем ценность этой техники?
9. Что такое Regression и Confirmation тестирование, какая между ними разница?
10. Как часто следует проводить регрессионное тестирование продукта?
11. Какие бывают виды интеграционного тестирования?
12. Что такое Configuration Testing?
13. Что такое Exploratory Testing?
14. Какие существуют UI-стандарты?
15. Что такое Black/Grey/White Box Testing?
16. Что такое Performance Testing?
17. Что такое Smoke и Sanity тестирование и какая между ними разница?
18. Что такое Traceability Matrix?
19. Что такое Sanity Testing?
20. Что такое End-to-End тест?
21. Что такое тестирование безопасности?
22. Что такое испытание на основе рисков?
23. Что такое динамическое тестирование?
24. Что такое «парадокс пестицида»?
25. Опишите основные фазы STLC? Дайте определение Entry и Exit Criteria.
26. Что такое Bug, Error, Failure, Fault?
27. Какие есть атрибуты баг-репорта? Какие основные поля для заполнения?
28. Какова разница между приоритетом и серьезностью?
29. Приведите примеры серьезного, но не приоритетного бага.
30. В чем разница между валидацией и верификацией?
31. Зачем нужна тестовая документация? Какие её виды?
32. Что такое тест-план? Какие элементы у него есть?
33. Какую обязательную информацию должен содержать тест-план? Как правильно его использовать, поддерживать и нужен ли он вообще для большинства проектов?
34. Какая разница между чеклистом и тест-кейсами?
35. Приведите пример хорошего тест-кейса.
Ответы на некоторые из этих вопросов вы можете найти в видео курсе QA Стартовый (урок 1, урок 3, урок 4, урок 5), Основы тестирования (урок 6), Основы тестирования ПО (урок 1-5), а также в вебинаре “QA практикум. Техники тест дизайна” (часть 1 и часть 2).
AQA (Automation QA)
Программирование
36. Что такое ООП? Назовите его принципы с примерами?
37. Что такое интерфейс? Что такое абстрактный класс? Чем они отличаются?
38. Что такое SOLID? Приведите примеры.
39. Что такое DRY, KISS, YAGNI?
40. Какие паттерны GOF вам известны? Приведите примеры их использования.
41. Что такое PageObject и PageFactory?
42. Какая иерархия Collections?
43. Какая разница между Thread class и Runnable interface?
44. Какая разница между String, Stringbuffer и Stringbuilder?
45. Разница между final, finally и finalize?
Selenium
46. Что такое Selenium и зачем его используют?
47. Что такое драйвер браузера?
48. Какие виды локаторов страницы существуют? Каковы их преимущества и недостатки?
49. Что такое Selenium Waits? Какие есть и чем отличаются?
50. Какие exceptions может бросить Selenium? Что они означают и как их обрабатывать?
51. Для чего используют JavaScriptExecutor? Приведите примеры.
52. Что такое Selenium Grid?
53. Какие способы click и send keys Selenium?
54. Как вы запускаете параллельное выполнение тестов? Что такое ThreadLocal?
55. Какая разница между Action и Actions?
56. Как написать метод isElementPresent?
57. Как вычитать данные из динамической веб-таблицы?
58. Можете ли вы назвать 10 интерфейсов в Selenium?
59. Назовите два способа, позволяющих автоматизировать капчу.
60. Вспомните типы навигационных команд Selenium.
61. Как найти поврежденные ссылки в Selenium WebDriver?
62. Какую технику следует рассмотреть, используя весь сценарий, если «нет ни frame id, ни frame name»?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Web Testing Automation on Java (урок 1), Автоматизация тестирования мобильных приложений (урок 5), а также в вебинаре “Selenoid или Selenium Grid — что лучше?”.
TestNG/JUnit
63. Для чего нужны TestNG/JUnit?
64. Какие инструкции используются в TestNG/JUnit?
65. Какие assertions есть в TestNG/JUnit?
66. Как выполнять тесты параллельно TestNG/JUnit?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Web Testing Automation on Java (урок 4).
Git
67. Для чего используют системы контроля версий?
68. Что такое Git? Каков принцип его работы?
69. Что такое commits, branches в Git?
70. Для чего нужны GitHub, GitLab и другие, базирующиеся на Git, вебхостинги проектов?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Основы работы с Git.
CI
71. Что такое CI?
72. Как автоматическое тестирование интегрируется в CI?
73. Как настроить Job или Pipeline на знакомом вам CI-инструменте?
74. Какие инструменты для генерации репорта после выполнения автоматических тестов вы знаете?
75. Какую информацию должен содержать отчет о выполнении автоматических тестов?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Web Testing (урок 4).
Web
76. Что такое клиент-серверная архитектура?
77. Что может выступать в роли клиента?
78. Что такое REST API, SOAP? В чем разница?
79. Какие протоколы передачи данных знаете?
80. Какие способы взаимодействия с API существуют? В чем разница между ними?
81. Как можно протестировать API, что там нужно проверять?
82. Как расшифровывается CRUD?
83. Чем отличается GET от POST?
84. Какие отличия между XML и JSON?
85. Какие знаете форматы передачи данных?
86. Как происходит шифрование?
87. Какие бывают виды баз данных?
88. Охарактеризуйте каждый класс status code (1хх; 2xx; 3xx; 4xx; 5xx).
89. Какие есть HTTP-методы?
90. Какие знаете Web elements?
91. Какие браузеры знаете? В чем их отличие?
92. Для чего необходимы инструменты разработчика в браузере (Chrome DevTools) и как они помогают в тестировании.
93. Что такое кэш?
94. Что такое сессия?
95. Зачем нужны cookies?
96. Что такое фрейм?
97. Что такое HTML/CSS/JavaScript?
98. Какую структуру имеет веб-страница?
99. Зачем чистить кэш?
100. Какие виды тестирования можно применить только к Web?
101. Для чего в веб-страницах используют JavaScript?
102. Что такое REST?
103. Что такое AJAX?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах QA Стартовый (урок 6), Web Testing, SQL Базовый.
Mobile
104. Какие мобильные платформы существуют?
105. Какие версии Android и iOS используются на рынке (минимальные и максимальные)?
106. Какие версии Android нужно тестировать, если заказчик сказал поддерживать с версии 5.0?
107. Назовите типы мобильных приложений.
108. Каков формат файлов сборок приложений для Android и iOS?
109. Что такое ADB?
110. Как снять логи с AOS/IOS?
111. Что нужно проверять при использовании сканера отпечатка/Face ID?
112. Как я могу запускать тесты Android без Appium?
113. Объясните концепцию дизайна Appium.
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Автоматизация тестирования мобильных приложений.
Практические задания
114. Написать чеклист для функционала корзины в интернет-магазине.
115. Написать тестовые наборы данных для поля ввода даты, которое отсеивает пользователей в возрасте до 18 лет.
116. Написать чеклист тестирования формы ввода данных платежной карты.
117. Протестовать «предмет» относительно различных видов тестирования. (Предмет - лифт, карандаш, калькулятор и т. д.)
118. Есть Input поле, принимающее целые значения от 18 до 99 включительно. Надо протестировать с помощью техники тест-дизайна Boundary Values Analysis и Equivalence Partitioning.
119. Есть веб-страница с полями: e-mail, password и кнопкой submit. Необходимо привести примеры отрицательных тест-кейсов, которыми можно проверить эту страницу.
120. Привести примеры тест-кейсов для функционала, находящегося на нескольких страницах проекта (например, поле поиска).
121. Как протестировать процесс оплаты в интернет-магазине?
122. Как протестировать сломанный тостер?
123. Объясните для 7-летнего ребенка, что такое база данных.
124. Определите необходимое количество функциональных тест-кейсов, чтобы проверить Log in форму.
125. Есть форма регистрации в веб-приложении с полями (first name, last name, username, password, repeat password) и кнопкой Register. Какие проверки нужно провести?
126. Поле username должно быть обязательным, но оно не является обязательным. Приведите пример баг-репорта, созданного для этой ошибки.
127. Как бы вы провели smoke-testing для приложения типа Telegram?
133. Как будет выглядеть баг-репорт, если, к примеру, не работает электрический чайник?
128. Есть таблица books с полями: name, price, page_count. Следует выбрать все имена книг, в которых price более 10 единиц и количество страниц от 20 до 100.
129. У вас есть функционал калькулятора, который доступен через веб-браузер по ссылке. Он имеет только функцию делить, так сказать, MVP-версию. Диапазоны для вписывания в числитель и делитель от 0,1 до 99,9. Вывод значения происходит автоматически, потому что front-end реализован на React JS. Как вы будете тестировать этот функционал? Какие виды тестирования примените? Какие техники тест-дизайна используете?
130. Задание на работу с SQL.
извлечь номер телефона и адрес пользователя Muzik.
Извлечь данные о пользователях, имеющих сумму заказа более 2000 грн.
Подсчитать количество заказов в таблице и общую сумму сделанных заказов.
131. Ваша компания разрабатывает программное обеспечение для медицинских систем, и вы тестируете компонент, управляющий дефибриллятором сердца. Вы заметили, что одно решение в тестовом модуле состоит из 34 независимых атомарных условий. Какой метод тестирования белого ящика следует выбрать для этого и почему?
132. Оздоровительная программа для сотрудников совмещена с оплатой медицинского страхования и имеет следующие правила:
сотрудники, потребляющие 17 единиц или менее алкоголя в неделю, получают $28 скидки на оплату.
Для сотрудников, которые заполнят «Оценку риска для здоровья», оплата уменьшается на $23.
Сотрудники, участвующие в ежегодном контроле за состоянием здоровья в компании: получат скидку на $50 за то, что имеют индекс массы тела (ИМТ) 25,5 или менее, и $19 скидки при ИМТ ниже 30. Некурящие получают дополнительную скидку на $46. Курильщики, присоединившиеся к курсу отказа от курения, получают скидку в $24. Курильщики, не присоединившиеся к курсу отказа от курения, оплачивают дополнительно $75.
133. Используя технику классов эквивалентности, сколько тестов нужно написать, чтобы покрыть вышеупомянутые условия на 100%?
134. Какое минимальное количество тестов необходимо для покрытия следующих условий автогражданки:
лица до 18 лет не застраховываются.
Для мужчин на красном авто прибавляется +15% к стоимости полиса.
Для женщин от 18 до 64 лет страховая премия 1000 грн.
Для мужчин от 18 до 64 лет страховая премия 1200 грн.
Для лиц старше 64 лет страховая премия 1800 грн.
135. Напишите сценарии автоматического тестирования для сортировки по цене и добавлению товара в корзину на сайте. К вашим тестам добавьте документацию с настройками и разместите ваше решение на GitHub.
Middle
Теория
1. Назовите обязанности QA?
2. Что знаете о тестировании нагрузки? В каком случае следует проводить такое тестирование? На каком этапе готовности продукта?
3. Что такое таблица решений/decision table и как её можно использовать?
4. Что может быть критериями запуска и завершения тестирования?
5. Расскажите о вариантах интегрирования тестовой документации в проект, инструментах для работы с ней.
6. Как организовать сквозное тестирование (e2e)?
7. Какие тест-кейсы можно сдать для тестирования баз данных?
8. Приведите примеры подходов для тестирования локализации.
9. Что такое A/B тестирование?
10. Что такое mock/stub? Какие знаете инструменты для работы с ними?
11. Когда нужно использовать технику Pairwise?
12. Что такое fuzz-тестирование и где его используют?
13. Что такое REgexp?
14. Как меняется стоимость дефекта при тестировании программного обеспечения?
15. Каковы пути анализа бизнеса клиента? Как определить целесообразность того или иного функционала?
16. Назовите последовательность выполнения CI/CD процесса на проекте.
17. Какое должно быть процентное соотношение между положительным и отрицательным тестированием на проекте?
18. Какой вид тестирования целесообразнее проводить до релиза?
19. Есть ли разница между bug leakage и bug release?
20. Может ли быть ситуация, когда критерии завершения (exit criteria) не выполнены? Что должно происходить в этом случае?
21. Что мы действительно должны покрывать тест-кейсами, а что считается избыточным расходом времени и денег? Когда нецелесообразно писать тест-кейсы?
22. Для какого функционала труднее всего написать тест-кейсы?
23. Как посчитать Cyclomatic complexity?
24. В чем основная разница между defect detection percentage и defect removal efficiency?
25. Какие модели risk-based testing вы знаете?
26. Что такое тестирование API? Какими инструментами пользуются для его выполнения?
27. Что такое performance testing? Какими инструментами пользуются для его выполнения?
28. Что такое load и stress testing? Какими инструментами пользуются для их выполнения?
29. Что такое contract testing?
30. Какая разница между Scrum и Kanban?
31. Расскажите о ритуалах, ценностях и ролях в Scrum.
32. Как выбор методологии может повлиять на качество разработки?
33. Нулевой спринт в Scrum. Для тестирования есть задание под названием «Настройка среды». Что здесь нужно выполнять?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Web Testing, QA Стартовый, “Методология управления проектами. Вступление в SCRUM”.
AQA
Selenium
34. Расскажите, как вы будете строить и внедрять стратегию по автоматизации тестирования.
35. Как взаимодействуют клиентская библиотека Selenium, драйвер браузера и сам браузер?
36. Для чего используют browser capabilities, arguments и options?
37. Что такое iframe и как с ним работать в Selenium?
38. Как обрабатывать браузерные сообщения (alerts)?
39. Что такое Appium?
40. Что такое Electron-based applications? Как использовать Selenium и Appium для их тестирования?
41. Как взаимодействовать с запросами, отправляемыми из браузера?
42. Как взаимодействовать с cookies, LocalStorage и SessionStorage?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Web Testing Automation on Java (урок 1) и Автоматизация тестирования мобильных приложений.
Тестовая инфраструктура
43. Что такое и чем отличаются виртуальная машина, симулятор и эмулятор?
44. Что такое контейнер и чем он отличается от виртуальной машины?
45. Как используют виртуальные машины и контейнеры в автоматизации?
46. Что такое IaaS и PaaS? Приведите примеры.
47. Что такое Configuration Management?
48. Что такое Provisioning?
49. Какие команды Linux Shell вам известны? Как с помощью команд Linux Shell найти лог-файл и строчку с ошибкой в файле?
50. Какие команды Windows CMD вам известны? Как с помощью команд Windows CMD найти IP-адрес машины?
51. Что такое SSH и как им пользоваться?
52. Что такое bash и batch скрипты? Зачем их используют?
Web
53. Какая разница между авторизацией и аутентификацией?
54. Как происходит авторизация на сервере?
55. Какие статус-коды ошибок бывают? Может ли сервер отправить код 400, если проблема на его стороне?
56. Как выполнить Debug страницы в браузере?
57. Как протестировать адаптивную верстку?
58. Что такое WebSocket и как проверить обрыв соединения?
59. Каковы есть основные виды уязвимости веб-приложений?
60. Какие инструменты для тестирования Web performance client-side знаете?
61. Какова разница между методами GET и POST?
62. Какая разница между методами PUT и PATCH?
63. Какие знаете сниферы?
64. Какова разница между DROP и TRUNCATE?
65. Что такое case function?
66. Что такое collation?
67. Что такое схема GraphQL?
68. Объясните разницу между OLTP и OLAP.
69. Вспомните разные типы репликации в SQL Server?
70. Что вы понимаете под Self Join? Приведите примеры.
71. Что такое cursor и как им пользоваться?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Web Testing Automation on Java, SQL Базовый.
Mobile
72. Что основное нужно проверить при тестировании мобильного приложения?
73. Что такое Manifest.xml в .apk файле и какие данные там указывают?
74. Что такое режим разработчика Do not keep activities?
75. Как происходит перехват трафика http/https для мобильных устройств?
76. В каком виде хранятся данные в мобильных приложениях локально?
77. Как тестировать миграцию локальных данных?
78. Каковы основные компоненты Android-приложений (активити / фрагмент / сервис / интент-фильтр)?
79. Опишите жизненный цикл активити.
80. Что такое утечки памяти? Как найти?
81. Как протестировать билд на Android?
82. Что такое Testflight? Как тестировать с его помощью?
83. Как работает Android? Какая у него архитектура?
84. Как происходит деплой программ IOS/AOS?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Автоматизация тестирования мобильных приложений.
Практические задания
85. Что делать, если разработчик не соглашается, что указанный баг действительно является багом? А если в требованиях использована неоднозначная формулировка? Если бизнес-аналитик, PM и представитель клиента сейчас недоступны, чтобы подсказать? Как можно предотвратить такую ситуацию?
86. Сложилась ситуация, когда команда тестирования не успевает закончить свою работу в дедлайн. Как правильно действовать в этом случае? А если релиз передвинуть нельзя? А если никакие фичи из релиза забрать нельзя?
87. Что делать, если проект уже начался, а QA-инженер там начал работать только когда начали разрабатываться бизнес-фичи? Какие этапы тестирования теперь нужно наверстать и нужно ли это? Как это сделать максимально грамотно без ущерба для загрузки по тестированию новых фич? Какие риски имеет позднее вовлечение QA-инженера в разработку?
88. Веб-страница с полями e-mail, password и кнопкой submit. Назовите отрицательные тест-кейсы, по которым можно проверить эту страницу.
89. Предположим, что после нажатия кнопки submit страница перезагружается и ранее введенные данные исчезают. Как проверить, что информация отправлена в базу данных?
90. Как проверить, что данные отправились на сервер, если у нас нет доступа к бэкенду?
91. Приведите примеры улучшений для приведенной веб-страницы (любая на выбор).
92. Составить Smoke Test Suite для DOU.ua.
93. Протестовать функционал банкомата с помощью техники State Transition Diagram.
95. Написать предельные значения для ввода в форму оплаты товара на сайте.
96. Есть метод POST, который регистрирует нового пользователя на сайте, есть тело запроса, содержащее данные о почте, телефоне, имени пользователя и адресе проживания. Какие кейсы для проверки можете привести?
97. На что следует акцентировать внимание при автоматизации методов API? Что следует проверять?
98. Вы тестируете логин-форму, вводите логин и пароль, нажимаете кнопку логин и ничего не происходит. Ваши действия?
99. В течение 5 минут найдите и опишите дефекты, которые вы видите:
100. Вам нужно сделать Regression Testing за два дня. Как вы это сделаете, если Regression Run охватывает 1000 тест-кейсов?
101. Вы тестируете интернет-магазин, который продаёт карандаши. В заказе нужно указать количество карандашей (максимум для заказа – 1000 штук). В зависимости от заказанного количества карандашей отличается цена:
1–100 – 10 грн за шт.
101-200 – 9 грн за шт.
201-300 – 8 грн за шт.
С каждой новой сотней цена уменьшается на 1 гривну. Задание: используя тест-дизайн, опишите все необходимые тест-кейсы, которые будут максимально покрывать описанную функциональность.
102. Есть приложение типа мессенджера, пользователь заходит в чат и отсылает файл (видит сообщение Failed to send...) Когда это может быть баг, а когда нет?
103. Есть веб-приложение интернет-магазина (регистрация, логин, поиск товаров, корзина и покупки). Программу поддерживают следующие браузеры: Chrome, Safari, Edge. У нас есть ограниченное время на тестирование. Расскажите, как вы будете проверять приложение?
104. Напишите автоматические тестовые сценарии для проверки API операций создания и просмотра GitHub Gists. Интегрируйте ваш проект с известной вам CI-системой.
Senior
Теория
1. Как вы преодолеете трудности из-за отсутствия надлежащей документации для тестирования?
2. Какой подход является наилучшим для старта QA в проекте?
3. Какие препятствия могут возникнуть в обеспечении качества для Agile Tester?
4. Что такое Definition of Done?
5. Когда можно считать, что тестирование окончено?
6. Что такое RCA в тестировании? Нужно ли его проводить?
7. Какой подход вы используете для Test Cases Review?
8. Какие виды рисков существуют? Что такое Mitigation Plan?
9. На основе чего нужно составлять стратегию для проведения тестирования нагрузки?
10. Как часто следует ревьюировать тестовую документацию?
11. Как можно быстро сделать выборку необходимых проверок для смоук-тестирования?
12. Как запланировать загруженность команды тестировщиков?
13. Какую ценность несет анализ результатов тестирования команде и проекту в целом?
14. Как можно подкорректировать флоу разработки, чтобы получать более чистые результаты на выходе и уменьшить количество багов на проде?
15. Расскажите о метриках качества, которые вы применяли. Зачем они нужны?
16. Как провести эстимейт задачи? Каковы техники оценки объема тестирования существуют?
17. Как можно посчитать покрытие тестами функционала?
18. Какое оптимальное количество шагов в тестовом сценарии?
19. Как избежать появления регрессивных дефектов?
20. Что такое тестирование со смещением влево (Shift left testing)?
21. Как будете тестировать программу, если для продукта нет документации?
22. В чем смысл юнит-тестов?
23. Какие минусы полной автоматизации тестирования?
24. Что такое ROI и как его считать?
25. Что такое CI/CD? Какие плюсы и минусы этого подхода?
26. TOP OWASP: какие знаете уязвимости и методы защиты?
27. Что вы думаете по поводу BDD? Когда следует использовать, а когда будет только хуже? Если все же следует использовать, то для UI или API автоматизированного тестирования?
28. Что такое сокеты и как их тестировать, вручную и автоматизировано? Зачем их используют?
29. Когда следует делать стресс-тестирование на проектах? От чего отталкиваться, когда строите сценарий для такого тестирования? Что учесть при выборе инструмента?
30. Расскажите об алгоритмах шифрования трафика.
31. Что такое NIC?
32. Для чего нужен протокол RTP?
33. Что, по вашему мнению, лучше – SIP или PRI?
34. Что такое NAT?
Практические задания
35. Сформулируйте негативные сценарии для POST-запроса, который создаёт нового пользователя.
36. Как вы регулируете конфликтные ситуации между QA и разработчиками?
37. Есть проект, на котором нет тестовой документации, но проекту уже год. Мануальным QA не хватает времени на тестирование, они очень устали, есть желание уволиться. Какое решение по команде можно принять?
38. Продайте мне тестирование как клиенту, не желающему его покупать. Кратко и структурированно опишите вашу работу на каждом из этапов разработки ПО, используя профессиональные термины (не лить воду).
39. У вас есть онлайн-калькулятор. Вы вводите 1+1 и получаете 3. Расскажите, как вы будете искать причину проблемы.
40. Могут ли быть такие виды архитектур? Чего может быть недостаточно для правильной работы архитектур, приведенных ниже?
Пример 1
Пример 2
Пример 3
Пример 4
Вопросы при выполнении этого задания:
какие запросы выполняются по форме авторизации?
Какой запрос выполняется, когда мы сохраняем данные в базе данных?
Можно ли авторизоваться с помощью GET-запроса и нормально ли так делать?
Какой код ответа мы получаем при падении ошибки на сервере, код при ошибочных credentials на форме авторизации?
Можно ли заменить SSL-сертификат шифрованием данных в пакете от клиента к серверу для протокола HTTP или это будет равноценной заменой?
41. Есть веб-страница с полями e-mail, password и кнопкой submit. Предположим, что после нажатия кнопки submit страница перезагружается и ранее введенные данные исчезают. Как проверить, что данные отправлены в базу данных?
42. Какое минимальное количество тест-кейсов необходимо, чтобы убедиться в корректной работе этой веб-страницы?
43. Как проверить безопасность на веб-странице (на выбор)?
Редакция DOU.ua выражает благодарность за вопросы и рецензию: Роману Поботину, Андрею Заблоцкому, Виктору Максименко, Марьяне Батюк, Ирине Литвин, Сергею Могилевскому, Святославу Логину, Роману Маринскому, Олегу Заревичу, Олесе Паславской, Тарасу Лирке, Максиму Богуну, Вадиму Гуличу, Виталию Кашубе, Юрию Суравскому, Светлане Франковой, Владимиру Арутину, Станиславу Жупинасу, Людмиле Федчук, Иванне Черухе, Юлии Левченко, Владиславу Куличенко, Юрию Бояру.
ТОП-10 найкращих відео з Java від ITVDN
Автор: Влад Сверчков
Вітаємо, друзі!
Сьогодні на вас чекає підбірка класних, наповнених корисним контентом відео від ITVDN за напрямком Java. Топ насичений як теоретичними відеоматеріалами, які допомагають побудувати ефективне навчання, так і практичними вебінарами, орієнтованими на прокачування навичок програмування за допомогою джави та супутніх технологій (фреймворк Spring, Elasticsearch). Отже, які відео увійшли до цього рейтингу?
Карта спеціальності Java розробник
Автор – Андрій Бондаренко, Android Developer & Trainer, Samsung R&D Institute, Ukraine
Java – це популярна об'єктно-орієнтована мова програмування, якою написані програми для більш ніж 3-х мільярдів пристроїв по всій планеті. Сфера її застосування практично безмежна, а ті, хто добре володіють Java, мають великі можливості та завжди будуть забезпечені цікавими завданнями та високооплачуваною роботою.
На вебінарі ви отримаєте відповіді на всі питання, пов'язані з навчанням, набуттям досвіду, розстановкою пріоритетів у виборі технологій та навчальних матеріалів, а також кар'єрою програміста Java-напрямку.
Програма зустрічі:
Хто такий Java розробник?
Актуальність спеціальності та затребуваність на IT-ринку.
Як стати Java розробником:
попередні вимоги;
картка спеціальності;
огляд обов'язкових та факультативних технологій.
Де та як вивчити мову програмування Java.
Як отримати перший практичний досвід
Стажування та перша робота - можливості і перспективи.
Питання та відповіді.
Створення базового Spring Boot веб-сервісу на Java
Автор – В'ячеслав Аксьонов, Java/Kotlin Software Engineer
Spring Boot – це найпопулярніший фреймворк для розроблення веб-додатків на Java. У вебінарі буде розглянуто, як влаштовані додатки, котрі створені з використанням Spring Boot, на прикладі найпростішого stateless веб-сервісу. Також автор розгляне http взаємодії з використанням REST, побудову масштабованої архітектури бізнес-логіки, взаємодію з базами даних через найбільш популярні та прості прийоми.
План вебінару:
Що таке Spring/Spring Boot та Dependency Injection.
Контекст та як його створювати.
@Service/@Component/@Repository/@Controller – що все це таке і навіщо потрібно.
Створюємо шаблон проєкту Spring Boot.
Пишемо веб-сервіс із нуля.
Розглядаємо найбільш простий та зручний спосіб роботи з базою даних.
Перевіряємо працездатність та відповідаємо на запитання.
3. Як стати Java розробником у 2021?
Автор – Максим Федосов, Java Developer
З цього вебінару ви дізнаєтеся, як почати свій шлях у якості Java розробника – від новачка без досвіду в програмуванні до рівня фахівця, затребуваного на ринку.
У вебінарі будуть розглянуті дві сторони:
Що вчити: автор поділиться своїм баченням того, що потрібно вивчати насамперед як базу, що потрібно опановувати на етапі пошуку першої роботи, і що потрібно підтягнути, коли спеціаліст вже працює (на прикладі Java стеку).
Як шукати роботу: з боку побудови кар'єри йтиметься про те, які шляхи можна обрати для побудови кар'єри, про ринок з точки зору роботодавця, курсів, шукачів. Який проєкт краще обрати, як часто змінювати роботу, як розвивати свою кар'єру.
Весь вебінар буде розділено на 2 частини – до першої роботи та під час роботи. В результаті у фахівців-початківців з'явиться конкретний план дій для того, щоб розпочати кар'єру, а у працюючих фахівців — розуміння того, як рости далі.
План вебінару:
Знайомство, трохи про себе та свій шлях у IT-сфері.
Що потрібно вчити розробнику-початківцю Java.
Напрацювання практики програмування. Портфоліо.
Підготовка до пошуку роботи та подальша кар'єра.
4. Elasticsearch - пишемо свій пошуковик на Java
Автор – Федір Яременко, Senior Java Developer
На вебінарі буде розглянуто, як на Java реалізувати повнотекстовий пошук на об'ємному масиві документів з мінімальними затримками за допомогою Elasticsearch.
План вебінару:
Про повнотекстовий пошук та індексацію
Огляд Elasticsearch
Налаштування проєкту
Додавання індексів
Пошук за індексом
Пошук за кількома полями
Пошук у знайденому
Агрегація результатів пошуку
Пошук запитів з помилками
Інші корисні опції пошуку
Ранжування результатів
Налаштування форматування результатів
Пагінація
Налаштування індексів для російської та української мов
Асинхронні виклики
Масштабування за допомогою кластера
Візуалізація даних за допомогою Kibana
Висновок
5. Створення 2D гри Танчики з Денді на Java з нуля
Автор – Андрій Бондаренко, Android Developer & Trainer, Samsung R&D Institute, Ukraine
Дане відео є захоплюючим онлайн тренінгом із написання графічної гри "Танки", який допоможе легко і швидко познайомитися з практичною стороною розроблення на Java. Нуль теорії – лише практика.
Кому це буде корисно:
Новачкам. Відсутність досвіду у програмуванні не повинна вас зупиняти. Ми даємо вам шанс зробити свою першу програму на Java та отримати досвід практичного застосування цієї мови програмування у створенні справжньої комп'ютерної гри.
Розробникам-початківцям Java без досвіду. Ви зможете поглибити і застосувати на практиці знання мови Java під керівництвом тренера.
Чого ви навчитеся:
Писати прості програми та підпрограми з використанням мови Java
Працювати з масивами даних
Використовувати типи даних та класи Java
Застосовувати всі базові навички (змінні, умовні конструкції, цикли, методи) на практиці
Програма тренінгу:
Створення карти поля бою.
Робота над пересуванням танка
Реалізація стрільби.
Навчання танка рухатися у вказаний квадрант.
Додавання танка-ворога.
Підсумок: танк проходить все поле бою та чистить його.
Відповіді на питання. Куди розвиватись далі?
6. Spring для початківців. Огляд можливостей та переваг. Початок роботи зі Spring
Автор – Дзюба Роман, Java Developer
Spring – це один з найбільш популярних та універсальних фреймворків для створення веб-додатків для бізнесу. Він дає Java-розробникам більшу свободу в проєктуванні програм, надаючи засоби вирішення проблем корпоративного масштабу. Spring має велику документацію і досить простий у використанні.
Дане відео є першим відеоуроком з відео курсу “Spring”, який знайомить з однойменним фреймворком.
На самому курсі розглядаються різні способи використання модулів Spring, написання REST додатків, використання MVC моделей та інші теми.
Проходження курсу за даним фреймворком буде корисним як тим, хто тільки познайомився з мовою Java і шукає, що вчити далі, так і тим, хто вже має певні знання і хоче освіжити в пам'яті навички використання SpringCore, SpringWeb, SpringSecurity.
Головні теми цього відео:
Ознайомлення із базовими принципами фреймворку.
Переваги Spring, знайомство з основними принципами ООП та поняттям POJO.
Області видимості Java Bean.
7. Створення гри Морський Бій на Java з нуля. (Частина 1, Частина 2)
Автор – Антон Кашніков, Java Developer, тренер-консультант CyberBionic Systematics
Відео у форматі онлайн тренінгу з написання консольної гри "Морський бій". З його допомогою ви швидко познайомитеся з Java, відразу ж розпочавши розроблення. Як результат – ви випробуєте джаву у справі, відчуєте її потужність, а також отримаєте на виході власноруч зроблену гру, яка після доопрацювання може стати чудовим проєктом у вашому майбутньому резюме Java розробника.
Програма тренінгу:
Частина 1
Знайомство із засобом розроблення IntelliJ IDEA та мовою програмування Java.
Розбивання проєкту на підзавдання.
Робота з масивами під час створення поля бою.
Створення перших об'єктів.
Використання об'єктів з масивами.
Частина 2
Тонкості роботи з консоллю при відображенні ігрових об'єктів.
Продумування логіки гри.
Створення геймплею.
Оброблення винятків.
Розбір помилок.
Підбиття підсумків.
Що потрібно знати Java розробнику? ➤ Як вивчити Java?
Автор – Дмитро Саєвський, Java Developer
На цьому вебінарі ви дізнаєтеся, чим займається джавіст, які типи розроблення Java найбільш затребувані. Також автор розгляне весь шлях Java розробника з моменту вибору цієї спеціальності до рівня Senior.
План вебінару:
Типи розроблення Java.
Якими вміннями повинен володіти Java розробник.
Особливості Java. Історія версій Java.
З чого розпочати навчання та скільки потрібно вчитися?
Складання плану навчання.
Кар'єрний шлях розробника.
Рекомендовані посилання.
Рекомендована література.
9. Підготовка до співбесіди з позицією Junior Java Developer
Авторка – Вікторія Силенко, Java розробниця desktop та web додатків.
Незважаючи на дату випуску даного вебінару, він досі залишається актуальним для тих, хто вирішив пов'язати свою кар'єру з розробленням Java і при цьому прагне з успіхом пройти співбесіду на позицію Junior Java Developer.
На цьому вебінарі ви дізнаєтесь, як правильно складати резюме, які популярні питання на співбесіді (+ відповіді), теми під час перевірки рівня англійської мови, як добре зарекомендувати себе у перші місяці роботи.
10. Створення багатопотокового клієнт-серверного додатку на Java
Автор – Євген Волосатов, професійний програміст, викладач мови Java у коледжі, автор відео курсів з мов C#, Java, PHP; має більше 20 років досвіду у якості провідного програміста в різних фірмах, має значний викладацький досвід; 6 років досвіду у проведенні вебінарів та створенні відео курсів
Євген Волосатов – справжній метр в області алгоритмів і структур даних на C#, Java, PHP — в даному вебінарі демонструє, як необхідно створювати багатопоточний клієнт-серверний додаток мовою Java.
На цьому вебінарі на вас чекає практика, котра зачіпає сокети та потоки. За допомогою Java буде написано невелику клієнт-серверну програму на сокетах. Для цього автор створить дві різні програми, які запускаються на різних комп'ютерах, але при цьому працюють спільно, надсилаючи одна одній дані.
Для зв'язку програм одна з одною буде створено універсальний клас Phone – він використовуватиметься як на сервері, так і на клієнті в JAR файлі. Наприкінці вебінару автор додасть багатопоточність до серверної частини, щоб сервер міг обробляти кілька клієнтів одночасно.
План вебінару:
Найпростіший сервер – Автовідповідач.
Найпростіший клієнт – Вміти читати.
Клієнт-серверний діалог.
Універсальний сокет – Телефон.
Серверна багатопоточність.
Для успішного засвоєння матеріалу необхідні базові навички роботи з Java у середовищі IntelliJ IDEA.
Вивчайте Java розроблення на ITVDN!
Співбесіда з DevOps. 300+ питань для Junior, Middle, Senior
Автор: Влад Сверчков
Junior
1.1 Общие вопросы и Linux.
1.2 Networks, Clouds.
1.3 Automation, Information Security.
1.4 Виртуализация, CI/CD, Development.
1.5 Monitoring/Logging.
1.6 Практические задания.
Middle
2.1 Linux.
2.2 Networks.
2.3 Container orchestration.
2.4 Виртуализация и контейнеризация.
2.5 CI/CD, Clouds and Automation.
2.6 Monitoring/Logging.
2.7 Information Security.
2.8 Development, Databases.
2.9 Практические задания.
Senior
3.1 Linux.
3.2 Networking, Разное.
3.3 Container orchestration, Clouds and Automation.
3.4 CI/CD, Information Security.
3.5 Observability, Databases.
3.6 Практические задания.
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 7 декабря 2021 года. Оригинальная версия на украинском языке доступна по ссылке.
Можно спорить о популярности DevOps, а можно просто готовиться к собеседованию и получить желанные 9K :) Чтобы помочь вам сориентироваться в вопросах, которые задают на интервью, мы поговорили с теми, кто их проводит, и составили список возможных вопросов.
Junior
Общие
1. Что такое DevOps?
2. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время?
3. Как работает HTTPS?
4. Объясните концепцию Infrastructure as Code, зачем это нужно и какие проблемы решает?
Linux
5. Опишите общую архитектуру операционной системы.
6. Опишите основное предназначение операционной системы.
7. Зачем нужны файловые системы? Какие существуют?
8. В чем разница между виртуализацией и контейнеризацией?
9. В чем преимущества контейнеров?
10. Какова файловая структура в Linux (UNIX) системах, расположенных в /etc, /dev, /proc, /sys, /lib, /var (несколько директорий на выбор)?
11. Что такое Load Average?
12. В чем разница между soft и hard symlink?
13. Как работают file permissions, зачем директории права исполнения (+x)?
14. Что такое zombie process?
15. С помощью чего можно собрать информацию о текущем состоянии процессора, памяти, диска, сети?
16. Что такое swappiness?
17. Как посмотреть свободное место на диске?
18. Что такое inode?
19. Расскажите поэтапно процесс загрузки Linux с момента включения питания компьютера.
20. Что произойдет при выполнении команд:
1. cat file1 > file2
2. cat file1 >> file2
21. В чем разница между Ctrl+C и Ctrl+Z?
22. Как перенаправить одновременно stderr и stdin?
23. Как убить процесс? Какие есть типы сигналов?
24. Что делает команда grep?
25. Что такое скрипт bash?
26. Какие типы переменных используются в bash?
27. Что выведут команды:
1. echo ${hostname};
2. echo $(hostname);
Networks
28. Что такое модель OSI, TCP/IP?
29. Для чего нужны network masks?
30. Структура IP-пакета. Из чего состоит? Что такое фрагментация и почему она происходит?
31. Что такое коллизия? Почему возникает?
32. Что такое прокси?
33. Что такое firewalls и зачем они нужны?
34. Что такое NAT и для чего он нужен?
35. Какие типы IP-адресов вы знаете?
36. По какому порту и протоколу работают Ping и Traceroute?
Clouds
37. В чем разница между IaaS, PaaS и SaaS?
38. Что такое VPC и из каких компонентов должно состоять?
39. Что такое cloud-init? init/systemd/upstart configs?
Automation
40. Что такое IaaC и зачем он нужен?
41. Что такое Terraform?
42. Какие инструменты автоматизации вы знаете?
Information Security
43. В чем разница между аутентификацией и авторизацией?
44. Сертификаты. Как работает HTTPS? Что такое certificate ciphers?
45. Как безопасно передать данные своему коллеге?
46. Что такое MFA, TOTP?
Виртуализация
47. В чем разница между виртуализацией и контейнеризацией? В чем плюсы и минусы?
48. Как при запуске Docker-контейнера «повесить» его из 80-го порта в контейнере на 8081 на хост?
49. Как передать в виртуальную машину USB device?
50. Docker-контейнер потребляет многие SWAP. Что делать?
CI/CD
51. Что такое Continuous Integration и Continuous Deployment? В чем разница между Continuous Deployment и Continuous Delivery?
52. Опишите основные этапы CI/CD.
53. Опишите пример процесса CI (и/или CD), который начинается с момента, когда разработчик запушил изменения/PR в Git?
54. Расскажите о разновидностях тестов, которые мы можем использовать в CI пайплайне.
55. Какие инструменты CI вы использовали? Есть ли опыт работы с Jenkinsfile?
56. Какие виды тестов вы знаете и зачем они нужны?
Development
57. Git. Как решить merge conflict? Что такое rebase, cherry-pick?
58. В чем разница между git merge и git rebase?
59. Какие UI использовали?
60. Какая разница между GitLab/GitHub/Bitbucket?
61. Какая разница между Git pull/Git fetch?
62. Что такое Git-Flow?
63. Версионирование. Какая разница между SemVer и CalVer?
64. Тестирование. Какие существуют виды? Как писать тесты, TDD?
65. В чем разница между компилируемыми и интерпретационными языками программирования?
Monitoring/Logging
66. Какие метрики нужно собирать? Разница между infrastructure и application monitoring.
67. Какая разница между pull и push model в системах мониторинга?
68. Какая разница между Black box и White box monitoring?
69. Расскажите о подходах к сбору application логов.
Практические задания
71. Напишите простую программу на ваш выбор. Программа должна получать сообщения из сервиса очередей и печатать его в stdout. Сервис очередей — по вашему усмотрению.
72. Разберите структуру сервиса (на примере Docker-Compose).
73. Практическая сессия работы с Git (Git command line: fetch, push, pull, rebase, checkout, submodules).
Middle
Linux
1. Опишите архитектуру ядра Linux.
2. Что такое ядро и каково его предназначение?
3. Опишите общие части файловой системы Unix/Linux, архитектуру файловой системы.
4. В чем разница между RedHat и Debian?
5. В чем разница между /proc и /sys?
6. Ситуация: указывает, что на диске занято 50% места, а сделать файл даже под root юзером не можем. В чем проблема?
7. Мы удалили файл, открывший приложение. Как нам его восстановить?
8. Как найти PID процесса, его стартовые параметры?
9. Как проверить, открыт ли порт на удаленном хосте, локальном хосте?
10. Как искать файл по его содержимому?
11. Что такое SSH, как организовать доступ на сервер без пароля или с определенных хостов? Как ограничить доступные для выполнения команды?
12. Как проверить потреблённые ресурсы во время сеанса SSH?
13. Что означает разрешение на файл 755?
14. Что такое SELinux и зачем он нужен?
15. Как определить PCI-устройство в системе, например, RAID controller?
16. Как переименовать устройство, например, сетевую карту или диск?
17. Что такое LVM? Какие знаете примеры использования?
18. Что такое root reserved space?
19. Что такое exit code и как его узнать?
20. Почему вывод df -h указывает, что на диске занято мало места, но система не дает записать файл с сообщением “no space left on device”?
21. В чем разница между command1 & command2 и command1 && command2, а также command1 && command2 || command3?
22. Из сети резко вырос исходящий трафик на 25-й порт. Как, имея доступ на гейтвей, обнаружить вредителя из внутренней сети?
23. Как затюнить параметры Linux Kernel?
24. Что такое ulimits?
25. В чем разница между символическими и hard links?
26. Что такое фрагментация ext3 и ext4?
27. Зачем файловые системы ext* резервируют 5% места?
28. Как увеличить размер файловой системы?
29. Можем ли мы уменьшить размер файловой системы?
30. Что такое chroot и для чего он нужен?
31. У нас есть Linux box с 2 Гб оперативной памяти и Java-приложение, которое пытается выделить 4 Гб во время запуска. Удастся ли это?
32. Есть приложение, которое читает файл, который пользователь пытается удалить. Что случится? Можно ли удалить этот файл? Можно ли восстановить этот файл?
33. Какие механизмы создания процессов в Linux вы знаете?
34. Сравните systemd и init system.
35. У вас есть папка с большим количеством файлов, и вы хотите удалить все файлы с именами, начинающимися на A (прописная буква). Но команда rm –f A* выдает Argument list too long. Как удалить эти файлы?
36. Вы начинаете удалять файлы первым методом из предыдущего вопроса, но каждый rm запрашивает подтверждение. Это очень долго. Как можно ускорить эту операцию?
Networks
37. Расскажите о модели OSI. Опишите функции и назначение каждого уровня.
38. Какие сетевые топологии вы знаете? Опишите разницу между ними.
39. Зачем нужен IP-адрес, если MAC-адрес уникален? Разве мы не можем общаться только по MAC-адресу?
40. В чем разница между концентратором и коммутатором L2 в сетях Ethernet?
41. Что такое VLAN и для чего существует разделение на виртуальные локальные сети?
42. Какой номер порта используется для PING-коммуникации?
43. Что такое сеанс связи? Какой алгоритм использует TCP для доставки?
44. В чем основное отличие между TCP и UDP?
45. Зачем нам маршрутизатор по умолчанию?
46. Как хост решает DNS по умолчанию?
47. Компьютер начал получать IP-адрес из другой сети (есть подозрение, что в сети работает другой DHCP-сервер): как его найти и отключить? Какие методы защиты от такой проблемы?
48. Мы будем мигрировать сайт на новый IP-адрес. Как сделать, чтобы пользователи этого практически не заметили?
49. Что такое socket?
50. Как узнать, какие удаленные хосты подключаются к хосту через порт 8888? (с помощью команд и не используя /proc или /sys).
51. У нас есть несколько сетевых карт. Как увеличить пропускную способность сервера?
52. Как проверить открытые порты на удаленном сервере без команд Netcat или Nmap Linux?
Container orchestration
53. В чем преимущества Kubernetes как платформы?
54. Что такое control plane и из каких компонентов состоит?
55. Какие CNI вы использовали и чем они отличаются?
56. Чем отличается managed Kubernetes от self-deployed?
57. Как можно контролировать размещение подов в кластере? (taints/tolerations, affinities, topologies etc.)
58. Скейлинг кластера. Cluster autoscaler vs HPA vs VPA? Как сделать zero-downtime node decommission/cluster upgrade? PDB? Lifecycle hooks?
59. Какие способы для внешнего доступа к кластеру? ingress, node port, port-forward и т. д.
60. С каким PID запускается процесс в контейнере?
61. Что лучше использовать для изоляции окружения – Vagrant или Docker?
62. Какой инструмент оркестрирования контейнеров использовали? (Swarm, Kubernetes, Openshift, Rancher и т. д.)
63. Что происходит в Kubernetes после запуска kubectl (API, ReplicaSet Controller, storage back-end, scheduler, kubelet, worker node, pod)?
64. Какая разница между pod и контейнером в K8s?
65. Как мы можем сделать любой микросервис, работающий на K8s, доступным из внешней среды?
Виртуализация и контейнеризация
66. Какие типы виртуализации вы знаете?
67. Как работает Docker на macOS/Windows?
68. Что такое Docker-image и Docker-контейнер? Как они между собой связаны?
69. Каковы основные отличия между контейнерами докеров и виртуальными машинами?
70. Что такое image layer? Какое максимальное количество layers возможно? Почему нужно пытаться иметь малое количество layers? Какое оптимальное количество?
71. Как в виртуальной машине изменить размер диска после создания? Что нужно сделать с гостевой ОС?
72. Как в Docker реализовано ограничение ресурсов?
73. Существует виртуальная машина, к которой потерян доступ. Как, имея доступ к диску, восстановить root пароль/SSH-ключ?
74. Оптимизировать Dockerfile, объяснить, что и почему так:
FROM golang
RUN apt install -y pkg1 pkg2 pkgN # Dependencies for app
COPY. .
RUN go build -o app main.go
CMD ./app
75. Что такое IPVS и какой у него функционал?
76. Какова структура API в Kubernetes?
77. Что такое operators и зачем они нужны?
CI/CD
78. Какие стадии должны быть в любом пайплайне (lint, test, build, deploy etc.)?
79. Как и где хранить build artifacts?
80. Что такое артефакт?
81. Есть два бренча: dev и stage. Мы забросили Dockerfile в dev, а затем сбилдили в dev и stage. Это будет одним артефактом или разными?
82. Что вы использовали для автоматизации настройки Jenkins и GitLab CI?
83. Сравните CI инструментов: Jenkins, GitLab CI, AWS Code Pipeline, GCP cloudbuild, GitHub actions, Circle CI.
84. Deployment strategies. Какие существуют и чем отличаются (recreate, blue-green, canary etc.)?
85. Как реализовать СI/CD для программы, которая зависит от нескольких других программ?
86. GitOps. В чем его преимущества и недостатки?
Clouds and Automation
87. Какова роль и преимущества облачных сервисов для DevOps?
88. Что такое immutable infrastructure? Как достичь? В чем преимущества и недостатки? Packer, AMI и т. д.
89. Структура Terraform. Как организовать multi-environment project? Terraform workspaces?
90. Лучшие практики по использованию многих Terraform states.
91. Как организовать доступ команде разработчиков к AWS/GCP/Azure? Role-based access, assume role, SSO.
92. Что такое Terraform provider, module?
93. Как версионировать Terraform modules?
94. Когда нужно использовать local-exec и remote-exec?
95. Что такое golden image и как его создать?
Monitoring/Logging
96. Как мониторинг помогает поддерживать всю архитектуру системы?
97. Какие инструменты мониторинга вы использовали?
98. Что такое медиана и процентиль?
99. Что такое SLI, SLO, SLA? Зачем это нужно?
100. Архитектура системы для сбора логов, ELK, EFK etc. Как сохранить логи при отказе хранилища? Нужно ли использовать для этого брокер сообщений? Нужно ли делать throttling/rate limits?
101. Prometheus long-term storage. Какие варианты?
102. Как работает Prometheus?
103. В чем принципиальное отличие между Grafana и Kibana?
104. В чем главное отличие между Ansible and Terraform?
105. Что такое SAAS monitoring и какие виды знаете?
106. Если вы используете Datadog/NewRelic, то как нам отслеживать падение инструментов мониторинга?
107. Что такое distributed tracing и error tracking systems? Как вы думаете, когда следует их использовать?
Information Security
108. В чем разница между RBAC и ABAC?
109. В чем заключается XSS атака? SQL injection? Что такое CSP?
110. Какие базовые меры можно предпринять для защиты SSH-соединения?
111. Root-пароль неизвестен или потерян. Какова процедура восстановления?
112. Как управлять правами на файловой системе в Linux?
113. Что такое Firewall?
114. Чем отличается stateless от stateful фаерволов?
115. Сколько таблиц в iptables?
116. Можно ли настроить трансляцию NAT с помощью iptables? Какую таблицу следует использовать?
117. Какую таблицу используют для смены заголовков пакетов?
118. Если вам ломают Linux-сервер, то как более эффективно блокировать трафик с IP-адресов?
119. Принцип работы GCP Firewall: можем ли мы профильтровать трафик на Load Balancer?
120. Что такое SELinux?
121. Можно ли полностью отключить SELinux на лету?
122. С какими secrets management systems вы работали?
123. У нас есть сервер NAT, и мы хотим обеспечить доступ по IP к серверу снаружи. Как нам это реализовать?
123. Чтобы попасть на сервер клиента, нужно залогиниться на 4+ jump хоста. Как автоматизировать? Где мы будем хранить наш SSH-ключ?
Development
125. Что такое cookies? Зачем нужны? JWT?
126. Что такое feature toggles и зачем они?
127. Что такое TDD (Test Driven Development) и BDD (Behaviour Driven Development)?
Databases
128. Что такое индекс и что такое ключ?
129. Каковы преимущества и недостатки индексов?
130. Представьте, что вы разрабатываете систему биллинга, которая должна обрабатывать тысячи счетов. Какую стратегию обновления данных вы бы выбрали?
131. Какие методы чаще всего используют для масштабирования реляционных баз данных?
132. Опишите механизм транзакций БД.
133. Как мы можем удалить таблицу или базу данных?
134. Как найти медленные запросы в MySQL/PostgreSQL?
135. Какие SQL-операторы манипулирования данными вы знаете?
136. Можно ли вывести список баз данных/таблиц через CLI? Как мы можем переключаться между базами данных MySQL/PostgreSQL?
137. Какие storage engines в MySQL вы знаете? Какие отличия?
138. Как реализована репликация MySQL master-master? Сколько серверов MySQL может быть задействовано в таком взаимодействии?
139. Как работает репликация MySQL/PostgreSQL? Какие параметры должны быть настроены для репликации?
140. Сравните SQL и NoSQL.
141. Sharding vs replication?
142. Какие есть виды индексов? Когда и зачем использовать?
143. Требования к схеме БД. Character sets, collations, default, not null и т. д.
144. Мы мигрируем MySQL/PostgreSQL из on-prem в облако. Как нам это сделать с минимальным даунтаймом?
145. Зачем и как тестировать перформанс баз данных?
Практические задания
146. Напишите Terraform module для инфраструктуры тестового сервиса в AWS.
147. Напишите hello-world программу на ваш выбор и сформируйте для нее helm chart/kustomize.
148. Как организовать деплой без downtime?
149. Опишите способы troubleshooting для Docker-контейнера.
150. Разобрать и объяснить структуру CI/CD pipeline (на примере gitlab.yml).
151. Продемонстрируйте навыки работы с GitOps, опишите деплоймент простенькой программы.
152. Как организовать деплой веб-приложения, запущенный на нескольких серверах без (или с минимальным) downtime?
153. Как с помощью Ansible узнать default gateway для пула серверов, и, если он отличается от желаемого, записать строчку «hostname: gateway» в файл на локальной машине?
Senior
Linux
1. Что может создавать высокую нагрузку на CPU (процессы приложений потребляют очень мало ресурсов CPU)?
2. У нас нет команд ifconfig, ip, и поставить мы их не можем. Как нам узнать ip address, mask, network, routes?
3. Что такое suid, sgid и sticky?
4. Что тюнилось с системой для нагрузки трафика 1GB, 10G, 40G+?
5. Что тюнилось с системой для высокой нагрузки на диск?
6. Что такое Linux namespaces?
7. Что такое Ceph, как работает?
8. Что нужно тюнить для Ceph?
9. Что произойдет, если /dev/sda1 перенесем в /root?
10. Мы удалили /dev/sda1. Как нам его восстановить? Что такое pseudo-devices?
11. Нам хакнули сервер, и в директории /var/www создали два миллиона файлов небольшого размера. Если использовать команду cd /var/www и затем rm -rf*, то у нас зависнет терминал. Как удалить файлы?
12. На каком уровне работает iptables?
13. Что такое eBPF и зачем нужен?
14. У вас есть файл, содержащий IP-адреса серверов (по одному в строке). Есть SSH доступ к этим машинам, и вам нужно выполнить задание (например, установить список пакетов на все узлы). Объясните, как можно это сделать.
Networking
15. В чем отличия между IPv4 и IPv6? Зачем мы мигрируем на IPv6?
16. Сосуществование IPv4 и IPv6: что это значит?
17. Действительно ли работают межсетевые экраны с поддержкой IPv6?
18. Как работает DHCPv6? Чем она отличается от DHCPv4?
19. Как фрагментируются пакеты IPv6 и чем это отличается от IPv4?
20. Нужно ли с IPv6 больше использовать NAT?
21. Что такое DPDK?
22. Что такое SR-IOV? В чем разница между DPDK и SR-IOV?
23. Что такое NetFlow и зачем нужен?
24. Что такое OpenFlow?
25.Что такое SDN и какие контроллеры вы знаете? Сравните контроллеры.
Разное
26. Что такое SDLC?
27. Расскажите о последнем опыте реализации архитектуры для сервиса.
28. Какой самый тяжелый скрипт писали?
29. Что такое configuration drift? Почему это происходит и как это усложняет жизнь инженерам\SRE\Ops?
30. Расскажите об архитектуре, за которую вы отвечаете, и укажите, как она масштабирована и отказоустойчива.
31. Назовите три важных KPI для DevOps-специалиста.
32. Как работает Kafka (clusters(brokers, controllers), topics, partitions)?
33. GitOps: Rancher Fleet vs Flux vs Argo?
34. Как использовать GitOps для обновления документации DevOps-приложений?
35. Расскажите об особенностях проектирования Kubernetes on-premise.
36. Как организовать On-call процесс для команды DevOps?
37. Опишите главные шаги загрузки операционной системы Linux.
Container orchestration
38. Service mesh. Что это такое и зачем нужно?
39. Cluster federation. Что это такое и зачем нужно?
40. Pod fine-grained access. Как реализовать? IRSA vs kube2iam vs kiam?
41. Как реализованы услуги в кубернетах?
42. Как дебажить трафик контейнера?
43. Что такое unikernel и зачем он нужен?
44. Почему коммьюнити переезжает из Docker containerd?
Clouds and Automation
45. Какие преимущества и недостатки cloud-провайдеров?
46. Cost оптимизация. Какие инструменты? Spot/preemptible instances, reservations?
47. Как организовать multi-account, multi-region cloud setup?
48. В чем разница между частными и публичными сетями в AWS?
49. AWS Lambda: имели ли опыт работы?
50. Когда следует переходить на AWS Lambda? Когда не стоит? Аналогичные решения в GCP или Kubernetes?
51. Когда лучше использовать CloudFormation, а когда Terraform?
CI/CD
52. Что такое state в контексте использования Terraform?
53. Какие существуют branching strategy? На что опираться при выборе?
54. Как реализовать feature/dynamic environments?
55. Как сделать эмуляцию ресурсов cloud-провайдера для локального тестирования и ускорения разработки?
56. Что такое MultiCloud?
57. Что такое Cloud-Agnostic и когда он потребуется?
58. Что такое Hybrid-Cloud и с какими решениями вы работали?
Information Security
59. Как должны храниться пароли в базах данных (Salt&Pepper, Rainbow Tables, Adaptive Hashing)?
60. Как передавать секреты в application (Secrets management)?
61. Сравните CI/CD SAST и DAST?
62. Какие вы знаете Kubernetes security practices? RBAC? OPA? Какие недостатки RBAC и какие кейсы знаете?
63. Расскажите о защите от DDOS атак, WAF.
64. Что такое Rootless containers и для чего он нужен?
65. Что такое AppArmor и Seccomp и зачем они нужны?
66. Приходилось ли работать с Falco? Если да, то что реализовывали?
67. HashiCorp Vault и как правильно передать нам секреты в контейнере и CI pipeline?
68. Что такое Admission Controllers и какие вы использовали?
69. Как хранятся секреты etcd? Как просмотреть ресурсы в etcd?
70. Чем проверяете на уязвимости ваш Kubernetes cluster?
71. Что такое Secure SDLC?
72. Что вы знаете о Cloud Infrastructure Attack via a Pull Request и как этого избежать?
Observability
73. Что такое observability и чем отличается от обычного мониторинга? Какие особенности необходимо учитывать в микросервисной архитектуре (tracing)?
74. Что такое SLI, SLO, SLA и зачем они нужны? Для чего используют error budget?
Databases
75. Что такое теорема CAP? Зачем это нужно?
76. Как работать с миграциями? Что делать в случае rollback? Как проверить, что миграция backward-compatible?
77. Опишите, как бы вы оптимизировали работу базы данных? (БД по выбору кандидата) Slow queries, buffers, thread pools?
78. Зачем нужно тестировать перформанс базы данных и какими инструментами?
Практические задания
79. Представьте, что вы CTO Booking или Airbnb. Какие бы вы принимали решения касательно:
языков программирования.
Infrastructure as a Code.
архитектуры инфраструктуры.
настройки CI/CD.
80. У вас есть файл, содержащий патчи в директории. Например:
/var/tmp/temp/file1.c
/var/tmp/file.ext
/var/tmp/temp/
etc... один путь в строке. Если путь заканчивается на '/' — это путь в каталог. Вам нужно восстановить это дерево каталогов с пустыми файлами в другой файловой системе. Напишите bash-скрипт.
81. Представьте, что вам нужно убедить Spotify, использующего AWS, перейти на GCP. Как вы будете мотивировать Spotify мигрировать на GCP?
82. Есть сервисная компания, предоставляющая сервис трекинга перевозок. Есть клиенты, которые не желают, чтобы их данные процессировались в AWS. Как нам реализовать multi-cloud solution?
Редакция DOU выражает благодарность за помощь в подготовке статьи: Владу Волошину, Павлу Петриченко, Виталию Гарбулинскому (BrightLocal), Евгению Думе, Сергею Яремчуку, Вадиму Шкилю, Александру Билюку, Александру Нежинскому, Владиславу Граму, Станиславу Коленкину, Олегу Миколайченку, Антону Гаврилову.
Співбесіда з Android. 250+ питань для Junior, Middle, Senior
Автор: Влад Сверчков
Junior
1.1 Базовые вопросы
1.2 Алгоритмы, структуры данных, хранение данных
1.3 Работа с сетью
1.4 Многопоточность, Java Core, RxJava
1.5 Android SDK, Kotlin
1.6 Другое
1.7 Практические задачи
Middle
2.1 Базовые вопросы
2.2 Алгоритмы, структуры данных, хранение данных
2.3 Работа с сетью
2.4 Многопоточность, Java Core
2.5 Android SDK
2.6 Kotlin
2.7 RxJava
2.8 Тестирование
2.9 Другое
Senior
3.1 Базовые вопросы, архитектура
3.2 Многопоточность
3.3. Java Core, Android SDK, Kotlin
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 3 ноября 2021 года. Оригинальная версия на украинском языке доступна по ссылке.
Если вы готовитесь к собеседованию по Android — или проходить, или проводить — возможно, этот перечень вопросов пригодится вам. Редакция DOU поинтересовалась у разработчиков, проводящих технические интервью в компании в Украине, о чем они спрашивают кандидатов.
Это уже десятая статья из рубрики «100+ технических вопросов»; ознакомиться с вопросами для других языков программирования на DOU.ua на украинском языке вы сможете, перейдя по ссылке.
Junior
Базовые вопросы
1. Назовите основные принципы ООП.
2. Что такое класс? Что такое интерфейс? Какая между ними разница?
3. Назовите базовые типы данных.
4. В чем отличие примитивных типов от объектов?
5. Какая разница между абстрактным классом и интерфейсом?
6. Что такое паттерны проектирования? Какие паттерны вы знаете?
7. Чем отличается Java от Kotlin?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Kotlin, а также статье Kotlin vs Java: что лучше для Android-разработки? и вебинаре Структуры данных в Java и Kotlin.
Алгоритмы
8. Что такое алгоритм и как выбрать правильный?
9. Что такое сложность алгоритма? Как и с помощью чего её можно вычислить?
10. Что такое нотация big-O?
11. Что такое рекурсия?
12. Какие алгоритмы сортировки вы знаете?
Структуры данных
13. Расскажите о таких структурах данных, как List, Set, Map?
14. Какая разница между ArrayList и LinkedList?
Ответы на эти вопросы вы найдёте в вебинаре Структуры данных в Java и Kotlin.
Хранение данных
15. Как можно хранить данные в Android?
16. Когда следует использовать SharedPreferences?
17. Из каких компонентов состоит библиотека Room?
18. Что такое @PrimaryKey, @Ignore, @Embedded, @TypeConverters в Room?
19. Для чего нужна миграция в базах данных?
Ответы на некоторые из этих вопросов вы найдете в видео курсе SQLite. Базы данных в Android приложениях (урок 2, урок 3).
Работа с сетью
20. Что такое JSON, XML?
21. Какие варианты реализации работы с сервером?
22. Что такое REST?
Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2), Android Углубленный (урок 9).
Многопоточность
23. Что такое процесс?
24. Что такое поток?
25. Для чего используют ключевое слово synchronized?
26. Зачем синхронизировать потоки?
27. Какая разница между синхронным и асинхронным исполнением?
28. Как мы можем создать поток в Java?
29. Что такое deadlock?
30. Какие варианты реализации многопоточности есть в Android?
31. Что такое main thread? Какие операции нужно выполнять на main thread, а какие нельзя делать?
Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).
Java Core
32. Что такое Exceptions? Зачем они нужны?
33. Зачем используют ключевые слова final, finally и finalize?
34. Что такое абстрактный класс? Что такое интерфейс?
35. Что такое анонимный класс? Использовали ли на практике? Для чего?
36. Что такое статический класс (static class)?
37. Что такое enum? Зачем его используют?
38. Можем ли мы сделать конструктор приватным?
39. Какая разница между ключевыми словами throw и throws?
40. Какая разница между Error и Exception?
41. Какая разница между checked и unchecked exception?
42. Что такое Object class и какие методы он имеет?
43. Какие существуют модификаторы доступа для классов? Какая разница между ними?
44. Что такое итератор?
45. Как безопасно удалить элемент из коллекции?
46. Зачем нам переопределять equals() и когда не нужно это делать?
47. Какой должен выполняться контракт при переопределении equals()?
Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Базовый (урок 2, урок 4, урок 6, урок 7, урок 8, урок 9).
RxJava
48. В чем разница между map() и flatMap() в RxJava?
49. Когда используете observeOn(), а когда subscribeOn()?
50. Как можно обработать ошибки в RxJava?
51. Какие schedulers знаете в RxJava? Назовите их отличия.
52. Что такое Disposable? Зачем его используют?
53. В чем разница между Hot и Cold Observables? Назовите примеры в RxJava.
Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).
Android SDK
54. Какие базовые Android-компоненты можете назвать?
55. Что такое ContentProvider?
56. Какие типы Service знаете?
57. Что такое BroadcastReceiver и какие типы существуют?
58. Для чего используют механизм фрагментов?
59. Опишите жизненный цикл Activity.
60. Опишите жизненный цикл Fragment.
61. Есть ли у Fragment контекст? Если да, то как его получить?
62. Чем отличается Fragment от Activity? Зачем выдумали Fragment?
63. Что такое изменение конфигурации? Что происходит с приложением на Android при этом?
64. Что такое Intent? Что такое explicit/implicit Intent?
65. Что такое SharedPreferences?
66. Что такое ANR? Как избегать таких ситуаций?
67. Что такое DataBinding?
68. Что такое LiveData? Какие виды знаете?
69. Как создать ViewModel? Почему создавать ViewModel нужно именно так?
70. Что такое Context и зачем он?
71. Что такое AndroidManifest.xml? Зачем его используют? Что мы можем там декларировать?
72. Перечислите layout, с которыми работали? Когда и какой нужно использовать?
73. Расскажите, что нужно реализовать, чтобы отобразить список строк в RecyclerView.
74. Объясните паттерн ViewHolder. Для чего он применяется?
75. Что такое DiffUtil?
76. Расскажите о ConstraintLayout.
77. Для чего используют Group, Guideline, Barriers, Chains в ConstraintLayout?
78. У вас есть Activity с двумя Fragment'ами, у одного есть кнопка, у другого TextView. При нажатии кнопки изменяется TextView. Как вы реализуете это?
79. Что такое WorkManager? Когда используем?
Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2, урок 4, урок 5, урок 7), Android Углубленный (урок 3, урок 6, урок 9), Android User Interface (урок 3), Создание пользовательских элементов управления в Android (урок 9).
Kotlin
80. Как вы понимаете термин Null safety?
81. Что такое nullable и non-nullable типы? Какая разница между val и var?
82. Как задекларировать getter/setter для property?
83. Почему классы Kotlin по умолчанию final?
84. Что такое sealed class?
85. Что такое data classes?
86. Какая разница между sealed class и enum?
87. Почему у Kotlin нет checked exceptions?
88. Что такое Extensions? Использовали ли вы их на практике?
89. Что такое перегрузка операторов (operator overloading)? Зачем нужен этот механизм?
90. Как работают примитивы в Kotlin?
91. Расскажите об объекте Unit в Kotlin.
92. Расскажите об объекте Any в Kotlin.
93. Как создать Singleton объект в Kotlin?
94. Что такое companion object?
95. Чем отличается const val от val?
96. Какие знаете модификаторы доступа?
97. Что означает модификатор lateinit?
98. Coroutines – что это за механизм? Использовали ли его на практике?
99. Зачем нужны Coroutines? Чем они лучше обычных тредов?
100. Что такое suspend-функция?
101. Что такое Job?
102. Что такое Dispatcher? Какие есть виды?
102. Что такое Scope?
103. Как писать Java compatible API в Kotlin?
Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.
Другое
104. Расскажите, что такое memory leak. Как избежать?
105. Как бы вы искали memory leak?
106. Расскажите о Dependency injection. Какие варианты реализации в Android?
107. Для чего нужна система контроля версий?
108. Что такое Git?
109. Для чего используем .gitignore-файл?
110. Расскажите о командах push, pull, fetch в Git?
111. Что такое merge и rebase? Какая разница?
112. Что такое CI? Зачем используем?
Ответы на некоторые из этих вопросов вы найдете в видео курсах Dependency Injection в Android-разработке, Основы работы с Git.
Практические задачи
113. Разверните Linked List. Отпишите о зацикленности в LinkedList или ее отсутствии.
114. Напишите функцию, которая вернет n первых неотъемлемых чисел:
un nMin(items: List<String>, n: Int): List<Int> {
//return n minimal non negative items
}
Пример вызова функции: nMin(listOf("1","-11","-12","22","100","-30",”2”, “5”), 3)
Ожидаемый результат: [1, 22, 100]
115. Что будет выведено в консоль? Объясните результат.
var globalId = 0
data class User(val name: String) {
val id = globalId++
}
fun main(args: Array<String>) {
val user1 = User("User")
val user2 = User("User")
println(user1)
println(user2)
println(user1 == user2)
}
116. Исправьте все ошибки в коде:
class Animal
class Dog: Animal {}
117. Для коллекции items:
val items = listOf(1, -2 ,-3 , 4, 5, 0, 2, -2)
Подсчитайте количество отрицательных элементов.
Вычислите среднее арифметическое значение отрицательных и неотрицательных чисел.
Middle
Базовые вопросы
1. Нужно ли придерживаться SOLID-принципов? Почему да/нет?
2. Какие паттерны использовали на практике? Приведите примеры.
3. Опишите паттерны MVP и MVVM. Какие из них использовали? Какой предпочитаете? Знаете ли/использовали другие паттерны?
4. Почему слой Model должен быть отделен от View или Presenter?
5. Что такое инверсия зависимости (dependency inversion)?
6. Объясните пример паттерна Singleton. Где его использовать в Android?
7. Объясните пример паттерна Observer. Где его использовать в Android?
8. Объясните пример паттерна Builder. Где его использовать в Android?
9. Как вы понимаете термин «архитектура приложения»? Зачем это вообще нужно? Почему инженеры пытаются усложнить процесс разработки и тратят время на проектирование архитектуры? Может, лучше сэкономить ресурсы и пойти по простому пути — держать весь код в одном файле?
10. Что такое иммутабельный объект? Для чего его используют? Как сделать иммутабельный объект в Java?
11. MVP vs MVVM – в чем основное отличие?
Ответы на некоторые из этих вопросов вы найдете в видео курсах Архитектура Android приложений (урок 1-5), Создание пользовательских элементов управления в Android (урок 4), SOLID принципы в Java.
Алгоритмы
12. Есть много алгоритмов сортировки. Возможно ли выбрать один самый быстрый и использовать его повсюду? Почему да/нет?
13. В чем сложность поиска произвольного элемента в ArrayList? В LinkedList?
14. Какие алгоритмы используют в Android/Java коллекциях под капотом?
Структуры данных
15. HashMap. Используете ли вы на практике? Если да, то зачем? Как она работает изнутри?
16. Какая разница между HashMap и LinkedHashMap?
17. Что такое бинарное дерево?
Сохранение данных
18. Как бы вы реализовали сохранение зашифрованных данных в SharedPreferences? Базу данных?
19. Как реализовать миграцию таблицы, где нужно из non-nullable поля сделать nullable поле?
Работа с сетью
20. Расскажите, какие методы можно применить в REST API? Зачем какой нужен?
21. Что можно использовать, кроме REST API, для работы с сервером?
Многопоточность
22. Что такое Thread Pool? Каковы его особенности?
23. Что такое Executor/ExecutorService? Какую задачу выполняют и как использовать?
24. Какие есть виды Executor?
25. Какая разница между методами start() и run() в классе Thread?
26. На что указывает ключевое слово synchronized? Какова его основная функция?
27. Модификатор volatile. Приходилось ли использовать? Зачем нужен?
28. Знаете ли вы о таком понятии, как «эффект гонки» (race condition)? Как это предотвратить? Какие механизмы в Java для предотвращения этого?
29. Что такое атомарная операция?
30. Как остановить поток в Java? Можно ли продолжить выполнение потока после его остановки?
31. Знаете ли вы о потокобезопасных коллекциях в Java/Android? Приходилось ли их использовать?
32. Какие стратегии можно применить, чтобы добиться потокобезопасности?
33. Какие варианты реализации потокобезопасности кода есть у Kotlin?
34. Как сделать переменную потокобезопасной?
35. Что такое Mutex и Monitor? Кто может выступать в роли монитора?
36. Что такое атомарные операции?
37. Почему инкрементация и операции с long не являются атомарными?
38. Какие классы атомарных переменных?
39. Что такое устаревшие данные (stale data)? Как избежать этого эффекта?
Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).
Java Core
40. Механизм Generics. Какую проблему решает?
41. Что такое soft reference, weak reference?
42. Что такое сериализация объекта? Какую проблему она решает? Какие стандартные механизмы у Java?
43. Какой контракт существует между equals() и hashCode()?
44. По вашему мнению, почему строки в Java сделаны иммутабельными?
45. Можем ли мы задекларировать пустой интерфейс? Если да, то зачем?
46. Что такое String pool? Зачем он нужен?
47. Что такое StringBuilder, какую проблему он решает?
48. Что такое Stack в JVM и какие данные там хранятся?
49. Что такое Heap в JVM и какие данные там хранятся?
50. Что такое garbage collector, как он вообще работает? Каковы реализации GC?
Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Углубленный (урок 5).
Android SDK
51. Назовите основные изменения в версиях Android.
52. Как реализовать IPC в системе Android?
53. Как реализовать отложенную задачу?
54. Что такое Doze Mode?
55. Что такое App Standby mode?
56. Что такое AIDL и зачем он нужен? Какие типы данных поддерживаются?
57. Что такое Multidex?
58. Что такое KeyStore API?
59. Что такое PendingIntent?
60. Как безопасно хранить user-sensitive данные?
61. Какие методы защиты приложения?
62. Что такое SSL/TLS Pinning? Как его реализовать в Android?
63. Что такое ViewBinding?
64. Для чего нужны методы onSaveInstanceState/onRestoreInstanceState? Что такое permissions? Как запросить permissions?
65. Что такое Intent? Что такое Explicit/Implicit Intent? Что такое Sticky Intent, Pending Intent?
66. Какие типы данных мы можем положить в Bundle?
67. В чем разница между Serializable и Parcelable?
68. Если фрагмент для работы нуждается во входных данных, каким образом будет правильно передать их фрагменту?
69. Что такое ViewModel? Какие ее свойства?
70. Объясните работу ViewModel с Jetpack. Что такое ViewModelProviders, ViewModelProvider.Factory?
71. Что такое LiveData? Зачем её используете?
72. Какая связь между LiveData и LifecycleOwner?
73. Приведите пример LifecycleOwner?
74. Что такое Looper?
75. Использовали ли HaMeR фреймворк (Handler/Message/Runnable)? Для чего он?
76. Какую информацию содержит контекст? Какие типы контекста знаете?
77. Для чего используют Content Provider?
78. Что такое Data Binding? Что такое View?
79. Преимущества Fragments против View?
80. Как работает Content Provider?
81. Какая разница между Single Activity и Multiple Activity?
82. Какие виды Context знаете? Где какой использовать?
83. Объясните работу BroadcastReciever и его реализацию.
84. Зачем LocalBroadcastManager?
85. Для чего нужен MotionLayout?
86. Опишите, как реализовать анимацию в MotionLayout.
87. Как можно обнаружить проблемы в скорости UI и устранить их?
88. Расскажите о вариантах реализации custom view.
89. Что делают методы onMeasure, onLayout, onDraw во View?
90. Как воплотить анимацию при переходе между Activity-фрагментами?
91. Когда необходимо использовать foreground service вместо service?
92. Когда использовать workmanager, а когда service?
93. Есть ли у workmanager лимиты для выполнения работы?
94. Расскажите о Jetpack Compose. Зачем придумали основной принцип работы, как устроено?
95. Что такое WakeLock?
96. Что такое AlarmManager? Какие особенности работы?
Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 4, урок 7), Android Углубленный (урок 6, урок 8), Создание пользовательских элементов управления в Android (урок 9).
Kotlin
97. Чем отличается работа с Exceptions в Kotlin и Java?
98. Что такое платформенные типы?
99. Что такое нелокальный return?
100. Для чего нужны reified generics?
101. Какая разница между Unit, Any, Nothing?
102. Расскажите о функциях высшего порядка, лямбда, функциях, которые могут использоваться в качестве аргумента.
103. Что такое inline-модификатор? Noinline?
104. Какая разница между crossinline и noinline?
105. Какие типы конструкторов вы знаете?
106. Что такое Flow? Что такое SharedFlow?
107. В чем разница методов run, let, apply, also, with, use?
108. Что произойдет, если в классе переопределить метод hashCode следующим образом: override fun hashCode(): Int = Random.nextInt()? А если так: override fun hashCode(): Int = 1?
109. Расскажите о Flow. В чем разница между Hot и Cold Flow?
110. Что такое деструктурирующее объявление? Что нужно сделать, чтобы иметь возможность использовать его для своего класса? Какие проблемы могут возникнуть с таким объявлением?
111. Для чего использовать data class? Почему нельзя работать с обычным классом?
112. Приведите пример делегатов в Kotlin?
113. Как реализовать кастомный делегат?
114. Объясните, как работает suspen-функция? Что такое continuation?
115. Как обрабатывать ошибки в Coroutines?
116. Что такое SupervisorJob и когда применяется?
117. Как остановить/отменить Coroutines?
Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.
RxJava
118. В чем разница между flatMap(), concatMap(), switchMap()?
119. Какие Subjects вы знаете в RxJava, чем отличаются от Observable?
120. Чем отличается Observable от Flowable?
121. Что такое backpreassure? Какие стратегии есть для решения?
122. Что такое Single, Maybe, Completable?
123. Какие варианты обработки ошибок есть, кроме onError?
Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).
Тестирование
124. На какие группы можно поделить тесты (Unit (JUnit) и Instrumental или UI Tests (espresso))?
125. Чем отличаются Unit и UI тесты (контекст)?
126. Расскажите, какие библиотеки использовали для mock?
127. Как тестировать DB?
128. Как “замокать” network layer в инструментальных тестах?
Ответы на некоторые из этих вопросов вы найдете в видео курсе Unit тестирование для Android разработчиков.
Другое
129. Расскажите, с какими DI-фреймворками работали.
130. Расскажите о Dagger Hilt.
Senior
Базовые вопросы
1. Расскажите о функциях высшего порядка. Когда они нужны?
2. Опишите, как происходит процесс деплоя Android-приложения.
3. Расскажите о многомодульной архитектуре. Зачем используют и когда ее нет смысла использовать?
4. Вам нужно написать простое приложение для работы с рецептами (несложное, имеет экран списка, поиска и детали). Оно должно работать с определенным API для получения/модификации вашего списка рецептов и хранить его локально в БД для отображения, если интернета нет. Опишите, как бы вы создавали приложение такого типа? Из каких уровней оно бы состояло, каково предназначение каждого уровня? Представьте, что в этом приложении необходимо добавить возможность изменять основную картинку рецепта (т. е. получать новые данные из галереи/камеры и загружать их на сервер через API) и это реализовано на экране с подробным описанием рецепта. Вам пришел запрос сделать такой же функционал и на экране список рецептов. Как вы это сделаете?
Архитектура
5. Как организовать CI/CD для Android-проектов?
6. Различия архитектурных подходов в Android. Какие и когда лучше использовать?
7. Как вы понимаете Clean Architecture?
8. Опишите основные отличия между MVC/MVP и MVVM. Как MVVM стал одним из рекомендованных паттернов?
Ответы на некоторые из этих вопросов вы найдете в видео курсе Архитектура Android приложений.
Многопоточность
9. Какие еще знаете механизмы синхронизации данных, кроме synchronized?
10. Что такое переключение контекста (context-switching), когда речь идет о многопоточности?
11. Что мы понимаем, когда говорим о «честной» блокировке (fair lock)?
Java Core
12. Если бы пришлось имплементировать иммутабельный класс на Java, как бы вы это сделали?
13. Что такое Java Memory Model?
14. Сравните принципы композиции и наследования (Composition vs Inheritance).
Android SDK
15. ViewModel сохраняет свое состояние при повороте экрана? Как это возможно? Можете ли предложить, как сделать такой механизм?
16. Android Architecture Components. Что из этого приходилось применять на практике? Какие задачи решали?
17. Приходилось ли исследовать «утечки» памяти? Какие инструменты использовали для этого?
18. Представьте, что у вас есть экран со списком товаров. Во время скроллинга вы замечаете, что рендеринг не плавный, в логах много фреймов скипается и вообще-то экран тормозит. Что будете делать, чтобы улучшить ситуацию?
19. Если бы была задача написать приложение для интернет-магазина с нуля, какие технологии/подходы выбрали бы?
20. Приведите пример применения GoF-паттернов в Android SDK.
Kotlin
21. Опишите взаимодействие кода Kotlin и Java.
22. Что изменилось в обработке ошибок в Kotlin, если сравнить с Java?
23. Что такое делегированные характеристики (Delegated properties)?
Благодарим за эту статью Виктора Чистякова, Михаила Дьяченко, Влада Тищенко, Александра Романишина, Андрея Люшенка, Дмитрия Пашко, Вячеслава Сергеева, Антона Козленка, Артема Грищука, Евгения Трощия, Романа Белоконя, Константина Красильникова, Сергея Харченка, Андрея Друка, Виктора Косенко.
Java vs JavaScript
Автор: Влад Сверчков
Чому назви схожі?
Популярність
Сфери застосування
Продуктивність
Динамічна типізація в JavaScript vs строга типізація в Java
Простота вивчення
Зарплата
Підсумки
Всім привіт!
Друзі, ми продовжуємо серію статей, у яких порівнюємо різні мови програмування. Перша стаття була присвячена Python і Java – двом досить потужним та універсальним мовам, без яких важко уявити сучасне розроблення. Озброївшись об'єктивністю та неупередженістю, ми дослідили найважливіші (для новачків) особливості кожної з них, а вам надали всі результати у компактному та зручному вигляді.
Відповідь на запитання “Так яка мова краща?” ми не давали, оскільки вважаємо її недоречною — кожна мова по-своєму гарна у вирішенні завдань одного типу і менш ефективна у вирішенні завдань іншого типу. Ви самі обираєте інструмент в залежності від задач, які перед вами стоять. Так що спочатку визначтеся зі спектром завдань, що вас цікавлять, а лише потім шукайте мову, здатну ефективно з ними впоратися.
Отже, у цій статті на нас чекає порівняння двох на перший погляд схожих мов – Java та JavaScript (JS). HR`и та рекрутери часто їх плутають, а новачки та ті, хто випадково проходить повз програмування, взагалі ставлять між ними знак рівності. Насправді Java і JavaScript мають дуже мало подібностей і сьогодні ми торкнемося найцікавіших із них. Також будуть розглянуті головні аспекти кожної мови, сфери їх застосування та зарплатні очікування. Приступаємо!
Чому назви схожі?
Оскільки назви “JavaScript” та “Java” (читається як “джава” і “джаваскрипт”) підозріло схожі одна на одну, цілком логічно припустити певний взаємозв'язок між цими мовами. Щоб розібратися із цим питанням, звернімося до історії, а саме – до інтерв'ю від 2008 року, в якому брав участь творець JavaScript – Брендан Айх. У ньому засновник JS підтверджує, що подібність двох мов у назві – результат підписання ліцензійної угоди між Netscape і Sun, причому Sun – це компанія-розробник мови Java. Ідея угоди полягала в тому, щоб JavaScript став додатковою скриптовою мовою, яка йде разом з Java — мовою, що компілюється.
Якщо звернутися до колиски JS, то спочатку вона називалася Mocha, потім назву змінили на LiveScript. І лише після ліцензійної угоди вона стала JavaScript`ом, яким ми її знаємо і досі.
Популярність
Щоб порівняти популярність Java та JavaScript, звернімося до відомих веб-ресурсів, які займаються збиранням відповідної інформації. Отже, відповідно до минулорічного опитування Stack Overflow Developer Survey (65 000 респондентів), JavaScript знаходиться на першому місці, а Java – на п'ятому в рейтингу найбільш використовуваних мов програмування.
Якщо розглядати індекс TIOBE, а точніше – статистику за липень 2021 року, то Java на 2-му місці, а JavaScript – на 7-му. Індекс популярності мов програмування PYPL станом на липень 2021 року ставить на друге місце Java, а JavaScript – на третє.
Як можете бачити, різні ресурси по-різному рахують та визначають рейтингові місця цих двох мов, проте джава і джаваскрипт завжди входять до різноманітних ТОП-10, що безумовно підтверджує їхню перспективність.
Сфери застосування
Під час встановлення Java у вікні завантаження висвічується напис, який говорить: "Понад 3 мільярди пристроїв використовують Java", що вже показує – Java є серйозним гравцем на IT-арені. Такі цифри обумовлені універсальністю та кросплатформенністю даної мови. За допомогою Java створюється різний інформаційний продукт:
серверна частина веб-додатків;
Enterprise додатки для бізнесу;
мобільні додатки під Android;
хмарні сховища даних;
настільні додатки;
комп'ютерні ігри;
Big Data додатки;
додатки для трейдингу;
програмне забезпечення для банківських та інших систем.
Особливо добре Java себе почуває у мобільному розробленні під Android та в Enterprise проєктах, орієнтованих на вирішення бізнес-завдань великих компаній. Андроїд – найпопулярніша мобільна платформа у світі, а ентерпрайз розроблення саме по собі досить великогабаритне, цікаве і складне, що дозволяє тямущим програмістам заробляти солідні гроші в даній галузі.
Говорячи ж про JavaScript, не можна не згадати, що жодна клієнтська сторона сучасного веб-додатку не може існувати без тріади HTML, CSS і JavaScript. Ця мова лежить в основі найпопулярніших фронтенд-фреймворків Angular, Vue.js та бібліотек jQuery, React.js.
Також на JS за допомогою платформи Node.js ведеться розроблення ще й серверної сторони веб-додатків, створюються десктопні та мобільні програми (завдяки фреймворкам Electron, React Native), веб-ігри. Так що універсальність JavaScript і її інструментарій не менш всеосяжні, ніж у Java.
Продуктивність
Порівнювати продуктивність JavaScript, як мови фронтенд-розроблення, з Java – мовою серверного розроблення – ми не будемо з очевидних причин. Однак, що, якщо розглянути JS у якості інструмента створення бекенду на платформі Node.js? Хто кому поступається?
Тут отримує перевагу Java, яка спочатку задумувалася як потужна, надійна і мультиплатформенна мова, пристосована до багатьох умов розроблення. Вона є високопродуктивнішою за Node.js, але за це джава розплачується більшим споживанням пам'яті.
У Node.js же навпаки – програючи у продуктивності, вона менше важить і, відповідно, є гарною у підтримці завдань з низькою ресурсоємністю, де використання Java призводило б до надмірних витрат пам'яті.
Динамічна типізація в JavaScript vs строга типізація в Java
Строга типізація (далі – СТ) зобов'язує програміста оголошувати кінцевий тип змінних та функцій одразу при написанні коду. Такий підхід передбачає встановлення їх типів ще на момент компіляції. Представником мови програмування з подібним видом типізації є Java.
Динамічна типізація (ДТ) не ставить в обов'язкові рамки оголошення кінцевого типу змінних та функцій — це відбувається автоматично під час виконання самої програми. JavaScript використовує ДТ.
Мови програмування з ДТ найчастіше відрізняються більш простим синтаксисом, меншим обсягом коду та більшою швидкістю написання програм. Також цей вид типізації підходить для використання узагальненого програмування, яке передбачає застосування однієї і тієї ж ділянки коду під час роботи з різними типами даних – наприклад, алгоритм сортування, який здатний сортувати не тільки цілі числа, а й дійсні, і навіть рядки.
При цьому до переваг СТ можна віднести виявлення проблем, пов'язаних з типами, ще перед запуском програми, оскільки перевірки типів проводяться на моменті компіляції, що йде перед виконанням програми. Це призводить до більш високої швидкості роботи коду. Крім цього, СТ змушує дотримуватися своєрідної дисципліни при написанні коду, що усуває хаотичну ситуацію серед змінних та функцій і при цьому дає цілком ясне розуміння, який тип має кожна з них.
Питання “Яка типізація краща?” викликає бурхливі обговорення серед програмістів, отже цю відповідь нехай кожен наш читач дасть собі самостійно.
Простота вивчення
JavaScript дуже часто згадується як одна з найлегших мов для вивчення програмування разом із Python. Багато в чому це досягнення динамічної типізації, яка спрощує синтаксис, знижує кількість коду і робить його більш читаним. Таким чином, для вирішення однієї і тієї ж стандартної програмістської задачі на Java у вас вийде більше рядків коду, ніж при кодингу на JS.
Щоб почати працювати з JavaScript, вам навіть не потрібно встановлювати додаткове програмне забезпечення – достатньо текстового файлу з розширенням .html і написаним всередині тегу "script" коду. Результат роботи коду ви зможете побачити, відкривши файл у будь-якому сучасному браузері, оскільки всі необхідні інструменти для інтерпретації JavaScript вже вбудовані в Google Chrome, Mozilla Firefox, Opera та інші. Тим не менш, краще використовувати спеціальні редактори коду, які спростять його написання та зроблять кодинг максимально зручним.
Java – більш фундаментальна і поглиблена мова. Це робить її складнішою для вивчення, ніж JS, проте пропрацьованість джава дозволяє реалізовувати складну логіку зі збереженням гарної продуктивності.
Для написання першого коду на Java одним файлом не обійдешся – необхідно встановити Java SE Development Kit з офіційного сайту Oracle, а потім завантажити середовище розроблення, наприклад, IntelliJ IDEA. Тільки потім ви зможете розпочати написання свого першого “Hello World!”.
Зарплата
З оплатою праці програмістів за напрямками, які у даній статті розглядаються, все дуже добре. Якщо вірити зарплатному віджету на DOU.ua, то станом на грудень 2020 року Java та JavaScript розробники рівня Junior в Україні можуть претендувати на наступну суму:
Наведемо додаткове розшифрування:
I квартиль – це значення з/п, нижче за яке у впорядкованому за зростанням масиві перебуває 25% даних про заробітні плати;
III квартиль – значення з/п, вище якого у впорядкованому за зростанням масиві перебуває 25% даних про заробітні плати;
медіана – значення з/п, розташоване в середині массиву, що розглядається, котрий упорядковано за зростанням.
Як можете бачити, Java розробники мають сильніший зарплатний старт, ніж JS девелопери – це пояснюється тим, що роботодавець висуває більше вимог до джавістів на позицію Junior щодо знання технологій і мови в порівнянні з вимогами до Junior JavaScript розробника. Якщо JavaScript Dev. буде за своїм скілом приблизно рівний із джавістом, він зароблятиме не менше колеги.
Зарплати розробників рівня Middle:
Тут зарплати Java розробників також перевищують тих, хто займається розробленням на JS. Проте, розрив не такий вже й великий, тому не варто робити поспішні висновки. Тим більше, що в сучасному світі ЗП програмістів дуже залежить від навичок та досвіду роботи – чим більше ви інвестуєте у свої знання та вміння, тим більше роботодавець погодиться інвестувати у вас. Також варто згадати той факт, що розробники часто мають гарний соцпакет, який може покривати походи в спортзал, поїздки на транспорті, повноцінне офісне харчування, страховий пакет і багато іншого.
Підсумки
Підведемо все вищевикладене під спільний знаменник. Отже, JavaScript:
мова, яка є однією з найпопулярніших і найлегших для вивчення і при цьому не залежить від платформи;
архіважлива мова у FrontEnd розробленні, котра також успішно застосовується на BackEnd`і за допомогою платформи Node.js;
затребувана у розробленні мобільних та десктопних програм завдяки фреймворкам Electron, React Native;
дозволяє розробляти і FrontEnd, і BackEnd, що дає можливість реалізувати себе як Web Full Stack Developer за допомогою всього однієї мови програмування, яка покриває обидві стихії веб-розроблення;
має меншу продуктивність на BackEnd`і, ніж у Java (якщо використовувати популярну Node.js);
динамічно типізована мова, яка відрізняється відносною простотою синтаксису, високим ступенем лаконічності та читабельності коду;
мінімально необхідні інструменти для роботи з JS – текстовий блокнот та браузер;
Java:
одна з найбільш впливових та домінуючих мов програмування на ринку розроблення ПЗ;
швидка, безпечна та надійна мова програмування, здатна вирішувати завдання різних напрямків: BackEnd розроблення, ентерпрайз рішення, мобільні додатки під Android, банківські та трейдерські системи, Big Data, вбудовані системи, ігри тощо;
успішно застосовується у завданнях зі складною логікою;
особливо ефективна у мобільному розробленні під Android та в Enterprise проєктах, орієнтованих на задачі великого бізнесу;
статично типізована мова з набором строгих правил, які забезпечують гарну структурованість коду та високу продуктивність написаних програм.
Загальний пункт: грошова винагорода Java розробників трохи вища, ніж у JavaScript девелоперів, але все залежить від ваших навичок і досвіду роботи.
Ну а яка з цих двох мов краща — суб'єктивне питання. Але ми повторюємо: важлива відповідь не на “яка мова програмування краща?”, а на “яка мова конкретно мені більше подобається? Яке відгалуження в IT мені ближче до душі? Чи подобається мені той спектр завдань, для вирішення яких призначена мова, котру я вподобав?”, а далі просто рухайтеся в обраному напрямку. Успіхів у вашому виборі!
Чекайте на нові статті в нашій рубриці і залишайтеся з ITVDN!