Результати пошуку
ITVDN: курси програмування
Відеокурси з
програмування
Підписка

300+ курсів за популярними IT-напрямками

Вибери свою IT спеціальність

Підписка
Підписка

300+ курсів за популярними IT-напрямками

Результати пошуку за запитом: mvc4 5*
Співбесіда з DevOps. 300+ питань для Junior, Middle, Senior

Автор: Влад Сверчков

Junior 1.1 Общие вопросы и Linux. 1.2 Networks, Clouds. 1.3 Automation, Information Security. 1.4 Виртуализация, CI/CD, Development. 1.5 Monitoring/Logging. 1.6 Практические задания. Middle 2.1 Linux. 2.2 Networks. 2.3 Container orchestration. 2.4 Виртуализация и контейнеризация. 2.5 CI/CD, Clouds and Automation. 2.6 Monitoring/Logging. 2.7 Information Security. 2.8 Development, Databases. 2.9 Практические задания. Senior 3.1 Linux. 3.2 Networking, Разное. 3.3 Container orchestration, Clouds and Automation. 3.4 CI/CD, Information Security. 3.5 Observability, Databases. 3.6 Практические задания.     Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 7 декабря 2021 года. Оригинальная версия на украинском языке доступна по ссылке. Можно спорить о популярности DevOps, а можно просто готовиться к собеседованию и получить желанные 9K :) Чтобы помочь вам сориентироваться в вопросах, которые задают на интервью, мы поговорили с теми, кто их проводит, и составили список возможных вопросов.   Junior   Общие 1. Что такое DevOps? 2. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время? 3. Как работает HTTPS? 4. Объясните концепцию Infrastructure as Code, зачем это нужно и какие проблемы решает?   Linux 5. Опишите общую архитектуру операционной системы. 6. Опишите основное предназначение операционной системы. 7. Зачем нужны файловые системы? Какие существуют? 8. В чем разница между виртуализацией и контейнеризацией? 9. В чем преимущества контейнеров? 10. Какова файловая структура в Linux (UNIX) системах, расположенных в /etc, /dev, /proc, /sys, /lib, /var (несколько директорий на выбор)? 11. Что такое Load Average? 12. В чем разница между soft и hard symlink? 13. Как работают file permissions, зачем директории права исполнения (+x)? 14. Что такое zombie process? 15. С помощью чего можно собрать информацию о текущем состоянии процессора, памяти, диска, сети? 16. Что такое swappiness? 17. Как посмотреть свободное место на диске? 18. Что такое inode? 19. Расскажите поэтапно процесс загрузки Linux с момента включения питания компьютера. 20. Что произойдет при выполнении команд: 1. cat file1 > file2 2. cat file1 >> file2 21. В чем разница между Ctrl+C и Ctrl+Z? 22. Как перенаправить одновременно stderr и stdin? 23. Как убить процесс? Какие есть типы сигналов? 24. Что делает команда grep? 25. Что такое скрипт bash? 26. Какие типы переменных используются в bash? 27. Что выведут команды: 1. echo ${hostname}; 2. echo $(hostname);   Networks 28. Что такое модель OSI, TCP/IP? 29. Для чего нужны network masks? 30. Структура IP-пакета. Из чего состоит? Что такое фрагментация и почему она происходит? 31. Что такое коллизия? Почему возникает? 32. Что такое прокси? 33. Что такое firewalls и зачем они нужны? 34. Что такое NAT и для чего он нужен? 35. Какие типы IP-адресов вы знаете? 36. По какому порту и протоколу работают Ping и Traceroute?   Clouds 37. В чем разница между IaaS, PaaS и SaaS? 38. Что такое VPC и из каких компонентов должно состоять? 39. Что такое cloud-init? init/systemd/upstart configs?   Automation 40. Что такое IaaC и зачем он нужен? 41. Что такое Terraform? 42. Какие инструменты автоматизации вы знаете?   Information Security 43. В чем разница между аутентификацией и авторизацией? 44. Сертификаты. Как работает HTTPS? Что такое certificate ciphers? 45. Как безопасно передать данные своему коллеге? 46. ​​Что такое MFA, TOTP?   Виртуализация 47. В чем разница между виртуализацией и контейнеризацией? В чем плюсы и минусы? 48. Как при запуске Docker-контейнера «повесить» его из 80-го порта в контейнере на 8081 на хост? 49. Как передать в виртуальную машину USB device? 50. Docker-контейнер потребляет многие SWAP. Что делать?   CI/CD 51. Что такое Continuous Integration и Continuous Deployment? В чем разница между Continuous Deployment и Continuous Delivery? 52. Опишите основные этапы CI/CD. 53. Опишите пример процесса CI (и/или CD), который начинается с момента, когда разработчик запушил изменения/PR в Git? 54. Расскажите о разновидностях тестов, которые мы можем использовать в CI пайплайне. 55. Какие инструменты CI вы использовали? Есть ли опыт работы с Jenkinsfile? 56. Какие виды тестов вы знаете и зачем они нужны?   Development 57. Git. Как решить merge conflict? Что такое rebase, cherry-pick? 58. В чем разница между git merge и git rebase? 59. Какие UI использовали? 60. Какая разница между GitLab/GitHub/Bitbucket? 61. Какая разница между Git pull/Git fetch? 62. Что такое Git-Flow? 63. Версионирование. Какая разница между SemVer и CalVer? 64. Тестирование. Какие существуют виды? Как писать тесты, TDD? 65. В чем разница между компилируемыми и интерпретационными языками программирования?   Monitoring/Logging 66. Какие метрики нужно собирать? Разница между infrastructure и application monitoring. 67. Какая разница между pull и push model в системах мониторинга? 68. Какая разница между Black box и White box monitoring? 69. Расскажите о подходах к сбору application логов.   Практические задания 71. Напишите простую программу на ваш выбор. Программа должна получать сообщения из сервиса очередей и печатать его в stdout. Сервис очередей — по вашему усмотрению. 72. Разберите структуру сервиса (на примере Docker-Compose). 73. Практическая сессия работы с Git (Git command line: fetch, push, pull, rebase, checkout, submodules).   Middle   Linux 1. Опишите архитектуру ядра Linux. 2. Что такое ядро ​​и каково его предназначение? 3. Опишите общие части файловой системы Unix/Linux, архитектуру файловой системы. 4. В чем разница между RedHat и Debian? 5. В чем разница между /proc и /sys? 6. Ситуация: указывает, что на диске занято 50% места, а сделать файл даже под root юзером не можем. В чем проблема? 7. Мы удалили файл, открывший приложение. Как нам его восстановить? 8. Как найти PID процесса, его стартовые параметры? 9. Как проверить, открыт ли порт на удаленном хосте, локальном хосте? 10. Как искать файл по его содержимому? 11. Что такое SSH, как организовать доступ на сервер без пароля или с определенных хостов? Как ограничить доступные для выполнения команды? 12. Как проверить потреблённые ресурсы во время сеанса SSH? 13. Что означает разрешение на файл 755? 14. Что такое SELinux и зачем он нужен? 15. Как определить PCI-устройство в системе, например, RAID controller? 16. Как переименовать устройство, например, сетевую карту или диск? 17. Что такое LVM? Какие знаете примеры использования? 18. Что такое root reserved space? 19. Что такое exit code и как его узнать? 20. Почему вывод df -h указывает, что на диске занято мало места, но система не дает записать файл с сообщением “no space left on device”? 21. В чем разница между command1 & command2 и command1 && command2, а также command1 && command2 || command3? 22. Из сети резко вырос исходящий трафик на 25-й порт. Как, имея доступ на гейтвей, обнаружить вредителя из внутренней сети? 23. Как затюнить параметры Linux Kernel? 24. Что такое ulimits? 25. В чем разница между символическими и hard links? 26. Что такое фрагментация ext3 и ext4? 27. Зачем файловые системы ext* резервируют 5% места? 28. Как увеличить размер файловой системы? 29. Можем ли мы уменьшить размер файловой системы? 30. Что такое chroot и для чего он нужен? 31. У нас есть Linux box с 2 Гб оперативной памяти и Java-приложение, которое пытается выделить 4 Гб во время запуска. Удастся ли это? 32. Есть приложение, которое читает файл, который пользователь пытается удалить. Что случится? Можно ли удалить этот файл? Можно ли восстановить этот файл? 33. Какие механизмы создания процессов в Linux вы знаете? 34. Сравните systemd и init system. 35. У вас есть папка с большим количеством файлов, и вы хотите удалить все файлы с именами, начинающимися на A (прописная буква). Но команда rm –f A* выдает Argument list too long. Как удалить эти файлы? 36. Вы начинаете удалять файлы первым методом из предыдущего вопроса, но каждый rm запрашивает подтверждение. Это очень долго. Как можно ускорить эту операцию?   Networks 37. Расскажите о модели OSI. Опишите функции и назначение каждого уровня. 38. Какие сетевые топологии вы знаете? Опишите разницу между ними. 39. Зачем нужен IP-адрес, если MAC-адрес уникален? Разве мы не можем общаться только по MAC-адресу? 40. В чем разница между концентратором и коммутатором L2 в сетях Ethernet? 41. Что такое VLAN и для чего существует разделение на виртуальные локальные сети? 42. Какой номер порта используется для PING-коммуникации? 43. Что такое сеанс связи? Какой алгоритм использует TCP для доставки? 44. В чем основное отличие между TCP и UDP? 45. Зачем нам маршрутизатор по умолчанию? 46. Как хост решает DNS по умолчанию? 47. Компьютер начал получать IP-адрес из другой сети (есть подозрение, что в сети работает другой DHCP-сервер): как его найти и отключить? Какие методы защиты от такой проблемы? 48. Мы будем мигрировать сайт на новый IP-адрес. Как сделать, чтобы пользователи этого практически не заметили? 49. Что такое socket? 50. Как узнать, какие удаленные хосты подключаются к хосту через порт 8888? (с помощью команд и не используя /proc или /sys). 51. У нас есть несколько сетевых карт. Как увеличить пропускную способность сервера? 52. Как проверить открытые порты на удаленном сервере без команд Netcat или Nmap Linux?   Container orchestration 53. В чем преимущества Kubernetes как платформы? 54. Что такое control plane и из каких компонентов состоит? 55. Какие CNI вы использовали и чем они отличаются? 56. Чем отличается managed Kubernetes от self-deployed? 57. Как можно контролировать размещение подов в кластере? (taints/tolerations, affinities, topologies etc.) 58. Скейлинг кластера. Cluster autoscaler vs HPA vs VPA? Как сделать zero-downtime node decommission/cluster upgrade? PDB? Lifecycle hooks? 59. Какие способы для внешнего доступа к кластеру? ingress, node port, port-forward и т. д. 60. С каким PID запускается процесс в контейнере? 61. Что лучше использовать для изоляции окружения – Vagrant или Docker? 62. Какой инструмент оркестрирования контейнеров использовали? (Swarm, Kubernetes, Openshift, Rancher и т. д.) 63. Что происходит в Kubernetes после запуска kubectl (API, ReplicaSet Controller, storage back-end, scheduler, kubelet, worker node, pod)? 64. Какая разница между pod и контейнером в K8s? 65. Как мы можем сделать любой микросервис, работающий на K8s, доступным из внешней среды?   Виртуализация и контейнеризация 66. Какие типы виртуализации вы знаете? 67. Как работает Docker на macOS/Windows? 68. Что такое Docker-image и Docker-контейнер? Как они между собой связаны? 69. Каковы основные отличия между контейнерами докеров и виртуальными машинами? 70. Что такое image layer? Какое максимальное количество layers возможно? Почему нужно пытаться иметь малое количество layers? Какое оптимальное количество? 71. Как в виртуальной машине изменить размер диска после создания? Что нужно сделать с гостевой ОС? 72. Как в Docker реализовано ограничение ресурсов? 73. Существует виртуальная машина, к которой потерян доступ. Как, имея доступ к диску, восстановить root пароль/SSH-ключ? 74. Оптимизировать Dockerfile, объяснить, что и почему так: FROM golang RUN apt install -y pkg1 pkg2 pkgN # Dependencies for app COPY. . RUN go build -o app main.go CMD ./app 75. Что такое IPVS и какой у него функционал? 76. Какова структура API в Kubernetes? 77. Что такое operators и зачем они нужны?   CI/CD 78. Какие стадии должны быть в любом пайплайне (lint, test, build, deploy etc.)? 79. Как и где хранить build artifacts? 80. Что такое артефакт? 81. Есть два бренча: dev и stage. Мы забросили Dockerfile в dev, а затем сбилдили в dev и stage. Это будет одним артефактом или разными? 82. Что вы использовали для автоматизации настройки Jenkins и GitLab CI? 83. Сравните CI инструментов: Jenkins, GitLab CI, AWS Code Pipeline, GCP cloudbuild, GitHub actions, Circle CI. 84. Deployment strategies. Какие существуют и чем отличаются (recreate, blue-green, canary etc.)? 85. Как реализовать СI/CD для программы, которая зависит от нескольких других программ? 86. GitOps. В чем его преимущества и недостатки?   Clouds and Automation 87. Какова роль и преимущества облачных сервисов для DevOps? 88. Что такое immutable infrastructure? Как достичь? В чем преимущества и недостатки? Packer, AMI и т. д. 89. Структура Terraform. Как организовать multi-environment project? Terraform workspaces? 90. Лучшие практики по использованию многих Terraform states. 91. Как организовать доступ команде разработчиков к AWS/GCP/Azure? Role-based access, assume role, SSO. 92. Что такое Terraform provider, module? 93. Как версионировать Terraform modules? 94. Когда нужно использовать local-exec и remote-exec? 95. Что такое golden image и как его создать?   Monitoring/Logging 96. Как мониторинг помогает поддерживать всю архитектуру системы? 97. Какие инструменты мониторинга вы использовали? 98. Что такое медиана и процентиль? 99. Что такое SLI, SLO, SLA? Зачем это нужно? 100. Архитектура системы для сбора логов, ELK, EFK etc. Как сохранить логи при отказе хранилища? Нужно ли использовать для этого брокер сообщений? Нужно ли делать throttling/rate limits? 101. Prometheus long-term storage. Какие варианты? 102. Как работает Prometheus? 103. В чем принципиальное отличие между Grafana и Kibana? 104. В чем главное отличие между Ansible and Terraform? 105. Что такое SAAS monitoring и какие виды знаете? 106. Если вы используете Datadog/NewRelic, то как нам отслеживать падение инструментов мониторинга? 107. Что такое distributed tracing и error tracking systems? Как вы думаете, когда следует их использовать?   Information Security 108. В чем разница между RBAC и ABAC? 109. В чем заключается XSS атака? SQL injection? Что такое CSP? 110. Какие базовые меры можно предпринять для защиты SSH-соединения? 111. Root-пароль неизвестен или потерян. Какова процедура восстановления? 112. Как управлять правами на файловой системе в Linux? 113. Что такое Firewall? 114. Чем отличается stateless от stateful фаерволов? 115. Сколько таблиц в iptables? 116. Можно ли настроить трансляцию NAT с помощью iptables? Какую таблицу следует использовать? 117. Какую таблицу используют для смены заголовков пакетов? 118. Если вам ломают Linux-сервер, то как более эффективно блокировать трафик с IP-адресов? 119. Принцип работы GCP Firewall: можем ли мы профильтровать трафик на Load Balancer? 120. Что такое SELinux? 121. Можно ли полностью отключить SELinux на лету? 122. С какими secrets management systems вы работали? 123. У нас есть сервер NAT, и мы хотим обеспечить доступ по IP к серверу снаружи. Как нам это реализовать? 123. Чтобы попасть на сервер клиента, нужно залогиниться на 4+ jump хоста. Как автоматизировать? Где мы будем хранить наш SSH-ключ?   Development 125. Что такое cookies? Зачем нужны? JWT? 126. Что такое feature toggles и зачем они? 127. Что такое TDD (Test Driven Development) и BDD (Behaviour Driven Development)?   Databases 128. Что такое индекс и что такое ключ? 129. Каковы преимущества и недостатки индексов? 130. Представьте, что вы разрабатываете систему биллинга, которая должна обрабатывать тысячи счетов. Какую стратегию обновления данных вы бы выбрали? 131. Какие методы чаще всего используют для масштабирования реляционных баз данных? 132. Опишите механизм транзакций БД. 133. Как мы можем удалить таблицу или базу данных? 134. Как найти медленные запросы в MySQL/PostgreSQL? 135. Какие SQL-операторы манипулирования данными вы знаете? 136. Можно ли вывести список баз данных/таблиц через CLI? Как мы можем переключаться между базами данных MySQL/PostgreSQL? 137. Какие storage engines в MySQL вы знаете? Какие отличия? 138. Как реализована репликация MySQL master-master? Сколько серверов MySQL может быть задействовано в таком взаимодействии? 139. Как работает репликация MySQL/PostgreSQL? Какие параметры должны быть настроены для репликации? 140. Сравните SQL и NoSQL. 141. Sharding vs replication? 142. Какие есть виды индексов? Когда и зачем использовать? 143. Требования к схеме БД. Character sets, collations, default, not null и т. д. 144. Мы мигрируем MySQL/PostgreSQL из on-prem в облако. Как нам это сделать с минимальным даунтаймом? 145. Зачем и как тестировать перформанс баз данных?   Практические задания 146. Напишите Terraform module для инфраструктуры тестового сервиса в AWS. 147. Напишите hello-world программу на ваш выбор и сформируйте для нее helm chart/kustomize. 148. Как организовать деплой без downtime? 149. Опишите способы troubleshooting для Docker-контейнера. 150. Разобрать и объяснить структуру CI/CD pipeline (на примере gitlab.yml). 151. Продемонстрируйте навыки работы с GitOps, опишите деплоймент простенькой программы. 152. Как организовать деплой веб-приложения, запущенный на нескольких серверах без (или с минимальным) downtime? 153. Как с помощью Ansible узнать default gateway для пула серверов, и, если он отличается от желаемого, записать строчку «hostname: gateway» в файл на локальной машине?   Senior   Linux 1. Что может создавать высокую нагрузку на CPU (процессы приложений потребляют очень мало ресурсов CPU)? 2. У нас нет команд ifconfig, ip, и поставить мы их не можем. Как нам узнать ip address, mask, network, routes? 3. Что такое suid, sgid и sticky? 4. Что тюнилось с системой для нагрузки трафика 1GB, 10G, 40G+? 5. Что тюнилось с системой для высокой нагрузки на диск? 6. Что такое Linux namespaces? 7. Что такое Ceph, как работает? 8. Что нужно тюнить для Ceph? 9. Что произойдет, если /dev/sda1 перенесем в /root? 10. Мы удалили /dev/sda1. Как нам его восстановить? Что такое pseudo-devices? 11. Нам хакнули сервер, и в директории /var/www создали два миллиона файлов небольшого размера. Если использовать команду cd /var/www и затем rm -rf*, то у нас зависнет терминал. Как удалить файлы? 12. На каком уровне работает iptables? 13. Что такое eBPF и зачем нужен? 14. У вас есть файл, содержащий IP-адреса серверов (по одному в строке). Есть SSH доступ к этим машинам, и вам нужно выполнить задание (например, установить список пакетов на все узлы). Объясните, как можно это сделать.   Networking 15. В чем отличия между IPv4 и IPv6? Зачем мы мигрируем на IPv6? 16. Сосуществование IPv4 и IPv6: что это значит? 17. Действительно ли работают межсетевые экраны с поддержкой IPv6? 18. Как работает DHCPv6? Чем она отличается от DHCPv4? 19. Как фрагментируются пакеты IPv6 и чем это отличается от IPv4? 20. Нужно ли с IPv6 больше использовать NAT? 21. Что такое DPDK? 22. Что такое SR-IOV? В чем разница между DPDK и SR-IOV? 23. Что такое NetFlow и зачем нужен? 24. Что такое OpenFlow? 25.Что такое SDN и какие контроллеры вы знаете? Сравните контроллеры.   Разное 26. Что такое SDLC? 27. Расскажите о последнем опыте реализации архитектуры для сервиса. 28. Какой самый тяжелый скрипт писали? 29. Что такое configuration drift? Почему это происходит и как это усложняет жизнь инженерам\SRE\Ops? 30. Расскажите об архитектуре, за которую вы отвечаете, и укажите, как она масштабирована и отказоустойчива. 31. Назовите три важных KPI для DevOps-специалиста. 32. Как работает Kafka (clusters(brokers, controllers), topics, partitions)? 33. GitOps: Rancher Fleet vs Flux vs Argo? 34. Как использовать GitOps для обновления документации DevOps-приложений? 35. Расскажите об особенностях проектирования Kubernetes on-premise. 36. Как организовать On-call процесс для команды DevOps? 37. Опишите главные шаги загрузки операционной системы Linux.   Container orchestration 38. Service mesh. Что это такое и зачем нужно? 39. Cluster federation. Что это такое и зачем нужно? 40. Pod fine-grained access. Как реализовать? IRSA vs kube2iam vs kiam? 41. Как реализованы услуги в кубернетах? 42. Как дебажить трафик контейнера? 43. Что такое unikernel и зачем он нужен? 44. Почему коммьюнити переезжает из Docker containerd?   Clouds and Automation 45. Какие преимущества и недостатки cloud-провайдеров? 46. Cost оптимизация. Какие инструменты? Spot/preemptible instances, reservations? 47. Как организовать multi-account, multi-region cloud setup? 48. В чем разница между частными и публичными сетями в AWS? 49. AWS Lambda: имели ли опыт работы? 50. Когда следует переходить на AWS Lambda? Когда не стоит? Аналогичные решения в GCP или Kubernetes? 51. Когда лучше использовать CloudFormation, а когда Terraform?   CI/CD 52. Что такое state в контексте использования Terraform? 53. Какие существуют branching strategy? На что опираться при выборе? 54. Как реализовать feature/dynamic environments? 55. Как сделать эмуляцию ресурсов cloud-провайдера для локального тестирования и ускорения разработки? 56. Что такое MultiCloud? 57. Что такое Cloud-Agnostic и когда он потребуется? 58. Что такое Hybrid-Cloud и с какими решениями вы работали?   Information Security 59. Как должны храниться пароли в базах данных (Salt&Pepper, Rainbow Tables, Adaptive Hashing)? 60. Как передавать секреты в application (Secrets management)? 61. Сравните CI/CD SAST и DAST? 62. Какие вы знаете Kubernetes security practices? RBAC? OPA? Какие недостатки RBAC и какие кейсы знаете? 63. Расскажите о защите от DDOS атак, WAF. 64. Что такое Rootless containers и для чего он нужен? 65. Что такое AppArmor и Seccomp и зачем они нужны? 66. Приходилось ли работать с Falco? Если да, то что реализовывали? 67. HashiCorp Vault и как правильно передать нам секреты в контейнере и CI pipeline? 68. Что такое Admission Controllers и какие вы использовали? 69. Как хранятся секреты etcd? Как просмотреть ресурсы в etcd? 70. Чем проверяете на уязвимости ваш Kubernetes cluster? 71. Что такое Secure SDLC? 72. Что вы знаете о Cloud Infrastructure Attack via a Pull Request и как этого избежать?   Observability 73. Что такое observability и чем отличается от обычного мониторинга? Какие особенности необходимо учитывать в микросервисной архитектуре (tracing)? 74. Что такое SLI, SLO, SLA и зачем они нужны? Для чего используют error budget?   Databases 75. Что такое теорема CAP? Зачем это нужно? 76. Как работать с миграциями? Что делать в случае rollback? Как проверить, что миграция backward-compatible? 77. Опишите, как бы вы оптимизировали работу базы данных? (БД по выбору кандидата) Slow queries, buffers, thread pools? 78. Зачем нужно тестировать перформанс базы данных и какими инструментами?   Практические задания 79. Представьте, что вы CTO Booking или Airbnb. Какие бы вы принимали решения касательно: языков программирования. Infrastructure as a Code. архитектуры инфраструктуры. настройки CI/CD. 80. У вас есть файл, содержащий патчи в директории. Например: /var/tmp/temp/file1.c /var/tmp/file.ext /var/tmp/temp/ etc... один путь в строке. Если путь заканчивается на '/' — это путь в каталог. Вам нужно восстановить это дерево каталогов с пустыми файлами в другой файловой системе. Напишите bash-скрипт. 81. Представьте, что вам нужно убедить Spotify, использующего AWS, перейти на GCP. Как вы будете мотивировать Spotify мигрировать на GCP? 82. Есть сервисная компания, предоставляющая сервис трекинга перевозок. Есть клиенты, которые не желают, чтобы их данные процессировались в AWS. Как нам реализовать multi-cloud solution?   Редакция DOU выражает благодарность за помощь в подготовке статьи: Владу Волошину, Павлу Петриченко, Виталию Гарбулинскому (BrightLocal), Евгению Думе, Сергею Яремчуку, Вадиму Шкилю, Александру Билюку, Александру Нежинскому, Владиславу Граму, Станиславу Коленкину, Олегу Миколайченку, Антону Гаврилову.
Співбесіда з Android. 250+ питань для Junior, Middle, Senior

