Результати пошуку за запитом: видеокурс c*
Співбесіда з 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!
Що повинен знати FrontEnd розробник у 2021 році
Автор: Влад Сверчков
Верстка сайтов и веб-программирование привлекают большое количество новичков в мир IT. Это связано с достаточно низким порогом вхождения. Количество желающих стать фронтендщиком с каждым годом увеличивается, вследствии чего растут и требования к кандидатам.
Какие технологии необходимо изучить, чтобы стать FrontEnd разработчиком в 2021 году? Давайте разберемся.
HTML5 & CSS3
HTML5 и CSS3 — это фундаментальные технологии, без знания которых не обойтись ни одному веб-разработчику. С помощью языка гипертекстовой разметки HTML создается разметка (каркас) каждой интернет-страницы. Затем язык стилей CSS преображает сайт и придает ему привлекательный и эффектный внешний вид. Помимо этого, необходимо владеть:
кроссбраузерной адаптивной версткой, чтобы уметь создавать сайты под мобильные устройства, планшеты и широкоформатные экраны и для различных браузеров;
семантической версткой для повышения качества разметки и улучшения поисковой индексации сайта;
валидной версткой, которая предполагает полное соответствие кода разработчика всем стандартам W3C — организации, которая создает и внедряет технологические стандарты для World Wide Web.
Уделите особое внимание верстке под мобильные устройства, так как современный веб-потребитель очень много времени проводит в смартфоне. Существует даже специальный подход, при котором сначала верстается веб-сайт под мобильные устройства, а только потом под десктопы — называется Mobile First.
Это общие требования по верстке. Теперь же рассмотрим более детально требования конкретно по языку стилей. Здесь вы должны знать основные свойства CSS3: фоны, градиенты, тени, анимации, трансформации, переходы, а также технологии Flex и Grid, о которых мы еще поговорим.
Хорошее владение HTML и CSS уже позволяет заниматься версткой сайтов и зарабатывать деньги. Именно с этих двух базовых технологий начинается путь к профессии FrontEnd разработчика.
Качественно изучить HTML и CSS вы сможете при помощи следующих наших курсов:
HTML5 & CSS3 Стартовый;
HTML5 & CSS3 Базовый;
HTML5 & CSS3 Углубленный.
Flex и Grid CSS
Технологии верстки надежных адаптивных веб-страниц, которые позволяют легче создавать динамические сайты и удобнее структурировать их содержимое. Лучше всего Flex-верстку в действии показывает интерактивный сайт flexboxfroggy.com, а Grid-верстку - cssgridgarden.com.
На нашем ресурсе также есть курсы, которые хорошо объясняют темы Flex и Grid верстки: “Верстка сайта на CSS Grid”, “Верстка сайта на FlexBox CSS”.
Bootstrap 4
Популярная HTML/CSS платформа для разработки адаптивных веб-приложений, которую применяют при создании сайтов и интерфейсов администраторских панелей. Основные преимущества Bootstrap:
высокая скорость верстки;
кроссбраузерность и кроссплатформенность;
наличие хорошей документации, большого сообщества и огромного количества разнообразных обучающих материалов;
низкий порог вхождения (необходимо знать лишь основы HTML, CSS, JavaScript и jQuery).
Также, будет полезно знать еще 2 CSS-фреймворка: Foundation и Materialize. Первый является комплексным и профессиональным инструментом, который следует принципу Mobile First. Имеет продвинутый интерфейс и позволяет создавать действительно уникальные, элегантные и легко настраиваемые веб-сайты. Под эгидой Foundation были созданы такие веб-сервисы, как: Facebook, Mozilla, Adobe, Amazon, eBay и многие другие.
Materialize исповедует принципы Material Design от компании Google, которые преследуют идеи цифровой унификации для более легкого и комфортного восприятия интерфейса. На сайте material.io можно более детально ознакомиться с идеологией материального дизайна. Фреймворк Materialize незаменим при разработке несложного многостраничного веб-сайта или лендинга за счет богатых возможностей уже готовых и встроенных компонентов и стилей. Также, Materialize предоставляет разные компоненты и варианты поведения, обычно не встречающиеся в других фронтенд-фреймворках (поведение волн, scrollFire, scrollSpy, или специфичные для мобильных устройств выдвижные меню и всплывающие подсказки и т. д.).
Foundation подходит разработчикам с опытом, в то время, как Materialize — отличный выбор для начинающих девелоперов, которые хотят как можно плотнее познакомиться с материальным дизайном.
CSS препроцессоры
CSS препроцессор — это программа, которая имеет свой собственный синтаксис, но может сгенерировать из него CSS код. Самыми популярными считаются SASS, Stylus, LESS и PostCSS, однако, наибольшее комьюнити имеет именно SASS. Препроцессоры предназначены для:
ускорения процесса написания кода;
упрощения чтения кода и дальнейшей его поддержки;
минимизации рутинной работы при написании кода.
Для повышения эффективности написания CSS кода вполне достаточным будет изучение лишь одного препроцессора.
Git & GitHub
Git — наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии.
Помимо этого, стоит уметь работать с сервисом онлайн-хостинга проектов, использующих систему контроля версий. В данном случае это GitHub. В тандеме с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах.
Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы.
Git & GitHub — очень важные инструменты для любого IT-разработчика, изучением которых следует заняться как можно раньше.
Мы рекомендуем изучать Git на ITVDN при помощи курса “Основы работы с Git”.
Знания о веб-технологиях и сети интернет
Чтобы качественно выполнять свою работу, фронтенд разработчик должен разбираться в вебе и понимать принципы его функционирования. Таким образом, необходимо знать:
как работает интернет;
протоколы HTTP/HTTPS, веб-сокеты;
как работают браузеры;
что такое DNS и как он работает;
что такое доменное имя;
что такое хостинг.
Также, будет неплохо, если вы попробуете настроить сайт на каком-нибудь бесплатном хостинге, привяжете домен к этому хостингу.
JavaScript
Язык программирования, который используется как при разработке клиентской стороны веб-приложения, так и серверной. При помощи JavaScript (сокращенно — JS) можно писать даже настольные и мобильные приложения, используя определенные программные платформы и библиотеки. Этот язык позволяет:
динамически изменять разметку;
осуществлять интерактивное взаимодействие с пользователем;
анимировать изображения;
совершать валидацию форм;
управлять мультимедиа и т. д.
Другими словами, JavaScript “оживляет” страницу и добавляет ей функциональности. Хорошее владение данным языком программирования является обязательным для каждого FrontEnd разработчика.
Сергей Росоха, Software Architect с 11-летним опыта во FrontEnd/JS, отмечает важность изучения алгоритмов и структур данных на JavaScript:
“JavaScript давно уже используется не только для разработки динамических интерфейсов пользователя, но и для написания достаточно сложной бизнес-логики. Поэтому знание алгоритмов и структур данных становится критичным для JS-разработчиков. ” (источник)
JavaScript использует официальный стандарт ECMAScript (сокращенно - ES), который подразумевает определенное формальное описание синтаксиса, базовых объектов и алгоритмов. На данный момент существует множество различных версий ES. Работодатели чаще всего требуют знание ES6+.
Однако, вначале необходимо изучить чистый JavaScript и лишь потом вникать в новые стандарты. Как ни крути, а классику надо знать. Благодаря хорошему владению JS можно быстро разобраться в любой версии ES и затем освоить любой фреймворк или библиотеку.
ITVDN предоставляет возможность изучить JavaScript с нуля до продвинутого уровня при помощи курсов:
JavaScript Стартовый;
JavaScript Углубленный;
JavaScript: Расширенные возможности.
Линтеры
Инструменты, которые позволяют анализировать качество JavaScript-кода согласно определенному стандарту ES. Они встраиваются в среду разработки и указывают на наличие несоответствий стандарту в коде, если таковые имеются. Данный механизм полезен как для одиночной разработки (для самоконтроля), так и для командной, когда каждый разработчик должен следовать одним и тем же языковым конструкциям, дабы на выходе получить единый, целостный проект. Среди известных линтеров можно выделить ESLint и Prettier.
Тестирование
Jest, Cypress и Enzyme — главные инструменты модульного тестирования, которое возлагается на плечи разработчика. Но что это такое?
Unit тестирование (оно же — модульное тестирование) — процесс, который заключается в создании тестов для проверки работоспособности отдельных участков написанного программистом кода. Выполняется непосредственно автором кода.
Какую пользу приносит Unit тестирование:
существенное сокращение багов в коде;
упрощение рефакторинга кода;
обеспечение качественного отделения интерфейса от реализации;
лучшее понимание написанного кода;
возможность протестировать мельчайшие участки кода.
Все три инструмента учить не надо — достаточно научиться управляться лишь с одним из них.
Паттерны проектирования JavaScript
Это лучшие практики, которые описывают типичные способы решения распространенных задач, возникающих в ходе проектирования программного обеспечения. Знание шаблонов проектирования позволяет писать более чистый, понятный и читаемый код, а также избегать “изобретения велосипеда”. Более того, владение паттернами показывает вашу грамотность, как разработчика, и повышает вашу ценность в глазах работодателя, что поможет выделиться на фоне конкурентов.
Чтобы вы могли хорошенько разобраться с темой шаблонов в JavaScript, рекомендуем курс “JavaScript Шаблоны”.
Алгоритмы и структуры данных
Понимание алгоритмов и структур данных — обязательные знания для любого программиста.
К структурам данных относятся: стеки, очереди, связанные списки, графы и т. д. Изучив их, вы сможете управлять сложностью своих программ, делая их более доступными для понимания, а также разрабатывать высокопроизводительные программы, которые будут эффективно работать с памятью.
Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач. Когда говорят об алгоритмах, обычно имеют ввиду алгоритмы сортировки и поиска: сортировки прямым включением, прямым выбором, слиянием, пирамидальная, прямой поиск, бинарный, индексно-последовательный и другие.
Важно разбираться и в нотации Big O, которая описывает сложность каждого алгоритма. Данный механизм помогает определить, при каких условиях выгоднее использовать тот или иной алгоритм.
Отметим, что как новичку, вам не надо нырять вглубь этих тем. Будет достаточно теоретического владения, а также умения написать несколько алгоритмов. В разработке сайтов это не сильно нужно, но практически ни одно собеседование не обходит стороной тему шаблонов, алгоритмов и структур данных.
Фреймворки JavaScript
Это инструменты, с помощью которых создаются динамические веб/мобильные/десктопные приложения на языке JavaScript. Они ускоряют разработку веб-приложений и предусматривают четко структурированную организацию кода, повышая его качество и чистоту.
Самыми популярными фреймворками для фронтенд-разработки можно назвать Vue.js, React и Angular. Каждый из них предназначен для решения своего спектра задач и имеет различную степень сложности: Vue.js - самый легкий (но и с наименьшим сообществом), React - средней сложности, Angular - высокой сложности. Стоит сконцентрироваться на глубоком изучении одного фреймворка, но в то же время очень рекомендуется знать особенности и сферу применения всех вышеперечисленных технологий.
Какой фреймворк все же выбрать? Мнения на этот счет расходятся. Инструментарий выбирается индивидуально под проект и трудно предугадать, какие задачи вам нужно будет решать. На данный момент наибольшей популярностью пользуется React, поскольку он сбалансирован как с точки зрения сложности, так и с точки зрения богатства функционала. К тому же, наибольшее количество вакансий припадает именно на этот фреймворк, а значит, что он интересен не только разработчикам, но и бизнесу.
Каждый из фреймворков доступен для изучения на платформе ITVDN. По направлению Angular:
Angular 11.0 Базовый;
Angular Углубленный.
По направлению React:
React Базовый;
React Углубленный.
По направлению Vue.js:
Vue.js Стартовый;
Vue.js Базовый.
Инструменты управления состоянием приложения (State Management)
Большие веб-приложения постоянно растут в сложности, а потому хранить данные, которые могут использоваться в разных местах становится все сложнее. Для решения этой проблемы были придуманы отдельные библиотеки, идущие параллельно с фреймворками — они служат для управления глобальным хранилищем данных всего веб-приложения и называются менеджерами состояний. Их применение уже стало стандартом во FrontEnd разработке. Для девелоперов, которые используют Vue.js, это VueX, для React-разработчиков — Redux и MobX, для Angular-девов — RxJS, NgRx.
JavaScript Core (DOM, AJAX, JSON)
DOM (Document Object Model) - объектное представление исходного HTML-документа. Ключевым является понятие DOM-дерева, которое описывает структуру страницы. С помощью объектной модели JavaScript получает полную власть над HTML-документом: возможность редактировать, удалять и добавлять элементы и атрибуты HTML, менять CSS код и т. д.
AJAX (Asynchronous JavaScript And XML) - это синтез технологий JavaScript и XML, который фактически представляет собой комбинацию:
встроенного в браузер XMLHttpRequest-объекта (чтоб запрашивать данные с веб-сервера);
JavaScript и HTML DOM (чтобы отображать или использовать данные).
AJAX позволяет веб-страницам совершать асинхронное обновление, обмениваясь данными с веб-сервером. Благодаря этой технологии страница не нуждается в перезагрузке - обновляется лишь конкретная ее часть (вспомните ленту новостей в социальных сетях).
JSON (JavaScript Object Notation) - это общий формат обмена данными. Позволяет совершать обмен информацией между программными продуктами, написанными на разных языках. Таким образом, клиент, использующий JavaScript, может легко передавать данные на сервер, который реализован с помощью Ruby/Java/PHP.
Все три технологии являют особую ценность для каждого веб-разработчика и раскрывают организацию работы интернет-приложения.
БЭМ
“Блок, Элемент, Модификатор” — методология, предусматривающая компонентный подход к разработке веб-страниц, в основе которого лежит принцип разделения интерфейса на независимые блоки. Подход БЭМ позволяет повторно использовать существующий код в создании других страниц с сохранением всех его свойств (размеры, шрифт, цвет и т. д.).
Webpack
Мощный сборщик модулей, который позволяет скомпилировать в один файл несколько разных модулей. Используется во время работы над объемными проектами. Успешно применяется как во фронтенд-разработке, так и при создании бэкенд-приложений.
Gulp / Grunt
Системы сборки, которые автоматизируют рутинные задачи разработчиков: минификацию кода, оптимизацию изображений, тестирование, анализ качества кода и прочее. Подходят при разработке небольших проектов.
TypeScript
Кроссплатформенный строго типизированный язык, который является расширением JavaScript. Строгая типизация позволяет уменьшить количество потенциальных ошибок в исходном коде, написанном на TypeScript. Также, этот язык реализует концепции, которые близки объектно-ориентированным языкам, таким как C#, Java и подобным. TypeScript повышает скорость и удобство написания сложных комплексных программ, вследствии чего их становится легче поддерживать, масштабировать и тестировать. В большинстве случаев его необходимо изучать лишь тем, кто ориентирован на работу с фреймворком Angular.
SVG
Язык разметки масштабируемой векторной графики. Изображения на странице, сделанные с помощью SVG, корректно отображаются на экранах с различным разрешением, не теряя при этом своего качества, в отличии от традиционных растровых .jpeg, .png и других.
Английский язык
Знание английского языка является одним из основных требований к фронтенд-разработчику, поскольку большое количество полезной информации находится именно на англоязычных сайтах. Уровень чтения технической документации будет достаточным для комфортного пользования иностранными ресурсами.
Итоги
FrontEnd разработчик — достаточно универсальный боец в мире веб-разработки. Он должен уметь и верстать, и создавать логику работы клиентской части, и понимать работу серверной части веб-приложения. Для освоения такого обширного инструментария стоит запастись временем, терпением и упорством. Перечисленные в статье средства разработки сайтов также имеют аналоги, поскольку для решения разных задач подходят разные веб-инструменты. Однако мы выбрали самые популярные и эффективные из них.
Если у вас остались вопросы о последовательности и необходимости изучения тех или иных технологий, ответы вы можете найти в видео ”Как стать FrontEnd разработчиком?”, в котором подробно рассматриваются основные технологии создания клиентских веб-приложений.
Для тех, кто хочет стать FrontEnd разработчиком, на ITVDN создана комплексная программа обучения, которая включает в себя 42 видео курса.
Желаем вам успехов в достижении ваших целей!
Оставайтесь с ITVDN!
Як стати тестувальником
Автор: Влад Сверчков
Всем привет!
Вы знаете, как создаются программы и информационные сервисы, которыми все мы пользуемся? Какие специалисты нужны, чтобы появился новый Фейсбук, Вайбер, Инстаграм, новый Windows или какая-то крутая видеоигра?
За разработкой программного обеспечения (ПО) стои́т целая команда профессионалов — и далеко не все из них умеют программировать.
Типичная команда будет включать в себя таких специалистов, как:
бизнес-аналитик — проводит анализ бизнес-проблемы, формирует требования к разрабатываемому продукту;
PM (Project Manager) — управляет всеми, кто вовлечен в работу над проектом;
тимлид (Team Leader) — управляет командой разработчиков;
UX/UI дизайнер — создает приятный дизайн приложения (UI) с хорошим пользовательским опытом (UX);
разработчики/программисты — занимаются написанием кода, являются ядром команды;
QA специалист — тестирует приложение на каждом этапе его разработки для обеспечения высокого качества продукта.
Если ПО не предназначено для использования только внутри компании, а нацелено на внешнюю аудиторию, то еще добавляется маркетинг-команда, которая работает с целевыми потребителями: исследует рынок, определяет клиентуру, привлекает ее внимание, подогревает интерес к продукту и многое другое.
Таким образом, в IT найдется хорошая работа даже для тех, кто не любит программировать. И сегодня речь пойдет о таком специалисте, как QA. Чуть выше вы уже узнали, что это, фактически, тестировщик, следящий за качеством ПО на каждом этапе его разработки. В чём специфика данной профессии, чем занимаются эти специалисты, насколько легко стать QA инженером и какие технологии должен знать потенциальный претендент на данную должность — это мы и раскроем в нашей статье. Устраивайтесь поудобней, мы начинаем!
Тестировщик, QC Engineer, QA Engineer
Очень часто термин “тестировщик” применяется ко всем специалистам, которые так или иначе связаны с проверкой ПО на качество. Тем не менее, в данной сфере существует формальное разделение профессий на три ветви: Tester, QC и QA. Давайте выясним, что означает каждая из них.
Тестировщик — специалист, который фокусируется на проведении непосредственных тестов над уже созданным ПО (составление тест-кейсов и баг-репортов, локализация дефектов и другое). Специалист проверяет, все ли работает согласно заявленным требованиям, производит сбор статистических данных и фиксирует их в соответствующих документах.
Тестировщик внимательно пользуется разработанным ПО, воспроизводит все возможные действия пользователя, работает с приложением на различных операционных системах, в различных браузерах (если это веб-приложение), на различных мобильных платформах (если это мобильное приложение); помимо ошибок он ищет еще и уязвимости.
Что-то вроде техосмотра транспортного средства. Отчеты об ошибках затем направляются разработчикам, которые ответственны за дальнейшее исправление багов.
QC (Quality Control) Engineer — специалист, который обеспечивает не только соответствие разрабатываемого ПО заявленным требованиям, но и его соответствие заранее определенным критериям качества продукта в целом. Также, он ответственен за определение готовности продукта к выпуску в продакшн. Цель Quality Control специалиста — формирование объективной картины состояния качества ПО на различных этапах разработки. Можно сказать, что специальность тестировщика является подмножеством специальности QC Engineer.
QA (Quality Assurance) Engineer — специалист, который обеспечивает контроль качества разрабатываемого ПО на всех этапах его планирования, проектирования и создания. Работа на этой должности является проактивной и носит превентивный характер, поскольку QA инженер уделяет внимание качеству продукта еще до того, как тот будет создан. Здесь на первый план выходят комплексы мероприятий, процессы и средства обеспечения качества ПО на каждом витке разработки. Непосредственно тестирование системы занимает уже второе место. Главное задание QA — выстроить систему так, чтобы она имела как можно меньше зон, где можно допустить ошибку, соответствовала всем показателям качества, а также была легко тестируема.
Специальность QC Engineer является подмножеством специальности QA Engineer.
Чтобы вас не путать, в данной статье мы приравняем понятия “тестировщик” и “QA инженер” в пользу второго. Будем расписывать стек технологий и путь становления именно QA специалиста. Таким образом мы сможем затронуть максимальное количество информации касательно направления тестирования.
Направления QA
Начнем с того, что в QA есть два основных направления — Manual и Automation. Специалисты каждого из них называются мануальный (ручной) тестировщик и тестировщик-автоматизатор, соответственно. Их разница в том, что первый следит за качеством продукта и проводит все тесты вручную, а второй автоматизирует тестирование путем написания скриптов. Automation QA использует определенный язык программирования и фреймворк для того, чтобы создавать программы, которые будут производить тестирование продукта вместо самого специалиста. Такой подход позволяет сократить время на тесты.
В обязанности мануального QA инженера входят:
анализ и выяснение требований у заказчика либо бизнес-аналитиков;
планирование процесса тестирования;
написание сценариев тестирования;
непосредственно тестирование программного продукта;
определение проблемных мест, их документирование;
использование систем отслеживания багов (баг-трекинги);
обсуждение исправлений с разработчиками, активное взаимодействие с ними;
отслеживание жизненного цикла ошибок;
повторный тест исправленных дефектов;
анализ тестирования;
планирование идей по оптимизации качества программного обеспечения;
ведение тестовой документации;
проверка требований к программному обеспечению;
оценка рисков;
участие в стенд-апах и других митингах.
Тем временем на плечи Automation QA помимо прочего возлагаются такие обязанности, как:
написание новых автотестов на основе разработанных вручную;
обновление поломанных/устаревших автотестов;
прогон автотестов;
анализ результатов тестовых прогонов;
настройка тестового окружения;
ревью кода;
оформление автотестовой документации.
На самом деле и мануальное, и автоматизированное направление имеют много общих требований, поскольку их фундамент одинаков. Давайте начнем с рассмотрения Manual QA, а затем плавно дополним его инструментами Automation QA.
Стек технологий Manual QA Engineer
Общая теория по IT
Если лет 15 назад в тестировщики брали чуть ли не “с улицы”, то сейчас к претендентам с каждым годом выдвигают все больше и больше требований. Так что потенциальный претендент на должность прежде всего обязан хорошо понимать IT индустрию.
Итак, в этот пункт предусматривает такие темы, как:
веб-технологии (HTTP, HTTPS, DOM, JSON, cookie, session), клиент-серверная архитектура;
базы данных;
компьютерные сети;
операционные системы (обратить особое внимание на Unix);
мелкие подтемы, как, например, системы счисления и т. д.
Теория тестирования и тестовая документация
Безусловно, любой QA инженер должен знать, с чем он вообще имеет дело. Если на заре разработки тестирование было чем-то интуитивным, то сегодня оно обрело четкие формы, обзавелось своими методиками, инструментарием и специализированным программным обеспечением.
Изучив теорию тестирования, вы сможете ориентироваться в данном направлении, понимать принципы, типы и методы тестирования, тест-дизайна, этапы жизненного цикла ПО; узнаете, как правильно составлять тестовую документацию (тест кейс, баг-репорт, чек-лист и т. д.) и многое другое.
Основные темы:
Тестирование, основные стандарты ISTQB.
SDLC и STLC. Методологии разработки ПО.
Требования. Анализ и составление требований.
Тестовая документация.
Уровни, типы, методы и виды тестирования.
Техники тестирования. Тест-дизайн
Баги и баг-трекинговые системы.
Системы контроля тестов.
Основы программирования + HTML/CSS
Основы программирования мануальному QA нужны не для того, чтобы заниматься непосредственным кодингом, а чтобы уметь читать код разработчика и понимать, что в нем происходит. Здесь важен не сам язык программирования, а банальное понимание того, как создаются программы, что такое переменные, функции, методы, классы, какие есть методологии программирования, как они реализуются и т. д. Для изучения основ отлично подойдет C# либо Java. Возможно, сюда стоило бы включить и Python, но он, пожалуй, слишком легкий для изучения и при работе с другими языками вам придется что-то доучивать. C# с Java же более фундаментальны и зная основы одного из них, вы легко сможете разбираться с кодом любых других популярных языков.
Фактически, владение основами программирования необходимо для чтения чужого кода и выявления возможных багов прямо на месте.
Отдельно выделяем языки верстки HTML и CSS. Если вы будете работать с веб-приложениями (а как показывает практика — проектов много — очередь и до тестирования “веба” рано или поздно дойдет), то вам будет полезно знать, из чего состоит FrontEnd часть веб-приложения. Также, вы будете работать с инструментами разработчика в браузере и там тоже надо будет взаимодействовать с HTML/CSS кодом.
Правила оформления документации. Модель CMMI
Если вспоминать три специальности, о которых мы говорили вначале (QA, QC и тестировщик), то этот пункт для тестировщика как такового является ненужным. Но вот для QA инженера он является неотъемлемым. В процессе проектирования ПО, слежения за его качеством необходимо производить соответствующее документирование. Чтобы делать это правильно, надо знать стандарты оформления подобных документов. Важно уделить внимание серии ISO 9000.
CMM / CMMI — это набор методологий (моделей) совершенствования процессов разработки ПО. Знание CMMI позволяет QA инженеру грамотно оценивать проект и планировать необходимые процессы по обеспечению качества.
SQL
SQL — язык запросов, который используется для взаимодействия с данными в реляционных базах данных. Тестировщику он пригодится для того, чтобы выполнять бэкенд-тестирование для проверки тестовых данных, вставки, удаления, обновления их значений в БД.
Сказать точный уровень владения SQL нелегко, поскольку все зависит от сложности проекта. На каком-то сгодится базовый уровень SQL, а где-то необходимо быть весьма и весьма подкованным. А если тестирование не связано с бэкендом, то знания языка запросов вовсе не пригодятся.
В общем и целом, тестировщик должен обладать следующими знаниями и умениями при работе с БД и SQL:
умение распознавать различные типы БД;
способность реализовать подключение к БД, используя разные клиенты SQL-соединений;
понимание таблиц БД, ключей, индексов, типов отношений между таблицами;
умение создавать простые запросы;
понимание и умение разбирать по полочкам сложные запросы.
Веб-сервисы
Веб-служба (или веб-сервис) — это идентифицируемая веб-адресом программная система со стандартизированными интерфейсами. Данный термин описывает стандартизированный способ интеграции веб-приложений с использованием различных протоколов, например: XML, TCP/IP, SOAP, WSDL и UDDI. Веб-служба представляет собой способ связи между двумя электронными устройствами по сети, такими веб-сервисами можно пользоваться независимо от компьютера, браузера или места доступа в Интернет (поиск, веб-почта, хранение документов, файлов, закладок и т. д.).
К преимуществам веб-сервисов можно отнести:
возможность создания необходимых кондиций для взаимосвязи программных компонентов, которые не будут зависеть от используемых платформ;
веб-сервисы используют открытые стандартные протоколы; благодаря XML обеспечивается легкость в формировании и настройки веб-сервисов;
использование HTTP гарантирует успешную взаимосвязь систем через межсетевой доступ.
Веб-сервисы должны знать разработчики для корректной реализации ПО, а тестировщикам они нужны, чтобы понимать, как работает та или иная веб-система.
Jira
Система баг-трекинга, которая помогает выявлять, регистрировать и контролировать баги, найденные в разрабатываемом ПО, а также отслеживать процесс устранения этих ошибок. Является командным инструментом, что упрощает процесс взаимодействия разработчиков и тестировщиков, а также различную баг-трекинговую деятельность в принципе. Помимо прямого назначения помогает команде эффективнее работать, расставлять приоритеты и выбирать дальнейшие шаги оптимизации ПО.
Postman
Популярный и в то же время мощный набор инструментов для тестирования API (в среде разработчиков произносится как “а́пи”). API — это прикладной программный интерфейс; он указывает, каким образом следует обращаться к программе и какие ответы она обязана предоставлять пользователям.
Postman относительно простой в использовании, имеет богатый интуитивный интерфейс. Он проверяет запросы с клиентской стороны на серверную, а также отклик со стороны бэкенда. Таким образом можно убедится, что на стороне сервера все работает, даже если фронтенд сторона еще не готова.
API можно тестировать и при помощи множества других программных средств (например, JMeter), однако, на сегодняшний день именно Postman является наиболее компромиссным инструментом тестирования запросов, сочетающим в себе простоту и высокую эффективность.
Git
Git — это популярная система контроля версий, позволяющая вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Одним из самых известных антагонистов Git является SVN — централизованная система, в отличие от децентрализованной Git.
Также, в работе вам пригодится и сервис онлайн-хостинга проектов, использующий систему контроля версий. В данном случае это GitHub. В паре с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах.
Git нужен скорее для Automation QA, поскольку позволяет в удобном виде хранить код тестов с возможностью вернуться к рабочей версии тестов. Также, тестировщик сможет:
иметь доступ к коду разработчиков;
организовать список тестов и отслеживать его выполнение;
тестировать код с разных устройств (при этом сам код лежит на удаленном репозитории Git);
хранить различные настройки для приложения;
выполнять другие взаимодействия.
Методологии разработки Agile/Scrum
Методологии разработки — это своеобразные путеводители по процессам эффективной разработки ПО. Их применение помогает организовать максимально продуктивную работу всех участников, которые напрямую или косвенно задействованы в разработке продукта в соответствии с выбранной стратегией.
Agile — семейство гибких методологий разработки программного обеспечения, которое позволяет выпускать продукт небольшими частями, постоянно его дополняя и совершенствуя. При таком подходе технические и бизнес-подразделения работают совместно, ПО постоянно обновляется, обеспечивается быстрое принятие решений и выявление неправильных подходов, приложение проще обслуживать, а качество кода готового продукта более высокое. Agile имеет собственный манифест, который подробно описывает основные принципы, на которых строится гибкая разработка.
Scrum является одной из популярнейших реализаций agile-подхода. Его используют многие команды, поэтому знание особенностей работы со scrum-моделью для QA инженера является не менее важным, чем для любого разработчика.
Английский язык
Знание английского языка — естественное требование для многих профессий в IT, поскольку большинство новых сведений о технологиях, курсы, учебные и справочные материалы появляются в первую очередь на английском. Для работы в команде обычно знаний языка на уровне чтения технической документации, комментирования кода и составления баг-репортов вполне достаточно, однако, если возникнет необходимость вести переговоры и/или переписку с иностранным заказчиком, либо же вы будете в интернациональном коллективе, ваш уровень должен быть выше (тут уже очень желательно иметь уровень не ниже Upper Intermediate).
Soft Skills
Так называемые “гибкие (мягкие) навыки” — это внутренние качества специалиста, которые помогают ему выполнять работу максимально качественно и без лишнего напряжения. К примеру, для следователя-криминалиста прекрасными софт скиллами будут объективность, внимательность, умение чувствовать своего собеседника, прекрасное дедуктивное мышление и неугасающее стремление докапываться до правды. Для работника на ресепшене критически важными мягкими навыками есть коммуникабельность, дисциплинированность, пунктуальность, обходительность, вежливость и другие.
Какие soft skills пригодятся тестировщику? Специалисту, который следит за качеством ПО и проверяет его на прочность, следует обладать следующими навыками:
внимательность, умение концентрироваться на задаче;
инициативность;
усидчивость;
организованность, проактивность, нацеленность на результат;
стрессоустойчивость;
эмпатия к пользователю и вместе с тем понимание бизнес-процессов (умение “переобуваться”);
адаптивность;
коммуникабельность;
умение работать в команде;
обладание логическим, системным, упорядоченным мышлением;
умение правильно осуществлять декомпозицию (по отношению к системам, задачам, проблемам и т. д.);
наличие шестого чувства + немного изобретательности;
стремление учиться и умение передавать свои знания другим;
Пользовательский опыт (не обязательно, но очень удобно)
Было бы неплохо, если б перед тестированием приложения вы уже сталкивались с чем-то подобным в обычной жизни. Если работать предстоит в сфере игростроения, то ваш огромный геймерский опыт будет как нельзя кстати. Работа с проектами из веб-индустрии? Опыт сёрфинга в интернете (соцсети, интернет-магазины, онлайн-сервисы) облегчит понимание логики пользователей, их ожиданий и точек интереса.
Automation QA
Автоматизированный QA технически является надмножеством позиции Manual QA — он должен знать все то же самое, что и мануальный коллега плюс несколько новых инструментов. Эти инструменты мы сейчас и перечислим.
Язык программирования
Если в разделе о Manual QA мы говорили об основах программирования, то автоматизатору понадобится именно уверенное владение конкретным языком. Обычно выбирают среди Java и Python, но это не предел. В тестировании можно применять и такие языки, как JavaScript, C#, Ruby, PHP, SmashTest и другие.
При помощи выбранного языка вы будете писать автотесты, которые будут выполнять тестирование за человека. Программа работает — тестировщик анализирует результаты. Это упрощает работу, повышает скорость проведения тестов и снимает часть задач с человека.
Фреймворк для тестирования
Для создания автотестов зачастую используется специальные программное обеспечение — фреймворки. Одним из популярнейших считается Selenium. Он мультиплатформен, ориентирован на работу с веб-приложениями и поддерживает множество популярных языков программирования. Более того, Selenium является основной технологией для множества других инструментов автоматизации браузеров, API и фреймворков.
Инструменты нагрузочного тестирования
Данный пункт является необязательным, но при этом очень желателен. Нагрузочное тестирование — это вид тестирования, при котором производится тест производительности целевого ПО при различных нагрузках от действий определенного количества пользователей. Наиболее известными инструментами проведения нагрузочного тестирования являются Gatling и JMeter.
Как стать тестировщиком?
Превращаем список приведенных выше технологий в туториал. Начинаем с пути Manual QA.
Вы можете учиться самостоятельно — по книгам или видео курсам, а можете записаться на курсы тестирования для максимально эффективного обучения. В любом случае вначале вам нужно очень хорошо изучить теорию тестирования и базовые темы в IT: веб-технологии, API, клиент-серверная архитектура, базы данных, компьютерные сети, операционные системы (обратить особое внимание на Unix), мелкие подтемы, как, например, системы счисления и т. д. Конкретные темы по тестированию мы расписали в одном из первых наших разделов. Затем вам следует освоить написание тестовой документации (для чистого тестировщика), а QA понадобится еще и знание стандартов по обеспечению качественного ПО (ISO 9000) для дополнительного документирования, модель CMMI.
Чтобы беспроблемно читать код разработчиков и понимать, что в нем происходит, следует владеть основами программирования. Для этого лучше выбрать либо Java, либо C# — документация по данным языкам очень информативна, есть большое комьюнити. Более того, множество программ обучения по данным языкам располагает прекрасным бэкграундом (история программирования, как работают вычислительные системы и как они обрабатывают информацию), который закладывает прочный фундамент программирования. Также, стоит освоить языки верстки HTML и CSS — они очень простые и используются в абсолютно всех веб-приложениях
Для работы с обеспечением, которое использует базы данных, необходимо изучить основы SQL.
Далее приступаем к изучению веб-сервисов, а после — к популярной баг-трекинговой системе Jira и мощному набору инструментов для тестирования API — Postman.
Создание программного продукта обычно ведется в команде, потому знание методологии командной разработки является не менее важным, чем предыдущие технологии. Уделите время изучению принципов Agile/Scrum — с их помощью эффективно разрабатывается современное программное обеспечение. Методология гибкой разработки очень важна для тестировщика, поскольку он участвует в производственном цикле так же, как и разработчики.
Также, не забудьте подтянуть ваш английский как минимум до уровня Intermediate. Он нужен для комфортного поиска нужной информации в интернете, чтения технической документации, работы с иностранными коллегами, а также — для возможного взаимодействия с заказчиком. Все же английский в IT еще никому не мешал и более того — давал новые карьерные возможности.
Чтобы ваша работа приносила вам удовольствие и вы себя не заставляли работать, вам следует обладать следующими софт скиллами:
внимательность, умение концентрироваться на задаче;
инициативность;
усидчивость;
организованность, проактивность, нацеленность на результат;
стрессоустойчивость;
эмпатия к пользователю и вместе с тем понимание бизнес-процессов (умение “переобуваться”);
коммуникабельность;
другие качества, которые мы указали в соответствующем разделе.
С этими навыками и знаниями вы сможете приступать к практике. Изучите Git, начните работать каким-либо проектом: покройте его тестами, напишите тест-документацию. Опубликуйте наработки на GitHub — это даст вам ценный опыт работы с распределенной системой управления версиями и позволит проверить свои навыки в решении реальной задачи. Несколько хороших проектов, и полноценное портфолио готово, а с ним вы можете уверенно подавать резюме на вакансию мануального QA инженера.
Если вас интересует автоматизированное тестирование, дополнительно изучите Python, либо Java + фреймворк для тестирования (Selenium, PyTest, Robot Framework или другой). Это позволит вам создавать скрипты, которые будут автоматически выполнять тестирование, избавляя вас от лишней рутины.
Очень желательно иметь опыт работы с инструментами нагрузочного тестирования. Это может быть JMeter, Gatling или любой другой популярный аналог. Такой опыт даст вам дополнительный вес в глазах работодателя, что сыграет вам на руку, поскольку конкуренция за место тестировщика весьма высока.
Очень желательно, чтобы у вас был наставник, который мог бы следить за вашим прогрессом, отвечать на возникающие вопросы, давать полезные советы и направлять в нужное русло.
Итоги
В данной статье мы постарались сделать максимальный охват темы тестирования. Была рассмотрена не только специальность тестировщик, но и два её надмножества — QC и QA. Сейчас линии разграничения между этими тремя профессиями по большому счёту стёрты и прослеживаются лишь в серьезных компаниях. В более мелких же тестировщик может запросто выполнять функции QA. Тем не менее, в нашей статье высветлены те технологии и области знаний, которые подойдут как тестировщику, так и QA инженеру. Также, мы рассмотрели ответвления Manual QA и Automation QA. Как выяснилось, без знания мануального тестирования вам не стать автоматизированным тестером. Ведь как можно писать автотесты, если ты в принципе не понимаешь, что, где и как исследовать на предмет багов?
Несмотря на высокую конкуренцию за место тестировщика, количество вакансий остается одним из самых больших на рынке труда в IT. Посмотрите популярные ресурсы по трудоустройству в IT и вы сами в этом убедитесь. Поэтому нами и были указаны некоторые необязательные технологии — мы хотим вооружить наших читателей максимально красноречивым стеком, дабы вы были на голову выше конкурентов.
Приведенный в статье стек технологий является прочной основой QA специалиста — как мануального, так и автоматизированного. Если этот материал не дал вам в полной мере ответ на вопрос “как стать тестировщиком и что следует для этого учить?”, делимся с вами ссылкой на вебинар одного из авторов ITVDN — действующего QA Engineer Андрея Шевцова.
Если вас интересует данное направление и вы хотите стать QA инженером, предлагаем вашему вниманию подборку курсов и вебинаров ITVDN, которые вы найдете на странице специальности Quality Assurance.
Желаем успехов в изучении IT технологий!
Оставайтесь с ITVDN!
250+ питань з Java для Junior, Middle, Senior
Автор: Влад Сверчков
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 1 февраля 2021 года. Оригинальная версия на украинском языке доступна по ссылке
Редакция DOU.ua обратилась к СТО и опытным специалистам, которые проводят интервью по направлению Java, о том, какие теоретические вопросы задают и какие задачи и задания предлагают решить кандидатам. Ведь, готовясь к техническому собеседованию, важно иметь четкий план. На основе полученных ответов составлена эта подборка вопросов с градацией по уровню специалиста. Надеемся, этот список вопросов станет своеобразным путеводителем, который поможет получить желаемую должность.
Junior
Общие
1. Какие знаете шаблоны проектирования? Расскажите о двух шаблонах, которые использовали в работе.
Java Core
2. Какие есть типы данных в Java?
3. Чем отличается объект от примитивных типов данных?
4. В чем разница передачи параметров по ссылке и по значению?
5. Что такое JVM, JDK, JRE?
6. Зачем используют JVM?
7. Что такое bytecode?
8. Какие признаки JavaBean?
9. Что такое OutOfMemoryError?
10. Что такое стектрейс? Как его получить?
11. Назовите все методы класса object.
12. В чем отличие между try-with-resources и try-catch-finally при работе с ресурсами?
13. Что такое конструкторы? Какие типы знаете?
14. Что такое побитовые операции?
15. Объекты каких стандартных классов immutable в Java?
16. Дайте краткую характеристику immutable object. Зачем они нужны?
17. Как создать immutable object?
18. Какие преимущества immutable object перед обычными объектами?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Стартовый (урок 1, урок 2, урок 5), Java Базовый (урок 1, урок 2, урок 8, урок 9).
ООП
19. Что такое ООП? Назовите принципы с примерами.
20. В чем преимущества ООП перед процедурным программированием?
21. В чем заключается главная особенность ООП?
22. Расскажите, какие преимущества мы получаем при использовании ООП?
23. Расскажите, какие есть недостатки в ООП?
24. Расскажите о принципе наследования в ООП? Зачем он нужен?
25. Дайте определение принципа полиморфизма в ООП? Как работает полиморфизм?
26. Что такое статический и динамический полиморфизм?
27. Дайте определение принципа абстракции в ООП.
28. Какие элементы языка отвечают за инкапсуляцию?
29. Какие элементы языка отвечают за наследование?
30. Какие элементы языка отвечают за полиморфизм?
31. Что такое SOLID? Приведите примеры.
32. Что такое перегрузки (overloading) метода?
33. Что такое переопределение (override) метода?
34. Что такое класс, объект, интерфейс?
35. Что такое класс POJO? Приведите пример такого класса.
36. Какие элементы могут содержать класс?
37. Дайте определение объекта.
38. Расскажите о наследовании в Java. Какие особенности использования ключевого слова super?
39. Что такое сигнатура метода? Приведите примеры правильных и неправильных сигнатур.
40. Можно ли в конструкторе применять return?
41. Можно ли в конструкторе выкинуть исключение (exception)?
42. Из каких элементов состоит заголовок класса? Напишите пример.
43. Из каких элементов состоит заголовок метода? Напишите пример.
44. Создайте в объекте-наследнике конструктор по умолчанию, если в базовом классе он не определен (но определен другой конструктор).
45. Когда применяется ключевое слово this?
46. Что такое инициализатор?
47. Для наследования класса public class Child extends Parent напишите порядок инициализации объекта.
48. Какие знаете отношения между классами (объектами)?
49. Какие ассоциативные связи между объектами вы знаете?
50. Что такое модификаторы доступа в Java? Назовите их. Для чего используются?
51. Назовите основную особенность статических переменных и методов.
52. Какие основные ограничения действуют на статические переменные и методы?
53. Что означает ключевое слово static? Может ли статический метод быть переопределенным или перегруженным?
54. Может ли метод быть статическим и абстрактным одновременно?
55. Можно ли использовать статические методы внутри обычных? Наоборот? Почему?
56. Что означает ключевое слово final?
57. Что такое abstract? Абстрактный класс? Абстрактный метод?
58. Что такое interface? Может ли быть final interface?
59. В чем разница между абстрактным классом и интерфейсом в Java?
60. Где можно инициализировать статические поля?
61. Что такое анонимные классы?
62. Что такое примитивные классы?
63. Что такое класс «обертка» (wrapper)?
64. Что такое Nested class? Когда используется?
65. Какие модификаторы доступа могут быть у класса?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Java Базовый (урок 1-4, урок 6, урок 7, урок 9), SOLID принципы в Java.
Библиотеки и стандарты
67. Что такое Hibernate? В чем разница между JPA i Hibernate?
68. Что такое каскадность? Как она используется в Hibernate?
69. Может ли entity-класс быть абстрактным классом?
70. Что такое entity manager? За что отвечает?
71. Что такое класс Assert? Зачем и как его использовать?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе JDBC & Hibernate.
String
72. Дайте характеристику String в Java.
73. Какие есть способы создания объекта String? Где он создается?
74. Как сравнить две строки в Java и/или отсортировать их?
75. Предложите алгоритм преобразования строки в знак. Напишите соответствующий код.
76. Как превратить строку в массив байтов и обратно? Напишите соответствующий код.
77. Что такое строковый пул и зачем он нужен?
78. Какие GOF-шаблоны применяются в строковом пуле?
79. Как разделить строку на части? Напишите соответствующий код.
80. Почему массив символов лучше, чем строка для хранения пароля?
81. Какая разница между String, StringBuffer и StringBuilder?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 5).
Enum
82. Дайте краткую характеристику Enum в Java.
83. Может ли Enum реализовывать (implement) интерфейс?
84. Может ли Enum расширить (extends) класс?
85. Можно ли создать Enum без экземпляров объектов?
86. Можем ли мы переопределить метод toString() для Enum?
87. Что будет, если не будем переопределять метод toString() для Enum?
88. Можем ли мы указать конструктор внутри Enum?
89. В чем разница между == и equals()?
90. Что делает метод ordinal() в Enum?
91. Можно ли использовать Enum с TreeSet или TreeMap в Java?
92. Как связаны методы ordinal() и compareTo() в Enum?
93. Напишите пример Enum.
94. Можно ли использовать Enum в switch case?
95. Как получить все имеющиеся значения в экземпляре Enum?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Java Базовый (урок 7), Java Углублённый (Урок 3).
Stream API
96. Что такое Stream в Java?
97. Назовите основные свойства транзакций.
98. Какие есть уровни изоляции транзакций?
99. Какая разница между Statement и PreparedStatement?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 15).
Collections
100. Расскажите об итераторах и об их применении.
101. Какая иерархия коллекций в Java Collection Framework?
102. Какое внутреннее строение ArrayList?
103. Какое внутреннее строение LinkedList?
104. Какое внутреннее строение HashMap?
105. Чем отличается ArrayList от LinkedList?
106. Чем отличается ArrayList от HashSet?
107. Зачем в Java такое многообразие имплементации динамического массива?
108. Зачем в Java такое многообразие имплементации key-value storage?
109. Как отсортировать коллекцию элементов?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый (урок 5), Java Углублённый (урок 3, урок 15).
Class Object. Equals and HashCode
110. Дайте краткую характеристику class object в Java.
111. Для чего используют Equals and HashCode в Java?
112. Расскажите о контракте между Equals and HashCode в Java?
113. Какие условия выдвигаются касательно переопределения соглашения при переопределении Equals?
114. Что будет, если не переопределить Equals and HashCode?
115. Какие значения мы получим, если у нас не перераспределены Equals and HashCode?
116. Почему симметричность выполняется, только если x.equals(y) возвращает true?
117. Что такое коллизия в HashCode? Как с ней бороться?
118. Что будет, если элемент, участвующий в контракте с HashCode, меняет свое значение?
119. Напишите методы Equals and HashCode для класса Student, который состоит из полей String name и int age.
120. В чем разница применения if (obj instanceof Student) и if (getClass() == obj.getClass())?
121. Дайте краткую характеристику метода clone().
122. В чем заключается особенность работы метода clone() с полями объекта типа-ссылки?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый (урок 9).
Exceptions
123. Дайте определение понятию exception (исключительная ситуация).
124. Какие знаете особенности использования оператора try ... catch?
125. В чем разница между error и exception?
126. Какая разница между checked и unchecked, exception, throw, throws.
127. Какой есть иерархия исключений?
128. Что такое checked и unchecked exception?
129. Нужно ли проверять checked exception?
130. О чем говорит и как использовать ключевое слово throws?
131. Какие возможные способы обработки исключений вы знаете?
132. Напишите пример перехвата и обработки исключения в блоке try-catch метода.
133. Напишите пример перехвата и обработки исключения в секции throws-метода и передачи вызывающему методу.
134. Напишите пример перехвата и обработки исключения с использованием собственных исключений.
135. Какие есть правила для проверки исключений при наследовании?
136. Могли бы ли вы написать код, если блок finally не будет выполнен?
137. Напишите пример обработки нескольких исключений в одном блоке catch.
138. Какой оператор позволяет принудительно выбросить исключение? Напишите пример.
139. Может ли метод main выбросить throws-исключение? Если да - куда передаст?
140. Напишите пример try with resources.
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый (урок 8).
Многопоточность
141. Какие средства для работы с многопоточностью знаете?
142. Что такое процесс и поток? Чем отличается процесс от потока?
143. Расскажите о синхронизации между потоками. Для чего используют методы wait(), notify() - notifyAll(), join()?
144. Как остановить поток?
145. Как между потоками обмениваться данными?
146. В чем заключается отличие класса Thread от интерфейса Runnable?
147. Есть потоки Т1, Т2 и Т3. Как реализовать их последовательное выполнение?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 13, урок 14).
Практические задания
148. Matrix Diagonal Sum (задача с Leetcode).
149. Move Zeroes (задача с Leetcode).
150. Дан List <String> names. Удалите первую букву из каждого имени и верните отсортированный список.
151. Перевернуть массив.
152. Проверить, является ли строка палиндромом.
153. Написать простой алгоритм сортировки (Bubble, Selection или Shuttle). Как его можно улучшить?
154. Напишите алгоритм (последовательность действий) составления литерала типа int и литералов типа byte. Объясните, что происходит с памятью.
Middle
Общие
1. В чем преимущества и недостатки ООП, если сравнивать с процедурным/функциональным программированием?
2. Чем отличается агрегация от композиции?
3. Какие паттерны GoF вы использовали на практике? Приведите примеры.
4. Что такое прокси-объект? Приведите примеры.
5. Какие нововведения анонсировано в Java 8?
6. Что такое High Cohesion и Low Coupling? Приведите примеры.
Лучше всего тема шаблонов в Java раскрыта в видео курсе Паттерны проектирования в Java.
ООП
7. Каким образом можно реализовать множественное наследование в Java?
8. Какая разница между методами final, finally и finalize()?
Java Core
9. В чем разница между статическим и динамическим связыванием в Java?
10. Можно ли использовать private или protected переменные в interface?
11. Что такое Classloader и для чего используется?
12. Что такое Run-Time Data Areas?
13. Что такое immutable object?
14. В чем особенность класса String?
15. Что такое ковариантность типов?
16. Какие есть методы в классе Object?
17. Приведите примеры удачного и неудачного использования Optional.
18. Можно ли объявлять main method как final?
19. Можно ли импортировать те же самые package/class дважды? Какие последствия?
20. Что такое Casting? Когда можем получить исключение ClassCastException?
21. Почему современные фреймворки используют в основном только unchecked exceptions?
22. Что такое static import?
23. Какая связь между методами hashCode() и equals()?
24. Когда используют BufferedInputStream и BufferedOutputStream классы?
25. Какая разница между классами java.util.Collection и java.util.Collections?
26. Какая разница между Enumeration и Iterator?
27. В чем разница между итераторами fail-fast и fail-safe?
28. Зачем нужен модификатор transient?
29. Как влияют на сериализацию модификаторы static и final?
30. Какие особенности использования интерфейса Cloneable?
31. Какие особенности использования интерфейса AutoCloseable?
32. Что такое FunctionInterface и чем он отличается от обычного интерфейса?
33. Что такое Atomic types и зачем они нужны?
34. Что такое Happens-before? Какие особенности использования ключевого слова volatile?
35. Расскажите о Heap и Stack память в Java. В чем разница между ними? Где хранятся примитивы?
36. Чем отличается stack от heap памяти? Когда и какая область памяти резервируется? Зачем такое разделение нужно?
37. Какие принципы работы и области памяти Garbage Collector?
38. Как работает Garbage Collector? Расскажите о Reference counting и Tracing.
39. Расскажите о механизме работы autoboxing в Java.
40. Как реализована сериализация в Java? Где мы можем ее увидеть?
41. Расскажите, в чем разница между WeakReference и SoftReference?
42. Что такое generics? Для чего они нужны? Какую проблему решают?
43. Что такое PECS и как используется? Приведите примеры.
44. Зачем на практике могут понадобиться immutable объекты?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый и Java Углублённый.
Библиотеки и инструменты
45. Чем полезны инструменты Maven, Ant, Gradle?
46. Что такое Unit Tests? Чем класс JUnit.Assert отличается от ключевого слова assert?
47. Что такое и зачем нужен Spring core? Раскройте понятие Inversion of Control и Dependency Injection.
48. Как «под капотом» работает @Transactional?
49. Как «под капотом» работает Spring?
50. Что такое и зачем нужен Hibernate? Раскройте понятие ORM.
51. Что такое и когда возникает LazyLoadingException?
52. Как «под капотом» работает Hibernate? Как бы вы написали собственный Hibernate?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах JDBC & Hibernate, Unit тестирование в Java с JUnit, Spring, Spring MVC.
Многопоточность
53. Какие преимущества и недостатки использования многопоточности?
54. Расскажите о четырех способах работы со многими потоками и чем отличается wait ... notify ... notifyAll от synchronized? От Future?
55. Что такое и зачем нужен ThreadLocal?
56. В чем разница между Thread.sleep() и Thread.yield()?
57. Как работает Thread.join()?
58. Что такое deadlock?
59. Что такое race condition?
60. Для чего использовать volatile, synchronized, transient, native?
61. Расскажите о приоритетах потоков.
62. Что такое потоки-демоны и для чего их устанавливать?
63. Почему нежелательно использовать Thread.stop()?
64. Как реализовать пул потоков?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 13, урок 14).
Collections
65. Чем отличается List от Set?
66. В чем разница между HashSet, LinkedHashSet и TreeSet?
67. Какая внутренняя структура HashMap?
68. Какое время поиска элемента в ArrayList, HashSet?
69. Как реализовать свой Stack?
70. Как работает метод put в HashMap? Почему нам нужно высчитывать позицию бакета? В чем преимущества такой операции?
71. В чем разница между HashMap и TreeMap? Когда и где их нужно использовать?
72. Какое внутреннее строение TreeMap? Рассказать об RBT.
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 1, урок 2, урок 3).
Stream API
73. Какие есть методы в интерфейсе Stream?
74. Чем отличается метод map от flatMap?
75. Какой функциональный интерфейс использует метод filter?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 15).
Базы данных
76. В чем разница между реляционными и нереляционными базами данных?
77. Как хранятся соотношения one-to-one, one-to-many и many-to-many в виде таблиц?
78. Что такое нормализация БД? Приведите примеры из реального проекта.
79. Какие есть виды индексов в БД?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.
Практические задания
80. Valid parentheses (задача с LeetCode).
81. Reverse Linked List (задача с LeetCode).
82. Дано String s, найти длину максимального substring без повтора символов.
83. Определить, является ли односвязный LinkedList палиндромом.
Senior
Общие
1. Когда лучше использовать наследование, а не агрегацию?
2. Расскажите о принципах работы Kubernetes.
Java Core
3. В чем разница между Java NIO и Java IO?
4. Чем отличается Lambda от анонимного класса?
5. Расскажите о Java Memory Model.
6. Какие есть типы памяти в JVM?
7. Опишите жизненный цикл Java-объекта. Каким образом объект переходит из одной области памяти Garbage Collector в другую? Что является триггером такого перехода?
8. Каким образом можно заставить JVM запустить Garbage Collector?
9. Какие существуют Garbage Collectors в JVM и зачем их столько?
10. Какие виды Garbage Collector есть в HotSpot? Как работают?
11. Что будет с Garbage Collector, если finalize() будет долго выполняться или в процессе выполнения получим исключение?
12. Чем ForkJoinPool отличается от ScheduledThreadPoolExecutor и ThreadPoolExecutor?
13. Какая разница между HashMap, WeakHashMap, Hashtable, IdentityHashMap?
14. Что такое LinkedHashMap?
15. Что такое EnumSet? Для чего использовать? Как реализовать?
16. Расскажите об особенностях сериализации в Java. Зачем serialVersionUID и InvalidClassException?
17. В чем проблема сериализации Singleton?
18. Какие бывают алгоритмы обхода деревьев и почему они разные?
19. Что такое deadlock? Какие типы существуют? Нарисуйте схематично, как может произойти.
Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый и Java Углублённый.
Базы данных
20. Что такое ACID?
21. Что означает CAP-теорема?
22. Какие есть уровни изоляции транзакций?
23. Есть ли смысл отказываться от использования ORM?
24. Что такое n+1 проблема?
25. Что такое cartesian product проблема?
Библиотеки и инструменты
26. Каким образом построить monitoring в Java? Расскажите об особенностях использования Java micrometrics или DropWizard, или Prometheus frameworks.
27. Опишите механизм работы ORM.
28. Какие способы выборки данных в Hibernate вы знаете?
29. Какие изоляции транзакций существуют в Hibernate?
Spring
30. Что такое IoC и DI?
31. Каков жизненный цикл объектов, которые создает Spring?
32. Какие есть виды контекстов?
33. Как создать и поднять контекст с целью тестирования приложения?
34. Какие возможности Spring предоставляет для коммуникации с базой данных?
35. Какие признаки того, что класс - Java Bean? Чем POJO отличается от Java Bean?
36. Опишите механизм инъекции зависимости в Spring.
37. Почему все зависимости Spring являются Java Beans? Возможно ли использовать Spring для управления зависимостями между не Java Beans классами?
38. Чем Spring singleton отличается от prototype?
39. Есть ли смысл отказываться от использования Dependency Injection?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Spring, Spring MVC.
Многопоточность
40. Что такое race-condition?
41. Какие элементы есть в java.util.concurrent пакете?
42. Что такое optimistic и pessimistic locking?
43. Какие особенности многопоточности в Java EE и Spring?
Stream API
44. Какие основные принципы Stream API?
Практические задания
45. Реализовать сервис, который на вход принимает url и возвращает короткую версию (вроде bit.ly/86gfr3).
Редакция DOU.ua благодарит за помощь в подготовке статьи Александра Редька, Антона Наумова, Богдана Чупика, Максима Ляшенко, Александра Навка, Сергея Маленко, Андрея Петрика, Сергея Громового, Дениса Душина, Ивана Чуба.
Смотрите также статьи с вопросами на собеседовании по Python, .NET и JavaScript.
300+ запитань щодо JavaScript на співбесіді
Автор: Влад Сверчков
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 21 декабря 2020 года. Оригинальная версия на украинском языке доступна по ссылке.
На этот раз предлагаем ознакомиться с актуальными вопросами, которые задают на технических интервью по JavaScript. Естественно, мы говорим о широком спектре специализаций, поэтому выбирайте свое направление и готовьтесь.
Junior
Общие:
1. Какие методы HTTP-запросов вы знаете?
2. Какие версии HTTP-протокола вам известны?
3. Какие знаете коды ответа (состояния) HTTP?
4. Что такое Cross-Origin Resource Sharing? Как устранить проблемы с CORS?
5. Что такое cookie?
6. Какой максимальный размер cookie?
7. Что означает директива use strict?
8. Чем JS отличается при работе на front-end и back-end?
9. Что такое статическая и динамическая типизации?
10. Как клиент взаимодействует с сервером?
11. Что такое REST?
12. Объяснить понятие мутабельность/иммутабельность? Какие типы являются мутабельными и наоборот?
13. Как искать ошибки в коде? Используете ли вы дебаггер?
14. Каких известных людей из мира JS знаете?
JS Core
15. Какие существуют типы данных в JS?
16. Как проверить, является ли объект массивом?
17. Как проверить, является ли число конечным?
18. Как проверить, что переменная равна NaN?
19. Чем отличается поведение isNaN() и Number.isNaN()?
20. Сравните ключевые слова var, let, const.
21. Что такое область видимости?
22. Что такое деструктуризация?
23. Для чего предназначены методы setTimeout и setInterval?
24. Сравните подходы работы с асинхронным кодом: сallbacks vs promises vs async / await.
25. Можно ли записывать новые свойства / функции в прототипы стандартных классов (Array, Object и т. д.)? Почему нет? В каких случаях это делать можно? Как обезопасить себя, если нужно расширить прототип?
26. Назовите методы массивов, какие помните, и скажите, для чего они нужны.
27. Какие методы перебора массива знаете? В чем их отличие?
28. Как работают операторы присваивания / сравнения / строчные / арифметические / битовые и т. д.?
29. Опишите назначение и принципы работы с коллекциями Map и Set.
30. Что означает глубокая (deep) и поверхностная (shallow) копия объекта? Как сделать каждую из них?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Стартовый (урок 3, урок 5, урок 10), JavaScript Базовый (урок 3, урок 13, урок 19), ECMAScript 6 (урок 6).
Функции:
31. Какая разница между декларацией функции (function declaration) и функциональным выражением (function expression)?
32. Что такое анонимная функция?
33. Расскажите о стрелочных функциях (arrow function). В чем заключаются отличия стрелочных функций от обычных?
34. Что такое и для чего используют IIFE (Immediately Invoked Function Expression)?
35. Что такое hoisting, как он работает для переменных и функций?
36. Что такое замыкание (closure) и какие сценарии его использования?
37. Как вы понимаете замыкания? Что будет выведено в консоли в этом случае?
var f = function() {
console.log(1);
}
var execute = function(f) {
setTimeout(f, 1000);
}
execute(f); // что выведет в консоль и почему
f = function() {
console.log(2);
}
38. Что такое рекурсия?
39. Что означает ключевое слово this?
40. Что такое потеря контекста, когда происходит и как ее предотвратить?
41. Методы функций bind / call / apply - зачем и в чем разница?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Стартовый (урок 11, урок 12) и JavaScript Базовый (урок 13, урок 14).
Front-end
42. Что такое DOM?
43. Сравните атрибуты подключения скрипта async и defer в HTML-документе.
44. Какая разница между свойствами HTML-элементов innerHTML и innerText?
45. Опишите процесс всплытия (bubbling) событий в DOM.
46. Как остановить всплытие (bubbling) события?
47. Как остановить дефолтную обработку события?
48. Чему равен this в обработчике событий (event handler)?
49. Что такое LocalStorage и SessionStorage? Какой максимальный размер LocalStorage?
50. Как получить высоту блока? Его положение относительно границ документа?
51. Что такое webpack?
52. Чем отличается dev-сборник от prod?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Базовый (урок 1, урок 6, урок 7, урок 8, урок 17) и ECMAScript 6 (урок 1).
Верстка
53. Что такое блочная модель CSS?
54. Какие способы центрирования блочного контента по горизонтали и вертикали знаете?
55. Какие подходы в верстке вам известны (float, flex, grid, etc.)?
56. Как сделать приложение responsive?
57. Какие есть принципы семантической верстки?
58. Зачем нужны префиксы для некоторых CSS-свойств (-webkit-, -moz- и т. д.)?
59. Как упростить написание кросс-браузерных стилей?
60. Практические задачи: прокомментировать и исправить пример плохого CSS или HTML.
61. Что такое CSS-препроцессоры? С какими работали? Что нового они приносят в стандартный CSS?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе HTML5 & CSS3 Стартовый (урок 5, урок 6), HTML5 & CSS3 Углубленный (урок 4). Курсы Верстка сайта на CSS Grid и Верстка сайта на FlexBox CSS дадут комплексные знания и практические навыки применения технологий FlexBox и Grid.
Angular
62. Перечислите основные компоненты фреймворка (модуль, роут, директива и т .п.).
63. В чем разница между компонентом и директивой?
64. Расскажите о жизненном цикле компонента.
65. Перечислите часто используемые хуки жизненного цикла компонента и расскажите, для чего они нужны?
66. В чем разница между конструктором и ngOnInit-хуком?
67. Как защитить роут от несанкционированного доступа? Какие механизмы предоставляет для этого фреймворк?
68. Что такое Lazy loading, как и для чего используется?
69. Какое назначение RouterOutlet?
70. Как компоненты могут взаимодействовать друг с другом?
71. Как создать two-way binding свойство для компонента?
72. Какие типы форм у фреймворка? В каких случаях и что лучше использовать?
73. Какие состояния у формы и как это можно применить?
74. Зачем нужны сервисы? Как с ними работать?
75. Что такое singleton-сервисы? Каково их назначение? Способ создания?
76. Какие есть способы объявления сервисов?
77. Для чего нужны модули? Сколько их должно быть в проекте?
78. Зачем нужны общие модули (shared)?
79. Какие преимущества типизации в TypeScript?
80. Какие возможности TypeScript можно использовать для типизации (здесь имеются в виду интерфейсы, типы, enum и т. д.)?
81. Какая разница между интерфейсом и классом?
82. В чем разница между интерфейсом и абстрактным классом?
83. Какая разница между интерфейсом и типом?
84. Что такое RxJS? Как он используется во фреймворке? Какие компоненты фреймворка тесно связаны с ним?
85. Чем отличаются Observable и Promise?
86. Для чего нужны Subjects? Какие типы Subjects существуют?
87. Как сделать несколько последовательных запросов к API с помощью HTTP-сервиса и RxJS?
88. Какая разница между switchMap, concatMap, mergeMap?
89. Как можно конфигурировать Angular-приложение?
90. Зачем нужны environment-файлы? Когда их лучше не использовать?
91. В чем разница между «умным» (smart) и «глупым» (dumb) компонентами? В каких случаях применяется каждый из них?
92. В чем разница между NgForm, FormGroup и FormControl и как их применяют для построения форм?
93. Зачем нужен и как работает async pipe?
94. Как следить за развитием фреймворка? Каких известных людей, связанных с Angular, знаете / читаете?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Angular Базовый и Angular Углублённый.
React
95. Работали ли вы с классовыми компонентами? В чем их особенность?
96. Какие данные лучше хранить в состоянии компонента, а какие передавать через пропсы? Приведите пример.
97. Ознакомлены ли вы с хуками? В чем их преимущества? Приходилось ли делать свои и с какой целью?
98. Знакомы ли вы с фрагментами и порталами? Зачем они нужны?
99. Когда и для чего используют рефы?
100. Какие вы знаете методы жизненного цикла компонента?
101. В каком методе жизненного цикла компонента лучше делать запросы на сервер? Почему?
102. В каком методе жизненного цикла компонента лучше делать подписку и отписку от листенера? Почему? Зачем отписываться?
103. Был ли опыт работы с контекстом? Когда его стоит использовать?
104. В чем особенность PureComponent?
105. Работали ли вы с мемоизоваными селекторами (memoized selectors)? Для чего их используют и какой принцип работы?
106. В чем видите преимущества библиотеки React?
107. Почему библиотека React быстрая? Что такое Virtual DOM и Shadow DOM?
108. Зачем в списках ключи? Можно ли делать ключами индексы элементов массива? Когда это оправдано?
109. В чем основная идея Redux?
110. Работа со стилями в React.
111. React - это библиотека или фреймворк? Какая разница между этими двумя понятиями.
112. Можно ли использовать jQuery вместе с React? Почему да / нет?
113. Что такое codemod?
114. Приходилось ли вам настраивать проект React с нуля? С помощью каких инструментов вы это делали?
115. Перечислите все библиотеки, которые использовали в связке с React.
116. Что самое сложное вам приходилось реализовывать с помощью React?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах React Базовый и React Углублённый.
Back-end
117. Что такое REPL?
118. Что такое streams в Node.js?
119. Что такое middleware?
120. Для чего используют функцию setImmediate?
121. Зачем нужен app.param() в express?
122. Что такое token based authentication?
Базы данных
123. Напишите простой запрос для вычисления трех авторов, у которых больше всего книг.
124. Напишите запрос, который выбирает последние три комментарии для конкретного пользователя для двух таблиц: комментарии и пользователи.
125. Спроектируйте простую схему базы данных для библиотеки.
126. Для чего используют SQL-оператор HAVING?
127. Зачем используют SQL-оператор LEFT JOIN?
128. Чем отличается embed- от reference-связи в MongoDB?
129. В одном проекте программисты сохраняют данные в MongoDB-коллекции комментариев, используя такие типы данных (смотрите ниже). Что плохого в этом решении?
id: ObjectID
text: string
author_id: string
created_at: Date
130. В проекте понадобилось внести изменения в структуру таблиц, добавить несколько полей и индексы. Как программисты будут делать это на продакшене?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.
Инструменты
131. Каждый раз, когда вы делаете pull, почему-то случается конфликт в последней строке во всех файлах, которые вы редактировали. Что происходит?
132. Что делает команда git fetch?
133. Какой git hygiene подходы вы знаете?
134. Что такое CI / CD? Для чего это нужно?
Практические задания
135. Расскажите, какие есть способы копирования простого объекта типа obj = {a 1, b 2, c 3}
136. Напишите deep clone для объекта.
137. Назовите различные способы, как поменять местами значения двух переменных.
138. Менеджер попросил в задаче поменять статусы из «active, inactive» на «active, removed», но в коде фигурируют только цифры и непонятно, какой статус соответствует какой цифре. Как помочь будущим программистам не лезть в документацию по коду? Вопрос ставят на конкретном примере с кодом.
139. Необходимо сделать мини проект - список пользователей с формой создания / редактирования пользователя:
Для хранения пользователей используйте Firebase (это бесплатно).
Для стилизации используйте Bootstrap.
Минимальный набор полей пользователя:
имя;
фамилия;
электронная почта;
телефон (в формате +380 (XX) XXX-XX-XX)
дата рождения;
будет плюсом - добавление аватара и возможность crop-картинки.
Пользователи должны иметь возможность фильтрации и пагинацию.
Проект должен содержать README-файл с шагами для запуска.
Middle
Общие
1. Расскажите о пирамиде тестирования.
2. Какие типы автоматизированных тестов выпадала возможность писать? Какие библиотеки при этом использовали? Каким инструментам отдаете предпочтение и почему?
3. Что такое unit-тесты? Какое место в пирамиде тестирования занимают unit-тесты?
4. Что такое code coverage? Обязательно 100% покрытие тестами кода?
5. Как запретить браузеру отдавать кэш на HTTP-запрос?
6. Что такое XSS (Cross-Site Scripting)?
7. Расскажите о паттернах Observer, Pub / Sub. Какая между ними разница? Приведите примеры реализации этих паттернов в известных фреймворках / библиотеках / браузерных API.
8. С какой целью может быть использован event listener события fetch self.addEventListener ( 'fetch', event => {})?
9. Что такое Event loop и как он работает? Расскажите о микрозадачах и макрозадачах.
JS Core
10. Какие типы данных бывают в JavaScript? Какой будет результат выполнения кода?
let firstObj = { name: 'Hello' };
let secondObj = firstObj;
firstObj = { name: 'Bye' };
console.log(secondObj.name);
11. Что такое temporal dead zone?
12. Как работает boxing / unboxing в JavaScript?
13. В чем разница между оператором in и методом hasOwnProperty?
14. Опишите, с помощью чего в JS реализуются такие ООП-парадигмы, как инкапсуляция, полиморфизм, абстракция?
15. Что такое прототип? Как работает прототипное наследование в JS? Объясните работу кода.
function Main () {}
Main.prototype = { protected: true };
const obj = new Main();
Main.prototype = { protected: false };
console.log('Object protection: ', obj.protected);
16. Какая разница между композицией и наследованием?
17. Почему не стоит использовать конструкторы типа new String?
18. Расскажите о базовом устройстве и механизме работы Event loop.
19. Что такое записи (records) и кортежи (tuples)? Чем они отличаются от обычных объектов?
20. Какие различия в поведении ES5 функции-конструктора и ES2015 класса?
21. Как реализовать паттерн «Модуль»?
22. Почему typeof null возвращает object?
23. Что такое приведение (преобразование) типов в JS?
24. Что такое явное и неявное приведение (преобразование) типов данных в JS? Как происходит преобразование типов в следующих примерах:
{}+[]+{}+[1]
!!"false" == !!"true"
['x'] == 'x'
25. Что такое Garbage Collector?
26. Опишите основные принципы работы «сборщика мусора» в JS-движках (engines).
27. Опишите назначение и принципы работы с коллекциями WeakMap и WeakSet? Чем они отличаются от коллекций Map и Set соответственно?
28. Чем отличается Observable от Promise?
29. Что такое Promise? Назовите порядок выполнения then и catch в цепочке.
Promise.resolve(10)
.then(e => console.log(e)) // ??
.then(e => Promise.resolve(e))
.then(console.log) // ??
.then(e => {
if (!e) {
throw 'Error caught';
}
})
.catch(e => {
console.log(e); // ??
return new Error('New error');
})
.then(e => {
console.log(e.message); // ??
})
.catch(e => {
console.log(e.message); // ??
});
30. Расскажите о последовательном и параллельном выполнении асинхронных функций. В чем разница между Promise.all() и Promise.allSettled()?
31. Что такое дескрипторы свойств объектов? Расскажите об их практическом применение.
32. Назовите несколько способов создания постоянного (неизменного) объекта в JavaScript.
33. Как создать свойство у объекта, которое нельзя будет изменить?
34. Зачем нужен конструктор Proxy? Приведите пример использования.
35. Что такое ArrayBuffer? В чем разница между Uint32Array и Float32Array? Каков результат выполнения кода?
const uint32Array = new Uint32Array();
Array.isArray(uint32Array);
36. Каким будет результат сравнения?
const url = “HTTPs://xyz.com/path<to>page.html”;
encodeURI(url) == encodeURIComponent(url);
37. Расскажите о генераторах и итераторах.
38. Объясните, что делает приведенный ниже код:
function * fn(num) {
for (let i = 0; i < num; i += 1) {
yield console.log(i);
}
}
const loop = fn(5);
loop.next();
loop.next();
39. Расскажите о типе данных Symbol и его практическом применении. Как перевести число с 10-разрядной системы в 16 (2,8) разрядную систему счисления?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Стартовый (урок 3, урок 4, урок 13, урок 14) и JavaScript Базовый (урок 18, урок 19), ECMAScript 6 (урок 6).
Функции
40. Объясните, что означает currying. Приведите пример использования на практике.
41. Приведите пример функции с мемоизацией. Когда следует применять эту технику?
42. Что такое чейнинг функций? Напишите пример с использованием этого подхода.
43. В чем разница между function и arrow function? Каким будет результат выполнения кода?
const pluckDeep = key => obj => key.split('.').reduce((accum, key) => accum[key], obj)
const compose = (...fns) => res => fns.reduce((accum, next) => next(accum), res)
const unfold = (f, seed) => {
const go = (f, seed, acc) => {
const res = f(seed)
return res ? go(f, res[1], acc.concat([res[0]])) : acc
}
return go(f, seed, [])
}
Front-end
44. В чем принципиальная разница между событиями mouseleave и mouseout?
45. В каком порядке обрабатываются пользовательские события в DOM (click, mouseover и т .д.)? FIFO или LIFO?
46. Что такое Event bubbling и Event capturing?
47. Сравните методы объекта event stopPropagation и stopImmediateProparation.
48. Какие есть подходы оптимизации производительности веб-страницы?
49. Как реализован механизм same-origin policy в браузере? На какие браузерные API он распространяется?
50. Назовите способы хранения данных в браузере. Сравните их.
51. Web worker`ы. Опишите особенности передачи данных между worker`амы и основным потоком, между разделенными worker`амы.
51. Что такое Transferable-объекты?
52. Расскажите о способах оптимизации выполнения ресурсоемких операций JS для улучшения производительности рендеринга контента на странице.
53. Почему ResizeObserver вызывает события изменения размера до воспроизведения элемента, а не после?
54. Расскажите, как вы понимаете Web Accessibility?
55. Опишите алгоритм создания функционала, который обеспечивает чтение содержимого .txt файла при перетаскивании его из файловой системы в окно браузера.
56. Что такое Virtual DOM?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе HTML5 & CSS3 Углубленный (урок 3), JavaScript Базовый (урок 1, урок 2, урок 3).
Верстка
57. Объясните разницу между единицами измерения px, em, rem.
58. Для чего нужны CSS-переменные? Приведите несколько примеров использования.
59. Что произойдет при добавлении следующего селектора?
* {Box-sizing: border-box; }
60. Как адаптировать страницу для печати?
61. Опишите особенности кастомизации стилей стандартных элементов форм.
62. Что такое progressive рендеринг? Какие подходы используются?
63. Назовите несколько способов реализации lazy-loading медиаресурсов на странице.
64. Назовите популярные шаблонизаторы для фронтенд-разработки. Опишите особенности их использования.
65. Назовите популярные CSS-методологии и их различия.
66. Как работает CSS Grid?
67. Какие форматы изображений поддерживают анимацию?
68. Как отследить прогресс / окончание CSS @keyframes анимаций или плавных переходов, реализованных с помощью transition, в JS?
69. Какие CSS-свойства могут быть обработаны непосредственно через GPU? Что такое композитные слои и почему большое их количество может привести к аварийному завершению работы браузера на мобильных устройствах?
70. Как переиспользовать Инлайн SVG-элементы на странице?
71. Опишите способы оптимизации SVG-файлов.
72. Как реализовать иконочный шрифт из определенного набора SVG-файлов?
73. Что такое ложное жирное или ложное курсивное (Faux) начертание шрифтов?
74. Что такое #shadow-root в инспекторе HTML-страницы?
75. Зачем нужны Custom Elements?
76. Почему удаление лишних символов пробелов / символов переноса в HTML не отражается на конечной производительности загрузки страницы?
77. Что такое контекст отображения canvas? Какие существуют типы контекста для рендеринга двумерной и трехмерной графики?
Ответы на некоторые из этих вопросов вы можете найти в видео курсе HTML5 & CSS3 Углубленный.
Angular
78. Как работает Dependency injection? Зачем это нужно? Расскажите об использовании кастомных инжекторов.
79. Что такое zone.js? Для чего Angular использует зоны? С какой целью можно использовать NgZone-сервис?
80. Как работает Change detection? Как можно оптимизировать компонент с помощью схем Change detection? Какие еще есть приемы для оптимизации рендеринга (связанные с Change detection)?
81. Как выполнить конфигурацию HTTP-сервиса? Зачем она нужна? Обработка HTTP-ошибок?
82. Какие есть подходы к организации работы с данными?
83. Как подготовить сборник к деплою?
84. Что такое NgRx? Когда стоит использовать?
85. В каких случаях лучше использовать Renderer-сервис вместо нативных методов? И наоборот?
86. Как работают и для чего нужны резолверы? Как получить данные, загруженные резолверами?
87. Как работают и зачем нужны динамические компоненты? Приведите примеры их целесообразного использования.
88. Какая разница между @ViewChild и @ContentChild?
89. Что делает код и как иначе можно связать класс компонента с переменной?
@HostBinding ( 'class.valid') isValid;
90. Как можно кэшировать данные, используя сервисы или RxJS?
91. Что такое асинхронная валидация форм? Когда применяется и как реализуется?
92. Зачем нужна forRoot-функция модуля?
93. Какая разница между декларированием и экспортом компонента из модуля?
94. Почему плохо «провайдить» сервис с shared-модуля в lazy-loaded модуль? (Вопрос о scope модулей.)
95. Что такое :: ng-deep и для чего используется?
96. Какие тесты можно запустить для Angular-программы? Какие инструменты используют для тестирования Angular-программы?
97. Как протестировать API-сервис?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах Angular Базовый и Angular Углублённый.
React
98. Что такое JSX? Что лежит в его основе?
99. Как работает алгоритм Virtual DOM?
100. Для чего нужно свойство key во время рендеринга списков?
101. В чем разница между функциональными и классовыми компонентами?
102. Зачем и когда нужно передавать props в super() при использовании классовых компонентов?
103. Почему нужно использовать setState() для обновления внутреннего состояния компонента?
104. В чем заключается принцип «подъема состояния»?
105. Какие библиотеки менеджмента состояния React-приложения вы знаете? Зачем они нужны?
106. Когда следует использовать Redux? Какие есть альтернативы?
107. Redux vs Mobx?
108. Расскажите о базовом принципе работы React Hooks.
109. В чем разница между createRef и useRef?
110. Когда следует использовать React refs? Когда не стоит?
111. Какие недостатки библиотеки React видите?
112. Какие паттерны используете вместе с React?
113. Как относитесь к типизации вместе с React?
114. Как построить хорошую архитектуру React-проекта?
115. Оптимизация React-приложений? Как измерить производительность программы?
116. Можно ли приложение на React встроить в другое приложение на React?
Ответы на некоторые из этих вопросов вы можете найти в видео курсах React Базовый и React Углублённый.
Back-end
117. Почему Node.js однопоточный, а не многопоточный?
118. Что такое event driven development?
119. Сравните fork() и spawn() методы.
120. Расскажите о Node.js фреймворках, которые использовали. Какая между ними разница?
121. Опишите словам код ендпоинта, который должен сохранить с клиента файл размером 4 гигабайта и положить его на S3 или другой CDN.
122. Что такое микросервисы, зачем их используют?
123. В каких случаях вы бы выбрали монолит, а в каких - микросервисы?
124. Как понять, что приложение в определенный момент работает исправно?
125. Как понять, что приложение за последние три дня работал исправно?
126. Как происходит проверка правильности пароля при использовании bcrypt?
127. Что такое JWT?
128. Джуниор прислал код на ревью. Что здесь не так? Как исправить?
router.post ( '/ users', async (req, res, next) => {
const user = await db.createUser (req);
if (user) {
return res.json (users);
}
res.json ({error: "can not create user"})
})
Базы данных
129. Что такое Redis и для чего его используют?
130. Какие базы данных использовали? Какая разница между SQL и NoSQL?
131. Для двух таблиц - комментарии и пользователи - напишите запрос, который выбирает последние три комментария для каждого пользователя.
132. Я как заказчик прошу выбрать вас базу данных для нового проекта. Ваши действия?
Инструменты и другое
133. Для чего нужен package-lock.json?
134. В чем разница между npm install и npm ci?
135. Для чего нужны бандлеры?
136. Расскажите о модульном подключении скриптов. Приведите пример использования загрузчиков / бандлеров модулей.
137. Чем различаются git merge и git rebase?
138. Что такое staging area в git?
139. Опишите процесс code review. Назовите основные правила, способы разрешения конфликтов и споров во время его проведения.
Практические задания
140. Напишите функцию Sleep (ms), которая останавливает выполнение async-функции на заданный промежуток времени.
141. Реализуйте один из методов массива (например, splice).
142. Напишите функцию с RegExp для нахождения всех HTML-ссылок в строке.
143. Реализуйте функцию, которая исполнит callback для всех элементов определенной ветви DOM-дерева.
144. Реализуйте таблицу с виртуальным скролом.
145. Реализуйте функцию преобразования URL query строки в JSON.
const inData = "user.name.firstname=Bob&user.name.lastname=Smith&user.favoritecolor=Light%20Blue";
function queryObjectify(arg) {
// ??
}
queryObjectify(inData)
/* Результатом виконання для вхідного рядка, повинен бути наступний об’єкт
{
'user': {
'name': {
'firstname': 'Bob',
'lastname': 'Smith'
},
'favoritecolor': 'Light Blue'
}
};
*/
146. Реализуйте функцию нахождения пересечения двух массивов.
const first = [1, 2, 3, 4];
const second = [3, 4, 5, 6];
function intersection (a, b) {
// ??
}
intersection(first, second) // -> [3, 4]
147. Реализуйте функцию / класс для генерации HTML.
const HTMLConstruct = {};
HTMLConstruct.span('foo'); // -> <span>foo</span>
HTMLConstruct.div.span('bar'); // -> <div><span>bar</span></div>
HTMLConstruct.div.p(
HTMLConstruct.span('bar'),
HTMLConstruct.div.span('baz')
); // -> <div><p><span>bar</span><span>baz</span></p></div>
148. Если есть проект с ограниченными сроками и некритичной производительностью, чем будете руководствоваться при выборе библиотек, подходов? Или все же будете обращать внимание на производительность? Или наоборот: сроки нелимитированные, производительность важна. Ваши действия?
Senior
Общие
1. Расскажите о функциональном программировании.
2. Что такое TDD (Test Driven Development) / BDD (Behaver Driven Development)?
3. Расскажите подробно о работе HTTPS.
4. Какой стек технологий можно выбрать для реализации клона какого-нибудь известного проекту и почему?
5. Имеется проект на старых технологиях, необходимо в него вносить изменения. Как это сделать лучше всего?
6. Если у кандидата есть опыт работы с несколькими фреймворками: какой будете использовать для следующего проекта? Какие факторы будут влиять на выбор?
7. Что такое V8 Engine?
JS Core
8. Реализация паттерна Class Free OOP (HTTPs://observablehq.com/@bratter/class-free-oop).
9. Патерн async disposer (HTTPs://advancedweb.hu/what-is-the-async-disposer-pattern-in-javascript).
10. использование регулярных выражений. Когда приемлемо / неприемлемо? Как они работают? Как можно сделать читабельный код?
Front-end
11. Как браузер определяет, можем ли мы общаться между вкладками?
12. Что такое Content Security Policy?
13. Как избежать загрузки кэшированных файлов скриптов и стилей?
14. Что такое requestAnimationFrame?
15. Расскажите о микросервисной архитектуре Front-end App.
16. Что такое Shadow DOM?
17. Сравните nextElementSibling и nextSibling.
18. Какие знаете метрики веб-сайта?
Angular
19. Как проводится конфигурация NgZone-модуля? Когда это необходимо?
20. Что раздражает в фреймворке? Что бы вы изменили?
21. Если бы вы решали, что добавить в следующем релизе фреймворка, какая фича это была бы?
22. Писали ли вы кастомные декораторы? Если да, то зачем?
23. Сделать ревью кода и дать замечания по архитектуре.
24. Расскажите, как бы вы делали такие фичи. Опишите архитектуру фичи в приложении.
Back-end
25. Сравните Common.js с AMD Modules и ES6 Imports.
26. Какой фреймворк выбрали бы для бэкенда, почему?
27. Опишите своими словами, как работает OAuth v2.
28. Есть проект с источниками памяти, как их обнаружить, устранить и предотвратить это в будущем?
29. Есть проект с performance issues, как их обнаружить, устранить и предотвратить в будущем?
Базы данных
30. Какие альтернативные виды баз данных используете?
31. Что такое RDS и почему он иногда не подходит?
32. Что такое SQL Injections и как их избежать?
33. Почему для запросов в БД надо использовать плейсхолдеры?
34. Как спроектировать кластер на MongoDB?
35. Для чего используют MongoDB Aggregation framework?
36. Расскажите о GraphQL.
Инструменты
37. Можете ли вы описать суть методологии git flow в двух словах?
38. Что означает требование делать squash commits во время rebase?
39. Каково ваше мнение об альтернативных системы контроля версий (Version Control System)?
40. Какие конвенции знаете и используете для git?
41. Расскажите о своем опыте использования / внедрения CI / CD.
42. Необходимо настроить деплой проекту на несколько сред. Расскажите, как бы вы построили процесс? Какие инструменты использовали бы?
Практические задания
43. Реализуйте асинхронный метод filter для Array (должны работать await).
44. Реализуйте функцию reduce при помощи рекурсии.
45. Как можно было бы сделать toggle-компонент, как в iPhone, без использования JS?
Благодарим за помощь в подготовке статьи Вячеславу Колдовскому, Ивану Рыженку, Николаю Галкину, Александру Бурмистрову, Владу Балабашу, Андрею Шумаде, Ивану Кувацкому, Андрею Кладочному.