Результати пошуку за запитом: видеокурс c*
ТОП-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!
500+ питань на співбесіді щодо Ruby
Автор: Влад Сверчков
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 14 июня 2021 года. Оригинальная версия на украинском языке доступна по ссылке.
Junior Ruby Developer
Middle Ruby Developer
Senior Ruby Developer
Что нужно знать, когда проходишь техническое собеседование по Ruby? Конечно, ко всем вопросам готовым не будешь, но мы попросили интервьюеров-практиков прислать свои списки вопросов, а затем обобщили их в одном материале.
Junior
Общие вопросы
1. Какие принципы программирования вы знаете и какие из них вы пытаетесь соблюдать чаще всего?
2. Что такое парадигма ООП? Какие основные составляющие парадигмы?
3. Зачем нужна инкапсуляция? Что может произойти и не произойти, если все методы будут иметь модификатор доступа public?
4. Что такое наследование? Назовите пример(ы) плохого наследования (такое наследование, которое не стоило бы реализовывать).
5. Что такое полиморфизм? Приведите пример использования полиморфизма.
6. Что такое паттерн/шаблон проектирования? Какие шаблоны знаете?
7. Что такое клиент и сервер? Какая механика их взаимодействия?
8. Опишите путь, который проходит запрос после того, как в браузер ввести URL любого ресурса.
9. Что такое протокол HTTP? Какая разница между HTTP и HTTPS?
10. Что такое API? Может ли веб-приложение использовать более одного API?
11. Что такое REST API? Какие действия чаще всего выполняются над ресурсами?
12. Что такое сессия? Что такое cookies? Какая разница между ними?
13. Какие веб-уязвимости знаете? Как от них защититься? Какие есть инструменты, чтобы автоматически контролировать защиту от веб-уязвимостей?
14. Какими критериям пользуетесь для выбора библиотеки?
15. Что такое рефакторинг? Какие должны быть условия для выполнения рефакторинга?
16. Знаете ли вы семейство UNIX-подобных операционных систем (Linux, MacOS)? Назовите команды, которые чаще всего используете в терминале.
17. Что такое аутентификация?
18. Что такое авторизация?
19. Из каких частей состоит HTTP Request и HTTP Response?
20. Какие HTTP-статусы (HTTP-коды) знаете? На какие группы вы могли бы их разделить?
21. Какие HTTP-методы знаете? Зачем используется каждый из них?
Git
22. Знакомы ли вы с системой Git?
23. Для чего нужны ветки в Git? Как сделать ветку?
24. Как скопировать с Git-хостинга (GitHub / GitLab / Bitbucket / другие) проект?
25. Что такое флаг -f? Для чего он и какие минусы использования?
26. Что такое Pull Request? Зачем ветви соединяют через Pull Request?
27. Какие еще команды чаще всего применяете, когда пользуетесь Git?
Ruby
28. Как вы контролируете версии Ruby на своей локальной машине?
29. Что такое метапрограммирование? Какие плюсы и минусы при использовании метапрограммирования?
30. Какой менеджер библиотек для Ruby знаете? Как добавлять библиотеки? Как контролировать версии библиотек?
Style guide
31. Что такое style guide и зачем его используют?
32. Какой популярный линтер контролирует выполнение большей части пунктов с Ruby Style Guide?
Основы Ruby
33. Какие типы переменных есть в Ruby?
34. Что вернётся в результате сложения 10.5 и 10?
35. Чем отличаются переменные, начинающиеся с @, @@ и $?
36. Что такое attr_reader, attr_writer, attr_accessor и зачем они?
37. Что такое метод?
38. Что значит "?" в конце названия методов? Что означает "!" в конце названия методов?
39. Чем отличается энумератор map от each?
40. Что такое модуль? Какие есть варианты подключения модулей в класс?
41. Что такое класс и зачем он нужен?
42. Что такое модуль и зачем его используют? Чем модуль отличается от класса?
43. Что такое константа?
44. Что такое блок? Что такое yield? Можно ли передавать блоки в методы? Каким образом?
45. Что такое proc?
46. Что такое lambda?
47. В чем разница между proc и lambda?
48. Что такое eigenclass?
49. Какие виды условных операторов есть в Ruby? (if, unless, ternary, case)
50. Есть ли разница между операторами && и and?
51. Какие виды циклов есть в Ruby? (loop, while, until, for, each(), times(), upto())
Типы данных
52. Какие типы данных есть в Ruby?
53. Что такое интерполяция?
54. Что такое конкатенация?
55. Что такое массив в Ruby?
56. Что такое Hash в Ruby? Чем Hash отличается от массива?
57. Что такое символ и зачем он нужен?
58. Что такое Range и зачем его используют?
59. Что такое Time и Date?
60. Что такое Struct?
61. Что такое File?
Структура классов и объектов
62. Что такое BasicObject?
63. Что такое Numeric?
64. Что такое Enumerable?
65. Что такое Struct?
66. Что такое OpenStruct?
67. Что такое Set?
68. Что такое Queue?
69. Что такое Object?
70. Что такое Kernel?
ООП на Ruby
71. Есть ли интерфейсы в Ruby?
72. Что такое getter и setter в Ruby? Как их создавать?
73. Что такое инстансная переменная?
74. Что такое константа класса?
75. Какая разница между методом класса и методом объекта?
76. Какие есть области видимости?
77. Какие есть модификаторы доступа? Как private отличается от protected?
78. Поддерживает ли Ruby множественное наследование?
79. Как наследуются методы? Можно ли переопределить метод?
80. Зачем метод super?
81. Что такое Singleton-метод?
82. Что такое миксины? Зачем они и чем отличаются от декоратора?
83. Что такое include и extend и в чем разница между ними?
84. Какой путь поиска метода в иерархии классов?
85. Какая разница между последовательными и именуемыми аргументами метода?
86. Что такое exception? Когда они применяются? Как вызвать exception? Как отловить exception?
Метапрограммирование
87. Что означает open class?
88. Что такое monkey patching?
89. Возможно ли создать класс динамически? Если да, то как именно?
90. Какие есть способы динамического управления методами, переменными и классами (define_method(), class_eval(), module_eval())?
91. Как происходит поиск метода в иерархии? Как можно обработать отсутствие метода (method_missing())?
92. Что такое алиас метода? Для чего нужны алиасы?
93. Как получить значение инстансной переменной? Как задать значение? Как проверить существование инстансной переменной (instance_variable_get(), instance_variable_set(), instance_variable_defined())?
94. Какие методы интроспекции есть в Ruby (class(), ancestors(), methods(), private_methods(), instance_variables(), singleton_methods(), local_variables())?
95. Что такое хуки и зачем их используют (inherited(), included(), method_added(), singleton_method_added(), method_missing())?
RubyGems
96. Что такое gem? Что такое RubyGems?
97. С какой целью используют RVM? Что такое gemset?
98. Что такое Bundler и зачем он?
99. Что такое Gemfile и для чего его используют?
100. За что отвечает каждый из gem`ов? Если знаете нюансы в работе какого-либо из них — обязательно озвучьте.
active_admin
active_model_serializers
bundle audit
bcrypt
devise
jwt
cancancan / pundit
draper
kaminari
sidekiq
rspec
shoulda-matchers
faker
factory_bot
simplecov
rubocop (with extensions)
pry
Ruby on Rails
101. Что такое MVC? Является ли Rails MVC-фреймворком?
102. Что такое миграция? Для чего она нужна? Какие правила создания миграций?
103. Что такое роуты? Что такое resource и resources в роутах?
104. Чем отличается has_many through от has_and_belongs_to_many?
105. Зачем используют concerns?
106. Как работать с sensitive-данными в Rails-приложениях (токены, ключи и т. д.)? Как работает механизм credentials в Rails?
107. С какой целью используют локалы (locals)?
Style guide
108. Знакомы ли вы с RoR style guide?
Структура файлов в Rails
109. Из чего состоит Rails-приложение? Какая архитектура директорий? Зачем нужна каждая из них?
110. Чем отличается lib от vendor?
111. Как создать background job в Rails?
112. Какие способы загрузки ассоциаций в Rails?
Модели и ActiveRecord
113. Зачем нужны модели? Что представляет собою модель?
114. Что такое ORM? Что такое ActiveRecord?
115. Какие есть правила наименования моделей и таблиц в базе данных?
116. Что такое миграции и зачем нужен этот механизм? Как создавать миграции?
117. Какие виды валидаций есть в AR?
118. Как можно вызвать валидацию? Когда валидация вызывается автоматически? Как можно отключить валидацию при сохранении?
119. Что такое callback в Rails?
120. Какие есть виды колбеков в AR?
121. Какие виды ассоциаций есть в AR?
122. Что такое has_one и belongs_to?
123. Что такое has_many?
124. Что такое has_many: through?
125. Что такое has_one: through?
126. Что такое has_and_belongs_to_many?
127. Что такое полиморфная ассоциация?
128. Что такое STI?
129. Каким образом можно получить данные из базы данных? Как получить один объект и коллекцию? Как задать условия выборки?
130. Что такое скоупы? Какова их функция?
131. Як выполнить произвольный SQL-запрос?
132. Как посмотреть информацию о том, как выполнялся запрос, какие использовались ключи и т. п.?
Контроллеры
133. Что такое контроллер? Какую задачу выполняет?
134. Что такое action? Что такое CRUD action?
135. Что такое permit params?
136. Что такое ActiveRecord? Как он реализован в Rails-фреймворке?
137. Что такое параметры? Как они попадают в контроллер? Что такое дефолтные параметры (в роутах)? Что такое стронг-параметры?
138. Что такое cookies и зачем они? Где хранятся cookies? Как получить доступ к cookies?
139. Что такое сессии и в чем их задача? Где хранятся сессии? Как получить доступ к сессии?
140. Какие виды фильтров есть в Rails? (Before / after / around actions)
141. Зачем нужен объект Request? Какую информацию он содержит?
142. Для чего нужен объект Response? Какую информацию он содержит?
143. Что такое стриминг? Каким образом можно отдать файл на загрузку (Send_data, send_file)?
144. Что такое Rescue в контроллерах и для чего применяется?
145. Как принудительно включить использование HTTPS-протокола?
Маршрутизация
146. Что такое роуты и в чем их функция?
147. Что означает аббревиатура CRUD?
148. Если нужно сделать новый CRUD для определенного ресурса, какие классы вы создадите и какие файлы измените?
149. Что такое ресурсы?
150. Что такое Singular ресурсы и что отличает их от обычных ресурсов?
151. Что делают неймспейсы в роутах?
152. Что такое вложенные ресурсы?
153. Что такое shallow nesting?
154. Что означает RESTful роуты?
155. Что такое нересурсные роуты?
156. Что такое actions в роутах?
View
157. Что такое view и для чего он нужен?
158. Что такое layout? Чем отличается от view?
159. Что такое шаблонизатор и с какими шаблонизаторами приходилось работать?
160. Зачем нужен метод render? Что рендерить с его помощью?
161. Как передаются переменные во view?
162. Что такое partial? Когда стоит его применять?
163. Что такое хелпер и зачем его используют?
164. Какие есть хелперы для генерации роутов?
165. Какие есть хелперы для генерации форм?
166. Как создавать собственные хелперы?
Интернационализация Rails
167. Что такое i18n? Зачем нужна i18n? Как она устроена в RoR? В каком виде можно хранить переводы?
ActionMailer
168. Что такое ActionMailer и какие задачи он решает?
AssetsPipeline
169. Что такое AssetsPipeline и какие задачи он выполняет?
Инструменты консоли и rake-таски
170. Какие есть консольные команды для работы с RoR? Что такое rake-таски?
Безопасность
171. Знаете ли вы какие-то уязвимые места, защиту от которых Rails предоставляет out of the box?
172. Какие атаки могут быть при неправильном использовании сессий? Почему нельзя хранить важные данные в сессиях?
173. Что такое CSRF? Как правильно защититься от CSRF?
174. В чем уязвимость Open Redirect? Как защититься от возможных атак, связанных с Open Redirect?
175. Какие уязвимости связаны с загрузкой файлов? Почему важно фильтровать имена и расширения файлов? Как защититься от опасности?
176. Почему нельзя загружать файлы в каталог, доступный снаружи? Что будет, если злоумышленник загрузит файл с кодом?
177. Какие уязвимости связаны с управлением пользователями (ссылка активации, пароли в чистом виде)? Как защититься?
178. Что такое инъекции и как происходит такая атака? Как их избежать?
179. Как организовать безопасную генерацию приглашений? Что такое deep_munge?
Конфигурация
180. Где располагается основная конфигурация программы?
181. Что такое initializers? Зачем они?
182. Что такое окружение? Каково его назначение?
183. Как и где настраивается взаимодействие с базой данных?
184. Как и где настраивается Assets, генераторы, мидлвары, i18n?
185. Можно ли указывать произвольные настройки? Если да, то где и каким образом?
Кэширование
186. Что такое кэш и зачем нужен этот механизм?
187. Какие виды кэширования есть в Rails?
188. Где может храниться кэш?
189. Зачем использовать кэширование страниц?
190. Зачем использовать кэширование экшенов?
191. Зачем использовать кэширование фрагментов?
192. Что такое Memcached?
193. Зачем и как реализуется низкоуровневое кэширование?
194. Как и когда кэшируется SQL?
195. Как тестировать кэширования в режиме разработки?
Реляционные базы данных
Теория реляционных баз данных
196. Что такое СУБД?
197. Что такое реляционная база данных?
198. Что такое нормализация базы данных?
199. Что такое нормальная форма?
200. Сколько есть нормальных форм баз данных?
201. Опишите первые три нормальные формы баз данных.
202. Что такое денормализация баз данных?
203. В чем разница между Primary Key, Foreign Key? Зачем они?
204. Какая разница между LEFT JOIN, INNER JOIN, RIGHT JOIN?
205. Как добавить запись в таблицу без ORM?
206. Как обновить запись в таблице без ORM?
207. Как удалить запись из таблицы без ORM?
208. Как прочитать записи в таблице без ORM?
209. Какие правила группировки данных в таблице вы знаете?
SQL
210. Что такое DML (Data Manipulation Language)?
211. Что такое DDL (Data Definition Language)?
212. Что такое DCL (Data Control Language)?
213. Что такое TCL (Transaction Control Language)?
214. Как выбрать данные из нескольких таблиц? Какие виды JOIN вы знаете?
215. Какие агрегированные показатели можно использовать во время выборки из таблицы?
216. Что такое таблица в базе данных?
217. Как создать таблицу?
218. Как выбрать записи из таблицы?
219. Как вставить запись в таблицу?
220. Как изменить запись в таблице?
221. Как удалить запись из таблицы?
222. Как объединить выборку из разных таблиц?
223. Что такое группировка или агрегирование?
224. Каким образом можно задавать условия агрегирования?
Индексы баз данных
225. Что такое индексы в базе данных?
226. Для чего нужны индексы?
227. Какие виды индексов существуют?
228. Что такое первичный ключ?
229. Что такое внешний ключ?
230. Что такое составной ключ?
Полнотекстовый индекс в базах данных
231. Что такое полнотекстовый поиск и в чем его задача?
232. Что такое полнотекстовый индекс?
233. Что такое ts_vector?
234. Что такое ts_query?
PostgreSQL
235. Что такое select distinct и какова его функция?
236. Каким образом можно сортировать результаты выборки?
237. Как ограничить количество результатов выборки?
238. Как проводить поиск по подстрокам?
239. Какие виды объединений (JOIN) есть в PostgreSQL?
240. Что такое подзапросы и в чем их задача?
241. Какие типы данных есть в PostgreSQL?
242. Какие есть виды символьных типов данных?
243. Какие есть виды типов данных для работы с датой и временем?
244. Что такое тип enum? Когда он используется?
245. Как можно создавать таблицы в базе данных?
246. Как изменять структуру таблицы?
247. Как удалять таблицы?
248. Как очистить таблицу?
249. Возможно ли задавать значения по умолчанию для полей? Если да, то как именно?
250. Возможно ли контролировать уникальность значений при вставке? Если да, то каким образом?
251. Что такое функции в PostgreSQL?
252. Какие операторы есть в PostgreSQL?
Базы данных NoSQL
Redis
253. Что такое Redis и зачем используют этот инструмент?
Elasticsearch
254. Что такое Elasticsearch и зачем его используют?
Статический анализ кода
255. Что такое Overcommit и зачем нужен?
256. Что такое Danger и для чего используется?
257. Что такое статические анализаторы кода? Зачем их используют?
258. Какие анализаторы для Ruby / Ruby on Rails знаете?
259. Какие статические анализаторы кода для JavaScript знаете?
Тестирование
260. Какие виды тестирования знаете? Какие из них вы практиковали при использовании Rails?
261. Какой фреймворк для тестирования используете?
262. Какие показатели качества для своих тестов можете назвать?
263. С помощью какой библиотеки вы контролируете процент покрытия тестами?
264. Расскажите об основах тестирования в Ruby. Что такое RSpec? Какая разница между describe, context и it?
265. Какая разница между юнит-тестами и интеграционными?
266. Что проверяют приёмным тестированием?
267. Что проверяют интеграционным тестированием?
268. Что тестируют в моделях?
269. Что тестируют в контроллерах?
270. Что тестируют в сериалайзерах?
271. Как тестировать API?
272. Как тестировать различные Service Objects?
273. Что такое RSpec? Какие задачи выполняет этот инструмент?
274. В чем разница между let и let! в RSpec?
275. Какие хуки в RSpec знаете?
276. Что выполняется раньше: let! или хук before (:all) ?
277. Что такое Capybara? Какие задачи решает Capybara?
278. Что такое стабы?
279. Что такое моки?
280. Что такое матчер?
281. Какую задачу выполняет гем Shoulda Matchers?
282. Какую задачу выполняет Faker?
283. Зачем нужны Webmock и VCR? Чем они отличаются?
284. Что такое WebKit и PhantomJS? В чем разница между ними? Какие еще есть драйверы?
285. Как работать с базой данных в тестах? Как работает gem database_cleaner?
Дополнительные RubyGems и Rails плагины
286. Какую задачу выполняет Devise?
287. Какую задачу выполняет Rake?
288. Какую задачу выполняет Cancancan и Pundit?
289. Какую задачу выполняет Kaminari и Will_paginate?
290. Какую задачу выполняет Carrierwave?
291. Какую задачу выполняет MiniMagick?
292. Какую задачу выполняет Aasm?
293. Какую задачу выполняет ActiveAdmin?
294. Какую задачу выполняет Nokogiri?
295. Какую задачу выполняет Formtastic и SimpleForm?
296. Какую задачу выполняет Omniauth?
297. Какую задачу выполняет Draper?
298. Какую задачу выполняет Faye?
299. Какую задачу выполняет Pusher?
300. Какую задачу выполняет Sidekiq, Resque?
301. Какую задачу выполняет Mongoid?
Управление, сервисы и DevOps
302. Что такое SSH? Как и для чего используется?
303. Каким образом можно настроить аутентификацию на хосте без пароля?
304. Какие задачи выполняет Heroku? В чем его особенность?
305. Какие задачи выполняет Digitalocean?
306. Какие задачи выполняет Docker?
Мониторинг
307. Какие задачи выполняют Airbrake, DataDog, NewRelic?
308. С какой целью используют Monit?
Ruby Web Tools
309. Какие есть веб-серверы, написанные на Ruby?
310. Что такое Sinatra?
311. Что такое API? Для чего используется? Что такое сериалайзеры и зачем они нужны?
312. Что такое клиент-серверная модель?
313. Какая разница между GET- и POST-запросами?
314. Что такое HTTParty и какие задачи он выполняет?
315. Что такое Faraday и какие задачи он выполняет?
316. Что такое Rack? Что такое Rack-application? Что такое Rack middleware?
317. Что такое push-технология?
Интеграции
318. Есть ли опыт интеграции с Facebook? Если да, то на каком проекте?
319. Есть ли опыт интеграции с Twitter? Если да, то на каком проекте?
320. Есть ли опыт интеграции с LinkedIn? Если да, то на каком проекте?
321. Есть ли опыт интеграции с Google? Если да, то на каком проекте?
Практические задания
322. Описать в ООП-стиле: один из предметов интерьера в контексте конкретного бизнеса. Например, кресло, на котором сидит кандидат, теперь надо продавать в магазине.
323. Написать консольную версию игры «крестики-нолики», где входные данные передаются через gets, а выводят через puts. Два пользователя на одной машине должны иметь возможность сыграть партию.
324. Отсортировать массив.
325. Написать функцию, которая вернет уникальные элементы массива, не используя функцию uniq или set, to_set со стандартной библиотеки.
Middle
Общее
1. Что такое SOLID? Приведите примеры на каждую из букв.
2. Что такое микросервисная архитектура? Какие плюсы и минусы вы видите во время её использования?
3. Знаете ли вы шаблоны проектирования Singleton / Factory / Facade / Decorator / Template Method / Strategy?
4. Можно ли измерить скорость выполнения алгоритма? Какие факторы влияют на скорость? Какие виды зависимостей вы знаете?
5. Что такое методология Scrum? На каких активностях / встречах может присутствовать / быть полезным Software Developer?
6. Какие инструменты для логирования используете в работе?
7. Какие инструменты для мониторинга веб-приложений используете?
8. С помощью какого/каких инструментов вы деплоили приложения на staging / production? Опишите процесс.
9. Если один из ендпоинтов в приложении отрабатывает очень долго, что делать, чтобы улучшить скорость?
10. Чем отличается библиотека от фреймворка?
11. Что такое трехзвенная архитектура? Зачем и когда ее используют? Приведите примеры.
12. Что такое кэширование? Зачем и когда его используют? Приведите примеры.
13. Что такое функциональное разделение? Зачем и когда его используют? Приведите примеры.
14. Что такое Comet-сервер? Зачем и когда его используют? Приведите примеры.
15. Что такое денормализация? Зачем и когда ее используют? Приведите примеры.
16. Что такое деградация функциональности? Зачем она и в каких случаях используется? Приведите примеры.
17. Что такое сервис-ориентированная архитектура? Зачем и когда ее используют? Приведите примеры.
18. Что такое монолитное приложение? Зачем и когда его используют? Приведите примеры.
19. Что такое асинхронная обработка? Зачем и когда ее применяют? Приведите примеры.
20. Что такое ленивые вычисления? Зачем и когда их используют? Приведите примеры.
Предметно-ориентированное проектирование
21. Что такое DDD? В чем преимущества перед классическим MVC?
22. Что такое домен?
23. Что такое модель?
24. Что такое контекст?
25. Что такое сущность?
26. Что такое value object?
27. Что такое агрегирование?
Git и code review
28. Что делают команды cherry-pick, log, stash, reset, squash?
29. Что такое Gitflow? Какие правила использования Git на вашем прошлом проекте?
30. Каких правил именования комитов / ветвей / Pull Request`ов вы придерживаетесь?
31. На что обращаете внимание при code review?
32. Что бы вы могли назвать плохо проведенным code review?
Базы данных
33. Для чего нужны индексы?
34. Какие есть виды индексов?
35. Ускоряют ли индексы все операции с базами?
36. Что такое DB view?
37. Чем отличаются materialized db view от non-materialized db view?
38. Как можно сохранить данные в различные таблицы и гарантировать, что все они или запишутся, или нет?
39. Можно ли строить индексы по нескольким полям? Важен ли порядок этих полей в индексе?
40. Какие вы знаете constraints при создании столбцов?
41. В чем разница между SQL и NoSQL базами данных?
42. Как бы вы импортировали большие массивы данных в БД (1-2 миллиона строк в CSV-файл)?
43. Что такое N+1 и как избегать?
Реляционные базы данных
44. Какие различия между джоинами FULL OUTER JOIN, CROSS JOIN, NATURAL JOIN, INTERSECT и EXPECT?
45. Какие специфические типы данных есть в PostgreSQL?
46. Что такое view? С какой целью используется?
47. Что такое materialized view?
48. Что такое recursive view?
49. Что такое хранимая процедура и зачем она нужна?
50. Что такое партиционирование и какую проблему оно решает?
51. Умеете ли вы работать с чистыми SQL-запросами?
52. Каким образом можно работать с геолокацией в PostgreSQL?
53. Какие способы резервного копирования данных? Что такое pg_dump? В каком виде можно создавать резервные копии?
NoSQL базы данных
Redis
54. Что такое Redis? Какие задачи он выполняет?
55. Какие типы данных есть в Redis и для чего нужен каждый из них?
56. Что такое pub / sub?
57. Что такое транзакции?
58. Что такое mass insertion?
59. Что такое партиционирование?
60. Умеете ли работать с Redis в консоли?
61. Умеете ли настраивать Redis?
Elasticsearch
62. Что такое Elasticsearch и какие задачи он выполняет?
63. Что такое кластер?
64. Что такое нода?
65. Что такое индекс?
66. Что такое тип?
67. Что такое документ?
68. Что такое шарды и реплики?
69. Что такое Query DSL?
70. Что такое мапинг?
Статический анализ кода
71. Что такое overcommit и зачем нужна эта утилита?
72. Что такое danger и для чего используют эту утилиту?
73. Какую задачу выполняет каждый из нижеперечисленных гемов?
Rubocop;
Reek;
Rails Best Practices;
Brakeman;
RubyCritic;
SimpleCov;
Bundle Audit;
Bundle Leak;
Traceroute.
74. Какие задачи выполняет каждый из нижеперечисленных модулей?
Eslint;
Stylelint;
Prettier.
Ruby
75. Какие проблемы в Ruby (как в языке программирования) вы видите? Какие, по вашему мнению, нужно решать как можно быстрее?
76. Какими библиотеками, кроме фреймворка Rails, пользовались для создания структуры проекта?
77. Как можно в Ruby запросить сторонний API? Какой встроенный класс позволяет это сделать?
78. Что такое Thread? Чем он отличается от Process?
79. Есть ли в Ruby возможность создать абстрактный класс? Есть ли способ искусственно создать абстрактный класс?
80. Есть ли в Ruby возможность множественного наследования? Есть ли способ искусственно заменить множественное наследование?
81. Назвать максимально точный путь поиска методов в Ruby
82. Какие минусы использования method_missing знаете?
83. Можно ли узнать идентификатор объекта в памяти, если да, то каким образом?
84. Какие виды enumerator для массива вы знаете?
85. Что такое мемоизация методов? Зачем ее используют?
86. С помощью какого хука можно посчитать количество потомков определенного класса?
87. В чем разница запуска rspec и bundle exec rspec?
88. Создавали ли вы гем в Ruby? Какая механика / последовательность действий для создания гема?
89. Что такое Rack middleware?
90. Есть такой код:
users = User.where (id: [1,3,4])
users.where (name: "Alex")
users.inspect
После какой строчки кода ActiveRecord выполняет запрос в базу?
Ruby on Rails
91. Что такое ActiveSupport? Зачем нужен? Какие задачи выполняет? Приведите пример методов, которые добавляет ActiveSupport.
92. Что такое Action Cable? Зачем используют этот фреймворк?
93. Как создать функциональность для отправки имейла в Rails-приложении?
94. Какие библиотеки для background jobs использовали? Какая механика работы таких библиотек?
95. Какие и виды кэша в Rails знаете? Где можно хранить кэш?
96. Какие библиотеки / подходы для создания API документации знаете / используете?
97. Что такое Swagger? Какие преимущества создания API документации в Swagger-формате?
98. Что такое Query Objects? Когда и как их можно использовать?
99. Что такое Decorators? Когда и как их можно использовать?
100. Что такое Form Objects / Contract? Когда и как их можно использовать?
101. Где и как вы рекомендуете держать бизнес-логику в Rails-приложении?
102. Что такое JSON API формат? Использовали ли вы библиотеки для сериализации объектов в JSON API формате?
Тестирование
103. Работали ли вы с feature-тестами? Что такое capybara?
104. Что такое TDD? Какие преимущества / недостатки использования TDD-подхода видите?
105. Что такое BDD? В чем отличие между TDD и BDD?
106. Что может быть причиной того, что тесты на проекте выполняются очень долго?
107. Что такое принцип тестирования FIRST?
108. Как порекомендуете писать тесты на код, в котором посылается запрос на сторонний сервис (API)?
109. Какие инструменты помогают контролировать качество тестов?
110. Какие составляющие response`a вы тестируете, когда пишете тест на определенный эндпоинт?
111. Является ли 100% code coverage на проекте залогом низкой вероятности что-то «сломать» во время багфиксинга / имплементации новой функциональности? Объясните свой ответ.
Управления, сервисы и DevOps
112. Опишите CI / CD-подход на своем последнем проекте? Как бы вы его изменили?
113. Какие в целом Continuous strategies знаете? Чем отличается Continuous Deployment от Continuous Delivery?
114. Что такое Docker? Чем отличается Docker от виртуальной машины?
115. Для чего используют docker-compose?
116. Умеете ли вы работать с Docker?
117. Что такое image в Docker? Как работать с ним в Docker?
118. Что такое container в Docker? Как работать с контейнерами? Как запускать и останавливать контейнеры? Как узнать список рабочих контейнеров?
119. Что такое Docker Daemon?
120. Что такое Docker Client?
121. Что такое Docker Hub?
122. Что такое Docker Compose?
Практические задания
123. Написать клиент для открытого API ресурса с использованием только низкоуровневых библиотек: Net::HTTP, HTTP.rb, Faraday, etc.
124. Как бы вы посчитали количество пассажиров, которые заходят или выходят на определенной станции метро?
125. Посчитать количество автомобилей в пробке.
126. Организовать автомобильную стоянку.
127. Написать функцию, которая вернет уникальные элементы массива, не используя uniq или set, to_set со стандартной библиотеки. Ожидается вариант с применением хеш-таблицы, где ключами будут уникальные элементы из массива, а значениями true.
Senior
Общие вопросы
1. Опишите основные способы аутентификации в API.
2. Назовите основные принципы построения REST API.
3. Вам нужно спроектировать API, какие основные вопросы будете задавать клиенту?
4. Какие основные преимущества и недостатки монолитной архитектуры?
5. Какие основные преимущества и недостатки микросервисной архитектуры?
6. Что такое SOLID? Какие из принципов, по вашему мнению, чаще всего нарушаются, какие являются наиболее критичными?
7. Опишите Singleton-паттерн. Где и когда вы его использовали?
8. Опишите принцип работы DNS?
9. Что такое code smells? Каковы основные признаки плохого кода?
10. Что такое reverse proxy, для чего он нужен?
11. Что такое load balancer, основные разновидности?
12. Что такое MVC и как не попасть с ним в беду?
13. Опишите процесс обработки HTTP-запроса на примере любого веб-фреймворка в Ruby (Rails, Hanami, Sinatra, Roda, etc).
14. Чем отличается refactoring от оптимизации? Как и когда нужно выполнять каждый из вышеназванных процессов?
15. Знаете ли вы GraphQL? Какие плюсы и минусы вы видите по сравнению с REST?
16. Что такое multi-tenant architecture? Когда рекомендуете ее использовать?
17. Чем отличается понятие Dependency Inversion от Dependency Injection и от Inversion of Control?
18. Что такое GDPR? Назовите правила, которые использовали, чтобы быть GDPR compliant?
Метапрограммирование и DSL
19. Параллельное выполнения кода через Thread, Fiber, Ractor. Объясните на примерах.
20. Дизайн-паттерны: Service, Form, Value, Policy, Guard, etc. Объясните на примерах.
21. Расскажите об архитектурных паттернах: Monolith, Microservices, Distributed app, etc.
22. Как организовать бизнес-логику, когда в проект уже 1000+ бизнес-операций?
23. Что такое Sidekiq? Как правильно организовывать очереди?
24. Расскажите об оптимизации быстродействия через benchmark, lineprof и flamegraph.
25. Работали ли вы с Garbage collector? Расскажите.
26. Расскажите о собственных примерах решений, которыми гордитесь и почему.
Ruby / Rails
27. Что такое Thread? Какие особенности использования тредов в разработке?
28. Что такое Process? Какие особенности использования процессов в разработке?
29. Что такое Mutex? Приведите примеры использования мьютексов в разработке?
30. Если нужно определить, сколько выполняется тот или иной код, как порекомендуете это сделать?
31. Какие недостатки видите в Ruby? Когда и как они могут себя проявить во время разработки?
32. Можно ли передать контекст выполнения одного метода в другой метод? Если да, то как это сделать?
33. Какие callback-s знаете в Ruby?
34. Как реализовать Singlethon-класс Ruby? Опишите базовые концепты.
35. Как работает Garbage collection в Ruby? Опишите базовые концепты.
36. Что такое Ractor? Какая разница между классической моделью работы с тред и работой с помощью Ractor?
37. Как работают Lazy Enumerators? Чем они отличаются от классических Enumerators? Как и когда они могут помочь?
38. Назвать примеры использования Fiber`ов
39. Как include добавляет метод модуля в класс? Что происходит на уровне MRI? В чем разница по сравнению с extend и prepend?
40. У вас есть задача импортировать пользователей в базу Rails-приложения. Пользователи записаны в CSV-файле, где каждая строка - это данные. Опишите ваш подход к решению проблемы. Как изменится решение, если файл станет очень большим (> 300000 строк)?
41. Если в модели User у вас есть callback, то какие могут возникнуть проблемы при решении предыдущей задачи?
42. Как мы можем отслеживать прогресс Background Job?
43. Опишите жизненный цикл Request - Response в Rails. Через какие основные компоненты фреймворка проходит запрос и для чего они нужны?
44. Какие основные типы тестов используете и с какой целью?
45. Как вы относитесь к интеграционным тестам?
46. Что такое полиморфные ассоциации в ActiveRecord?
47. Как бы вы порекомендовали построить semantic versioning для Rails API, работающего с мобильными приложениями (iOS, Android, Web)? Поверхностно опишите стратегию.
48. Если необходимо, чтобы каждый запрос, пришедший к Rails app независимо от роута, возвращал 403 статус как можно быстрее, как бы вы порекомендовали реализовать код для этой задачи?
49. Какие, по вашему мнению, пять основных минусов Rails? Что бы вы порекомендовали изменить, чтобы нейтрализовать эти минусы?
50. Можно ли в Rails работать с несколькими базами, если да, то как это сделать?
Базы данных
51. Что такое транзакция? Какие основные свойства транзакций?
52. Что такое database lock и чем он отличается от транзакций?
53. Что такое Pessimistic и Optimistic locking?
54. У нас есть таблица Users. Мы добавили к ней индекс в трех полях: first_name, last_name, email. Именно в таком порядке. Теперь делаем запрос SELECT * FROM users WHERE first_name = "Alex" AND email = "<a href="mailto:test@mail.com"> test@mail.com </a>". Поможет ли нам индекс ускорить такой запрос, и почему?
55. Что такое Database View? Какие виды есть?
56. Что такое Database trigger?
57. Что такое партицирование? Опишите кейсы, когда партицирование было бы полезным?
58. Поверхностно опишите шаги для реализации партицирования на примере любой СУБД.
59. Что такое триггеры? Как и когда их можно использовать? Какие плюсы и минусы вы видите в сравнении с тем, чтобы использовать триггеры / колбеки на уровне бэкенд?
60. Что такое WAL? Какую роль он играет?
61. Была ли у вас возможность / необходимость использовать шардинг? Чем отличается шардинг от партицирования?
62. Опишите принципы, преимущества и недостатки работы с primary / secondary (master / slave) репликацией?
63. Знакомы ли вы с CAP-теоремой? Если да, объясните основную идею.
64. Знаете ли вы ACID? Как вы понимаете букву "I" в этой аббревиатуре?
65. Представьте ситуацию, когда ваш сервер, на котором размещен redis, по неизвестным причинам перезапустился. Что рекомендуете сделать заранее, чтобы такие ситуации не нанесли большой вред?
Тестирование
66. Знаете ли вы, что такое Load Testing? Чем может помочь разработчик при Load Testing?
67. Какие инструменты используют для того, чтобы собрать как можно больше метрик при Load Testing?
68. Какие подходы вы бы порекомендовали использовать, чтобы ускорить тесты на CI?
69. Как внедрить процесс написания тестов, если проект (Rails API) их совсем не имеет?
Практические задания
70. Написать реализацию структуры данных Set. Объяснить алгоритмическую сложность добавления элементов к сету.
71. Спроектировать реферальную систему (то есть, пользователь может пригласить других пользователей, которые становятся его рефералами, они приглашают своих рефералов, и так формируется древовидная структура). Есть модель:
class Users <ActiveRecord :: Base
end
Как бы вы связали ее с рефералами?
72. Добавьте метод:
class Users <ActiveRecord :: Base
end
который возвращает рефералы пользователя поуровнево. Например, user имеет рефералы user1, user2. user1 имеет реферала user3, user2 имеет рефералов user4 и user5. Должны получить результат:
{0 => [user]
1 => [user1, user2],
2 => [user3, user4, user5}
Спасибо за вопросы Денису Земляному, Николаю Воронину, Сергею Гнилицкому, Владимиру Свередюку, Михаилу Одинюку, Виктору Нову, Александру Шестопалу, Андрею Зеленцу, Кириллу Шевченко, Виктору Новицкому.
ТОП-10 найкращих відео з .NET
Автор: Влад Сверчков
Вітаємо!
Друзі, цього разу ми підготували для вас вибірку найкращих вебінарів від ITVDN за напрямком .NET. До рейтингу увійшли як пізнавальні вебінари з актуальною інформацією, так і вебінари, орієнтовані на прокачування ваших навичок створення коду. Давайте приступимо до їх розгляду.
Як стати C# розробником у 2021 році? .NET чи .NET Core?
Автор – Дмитро Охріменко, сертифікований спеціаліст Microsoft (MCTS, MCPD, MCT). Тренер-консультант, експерт з побудови розподілених та веб-орієнтованих додатків. Автор курсів з .NET та FrontEnd розроблення на ITVDN
C#/.NET розроблення – це дуже перспективний напрямок у IT, життя якому дала всесвітньо відома компанія MIcrosoft. Якщо вам цікава дана сфера і ви хочете зробити в ній професійний старт, цей вебінар буде для вас дуже доречним!
Мета вебінару – допомогти вам розібратися з головними аспектами даної спеціальності, спираючись на тенденції розвитку IT-ринку, правильно розставити пріоритети та допомогти спланувати ваше навчання та кар'єру за напрямком C#/.NET.
На заході розглянуто такі важливі питання:
Чи є сенс починати вчити C# у 2021 році?
Що таке .NET Framework та що таке .NET Core?
Що вивчати і в якій послідовності? Карта спеціальності
Порівняння веб програми на .NET та на .NET Core
Корисні ресурси для навчання та розвитку
Питання та відповіді
Як стати Full-Stack розробником?
Автор – Віталій Ємець, FullStack Developer, Microsoft Certified Specialist
Full-stack розробник (вимовляється "фул стек") – це майстер на всі руки у світі веб-розроблення. Йому під силу реалізувати як клієнтський, так і серверний бік додатку, якими зазвичай займаються FrontEnd і BackEnd розробники окремо один від одного. Таким чином, у деяких випадках Full-Stack фахівець може навіть одноосібно вести проєкт від початку до кінця.
Які навички необхідно мати, щоб досягти такого рівня майстерності, і який інструментарій повинен бути у справжнього Full-Stack розробника? У чому переваги даної професії та які у неї підводні камені? Як Full-Stack розроблення пов'язане з технологіями C#/.NET? Усі відповіді на ваші запитання ви отримаєте на вебінарі Віталія Ємця.
Що нового в C# 8, 9?
Автор – Олексій Никифоров, Software Engineer & Business Analyst at HYS-Enterprise
C# — це універсальна об'єктно-орієнтована мова, яка є потужним інструментом створення програмного забезпечення з широкою сферою застосування. При такій високій функціональності вона досить нескладна у вивченні і чудово підходить тим, хто збирається зробити перший крок назустріч програмуванню.
Цей вебінар передбачає занурення в останні нововведення мови C#. Основний наголос буде зроблено на комунікацію та обговорення, припускаючи, що учасники вебінару – розробники C#, які стежать за новинками цієї мови. Автор пройдеться новими можливостями мови та обговорить, як ці зміни можуть бути використані з метою написання більш виразного та чистого коду.
Алгоритми та структури даних у .NET
Автор – Ярослав Кучук, .NET Developer
На вебінарі розглядається питання фундаментальної алгоритмічної підготовки – від математичного обґрунтування потужності алгоритму до стандартних алгоритмів та структур даних. Базові алгоритми реалізовані на C#; автор аналізує їх з точки зору їхньої потужності.
На вебінарі розглядаються такі теми:
Поняття алгоритму
Складність алгоритму та способи її вимірювання
Основні структури даних
Стек
Черга
Зв'язаний список
Хеш-таблиця
Бінарні дерева пошуку
Червоно-чорні дерева
Базові сортувальні алгоритми
Базові пошукові алгоритми
Безпека .NET веб-додатків: часті помилки та методи боротьби з ними
Автор – Олексій Голубєв, Lead Software Engineer в компанії SoftServe
Мета вебінару – звернути увагу розробників на проблеми у сфері безпеки веб-додатків, які можна усунути ще на етапі розроблення. На вебінарі автор розповідає про найчастіші помилки у додатках, вразливостях, пов'язаних із сторонніми бібліотеками, і те, як їх можна уникнути.
Зміст вебінару:
Авторизація. Крадіжки сесій та стійкості паролів.
Людський фактор. Що розробник може зробити не так і на що звертати увагу.
Ін'єкції. Які зустрічаються частіше і про небезпечні WYSIWYG редактори.
Рандомізація. Випадковості не випадкові.
Вебінар підійде .NET розробникам – вітаються спеціалісти будь-якого рівня. Буде багато практичної інформації, яку можна застосувати як на етапі розроблення, так і на етапі проєктування систем.
6. Техніки тестування для C# розробників. Рівень Advanced
Автор – Юрій Наурінський, Senior Fullstack .NET Software Developer
На вебінарі буде розглянуто 3 «поглиблені» техніки тестування, якими має володіти досвідчений розробник. Буде трохи теорії, приклади та відповіді на запитання. Усі приклади мовою С#. Нижче наведено техніки, які розглядаються на зустрічі.
Property based testing – техніка тестування, що застосовується для перевірки властивостей функції, програми, системи. Ключова ідея в тому, що описуються не заздалегідь задані очікувані значення, а властивості, яким повинні задовольняти тестові приклади. Далі, тестові приклади генеруються випадковим чином, постійно перевіряючи, чи вони задовольняють вищеописаним властивостям.
Performance testing – одна з найважливіших технік тестування, яку бажано знати кожному розробнику, котра використовується для відповіді на питання, наскільки швидко працює функція, програма, система, а також її окремі компоненти. Також, може відповідати на питання скільки пам'яті споживає функція, програма, система.
Load testing – техніка тестування, про яку бажано мати уявлення кожному веб-розробнику; застосовується для вимірювання поведінки системи під різним навантаженням, зокрема нормальним та піковим. Можуть вимірюватися час відповіді, пропускна спроможність, інші бізнес-орієнтовані метрики.
7. Docker для .NET розробників
Автор – Олексій Никифоров, Software Engineer & Business Analyst at HYS-Enterprise
Docker – це популярна платформа, яка використовується при розробленні, тестуванні та розгортанні програмного забезпечення. Вона дозволяє скоротити час між написанням коду та доставленням його на “production”. За останні роки популярність Docker'a сильно зросла, і ця технологія стала індустріальним стандартом у сфері контейнеризації програмних рішень.
Docker може бути корисним дуже широкому спектру фахівців: розробник, тестувальник, адміністратор, реліз-менеджер і т. д. Незважаючи на те, що Docker написаний на Go і використовує особливості ядра Linux, .NET розробники, які традиційно ведуть розроблення під Windows, можуть отримати величезну користь від використання Docker'a на різних рівнях. Знання даного інструменту підвищить вашу продуктивність та дасть конкурентну перевагу на ринку праці.
Вебінар буде корисним фахівцям початкового рівня, які завжди хотіли спробувати Docker. Ознайомлення буде засноване на програмі .NET Core. За завершенням, ви сміливо орієнтуватиметеся в основних концепціях та інструментах і зможете успішно розпочати свій шлях вивчення Docker'а.
8. F# та функціональне програмування для C# розробників
Автор – Альберт Ташу, .NET Developer, тренер-консультант навчального центру CyberBionic Systematics, а також сертифікований спеціаліст Microsoft
С# – це мультипарадигменна мова, і з кожним релізом вона набуває все більше можливостей, спрямованих на застосування функціонального програмування, яке є однією з найпопулярніших парадигм у сучасном розробленні програмного забезпечення. Для того, щоб легше було розібратися в цій парадигмі, буде розглянута дуже цікава мова платформи .NET – F#. Крім цього, торкнемося основних принципів функціонального програмування та їх застосування при розробленні мовою C#.
Зміст вебінару:
Введення до мови F#
Основи функціонального програмування
Застосування функціональних підходів розроблення на C#
Рефакторинг проєкту на С#
9. Створення гри "Space Invaders" на C# з нуля
Автор – Армен Маілян, C#/.NET Developer, тренер-консультант CyberBionic Systematics
Який найкращий спосіб вивчити щось нове? Звичайно ж, перетворити це на гру! Цей спосіб гарний і у навчанні програмуванню. Почніть вивчення мови C#, створивши консольну комп'ютерну гру. Обіцяємо мінімум нудної теорії та максимум практики. Буде цікаво!
Кому це буде корисно?
Новачкам. Ніколи не програмували? Це не нагода відмовлятися від нового крутого досвіду. Ви маєте шанс зробити свою власну гру на C# і отримати досвід практичного застосування даної мови програмування, а також спробувати себе в ролі розробника ігор.
Розробникам-початківцям C#. Ви зможете поглибити та застосувати на практиці свої знання мови C# разом із наставником.
Чого ви навчитеся:
Розробляти просту гру мовою C#.
Розбивати велике завдання на окремі етапи та послідовно їх реалізовувати.
Застосовувати на практиці процедурний і об’єктно-орієнтований підхід для написання програм на С#.
Розуміти та застосовувати основи алгоритмування.
Застосовувати знання основ ООП для створення повноцінної програми.
Використовувати функціонал .NET Framework.
10. Створення еволюційної гри Conway's Game Of Life C# + WPF
Автор – Юрій Наурінський, Senior Fullstack .NET Software Developer
На вебінарі буде розглянутий Game Of Life – клітинний автомат, придуманий англійським математиком Джоном Конвеєм у 1970 році – і його реалізація за допомогою мови програмування C# та фреймворку WPF.
Перш ніж реалізовувати гру, необхідно чітко визначити завдання та постановку правил самої гри. Далі буде розглянуто, як реалізувати саму логіку гри без прив'язки до будь-якого фреймворку. Наступний логічний крок після того, як було реалізовано основну логіку гри — це розгляд прив'язки логіки до фреймворку WPF і надання «життя» грі. Наприкінці вебінару автор розповість, які техніки тестування можна застосувати для гарантії коректності результату логіки гри.
Цей вебінар буде цікавий C# розробникам, які бажають заглибитись у розроблення додатків з використанням технології WPF, а також хочуть розглянути з практичної точки зору досить цікаву та відому математичну гру.
Вивчайте розроблення .NET на ITVDN!
400+ питань на співбесіді щодо С++
Автор: Влад Сверчков
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 5 апреля 2021 года. Оригинальная версия на украинском языке доступна по ссылке.
Junior
1.1 Общие вопросы
1.2 Метапрограммирование
1.3 Препроцессор и компиляция
1.4 Язык C
1.5 Язык С++ и ООП
1.6 STL / Algorithms
1.7 Многопоточность
1.8 Networking
1.9 OS/Linux
1.10 SCM / CI / CD
1.11 Практические задания
Middle
2.1 Общее
2.2 Препроцессор и компиляция
2.3 Язык С
2.4 Язык С++
2.5 Паттерны проектирования
2.6 Метапрограммирование
2.7 OOP/OOD
2.8 STL / Algorithms
2.9 Многопоточность
2.10 Networking
2.11 SCM / CI / CD
2.12 Практические задания
Senior
3.1 Общее
3.2 Препроцессор и компиляция
3.3 C/C++
3.4 OOP/OOD
3.5 STL / Algorithms
3.6 Многопоточность
3.7 SCM / CI / CD
3.8 Практические задания
Предлагаем список технических вопросов, которые, вероятно, вам поставят на собеседованиях по C++. Вопросы предоставили специалисты, принимающие участие в проведении технических интервью по этому языку. Учтите, что есть широкий спектр специализаций, поэтому выбирайте свое направление и готовьтесь.
Junior
Общие вопросы
1. В чем заключаются основные принципы ООП?
2. Что такое сложность алгоритма?
3. Код работает неправильно. Что делать?
4. Объясните такие структуры данных, как стек и очередь.
5. Какие книги, связанные с программированием, читали? Чему с них научились?
6. Что интересного нашли в новых стандартах С++17, С++20?
7. Что такое таблица ASCII?
8. Что такое Unicode?
9. Что такое паттерны проектирования и для чего их используют?
10. Патерны Singleton, Strategy, Template-Method, Decorator?
11. Для чего нужны модульные тесты?
12. Какая разница между модульными и интеграционными тестами?
13. Что такое TDD?
Метапрограммирование
14. Что такое шаблонный класс и шаблонная функция?
15. Что такое конструкторы? Какие типы знаете?
16. Может ли конструктор быть шаблонной функцией?
17. Может ли виртуальная функция быть шаблонной?
18. Что такое инстанциация шаблона?
19. Что такое специализация шаблона? Частичная специализация шаблона?
20. Расскажите об имплементации шаблонных классов в срр-файле?
Препроцессор и компиляция
21. Как проходит процесс компиляции срр-файлов в бинарный файл?
22. Что такое препроцессор?
23. Как работает препроцессор?
24. Какие знаете команды препроцессора?
25. Как работает директива include?
26. Как работает директива define?
27. Что именно линкует линкер?
28. Что такое оптимизация компилятора?
29. Что такое флажки компиляции?
30. Как защитить хедер от повторного включения?
31. Что делает директива include?
32. Как работают макросы?
Язык C
33. Как static влияет на глобальные/локальные переменные?
34. Как сonst влияет на переменную?
35. Какие варианты использования extern знаете?
36. Какие варианты использования volatile знаете?
37. Какие есть битовые операции?
38. Что такое булевая алгебра?
39. Расскажите об этапах разработки библиотеки или программы.
40. Что такое алгоритмы сортировки и какие вы знаете?
41. Какие алгоритмы работы со строками знаете?
42. Какие алгоритмы на графах знаете?
43. Где может храниться переменная?
44. Какая разница между calloc и malloc?
45. Для чего используют realloc?
46. Что такое указатель?
47. Каков размер указателя и от чего он зависит?
48. Какие есть операции с указателями?
49. Что такое struct?
50. Как определить размер структур?
51. Что такое выравнивание в структурах?
52. Что такое union?
53. Какой размер union?
C++/OOP
54. Что такое класс?
55. Какие есть основные типы данных в C++?
56. Что такое инкапсуляция? Как она реализуется в C++?
57. Какие есть встроенные типы в С++?
58. Что такое enum?
59. Как соотносится класс и объект?
60. Какая разница между структурой и классом?
61. Разница между private/protected/public и где они используются?
62. Какие методы класса являются стандартными для класса?
63. Что такое абстрактный класс и зачем он?
64. Сколько памяти занимает объект пустого класса class A {}; ?
65. Что случится с функцией, если к ней добавить ключевое слово static? В контексте члена класса? В контексте метода класса?
66. Какие особенности статических полей класса?
67. Какая особенность константных методов-членов класса?
68. Как изменить поле класса в константном методе класса?
69. Какие методы можно вызвать из константных объектов?
70. Что такое куча и стек? Различия, принцип работы.
71. В чем разница между указателем и ссылкой?
72. Для чего нужен указатель на функцию? Как его объявить?
73. Что будет, если забыть вызвать delete? Когда освободится эта память?
74. Что такое умный указатель? Какие умные указатели есть в стандартной библиотеке?
75. Как работает std::unique_ptr?
76. Как работает std::shared_ptr?
77. Расскажите о константности переменной, ссылки, указателя. Что такое константный указатель и указатель на константу? Размер указателя в памяти?
78. Расскажите о передаче аргументов по значению, по ссылке и по указателю.
79. Расскажите о порядке вычисления аргументов функции?
80. Что произойдет, если вернуть ссылку на временный объект?
81. Что такое перегрузки функции? Виды перегрузки.
82. Что такое явное и неявное приведение типов в С++? Расскажите о функциях явного приведения типов в C++.
83. Что такое инициализация переменной в if?
84. Что такое ленивые вычисления в С++?
85. Расскажите о циклах for и range-for.
86. Что делает ключевое слово auto? auto-определение return-типа, аргументов функции?
87. Чем отличаются delete и delete [ ] ? Что случится, если вызвать delete у объекта, созданного через new [ ] ?
88. Обработка ошибок в С++. Какие конструкции используют при обработке exception?
89. Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?
90. Что такое memory leak?
91. Можно ли выбрасывать exception из деструктора?
92. Как отловить деление на 0 в С++?
93. Как работают константные методы?
94. Что такое лямбда-функция в С++? Как получить доступ к переменным во внешней области видимости?
95. Для чего использовать namespace, anonymous namespace?
96. Как вызвать объект из nested namespace?
97. Как работают inline-функции? Может ли такая функция быть рекурсивной?
98. Что такое полиморфизм?
99. Для чего используется наследование?
100. Какие бывают типы наследования?
101. Для чего используют виртуальное наследование?
102. Как можно решить проблему ромбовидного наследования без использования виртуального наследования?
103. Что случится, если класс-наследник передать по значению в функцию, которая принимает базовый класс?
104. Что случится, если пронаследоваться от базового класса, который не имеет виртуального конструктора?
105. Что случится, если вызвать переопределенную virtual function из конструктора? Может ли конструктор быть виртуальным?
106. Может ли pure virtual function иметь имплементацию? Что случится, если вызвать pure virtual function из конструктора?
107. Какие методы генерируются для класса по умолчанию? В каком случае такие методы не будут генерироваться? Как заставить компилятор добавить/удалить эти методы?
108. Как запретить наследовать класс?
109. Какой порядок конструирования и разрушения классов в иерархии? Порядок инициализации полей класса?
110. Какие есть способы инициализации полей класса?
111. Может ли деструктор быть виртуальным?
112. Что делает ключевое слово virtual?
113. Для чего используют виртуальный деструктор?
114. Что такое глубокое копирование?
115. Что такое виртуальные функции и зачем они нужны?
116. Как защитить объект от копирования?
117. Что такое семантика перемещения?
STL / Algorithms
118. Из чего состоит STL?
119. Какие алгоритмы применяли с STL? В чем преимущество использования алгоритмов перед собственноручно написанными функциями?
120. Расскажите о контейнерах стандартной библиотеки vector, list, map, unordered_map.
121. Какие знаете типы итераторов? Чем они отличаются? В каких контейнерах используются?
122. Какая разница между std::set, std::map, std::unordered_multimap?
123. Что такое идиома remove-erase?
124. Как получить наименьшее значение типа?
125. Какая разница между std::map и std::hashmap?
126. Как подсчитать количество элементов в std::list?
127. Что такое сложность алгоритма и от чего она зависит?
128. В чем разница между vector и list и в каких случаях их лучше использовать?
Многопоточность
129. Что вам известно о многопоточности?
130. Что общего и различного в процессах и потоках?
131. Как синхронизировать передачи информации между потоками?
132. Какая разница между мьютексом и семафором?
133. Что такое deadlock?
134. Является ли С++ thread-safe?
135. Что такое race-condition?
136. Как избежать состояния гонки?
137. Что такое атомарная операция?
138. Как работать с std::mutex?
Networking
139. Что такое сокет?
140. Какие операции можно делать с сокетом?
141. Какая информация нужна, чтобы создать сокет?
142. Какие бывают модели сетей?
143. Расскажите об уровнях модели OSI.
144. Расскажите об уровнях модели TCP/IP.
145. Что такое IP-адрес?
146. Для чего используется маска подсети?
147. Какая разница между IPv4 и IPv6?
148. Сколько памяти необходимо для хранения IPv4?
149. Для чего нужен порт?
150. Сколько максимально может быть портов?
151. Какая разница между TCP и UDP?
152. Для чего такой ненадежный UDP-протокол?
OS/Linux
153. Что такое менеджер пакетов?
154. Какие бывают менеджеры пакетов?
155. Какие бывают дистрибутивы Linux?
156. Что такое PID?
157. Для чего используют файловые дескрипторы?
158. Расскажите о стандартных файловых дескрипторах процесса.
159. Что такое Pipe?
160. Что такое Named Pipe?
161. Что такое UID?
162. Расскажите о командах bash.
SCM / CI / CD
163. Какие есть виды SCM?
164. Для чего используют системы контроля версий?
165. Какие есть команды git?
166. Какие этапы во время комита изменений?
167. Разница между git fetch и git pull?
168. Какие есть этапы решения merge conflict?
Практические задания
169. Посчитайте количество единиц в произвольном числе.
170. Есть структура по типу «односвязный список». Напишите функцию, которая разворачивает список. То есть, первый элемент становится последним, а последний - первым.
171. Напишите реализацию функции int atoi (const char *str); преобразования строки в число.
172. Для структуры типа односвязный список напишите функцию вставки элемента.
173. Реализуйте класс vector.
174. Реализуйте бинарный поиск в массиве.
175. Реализуйте любую сортировку.
176. Реализуйте макрос для сравнения двух строк.
177. Реализуйте реверс строк.
178. Реализуйте перевода числа из строки в int.
179. Реализуйте подсчет слов в предложении.
180. Реализуйте подсчет чисел Фибоначчи.
181. Найдите такие элементы двух массивов, которые попадаются только в каждом из них. Желательно использовать STL.
182. Удалите из unordered_map элементы, которые делятся на 2 и выведите ключи этих элементов.
183. Напишите класс для логирования, который мог бы логировать к консоли или файлу.
184. Напишите функцию для определения, является ли определенный год високосным.
185. Напишите функцию для определения, является ли определенное слово палиндромом.
186. Напишите реализацию паттерна Singleton.
187. Напишите реализацию std::vector с операциями: push_back, push_front, pop_back, pop_front, size, clear.
188. Напишите рекурсивный поиск значения в дереве бинарного поиска.
189. Напишите функцию, которая проверяет, является ли дерево сбалансированным.
190. Напишить функцию для поиска уникального элемента в массиве.
Middle
Общее
1. Какие курсы прошли или книги прочитали за этот год? Чему научились?
2. Что нравится и не нравится в С++? Чего не хватает?
3. Что интересного нашли в новых стандартах С++17, С++20 (конкретные фичи)?
4. Расскажите о фичах, которые появились в разных версиях языка.
5. Расскажите о модели памяти, которая появилась в С++11 стандарте.
6. Что такое сериализация? Какие библиотеки знаете?
7. Какие знаете паттерны проектирования?
8. Что такое операционная система? Какие существуют типы по назначению?
9. Назвать основные составляющие и принципы работы ОС Linux в качестве примера системы общего назначения.
10. Что такое SFINAE и PIMPL?
11. Назовите порождающие, структурные и поведенческие паттерны программирования и приведите примеры их использования.
Препроцессор и компиляция
12. Расскажите о системах автоматизации билд-процесса.
13. Какая разница между статической и динамической библиотеками?
14. Какая разница между исполнительным файлом и динамической библиотекой?
15. Что такое DLL hell?
16. Что такое флажки компиляции (fPIC)?
17. В чем разница между дебаженной и релизной сборкой?
18. Что нужно для использования сторонней библиотеки?
19. Что такое internal linkage?
C
20. Что будет, если дважды вызвать free?
21. Как происходит вызов функции?
22. Как происходит передача параметров в функцию?
23. Как прорабатывается константа переменных?
24. Что означает ключевое слово inline?
25. Для чего используют выравнивания, можно ли его контролировать?
26. Расскажите о битовых полях.
27. Для чего нужен extern "C"?
28. Что будет, если в двух файлах сделать функцию с одинаковым именем и параметрами? На каком этапе возникнет ошибка?
29. Как экспортировать/импортировать функции из динамической библиотеки?
30. Какая разница между С-style приведением типов и C++ приведением?
C++
31. Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?
32. Что такое Uniform initialization? Aggregate initialization?
33. Что такое Reference to temporary object? Как продлить время жизни временного объекта?
34. Что такое делегирующий конструктор?
35. Что такое список инициализации?
36. Какой порядок инициализации полей класса? Что случится, если конструктор инициализирует поля в другом порядке?
37. Что случится, если инициализировать поле другим полем?
38. Что такое copy elision? Сколько раз будет вызван конструктор/деструктор у объекта, которого возвращают по значению?
39. Что такое move-семантика?
40. В каких случаях не будет сгенерирован конструктор копирования?
41. Чем отличается конструктор копирования от оператора присваивания?
42. При каких условиях в конструкторе можно выбросить exception?
43. Что такое конструктор по умолчанию? Для чего нужны default и delete?
44. Чем отличается интерфейс от абстрактного класса?
45. Какие виды полиморфизма в С++?
46. Как реализовано наследование в большинстве компиляторов?
47. Множественное наследование: за и против?
48. Виртуальное наследование и порядок конструирования?
49. Зачем использовать override?
50. Какие есть правила вывода типа при использовании auto? В каких случаях auto может привести к нежелательному копированию объекта?
51. Расскажите обо всех возможных способах использования ключевого слова static в С++. Что такое static initialization order fiasco?
52. Что делает вызов throw; в блоке catch?
53. Чем отличается constexpr от const?
54. Что такое const correctness?
55. В каком случае можно использовать const_cast?
56. Что такое ключевое слово mutable и когда его нужно использовать?
57. Что такое ключевое слово friend и когда его нужно использовать?
58. Расскажите о лямбда-выражениях в С++ и доступ к переменным во внешней области видимости, захват this в лямбду и время жизни лямбды и захваченных переменных?
59. Что такое функтор? Напишите пример.
60. Что такое специализация шаблона?
61. Что такое dynamic_cast и run-time type identification?
62. Что такое exception? Как бросить и поймать?
63. Что будет, если бросить exception из конструктора? А из деструктора?
64. Что будет, если не поймать exception?
65. Что произойдет, если exception выйдет за пределы блока noexcept функции?
66. Для чего можно использовать приватное наследование?
67. Что такое контракт функции?
68. Что такое vptr и vtable?
69. Где содержится vptr?
70. Где содержится vtable?
71. Какая разница между overload and override?
72. Как компилятор различает члены класса и обычные переменные в функциях?
73. Зачем используют exceptions?
74. Что такое блоки try-throw-catch?
75. Расскажите о логике catch-блоков.
76. Что такое move constructor?
77. В чем разница между константным методом и неконстантным?
78. Что такое В-нотация и как определить сложность любого алгоритма?
79. Что такое таблица виртуальных методов?
80. Какие функции класса автоматически генерирует компилятор, если их не определить?
81. Что такое выравнивание данных?
82. Что такое exception?
83. Какие есть стандартные контейнеры и на основе каких структур они построены?
84. Что такое Undefined behavior? Приведите примеры.
85. Как определить, что в программе есть memory leak?
86. Для чего нужен std::make_shared? Чем он лучше создания std::shared_ptr через конструктор?
87. Что будет, если выделить один объем памяти, а записать больше?
88. Что такое переполнение stack?
Паттерны проектирования
89. Зачем нужны паттерны? Какие типы паттернов различают?
90. Недостатки паттерна Singleton? Когда он уместен?
91. Преимущества и недостатки PIMPL?
92. В чем разница между паттерн-фабрикой и фабричным методом? Когда использовать какой из них?
93. Что такое паттерн Observer?
94. Як контролировать состояние программы? Машину состояний? Паттерн состояние?
95. Что такое паттерн Visitor?
Метапрограммирование
96. Какие есть правила вывода типа в шаблоне?
97. Чем отличается using от typedef?
98. Сколько памяти занимает произвольная структура? Что такое выравнивание объекта?
99. Почему пустая структура занимает 1 байт? Какая минимальная единица адресации в С++?
OOP/OOD
100. Что такое SOLID? Что означает каждый из этих принципов?
101. Расскажите о паттернах проектирования.
102. Что такое Dependency Injection? Приведите пример.
103. Какие преимущества и недостатки функционального подхода?
104. Что такое принцип RAII?
105. Что такое принцип DRY?
106. Что такое принцип KISS?
107. Какие преимущества композиции перед наследованием?
STL / Algorithms
108. Какие алгоритмы с STL использовали? Каких не хватает?
109. Какими особенностями должен обладать класс, чтобы он был итератором?
110. Какие бывают итераторы?
111. Расскажите об инвалидации итераторов.
112. Как оптимизировать удаление элемента со средины вектора?
113. Как реализован vector?
114. Как реализован list?
115. Как расширить STL-контейнеры?
116. Какие есть алгоритмы в STL?
117. В чем разница между vector, deque, list, set e STL?
118. Когда надо использовать map? Когда - unordered_map? Какая сложность поиска и вставки в этих контейнерах?
119. Как проверить, есть ли в контейнере элементы? Почему вызов container.size() является плохой практикой?
120. Что такое exception safety guarantee? Какую exception safety guarantee имеют STL-контейнеры?
121. Расскажите о типах умных указателей и о подсчете ссылок в них.
Многопоточность
122. Является ли С++ thread-safe?
123. В чем разница между многопоточностью и асинхронностью?
124. Что такое многопоточность? Какую функциональность предоставляет С++ для разработки многопоточных приложений? Какие основные проблемы многопоточных приложений?
125. Как передать информацию между несколькими процессами?
126. Как синхронизировать между собой несколько процессов?
127. Какие есть особенности работы с shared memory?
128. Как работает spinlock?
129. Какие вы знаете особенности использования recursive mutex?
130. Расскажите о read-write mutex.
131. Что такое race-condition? Взаимная блокировка? Что такое критическая секция?
132. Как избежать состояния гонки?
133. Чем отличается мьютекс от семафора?
134. Какие примитивы синхронизации реализованы в C++? Преимущества lock_guard?
135. Что случится, если exception выйдет за пределы потока? Какие инструменты есть для безопасной асинхронности в С++?
136. Чем отличается std::launch::async от std::launch::deferred?
137. Что такое атомарная операция? std::atomic?
138. Как работать с std::conditional_variable?
139. Как создать поток с помощью std::thread?
140. На сколько потоков лучше разбить задачу? От чего это зависит?
141. Как работать с std::async?
142. Thread-safe гарантии контейнеров в С++? В чем недостаток интерфейса front() + pop_front()?
Networking
143. Что такое TCP handshake?
144. Какая разница между TCP и UDP?
145. Расскажите о протоколах верхнего уровня.
146. Какая разница между HTTP и HTTPS?
147. Расскажите об SSL/TLS handshake.
SCM / CI / CD
148. Расскажите о процессах CI.
149. Как отредактировать комит?
150. Расскажите об интерактивном rebase.
151. Какие могут быть способы дебаггинга кода?
152. Для чего нужны Unit test? Чем отличается от Functional Test?
153. Как тестировать код? Какой используете фреймворк?
154. Какие библиотеки знаете для написания тестов?
155. Что такое mock?
156. Сколько тестов нужно написать на одну функцию?
157. Что такое побочный эффект, идемпотентность и чистые функции?
158. Что такое контейнеризация и в чем преимущества и недостатки? Что такое Docker или иной инструмент контейнеризации?
159. Что такое CI/CD и какие преимущества приносит для разработчика?
160. Какие принципы итеративных методологий?
161. Какие преимущества и недостатки code-convention?
Практические задания
162. Напишите максимально корректную реализацию класса string с конструктором копирования и оператором присваивания.
163. Напишите реализацию очереди.
164. Реализуйте функцию, которая за один проход найдет уникальный элемент в контейнере.
165. Напишите thread-safe пул потоков.
166. Напишите игру жизни в ООП стиле.
167. Напишите класс, который достает из базы список товаров по фильтру и показывает на консоли. Напишите тесты для него.
168. Любая задача на написание кода, чтобы проверить умение проектировать интерфейсы и придерживаться принципов SOLID, DRY, KISS.
169. Напишите свою реализацию std::atomic.
170. Напишите программу для анализа графов: нахождение циклов, deadlock-состояний, циклов, недоступных состояний.
171. Напишите программу, которая бы проверяла, что в системе запущен только один ее экземпляр. Решение должно быть cross-platform.
172. Проанализируйте C++ код с точки зрения качества: выявить потенциальные memory leak, нерациональное использование STL-контейнеров, алгоритмов, неоптимальные конструкции и тому подобное.
173. Напишите код для решения судоку.
174. Напишите код, который найдет зацикливание в односвязном списке.
Senior
Общее
1. Как вы понимаете SOLID?
2. Как разработать систему плагинов на С++?
3. Что такое RPC? Какие библиотеки знаете?
4. На что обращать внимание при проведении code review?
5. Какие есть проблемы при написании кроссплатформенного кода? На что обращать внимание?
6. Что делать, если код работает медленно?
7. Какие есть способы и методологии измерения быстродействия кода? Как можно устранить/уменьшить влияние замеров на быстродействие?
8. Что такое SFINAE? Для чего используется?
9. Что такое метапрограммирование? С помощью чего реализуется на С++?
10. Как использовать variadic templates?
11. Как тестировать закрытые методы?
12. Как считать покрытие тестами? Нужно ли это делать?
13. Что такое cache miss и как это выявить?
14. Что такое SIMD-инструкции? Какие необходимые условия и способы их использования?
15. Что такое покрытие кода и как обеспечивается?
16. Опишите принципы lock-free структур данных и свой опыт работы с ними.
Препроцессор и компиляция
17. Расскажите о построении билд-системы.
18. Как работать с билд-системами: Make, CMake.
19. Как интегрировать third-party в проект?
20. Что такое барьеры памяти?
21. Расскажите о работе с сырыми указателями и о ручном управлении памятью.
22. Что такое статический анализатор кода? Какие знаете?
23. Что такое динамический анализатор кода? Какие знаете?
24. Проект медленно собирается. Как можно ускорить?
C/C++
25. Расскажите об использовании realloc в контейнерах.
26. Как работают шаблоны?
27. Расскажите о специализации шаблонов.
28. Как работает RTTI?
29. Можно ли использовать exception в конструкторе/деструкторе?
30. Что такое rvalue и lvalue?
31. В чем особенности контейнеров std::set, std::map, std::unordered_map, std::hash?
32. Что такое placement new? Для чего используют? Как сделать placement delete?
33. Как размещается в памяти класс со множественным наследованием и виртуальными функциями?
34. Как работают точки остановки?
35. Что такое уязвимости? Каков механизм их работы?
36. Как написать собственный std::shared_ptr?
37. Что такое curiously recurring template pattern?
38. Опишите назначение и принцип работы std::shared_ptr, std::unique_ptr и std::weak_ptr.
39. Какое назначение и отличия использования std::variant и std::any?
40. Какие улучшения получил std::search в С++17 ?
41. Что такое copy elision и когда он становится возможным? Какие особенности для разных стандартов?
42. Что такое Return Value Optimization?
OOP/OOD
43. Объясните принципы SOLID.
44. Объясните принципы KISS.
45. Объясните принципы YAGNI.
46. Какие есть подходы к оптимизации кода?
47. На что стоит обращать внимание при code review?
48. Какие есть паттерны проектирования? Почему не советуют использовать Singleton?
49. Что такое статический полиморфизм?
STL / Algorithms
50. Когда std::vector может использовать std::move?
51. Расскажите о своем любимом алгоритме поиска.
52. Что такое lock-free и wait-free алгоритмы? В чем их отличия и способы реализации?
53. Опишите назначение execution policy для параллельных алгоритмов.
Многопоточность
54. Расскажите о построении API, рассчитанных на многопоточное использование.
55. В чем разница между kernel-level и user-level потоками?
56. Что такое coroutine?
57. Что делает спецификатор thread_local?
58. Как реализовать синхронизацию в задаче producer-consumer?
59. Як синхронизироваться между различными процессами?
SCM / CI / CD
60. Расскажите о настройке процесса менеджмента ветвей репозитория.
61. Расскажите о стратегии разветвления (branching).
Практические задания
62. Напишите базовую реализацию std::shared_ptr.
63. Реализуйте алгоритм сортировки.
64. Реализуйте алгоритм хеширования.
65. Реализуйте shared_ptr с расширением для weak_ptr.
66. Реализуйте простейший producer-consumer, используя условные переменные.
67. Опишите как можно подробнее, что происходит в системе, когда приложение делает сетевой запрос.
68. Детально описать дизайн программного компонента, например, системы голосования; учесть при этом высокую нагрузку и сделать ее расширяемой и отказоустойчивой.
Выражаем благодарность за участие в статье Александру Жакуну, Ярославу Пушко, Назару Семенишину, Сергею Подоброму, Владимиру Кочуну, Владимиру Новикову, Сергею Кривоносу, Марку Цирульнику, Кириллу Пшеничному, Виктору Шуму, Сергею Братусю.
ТОП-10 найкращих відео з FrontEnd
Автор: Влад Сверчков
Вітаємо!
Друзі, сьогодні ми підготували для вас вибірку найкращих вебінарів від ITVDN за напрямком FrontEnd. До рейтингу були включені як пізнавальні вебінари з актуальною інформацією, так і вебінари прикладного характеру, які мають на меті вдосконалення ваших навичок написання коду. Давайте приступимо до їх розгляду.
Як стати FrontEnd розробником? Покрокова інструкція для початківців
Автор – Тисячний Влад, Middle React.js / React Native Developer.
FrontEnd Developer – це розробник, який створює клієнтську сторону веб-сайтів. Ваші улюблені сервіси – соціальні мережі, відеохостинги, інтернет-магазини, – будь-який інтернет-продукт необхідно піднести користувачеві в привабливому та зручному для нього вигляді. В такій задачі не обійтися без фронтенд спеціаліста.
Які вимоги висувають роботодавці до FrontEnd-розробника? Що потрібно знати та вміти, з чого почати та як краще спланувати навчання? На вебінарі ви отримаєте відповіді на всі питання, що вас цікавлять, і складете цілісне уявлення щодо професії FrontEnd розробника.
Адаптивне верстання на FlexBox та Grid
Авторка – Ткаченко Анастасія, FrontEnd Developer.
Flexbox та Grid – технології, які широко використовуються у верстанні сайтів та суттєво спрощують реалізацію їх адаптивності. Що вони являють собою?
CSS Flexbox (Flexible Box Layout Module) – модель макету гнучкого контейнера – є способом компонування елементів, в основі лежить ідея осі. Flexbox складається з гнучкого контейнера (flex container) та гнучких елементів (flex items). Гнучкі елементи можуть вишиковуватися в рядок або стовпчик, а вільний простір, що залишився, розподіляється між ними різними способами.
CSS Grid Layout – система двомірного макету, оптимізованого для дизайну користувацького інтерфейсу. Головна ідея, що лежить в основі макету сітки, полягає у розподілі веб-сторінки на стовпці та рядки. У області сітки, що утворилася, можна поміщати елементи сітки, а керувати їх розмірами і розташуванням можна за допомогою спеціальних властивостей модуля.
У ході вебінару були продемонстровані можливості цих технологій та переваги їхньої комбінації на практиці (у якому разі яку технологію варто використовувати) для створення адаптивних сторінок.
Створення гри Тетріс на JavaScript | Частина 1, 2, 3
Автор – Ростислав Силівейстр, FrontEnd Developer.
Чудовий вебінар, який підійде навіть тим, хто має нульовий рівень знання JavaScript. Навчання програмуванню шляхом реалізації культової гри Тетріс – це той самий випадок, коли ви поєднуєте приємне з корисним, а результати можуть бути гордо представлені своїм знайомим, друзям і родичам.
Кожна частина вебінару зачіпає визначені автором теми:
Перша частина включає постановку завдання, ознайомлення з правилами гри, реалізацію поля, падіння і переміщення фігур в сторони.
Друга частина спрямована на реалізацію обертання фігур, прискорення їх падіння, зникнення заповнених рядів, нарахування очок, переходу до наступного рівня, і навіть базові ігрові опції (старт, пауза, почати заново, game over).
Третя частина є останньою — відбувається тестування та виправлення недоліків, оптимізація коду та підбиття підсумків.
Після старанного вивчення всіх трьох частин вебінару та завзятої практики ви навчитеся:
розбиратися у структурах, типах даних, функціях JavaScript;
роботі з DOM у JavaScript;
роботі із засобами HTML/CSS для розміщення елементів на сторінці;
систематичному підходу до вирішення завдань, тримаючи в увазі всі деталі;
розумінню логіки створення ігор;
розумінню основ алгоритмів.
Memory Game на JavaScript за 2 години
Автор – Ярослав Вовченко, FrontEnd Developer.
Щоб почати писати мовою JavaScript, не обов'язково одразу заглиблюватися у вивчення документації. На прикладі написання простої Memory Game ви дізнаєтеся, як обирати елементи в DOM, проходити по спискам та масивам, додавати, прибирати елементи та “слухачі дій”.
На вебінарі ви разом з автором поринете у практичне розроблення на JavaScript. Для цього необхідно мати базові знання HTML, CSS та JavaScript.
Вебінар організований наступним чином:
Створення структури проєкту, написання перших файлів.
Розмітка та стилізація ігрового поля за допомогою HTML та CSS.
Основи роботи з перспективою у CSS.
Збереження та порівняння обраних карток.
Написання додаткового функціоналу.
Підсумки, запитання та відповіді.
Цей вебінар буде цікавий тим, хто хоче вивчити основи JavaScript у легкій та доступній формі без багатогодинного читання документації.
Об'єктно-орієнтоване програмування JavaScript | ООП у JavaScript
Автор – Георгій Клюковкін, Lead Software Engineer.
Це відео допоможе вам зрозуміти, у чому відмінність ООП підходу до розробки в мультипарадигменній мові JavaScript від ООП підходу в класичних об'єктно-орієнтованих мовах, як, наприклад, Java. Ви дізнаєтеся, які плюси та мінуси має ООП в JavaScript, а також, які правила ООП ми можемо в ньому застосовувати.
Автор торкається наступних тем:
Основні принципи ООП.
Наслідування vs Композиція.
Об'єктно-прототипне наслідування у JS.
Функції-конструктори та класи.
Single responsibility principle.
Вебінар буде корисний розробникам-початківцям JavaScript, або тим, хто працює в іншому напрямку і при цьому бажає розібратися в особливостях ООП на JavaScript.
П'ять обов'язкових алгоритмів JavaScript розробника.
Автор – Тисячний Влад, Middle React.js / React Native Developer.
Якщо Ви розробник-початківець і хочете розібратися в тому, наскільки глибоко потрібно вникати у вивчення алгоритмів і структур даних, як часто і які алгоритми потрібно буде використовувати в роботі, хочете зрозуміти, як від правильного вибору алгоритму залежить швидкість роботи сайту, а також дізнатися, як оптимальність алгоритму впливає на швидкість завантаження інформації на сайті — тоді цей вебінар для Вас.
У ньому розглядаються такі теми:
Що таке алгоритми та структури даних.
Як правильно рахувати складність алгоритму.
Чи потрібно знати всі алгоритми і як це впливає на ваш гаманець (приклади реального життя).
5 найважливіших алгоритмів.
Практика написання алгоритмів сортування.
Відповіді на питання.
Підготовка до співбесіди з JavaScript у 2021 році.
Автор – Дмитро Мойсеєв, Software Engineer at EPAM Systems.
У вебінарі порушуються основні питання на співбесіді з JavaScript, які викликають найбільше нерозуміння, особливо у тих, хто перейшов з іншої мови програмування, а також у тих, хто не знайомий з його складними частинами, такими як замикання, прототипне наслідування та особливості асинхронного виконання коду.
Автор торкається наступних тем:
Типи даних та їх перетворення.
Області видимості та замикання.
Прототипне наслідування.
Асинхронне виконання коду.
Відповіді на запитання учасників вебінару.
Даний вебінар буде цікавий тим, хто планує проходити співбесіду на позицію FrontEnd розробника на рівень Junior або Middle Developer. Початківцям він не підійде, тому що в вебінарі не розглядатимуться основи мови, а лише її “гострі кути”.
8. React та Redux на прикладі реального додатку.
Автор – Олександр Краковський, Software Engineer at EPAM.
Даний вебінар допоможе вам на реальному прикладі розібрати, як взаємодіють та працюють сучасні інструменти розробки – React та Redux. Ви зможете написати свій додаток, який буде працювати з реальним API.
У ході реалізації програми будуть виконані наступні пункти:
Встановлення залежностей, налаштування проєкту.
Створення базових компонентів та підключення Redux.
Налаштування залежностей для роботи із запитами до сервера.
Створення запитів та оброблення даних через Redux.
Запуск програми, виправлення помилок.
Аналіз виконаної роботи.
9. Створення першого проєкту на Angular
Автор – Генріх Коваленко, FrontEnd Developer.
У цьому вебінарі ви познайомитеся зі структурою та компонентами фреймворку Angular, а також створите перший проєкт із використанням Angular CLI.
На вебінарі розглядаються наступні теми:
Що таке Angular і в чому його відмінність від інших популярних фреймворків та бібліотек.
Angular CLI, його встановлення та використання у створенні першого проєкту.
У чому призначення компонентів та як їх застосувати для зручності підтримки коду надалі.
Обслуговування Angular.
Модулі.
Пайпи та їх застосування, створення своїх пайпів.
Директиви *ngFor та *ngIf.
Підсумки. Запитання, відповіді.
Даний вебінар буде цікавий тим, хто володіє мовою JavaScript на базовому рівні і хоче познайомитися з Angular для подальшої роботи з даним фреймворком.
10. Як стати React розробником
Автор – Олег Мельничук, Full Stack JS Developer.
React — бібліотека JavaScript, яка впевнено тримає позиції у світі веб-розроблення поруч із найпопулярнішими фреймворками. На вебінарі піднімається історія виникнення React.js, після чого йде порівняння з іншими популярними веб-технологіями.
Автор розповідає, чому React – це гарний вибір для входу до FrontEnd. Ви дізнаєтесь, наскільки потрібний чистий JS і чи можна відразу вивчати React. Буде детально розібраний Roadmap React розробника: що можна пропустити на перших етапах, що краще вивчити детально, а на що не варто витрачати сили. Також, автор надає перелік знань та навичок, з якими можна знайти першу роботу у якості React Developer`a.
Буде порушено питання подальшого розвитку – як із Frontend розробника на React можна стати Full Stack або Mobile розробником.
Цей вебінар буде цікавий Frontend розробникам-початківцям, а також веб-розробникам, які планують перейти на React або вивчити його як додаткову технологію.
Вивчайте FrontEnd розробку на ITVDN!