Автор: Влад Сверчков

Junior 1.1 Базовые вопросы 1.2 Алгоритмы, структуры данных, хранение данных 1.3 Работа с сетью 1.4 Многопоточность, Java Core, RxJava 1.5 Android SDK, Kotlin 1.6 Другое 1.7 Практические задачи   Middle 2.1 Базовые вопросы 2.2 Алгоритмы, структуры данных, хранение данных 2.3 Работа с сетью 2.4 Многопоточность, Java Core 2.5 Android SDK 2.6 Kotlin 2.7 RxJava 2.8 Тестирование 2.9 Другое   Senior 3.1 Базовые вопросы, архитектура 3.2 Многопоточность 3.3. Java Core, Android SDK, Kotlin Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 3 ноября 2021 года. Оригинальная версия на украинском языке доступна по ссылке. Если вы готовитесь к собеседованию по Android — или проходить, или проводить — возможно, этот перечень вопросов пригодится вам. Редакция DOU поинтересовалась у разработчиков, проводящих технические интервью в компании в Украине, о чем они спрашивают кандидатов. Это уже десятая статья из рубрики «100+ технических вопросов»; ознакомиться с вопросами для других языков программирования на DOU.ua на украинском языке вы сможете, перейдя по ссылке.   Junior   Базовые вопросы 1. Назовите основные принципы ООП. 2. Что такое класс? Что такое интерфейс? Какая между ними разница? 3. Назовите базовые типы данных. 4. В чем отличие примитивных типов от объектов? 5. Какая разница между абстрактным классом и интерфейсом? 6. Что такое паттерны проектирования? Какие паттерны вы знаете? 7. Чем отличается Java от Kotlin?   Ответы на некоторые из этих вопросов вы можете найти в видео курсе Kotlin, а также статье Kotlin vs Java: что лучше для Android-разработки? и вебинаре Структуры данных в Java и Kotlin.   Алгоритмы 8. Что такое алгоритм и как выбрать правильный? 9. Что такое сложность алгоритма? Как и с помощью чего её можно вычислить? 10. Что такое нотация big-O? 11. Что такое рекурсия? 12. Какие алгоритмы сортировки вы знаете?   Структуры данных 13. Расскажите о таких структурах данных, как List, Set, Map? 14. Какая разница между ArrayList и LinkedList?   Ответы на эти вопросы вы найдёте в вебинаре Структуры данных в Java и Kotlin.   Хранение данных 15. Как можно хранить данные в Android? 16. Когда следует использовать SharedPreferences? 17. Из каких компонентов состоит библиотека Room? 18. Что такое @PrimaryKey, @Ignore, @Embedded, @TypeConverters в Room? 19. Для чего нужна миграция в базах данных?   Ответы на некоторые из этих вопросов вы найдете в видео курсе SQLite. Базы данных в Android приложениях (урок 2, урок 3).   Работа с сетью 20. Что такое JSON, XML? 21. Какие варианты реализации работы с сервером? 22. Что такое REST?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2), Android Углубленный (урок 9).   Многопоточность 23. Что такое процесс? 24. Что такое поток? 25. Для чего используют ключевое слово synchronized? 26. Зачем синхронизировать потоки? 27. Какая разница между синхронным и асинхронным исполнением? 28. Как мы можем создать поток в Java? 29. Что такое deadlock? 30. Какие варианты реализации многопоточности есть в Android? 31. Что такое main thread? Какие операции нужно выполнять на main thread, а какие нельзя делать?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).   Java Core 32. Что такое Exceptions? Зачем они нужны? 33. Зачем используют ключевые слова final, finally и finalize? 34. Что такое абстрактный класс? Что такое интерфейс? 35. Что такое анонимный класс? Использовали ли на практике? Для чего? 36. Что такое статический класс (static class)? 37. Что такое enum? Зачем его используют? 38. Можем ли мы сделать конструктор приватным? 39. Какая разница между ключевыми словами throw и throws? 40. Какая разница между Error и Exception? 41. Какая разница между checked и unchecked exception? 42. Что такое Object class и какие методы он имеет? 43. Какие существуют модификаторы доступа для классов? Какая разница между ними? 44. Что такое итератор? 45. Как безопасно удалить элемент из коллекции? 46. Зачем нам переопределять equals() и когда не нужно это делать? 47. Какой должен выполняться контракт при переопределении equals()?   Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Базовый (урок 2, урок 4, урок 6, урок 7, урок 8, урок 9).   RxJava 48. В чем разница между map() и flatMap() в RxJava? 49. Когда используете observeOn(), а когда subscribeOn()? 50. Как можно обработать ошибки в RxJava? 51. Какие schedulers знаете в RxJava? Назовите их отличия. 52. Что такое Disposable? Зачем его используют? 53. В чем разница между Hot и Cold Observables? Назовите примеры в RxJava.   Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).   Android SDK 54. Какие базовые Android-компоненты можете назвать? 55. Что такое ContentProvider? 56. Какие типы Service знаете? 57. Что такое BroadcastReceiver и какие типы существуют? 58. Для чего используют механизм фрагментов? 59. Опишите жизненный цикл Activity. 60. Опишите жизненный цикл Fragment. 61. Есть ли у Fragment контекст? Если да, то как его получить? 62. Чем отличается Fragment от Activity? Зачем выдумали Fragment? 63. Что такое изменение конфигурации? Что происходит с приложением на Android при этом? 64. Что такое Intent? Что такое explicit/implicit Intent? 65. Что такое SharedPreferences? 66. Что такое ANR? Как избегать таких ситуаций? 67. Что такое DataBinding? 68. Что такое LiveData? Какие виды знаете? 69. Как создать ViewModel? Почему создавать ViewModel нужно именно так? 70. Что такое Context и зачем он? 71. Что такое AndroidManifest.xml? Зачем его используют? Что мы можем там декларировать? 72. Перечислите layout, с которыми работали? Когда и какой нужно использовать? 73. Расскажите, что нужно реализовать, чтобы отобразить список строк в RecyclerView. 74. Объясните паттерн ViewHolder. Для чего он применяется? 75. Что такое DiffUtil? 76. Расскажите о ConstraintLayout. 77. Для чего используют Group, Guideline, Barriers, Chains в ConstraintLayout? 78. У вас есть Activity с двумя Fragment'ами, у одного есть кнопка, у другого TextView. При нажатии кнопки изменяется TextView. Как вы реализуете это? 79. Что такое WorkManager? Когда используем?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2, урок 4, урок 5, урок 7), Android Углубленный (урок 3, урок 6, урок 9), Android User Interface (урок 3), Создание пользовательских элементов управления в Android (урок 9).   Kotlin 80. Как вы понимаете термин Null safety? 81. Что такое nullable и non-nullable типы? Какая разница между val и var? 82. Как задекларировать getter/setter для property? 83. Почему классы Kotlin по умолчанию final? 84. Что такое sealed class? 85. Что такое data classes? 86. Какая разница между sealed class и enum? 87. Почему у Kotlin нет checked exceptions? 88. Что такое Extensions? Использовали ли вы их на практике? 89. Что такое перегрузка операторов (operator overloading)? Зачем нужен этот механизм? 90. Как работают примитивы в Kotlin? 91. Расскажите об объекте Unit в Kotlin. 92. Расскажите об объекте Any в Kotlin. 93. Как создать Singleton объект в Kotlin? 94. Что такое companion object? 95. Чем отличается const val от val? 96. Какие знаете модификаторы доступа? 97. Что означает модификатор lateinit? 98. Coroutines – что это за механизм? Использовали ли его на практике? 99. Зачем нужны Coroutines? Чем они лучше обычных тредов? 100. Что такое suspend-функция? 101. Что такое Job? 102. Что такое Dispatcher? Какие есть виды? 102. Что такое Scope? 103. Как писать Java compatible API в Kotlin?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.   Другое 104. Расскажите, что такое memory leak. Как избежать? 105. Как бы вы искали memory leak? 106. Расскажите о Dependency injection. Какие варианты реализации в Android? 107. Для чего нужна система контроля версий? 108. Что такое Git? 109. Для чего используем .gitignore-файл? 110. Расскажите о командах push, pull, fetch в Git? 111. Что такое merge и rebase? Какая разница? 112. Что такое CI? Зачем используем?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Dependency Injection в Android-разработке, Основы работы с Git.   Практические задачи 113. Разверните Linked List. Отпишите о зацикленности в LinkedList или ее отсутствии. 114. Напишите функцию, которая вернет n первых неотъемлемых чисел: un nMin(items: List<String>, n: Int): List<Int> { //return n minimal non negative items } Пример вызова функции: nMin(listOf("1","-11","-12","22","100","-30",”2”, “5”), 3) Ожидаемый результат: [1, 22, 100] 115. Что будет выведено в консоль? Объясните результат. var globalId = 0 data class User(val name: String) { val id = globalId++ } fun main(args: Array<String>) { val user1 = User("User") val user2 = User("User") println(user1) println(user2) println(user1 == user2) } 116. Исправьте все ошибки в коде: class Animal class Dog: Animal {} 117. Для коллекции items: val items = listOf(1, -2 ,-3 , 4, 5, 0, 2, -2) Подсчитайте количество отрицательных элементов. Вычислите среднее арифметическое значение отрицательных и неотрицательных чисел.   Middle   Базовые вопросы 1. Нужно ли придерживаться SOLID-принципов? Почему да/нет? 2. Какие паттерны использовали на практике? Приведите примеры. 3. Опишите паттерны MVP и MVVM. Какие из них использовали? Какой предпочитаете? Знаете ли/использовали другие паттерны? 4. Почему слой Model должен быть отделен от View или Presenter? 5. Что такое инверсия зависимости (dependency inversion)? 6. Объясните пример паттерна Singleton. Где его использовать в Android? 7. Объясните пример паттерна Observer. Где его использовать в Android? 8. Объясните пример паттерна Builder. Где его использовать в Android? 9. Как вы понимаете термин «архитектура приложения»? Зачем это вообще нужно? Почему инженеры пытаются усложнить процесс разработки и тратят время на проектирование архитектуры? Может, лучше сэкономить ресурсы и пойти по простому пути — держать весь код в одном файле? 10. Что такое иммутабельный объект? Для чего его используют? Как сделать иммутабельный объект в Java? 11. MVP vs MVVM – в чем основное отличие?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Архитектура Android приложений (урок 1-5), Создание пользовательских элементов управления в Android (урок 4), SOLID принципы в Java.   Алгоритмы 12. Есть много алгоритмов сортировки. Возможно ли выбрать один самый быстрый и использовать его повсюду? Почему да/нет? 13. В чем сложность поиска произвольного элемента в ArrayList? В LinkedList? 14. Какие алгоритмы используют в Android/Java коллекциях под капотом?   Структуры данных 15. HashMap. Используете ли вы на практике? Если да, то зачем? Как она работает изнутри? 16. Какая разница между HashMap и LinkedHashMap? 17. Что такое бинарное дерево?   Сохранение данных 18. Как бы вы реализовали сохранение зашифрованных данных в SharedPreferences? Базу данных? 19. Как реализовать миграцию таблицы, где нужно из non-nullable поля сделать nullable поле?   Работа с сетью 20. Расскажите, какие методы можно применить в REST API? Зачем какой нужен? 21. Что можно использовать, кроме REST API, для работы с сервером?   Многопоточность 22. Что такое Thread Pool? Каковы его особенности? 23. Что такое Executor/ExecutorService? Какую задачу выполняют и как использовать? 24. Какие есть виды Executor? 25. Какая разница между методами start() и run() в классе Thread? 26. На что указывает ключевое слово synchronized? Какова его основная функция? 27. Модификатор volatile. Приходилось ли использовать? Зачем нужен? 28. Знаете ли вы о таком понятии, как «эффект гонки» (race condition)? Как это предотвратить? Какие механизмы в Java для предотвращения этого? 29. Что такое атомарная операция? 30. Как остановить поток в Java? Можно ли продолжить выполнение потока после его остановки? 31. Знаете ли вы о потокобезопасных коллекциях в Java/Android? Приходилось ли их использовать? 32. Какие стратегии можно применить, чтобы добиться потокобезопасности? 33. Какие варианты реализации потокобезопасности кода есть у Kotlin? 34. Как сделать переменную потокобезопасной? 35. Что такое Mutex и Monitor? Кто может выступать в роли монитора? 36. Что такое атомарные операции? 37. Почему инкрементация и операции с long не являются атомарными? 38. Какие классы атомарных переменных? 39. Что такое устаревшие данные (stale data)? Как избежать этого эффекта?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).   Java Core 40. Механизм Generics. Какую проблему решает? 41. Что такое soft reference, weak reference? 42. Что такое сериализация объекта? Какую проблему она решает? Какие стандартные механизмы у Java? 43. Какой контракт существует между equals() и hashCode()? 44. По вашему мнению, почему строки в Java сделаны иммутабельными? 45. Можем ли мы задекларировать пустой интерфейс? Если да, то зачем? 46. ​​Что такое String pool? Зачем он нужен? 47. Что такое StringBuilder, какую проблему он решает? 48. Что такое Stack в JVM и какие данные там хранятся? 49. Что такое Heap в JVM и какие данные там хранятся? 50. Что такое garbage collector, как он вообще работает? Каковы реализации GC?   Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Углубленный (урок 5).   Android SDK 51. Назовите основные изменения в версиях Android. 52. Как реализовать IPC в системе Android? 53. Как реализовать отложенную задачу? 54. Что такое Doze Mode? 55. Что такое App Standby mode? 56. Что такое AIDL и зачем он нужен? Какие типы данных поддерживаются? 57. Что такое Multidex? 58. Что такое KeyStore API? 59. Что такое PendingIntent? 60. Как безопасно хранить user-sensitive данные? 61. Какие методы защиты приложения? 62. Что такое SSL/TLS Pinning? Как его реализовать в Android? 63. Что такое ViewBinding? 64. Для чего нужны методы onSaveInstanceState/onRestoreInstanceState? Что такое permissions? Как запросить permissions? 65. Что такое Intent? Что такое Explicit/Implicit Intent? Что такое Sticky Intent, Pending Intent? 66. Какие типы данных мы можем положить в Bundle? 67. В чем разница между Serializable и Parcelable? 68. Если фрагмент для работы нуждается во входных данных, каким образом будет правильно передать их фрагменту? 69. Что такое ViewModel? Какие ее свойства? 70. Объясните работу ViewModel с Jetpack. Что такое ViewModelProviders, ViewModelProvider.Factory? 71. Что такое LiveData? Зачем её используете? 72. Какая связь между LiveData и LifecycleOwner? 73. Приведите пример LifecycleOwner? 74. Что такое Looper? 75. Использовали ли HaMeR фреймворк (Handler/Message/Runnable)? Для чего он? 76. Какую информацию содержит контекст? Какие типы контекста знаете? 77. Для чего используют Content Provider? 78. Что такое Data Binding? Что такое View? 79. Преимущества Fragments против View? 80. Как работает Content Provider? 81. Какая разница между Single Activity и Multiple Activity? 82. Какие виды Context знаете? Где какой использовать? 83. Объясните работу BroadcastReciever и его реализацию. 84. Зачем LocalBroadcastManager? 85. Для чего нужен MotionLayout? 86. Опишите, как реализовать анимацию в MotionLayout. 87. Как можно обнаружить проблемы в скорости UI и устранить их? 88. Расскажите о вариантах реализации custom view. 89. Что делают методы onMeasure, onLayout, onDraw во View? 90. Как воплотить анимацию при переходе между Activity-фрагментами? 91. Когда необходимо использовать foreground service вместо service? 92. Когда использовать workmanager, а когда service? 93. Есть ли у workmanager лимиты для выполнения работы? 94. Расскажите о Jetpack Compose. Зачем придумали основной принцип работы, как устроено? 95. Что такое WakeLock? 96. Что такое AlarmManager? Какие особенности работы?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 4, урок 7), Android Углубленный (урок 6, урок 8), Создание пользовательских элементов управления в Android (урок 9).   Kotlin 97. Чем отличается работа с Exceptions в Kotlin и Java? 98. Что такое платформенные типы? 99. Что такое нелокальный return? 100. Для чего нужны reified generics? 101. Какая разница между Unit, Any, Nothing? 102. Расскажите о функциях высшего порядка, лямбда, функциях, которые могут использоваться в качестве аргумента. 103. Что такое inline-модификатор? Noinline? 104. Какая разница между crossinline и noinline? 105. Какие типы конструкторов вы знаете? 106. Что такое Flow? Что такое SharedFlow? 107. В чем разница методов run, let, apply, also, with, use? 108. Что произойдет, если в классе переопределить метод hashCode следующим образом: override fun hashCode(): Int = Random.nextInt()? А если так: override fun hashCode(): Int = 1? 109. Расскажите о Flow. В чем разница между Hot и Cold Flow? 110. Что такое деструктурирующее объявление? Что нужно сделать, чтобы иметь возможность использовать его для своего класса? Какие проблемы могут возникнуть с таким объявлением? 111. Для чего использовать data class? Почему нельзя работать с обычным классом? 112. Приведите пример делегатов в Kotlin? 113. Как реализовать кастомный делегат? 114. Объясните, как работает suspen-функция? Что такое continuation? 115. Как обрабатывать ошибки в Coroutines? 116. Что такое SupervisorJob и когда применяется? 117. Как остановить/отменить Coroutines?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.   RxJava 118. В чем разница между flatMap(), concatMap(), switchMap()? 119. Какие Subjects вы знаете в RxJava, чем отличаются от Observable? 120. Чем отличается Observable от Flowable? 121. Что такое backpreassure? Какие стратегии есть для решения? 122. Что такое Single, Maybe, Completable? 123. Какие варианты обработки ошибок есть, кроме onError?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).   Тестирование 124. На какие группы можно поделить тесты (Unit (JUnit) и Instrumental или UI Tests (espresso))? 125. Чем отличаются Unit и UI тесты (контекст)? 126. Расскажите, какие библиотеки использовали для mock? 127. Как тестировать DB? 128. Как “замокать” network layer в инструментальных тестах?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Unit тестирование для Android разработчиков.   Другое 129. Расскажите, с какими DI-фреймворками работали. 130. Расскажите о Dagger Hilt.   Senior   Базовые вопросы 1. Расскажите о функциях высшего порядка. Когда они нужны? 2. Опишите, как происходит процесс деплоя Android-приложения. 3. Расскажите о многомодульной архитектуре. Зачем используют и когда ее нет смысла использовать? 4. Вам нужно написать простое приложение для работы с рецептами (несложное, имеет экран списка, поиска и детали). Оно должно работать с определенным API для получения/модификации вашего списка рецептов и хранить его локально в БД для отображения, если интернета нет. Опишите, как бы вы создавали приложение такого типа? Из каких уровней оно бы состояло, каково предназначение каждого уровня? Представьте, что в этом приложении необходимо добавить возможность изменять основную картинку рецепта (т. е. получать новые данные из галереи/камеры и загружать их на сервер через API) и это реализовано на экране с подробным описанием рецепта. Вам пришел запрос сделать такой же функционал и на экране список рецептов. Как вы это сделаете?   Архитектура 5. Как организовать CI/CD для Android-проектов? 6. Различия архитектурных подходов в Android. Какие и когда лучше использовать? 7. Как вы понимаете Clean Architecture? 8. Опишите основные отличия между MVC/MVP и MVVM. Как MVVM стал одним из рекомендованных паттернов?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Архитектура Android приложений.   Многопоточность 9. Какие еще знаете механизмы синхронизации данных, кроме synchronized? 10. Что такое переключение контекста (context-switching), когда речь идет о многопоточности? 11. Что мы понимаем, когда говорим о «честной» блокировке (fair lock)?   Java Core 12. Если бы пришлось имплементировать иммутабельный класс на Java, как бы вы это сделали? 13. Что такое Java Memory Model? 14. Сравните принципы композиции и наследования (Composition vs Inheritance).   Android SDK 15. ViewModel сохраняет свое состояние при повороте экрана? Как это возможно? Можете ли предложить, как сделать такой механизм? 16. Android Architecture Components. Что из этого приходилось применять на практике? Какие задачи решали? 17. Приходилось ли исследовать «утечки» памяти? Какие инструменты использовали для этого? 18. Представьте, что у вас есть экран со списком товаров. Во время скроллинга вы замечаете, что рендеринг не плавный, в логах много фреймов скипается и вообще-то экран тормозит. Что будете делать, чтобы улучшить ситуацию? 19. Если бы была задача написать приложение для интернет-магазина с нуля, какие технологии/подходы выбрали бы? 20. Приведите пример применения GoF-паттернов в Android SDK.   Kotlin 21. Опишите взаимодействие кода Kotlin и Java. 22. Что изменилось в обработке ошибок в Kotlin, если сравнить с Java? 23. Что такое делегированные характеристики (Delegated properties)?   Благодарим за эту статью Виктора Чистякова, Михаила Дьяченко, Влада Тищенко, Александра Романишина, Андрея Люшенка, Дмитрия Пашко, Вячеслава Сергеева, Антона Козленка, Артема Грищука, Евгения Трощия, Романа Белоконя, Константина Красильникова, Сергея Харченка, Андрея Друка, Виктора Косенко.
ТОП-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#, которые следят за новинками данного языка. Автор пройдется по новым возможностям языка и обсудит, как эти изменения могут быть использованы с целью написания более выразительного и чистого кода. Алгоритмы и структуры данных в .NET Автор — Ярослав Кучук, .NET Developer На вебинаре рассматривается вопрос фундаментальной алгоритмической подготовки – от математического обоснования мощности алгоритма до стандартных алгоритмов и структур данных. Базовые алгоритмы реализованы на C#; автор анализирует их с точки зрения их мощности. На вебинаре рассматриваются следующие темы: Понятие алгоритма Сложность алгоритма и способы ее измерения Основные структуры данных Стек Очередь Связанный список Хеш-таблица Бинарные деревья поиска Красно-черные деревья Базовые сортировочные алгоритмы Базовые поисковые алгоритмы 5. Безопасность .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!
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.
Найкращі сайти для пошуку роботи в IT: Україна, Білорусь, Росія

Автор: Влад Сверчков

Здравствуйте, друзья! Все, кто выбирает для себя путь IT-разработки, проходят через традиционную последовательность действий: Выбор конкретной специальности. Определение необходимых к изучению языков и технологий. Непосредственное обучение + практика. Составление портфолио, в котором демонстрируется весь набор знаний и навыков, которым вы обладаете. Поиск работы согласно специальности. Последний, пятый пункт, является не менее важным, чем предыдущие. В наше время поиск работы ведется в основном с помощью сети Интернет. Следовательно, возникает потребность в использовании проверенных веб-сайтов, на которых вас не введут в обман. Также, ресурс должен быть дружелюбным к пользователю, иметь интуитивно понятные механизмы поиска работы и выдавать вам те вакансии, которые вы ищете. Мы подготовили для вас список самых эффективных ресурсов поиска работы в IT секторе, которым можно доверять, и которые при этом удобны в использовании. Информация о каждом сервисе будет структурирована в следующем виде: особенности сервиса; аналитика уровня зарплат определенных специалистов и частота ее обновления; возможность подписки и отслеживания вакансий по определенной категории; наличие дополнительной информации о компаниях, которые размещают вакансии; наличие вакансий для начинающих и стажеров; количество открытых вакансий на текущий момент; контингент работодателей (отечественные/зарубежные); предложения на релокейт; удобство использования сервиса. Этих показателей должно быть достаточно, чтобы по максимуму раскрыть возможности каждого рассматриваемого ресурса. Начнем!   DOU   Профессиональное сообщество разработчиков, запущеное Максимом Ищенко в 2005 году. Один из главных IT-ресурсов Украины, на котором публикуются новости, аналитические статьи и другая информация, связанная с IT индустрией. Также, ДОУ располагает форумом, где любой зарегистрированный пользователь может задать свой вопрос и получить развернутые ответы от множества IT-специалистов. Данный сервис имеет специальный раздел “Работа”, где каждый желающий может просмотреть список опубликованных вакансий как для программистов, так и для нетехнических специалистов, задействованных в IT. Заглавная страница с вакансиями выглядит следующим образом (на рисунке лишь ее часть):     Справа изображено ведущие компании и количество их вакансий (лишь часть компаний):     Перейдя к вакансии, вы увидете типичное описание компании и требования к кандидату. Откликнуться на предложение предлагают через Google, Facebook, GitHub, LinkedIn, Вконтакте, Twitter.     Как можно видеть из рисунка, каких-либо механизмов помощи в создании резюме на ДОУ нет — его оформление полностью и целиком возлагается на плечи соискателя работы. Перейдем к анализу ресурса согласно нашим пунктам. Аналитика уровня зарплат определенных специалистов и частота ее обновления. ДОУ имеет собственный зарплатный виджет, который составляется на основании зарплатного опроса. Результаты опроса публикуются раз в полгода (в декабре и июне-июле)     В виджете указываете город, интересующую вас должность и применяющийся язык программирования (если вакансия связана с программированием), затем имеете возможность наблюдать I квартиль, медиану и III квартиль заработной платы: I квартиль - это значение з/п, ниже которого в упорядоченном по возрастанию массиве находится 25% данных о заработных платах; III квартиль - значение з/п, выше которого в упорядоченном по возрастанию массиве находится 25% данных о заработных платах; медиана - значение з/п, расположенное в середине изучаемого массива, который упорядочен по возрастанию. На вкладке “Динамика” можно наблюдать, как менялись зарплаты по самым популярным направлениям. К примеру, вот такая ситуация наблюдалась у JavaScript:      Вкладка ”По городам” отображает статистику зарплат по всем главным направлениям в крупнейших городах Украины (Киев, Львов, Харьков, Днепр, Одесса).     Последняя вкладка демонстрирует различного рода демографические показатели: пол разработчиков (в процентном соотношении), их возраст, опыт работы, уровень знания английского, город проживания, образование, размер и тип компании.    Также, ДОУ каждый год составляет портрет украинского IT-специалиста, в который входят такие показатели, как: город проживания, пол, опыт работы, профессиональный уровень разработчиков, количество компаний, в которых работали, причины выбора IT-специальности, самое важное при выборе работы, удовлетворенность зарплатой, оформление трудоустройства и другие показатели. Если вам интересно, можете ознакомиться с портретом украинского IT-специалиста за 2020 год. Дополнительная информация о компаниях, которые размещают вакансии. У каждой вакансии помечена компания-работодатель, нажав на иконку которой можно перейти на профиль этой компании на ДОУ и ознакомиться с ним. Таким образом вы без проблем можете просмотреть рейтинг этой компании (он есть не у всех), прочесть информацию о работодателе, просмотреть фотографии сотрудников, узнать расположение офиса, контактные данные и отзывы других людей о данном месте работы.  Возможность подписки на рассылку вакансий. Отсутствует, однако частично реализуется при помощи телеграм-канала “Junior дайджест dou.ua”, речь о котором пойдет ниже. Наличие вакансий для начинающих и стажеров. Сервис DOU располагает специальным разделом “Первая работа”, который находится на странице “Работа” в соответствующей вкладке. Он обновляется каждый месяц и содержит список актуальных курсов и вакансий для новичков, а также стажировки. Во внимание принимаются все крупные города Украины. Имеется в наличии и специальный телеграм-канал, который помогает следить за новинками на ресурсе.     Количество открытых вакансий. На момент написания статьи на сайте ДОУ размещено более 7000 вакансий. Карантинные меры довольно ощутимо ударили по количеству предложений от работодателей в 2020, но сейчас количество предложений не то что достигло уровня начала 2020-го года, а даже перепрыгнуло его. Контингент работодателей. Точной информации нет, однако подавляющее большинство работодателей из Украины. Также присутствуют и иностранные компании. Предложения на релокейт. На странице вакансий в ДОУ в самом верху можно найти фильтр быстрого перехода “Работа за рубежом”. Удобство использования сервиса. В целом, данный ресурс достаточно информативен и комфортен в использовании. Полноценный сервис, на котором украинский разработчик может найти практически все необходимое: различные статьи, портрет и зарплаты разработчиков, вакансии, опросы, рейтинги IT-компаний и многое другое. Можно создать свою тему и узнать мнение других разработчиков касательно какого-либо вопроса. При первых посещениях сайта разбегаются глаза от его насыщенности информацией, однако, со временем к этому привыкаешь и начинаешь быстро находить искомое.   Djinni     Djinni (он же “Джинни”, “Джинн”) - ресурс, позиционирующий себя как сервис анонимного поиска работы для программистов, тестировщиков, UI/UX дизайнеров, специалистов DevOps, PM-ов и всех тех, кто работает в сфере IT. Был запущен в 2012 году в качестве части ресурса dou.ua, однако затем обрел собственный домен. Как Джинн работает. Соискатель размещает заявку на сайте, не раскрывая при этом своей личности. В ней указываются такие параметры, как: категория (специализация), имеющийся опыт работы, зарплатные ожидания, желаемая должность, уровень владения английским языком, варианты занятости, города для поиска работы, ключевые слова для рекрутера. После заполнения и публикации профиля просто ждёте, пока на вас выйдет работодатель. Получается эдакий поиск работы наоборот — ищете не вы, а вас. Однако, рекрутеры также могут размещать вакансии, на которые вы вольны отзываться, не раскрывая своей личности. Сам соискатель ничего никому не платит, в то время, как работодатель в случае успешного найма обязан заплатить 25% от месячной зарплаты кандидата, по факту выхода на работу. Оплата не требуется лишь в том случае, если на работу принимается специалист уровня Junior. Аналитика уровня зарплат определенных специалистов и частота ее обновления. Джинн располагает собственным виджетом зарплат, который собирает необходимую статистику автоматически путем подсчета, сколько предложений получил кандидат и на какую зарплату. К примеру, если FrontEnd разработчик в Киеве с з/п $2500 получил 10 предложений, то он будет посчитан 10 раз. Если предложений не было, то и в статистику он не попадет. Сама статистика обновляется раз в сутки и наочно демонстрирует динамику рынка.     Рассмотрим рисунок выше (с изображением статистики по .NET разработке). Над каждым столбиком диаграммы показано общее количество предложений. Это не количество вакансий, а показатель уровня спроса. Чем больше предложений, тем больше компаний пытаются нанять такого специалиста. На диаграмме приведены данные за последние 6 месяцев активности на Джинни. Сам виджет имеет несколько фильтров: город, категория (специализация), опыт работы и уровень знания английского, что позволяет настраивать и просматривать статистику согласно личным предпочтениям. Также данный сервис способен отправлять вам на почту статистику по выбранной специальности и городу — так называемая зарплатная рассылка. Это позволит быть в курсе з/п в IT и понимать, во сколько примерно оценивается специалист из той или иной области. Дополнительная информация о компаниях, которые размещают вакансии. Сам Джинн не размещает дополнительную информацию о работодателях, однако в предложенных рекрутерами вакансиях зачастую можно отыскать ссылки на веб-сайты компаний.  Возможность подписки на рассылку вакансий. Раз в месяц Джинн присылает статистику зарплат и наймов по выбранной вами технологии и городу. Наличие вакансий для начинающих и для стажеров. Вакансии для начинающих имеются в небольшом количестве. Однако на Джинне новичкам будет тяжело. Таких людей очень много, а рекрутеры редко ищут неопытных разработчиков, поэтому надо составить хороший профиль, быть активным и откликаться на вакансии самостоятельно.  Чтобы не быть голословными, вот пример хорошо составленных профилей:     Количество открытых вакансий. На момент написания статьи на сайте Djinni размещено 14 417 вакансий. Контингент работодателей. Согласно данным 2017-го года, примерно 80% работодателей — украинские компании, остальные 20% — зарубежные (Европа, США). Предложения на релокейт. Джинн имеет телеграм-канал Трактор на Джинне, который специализируется на поиске relocate-вакансий, предусматривающих переезд в другую страну. На данный момент канал заморожен, а вместо него запущен бот для подписки на вакансии. С его помощью можно получать уведомления о подписках и новых сообщениях на Джинне, создавать подписки на вакансии, изучать статистику вакансий и зарплат. Удобство использования сервиса. Djinni — достаточно комфортный сервис, который имеет приятный современный интерфейс, лишенный ненужных деталей. Также в наличии удобная система фильтров, позволяющая определять зарплатную статистику и предложения от работодателей эффективно и быстро. Главная особенность Джинна — анонимность, что дает возможность искать работу не беспокоясь о раскрытии вашей личности, если вы в этом нуждаетесь. Несмотря на то, что главный акцент данный ресурс ставит именно на соискателей работы и их комфорт, он также будет полезен и работодателям. Дополнительно можете ознакомиться с бесплатным вебинаром “Джинн - сервис анонимного поиска работы для программистов”, в котором участвует сам создатель платформы Djinni — Максим Ищенко.   LinkedIn     Социальная сеть для делового общения, которая ориентирована на поиск сотрудников и вакансий. На данный момент в ней зарегистрировано более 645 млн пользователей из разных уголков планеты. Основные функции LinkedIn заключены в следующем: поиск контактов (знакомые, коллеги, рекрутеры, HR-ы, интересующие вас личности и т. д.) и установление с ними связи (расширение своей сети); отслеживание новостей по вашим интересам путем использования хештегов; непосредственный поиск работы; отслеживание вакансий путем подписки на интересующие вас компании; гибкое управление системой настроек различных уведомлений; публикация информации о деловых поездках, предстоящих профессиональных мероприятиях и другого профессионального контента; получение подтверждения ваших профессиональных навыков вашими коллегами; общение с другими пользователями сети; настройка собственного профиля, где указывается ваш карьерный путь, места обучения, профессиональные достижения и т. д.; возможность генерировать резюме на основании вашего профиля.   Аналитика уровня зарплат определенных специалистов и частота ее обновления. LinkedIn запустил собственную службу под названием LinkedIn Salaries. На данный момент она работает лишь для США, поэтому вы сможете посмотреть только американские зарплаты.  Дополнительная информация о компаниях, которые размещают вакансии. Данная социальная сеть, подобно сети Facebook, имеет странички компаний, на которых публикуются различные мероприятия, фотографии и новости. Возможность подписки на рассылку вакансий. Отслеживание вакансий возможно путем подписки на интересующие вас компании, а также при помощи хэштегов (#dotnet, #backend и т. д.). Наличие вакансий для начинающих и для стажеров. LinkedIn на странице поиска вакансий имеет фильтр “Должностной уровень”, в нем - опцию “Стажер”. После ее выбора вы сможете просматривать все вакансии, предусматривающие стажировку.  Количество открытых вакансий. На момент написания статьи количество открытых вакансий - более 12 млн. Количество открытых вакансий в регионе Украина — 155 301, Республика Беларусь — 34 329, регион Россия — 21 504, Казахстан — 12 974. Контингент работодателей. LinkedIn имеет многонациональное сообщество, которое включает в себя пользователей из 200 государств. Соответственно, работодателей можно найти практически в любой стране, где пользуется спросом данный ресурс. Предложения на релокейт. Поскольку данная социальная сеть с огромным мультинациональным сообществом, она в естественном порядке содержит вакансии, предусматривающие смену места проживания. Однако совершать поиск таких предложений необходимо вручную. Удобство использования сервиса. Несмотря на свою многофункциональность и обилие различных инструментов, LinkedIn все очень компактно совмещает и предоставляет солидный, а также удобный интерфейс. Каких-либо недостатков замечено не было. LinkedIn имеет все, что только может пожелать IT-разработчик, ищущий работу. Единственный нюанс — необходимо знание английского языка — сеть-то интернациональная. Также, существует мобильное приложение под Android и iOS, которое позволяет оперативно использовать LinkedIn с вашего гаджета. Напоследок козырь в рукаве этой соцсети: если вы программист уровня Middle+ и имеете более 400 контактов, можете забыть о других сайтах поиска работы, ведь вы не останетесь без внимания рекрутеров.   HeadHunter (Россия) / GRC (Украина)     HeadHunter (HH) — международный кадровый портал, разработанный в России в 2000 году. Несколько лет спустя было открыто украинское представительство компании. В 2019 году в связи с трансформацией бренда было принято решение о переименовании украинского сегмента ресурса на GRC (grc.ua). Согласно заявлениям владельцев, отличительной чертой GRC является то, что он создан усилиями профессионалов по подбору персонала. Также, ресурс дает возможность создать детализированное резюме при помощи специально разработанной формы. На самом деле по своему внешнему виду, функционалу и возможностям HH и GRC почти идентичны. Поэтому здесь мы будем говорить об обоих ресурсах сразу. Если они будут иметь какие-то различия, сделаем на этом акцент. Аналитика уровня зарплат определенных специалистов и частота ее обновления.  Отсутствует. Дополнительная информация о компаниях, которые размещают вакансии. Подобно ДОУ, данные ресурсы имеют странички компаний, публикующих вакансии. Перейдя по ссылке, можно прочесть краткую информацию о компании, а также подписаться на нее, тем самым постоянно отслеживая новые предложения от выбранного работодателя. Возможность подписки на рассылку вакансий. GRC и HH обладают такой возможностью. Для того чтобы получать по email-у новые вакансии, необходимо авторизоваться на сайте под своим логином и паролем. С помощью функции «Автопоиск» при поиске вакансий можно сохранять параметры запроса, а затем ежедневно отслеживать интересующие вакансии. Также можно подписаться на обновление предложений определенной компании, которая вас интересует. Наличие вакансий для начинающих и для стажеров. Ресурсы имеют фильтр “Нет опыта”, который выбирает для соискателя только те предложения, которые ориентированы на новичков с определенным уровнем знаний, но не имеющих опыта работы.  Количество открытых вакансий. HeadHunter. На момент написания статьи было отмечено 821 657 открытых вакансий. При этом количество оставленных резюме — 49 097 833. GRC. На момент написания статьи — 8201 открытая вакансия. При этом количество оставленных резюме — 1 594 886. Контингент работодателей. Если рассмотреть оба ресурса в совокупности, то наибольшее количество вакансий исходит из России. На втором месте по численности идет Украина и страны СНГ. За ними — множество стран из Азии, Африки, Южной и Северной Америки, Европы, однако количество их вакансий очень мало. Предложения на релокейт. GRC и HH не имеют специального фильтра для нахождения вакансий, предусматривающих смену жительства. Однако, можно выполнять фильтрацию по интересующим вас странам/областям/городам. Удобство использования сервиса. HH и GRC имеют приятный интерфейс и удобную систему поиска вакансий. Помимо айтишных там можно найти и множество других вакансий, что дает ресурсам большей универсальности и массовости.   Work.ua     Work.ua — один из лучших украинских ресурсов для поиска работы, который был запущен еще в 2006 году. В 2013 году была разработана удобная мобильная версия сервиса. Свою цель создатели Work.ua обозначают следующим образом: “Предоставлять самый лучших сервис поиска работы, чтобы помогать людям быть счастливее и развивать Украину ”. Ресурс содержит вакансии, ориентированные на широкий круг соискателей. Также на сайте публикуются новости рынка труда и небольшие информативные статьи — как аналитические, так и те, что носят рекомендательный характер. Новоприбывшему на Work.ua очень пригодится гайд по использованию сервиса, хотя и сам по себе сервис интуитивно понятен. Аналитика уровня зарплат определенных специалистов и частота ее обновления.  Данный сервис имеет собственную аналитику уровня зарплат по городам и профессиям. К примеру, по запросу “программист” вы можете увидеть следующую статистику:     Также, можно просмотреть среднюю зарплату, исходя из выбранной специальности:     Ознакомиться с более подробной статистикой можно здесь. Дополнительная информация о компаниях, которые размещают вакансии. Практически каждая вакансия закреплена за определенной компанией. Нажав на логотип компании, вы попадаете на небольшую страничку внутри сервиса Work.ua, которая содержит краткое описание работодателя, количество сотрудников, сферу предоставления услуг, контактные данные, ссылку на сайт компании и список вакансий. Возможность подписки на рассылку вакансий. Work.ua предоставляет рассылку вакансий на почту, а также в Telegram (бот @jobs_workua_bot). Обе достаточно удобны и информативны. К примеру, в телеграме вы получаете регулярные сообщения с новыми вакансиями, которые включают название должности, компанию-работодателя, город, зарплату (если такова заявлена) и ссылку на само предложение. Наличие вакансий для начинающих и для стажеров. На Work.ua есть специальный фильтр “Без опыта”, который выводит только те вакансии, которые ориентированы на новичков и стажеров. Также есть специальный раздел “Для студентов”, что может помочь найти подработку либо полноценную работу учащимся в вузе (даже с возможностью смены места проживания!).    Количество открытых вакансий. На момент написания статьи было отмечено 47 576 открытых вакансий. Также, согласно статистике сайта, его посещают 450 тыс. человек в день, он имеет 2.8 млн резюме и 100 тыс. работодателей. Контингент работодателей. Среди опубликованных 47 576 вакансий 926 ориентированы на работу за рубежом (в основном это Польша, Чехия, Словакия, Германия, балтийские страны и другие европейские государства). Предложения на релокейт. Некоторые вакансии из раздела “Работа в других странах” предусматривают смену места жительства, однако поиск таких предложений необходимо осуществлять вручную, ведь множество вакансий могут просто предлагать удаленную работу. Удобство использования сервиса. Work.ua имеет хороший дизайн в синих и голубых тонах. Он сразу дает понять, что здесь все заточено под пользователя. Использовать сервис приятно и удобно — ничто не вызывает диссонанса, как и в мобильной версии. Ресурс имеет гибкую систему поиска, которая предусматривает поиск вакансий по: категориям, городам, компаниям, должностям. Естественно, присутствует и расширенный поиск (фильтрация по опыту, категории, виду занятости, наличия инвалидности и т. д.). Work.ua подходит всем, кто ищет работу - как айтишникам, так и другим соискателям. В целом — хороший сервис для поиска работы с новостями, статьями, аналитикой и рассылкой вакансий на email и Telegram.   Хабр Карьера     Проект известного в СНГ сервиса под названием Хабр. Будучи запущенным в 2017 году, сегодня Хабр Карьера находится в фазе активного развития. Достаточно удобный ресурс, который позволяет находить как вакансии соискателям, так и специалистов работодателям. Аналитика уровня зарплат определенных специалистов и частота ее обновления. Аналитика присутствует во вкладке “Зарплаты”. Однако, она не позволяет произвести сегментацию по конкретным профессиям, а подается в виде среднего показателя по всем IТ специализациям за первое или второе полугодие, начиная со второго полугодия 2017 года.     Также присутствует опция “Диаграммы зарплат”. Как заявляют создатели, это инструмент для работы со статистикой по всем зарплатам в IT, которые были накоплены с момента запуска зарплатного калькулятора на Хабр Карьере. Здесь вы найдете готовые отчеты по основным IT-специализациям, квалификациям, языкам программирования и группам городов. Данные можно смотреть отдельно по полугодиям и в динамике с 2017 года. Единственный нюанс — просматривать диаграммы зарплат могут только зарегистрированные пользователи с созданным профилем компании, у которых есть размещенная вакансия или приобретен доступ к базе резюме. Дополнительная информация о компаниях, которые размещают вакансии. Сервис в удобной форме предоставляет всю важную информацию. Таким образом, вы можете узнать рейтинг компании на Хабр Карьера, просмотреть открытые и архивные вакансии, изучить информацию о сотрудниках компании, узнать о подписчиках и тех, кто хочет работать в данной компании, расположение офисов, контакты, полезные ссылки и общую информацию о компании. Возможность подписки на рассылку вакансий. Вы можете подписаться на интересующие вас компании и следить за их новостями. Также, есть возможность получать вакансии на почту в соответствии с заданным вами фильтром. Наличие вакансий для начинающих и для стажеров. Сервис имеет специальный фильтр “Квалификация” во вкладке “Вакансии” — для начинающих как раз подойдут пункты “Intern” и “Junior”.   Количество открытых вакансий. На момент написания статьи было зафиксировано 2022 размещенные вакансии. Контингент работодателей. В подавляющем большинстве работодатели из России. Также, есть небольшая украинская и белорусская диаспора. Предложения на релокейт. Имеются, но такие вакансии необходимо искать вручную. Удобство использования сервиса. Сервис очень удобен и приятен в использовании. Пользовательский интерфейс располагает всей необходимой информацией как для работодателя, так и для соискателя работы. Ничто не подвисает, любой фильтр обрабатывается достаточно быстро. Заметно, что создатели сервиса проделали хорошую работу для предоставления максимального комфорта своим юзерам.   dev.by   Сервис для белорусских айтишников, который является своеобразным братом украинского DOU. Является важным сервисом Беларуси, на котором распространяются новости, ведутся корпоративные блоги, публикуются вакансии, собирается аналитика зарплат в отечественном IT, а также предоставляется другая информация, связанная с данным сектором. Во вкладке “Зарплаты” заявляется, что на jobs.dev.by 1732 компании, 132 123 пользователя и 586 вакансий. Аналитика уровня зарплат определенных специалистов и частота ее обновления. На уже упомянутой вкладке “Зарплаты” присутствует хорошая аналитика зарплат со множеством фильтров: можно указать должность, промежуток времени, опыт работы, город, используемые в работе технологии и языки программирования. Согласно заданным критериям вы и получите информацию о заработной плате.     К примеру, выборка с критериями “2020 год”, “Software Engineer”, “Опыт от 3 до 7 лет”, “Минск” выдала такой результирующий график:   Также, вы можете просмотреть средний показатель зарплаты в IT практически за любой интересующий вас месяц. Дополнительная информация о компаниях, которые размещают вакансии. Компании имеют свои собственные “странички” на jobs.dev.by, где вы можете узнать такую информацию, как: общие сведения о компании, ее рейтинг согласно определенным параметрам, кол-во сотрудников и их отзывы, год основания компании, просмотреть фотогалерею (если работодатель размещал фото), контактные данные, официальные представители (со ссылками на их аккаунты), адрес, компании-соседи.  Возможность подписки на рассылку вакансий. Такая возможность присутствует. Вы можете описать свой опыт, ожидания от работы, пожелания по зарплате, а затем получать подходящие предложения и вакансии на электронную почту.   Наличие вакансий для начинающих и для стажеров. Сервис имеет фильтр “Junior”, который производит выборку вакансий, подходящих для потенциальных интернов и джунов. Количество открытых вакансий. На момент написания статьи было зафиксировано 586 размещенных вакансии. Контингент работодателей. В подавляющем большинстве работодатели из Беларуси. Предложения на релокейт. Необходимо искать вручную. Также, можно указать этот пункт в качестве пожелания во время оформления подписки на рассылку вакансий. Удобство использования сервиса. Сервис достаточно удобен, помимо вакансий и зарплатной аналитики предлагает различные новости и истории от разработчиков Беларуси. Интерфейс понятен, хотя и содержит много информации. Однако, к нему очень быстро привыкаешь и в краткие сроки начинаешь отлично в нем ориентироваться.   Заключение   В данной статье были рассмотрены самые лучшие ресурсы для поиска работы в IT в Украине, Беларуси, Россие. Затрагивались как локальные сервисы, так и один интернациональный. Мы постарались пройтись по всем самым важным пунктам и показать, насколько удобен и функционален тот или иной job-ресурс. Если вы опытный разработчик, то регистрируйтесь на LinkedIn, заполняйте профиль, расширяйте свою сеть общения и ждите предложений от рекрутеров. Если же вы новичок, то вам не помешает искать работу на всех отечественных ресурсах сразу, ведь кандидатов без опыта много, и каждый хочет свое место под солнцем. Надеемся, статья была полезной для вас. Пишите в комментариях свое мнение и задавайте интересующие вас вопросы!   Желаем вам здоровья и успехов! Оставайтесь с ITVDN!
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?   Благодарим за помощь в подготовке статьи Вячеславу Колдовскому, Ивану Рыженку, Николаю Галкину, Александру Бурмистрову, Владу Балабашу, Андрею Шумаде, Ивану Кувацкому, Андрею Кладочному.
100+ питань з Python для Junior, Middle та Senior

Автор: Редакция ITVDN

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 30 сентября 2020 года. Оригинальная версия на украинском языке доступна по ссылке. Редакция DOU пообщалась с разработчиками, которые проводят технические собеседования Python-специалистов для различных уровней, и собрала примерный список вопросов к кандидатам. Конечно, он не является исчерпывающим, однако содержит типичные вопросы.   Вопросы для Junior   От джуниоров требуют знать и уметь применять базовые структуры данных и модули, простейшие запросы к базам данных, знать простейшие команды системы контроля версий и тому подобное. Общее по Computer Science и Web Development: 1. Что такое инженерия и процесс разработки в целом? 2. Какие знаете принципы программирования? 3. Чем отличаются процедурная и объектов-ориентированная парадигмы программирования? 4. Какие основные принципы ООП (наследование, инкапсуляция, полиморфизм)? 5. Что такое множественное наследование? 6. Какие есть шесть этапов разработки продукта в Software Development lifecycle и какая разница между Agile и Kanban? 7. Какие есть методы HTTP-запросов и какая между ними разница? 8. Как выглядят HTTP-request / response? 9. Что такое авторизация и как она работает? 10. Что такое cookies? 11. Что такое веб уязвимость? 12. Какие знаете классические базы данных? 13. Как читать спецификацию в конкретном языке (например, PEP8 в Python)? 14. Как происходит взаимодействие клиента и сервера? 15. Какие есть подходы к проектированию API? 16. Как использовать паттерны программирования? 17. Что такое Acceptance Testing и зачем его используют? 18. Что такое модульные и интеграционные тесты, API-тесты? 19. Как писать unit-тесты? 20. Какие есть best practices в написании автотестов? 21. Какие базовые команды системы контроля версий? 22. Как использовать Git? 23. В чем разница между хешированием и шифрованием? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Python Базовый, Python Углублённый, Основы работы с Git.   Python: 24. Python - интерпретируемый язык или компилируемый? 25. Какие есть меняющиеся и постоянные типы данных? 26. Что такое область видимости переменных? 27. Что такое introspection? 28. Разница между is и ==? 29. Разница между __init __ () и __new __ ()? 30. В чем разница между потоками и процессами? 31. Какие есть виды импорта? 32. Что такое класс, итератор, генератор? 33. Что такое метакласс, переменная цикла? 34. В чем разница между итераторами и генераторами? 35. В чем разница между staticmethod и classmethod? 36. Как работают декораторы, контекстные менеджеры? 37. Как работают dict comprehension, list comprehension и set comprehension? 38. Можно ли использовать несколько декораторов для одной функции? 39. Можно ли создать декоратор из класса? 40. Какие есть основные популярные пакеты (requests, pytest, etc)? 41. Что такое lambda-функции? 42. Что означает *args, **kwargs и как они используются? 43. Что такое exceptions, <try-except>? 44. Что такое PEP (Python Enhancement Proposal), какие из них знаете (PEP 8, PEP 484)? 45. Напишите hello-world сервис, используя один из фреймворков. 46. Какие есть типы данных и какая разница между list и tuple, зачем они? 47. Как использовать встроенные коллекции (list, set, dictionary)? 48. В чем заключается сложность доступа к элементам dict? 49. Как создается объект в Python, для чего __new__, зачем __init__? 50. Что знаете из модуля collections, какими еще built-in модулями пользовались? 51. Что такое шаблонизатор и как в нем выполнять базовые операции (объединять участки шаблона, выводить дату, выводить данные с серверной стороны)? 52. Как Python работает с HTTP-сервером? 53. Что происходит, когда создается виртуальная среда? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Python Стартовый (урок 2, урок 4-8), Python Базовый (урок 1, урок 6, урок 7, урок 9), Python Углублённый (урок 1, урок 4).   Базы данных: 54. Какие есть базовые методы работы с SQL- базой данных в Python? 55. Что такое SQL-транзакция? 56. Как сделать выборку из SQL-базы с простой агрегацией? 57. Как выглядит запрос, который выполняет JOIN между таблицами и к самим себе? 58. Как отправлять запросы в SQL-базу данных без ORM? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.   Алгоритмы: 59. Что такое алгоритмы (например, Big-O notation)? 60. Какие есть базовые алгоритмы сортировки? 61. Что такое Bubble Sort и как это работает? 62. Что такое линейная сложность сортировки?   Вопросы для Middle   Если джуниору все надо подсказывать и помогать, то мидл может самостоятельно взять что-то новое и быстро его изучить и понять. У него накоплено достаточно знаний и опыта, чтобы быстро овладевать новым. Он может прийти и обсудить с опытным разработчиком, проконсультироваться, но окончательных решений не принимает. Обычно у мидлов спрашивают: 63. Ориентируетесь ли в *nix, можете ли написать скрипты/автоматизацию для себя и коллег? 64. Что такое многопоточность? 65. Что такое архитектура веб сервисов? 66. Как работает современное нагруженное веб приложение (нарисовать и обсудить примерную архитектуру, например, Twitter или Instagram)? 67. Что нужно для сайта / сервиса среднего размера (redis \ celery \ кэш \ логирование \ метрики)? 68. Как написать, задеплоить и поддерживать (микро) сервис? 69. Как масштабировать API? 70. Як проводить Code review? 71. Что такое абстрактная фабрика, как ее реализовать и зачем ее применяют? 72. Что такое цикломатическая сложность?   Python: 73. Async Python: как работает, зачем, что под капотом? 74. Сравнить асинхронные web-фреймворки. 75. Что такое модель памяти Python? 76. Что такое SQLAlchemy (Core и ORM частей) и какие есть альтернативы? 77. Принципы работы и механизм Garbage collection, reference counting? 78. Как работает thread locals? 79. Что такое _slots_? 80. Как передаются аргументы функций в Python (by value or reference)? 81. Что такое type annotation? 82. Для чего используют нижние подчеркивания в именах классов? 83. Статические анализаторы: Flake8, Pylint, Radon. Ответы на некоторые из этих вопросов вы можете найти в видео курсе Python Углублённый (урок 3).   Базы данных: 84. Разница между SQL и NoSQL? 85. Как оптимизировать SQL-запросы? 86. Какие есть уровни изоляции транзакций? 87. Какие есть виды индексов? 88. Точечные вопросы по выбору БД, движков БД? 89. Front-end: есть ли опыт работы с «современным» JS (Babel, Webpack, TS, ES)? 90. DevOps: работали ли с Docker-контейнерами, объяснить основные термины K8s (кластер, pod, node, deployment, service), что такое Kibana? 91. Алгоритмы: что такое временная сложность алгоритма (time complexity)? 92. Углубленные знания Linux: как зайти на внешний сервер, работать с пакетами, настроить среду и выполнять операции? 93. Специфично для Data Science: как работать с пакетами для обработки и визуализации данных (NumPy, Pandas и другие)? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.   Вопросы для Senior   На собеседованиях с Senior`ами обычно мало говорят о теоретической стороне технологии, больше обсуждают конкретный опыт разработчика. Поэтому формализованных вопросов здесь нет. Однако, примером могут быть: 94. Что такое @property? 95. Каким образом можно запустить код на Python параллельно? 96. Как работать с stdlib? 97. Какие задачи решали с помощью метаклассов? 98. Что такое дескрипторы? 99. Знания других языков, кроме Python (опыт). 100. Какие технологические особенности реализации распределенных систем? 101. Какие есть низкоуровневые особенности языков и фреймворков? 102. Способы и методы управления памятью.   Бонус. Практические задания   1. Спроектировать клон Instagram. Это сервис, который понятен практически любому кандидату, даже если у него нет аккаунта. На высоком уровне он очень прост: картинки, описания, комментарии. Поэтому что-то минимальное сможет описать и джуниор. Если кандидат претендует на высшие позиции, можно бесконечно копать вглубь, касаясь API, тротлинга запросов, защиты от фрода, построения фидов пользователя и тому подобное. 2. Дано рекурсивное определение чисел Фибоначчи, надо написать функцию, которая реализует это определение. 3. Есть база данных из трех таблиц — стандартная many-to-many схема. Нужно написать запрос, который объединяет три таблицы и возвращает определенный результат. 4. Даем ТЗ какого-то полезного микросервиса (сокращалка url-ов, поиск дубликатов картинок, поиск тегов в текстах) или функции (rate limiter). Просим кандидата рассказать, как бы он его реализовал. Это дает возможность узнать, что привык использовать специалист, насколько глубоко он знает и понимает различные технологии. 5. Написать какой-то несложный декоратор (выводит аргументы функции на экран или, например, измеряет сколько времени выполнялась функция). 6. Junior`у можно предложить реализовать задачу FizzBuzz test. 7. Для Middle+ я люблю давать несложные задачки на рекурсию. Например, есть вложенный список чисел и нужно что-то на нем посчитать (скажем, найти максимум). Также, можно предложить написать аналог deepcopy для конкретной структуры данных (tree, graph). 8. Для Senior - игра «спроектировать за 5 минут...». Это может быть Google, FB, Twitter, высоконагруженный интернет-магазин, сервис поиска, продажи и бронирования билетов, сайт новостей и тому подобное. Такая задача помогает понять, как кандидат решает проблемы, ход его мыслей, умеет ли он отделять главное от второстепенного, понять, какого он типа ( «в глубину» или «в ширину»). 9. Игра «у юзера что-то не работает». На примере спроектированной системы собеседователь придумывает ошибку с «дикими симптомами», которую очень сложно понять, воспроизвести. Но нужно быстро решить проблему. 10. Задание, которое демонстрирует знание и понимание list и dict comprehensions. Looking at the below code, write down the final values of A0, A1, ...An.             A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))             A1 = range(10)             A2 = sorted([i for i in A1 if i in A0])             A3 = sorted([A0[s] for s in A0])             A4 = [i for i in A1 if i in A3]             A5 = {i:i*i for i in A1}             A6 = [[i,i*i] for i in A1]             A7 = [i if i%2 else 0 for i in A1 if 2 < i < 8]             ','.join(str(j**2) for j in range(10)) – what is this object ?   11. Задача, в которой есть три функции, в них выполняются базовые операции (сортировка, фильтрация, поднесение массива к квадрату). Нужно упорядочить эти три функции в порядке возрастания времени, которое уходит на их выполнение. Place the following functions below in order of their efficiency. They all take in a list of numbers between 0 and 1. The list can be quite long. An example input list would be [random.random () for i in range (100000)]. How would you prove that your answer is correct? - profiling? def f1 (lIn):             l1 = sorted (lIn)             l2 = [i for i in l1 if i <0.5]             return [i * i for i in l2] def f2 (lIn):             l1 = [i for i in lIn if i <0.5]             l2 = sorted (l1)             return [i * i for i in l2] def f3 (lIn):             l1 = [i * i for i in lIn]             l2 = sorted (l1)             return [i for i in l1 if i <(0.5 * 0.5)]   То есть, на входе все функции имеют одинаковые данные, на выходе выдают одинаковый результат. Но из-за того, что внутри операции выполняются в разном порядке, время выполнения будет отличаться. Здесь нужно разбираться в алгоритмах и понимать, что происходит с твоими данными в процессе. Эту задачу может решить Junior, а может не решить и Middle. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро.   12. Простые задачи на статистику или логику. Например, определить угол между стрелками часов, которые показывают 8:40. За подготовку материала редакция DOU выражает благодарность Михаилу Кашкину (Founder в Okumy и курсов по Python), Руслану Скире (Python Developer в CodeIT LLC), Бориславу Ларину (Python Developer в Prom.ua), Владимиру Обризану (Director в Design and Test Lab), Виктору Свирскому (Senior Developer в DataArt), Николаю Зорину (CTO в Jiji, проект Genesis), Владимиру Селюху (Team Lead в Prom.ua), Сергею Галабурде (Software Engineer в N-iX), Алексею Чуприкову (Lead Python Engineer в EPAM), Ивану Лучку (TL Data Science Specialist в Boosta), Олегу Новикову, Владимиру Щербинину, Роману Могилатову (Technical Leader в SoftServe), Вадиму Рудю, Натальи Кушнир, Андрею Лейцюсю, Роману Луцю и другим. Перевел на русский язык Владислав Сверчков
150+ питань з .NET для Junior, Middle та Senior

Автор: Редакция ITVDN

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 10 ноября 2020 года. Оригинальная версия на украинском языке доступна по ссылке. На DOU размещено более 450 вакансий для .NET-разработчиков, что свидетельствует о популярности этой технологии. Редакция DOU собрала вопросы, которые .NET-разработчики задают своим коллегам на технических собеседованиях. Готовьтесь на здоровье :) Вопросы для Junior Общее 1. Назовите основные принципы ООП. 2. Что такое наследование, инкапсуляция, абстракция, полиморфизм: приведите примеры (желательно из собственного опыта). От какого класса неявно наследуются все классы в .NET? Разрешено ли множественное наследование в C#? 3. Что такое рекурсия? 4. Что такое лямбда-выражение? 5. Что такое параллельное программирование (многопоточность) и его назначение? Какие классы используются? 6. Что такое JSON? 7. Как вы понимаете REST? 8. Расскажите о SPA concept. 9. Какие GoF-паттерны использовали? 10. Какая разница между GET и POST HTTP методами? 11. Какую проблему решает Docker? Каковы его плюсы и минусы? 12. Чем принципиально отличаются unit-тесты от интеграционных тестов?   Обработка исключений 13. Что такое Exception? 14. Для чего служат try, catch, finally? В каком случае может не выполниться блок finally? 15. Что такое call stack? Какие ключевые слова вы знаете?   Платформа .NET 16. Что такое ASP.NET? 17. Какие существуют типы Action filters? 18. Что такое Web Service? 19. Что такое CLR? 20. Что такое сборщик мусора (Garbage Collector) на базовом уровне? 21. Что такое делегат? 22. Отличается ли Delegate от Action? 23. Что такое LINQ и для чего используется? Приведите несколько примеров применения LINQ. 24. Что такое пространство имен (namespace) и зачем это нужно?   Типы данных, коллекции и структуры данных 25. Какие типы данных вы знаете? 26. Какие примитивные типы знаете? 27. Что такое Nullable-тип? 28. Что такое тип значения, а что такое тип ссылки? Что из этого class, а что struct? В каком участке памяти они хранятся? 29. Чем отличаются value от reference type? String - это reference или value? 30.В чем отличие между string builder и string? 31. Что такое дженерики? Какие проблемы они решают? 32. Что такое boxing / unboxing? 33. Что такое Array, List, HashSet, Dictionary? Приведите примеры использования этих структур данных. Какая сложность операций с ними (поиск, вставка, удаление)? 34. Какие знаете коллекции? 35. Что делает оператор yield?   Классы, структуры и интерфейсы 36. Что такое класс? 37. Чем отличается класс от абстрактного класса? 38. Чем отличается абстрактный класс от интерфейса? Для чего нужны интерфейсы и какие задачи они выполняют? 39. Какие вы знаете модификаторы доступа? 40. В чем разница между обычным классом и статическим? 41. В чем разница переопределения метода между ключевыми словами new и override? 42. Какое различие между const и read only? 43. Разница между структурой и классом. Приведите примеры структур. 44. Может ли экземпляр структуры храниться в куче (heap)? Как это сделать?   Асинхронность 45. Что такое асинхронность и чем она отличается от многопоточности? 46. Какие есть ключевые слова для использования асинхронности в коде? 47. Что означают ключевые слова async / await?   Базы данных 48. Разница между реляционными и нереляционными базами, плюсы и минусы использования обоих вариантов. 49. Что такое индексы в RDBMS? 50. Какие типы JOIN существуют в SQL?   Тестирование 51. Для чего нужны unit-тесты? 52. Какие преимущества и недостатки использования unit-тестов? 53. Из каких трех логических блоков состоит unit-тест?   Вопросы для Middle   Общее 54. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время на HTTP-уровне? 55. Как работает HTTPS? 56. Как вы понимаете SOLID? 57. Какие протоколы сериализации вы знаете и где они применяются? 58. Что такое в вашем понимании чистая функция? Какие у нее преимущества? 59. Что такое dependency injection и зачем оно нужно? 60. Что такое cohesion и coupling (связанность и связность)? 61. Что такое IaaS, PaaS, SaaS и каковы различия между ними? 62. Какие способы отладки программы вы используете? 63. Какие знаете паттерны? Объясните суть перечисленных. 64. В чем суть паттерна Singleton? Почему его еще называют антипаттерном? 65. Для чего нужен паттерн Strategy? 66. Какие ключевые различия между распределенными системами и монолитными? 67. Какие паттерны проектирования распределенных систем вы знаете? 68. Какие есть принципы работы Message bus? Почему могут возникать дубликаты в очередях? 69. Какие принципы построения идемпотентных сервисов знаете? 70. Расскажите, как работают асинхронные методы? Чем асинхронность отличается от параллелизма?   Платформа .NET 71. Какие исключения нельзя остановить в блоке catch? 72. Какая разница между .NET Standard Class Library и .NET Core Class Library? 73. Объясните разницу между отложенным и немедленным исполнением в LINQ. Приведите примеры. 74. Для чего нужен метод ConfigureServices в Startup.cs? 75. Какая разница между services.AddTransient и services.AddScope в ASP.NET Core? 76. Что такое Kestrel? 77. Опишите ASP.NET MVC request pipeline. 78. Как в ASP.NET WebAPI настроить кэширование ответов на HTTP-запросы?   Управление памятью 79. Что такое куча и стек? Различия, принцип работы. 80. Как работает сборщик мусора? 81. Зачем нам зарезервированное слово using в C#, если в .NET есть автоматическое управление памятью? Как с этим связан disposable-паттерн и зачем такой сложный паттерн для managed и unmanaged ресурсов? 82. Какие особенности работы с Large Object Heap?   Типы данных, коллекции и структуры данных 83. Когда генерируется дженерик-класс конкретного типа - при выполнении программы или во время компиляции? 84. Что такое рефлексия? 85. Расскажите о коллекции LinkedList <T>. Чем она отличается от других коллекций? 86. Что такое индексатор? 87. Что такое immutable object? Какие преимущества дает использование immutable object? Предложите способ реализации его в .NET. 88. Когда использовать StringBuilder, а когда string? Как работает StringBuilder? 89. Что такое балансирование деревьев? 90. Что такое Key-value структуры? 100. Что такое хэш-функция и зачем нужны хэш-таблицы? 101. Какими свойствами должна обладать идеальная хеш-функция? 102. Что такое коллизии и как с ними бороться? 103. В чем заключается сложность CRUD-операций в Dictionary <K, V> в .NET? 104. Где хранятся массивы? Массивы примитивных типов? 105. В чем отличие между массивом (T [ ]) и списком (List <T>)? 106. В чем разница между IList <T> и IEnumerable <T>? 107. Зачем нужны Enumerable, Observable, AsyncEnumerable и какие модели получения данных они реализуют? 108. В чем разница между IEnumerable и IQueryable? 109. Что такое enum flags?   Базы данных 110. Расскажите о нормальных формах в СУБД. 111. Что такое индекс в БД? 112. Когда следует использовать индексы? Преимущества и недостатки. 113. Какие типы индексов существуют? Чем они отличаются? 114. Что такое ACID? 115. Какие вы знаете уровни изоляции транзакций? 116. Что такое план выполнения запроса (execution plan) в MS SQL? 117. Проблема: запрос долго выполняется. Какие есть методы ее диагностики и решения? 118. Как ORM (Entity Framework или Entity Framework Core) транслируют C# код в язык запросов базы данных? Что для этого используется?   Параллелизм 119. Для чего использовать Task.ConfigureAwait? 120. Например, есть веб-сервер, который по HTTP-запросу делает выборку из базы данных. Всего на сервере 16 тредов (threads). Каждый HTTP-request выполняет запрос в базу и ожидает результатов, в этом случае тред блокируется. Можно ли оптимизировать эту работу средствами .NET? 121. Зачем нужен ThreadPool? Опишите механику работы: как поток выделяется и возвращается обратно в ThreadPool.   Вопросы для Senior   Общее 122. Какие ещё практики, кроме ООП, использовали (AOP, FP и т. д.)? 123. Назовите три самые сложные проблемы, которые вам приходилось решать. Как вы это сделали, как пришли к этому решению? 124. Что такое слабосвязанный код? Чем он лучше сильносвязанного кода? Как бы вы достигали более слабой связности кода? 125. Использование статических классов повышает или понижает связность кода? 126. Как можно измерить performance кода? Влияет ли факт замеров на производительность? 127. Для чего используются и как работают multi-stage билды в Docker? 128. Как понять, что какая-то часть кода утилизирует много памяти или долго выполняется? Что может быть ботлнеком в разных случаях? Какие есть способы уменьшения памяти и трафика памяти? 129. Как бы вы реализовали cross-cutting concern (например, логирование, валидация, транзакции)? 130. Расскажите о Rest Maturity Model. 131. Что такое CPU и IO-bound задачи? 132. Что такое маршалинг? 133. Как работает async / await (подробно)? Почему нельзя использовать async void методы?   Платформа .NET 134. Как работает lock? Можно ли использовать структуры внутри выражения lock? 135. Что такое Expression Tree? 136. Как работает сборщик мусора (подробно)? Почему в GC три поколения, а не, скажем, пять, десять или два? 137. Как бы вы организовали трассировки Web API сервисов? 138. Как в .NET Core можно настроить хранение секретов на компьютерах разработчиков и на рабочих средах? 139. Как бы вы организовали процесс CI/CD .NET Core сервисов для их деплоймента в облачную инфраструктуру? 140. Как включить CORS в AspNetCore?   Типы данных, коллекции и структуры данных 141. Как реализованы дженерики? 142. Как создать собственный immutable-тип? 143. Как работает IEnumerable <T> (подробно)? 144. Какой алгоритм использует коллекция STACK? 145. Какие структуры данных вы реализовывали сами для платформы .NET? Расскажите, чем они отличались от стандартных реализаций. 146. Чем отличается интерфейс от абстрактного класса? В каких случаях вы использовали бы и то, и другое? 147. Почему в структуре нет конструктора по умолчанию?   Базы данных 148. Как БД сохраняет данные? 149. Какие типы БД вы знаете? 150. Как и когда БД лучше использовать? 151. Что такое денормализации? 152. Когда и какие уровни изоляции транзакций можно использовать? 153. Как в популярных СУБД реализованы принципы ACID (SQL Server, PostgreSQL и т. д.)? 154. Приходилось ли вам оптимизировать запрос в БД? Если да, то как? 155. Опишите, какие вы знаете потенциальные проблемы, связанные с параллельными запросами к БД. 156. Какую базу данных вы бы использовали для реализации distributed lock механизма? Расскажите детали реализации.   Микросервисы 157. Какую проблему решают микросервисы? 158. Какие есть способы коммуникации микросервисов? 159. Расскажите варианты реализации распределенных транзакций в микросервисах. 160. Что такое circuit breaker? 161. Каким образом вы будете налаживать систему, состоящую из множества микросервисов, если нужно отследить полный путь обработки запроса? 162. Что такое брокеры сообщений? Что такое at-least-once, at-most-once семантика? Есть ли какие-то брокеры, которые гарантируют exactly-once семантику? 163. Как должен работать код клиента брокера в зависимости от выбранной семантики? 164. Какие инструменты для работы с очередями вам известны (как в .NET, так и отдельные продукты), какой инструмент/продукт вы бы выбрали и почему?   MS Azure 165. Какие виды сервисов бывают в Service Fabric? 166. Какие особенности и ограничения Azure Table Storage? 167. Как бороться с проблемой холодного старта в Azure Functions? 168. В чем отличие очередей и топиков в Azure Service Bus?   Практические задания   Junior only Опишите, как бы вы реализовали калькулятор. Если понадобится добавить поддержку для римской системы счисления, что будете делать? Напишите программу, чтобы проверить, является ли число простым или нет. Найдите наименьший элемент в массиве. Упорядочите структуры папок в файловой системе. Напишите программу, которая симулирует fizz-buzz. Расскажите, что делает этот код, и предложите, как его улучшить. а) public bool IsArrayEmpty(string[] array) {   if (array.Length > 0)     return false;   else     return true; }   б) protected string GetClass(object url) {   string result = string.Empty;   if (SiteMap.CurrentNode != null && SiteMap.CurrentNode.Url == url.ToString())     result = "class=\"active\"";   return result; }   Middle Напишите программу для тиражирования последовательности Фибоначчи для заданного числа. Спроектируйте базу данных врачей и пациентов в SQL. Создайте stored procedure или запрос в SQL, который вернет врачей, имеющих больше, чем N пациентов. Проверьте коллекцию на наличие дубликатов. Спроектируйте thread-safe класс Singleton в C#. Надо записать некую сущность в базу данных и отправить событие в брокер сообщений. Как это сделать с минимальным риском потери данных? Имеются три сервиса. Выполняется HTTP-запрос на первый. Первый должен записать данные во второй, а второй - в третий. Как гарантировать, что данные при такой сложной коммуникации не потеряются? Как предотвратить записи дубликатов данных? Будет ли работать этот код и почему? a) SomeClass myClass = null; myClass.SomeMethod();   б) var table = GetTable(); table.Draw(); … private SomeClass GetTable() {   using(var table = new SomeClass())   {     table.ID = "www";     table.Width = "95%";     table.Controls.Add(tr);     return table;   } } Расскажите, что делает этот код, и предложите, как его улучшить: а) Shape shape = GetNextShape(); if(shape is Circle) Console.WriteLine(((Circle)shape).Radius);   б) public int Quantity {   get   {     try     {       return int.Parse(TxtQuantity.Text);     }     catch (Exception)     {       return 0;     }   } }   Что не так с кодом?   try {   SomeMethod(); } catch(Exception e) {   Log(e.Message);   throw e; }   Senior Как бы вы спроектировали FTP-сервер? Web-сервер? Хостинг картинок с разделением прав доступа? Систему, состоящую из front- и back-офисов? Создайте клон любой популярной социальной сети (Instagram, Facebook и т.д.) Допустим, есть сущность сделки (Bid). И в сделке есть список партнеров, с которыми эта сделка заключается. Сами сделки хранятся в сервисе сделок (bidding service), а партнеры - в своем сервисе (partners service). И когда показывается список сделок, на начальном скрине нужно отразить количество партнеров. Как бы вы спроектировали хранение и изображение этого счетчика? Задача на знание LINQ: с исходной коллекции данных необходимо получить новую коллекцию по определенным требованиям (например, отсортированную, без дубликатов и т. д.). Напишите программу, которая проверяет, является ли поле судоку 9×9 правильно заполненным. Реализуйте свой Select, Where, SelectMany со всеми характеристиками LINQ (отложенное исполнение, одномоментная (eager) проверка входных данных). С помощью LINQ напишите метод, который вернет такие элементы коллекции, которые делятся на N без остатка, отсортированные от наибольшего значения к наименьшему. Сигнатура метода: List <int> Filter (IEnumerable <int> collection, int n) ;. Напишите функцию, которая вернет сумму всех четных элементов массива, который передается в функцию (JavaScript).   Выражаем благодарность за подготовку статьи Алексею Краевому, Максиму Шнуренку, Андрею Ткаченку, Владу Медведовскому, Сергею Селецкому, Андрею Губскому, Сергею Мащуренку, Александру Скриннику, Андрею Соболю, Богдану Нановскому, Святославу Аксёнчикову, Ивану Корнелюку, Михаилу Пивоварову, Алексею Дерке, Евгению Гуреву, Михаилу Меркулову, Юрию Воронину.
Notification success