├── .gitignore ├── .idea ├── .gitignore ├── interview_questions.iml ├── misc.xml ├── modules.xml └── vcs.xml ├── 1. Основы Backend-разработки.md ├── 400 вопросов с ответами, которые должен знать Python-разработчик.md ├── Cобеседование по Angular. 100 вопросов.md ├── Cобеседование по Apache Kafka.md ├── Cобеседование по Java 8 .md ├── Cобеседование по Java. CSS.md ├── Cобеседование по Java. Database.md ├── Cобеседование по Java. Docker и Kubernetes .md ├── Cобеседование по Java. Docker.md ├── Cобеседование по Java. Hibernate.md ├── Cобеседование по Java. IO.md ├── Cобеседование по Java. JDBC и SQL.md ├── Cобеседование по Java. JSP и Servlet.md ├── Cобеседование по Java. Java Collections.md ├── Cобеседование по Java. Log.md ├── Cобеседование по Java. Microservices.md ├── Cобеседование по Java. Patterns.md ├── Cобеседование по Java. RESTful API.md ├── Cобеседование по Java. SQL.md ├── Cобеседование по Java. Servlets.md ├── Cобеседование по Java. Spring Framework.md ├── Cобеседование по Java. TEST .md ├── Cобеседование по Java. UML.md ├── Cобеседование по Java. WEB .md ├── Cобеседование по Java. XML.md ├── Cобеседование по Java. Алгоритмы.md ├── Cобеседование по Java. ООП + Микросервисы.md ├── Kafka простыми словами.pdf ├── Python_Developer_Questions.md ├── Spring Interview Questions.pdf ├── application_interview_questions └── README.md ├── books ├── Apache_Kafka.pdf ├── Robert_Sesil_Martin_Chistyiy_kod_Sozdanie_analiz_i_refaktoring.pdf └── Локальная активация JetBrains.pdf ├── images ├── Collectionsinterfaces.png ├── JFC.png ├── building-architecture │ ├── horizontal-vertical-scaling_eng.png │ ├── horizontal-vertical-scaling_rus.png │ ├── monolith-microservices_eng.png │ └── monolith-microservices_rus.png ├── common │ ├── BigO.png │ ├── BigO_eng.png │ ├── array.png │ ├── array_eng.png │ ├── binary.png │ ├── graph.png │ ├── graph_eng.png │ ├── hash-table.png │ ├── hash-table_eng.png │ ├── heap.png │ ├── heap_eng.png │ ├── hex.png │ ├── linked-list.png │ ├── logic.png │ ├── logic_eng.png │ ├── octal.png │ ├── queue.gif │ ├── stack.png │ ├── stack_eng.png │ └── tree.png ├── databases │ ├── mongodb-cheatsheet.md │ └── sql-cheatsheet.md ├── exception.png ├── linux │ ├── bash-scripts-cheatsheet.md │ ├── chmod.png │ ├── chmod_eng.png │ ├── cron.png │ └── cron_eng.png ├── logo.png ├── microservise │ ├── micros1.png │ └── micros2.png ├── network-internet │ ├── Browser.png │ ├── Domain.png │ ├── Hosting.png │ ├── IPv4-IPv6.png │ ├── Internet.png │ ├── Problems.gif │ ├── Traceroute.png │ ├── browser_eng.png │ ├── dns.png │ ├── domain_eng.png │ ├── http.png │ ├── http_eng.png │ ├── osi.png │ ├── problems_eng.gif │ ├── proxy-vpn.png │ ├── proxy-vpn_eng.png │ ├── tcp-ip.png │ ├── tcp-ip_eng.png │ ├── tcp.png │ ├── topologies.png │ ├── topologies_rus.png │ └── udp.png ├── optimization │ ├── cdn.png │ ├── cdn_eng.png │ ├── load-balancer.png │ └── load-balancer_eng.png ├── os │ ├── concurrency-parallel.png │ ├── os-layer.png │ ├── os-layer_eng.png │ ├── process.png │ └── process_eng.png ├── programming-language │ └── regex-cheatsheet.md ├── security │ ├── hashing.png │ └── hashing_eng.png ├── software │ ├── message-queue.png │ ├── message-queue_eng.png │ ├── web-server_eng.png │ └── web-server_rus.png └── testing │ ├── testing-pyramid_eng.png │ └── testing-pyramid_rus.png ├── questions_data.json ├── Вопрос 1-3031. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 1-677. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 1350-1606. Cобеседование по Java. Разбор вопросов и ответов .md ├── Вопрос 1607-2000. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 2001-2450. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 2451-2633. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 2634-2680. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 2681-2729. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 2730-2789. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 2790-2834. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 2835. Cобеседование по Java. Разбор вопросов и ответов.md ├── Вопрос 678-1350. Cобеседование по Java. Разбор вопросов и ответов.md ├── Курс Spring Framework.md └── Статистика вопросов по Java на собеседовании.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/interview_questions.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Angular 9 | 10 | 11 | CDI (Contexts and Dependency Injection) 12 | 13 | 14 | EditorConfig 15 | 16 | 17 | Gradle 18 | 19 | 20 | Java 21 | 22 | 23 | Java 7Java language level migration aidsJava 24 | 25 | 26 | Java language level migration aidsJava 27 | 28 | 29 | Kotlin 30 | 31 | 32 | Maven 33 | 34 | 35 | Probable bugsGradle 36 | 37 | 38 | Resource managementJava 39 | 40 | 41 | SQL 42 | 43 | 44 | Spring 45 | 46 | 47 | Spring SecuritySpring 48 | 49 | 50 | Threading issuesJava 51 | 52 | 53 | Validity issuesGradle 54 | 55 | 56 | 57 | 58 | User defined 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Cобеседование по Java. CSS.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | 17 | # Основы CSS 18 | - [Cобеседование по Java. Разбор вопросов и ответов.](#cобеседование-по-java-разбор-вопросов-и-ответов) 19 | - [Основы CSS](#основы-css) 20 | - [Что такое _«CSS»_?](#что-такое-css) 21 | - [Как в CSS обозначаются комментарии?](#как-в-css-обозначаются-комментарии) 22 | - [Что такое _«селектор»_?](#что-такое-селектор) 23 | - [Перечислите основные виды селекторов.](#перечислите-основные-виды-селекторов) 24 | - [Что такое псевдокласс?](#что-такое-псевдокласс) 25 | - [Какие существуют селекторы аттрибутов?](#какие-существуют-селекторы-аттрибутов) 26 | - [В чем разница между `#my` и `.my`?](#в-чем-разница-между-my-и-my) 27 | - [В чем разница между `margin` и `padding`?](#в-чем-разница-между-margin-и-padding) 28 | - [В чем заключается разница между значениями `0` и `auto` в свойстве `margin`?](#в-чем-заключается-разница-между-значениями-0-и-auto-в-свойстве-margin) 29 | - [Какое свойство задает цвет фона?](#какое-свойство-задает-цвет-фона) 30 | - [Как убрать подчеркивание для всех ссылок на странице?](#как-убрать-подчеркивание-для-всех-ссылок-на-странице) 31 | - [Для чего используется свойство `clear`?](#для-чего-используется-свойство-clear) 32 | - [Как сделать жирным текст во всех элементах `

`?](#как-сделать-жирным-текст-во-всех-элементах-p) 33 | - [Как задать красный цвет для всех элементов, имеющих класс `red`?](#как-задать-красный-цвет-для-всех-элементов-имеющих-класс-red) 34 | - [Источники](#источники) 35 | 36 | ## Что такое _«CSS»_? 37 | __CSS, Cascading Style Sheets (каскадные таблицы стилей)__ - формальный язык описания внешнего вида документа, написанного с использованием языка разметки, который применяется к элементам web-страницы для управления их видом и положением. 38 | 39 | Основной целью разработки CSS являлось разделение описания логической структуры web-страницы, которое производится с помощью HTML или других языков разметки от описания внешнего вида этой web-страницы, которое производится с помощью CSS. 40 | 41 | [к оглавлению](#Основы-css) 42 | 43 | ## Как в CSS обозначаются комментарии? 44 | Чтобы пометить, что текст является комментарием, применяют конструкцию `/* ... */` 45 | 46 | [к оглавлению](#Основы-css) 47 | 48 | ## Что такое _«селектор»_? 49 | __Селектор__ – это правило, на основании которого осуществляется выбор элементов в HTML документе для того, чтобы применить к ним определённые стили. 50 | 51 | ```css 52 | p { 53 | text-align: center; 54 | font-size: 20px; 55 | } 56 | /* p – это селектор, text-align и font-size – это свойства, а center и 20px – значения. */ 57 | ``` 58 | 59 | [к оглавлению](#Основы-css) 60 | 61 | ## Перечислите основные виды селекторов. 62 | 63 | + __селектор `*`__ - выбор всех элементов; 64 | + __селектор элемента__ - выбор всех элементов в HTML документе, имеющих указанный тег (например: `div`); 65 | + __селектор класса__ - выбор всех элементов в HTML документе, имеющих указанный класс (например: `.center`); 66 | + __селектор идентификатора__ - выбор элемента в HTML документе, имеющего указанный идентификатор (например: `#footer`); 67 | + __селекторы псевдоклассов__ - выбор всех элементов в HTML документе, имеющих указанный псевдокласс (например: `p:first-of-type`); 68 | + __селекторы атрибутов__ - выбор элементов в зависимости от указанного атрибута элемента или его значения (например: `[href*="youtube"]`). 69 | 70 | [к оглавлению](#Основы-css) 71 | 72 | ## Что такое псевдокласс? 73 | Псевдокласс определяет динамическое состояние элементов, которое изменяется из-за действий пользователя, или же соответствует текущему положению в дереве документа. В отличие от настоящего класса, в явном виде псеводкласс в HTML не указывается, а в CSS указывается через `:` непосредственно после селектора. 74 | 75 | Наиболее известные псевдоклассы: 76 | 77 | + `:link` применяется к непосещенным ссылкам; 78 | + `:visited` применяется к посещенным ссылкам; 79 | + `:hover` применяется, когда курсор мыши находится в пределах элемента, но не активирует его; 80 | + `:active` применяется при активации элемента; 81 | + `:focus` применяется к элементу при получении им фокуса; 82 | + `:first-child` применяется к первому дочернему элементу селектора, который расположен в дереве элементов документа. 83 | 84 | ```css 85 | a.snowman:link { 86 | color: blue; 87 | } 88 | a.snowman:visited { 89 | color: purple; 90 | } 91 | a.snowman:active { 92 | color: red; 93 | } 94 | a.snowman:hover { 95 | text-decoration: none; 96 | color: blue; 97 | background-color: yellow; 98 | } 99 | ``` 100 | 101 | [к оглавлению](#Основы-css) 102 | 103 | ## Какие существуют селекторы аттрибутов? 104 | + __`[атрибут]`__ - все элементы, имеющие указанный `атрибут`; 105 | + __`[атрибут=значение]`__ - все элементы, имеющие `атрибут`, значение которого равно `"значение"`; 106 | + __`[атрибут^=занчение]`__ - все элементы, имеющие `атрибут`, значение которого начинается с `значение`; 107 | + __`[атрибут|=значение]`__ - все элементы, имеющие `атрибут`, значение которого равно `значение` или начинается с `значение` следующим образом `значение-*` (`значение` с обязательным дефисом, после которого идёт остальное содержимое значения); 108 | + __`[атрибут$=значение]`__ - все элементы, имеющие `атрибут`, значение которого заканчивается на `значение`; 109 | + __`[атрибут*=значение]`__ - все элементы, имеющие `атрибут`, значение которого содержит подстроку `значение`; 110 | + __`[атрибут~=значение]`__ - все элементы, имеющие `атрибут`, значение которого содержит `значение` как одно из значений через пробел. 111 | 112 | [к оглавлению](#Основы-css) 113 | 114 | ## В чем разница между `#my` и `.my`? 115 | `#my` — селектор идентификатора, а `.my` — селектор класса. 116 | 117 | [к оглавлению](#Основы-css) 118 | 119 | ## В чем разница между `margin` и `padding`? 120 | `margin` — внешний отступ, а `padding` — внутренний отступ. 121 | 122 | [к оглавлению](#Основы-css) 123 | 124 | ## В чем заключается разница между значениями `0` и `auto` в свойстве `margin`? 125 | В вертикальных полях — `auto` всегда означает `0`. В горизонтальных полях — `auto` означает `0` только тогда, когда свойство `width` также `auto`. 126 | 127 | [к оглавлению](#Основы-css) 128 | 129 | ## Какое свойство задает цвет фона? 130 | Цвет фона задает свойство `background-color`. 131 | 132 | [к оглавлению](#Основы-css) 133 | 134 | ## Как убрать подчеркивание для всех ссылок на странице? 135 | ```css 136 | a { 137 | text-decoration: none; 138 | } 139 | ``` 140 | 141 | [к оглавлению](#Основы-css) 142 | 143 | ## Для чего используется свойство `clear`? 144 | `clear` устанавливает, с какой стороны элемента запрещено его обтекание другими элементами. 145 | 146 | [к оглавлению](#Основы-css) 147 | 148 | ## Как сделать жирным текст во всех элементах `

`? 149 | ```css 150 | p { 151 | font-weight: bold; 152 | } 153 | ``` 154 | 155 | [к оглавлению](#Основы-css) 156 | 157 | ## Как задать красный цвет для всех элементов, имеющих класс `red`? 158 | ```css 159 | .red { 160 | color: red; 161 | } 162 | ``` 163 | 164 | [к оглавлению](#Основы-css) 165 | 166 | # Источники 167 | + [myway-blog.ru](http://myway-blog.ru/interview-frontend-web-programmer/) 168 | + [htmlbook.ru](http://stepbystep.htmlbook.ru/?id=43) 169 | + [itchief.ru](https://itchief.ru/lessons/html-and-css/css-selectors) 170 | 171 | [Вопросы для собеседования](README.md) 172 | -------------------------------------------------------------------------------- /Cобеседование по Java. Docker.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | Docker: 17 | 1. Что такое Docker? 18 | 2. Какие преимущества дает использование Docker? 19 | 3. Какая разница между контейнером и виртуальной машиной? 20 | 4. Какой дистрибутив Linux рекомендуется для использования Docker? 21 | 5. Как вы создаете Dockerfile? 22 | 6. Как использовать Docker Compose? 23 | 7. Как использовать Docker Swarm? 24 | 8. Как можно управлять контейнерами с помощью командной строки? 25 | 9. Как можно работать с образами Docker? 26 | 10. Каким образом можно настроить сетевые интерфейсы контейнера Docker? 27 | 11. Как можно ограничивать доступ к ресурсам контейнера? 28 | 12. Как можно настроить порты для работы контейнеров? 29 | 13. Почему Docker рекомендуется для микросервисной архитектуры? 30 | 14. Как можно масштабировать приложение, используя Docker? 31 | 15. Как вы управляете логами Docker? 32 | 16. Каким образом можно конфигурировать переменные окружения контейнера? 33 | 17. Каким образом можно сохранять данные контейнера? 34 | 18. Как можно обновлять Docker-образы? 35 | 19. Как можно проверять целостность Docker-образов? 36 | 20. Каким образом можно проверять наличие новых версий образов Docker в репозитории? 37 | 21. Как вы отладчик приложения, работающего в контейнере Docker? 38 | 22. Как вы тестируете приложение, работающее в контейнере Docker? 39 | 23. Как вы используете Docker для разработки локально? 40 | 24. Как вы используете Docker для развертывания приложения в продакшене? 41 | 25. Каким образом можно обеспечить безопасность контейнеров Docker? 42 | 26. Как можно управлять версиями Docker-образов? 43 | 27. Как можно резервировать контейнеры Docker? 44 | 28. Каким образом можно настроить доступ к базе данных в контейнере Docker? 45 | 29. Каким образом можно управлять зависимостями приложения в контейнере Docker? 46 | 30. Каким образом можно использовать Docker с Kubernetes? 47 | 31. Каким образом можно использовать Docker в AWS ECS? 48 | 32. Каким образом можно использовать Docker в Azure Container Service? 49 | 33. Каким образом можно использовать Docker в Google Cloud Platform? 50 | 34. Каким образом можно использовать Docker с Mesos? 51 | 35. Каким образом можно использовать Docker с Nomad? 52 | 36. Как можно настроить мониторинг контейнеров Docker? 53 | 37. Каким образом можно управлять сборкой Docker-образов на CI/CD сервере? 54 | 38. Каким образом можно использовать Docker для тестирования безопасности приложения? 55 | 39. Каким образом можно использовать Docker для развертывания кластера Cassandra? 56 | 40. Каким образом можно использовать Docker для развертывания кластера Kafka? 57 | 41. Каким образом можно использовать Docker для развертывания кластера ElasticSearch? 58 | 42. Каким образом можно использовать Docker для развертывания кластера RabbitMQ? 59 | 43. Каким образом можно использовать Docker для развертывания кластера PostgresSQL? 60 | 44. Как можно использовать Docker для создания переносимых окружений разработки? 61 | 45. Каким образом можно использовать Docker для создания переносимых окружений QA? 62 | 46. Каким образом можно использовать Docker для создания переносимых окружений в рамках DevOps? 63 | 47. Как можно управлять изменениями Dockerfile в рамках системы контроля версий? 64 | 48. Каким образом можно использовать Docker для развертывания многоконтейнерных приложений? 65 | 49. Как можно настроить доступ к файловой системе хоста из контейнера Docker? 66 | 50. Каким образом можно настроить сетевое взаимодействие между контейнерами Docker? 67 | 51. Каким образом можно использовать Docker для тестирования конфигурации приложения? 68 | 52. Какой процесс запускается в контейнере Docker? 69 | 53. Каким образом можно использовать Docker для подготовки учебного окружения? 70 | 54. Каким образом можно использовать Docker для портирования приложения на новый сервер? 71 | 55. Каким образом можно использовать Docker для развертывания приложения на нескольких серверах? 72 | 56. Каким образом можно использовать Docker для тестирования масштабирования приложения? 73 | 57. Каким образом можно использовать Docker для выделения ресурсов на сервере? 74 | 58. Каким образом можно настроить удаленный доступ к контейнеру Docker? 75 | 59. Каким образом можно использовать Docker для развертывания приложения в Kubernetes? 76 | 60. Каким образом можно использовать Docker для развертывания приложения в OpenShift? 77 | 61. Каким образом можно использовать Docker для развертывания приложения в Rancher? 78 | 62. Каким образом можно использовать Docker для развертывания приложения на Heroku? 79 | 63. Каким образом можно использовать Docker для развертывания приложения в Digital Ocean? 80 | 64. Каким образом можно использовать Docker для развертывания приложения в Linode? 81 | 65. Каким образом можно использовать Docker для развертывания приложения на Amazon Web Services? 82 | 66. Каким образом можно использовать Docker для развертывания приложения на Google Cloud Platform? 83 | 67. Каким образом можно использовать Docker для развертывания приложения на Microsoft Azure? 84 | 68. Что такое Docker Hub? 85 | 69. Каким образом можно использовать Docker Hub для хранения образов Docker? 86 | 70. Каким образом можно использовать Docker Hub для совместной работы над проектами? 87 | 71. Каким образом можно создавать свои собственные репозитории Docker? 88 | 72. Каким образом можно настроить автоматическую сборку образов Docker в Docker Hub? 89 | 73. Каким образом можно работать с Docker-образами, которые не хранятся в Docker Hub? 90 | 74. Каким образом можно создавать приватные Docker-репозитории? 91 | 75. Каким образом можно использовать Docker-образы, которые безопасно хранят конфиденциальную информацию? 92 | 76. Как можно управлять доступом к Docker-репозиториям? 93 | 77. Каким образом можно использовать Docker для развертывания приложения на множестве серверов? 94 | 78. Каким образом можно использовать Docker для развертывания приложения в нескольких средах? 95 | 79. Каким образом можно использовать Docker для тестирования приложения на разных ОС? 96 | 80. Каким образом можно использовать Docker для развертывания приложения в одной среде, но на разных серверах? 97 | 81. Каким образом можно использовать Docker для тестирования обновлений приложения? 98 | 82. Каким образом можно использовать Docker для тестирования отказоустойчивости приложения? 99 | 83. Каким образом можно использовать Docker для уменьшения времени развертывания приложения? 100 | 84. Каким образом можно использовать Docker для уменьшения времени восстановления после сбоев? 101 | 85. Каким образом можно использовать Docker для тестирования безопасности приложения? 102 | 86. Каким образом можно использовать Docker для развертывания приложения на локальной машине? 103 | 87. Каким образом можно использовать Docker для развертывания приложения в облаке? 104 | 88. Каким образом можно использовать Docker для тестирования масштабируемости приложения? 105 | 89. Каким образом можно использовать Docker для быстрого развертывания инфраструктуры? 106 | 90. Каким образом можно использовать Docker для работы с базами данных? 107 | 91. Каким образом можно использовать Docker для разработки на нескольких языках программирования? 108 | 92. Каким образом можно использовать Docker для тестирования интеграции приложения? 109 | 93. Каким образом можно использовать Docker для тестирования производительности приложения? 110 | 94. Каким образом можно использовать Docker для создания и управления резервными копиями? 111 | 95. Каким образом можно использовать Docker для миграции приложения? 112 | 96. Каким образом можно использовать Docker для развертывания приложения, которое работает в связке с другими сервисами? 113 | 97. Каким образом можно использовать Docker для создания и управления микросервисами? 114 | 98. Каким образом можно использовать Docker для создания распределенной системы? 115 | 99. Каким образом можно использовать Docker для масштабирования приложения в автоматическом режиме? 116 | 100. Каким образом можно использовать Docker для развертывания простых приложений, таких как блоги и веб-сайты? 117 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /Cобеседование по Java. Hibernate.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | 1. Что такое Hibernate и как вы с ним работали? 17 | 18 | Hibernate - это фреймворк для работы с базами данных, который предоставляет высокоуровневый API для работы с объектами и базами данных. Он позволяет разработчикам работать с объектами вместо работы с SQL-запросами. Hibernate также предоставляет механизмы для управления транзакциями, кэшированием и оптимизацией производительности. 19 | Я использовал Hibernate в нескольких проектах. В одном из проектов я использовал Hibernate для создания объектов и сохранения их в базе данных. Я также использовал Hibernate для выполнения запросов к базе данных и получения результатов в виде объектов. Я также использовал Hibernate для управления транзакциями, чтобы гарантировать целостность данных. 20 | 21 | 2. Какие преимущества использования Hibernate в своих проектах вы видите? 22 | 23 | 24 | 3. Какую базу данных вы обычно используете при работе с Hibernate? 25 | 26 | 4. Что такое ORM и какие ее преимущества? 27 | 28 | 5. Как настроить Hibernate для работы с несколькими базами данных? 29 | 30 | 31 | 6. Как бы вы реализовали связь многие-ко-многим с помощью Hibernate? 32 | 33 | 7. Какая версия Hibernate вам больше всего нравится и почему? 34 | 35 | 8. Почему нужно использовать Hibernate вместо написания SQL запросов вручную? 36 | 9. Как вы работаете с кэшем в Hibernate? 37 | 10. Какие типы связей поддерживает Hibernate? 38 | 11. Как можно настроить Hibernate для работы с процедурами хранимыми БД? 39 | 12. Как вы обычно тестируете код, использующий Hibernate? 40 | 13. Как вы обрабатываете ошибки Hibernate в своих проектах? 41 | 14. Какие книги или ресурсы по Hibernate вы можете порекомендовать? 42 | 15. Как настроить Hibernate для работы с кластеризованными серверами БД? 43 | 16. Как использовать Hibernate для преобразования данных из одного формата в другой? 44 | 17. Как настроить Hibernate для работы с различными форматами данных (XML, JSON)? 45 | 18. Какие фреймворки вы использовали в связке с Hibernate? 46 | 19. Как обеспечить безопасность при работе с Hibernate? 47 | 20. Какая ваша опытность работы с инструментами мониторинга производительности? 48 | 21. Какую структуру БД лучше всего использовать для работы с Hibernate? 49 | 22. Как вы обрабатываете большие объемы данных с помощью Hibernate? 50 | 23. Как управлять транзакциями в Hibernate? 51 | 24. Каким образом можно расширять функциональность Hibernate? 52 | 25. Какие особенности работы Hibernate в многопоточной среде нужно учитывать? 53 | 26. Как вы работаете с Batch операциями в Hibernate? 54 | 27. Как использовать Hibernate в качестве ORM-фреймворка для .NET? 55 | 28. Как создавать запросы на выборку данных с помощью Hibernate Criteria API? 56 | 29. Как настроить работу Hibernate в режиме lazy loading? 57 | 30. Как обработать проблемы, связанные с блокировкой таблицы при использовании Hibernate? 58 | 31. Как настроить Hibernate для работы с RDBMS, не поддерживаемых Hibernate "из коробки"? 59 | 32. Как работать с достаточно сложными запросами на выборку данных с помощью Hibernate Query Language? 60 | 33. Как использовать Hibernate в качестве ORM-фреймворка для NoSQL БД? 61 | 34. Как вы работаете с библиотеками масштабирования приложений со сложной логикой? 62 | 35. Как настроить Hibernate для работы с реляционными базами данных, которые не поддерживают транзакции? 63 | 36. Как обеспечить производительность при работе с большим числом записей в базе данных с помощью Hibernate? 64 | 37. Как создавать уникальные индексы на таблицы с помощью Hibernate аннотаций? 65 | 38. Как использовать Hibernate для работы с базами данных, расположенными на удаленных серверах? 66 | 39. Как упростить работу с Hibernate с помощью Spring Framework? 67 | 40. Как настроить Hibernate для работы с процедурамями, написанными на PL/SQL? 68 | 42. Какие проблемы могут возникнуть при работе Hibernate с большими объемами данных и как их решить? 69 | 43. Как использовать Hibernate для работы с несколькими БД одновременно? 70 | 44. Как продуктивно использовать кэш в Hibernate? 71 | 45. Какие преимущества и недостатки имеет Hibernate по сравнению с другими ORM-фреймворками? 72 | 46. Как работать с Hibernate в распределенных системах? 73 | 47. Как настроить Hibernate для работы с минимальной задержкой? 74 | 48. Как использовать Hibernate для работы с временными таблицами? 75 | 49. Как производить миграции базы данных с помощью Hibernate? 76 | 50. Как использовать Hibernate для работы с Cassandra? 77 | 51. Как обрабатывать ошибки при работе с Hibernate? 78 | 52. Как использовать Hibernate для работы с MongoDB? 79 | 53. Как оптимизировать работу Hibernate с большим количеством запросов? 80 | 54. Как создавать собственные аннотации Hibernate? 81 | 55. Как использовать Hibernate для работы с Couchbase? 82 | 56. Как работать с Hibernate в системах с высокой нагрузкой? 83 | 57. Как настроить Hibernate для работы с несколькими серверами БД? 84 | 58. Как использовать Hibernate для работы с HBase? 85 | 59. Как настроить Hibernate для работы с Elasticsearch? 86 | 60. Как использовать Hibernate для работы с Neo4j? 87 | 61. Как решать проблемы производительности при работе с Hibernate? 88 | 62. Как использовать Hibernate для работы с Solr? 89 | 63. Как настроить Hibernate для работы с ClickHouse? 90 | 64. Как использовать Hibernate для работы с Redis? 91 | 65. Как создавать запросы на изменение данных с помощью Hibernate? 92 | 66. Как использовать Hibernate для работы с Apache Ignite? 93 | 67. Как настроить Hibernate для работы с Vertica? 94 | 68. Как использовать Hibernate для работы с InfluxDB? 95 | 69. Как использовать Hibernate для работы с Aerospike? 96 | 70. Какие подходы используются для оптимизации работы Hibernate? 97 | 71. Как использовать Hibernate для работы с ArangoDB? 98 | 72. Как настроить Hibernate для работы с Yellowbrick? 99 | 73. Как использовать Hibernate для работы с Greenplum? 100 | 74. Как правильно использовать кэш в Hibernate? 101 | 75. Как использовать Hibernate для работы с Teradata? 102 | 76. Какие лучшие практики работы с Hibernate вы можете порекомендовать? 103 | 77. Как настроить Hibernate для работы с Amazon Redshift? 104 | 78. Как использовать Hibernate для работы с Pinot? 105 | 79. Как настроить Hibernate для работы с Google BigQuery? 106 | 80. Как использовать Hibernate для работы с Microsoft SQL Server? 107 | 81. Как правильно использовать инструменты мониторинга производительности в Hibernate? 108 | 82. Как настроить Hibernate для работы с Oracle DB? 109 | 83. Как использовать Hibernate для работы с PostgreSQL? 110 | 84. Как использовать Hibernate для работы с MySQL? 111 | 85. Как использовать Hibernate для работы с SQLite? 112 | 86. Как настроить Hibernate для работы с DB2? 113 | 87. Как использовать Hibernate для работы с Sybase? 114 | 88. Как настроить Hibernate для работы с Informix? 115 | 89. Как использовать Hibernate для работы с Firebird? 116 | 90. Какие ресурсы вы можете порекомендовать для изучения Hibernate? 117 | 91. Как использовать Hibernate для работы с Apache Cassandra? 118 | 92. Как работать с многопоточностью в Hibernate? 119 | 93. Как использовать Hibernate для работы с Apache Hadoop? 120 | 94. Как настроить Hibernate для работы с Apache Hive? 121 | 95. Как использовать Hibernate для работы с Apache Phoenix? 122 | 96. Как настроить Hibernate для работы с Apache Spark? 123 | 97. Как использовать Hibernate для работы с Apache Kafka? 124 | 98. Как настроить Hibernate для работы с Apache Flink? 125 | 99. Как использовать Hibernate для работы с Apache Druid? 126 | 100. Как использовать Hibernate для работы с CouchDB? 127 | 101. Как настроить Hibernate для работы с Amazon Aurora? 128 | 102. Как использовать Hibernate для работы с Google Cloud SQL? 129 | 103. Какие инструменты и библиотеки могут помочь в работе с Hibernate? 130 | 104. Как решать проблемы безопасности при работе с Hibernate? 131 | 105. Как использовать Hibernate для работы с Apache Cassandra как кэшем? 132 | 106. Какие подходы используются для тестирования Hibernate-приложений? 133 | 107. Как настроить Hibernate для работы с ClickHouse как кэшем? 134 | 108. Как использовать Hibernate для работы с Hazelcast? 135 | 109. Как использовать Hibernate для работы с Apache Geode? 136 | 110. Как использовать Hibernate для работы с Oracle Coherence? 137 | 111. Как использовать Hibernate для работы с Apache ZooKeeper? 138 | 112. Как использовать Hibernate для работы с Apache Pulsar? 139 | 113. Как использовать Hibernate для работы с Apache Beam? 140 | 114. Как настроить Hibernate для работы с Apache Kylin? 141 | 115. Как использовать Hibernate для работы с Apache Accumulo? 142 | 116. Как использовать Hibernate для работы с Apache Kudu? 143 | 117. Как настроить Hibernate для работы с Apache Impala? 144 | 118. Как использовать Hibernate для работы с Apache Ignite как кэшем? 145 | 119. Как использовать Hibernate для работы с Amazon DynamoDB? 146 | 120. Как использовать Hibernate для работы с Google Cloud Firestore? 147 | 121. Как использовать Hibernate для работы с Apache CouchDB как кэшем? 148 | 122. Как настроить Hibernate для работы с Amazon DocumentDB? 149 | 123. Как использовать Hibernate для работы с Google Cloud Bigtable? 150 | 124. Как использовать Hibernate для работы с Redis как кэшем? 151 | 125. Как использовать Hibernate для работы с MongoDB как кэшем? 152 | 126. Как использовать Hibernate для работы с Apache HBase как кэшем? 153 | 127. Как использовать Hibernate для работы с Apache Cassandra и Solr вместе? 154 | 128. Как использовать Hibernate для работы с Apache NiFi? 155 | 129. Как использовать Hibernate для работы с Apache Flink и Apache Kafka вместе? 156 | 130. Как использовать Hibernate для работы с Apache Spark и Apache Cassandra вместе? 157 | 131. Как использовать Hibernate для работы с Apache Beam и Google BigQuery вместе? 158 | 132. Как использовать Hibernate для работы с Apache Druid как кэшем? 159 | 133. Как использовать Hibernate для работы с Apache Phoenix как кэшем? 160 | 134. Как использовать Hibernate для работы с Apache Pulsar и Apache Flink вместе? 161 | 135. Как использовать Hibernate для работы с Apache Geode и Apache Kafka вместе? 162 | 136. Как использовать Hibernate для работы с Apache Kudu как кэшем? 163 | 137. Как использовать Hibernate для работы с Apache Impala как кэшем? 164 | 138. Как использовать Hibernate для работы с Apache Ignite и Apache Spark вместе? 165 | 139. Как использовать Hibernate для работы с Amazon ElastiCache? 166 | 140. Как использовать Hibernate для работы с Google Cloud Memorystore? 167 | 141. Как использовать Hibernate для работы с Apache Cassandra и Apache Spark вместе? 168 | 142. Как использовать Hibernate для работы с Apache Flink и Apache Druid вместе? 169 | 143. Как использовать Hibernate для работы с Apache Geode и Apache Ignite вместе? 170 | 144. Как использовать Hibernate для работы с Apache Pulsar и Apache Cassandra вместе? 171 | 145. Как использовать Hibernate для работы с Apache Kudu и Apache Spark вместе? 172 | 146. Как использовать Hibernate для работы с Apache Beam и Google Cloud Pub/Sub вместе? 173 | 147. Как использовать Hibernate для работы с Apache Phoenix и Apache HBase вместе? 174 | 148. Как использовать Hibernate для работы с Amazon Neptune? 175 | 149. Как использовать Hibernate для работы с Google Cloud Spanner? 176 | 150. Как использовать Hibernate для работы с Azure Cosmos DB? 177 | 151. Как настроить Hibernate для работы с кластером серверов базы данных? 178 | 152. Как обеспечить безопасность при работе с Hibernate? 179 | 153. Как использовать Hibernate для работы с графовыми базами данных, например, Neo4j? 180 | 154. Как использовать Hibernate для работы с временными рядами, например, InfluxDB? 181 | 155. Как использовать Hibernate для работы с NoSQL базами данных, например, MongoDB? 182 | 156. Как использовать Hibernate для работы с OLAP базами данных, например, Apache Kylin? 183 | 157. Как настроить Hibernate для работы с индексами полнотекстового поиска, например, Elasticsearch? 184 | 158. Как использовать Hibernate для работы с табличными базами данных, например, Apache Cassandra? 185 | 159. Как использовать Hibernate для работы с геоданными, например, Apache Solr? 186 | 160. Как использовать Hibernate для работы с Key-Value хранилищами, например, Redis? 187 | 161. Как настроить Hibernate для работы с Oracle RAC? 188 | 162. Как настроить Hibernate для работы с Microsoft SQL Server AlwaysOn? 189 | 163. Как использовать Hibernate для работы с Amazon Redshift Spectrum? 190 | 164. Как использовать Hibernate для работы с Google Cloud Dataflow? 191 | 165. Как использовать Hibernate для работы с Apache CouchDB как хранилищем данных? 192 | 166. Как использовать Hibernate для работы с Google Cloud Storage как хранилищем данных? 193 | 167. Как настроить Hibernate для работы с репликацией базы данных? 194 | 168. Как использовать Hibernate для работы с Apache Ignite и Apache Flink вместе в распределенных системах? 195 | 169. Как использовать Hibernate для работы с Apache Hadoop и Apache Hive вместе? 196 | 170. Как использовать Hibernate для работы с Apache HBase и Apache Phoenix вместе? 197 | 171. Как настроить Hibernate для работы с Apache Kudu и Apache Impala вместе? 198 | 172. Как использовать Hibernate для работы с Amazon S3 как хранилищем данных? 199 | 173. Как использовать Hibernate для работы с Apache Flink и Apache Pulsar вместе в распределенных системах? 200 | 174. Как использовать Hibernate для работы с Apache Cassandra и Apache Lucene вместе для полнотекстового поиска? 201 | 175. Как использовать Hibernate для работы с Apache Ignite и Apache Spark вместе в распределенных системах? 202 | 176. Как настроить Hibernate для работы с механизмом шардирования базы данных? 203 | 177. Как использовать Hibernate для работы с Azure HDInsight и Apache Hive вместе? 204 | 178. Как использовать Hibernate для работы с Apache HBase и Apache Phoenix вместе для OLTP? 205 | 179. Как настроить Hibernate для работы с Amazon Neptune и Gremlin API? 206 | 180. Как использовать Hibernate для работы с Couchbase и N1QL языком запросов? 207 | 181. Как использовать Hibernate для работы с геораспределенными базами данных, например, CockroachDB? 208 | 182. Как настроить Hibernate для работы с SQL Server Availability Groups? 209 | 183. Как использовать Hibernate для работы с Amazon DocumentDB и MongoDB API? 210 | 184. Как использовать Hibernate для работы с Google Cloud BigQuery и SQL языком запросов? 211 | 185. Как использовать Hibernate для работы с индексами временных рядов, например, TimescaleDB? 212 | 186. Как использовать Hibernate для работы с Apache Cassandra и Apache Spark вместе для OLAP? 213 | 187. Как использовать Hibernate для работы с Apache Druid и SQL языком запросов? 214 | 188. Как использовать Hibernate для работы с Google Cloud Datastore? 215 | 189. Как настроить Hibernate для работы с резервными копиями базы данных? 216 | 190. Как использовать Hibernate для работы с графовыми базами данных, например, Amazon Neptune? 217 | 191. Как использовать Hibernate для работы с ClickHouse и SQL языком запросов? 218 | 192. Как использовать Hibernate для работы с Google Cloud Spanner и SQL языком запросов? 219 | 193. Как использовать Hibernate для работы с Apache Cassandra и Apache ZooKeeper вместе для координации? 220 | 194. Как использовать Hibernate для работы с Google Cloud Pub/Sub? 221 | 195. Как использовать Hibernate для работы с Azure Cosmos DB и SQL языком запросов? 222 | 196. Как использовать Hibernate для работы с Amazon RDS Proxy? 223 | 197. Как использовать Hibernate для работы с Apple Core Data? 224 | 198. Как использовать Hibernate для работы с Apache Pulsar как хранилищем данных? 225 | 199. Как использовать Hibernate для работы с сервисами управления версиями данных, например, Liquibase или Flyway? 226 | 200. Как использовать Hibernate для работы с гибридными системами управления данными? 227 | -------------------------------------------------------------------------------- /Cобеседование по Java. JSP и Servlet.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | 17 | 18 | 19 | JSP (оглавление) 20 | 21 | 1. Что такое jsp и зачем он нужен? 22 | 2. Расскажите об этапах жизненного цикла jsp. 23 | 3. Расскажите о методах жизненного цикла jsp. 24 | 4. Как закомментировать код в jsp? 25 | 5. Какие есть способы вставки java кода в jsp страницу? 26 | 6. Почему не рекомендуется использовать скриптовые элементы в jsp? 27 | 7. Какие неявные, внутренние объекты есть на jsp странице? 28 | 29 | 8. Что вы знаете о PageContext? 30 | 9. Как можно запретить использование скриптов и java кода на jsp странице? 31 | 10. Что вы знаете о jsp тегах? 32 | 11. Что вы знаете о языке выражений jsp (JSP Expression Language – EL)? 33 | 12. Назовите неявные, внутренние объекты JSP EL и их отличия от объектов jsp. 34 | 13. Как узнать http метод использую JSP EL? 35 | 14. Что такое JSTL (Jsp Standard tag library)? 36 | 15. На какие категории можно разделить JSTL теги, приведите примеры. 37 | 16. Что вы знаете о написании пользовательских jsp тегов? 38 | 17. Как можно обработать ошибки jsp страниц? 39 | 18. Как происходит обработка ошибок с помощью jstl? 40 | 19. Как деактивировать использование EL на JSP? 41 | 20. Можно ли использовать javascript на jsp странице? 42 | 21. Всегда ли создается объект сессии на jsp странице, можно ли отключить его создание? 43 | 22. Как можно расширить функциональность jsp? 44 | 45 | 46 | 47 | 48 | Servlet (оглавление) 49 | 50 | 277. Какова структура веб-проекта? 51 | 278. Что такое сервлет? 52 | 279. Что такое контейнер сервлетов? 53 | 280. Каковы задачи, функциональность контейнера сервлетов? 54 | 281. Что вы знаете о сервлет фильтрах? 55 | 282. Зачем нужны слушатели в сервлетах? 56 | 283. Когда вы будете использовать фильтры а когда слушатели? 57 | 284. Как обработать исключения, выброшенные другим сервлетом в приложении? 58 | 285. Что такое дискриптор развертывания? 59 | 286. Как реализовать запуск сервлета с запуском приложения? 60 | 287. Что представляет собой объект ServletConfig? 61 | 288. Что представляет собой объект ServletContext? 62 | 289. В чем отличия ServletContext и ServletConfig? 63 | 290. Что такое Request Dispatcher? 64 | 291. Как можно создать блокировку (deadlock) в сервлете? 65 | 292. Как получить адрес сервлета на сервере? 66 | 293. Как получить информацию о сервере с сервлета? 67 | 294. Как получить ip адрес клиента на сервере? 68 | 295. Что вы знаете о классах обертках (wrapper) для сервлетов? 69 | 296. Каков жизненный цикл сервлета и когда какие методы вызываются? 70 | 297. Какие методы необходимо определить при создании сервлетов? 71 | 298. В каком случае вы будете переопределять метод service()? 72 | 299. Есть ли смысл определить конструктор для сервлета, как лучше инициализировать данные? 73 | 300. В чем отличия GenericServlet и HttpServlet? 74 | 301. Как вызватьиз сервлета другой сервлет этого же и другого приложения? 75 | 302. Что вы знаете и в чем отличия методов forward() и sendRedirect()? 76 | 303. Стоит ли волноваться о “многопоточной безопасности” работая с сервлетами? 77 | 304. Что такое servlet scope (область видимости – время жизни) и какие вы знаете? 78 | 305. Что вы знаете и зачем нужны методы java.net.URLEncoder.encode() и decode()? 79 | 306. Зачем нужны и чем отличаются методы encodeUrl() и encodeRedirectUrl()? 80 | 307. Что такое «сервлет»? 81 | 308. В чем заключаются преимущества технологии сервлетов над CGI (Common Gateway Interface)? 82 | 309. Какова структура веб-проекта? 83 | 310. Что такое «контейнер сервлетов»? 84 | 311. Зачем нужны сервера приложений, если есть контейнеры сервлетов? 85 | 312. Как контейнер сервлетов управляет жизненным циклом сервлета, когда и какие методы вызываются? 86 | 313. Что такое «дескриптор развертывания»? 87 | 314. Какие действия необходимо проделать при создании сервлетов? 88 | 315. В каком случае требуется переопределять метод service()? 89 | 316. Есть ли смысл определять для сервлета конструктор? Каким образом лучше инициализировать данные? 90 | 317. Почему необходимо переопределить только init() метод без аргументов? 91 | 318. Какие наиболее распространенные задачи выполняются в контейнере сервлетов? 92 | 319. Что вы знаете о сервлетных фильтрах? 93 | 320. Зачем в сервлетах используются различные listener? 94 | 321. Когда стоит использовать фильтры сервлетов, а когда слушателей? 95 | 322. Как реализовать запуск сервлета одновременно с запуском приложения? 96 | 323. Как обработать в приложении исключения, выброшенные другим сервлетом? 97 | 324. Что представляет собой ServletConfig? 98 | 325. Что представляет собой ServletContext? 99 | 326. В чем отличия ServletContext и ServletConfig? 100 | 327. Для чего нужен интерфейс ServletResponse? 101 | 328. Для чего нужен интерфейс ServletRequest? 102 | 329. Что такое Request Dispatcher? 103 | 330. Как из одного сервлета вызвать другой сервлет? 104 | 331. Чем отличается sendRedirect() от forward()? 105 | 332. Для чего используются атрибуты сервлетов и как происходит работа с ними? 106 | 333. Каким образом можно допустить в сервлете deadlock? 107 | 334. Как получить реальное расположение сервлета на сервере? 108 | 335. Как получить информацию о сервере из сервлета? 109 | 336. Как получить IP адрес клиента на сервере? 110 | 337. Какие классы-обертки для сервлетов вы знаете? 111 | 338. В чем отличия GenericServlet и HttpServlet? 112 | 339. Почему HttpServlet класс объявлен как абстрактный? 113 | 340. Какие основные методы присутствуют в классе HttpServlet? 114 | 341. Стоит ли волноваться о многопоточной безопасности работая с сервлетами? 115 | 342. Какой метод HTTP не является неизменяемым? 116 | 343. Какие есть методы отправки данных с клиента на сервер? 117 | 344. В чем разница между методами GET и POST? 118 | 345. В чем разница между PrintWriter и ServletOutputStream? 119 | 346. Можно ли одновременно использовать в сервлете PrintWriter и ServletOutputStream? 120 | 347. Расскажите об интерфейсе SingleThreadModel. 121 | 348. Что означает URL encoding? Как это осуществить в Java? 122 | 349. Какие различные методы управления сессией в сервлетах вы знаете? 123 | 350. Что такое cookies? 124 | 351. Какие методы для работы с cookies предусмотрены в сервлетах? 125 | 352. Что такое URL Rewriting? 126 | 353. Зачем нужны и чем отличаются методы encodeURL() и encodeRedirectURL()? 127 | 354. Что такое «сессия»? 128 | 355. Как уведомить объект в сессии, что сессия недействительна или закончилась? 129 | 356. Какой существует эффективный способ удостоверится, что все сервлеты доступны только для пользователя с верной сессией? 130 | 357. Как мы можем обеспечить transport layer security для нашего веб приложения? 131 | 358. Как организовать подключение к базе данных, обеспечить журналирование в сервлете? 132 | 359. Какие основные особенности появились в спецификации Servlet 3? 133 | 360. Какие способы аутентификации доступны сервлету? 134 | 361. Что такое Java Server Pages (JSP)? 135 | 362. Зачем нужен JSP? 136 | 363. Опишите, как обрабатываются JSP страницы, начиная от запроса к серверу, заканчивая ответом пользователю. 137 | 364. Расскажите об этапах (фазах) жизненного цикла JSP. 138 | 365. Расскажите о методах жизненного цикла JSP. 139 | 366. Какие методы жизненного цикла JSP могут быть переопределены? 140 | 367. Как можно предотвратить прямой доступ к JSP странице из браузера? 141 | 368. Какая разница между динамическим и статическим содержимым JSP? 142 | 369. Как закомментировать код в JSP? 143 | 370. Какие существуют основные типы тегов JSP? 144 | 371. Что вы знаете о действиях JSP (Action tag и JSP Action Elements). 145 | 372. Взаимодействие JSP - сервлет - JSP. 146 | 373. Какие области видимости переменных существуют в JSP? 147 | 374. Какие неявные, внутренние объекты и методы есть на JSP странице? 148 | 375. Какие неявные объекты не доступны в обычной JSP странице? 149 | 376. Что вы знаете о PageContext и какие преимущества его использования? 150 | 377. Как сконфигурировать параметры инициализации для JSP? 151 | 378. Почему не рекомендуется использовать скриплеты (скриптовые элементы) в JSP? 152 | 379. Можно ли определить класс внутри JSP страницы? 153 | 380. Что вы знаете о Языке выражений JSP (JSP Expression Language – EL)? 154 | 381. Какие типы EL операторов вы знаете? 155 | 382. Назовите неявные, внутренние объекты JSP EL и их отличия от объектов JSP. 156 | 383. Как отключить возможность использования EL в JSP? 157 | 384. Как узнать тип HTTP метода используя JSP EL? 158 | 385. Что такое JSTL (JSP Standard tag library)? 159 | 386. Из каких групп тегов состоит библиотека JSTL? 160 | 387. Какая разница между и ? 161 | 388. Чем отличается от и директивы <%@include %>? 162 | 389. Как можно расширить функциональность JSP? 163 | 390. Что вы знаете о написании пользовательских JSP тегов? 164 | 391. Приведите пример использования собственных тегов. 165 | 392. Как сделать перенос строки в HTML средствами JSP? 166 | 393. Почему не нужно конфигурировать стандартные JSP теги в web.xml? 167 | 394. Как можно обработать ошибки JSP страниц? 168 | 395. Как происходит обработка ошибок с помощью JSTL? 169 | 396. Как конфигурируется JSP в дескрипторе развертывания. 170 | 397. Можно ли использовать Javascript на JSP странице? 171 | 398. Всегда ли создается объект сессии на JSP странице, можно ли отключить его создание? 172 | 399. Какая разница между JSPWriter и сервлетным PrintWriter? 173 | 400. Опишите общие практические принципы работы с JSP. 174 | 175 | 176 | 177 | 178 | 179 | 180 | -------------------------------------------------------------------------------- /Cобеседование по Java. Log.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | 17 | 18 | # Журналирование 19 | - [Cобеседование по Java. Разбор вопросов и ответов.](#cобеседование-по-java-разбор-вопросов-и-ответов) 20 | - [Журналирование](#журналирование) 21 | - [Какие существуют типы логов?](#какие-существуют-типы-логов) 22 | - [Из каких частей состоит система журналирования log4j?](#из-каких-частей-состоит-система-журналирования-log4j) 23 | - [Что такое _Logger_ в log4j?](#что-такое-logger-в-log4j) 24 | - [Что такое _Appender_ в log4j?](#что-такое-appender-в-log4j) 25 | - [Что такое _Layout_ в log4j?](#что-такое-layout-в-log4j) 26 | - [Перечислите уровни журналирования в log4j? Назовите порядок их приоритетности.](#перечислите-уровни-журналирования-в-log4j-назовите-порядок-их-приоритетности) 27 | - [Какие существуют способы конфигурирования log4j?](#какие-существуют-способы-конфигурирования-log4j) 28 | - [Источники](#источники) 29 | 30 | ## Какие существуют типы логов? 31 | + системы (System); 32 | + безопасности (Security); 33 | + приложения (Application, Buisness). 34 | 35 | > Пользователь входит в приложение, проверяется пароль. Это действие относится к безопасности (Security). Дальше он запускает какой-нибудь модуль. Это событие уровня приложения (Application). Модуль при старте обращается к другому модулю за какими-то дополнительными данными, производит какие-либо еще вызовы – это уже системные действия (System). 36 | 37 | [к оглавлению](#Журналирование) 38 | 39 | ## Из каких частей состоит система журналирования log4j? 40 | Система журналирования состоит из трёх основных частей: 41 | 42 | + управляющей журналированием - __logger__; 43 | + добавляющей в журнал - __appender__; 44 | + определяющей формат добавления - __layout__. 45 | 46 | [к оглавлению](#Журналирование) 47 | 48 | ## Что такое _Logger_ в log4j? 49 | __Logger__ представляет собой объект класса `org.apache.log4j.Logger`, который используется как управляющий интерфейс для журналирования сообщений с возможностью задавать уровень детализации. Именно logger проверяет нужно ли обрабатывать сообщение и если журналирование необходимо, то сообщение передаётся в appender, если нет - система завершает обработку данного сообщения. 50 | 51 | [к оглавлению](#Журналирование) 52 | 53 | ## Что такое _Appender_ в log4j? 54 | __Appender__ - это именованный объект журнала событий, реализующий интерфейс `org.apache.log4j.Appender` и добавляющий события в журнал. Appender вызывает разные вспомогательные инструменты - компоновщик, фильтр, обработчик ошибок (если они определены и необходимы). В ходе этой работы окончательно устанавливается необходимость записи сообщения, сообщению придаются окончательные содержание и форма. 55 | 56 | В log4j журнал может представлять: 57 | 58 | + консоль; 59 | + файл; 60 | + сокет; 61 | + объект класса реализующего `java.io.Writer` или `java.io.OutputStream`; 62 | + JDBC хранилище; 63 | + тему (topic) JMS; 64 | + NT Event Log; 65 | + SMTP; 66 | + Syslog; 67 | + Telnet. 68 | 69 | Наиболее часто используемые log4j appender-ы: 70 | 71 | + `org.apache.log4j.ConsoleAppender` - вывод в консоль; 72 | + `org.apache.log4j.FileAppender` - добавление в файл; 73 | + `org.apache.log4j.DailyRollingFileAppender` - добавление в файл с обновлением файла через заданный промежуток времени; 74 | + `org.apache.log4j.RollingFileAppender` - добавление в файл с обновлением файла по достижению определенного размера; 75 | + `org.apache.log4j.varia.ExternallyRolledFileAppender` - расширение _RollingFileAppender_ обновляющее файл по команде принятой с заданного порта; 76 | + `org.apache.log4j.net.SMTPAppender` - сообщение по SMTP; 77 | + `org.apache.log4j.AsyncAppender` - позволяет, используя отдельный поток, организовать асинхронную работу, когда сообщения фиксируются лишь при достижении определенного уровня заполненности промежуточного буфера. 78 | + `org.apache.log4j.nt.NTEventLogAppender` - добавление в NT Event Log; 79 | + `org.apache.log4j.net.SyslogAppender` - добавление в Syslog; 80 | + `org.apache.log4j.jdbc.JDBCAppender` - запись в хранилище JDBC; 81 | + `org.apache.log4j.lf5.LF5Appender` - сообщение передаётся в специальный GUI интерфейс LogFactor5 82 | + `org.apache.log4j.net.SocketAppender` - трансляция сообщения по указанному адресу и порту; 83 | + `org.apache.log4j.net.SocketHubAppender` - рассылка сообщения сразу нескольким удалённым серверам соединённым по заданному порту; 84 | + `org.apache.log4j.net.TelnetAppender` - отсылка сообщения по протоколу Telenet; 85 | + `org.apache.log4j.net.JMSAppender` - добавление сообщения в JMS. 86 | 87 | [к оглавлению](#Журналирование) 88 | 89 | ## Что такое _Layout_ в log4j? 90 | __Layout__ - наследник класса `org.apache.log4j.Layout` предоставляющий возможность форматирования сообщения перед добавлением в журнал. 91 | 92 | В log4j существуют следующие типы layout-ов: 93 | 94 | + `org.apache.log4j.SimpleLayout` - на выходе получается строка содержащая лишь уровень вывода и сообщение; 95 | + `org.apache.log4j.HTMLLayout` - форматирует сообщение в виде элемента HTML-таблицы; 96 | + `org.apache.log4j.xml.XMLLayout` - компанует сообщение в виде XML формате; 97 | + `org.apache.log4j.TTCCLayout` - на выходе сообщение дополняется информацией о времени, потоке, имени логгера и вложенном диагностическом контексте; 98 | + `org.apache.log4j.PatternLayout` / `org.apache.log4j.EnhancedPatternLayout` - настройка форматирования сообщения при помощи шаблона заданного пользователем. 99 | 100 | [к оглавлению](#Журналирование) 101 | 102 | ## Перечислите уровни журналирования в log4j? Назовите порядок их приоритетности. 103 | + __OFF__ - отсутствие журналирования; 104 | + __FATAL__ - фатальная ошибка; 105 | + __ERROR__ - ошибка; 106 | + __WARN__ - предупреждение; 107 | + __INFO__ - информация; 108 | + __DEBUG__ - детальная информация для отладки; 109 | + __TRACE__ – трассировка всех сообщений. 110 | 111 | Между уровнями логирования установлен следующий порядок приоритетов: 112 | 113 | `OFF < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < ALL` 114 | 115 | [к оглавлению](#Журналирование) 116 | 117 | ## Какие существуют способы конфигурирования log4j? 118 | Для того, чтобы log4j начал работать нужно предоставить ему конфигурацию. Это можно сделать несколькими путями: 119 | 120 | + Создать конфигурацию программно, т.е. получить logger, определить уровень журналирования, прикрепить appender и задать способ форматирования. 121 | + Указать файл или URL как аргумент при запуске java-машины `-Dlog4j.configuration=путь/к/файлу/конфигурации`, а затем прочитать его в программе при помощи `PropertyConfigurator.configure(...)`/ `DOMConfigurator.configure(...)` для формата `.properties` или `XML` соответственно. 122 | + Загрузить конфигурацию из файла в формате `XML` или `.properties`: log4j ищет файл конфигурации в classpath. Сначала ищется файл `log4j.xml` и, если таковой не найден, - файл `log4j.properties`. 123 | 124 | [к оглавлению](#Журналирование) 125 | 126 | # Источники 127 | + [Quizful](http://www.quizful.net/) 128 | + [Skipy](http://skipy.ru/useful/logging.html#log4j_concepts_logger) 129 | 130 | [Вопросы для собеседования](README.md) 131 | -------------------------------------------------------------------------------- /Cобеседование по Java. RESTful API.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | 1. Что такое RESTful API? 17 | `RESTful API (Representational State Transfer)` - это стиль архитектуры веб-сервисов, который использует протокол HTTP для передачи данных между клиентом и сервером. RESTful API предоставляет ресурсы, такие как изображения, тексты или другие объекты, которые могут быть запрашиваемы клиентами с использованием уникального идентификатора URL. 18 | 19 | Каждый ресурс может иметь несколько состояний (state), и клиент может изменять состояние ресурса, отправляя запросы на сервер с определенными методами HTTP, такими как GET, POST, PUT и DELETE. 20 | 21 | RESTful API является популярным подходом для создания веб-сервисов, так как он облегчает построение расширяемых и масштабируемых приложений, позволяющих клиентам работать с данными и услугами, предоставляемыми сервером, без необходимости знать детали его внутренней реализации. 22 | 23 | 2. Какие методы HTTP используются в RESTful API? 24 | 25 | В RESTful API используются следующие методы HTTP: 26 | 27 | + `GET` - используется для получения ресурса по указанному URL. 28 | + `POST` - используется для создания нового ресурса на сервере, часто с использованием данных, передаваемых в теле запроса. 29 | + `PUT` - используется для обновления существующего ресурса на сервере, часто с использованием данных, передаваемых в теле запроса. 30 | + `DELETE` - используется для удаления существующего ресурса на сервере. 31 | + `PATCH` - используется для частичного обновления существующего ресурса на сервере, часто с использованием данных, передаваемых в теле запроса. 32 | + `HEAD` - используется для получения метаданных о ресурсе, таких как заголовки, без получения самого ресурса. 33 | + `OPTIONS` - используется для получения информации о поддерживаемых методах HTTP для данного ресурса на сервере. 34 | 35 | Каждый из этих методов имеет свое предназначение и используется для выполнения определенных операций над ресурсами, которые предоставляются через API. 36 | 37 | 3. Какие коды ответа HTTP вы можете использовать при создании RESTful API? 38 | 4. Какие типы контента поддерживаются в RESTful API? 39 | 5. Какой формат данных используется в RESTful API? 40 | 6. Какие библиотеки вы использовали для создания RESTful API? 41 | 7. Как вы обрабатываете ошибки в RESTful API? 42 | 8. Как вы обеспечиваете безопасность в RESTful API? 43 | 9. Как вы тестируете RESTful API? 44 | 10. Как вы улучшаете производительность RESTful API? 45 | 11. Как вы выполняете аутентификацию и авторизацию в RESTful API? 46 | 12. Как вы реализуете версионирование RESTful API? 47 | 13. Как вы обеспечиваете кэширование в RESTful API? 48 | 14. Как вы реализуете файловые загрузки в RESTful API? 49 | 15. Как вы реализуете запросы поиска в RESTful API? 50 | 16. Как вы реализуете пагинацию в RESTful API? 51 | 17. Как вы реализуете сортировку результатов в RESTful API? 52 | 18. Как вы обрабатываете транзакции в RESTful API? 53 | 19. Как вы реализуете обработку исключений в RESTful API? 54 | 20. Как вы обеспечиваете безопасность паролей в RESTful API? 55 | 21. Как вы реализуете асинхронную обработку запросов в RESTful API? 56 | 22. Как вы управляете жизненным циклом объектов в RESTful API? 57 | 23. Как вы реализуете аутентификацию с помощью JWT в RESTful API? 58 | 24. Как вы обрабатываете HTTP-запросы в RESTful API? 59 | 25. Как вы реализуете CORS в RESTful API? 60 | 26. Как вы тестируете микросервисы в RESTful API? 61 | 27. Как вы обеспечиваете сбор метрик в RESTful API? 62 | 28. Как вы используете Swagger для документирования RESTful API? 63 | 29. Как вы реализуете тестирование производительности RESTful API? 64 | 30. Как вы реализуете отказоустойчивость RESTful API? 65 | 31. Как вы реализуете асинхронные вызовы сервисов в RESTful API? 66 | 32. Как вы управляете версиями в RESTful API? 67 | 33. Как вы реализуете поддержку отображения данных в RESTful API? 68 | 34. Как вы управляете зависимостями в RESTful API? 69 | 35. Как вы обеспечиваете защиту от атак в RESTful API? 70 | 36. Как вы реализуете перевод ошибок RESTful API на разные языки? 71 | 37. Как вы используете Swagger для тестирования RESTful API? 72 | 38. Как вы реализуете механизм автоматической генерации документации RESTful API? 73 | 39. Как вы управляете конфигурацией RESTful API? 74 | 40. Как вы реализуете поддержку локализации в RESTful API? 75 | 41. Как вы реализуете аутентификацию с помощью OAuth в RESTful API? 76 | 42. Как вы реализуете кэширование запросов в RESTful API? 77 | 43. Как вы реализуете поддержку нескольких форматов ответа в RESTful API? 78 | 79 | 44. Как вы обеспечиваете защиту от DDOS-атак в RESTful API? 80 | 45. Как вы реализуете асинхронную передачу файлов в RESTful API? 81 | 46. Как вы управляете транзакциями при работе с несколькими ресурсами в RESTful API? 82 | 47. Как вы реализуете поддержку каскадного удаления в RESTful API? 83 | 48. Как вы реализуете ограничение доступа к определенным методам в RESTful API? 84 | 49. Как вы реализуете логирование действий в RESTful API? 85 | 50. Как вы обеспечиваете безопасность передачи данных между клиентом и сервером в RESTful API? 86 | 51. Как вы реализуете обработку ошибок в RESTful API? 87 | 52. Как вы реализуете отслеживание состояния запросов в RESTful API? 88 | 53. Как вы реализуете поддержку динамических параметров в RESTful API? 89 | 54. Как вы реализуете перехват вызовов методов в RESTful API? 90 | 55. Как вы использовали Hibernate для работы с базой данных в RESTful API? 91 | 56. Как вы реализуете поддержку множественных запросов в RESTful API? 92 | 57. Как вы используете Spring Security для обеспечения безопасности в RESTful API? 93 | 58. Как вы реализуете параллельную обработку запросов в RESTful API? 94 | 59. Как вы реализуете поддержку работы с календарными данными в RESTful API? 95 | 60. Как вы использовали JPA для работы с базой данных в RESTful API? 96 | 61. Как вы реализуете асинхронную обработку запросов с помощью CompletableFuture в RESTful API? 97 | 62. Как вы управляете зависимостями между сервисами в RESTful API? 98 | 63. Как вы используете Spring Boot для создания RESTful API? 99 | 64. Как вы реализуете поддержку работы с изображениями в RESTful API? 100 | 65. Как вы реализуете поддержку работы с геоданными в RESTful API? 101 | 66. Как вы обеспечиваете целостность и безопасность хранения паролей в RESTful API? 102 | 67. Как вы реализуете поддержку работы с датами и временем в RESTful API? 103 | 68. Как вы реализуете поддержку работы с XML в RESTful API? 104 | 69. Как вы управляете версионированием базы данных в RESTful API? 105 | 70. Как вы реализуете поддержку работы со списками и коллекциями в RESTful API? 106 | 71. Как вы реализуете поддержку работы с множественными языками в RESTful API? 107 | 72. Как вы обрабатываете большие объемы данных в RESTful API? 108 | 73. Как вы реализуете поддержку работы с файлами Excel в RESTful API? 109 | 74. Как вы реализуете поддержку множественных форматов документов в RESTful API? 110 | 75. Как вы обеспечиваете безопасность и защиту данных в RESTful API? 111 | 76. Как вы реализуете поддержку работы с аудио- и видеоданными в RESTful API? 112 | 77. Как вы реализуете поддержку работы с данными о местоположении в RESTful API? 113 | 78. Как вы реализуете поддержку работы с данными в формате JSON-Patch в RESTful API? 114 | 79. Как вы обеспечиваете защиту от SQL-инъекций в RESTful API? 115 | 80. Как вы реализуете поддержку работы с данными в формате HAL в RESTful API? 116 | 81. Как вы реализуете поддержку работы с данными в формате Siren в RESTful API? 117 | 82. Как вы реализуете поддержку работы с данными в формате Collection+JSON в RESTful API? 118 | 83. Как вы реализуете поддержку работы со связанными ресурсами в RESTful API? 119 | 84. Как вы реализуете поддержку работы со справочниками в RESTful API? 120 | 85. Как вы обеспечиваете безопасность передачи данных между сервисами в RESTful API? 121 | 86. Как вы реализуете поддержку работы с аннотациями в RESTful API? 122 | 87. Как вы реализуете поддержку работы с часовыми поясами в RESTful API? 123 | 88. Как вы реализуете поддержку работы с периодическими задачами в RESTful API? 124 | 89. Как вы реализуете поддержку работы с множественными форматами авторизации в RESTful API? 125 | 90. Как вы реализуете поддержку работы с хранилищами данных в памяти в RESTful API? 126 | 91. Как вы реализуете поддержку работы с различными типами запросов (GET, POST, PUT, DELETE) в RESTful API? 127 | 92. Как вы обеспечиваете защиту от CSRF-атак в RESTful API? 128 | 93. Как вы реализуете поддержку работы с несколькими форматами данных в RESTful API? 129 | 94. Как вы реализуете поддержку работы с данными в формате YAML в RESTful API? 130 | 95. Как вы реализуете поддержку работы с множественными форматами сериализации объектов в RESTful API? 131 | 96. Как вы реализуете поддержку работы с данными в формате MessagePack в RESTful API? 132 | 97. Как вы реализуете поддержку работы с данными в формате BSON в RESTful API? 133 | 98. Как вы обеспечиваете безопасность передачи данных между микросервисами в RESTful API? 134 | 99. Как вы реализуете поддержку работы с асинхронными запросами в RESTful API? 135 | 100. Как вы обеспечиваете защиту от нежелательного доступа к ресурсам в RESTful API? 136 | 101. Как вы управляете сессиями пользователей в RESTful API? 137 | 102. Как вы реализуете поддержку работы с документацией в RESTful API? 138 | 103. Как вы реализуете поддержку работы с параметрами языка в RESTful API? 139 | 104. Как вы реализуете поддержку работы с данными в формате Thrift в RESTful API? 140 | 105. Как вы реализуете поддержку работы с данными в формате Avro в RESTful API? 141 | 106. Как вы реализуете поддержку работы с данными в формате Protocol Buffers в RESTful API? 142 | 107. Как вы обеспечиваете защиту от переполнения буфера в RESTful API? 143 | 108. Как вы реализуете поддержку работы с несколькими языками программирования в RESTful API? 144 | 109. Как вы реализуете поддержку работы с данными в формате Ion в RESTful API? 145 | 110. Как вы реализуете поддержку работы с данными в формате CBOR в RESTful API? 146 | 111. Как вы работаете с многопоточностью в RESTful API? 147 | 112. Как вы реализуете поддержку работы с прокси-серверами в RESTful API? 148 | 113. Как вы реализуете поддержку работы с бинарными данными в RESTful API? 149 | 114. Как вы реализуете поддержку работы с графическими данными в RESTful API? 150 | 115. Как вы реализуете поддержку работы с данными в формате GraphQL в RESTful API? 151 | 116. Как вы обеспечиваете безопасность хранения данных в RESTful API? 152 | 117. Как вы обеспечиваете масштабируемость и отказоустойчивость RESTful API? 153 | 118. Как вы реализуете поддержку кэширования в RESTful API? 154 | 119. Как вы реализуете поддержку работы с данными в формате GeoJSON в RESTful API? 155 | 120. Как вы реализуете поддержку работы с данными о погоде в RESTful API? 156 | 121. Как вы обеспечиваете безопасность передачи данных через HTTPS в RESTful API? 157 | 122. Как вы реализуете поддержку работы с различными форматами кодирования данных в RESTful API? 158 | 123. Как вы реализуете поддержку работы с данными в формате RDF в RESTful API? 159 | 124. Как вы реализуете поддержку работы с данными в формате Turtle в RESTful API? 160 | 125. Как вы реализуете поддержку работы с данными в формате N-Triples в RESTful API? 161 | 126. Как вы реализуете поддержку работы с данными в формате N-Quads в RESTful API? 162 | 127. Как вы реализуете поддержку работы с данными в формате JSON-LD в RESTful API? 163 | 128. Как вы реализуете поддержку работы с данными в формате Microdata в RESTful API? 164 | 129. Как вы реализуете поддержку работы с данными в формате RDFa в RESTful API? 165 | 130. Как вы управляете версионированием API в RESTful API? 166 | 131. Как вы обеспечиваете безопасность при работе с личными данными пользователей в RESTful API? 167 | 132. Как вы реализуете поддержку работы с запросами в формате OData в RESTful API? 168 | 133. Как вы реализуете поддержку работы с данными в формате EDI в RESTful API? 169 | 134. Как вы реализуете автоматическое тестирование RESTful API? 170 | 135. Как вы обеспечиваете мониторинг и анализ производительности RESTful API? 171 | 136. Как вы реализуете поддержку работы с данными в формате PDF в RESTful API? 172 | 137. Как вы реализуете поддержку работы с данными в формате DocBook в RESTful API? 173 | 138. Как вы реализуете поддержку работы с данными в формате reStructuredText в RESTful API? 174 | 139. Как вы реализуете поддержку работы с данными в формате Markdown в RESTful API? 175 | 140. Как вы реализуете поддержку работы с данными в формате AsciiDoc в RESTful API? 176 | 141. Как вы реализуете поддержку работы с данными в формате CSV в RESTful API? 177 | 142. Как вы реализуете поддержку работы с данными в формате TSV в RESTful API? 178 | 143. Как вы реализуете поддержку работы с данными в формате XML Schema в RESTful API? 179 | 144. Как вы реализуете поддержку работы с данными в формате Relax NG в RESTful API? 180 | 145. Как вы реализуете поддержку работы с данными в формате XSL-FO в RESTful API? 181 | 146. Как вы обеспечиваете безопасность при работе с платежными системами в RESTful API? 182 | 147. Как вы реализуете мониторинг и логирование ошибок в RESTful API? 183 | 148. Как вы реализуете поддержку работы со структурированными данными в RESTful API? 184 | 149. Как вы реализуете поддержку работы с данными в формате XQuery в RESTful API? 185 | 150. Как вы обеспечиваете безопасность при работе с сетевыми протоколами в RESTful API? 186 | 151. Как вы реализуете поддержку работы с данными в формате XBRL в RESTful API? 187 | 152. Как вы реализуете поддержку работы с данными в формате RTF в RESTful API? 188 | 153. Как вы реализуете поддержку работы с данными в формате SVG в RESTful API? 189 | 154. Как вы реализуете поддержку работы с данными в формате PNG в RESTful API? 190 | 155. Как вы реализуете поддержку работы с данными в формате JPEG в RESTful API? 191 | 156. Как вы реализуете поддержку работы с данными в формате GIF в RESTful API? 192 | 157. Как вы реализуете поддержку работы с данными в формате BMP в RESTful API? 193 | 158. Как вы реализуете поддержку работы с данными в формате ICO в RESTful API? 194 | 159. Как вы реализуете поддержку работы с данными в формате TIFF в RESTful API? 195 | 160. Как вы реализуете поддержку работы с данными в формате PSD в RESTful API? 196 | 161. Как вы обеспечиваете защиту от инъекций кода в RESTful API? 197 | 162. Как вы реализуете поддержку работы с данными в формате DICOM в RESTful API? 198 | 163. Как вы реализуете поддержку работы с данными в формате HL7 в RESTful API? 199 | 164. Как вы реализуете поддержку работы с данными в формате FHIR в RESTful API? 200 | 165. Как вы реализуете поддержку работы с данными в формате CDA в RESTful API? 201 | 166. Как вы реализуете поддержку работы с данными в формате CCD в RESTful API? 202 | 167. Как вы реализуете поддержку работы с данными в формате HAPI в RESTful API? 203 | 168. Как вы реализуете поддержку работы с данными в формате SMART в RESTful API? 204 | 169. Как вы реализуете поддержку работы с данными в формате OAuth в RESTful API? 205 | 170. Как вы обеспечиваете защиту от утечек информации в RESTful API? 206 | 171. Как вы реализуете поддержку работы с данными в формате DICOMweb в RESTful API? 207 | 172. Как вы реализуете поддержку работы с данными в формате XACML в RESTful API? 208 | 173. Как вы реализуете поддержку работы с данными в формате SAML в RESTful API? 209 | 174. Как вы реализуете поддержку работы с данными в формате OpenID Connect в RESTful API? 210 | 175. Как вы реализуете поддержку работы с данными в формате JWT в RESTful API? 211 | 176. Как вы реализуете поддержку работы с данными в формате JOSE в RESTful API? 212 | 177. Как вы реализуете поддержку работы с данными в формате SCIM в RESTful API? 213 | 178. Как вы обеспечиваете защиту от DoS-атак в RESTful API? 214 | 179. Как вы реализуете поддержку работы с данными в формате OpenAPI в RESTful API? 215 | 180. Как вы обеспечиваете безопасность при работе с генетическими данными в RESTful API? 216 | 181. Как вы реализуете поддержку работы с данными в формате BAM в RESTful API? 217 | 182. Как вы реализуете поддержку работы с данными в формате VCF в RESTful API? 218 | 183. Как вы реализуете поддержку работы с данными в формате BED в RESTful API? 219 | 184. Как вы реализуете поддержку работы с данными в формате GTF/GFF в RESTful API? 220 | 185. Как вы реализуете поддержку работы с данными в формате SAM в RESTful API? 221 | 186. Как вы реализуете поддержку работы с данными в формате FASTA/FASTQ в RESTful API? 222 | 187. Как вы реализуете поддержку работы с данными в формате BCF в RESTful API? 223 | 188. Как вы реализуете поддержку работы с данными в формате WIG в RESTful API? 224 | 189. Как вы реализуете поддержку работы с данными в формате BigWig/BigBed в RESTful API? 225 | 190. Как вы обеспечиваете безопасность при работе с медицинскими данными в RESTful API? 226 | 191. Как вы реализуете поддержку работы с данными в формате DICOM SR в RESTful API? 227 | 192. Как вы реализуете поддержку работы с данными в формате PACS в RESTful API? 228 | 193. Как вы реализуете поддержку работы с данными в формате FHIR RESTful API? 229 | 194. Как вы реализуете поддержку работы с данными в формате DICOMweb RESTful API? 230 | 195. Как вы реализуете поддержку работы с данными в формате C-FIND/C-MOVE в RESTful API? 231 | 196. Как вы реализуете поддержку работы с данными в формате HL7v2 в RESTful API? 232 | 197. Как вы реализуете поддержку работы с данными в формате HL7v3 в RESTful API? 233 | 198. Как вы реализуете поддержку работы с данными в формате CCD/CDA в RESTful API? 234 | 199. Как вы реализуете поддержку работы с данными в формате IHE XDS/XDR в RESTful API? 235 | 200. Как вы обеспечиваете безопасность при работе с финансовыми данными в RESTful API? 236 | -------------------------------------------------------------------------------- /Cобеседование по Java. TEST .md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | 17 | 18 | # Тестирование 19 | - [Cобеседование по Java. Разбор вопросов и ответов.](#cобеседование-по-java-разбор-вопросов-и-ответов) 20 | - [Тестирование](#тестирование) 21 | - [Что такое _«модульное тестирование»_?](#что-такое-модульное-тестирование) 22 | - [Что такое _«компонентное тестирование»_?](#что-такое-компонентное-тестирование) 23 | - [Что такое _«интеграционное тестирование»_?](#что-такое-интеграционное-тестирование) 24 | - [Чем интеграционное тестирование отличается от модульного?](#чем-интеграционное-тестирование-отличается-от-модульного) 25 | - [Какие существуют виды тестовых объектов?](#какие-существуют-виды-тестовых-объектов) 26 | - [Чем _stub_ отличается от _mock_?](#чем-stub-отличается-от-mock) 27 | - [Что такое _«фикстуры»_?](#что-такое-фикстуры) 28 | - [Какие аннотации фикстур существуют в JUnit?](#какие-аннотации-фикстур-существуют-в-junit) 29 | - [Для чего в JUnit используется аннотация `@Ignore`?](#для-чего-в-junit-используется-аннотация-ignore) 30 | - [Источники](#источники) 31 | 32 | ![Image alt](https://github.com/Shell26/Java-Developer/raw/master/img/Test1.png) 33 | 34 | ## Что такое _«модульное тестирование»_? 35 | __Модульное/компонентное тестирование (unit testing)__ - процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы. Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок. 36 | 37 | Модульные тесты можно условно поделить на две группы: 38 | 39 | + _тесты состояния (state based)_, проверяющие что вызываемый метод объекта отработал корректно, проверяя состояние тестируемого объекта после вызова метода. 40 | 41 | + _тесты взаимодействия (interaction tests)_, в которых тестируемый объект производит манипуляции с другими объектами. Применяются, когда требуется удостовериться, что тестируемый объект корректно взаимодействует с другими объектами. 42 | 43 | [к оглавлению](#Тестирование) 44 | 45 | ## Что такое _«компонентное тестирование»_? 46 | Проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.). Обычно проводится вызывая код, который необходимо проверить и при поддержке сред разработки, таких как фреймворки (frameworks - каркасы) для модульного тестирования или инструменты для отладки. 47 | 48 | По-существу компонентные и модульные тестирования представляют одно и тоже, разница лишь в том, что в компонентном тестировании в качестве параметров функций используют реальные объекты и драйверы, а в модульном тестировании - конкретные значения. 49 | 50 | [к оглавлению](#Тестирование) 51 | 52 | ## Что такое _«интеграционное тестирование»_? 53 | __Интеграционное тестирование (integration testing)__ — это тестирование, проверяющие работоспособность двух или более модулей системы в совокупности — то есть нескольких объектов как единого блока. В тестах взаимодействия же тестируется конкретный, определенный объект и то, как именно он взаимодействует с внешними зависимостями. 54 | 55 | [к оглавлению](#Тестирование) 56 | 57 | ## Чем интеграционное тестирование отличается от модульного? 58 | С технологической точки зрения интеграционное тестирование является количественным развитием модульного, поскольку так же, как и модульное тестирование, оперирует интерфейсами модулей и подсистем и требует создания тестового окружения, включая заглушки на месте отсутствующих модулей. Основная разница между модульным и интеграционным тестированием состоит в целях, то есть в типах обнаруживаемых дефектов, которые, в свою очередь, определяют стратегию выбора входных данных и методов анализа. 59 | 60 | > Допустим, есть класс, который при определенных условиях взаимодействует с web-сервисом через зависимый объект. И нам надо проверить, что определенный метод зависимого объекта действительно вызывается. Если в качестве зависимого класса передать: 61 | 62 | > + реальный класс, работающий с web-сервисом, то это будет интеграционное тестирование. 63 | 64 | > + заглушку, то это будет тестирование состояния. 65 | 66 | > + шпиона, а в конце теста проверить, что определенный метод зависимого объекта действительно был вызван, то это будет тест взаимодействия. 67 | 68 | [к оглавлению](#Тестирование) 69 | 70 | ## Какие существуют виды тестовых объектов? 71 | __пустышка (dummy)__ - объект, который обычно передается в тестируемый класс в качестве параметра, но не имеет поведения: с ним ничего не происходит и никакие его методы не вызываются. 72 | 73 | > Примером dummy-объектов являются new object(), null, «Ignored String» и т.д. 74 | 75 | __фальшивка (fake object)__ применяется в основном для ускорения запуска ресурсоёмких тестов и является заменой тяжеловесного внешнего зависимого объекта его легковесной реализацией. 76 | 77 | > Основные примеры — эмулятор базы данных (fake database) или фальшивый web-сервис. 78 | 79 | __заглушка (test stub)__ используется для получения данных из внешней зависимости, подменяя её. При этом заглушка игнорирует все данные поступающие из тестируемого объекта, возвращая заранее определённый результат. 80 | 81 | > Тестируемый объект использует чтение из конфигурационного файла? Тогда передаем ему заглушку `ConfigFileStub` возвращающую тестовые строки конфигурации без обращения к файловой системе. 82 | 83 | __шпион (test spy)__ - разновидность заглушки, которая умеет протоколировать сделанные к ней обращения из тестируемой системы, чтобы проверить их правильность в конце теста. При этом фиксируется количество, состав и содержание параметров вызовов. 84 | 85 | > Если существует необходимость проверки, что определённый метод тестируемого класса вызывался ровно 1 раз, то шпион - имменно то, что нам нужно. 86 | 87 | __фикция (mock object)__ похож на _шпиона_, но обладает расширенной функциональностью, заранее заданными поведением и реакцией на вызовы. 88 | 89 | [к оглавлению](#Тестирование) 90 | 91 | ## Чем _stub_ отличается от _mock_? 92 | _stub_ используется как заглушка сервисов, методов, классов и т.д. с заранее запрограммированным ответом на вызовы. 93 | 94 | _mock_ использует подмену результатов вызова, проверяет сам факт взаимодействия, протоколирует и контролирует его. 95 | 96 | [к оглавлению](#Тестирование) 97 | 98 | ## Что такое _«фикстуры»_? 99 | __Фикстуры (fixtures)__ - состояние среды тестирования, которое требуется для успешного выполнения теста. Основная задача фикстур заключается в подготовке тестового окружения с заранее фиксированным/известным состоянием, чтобы гарантировать повторяемость процесса тестирования. 100 | 101 | [к оглавлению](#Тестирование) 102 | 103 | ## Какие аннотации фикстур существуют в JUnit? 104 | 105 | + `@BeforeClass` - определяет код, который должен единожды выполниться перед запуском набора тестовых методов. 106 | + `@AfterClass` - код, выполняемый один раз после исполнения набора тестовых методов. 107 | + `@Before` - определяет код, который должен выполняться каждый раз перд запуском любого тестовым методом. 108 | + `@After` - код, выполняемый каждый раз после исполнения любого тестового метода. 109 | 110 | [к оглавлению](#Тестирование) 111 | 112 | ## Для чего в JUnit используется аннотация `@Ignore`? 113 | `@Ignore` указывает JUnit на необходимость пропустить данный тестовый метод. 114 | 115 | [к оглавлению](#Тестирование) 116 | 117 | # Источники 118 | + [Википедия](https://ru.wikipedia.org/wiki/Тестирование_программного_обеспечения) 119 | + [Хабрахабр](https://habrahabr.ru/post/116372/) 120 | + [Интуит](http://www.intuit.ru/department/se/testing/5/2.html) 121 | 122 | [Вопросы для собеседования](README.md) 123 | -------------------------------------------------------------------------------- /Cобеседование по Java. UML.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | 17 | # UML 18 | - [Cобеседование по Java. Разбор вопросов и ответов.](#cобеседование-по-java-разбор-вопросов-и-ответов) 19 | - [UML](#uml) 20 | - [Что такое _UML_?](#что-такое-uml) 21 | - [Что такое _«диаграмма»_, _«нотация»_ и _«метамодель»_ в UML?](#что-такое-диаграмма-нотация-и-метамодель-в-uml) 22 | - [Какие существуют типы диаграмм?](#какие-существуют-типы-диаграмм) 23 | - [Структурные диаграммы:](#структурные-диаграммы) 24 | - [Диаграммы поведения:](#диаграммы-поведения) 25 | - [Какие виды отношений существуют в структурной диаграмме классов?](#какие-виды-отношений-существуют-в-структурной-диаграмме-классов) 26 | - [Взаимосвязи классов](#взаимосвязи-классов) 27 | - [Взаимосвязи объектов классов](#взаимосвязи-объектов-классов) 28 | - [#Общие взаимосвязи](#общие-взаимосвязи) 29 | - [Источники](#источники) 30 | 31 | ## Что такое _UML_? 32 | __UML__ – это унифицированный графический язык моделирования для описания, визуализации, проектирования и документирования объектно-ориентированных систем. UML призван поддерживать процесс моделирования на основе объектно-ориентированного подхода, организовывать взаимосвязь концептуальных и программных понятий, отражать проблемы масштабирования сложных систем. 33 | 34 | Отличительной особенностью UML является то, что словарь этого языка образуют графические элементы. Каждому графическому символу соответствует конкретная семантика, поэтому модель, созданная одним человеком, может однозначно быть понята другим человеком или программным средством, интерпретирующим UML. Отсюда, в частности, следует, что модель системы, представленная на UML, может автоматически быть переведена на объектно-ориентированный язык программирования, то есть, при наличии хорошего инструментального средства визуального моделирования, поддерживающего UML, построив модель, мы получим и заготовку программного кода, соответствующего этой модели. 35 | 36 | [к оглавлению](#uml) 37 | 38 | ## Что такое _«диаграмма»_, _«нотация»_ и _«метамодель»_ в UML? 39 | __Диаграмма__ - графическое представление совокупности элементов модели в форме связного графа, вершинам и ребрам (дугам) которого приписывается определенная семантика 40 | 41 | __Нотация__ – совокупность символов и правила их применения, используются для представления понятий и связей между ними. 42 | Нотация диаграммы определяет способ представления, ассоциации, множественности. Причем эти понятия должны быть точно определены. 43 | 44 | __Метамодель__ – диаграмма, определяющая нотацию. 45 | Метамодель помогает понять, что такое хорошо организованная, т.е. синтаксически правильная, модель. 46 | 47 | [к оглавлению](#uml) 48 | 49 | ## Какие существуют типы диаграмм? 50 | ## Структурные диаграммы: 51 | __классов (Class diagram)__ описывает структуру системы, демонстрирующая классы системы, их атрибуты, методы и зависимости между классами. 52 | 53 | __объектов (Object diagram)__ демонстрирует полный или частичный снимок моделируемой системы в заданный момент времени. На диаграмме объектов отображаются экземпляры классов (объекты) системы с указанием текущих значений их атрибутов и связей между объектами. 54 | 55 | __компонентов (Component diagram)__ показывает разбиение программной системы на структурные компоненты и связи (зависимости) между компонентами. 56 | 57 | + __развёртывания/размещения (Deployment diagram)__ служит для моделирования работающих узлов и артефактов, развёрнутых на них. 58 | 59 | + __пакетов (Package diagram)__ используется для организации элементов в группы по какому-либо признаку с целью упрощения структуры и организации работы с моделью системы. 60 | 61 | + __профилей (Profile diagram)__ действует на уровне метамодели и показывает стереотип класса или пакета. 62 | 63 | + __композитной/составной структуры (Composite structure diagram)__ демонстрирует внутреннюю структуру класса и, по возможности, взаимодействие элементов (частей) его внутренней структуры. 64 | 65 | + __кооперации (Collaboration diagram)__ показывает роли и взаимодействие классов в рамках кооперации. 66 | 67 | ## Диаграммы поведения: 68 | __деятельности (Activity diagram)__ показывает разложение некоторой деятельности на её составные части. Под деятельностью понимается спецификация исполняемого поведения в виде координированного последовательного и параллельного выполнения подчинённых элементов — вложенных видов деятельности и отдельных действий, соединённых между собой потоками, которые идут от выходов одного узла к входам другого. Диаграммы деятельности используются при моделировании бизнес-процессов, технологических процессов, последовательных и параллельных вычислений. 69 | 70 | __состояний/автомата/конечного автомата (State Machine diagram)__ представляет конечный автомат с простыми состояниями, переходами и композитными состояниями. Конечный автомат (State machine) — спецификация последовательности состояний, через которые проходит объект или взаимодействие в ответ на события своей жизни, а также ответные действия объекта на эти события. Конечный автомат прикреплён к исходному элементу (классу, кооперации или методу) и служит для определения поведения его экземпляров. 71 | 72 | __вариантов использования/прецедентов (Use case diagram)__ отражает отношения существующие между актёрами и вариантами использования. Основная задача — представлять собой единое средство, дающее возможность заказчику, конечному пользователю и разработчику совместно обсуждать функциональность и поведение системы. 73 | 74 | __взаимодействия (Interaction diagram)__: 75 | 76 | + __коммуникации (Communication diagram)__ изображает взаимодействия между частями композитной структуры или ролями кооперации при этом явно указываются отношения между элементами (объектами), а время как отдельное измерение не используется (применяются порядковые номера вызовов). 77 | 78 | + __последовательности (Sequence diagram)__ показывает взаимодействия объектов, упорядоченные по времени их проявления. 79 | 80 | + __обзора взаимодействия (Interaction overview diagram)__ — разновидность диаграммы деятельности, включающая фрагменты диаграммы последовательности и конструкции потока управления. 81 | 82 | + __синхронизации (Timing diagram)__ — альтернативное представление диаграммы последовательности, явным образом показывающее изменения состояния на линии жизни с заданной шкалой времени. Может быть полезна в приложениях реального времени. 83 | 84 | [к оглавлению](#uml) 85 | 86 | ## Какие виды отношений существуют в структурной диаграмме классов? 87 | ## Взаимосвязи классов 88 | __Обобщение (Generalization)__ показывает, что один из двух связанных классов (подтип) является частной формой другого (супертипа), который называется обобщением первого. На практике это означает, что любой экземпляр подтипа является также экземпляром супертипа. Обобщение также известно как _наследование_, _«is a» взаимосвязь_ или _отношение «является»_. 89 | 90 | > «Табурет» является подтипом «Мебели». 91 | 92 | __Реализация (Implementation)__ — отношение между двумя элементами модели, в котором один элемент (клиент) реализует поведение, заданное другим (поставщиком). Реализация — отношение целое-часть. Поставщик, как правило является абстрактным классом или классом-интерфейсом. 93 | 94 | > «Кровать» реализует поведение «Мебели для сна» 95 | 96 | ## Взаимосвязи объектов классов 97 | __Зависимость (Dependency)__ обозначает такое отношение между классами, что изменение спецификации класса-поставщика может повлиять на работу зависимого класса, но не наоборот. 98 | 99 | > «Расписание занятий» имеет зависимость от «Списка предметов». При изменении списка предметов расписание занятий будет вынуждено изменится. Однако изменение расписания занятий никак не влияет на список предметов. 100 | 101 | __Ассоциация (Association)__ показывает, что объекты одной сущности (класса) связаны с объектами другой сущности таким образом, что можно перемещаться от объектов одного класса к другому. Является общим случаем композиции и агрегации. 102 | 103 | > «Студент» и «Университет» имеют ассоциацию т.к. студент может учиться в университете и этой ассоциации можно присвоить имя «учится в». 104 | 105 | __Агрегация (Aggregation)__ — это разновидность ассоциации в отношении между целым и его частями. Как тип ассоциации агрегация может быть именованной. Одно отношение агрегации не может включать более двух классов (контейнер и содержимое). Агрегация встречается, когда один класс является коллекцией или контейнером других. Причём по умолчанию, агрегацией называют агрегацию по ссылке, то есть когда время существования содержащихся классов не зависит от времени существования содержащего их класса. Если контейнер будет уничтожен, то его содержимое — нет. 106 | 107 | > «Студент» не является неотъемлемой частью «Группы», но в то же время, группа состоит из студентов, поэтому следует использовать агрегацию. 108 | 109 | __Композиция (Composition)__ — более строгий вариант агрегации. Известна также как агрегация по значению. Композиция имеет жёсткую зависимость времени существования экземпляров класса контейнера и экземпляров содержащихся классов. Если контейнер будет уничтожен, то всё его содержимое будет также уничтожено. 110 | 111 | > «Факультет» является частью «Университета» и факультет без университета существовать не может, следовательно здесь подходит композиция. 112 | 113 | ## #Общие взаимосвязи 114 | __Зависимость__ — это слабая форма отношения использования, при котором изменение в спецификации одного влечёт за собой изменение другого, причём обратное не обязательно. Возникает, когда объект выступает, например, в форме параметра или локальной переменной. Существует несколько именованных вариантов. Зависимость может быть между экземплярами, классами или экземпляром и классом. 115 | 116 | __Уточнение отношений__ имеет отношение к уровню детализации. Один пакет уточняет другой, если в нём содержатся те же самые элементы, но в более подробном представлении. 117 | 118 | __Мощность/кратность/мультипликатор отношения__ означает число связей между каждым экземпляром класса (объектом) в начале линии с экземпляром класса в её конце. Различают следующие типичные случаи: 119 | 120 | | нотация | объяснение | пример | 121 | |:----------:|:--------------------------:|:---------------------------------------------:| 122 | | 0..1 | Ноль или один экземпляр | кошка имеет или не имеет хозяина | 123 | | 1 | Обязательно один экземпляр | у кошки одна мать | 124 | | 0..* или * | Ноль или более экземпляров | у кошки могут быть, а может и не быть котят | 125 | | 1..* | Один или более экземпляров | у кошки есть хотя бы одно место, где она спит | 126 | 127 | [к оглавлению](#uml) 128 | 129 | # Источники 130 | + [Википедия](https://ru.wikipedia.org/wiki/UML) 131 | + [Информикус](http://www.informicus.ru/) 132 | 133 | [Вопросы для собеседования](README.md) 134 | -------------------------------------------------------------------------------- /Cобеседование по Java. XML.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | 17 | # XML 18 | - [Cобеседование по Java. Разбор вопросов и ответов.](#cобеседование-по-java-разбор-вопросов-и-ответов) 19 | - [XML](#xml) 20 | - [Что такое _XML_?](#что-такое-xml) 21 | - [Что такое _DTD_?](#что-такое-dtd) 22 | - [Чем _well-formed XML_ отличается от _valid XML_?](#чем-well-formed-xml-отличается-от-valid-xml) 23 | - [Что такое «_пространство имен_» в XML?](#что-такое-пространство-имен-в-xml) 24 | - [Что такое XSD? В чём его преимущества перед XML DTD?](#что-такое-xsd-в-чём-его-преимущества-перед-xml-dtd) 25 | - [Какие типы существуют в XSD?](#какие-типы-существуют-в-xsd) 26 | - [Какие вы знаете методы чтения XML? Опишите сильные и слабые стороны каждого метода.](#какие-вы-знаете-методы-чтения-xml-опишите-сильные-и-слабые-стороны-каждого-метода) 27 | - [Когда следует использовать _DOM_, а когда _SAX_, _StAX_ анализаторы?](#когда-следует-использовать-dom-а-когда-sax-stax-анализаторы) 28 | - [Какие вы знаете способы записи XML?](#какие-вы-знаете-способы-записи-xml) 29 | - [Что такое _JAXP_?](#что-такое-jaxp) 30 | - [Что такое _XSLT_?](#что-такое-xslt) 31 | - [Источники](#источники) 32 | 33 | ## Что такое _XML_? 34 | __XML, eXtensible Markup Language (расширяемый язык разметки)__ - язык с простым формальным синтаксисом, хорошо приспособленный для создания и обработки документов программами и одновременно удобный для чтения и создания документов человеком. 35 | 36 | XML расширяем, он не фиксирует разметку, используемую в документах и разработчик волен создавать разметку в соответствии с потребностями конкретной области, будучи ограниченным лишь синтаксическими правилами языка. 37 | 38 | [к оглавлению](#xml) 39 | 40 | ## Что такое _DTD_? 41 | __DTD, Document Type Definition (определение типа документа)__ — это заранее определённый свод правил, задающий связи между элементами и атрибутами. 42 | 43 | > Например, DTD для HTML гласит, что тэг `DIV` должен быть внутри тэга `BODY` и может встречаться многократно, `TITLE` — в `HEAD` и всего один раз, а `SCRIPT` – и там, и там сколь угодно раз. 44 | 45 | DTD обычно описывается непосредственно в документе в виде строки-формулировки, начинающейся с `` или отдельном файле. 46 | 47 | [к оглавлению](#xml) 48 | 49 | ## Чем _well-formed XML_ отличается от _valid XML_? 50 | В зависимости от уровня соответствия стандартам документ может быть «well-formed» («правильно построенный»), либо «valid» («действительный»). 51 | 52 | Основные признаки _well-formed XML_ следуют из формального описания стандарта: 53 | 54 | + Документ имеет ровно один корневой элемент, в котором лежат все остальные. То есть, `......` - это не XML-документ. 55 | + Все открытые теги обязаны быть закрыты. HTML, например, допускает не закрывать многие теги (`

`, ``, `

  • `, `` и многие другие). В XML так делать нельзя. 56 | + Для одиночных тегов (типа `
    `) , чтобы отличать их от открывающих, предусмотрена специальная запись: `
    `. Но можно написать и полностью `

    `. 57 | + Имена тегов регистрозависимые. Если вы открываете тег ``, то его надо закрывать именно таким же, `` не допускается. 58 | + Теги не могут нарушать вложенность. Вот такого не должно быть: `...`. 59 | + Все атрибуты тегов обязаны быть заключены в двойные кавычки (`"`). 60 | + Есть три символа - `<`, `>` и `&`, которые обязаны быть экранированы везде с помощью `<`, `>` и `&`. Внутри атрибутов надо экранировать еще и двойную кавычку с помощью `"`. 61 | + Все символы в документе обязаны соответствовать заявленной кодировке. 62 | 63 | Документ является _valid_, если он сформирован с соблюдением всех синтаксических правил корректности конкретного XML, т.е. соответствует _DTD_. 64 | 65 | __*well-formed XML* - корректен синтаксически (может быть разобран парсером), а _valid XML_ - корректен как синтаксически так и семантически (удовлетворяет правилам заранее описанных словаря и грамматики (DTD)).__ 66 | 67 | [к оглавлению](#xml) 68 | 69 | ## Что такое «_пространство имен_» в XML? 70 | __Пространство имён XML (XML namespace)__ - это идентифицируемая с помощью ссылки URI коллекция имен, используемых в XML документах для обозначения типов элементов и именования атрибутов. Пространство имен XML отличается от тех «пространств имен», которые обычно используются в компьютерных дисциплинах, тем, что в варианте для XML оно имеет внутреннюю структуру, и, с математической точки зрения, набором не является. 71 | 72 | > Пространства имён объявляются с помощью XML атрибута `xmlns`, значением которого должен быть _URI_ и префикса, однозначно идентифицирующего пространство имён каждого элемента. 73 | 74 | Все имена элементов в пределах пространства имён должны быть уникальны. 75 | 76 | В общем случае пространство имён XML не требует, чтобы был определён его словарь. 77 | 78 | XML-документ может содержать имена элементов и атрибутов из нескольких словарей XML. В каждом словаре задано своё пространство имён — так разрешается проблема неоднозначности имён элементов и атрибутов. 79 | 80 | [к оглавлению](#xml) 81 | 82 | ## Что такое XSD? В чём его преимущества перед XML DTD? 83 | __XSD, XML Schema Definition, XML Schema (XML схема)__ — язык описания структуры XML-документа. В частности, XML Schema описывает: 84 | 85 | + _словарь_ - имена элементов и атрибутов; 86 | + _модель содержания_ - взаимосвязи между элементами и атрибутами, а также их 87 | + _структуру_ документа; 88 | + используемые _типы данных_. 89 | 90 | __Преимущества XSD перед DTD__ заключаются в следующем: 91 | 92 | + DTD, в отличии от XSD, не является XML и имеет свой собственный синтаксис. В связи с этим могут возникать разнообразные проблемы с кодировкой и верификацией XML-документов. 93 | 94 | + При использовании XSD XML-парсер может проверить не только правильность синтаксиса XML документа, но также его структуру, модель содержания и типы данных. В XML DTD существует лишь один тип данных – строка и если, например, в числовом поле будет текст, то документ всё же сможет пройти верификацию, так как XML DTD не сможет проверить тип данных. 95 | 96 | + Нельзя поставить в соответствие одному XML документу больше одного DTD. А следовательно и верифицировать документ можно лишь одним DTD описанием. XSD расширяем, и позволяет подключать несколько словарей для описания типовых задач. 97 | 98 | + XSD обладает встроенными средствами документирования, позволяющими создавать самодостаточные документы, не требующие дополнительного описания. 99 | 100 | [к оглавлению](#xml) 101 | 102 | ## Какие типы существуют в XSD? 103 | __Простой тип__ - это определение типа для значения, которое может использоваться в качестве содержимого элемента или атрибута. Этот тип данных не может содержать элементы или иметь атрибуты. 104 | 105 | ```xsd 106 | 107 | ... 108 | 45.50 109 | ``` 110 | 111 | __Сложный тип__ - это определение типа для элементов, которые могут содержать атрибуты и другие элементы. 112 | 113 | ```xsd 114 | 115 | 116 | 117 | 118 | 119 | ... 120 | 45.50 121 | ``` 122 | [к оглавлению](#xml) 123 | 124 | ## Какие вы знаете методы чтения XML? Опишите сильные и слабые стороны каждого метода. 125 | __DOM (Document Object Model)__ - _объектный_ - считывает XML, воссоздавая его в памяти в виде объектной структуры при этом XML документ представляется в виде набора тегов – узлов. Каждый узел может иметь неограниченное количество дочерних узлов. Каждый дочерний тоже может содержать несколько уровней потомков или не содержать их вовсе. Таким образом в итоге получается некое дерево. 126 | 127 | > ➖ Низкая скорость работы. 128 | 129 | > ➖ Расходует много памяти. 130 | 131 | > ➕ Прост в программировании. 132 | 133 | > ➕ Если в XML много объектов с перекрёстными ссылками друг на друга, достаточно дважды пройтись по документу: первый раз создать объекты без ссылок и заполнить словарь «название-объект», второй раз — восстановить ссылки. 134 | 135 | > ➕ При ошибке в XML в памяти остаётся полусозданная структура XML, которая будет автоматически уничтожена. 136 | 137 | > ➕ Пригоден как для чтения так и для записи. 138 | 139 | __SAX (Simple API for XML)__ _событийный_ - читает XML документ, реагируя на появляющиеся события (открывающий или закрывающий тег, строку, атрибут) вызовом предоставляемых приложением обработчиков событий. При этом, в отличии от DOM, не сохраняет документ в памяти. 140 | 141 | > ➕ Высокая скорость работы 142 | 143 | > ➕ Расходует мало памяти. 144 | 145 | > ➗ Довольно сложен в программировании. 146 | 147 | > ➖ Если в XML много объектов с перекрёстными ссылками друг на друга, надо организовать временное хранение строковых ссылок, чтобы потом, когда документ будет считан, преобразовать в указатели. 148 | 149 | > ➖ При ошибке в XML в памяти остаётся полусозданная структура предметной отрасли; программист должен своими руками корректно уничтожить её. 150 | 151 | > ➖ Пригоден только для чтения. 152 | 153 | __StAX (Stream API for XML)__ _потоковый_ - состоящий из двух наборов API для обработки XML, которые обеспечивают разные уровни абстракции. API с использованием курсора позволяет приложениям работать с XML как с потоком лексем (или событий); приложение может проверить статус анализатора и получить информацию о последней проанализированной лексеме, а затем перейти к следующей. Второй, высокоуровневый API, использующий итераторы событий, позволяет приложению обрабатывать XML как серию объектов событий, каждый из которых взаимодействует с фрагментом XML-структуры приложения. Всё, что требуется от приложения - это определить тип синтаксически разобранного события, отнести его к соответствующему конкретному типу и использовать соответствующие методы для получения информации, относящейся к событию. 154 | 155 | > ➗ Сохраняет преимущества, которые есть в SAX по сравнению с DOM. 156 | 157 | > ➕ Не основан на обратных вызовах обработчиков, приложению не придется обслуживать эмулированное состояние анализатора, как это происходит при использовании SAX. 158 | 159 | > ➖ Пригоден только для чтения. 160 | 161 | [к оглавлению](#xml) 162 | 163 | ## Когда следует использовать _DOM_, а когда _SAX_, _StAX_ анализаторы? 164 | 165 | DOM - естественный выбор, когда объектом предметной области является сам XML: когда нужно знать и иметь возможность изменять структуру документа, а также в случае многократного использования информации из документа. 166 | 167 | Для быстрого одноразового чтения оптимальным является использование SAX или StAX. 168 | 169 | [к оглавлению](#xml) 170 | 171 | ## Какие вы знаете способы записи XML? 172 | 173 | __Прямая запись__ - пишет XML тег за тегом, атрибут за атрибутом. 174 | 175 | > ➕ Высокая скорость работы. 176 | 177 | > ➕ Экономия памяти: при использовании не создаётся промежуточных объектов. 178 | 179 | > ➖ Пригоден только для записи. 180 | 181 | __Запись DOM (Document Object Model)__ - создаёт полную структуру XML и только потом записывает её. 182 | 183 | > ➖ Низкая скорость работы. 184 | 185 | > ➖ Не оптимальный расход памяти. 186 | 187 | > ➕ Пригоден как для записи так и для чтения. 188 | 189 | [к оглавлению](#xml) 190 | 191 | ## Что такое _JAXP_? 192 | __JAXP, The Java API for XML Processing (Java API для обработки XML)__ — набор API, упрощающих обработку XML данных в программах написанных на Java. Содержит реализации DOM, SAX и StAX парсеров, поддерживает XSLT и возможность работать с DTD. 193 | 194 | [к оглавлению](#xml) 195 | 196 | ## Что такое _XSLT_? 197 | __XSLT, eXtensible Stylesheet Language Transformations__ — язык преобразования XML-документов. 198 | 199 | XSLT создавался для применения в _XSL (eXtensible Stylesheet Language)_ - языке стилей для XML. Во время XSL-преобразования XSLT-процессор считывает XML-документ и таблицу(ы) стилей XSLT. На основе инструкций, которые процессор находит в таблице(ах) стилей XSLT, он вырабатывает новый XML-документ или его фрагмент. 200 | 201 | [к оглавлению](#xml) 202 | 203 | # Источники 204 | + [Википедия](https://ru.wikipedia.org/wiki/XML) 205 | + [CIT Forum](http://citforum.ru/internet/xnamsps/index.shtml#ns-decl) 206 | + [Quizful](http://www.quizful.net/interview/java/xml-and-parsers) 207 | 208 | [Вопросы для собеседования](README.md) 209 | -------------------------------------------------------------------------------- /Cобеседование по Java. Алгоритмы.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | 12 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 13 | 14 | Если вам интересно мое резюме: https://github.com/DEBAGanov 15 | 16 | 17 | # Алгоритмы 18 | - [Cобеседование по Java. Разбор вопросов и ответов.](#cобеседование-по-java-разбор-вопросов-и-ответов) 19 | - [Алгоритмы](#алгоритмы) 20 | - [Big O](#big-o) 21 | - [ArrayList vs LinkedList](#arraylist-vs-linkedlist) 22 | - [Устройство HashMap](#устройство-hashmap) 23 | - [Рекурсия](#рекурсия) 24 | - [Рекурсия vs Iterator](#рекурсия-vs-iterator) 25 | - [Виды сортировок и их сравнение](#виды-сортировок-и-их-сравнение) 26 | - [Виды поиска и их сравнение](#виды-поиска-и-их-сравнение) 27 | - [Жадный алгоритм](#жадный-алгоритм) 28 | - [Queue, Deque, Stack, Heap](#queue-deque-stack-heap) 29 | - [EnumSet](#enumset) 30 | - [Бинарное дерево](#бинарное-дерево) 31 | - [Красно-черное дерево](#красно-черное-дерево) 32 | - [Мемоизация](#мемоизация) 33 | 34 | ## Big O 35 | Концепция Big O показывает, какое количество шагов (тактов процессора) необходимо сделать, чтобы полностью завершить алгоритм. 36 | 37 | Big O показывает верхную границу _зависимости между входными параметрами функции_ и _количеством операций_, которые выполнит процессор. Т.е. описывается только скорость роста функции. Если алгоритм описывается как O(2N), он все равно будет O(n), посколько константы можно отбросить. Не важно, сколько раз будет повторятся алгоритм - бесконечность (n) или две бесконечности (2n) - это все равно будет бесконечность. 38 | 39 | Концепция Big O помогает видеть и исправлять неоптимальный код. 40 | 41 | ```java 42 | 43 | время 44 | . 45 | / \ / 46 | | / 47 | | / O(n) 48 | | / 49 | | / 50 | | / 51 | | / 52 | |-/------------------- O(1) 53 | |/ 54 | | 55 | o——————————————————> 56 | кол-во бит 57 | ``` 58 | __O(n)__ - Больше байт - дольше передавать. Зависимость от количества элементов. В функции это кол-во вызовов функции внутри себя 59 | 60 | __О(1)__ - Размер файла не важен, скорость постоянна 61 | 62 | __Рекурсивная функция:__ функция вызывает сама себя. Чем больше n, тем больше раз функция вызовет сама себя. 63 | ```java 64 | int sum(int n) { 65 | if (n == 1) return 1; 66 | return n + sum(n - 1); 67 | } 68 | ``` 69 | __Линейная функция:__ кол-во выполнений функции зависит от n. 70 | ```java 71 | int pairSunSequence(int n) { 72 | int sum = 0: 73 | for (int i = 0; i < n; i++) { 74 | sum += pairSum(i, i + 1); 75 | } 76 | return sum; 77 | } 78 | 79 | int pairSum(int a, int b) { 80 | return a + b; 81 | } 82 | ``` 83 | __Отбрасывание неважной сложности:__ если одно значение n значительно (в 2 раза) меньше другого значения n^2, то меньшуу n можно отбросить, т.к. она слабо влияет на рост скорости фукнции. 84 | 85 | O(n^2 + n) = O(n^2) 86 | 87 | O(n + log n) = O(n), т.к log(n) меньше n 88 | 89 | O(5 * 2^n + 10 * n^100) = O(2^n) 90 | 91 | O(n^2 + b) = O(n^2 + b), мы не может упростить, пока ничего не знаем о b. Оно может быть <, > или = n 92 | 93 | __Сложение и умножение сложностей__: Если функции вызываются последовательно, то сложности складываются (они не зависят друг от друга). Если функции выполняются одна в другой (зависят друг от друга) то сложности умножаются. 94 | 95 | __Log n__ - для алгоритма, где на каждой итерации берется половина элементов - сложность будет включать O(log n). 96 | 97 | ## ArrayList vs LinkedList 98 | Класс Получение Поиск Вставка Удаление 99 | 100 | ArrayList O(1) O(n) O(n) / O(1) O(n) 101 | LinkedList O(n) O(n) O(1) O(1) 102 | 103 | __ArrayList__ реализован внутри в виде обычного массива. Поэтому при вставке элемента в середину, приходится сначала сдвигать на один все элементы после него, а уже затем в освободившееся место вставлять новый элемент. ОДНАКО вставка в конец списка в среднем производится так же за постоянное время. В среднем потому, что массив имеет определенный начальный размер n (в коде это параметр capacity), по умолчанию n = 10, при записи n+1 элемента, будет создан новый массив размером (n * 3) / 2 + 1, в него будут помещены все элементы из старого массива + новый, добавляемый элемент. В итоге получаем, что при добавлении элемента при необходимости расширения массива, время добавления будет значительно больше, нежели при записи элемента в готовую пустую ячейку. Удаление последнего элемента происходит за константное время. 104 | 105 | Зато в нем быстро реализованы взятие и изменение элемента – операции get, set, так как в них мы просто обращаемся к соответствующему элементу массива. 106 | 107 | __LinkedList__ реализован в виде двусвязного списка: набора отдельных элементов, каждый из которых хранит ссылку на следующий и предыдущий элементы. Чтобы вставить элемент в середину такого списка, достаточно поменять ссылки его будущих соседей. А вот чтобы получить элемент с номером 130, нужно пройтись последовательно по всем объектам от 0 до 130. Другими словами операции set и get тут реализованы очень медленно. 108 | 109 | Если вставлять (или удалять) в середину коллекции много элементов, то лучше использовать LinkedList. Во всех остальных случаях – ArrayList. LinkedList занимает в памяти разрозненные ячейки, а значения ArrayList в памяти хранятся единым массивом. 110 | 111 | ## Устройство HashMap 112 | HashMap — основан на хэш-таблицах, реализует интерфейс Map (что подразумевает хранение данных в виде пар ключ/значение). Ключи и значения могут быть любых типов, в том числе и null. 113 | 114 | Внутри HashMap содержатся массив Bucket (по умолчанию их 16, коэфицент заполнения 0,75 - указывает, когда нужно увеличить массив бакетов). Они используется для хранения узлов (Nodes). Два или более узла могут иметь один и тот-же bucket. 115 | 116 | Node представляет класс, содержащий следующие объекты: 117 | + int — хэш 118 | + K — ключ 119 | + V — значение 120 | + Next — следующий элемент 121 | 122 | При добавление ключ-значения в хешмапу проверяем существует ли ключ. Если ключ не существует (null), значение помещается в таблицу на нулевую позицию, потому что хеш-код для значения null, это – всегда 0. Дальше высчитывается хеш-код ключа. Ключ делится на количество бакетов, остаток от деления будет номером бакета, куда кладется этот ключ-значение. Ключ-значение оборачивается в Node. Если Node добавляется в бакет, в котором уже есть другая Node, они сравнивают ключи по hashCode() и equals(). Если ключи идентичны - перезаписываются, если нет - новая Node добавляется в начало цепочки и в ней создается ссылка на старую Node и они образуют односвязный список. При этом если Node будут записываться только в один бакет, хешмапа выродится в связный список. 123 | 124 | __Изменения в Java 8__ 125 | Как мы уже знаем в случае возникновения коллизий объект node сохраняется в структуре данных "связанный список" и метод equals() используется для сравнения ключей. Это сравнения для поиска верного ключа в связанном списке -линейная операция и в худшем случае сложность равнa O(n). Для исправления этой проблемы в Java 8 после достижения определенного порога (__если в бакете >= 7 эелементов, а самих бакетов меньше 64__. иначе вместо перехода к древовидной структуре будет вызван метод resize() для увеличения размера хеш-таблицы с перераспределением элементов.) Вместо связанных списков используются сбалансированные деревья. Это означает, что HashMap в начале сохраняет объекты в связанном списке, но после того, как колличество элементов в хэше достигает определенного порога происходит переход к сбалансированным деревьям. Что улучшает производительность в худшем случае с O(n) до O(log n). 126 | 127 | __В итоге__ 128 | + Добавление элемента выполняется за время O(1), потому как новые элементы вставляются в начало цепочки; 129 | + Операции получения и удаления элемента могут выполняться за время O(1), если хэш-функция равномерно распределяет элементы и отсутствуют коллизии. Среднее же время работы будет Θ(1 + α), где α — коэффициент загрузки. В самом худшем случае, время выполнения может составить Θ(n) (все элементы в одной цепочке); 130 | 131 | ## Рекурсия 132 | Рекурсия - метод вызывает сам себя, но может вернуть код другого выражения. Не использует стек. 133 | 134 | Хвостовая рекурсия - метод возвращает только сам себя. Используется стек. 135 | 136 | Базис рекурсии – условие выхода из блока рекурсивных вызовов – базисное решение задачи, при условиях, когда нет необходимости вызывать рекурсию. 137 | 138 | ## Рекурсия vs Iterator 139 | Итератор - реализация класса, рекурсия - реализация методом. Итерируем пока не закончится весь список данных, рекурсия существует пока вызывает сама себя. 140 | 141 | Рекурсивный метод работает FILO, а итератор FIFO. 142 | 143 | Главное преимущество рекурсивных методов заключается в том, что их можно применять для реализации более простых и понятных вариантов некоторых алгоритмов, чем их итерационные аналоги. Например, алгоритм быстрой сортировки очень трудно реализовать итерационным способом. А некоторые виды алгоритмов, связанных с искусственным интеллектом, легче всего реализовать с помощью рекурсивных решений. 144 | 145 | Рекурсия используется в глубинном поиске в бинарных деревьях, а итерация в широком поиске. 146 | 147 | ## Виды сортировок и их сравнение 148 | Быстрая сортировка - Выбирает из массива элемент, называемый опорным. Это может быть любой из элементов массива. Сравнивает все остальные элементы с опорным и переставить их в массиве так, чтобы разбить массив на два непрерывных отрезка, следующих друг за другом: «элементы меньшие опорного», «равные и большие». Для отрезков «меньших» и «больших» значений выполняет рекурсивно ту же последовательность операций, пока длина отрезка больше единицы. __Сложность алгоритма: в среднем O(n log n), в худшем O(n^2)__ 149 | 150 | Сортировка пузырьком - простейший, но эффективен он лишь для небольших массивов. __Сложность O(n^2)__. Алгоритм состоит из повторяющихся проходов по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются {\displaystyle N-1}N-1 раз или до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При каждом проходе алгоритма по внутреннему циклу, очередной наибольший элемент массива ставится на своё место в конце массива рядом с предыдущим «наибольшим элементом», а наименьший элемент перемещается на одну позицию к началу массива («всплывает» до нужной позиции, как пузырёк в воде — отсюда и название алгоритма). 151 | 152 | Шейкерная сортировка - аналогична пузырьковой, но при движении от конца массива к началу минимальный элемент «всплывает» на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо. Кроме того, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, её можно исключить из рассмотрения. __Сложность O(n^2)__ 153 | 154 | Сортировка выбором - поиск наименьшего или наибольшего элемента и помещение его в начало или конец упорядоченного списка. __Сложность O(n^2)__ 155 | 156 | Сортировка вставками - элементы входной последовательности просматриваются по одному, и каждый новый поступивший элемент размещается в подходящее место среди ранее упорядоченных элементов. __Сложность O(n^2)__ 157 | 158 | Гномья сортировка - похожа на сортировку вставками, но в отличие от последней перед вставкой на нужное место происходит серия обменов, как в сортировке пузырьком. __Сложность O(n^2)__ 159 | 160 | Сортировка слиянием - упорядочивает списки (или другие структуры данных, доступ к элементам которых можно получать только последовательно, например — потоки) в определённом порядке. Сначала делим список на кусочки (по 1 элементу), затем сравниваем каждый элемент с соседним, сортируем и объединяем. В итоге, все элементы отсортированы и объединены вместе. __Сложность алгоритма:O(n log n)__ 161 | 162 | ## Виды поиска и их сравнение 163 | Линейный - перебор всех значений. O(n) 164 | 165 | Бинарный (двоичный) - берем средний элемент из массива. Если искомый элемент не равен этому среднему, продолжаем поиск - если искомый элемент меньше, идем в левую половину массива, если искомый больше - идем в правую половину O(log n). Там тоже берем средний элемент и сравниваем с искомым. И так до тех пор, пока не найдем искомый элемент или пока не останется последний элемент массива. Если последний элемент не равен искомому, то искомого элемента в данном массиве не существует. 166 | 167 | Поиск в ширину - описывается итератором: метод обхода дерева, при котором поиск ведется по линии "ширине", то есть сначала вершина дерева, потом все эелементы слева направо на втором уровне, потом на третьем и т.д. 168 | 169 | Поиск в глубинну - описывается рекурсивно: перебираем все исходящие из рассматриваемой вершины рёбра. Идем от вершины по ветке д осамого конца, затем проверяем все ответления в ветке снизу в верх. Если вернулись к вершине - перебираем следующую ветку. 170 | 171 | Алгоритм Кнута-Морриса-Пратта - поиск подстроки в строке. Создается шаблон, по которому ищется подстрока по префиксу и суфиксу. Время работы алгоритма линейно зависит от объёма входных данных. 172 | 173 | Даны образец (строка) S и строка T. Требуется определить индекс, начиная с которого образец S содержится в строке T. Если S не содержится в T — вернуть индекс, который не может быть интерпретирован как позиция в строке (например, отрицательное число). 174 | 175 | Префикс-функция(количество повторений) для строки "abcabcd" равна: [0, 0, 0, 1, 2, 3, 0], что означает: 176 | - у строки "a" нет нетривиального префикса, совпадающего с суффиксом; 177 | - у строки "ab" нет нетривиального префикса, совпадающего с суффиксом; 178 | - у строки "abc" нет нетривиального префикса, совпадающего с суффиксом; 179 | - у строки "abca" префикс длины 1 совпадает с суффиксом; 180 | - у строки "abcab" префикс длины 2 совпадает с суффиксом; 181 | - у строки "abcabc" префикс длины 3 совпадает с суффиксом; 182 | - у строки "abcabcd" нет нетривиального префикса, совпадающего с суффиксом. 183 | 184 | ## Жадный алгоритм 185 | Это алгоритм, который на каждом шагу делает локально наилучший выбор в надежде, что итоговое решение будет оптимальным. 186 | 187 | ## Queue, Deque, Stack, Heap 188 | 189 | Queue (очередь) - предназначена для хранения элементов с предопределённым способом вставки и извлечения FIFO (first-in-first-out). PriorityQueue — предоставляет возможность управлять порядком элементов в коллекции при помощи объекта Comparator, либо сохраняет элементы с использованием «natural ordering» 190 | 191 | Deque (Double Ended Queue) расширяет Queue и согласно документации это линейная коллекция, поддерживающая вставку/извлечение элементов с обоих концов. Помимо этого реализации интерфейса Deque могут строится по принципу FIFO, либо LIFO. ArrayDeque — реализация интерфейса Deque, который расширяет интерфейс Queue методами, позволяющими реализовать конструкцию вида LIFO (last-in-first-out) 192 | 193 | Stack - предназначена для хранения элементов с предопределённым способом вставки и извлечения FILO, First-In-Last-Out («первым пришел, последним ушел») 194 | 195 | ## EnumSet 196 | EnumSet - это реализация интерфейса Set для использования с перечислениями (Enum). В структуре данных хранятся объекты только одного типа Enum, указываемого при создании. Для хранения значений EnumSet использует массив битов (bit vector), - это позволяет получить высокую компактность и эффективность. Проход по EnumSet осуществляется согласно порядку объявления элементов перечисления. 197 | 198 | Все основные операции выполняются за O(1) и обычно (но негарантированно) быстрей аналогов из HashSet, а пакетные операции (bulk operations), такие как containsAll() и retainAll() выполняются даже горазда быстрей. 199 | 200 | Помимо всего EnumSet предоставляет множество статических методов инициализации для упрощенного и удобного создания экземпляров. 201 | 202 | ## Бинарное дерево 203 | Упорядоченный граф, у которого имеется корень (вершина) и ветви влево-вправо. в Левую ветвь заносятся значения меньше, чем в корне, в правую ветвь значения больше корня. В ветвях значения так же сортируются, образуя ответвления от ветви. 204 | 205 | __Проблема__ - В вырожденном случае может оказаться, что всё левое дерево пусто на каждом уровне, есть только правые деревья, и в таком случае дерево вырождается в список (идущий вправо). Поиск (а значит, и удаление и добавление) в таком дереве по скорости равен поиску в списке и намного медленнее поиска в сбалансированном дереве. 206 | 207 | Для балансировки дерева применяется операция «поворот дерева». Для принятия решения о том, какие именно повороты нужно совершать после добавления или удаления, используются такие алгоритмы, как «красно-чёрное дерево». 208 | 209 | ## Красно-черное дерево 210 | Вид бинарных деревьев, у которых присутствует балансировка - за счет дополнительного атрибута - цвета. Этот атрибут может принимать одно из двух возможных значений — «чёрный» или «красный». КЧД реализованны в TreeMap, TreeSet. При этом: 211 | 212 | + Узел может быть либо красным, либо чёрным и имеет двух потомков; 213 | + Корень — как правило чёрный. Это правило слабо влияет на работоспособность модели, так как цвет корня всегда можно изменить с красного на чёрный; 214 | + Все листья — чёрные и не содержат данных. Для экономии памяти листья можно сделать одним общим фиктивным листом. 215 | + Оба потомка каждого красного узла — чёрные. 216 | + Любой простой путь от узла-предка до листового узла-потомка содержит одинаковое число чёрных узлов. 217 | 218 | Красно-чёрные деревья более популярны, чем идеально сбалансированные деревья, т.к. в последних может тратиться слишком много ресурсов на операции удаления из дерева и поддержание необходимой сбалансированности. 219 | 220 | ## Мемоизация 221 | Сохранение результатов выполнения функций для предотвращения повторных вычислений. Перед вызовом функции проверяется, вызывалась ли функция ранее: если не вызывалась, то функция вызывается, и результат её выполнения сохраняется; а если вызывалась, то используется сохранённый результат. 222 | -------------------------------------------------------------------------------- /Kafka простыми словами.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/Kafka простыми словами.pdf -------------------------------------------------------------------------------- /Spring Interview Questions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/Spring Interview Questions.pdf -------------------------------------------------------------------------------- /application_interview_questions/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/application_interview_questions/README.md -------------------------------------------------------------------------------- /books/Apache_Kafka.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/books/Apache_Kafka.pdf -------------------------------------------------------------------------------- /books/Robert_Sesil_Martin_Chistyiy_kod_Sozdanie_analiz_i_refaktoring.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/books/Robert_Sesil_Martin_Chistyiy_kod_Sozdanie_analiz_i_refaktoring.pdf -------------------------------------------------------------------------------- /books/Локальная активация JetBrains.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/books/Локальная активация JetBrains.pdf -------------------------------------------------------------------------------- /images/Collectionsinterfaces.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/Collectionsinterfaces.png -------------------------------------------------------------------------------- /images/JFC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/JFC.png -------------------------------------------------------------------------------- /images/building-architecture/horizontal-vertical-scaling_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/building-architecture/horizontal-vertical-scaling_eng.png -------------------------------------------------------------------------------- /images/building-architecture/horizontal-vertical-scaling_rus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/building-architecture/horizontal-vertical-scaling_rus.png -------------------------------------------------------------------------------- /images/building-architecture/monolith-microservices_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/building-architecture/monolith-microservices_eng.png -------------------------------------------------------------------------------- /images/building-architecture/monolith-microservices_rus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/building-architecture/monolith-microservices_rus.png -------------------------------------------------------------------------------- /images/common/BigO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/BigO.png -------------------------------------------------------------------------------- /images/common/BigO_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/BigO_eng.png -------------------------------------------------------------------------------- /images/common/array.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/array.png -------------------------------------------------------------------------------- /images/common/array_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/array_eng.png -------------------------------------------------------------------------------- /images/common/binary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/binary.png -------------------------------------------------------------------------------- /images/common/graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/graph.png -------------------------------------------------------------------------------- /images/common/graph_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/graph_eng.png -------------------------------------------------------------------------------- /images/common/hash-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/hash-table.png -------------------------------------------------------------------------------- /images/common/hash-table_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/hash-table_eng.png -------------------------------------------------------------------------------- /images/common/heap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/heap.png -------------------------------------------------------------------------------- /images/common/heap_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/heap_eng.png -------------------------------------------------------------------------------- /images/common/hex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/hex.png -------------------------------------------------------------------------------- /images/common/linked-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/linked-list.png -------------------------------------------------------------------------------- /images/common/logic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/logic.png -------------------------------------------------------------------------------- /images/common/logic_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/logic_eng.png -------------------------------------------------------------------------------- /images/common/octal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/octal.png -------------------------------------------------------------------------------- /images/common/queue.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/queue.gif -------------------------------------------------------------------------------- /images/common/stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/stack.png -------------------------------------------------------------------------------- /images/common/stack_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/stack_eng.png -------------------------------------------------------------------------------- /images/common/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/common/tree.png -------------------------------------------------------------------------------- /images/databases/mongodb-cheatsheet.md: -------------------------------------------------------------------------------- 1 | # Шпаргалка по MongoDB 2 | 3 |
    Вернуться на главную страницу ⬆️
    4 | 5 | - Подготовка БД 6 | 7 | ```js 8 | show dbs // показать список всех БД 9 | use db_name // подключиться/создать БД с именем db_name 10 | db // вывести имя текущей базы данных 11 | db.createCollection("users") // создать коллекцию "notes" 12 | show collections // показать список коллекций в текущей БД 13 | db.dropDatabase() // удалить текущую БД 14 | ``` 15 | 16 | - Добавление элементов 17 | 18 | ```js 19 | // Добавить один элемент 20 | db.users.insertOne({ 21 | name: "Alex", 22 | age: 27, 23 | isMarried: false, 24 | city: "NewYork" 25 | }) 26 | 27 | // Добавить несколько элементов 28 | db.users.insertMany([{...}, {...}]) 29 | ``` 30 | 31 | - Получение элементов 32 | 33 | ```js 34 | // Получить все элементы из коллекции 35 | db.users.find(); 36 | // Получить элементы по указанному критерию 37 | db.user.find({ age: 27 }); 38 | // Получить один элемент 39 | db.users.findOne({ name: "Alex" }); 40 | // Получить отсортированный список элементов 41 | // 1 - по возрастанию; -1 - по убыванию 42 | db.users.find().sort({ age: 1 }); 43 | // Получить количество элементов 44 | db.users.find().count(); 45 | // Лимит количества получаемых элементов 46 | db.users.find().limit(10); 47 | // Выборка с помощью операторов сравнения 48 | db.users.find({ age: { $gt: 20 } }); // > 20 49 | db.users.find({ age: { $gte: 20 } }); // >= 20 50 | db.users.find({ age: { $lt: 50 } }); // < 50 51 | db.users.find({ age: { $lte: 50 } }); // <= 50 52 | db.users.find({ age: { $ne: 35 } }); // != 35 53 | ``` 54 | 55 | - Изменение элементов 56 | 57 | ```js 58 | // Полное изменение элемента (первый аргумент - критерий поиска) 59 | db.users.updateOne({name: "Alex"}, {новые_данные}) 60 | // Изменение определенных полей элемента 61 | db.users.updateOne({name: "Alex"}, {$set: {age: 28, isMarried: true}}) 62 | // Переименовать поле у нескольких элементов 63 | db.users.updateMany({name: "Alex"}, {&rename: {city: "town"}}) 64 | // Удаление элемента/элементов 65 | db.users.deleteOne({name: "Alex"}) 66 | db.users.deleteMany({name: "Alex"}) 67 | ``` 68 | -------------------------------------------------------------------------------- /images/databases/sql-cheatsheet.md: -------------------------------------------------------------------------------- 1 | # Шпаргалка по SQL 2 | 3 |
    Вернуться на главную страницу ⬆️
    4 | 5 | - Создание новой БД 6 | ```sql 7 | CREATE DATABASE db_name; 8 | ``` 9 | - Создание новой таблицы 10 | ```sql 11 | CREATE TABLE users ( 12 | id SERIAL PRIMARY KEY, # Уникальный id 13 | firstName VARCHAR(100), # Строка 14 | lastName VARCHAR(100), # Строка 15 | age INT, # Число 16 | gender VARCHAR(10), # Строка 17 | isMarried BOOLEAN # true/false 18 | ); 19 | ``` 20 | - Основные типы данных 21 | > - INT (целые числа от -2^32 до +2^32) 22 | > - FLOAT / DOUBLE / DECIMAL (дробные числа) 23 | > - CHAR / VARCHAR / TEXT (строки) 24 | > - DATA / DATETIME / TIME (дата и время) 25 | > - ENUM (перечисления - списки допустимых значений) 26 | > - [И другие](https://sql-language.ru/osnova-sql/tipy-dannykh-sql.html) 27 | - Добавление данных в таблицу 28 | ```sql 29 | INSERT INTO users( 30 | firstName, lastName, age, gender, isMarried 31 | ) VALUES ( 32 | 'Alex', 'Manson' 25, 'male', false 33 | ); 34 | ``` 35 | - Выборка данных из таблицы 36 | ```sql 37 | # SELECT 38 | ## Получить всю таблицу users 39 | SELECT * FROM users; 40 | ## Получить только столбцы firstName и age из таблицы users 41 | SELECT firstName, age FROM users; 42 | 43 | # LIMIT 44 | ## Получить первых 20 записей таблицы users 45 | SELECT * FROM users LIMIT 20; 46 | 47 | # DISTINCT 48 | ## Получить только уникальные значения из столбца firstName 49 | SELECT DISTINCT(firstName) FROM users; 50 | 51 | # WHERE 52 | ## Записи, где столбец gender = 'male' 53 | SELECT * FROM users WHERE gender = 'male'; 54 | ## AND, OR 55 | SELECT * FROM users WHERE age = 25 AND isMarried = falsel 56 | SELECT * FROM users WHERE age = 20 OR age = 50; 57 | 58 | # BETWEEN 59 | ## Записи, где значения столбца age находятся в промежутке от 20 до 30 60 | SELECT * FROM users WHERE age BETWEEN 20 AND 30; 61 | 62 | #NULL 63 | ## Записи, где столбец lastName не пуст 64 | SELECT * FROM users WHERE lastName IS NOT NULL; 65 | ``` 66 | - Поиск данных по шаблону 67 | ```sql 68 | # IN, LIKE, NOT LIKE 69 | ## % - подстановочный знак, который указывает на любое кол-во символов 70 | ## _ - подстановочный знак, который указывает на один символ 71 | 72 | ## Записи, где firsName равен 'John', 'Mike' или 'Kane' 73 | SELECT * FROM users WHERE firstName IN ('John', 'Mike', 'Kane'); 74 | ## Записи, где firsName начинается c буквы 'A' 75 | SELECT * FROM users WHERE firstName LIKE 'A%'; 76 | ## Записи, где первая буква в firstName равна 'A', 'B' или 'C' 77 | SELECT * FROM users WHERE firstName LIKE '[ABC]%'; 78 | ## Записи, где вторая буква в firsName не равна 'o' 79 | SELECT * FROM users WHERE firstName NOT LIKE '_o%'; 80 | ``` 81 | - Сортировка и фильтрация данных таблиц 82 | ```sql 83 | # ORDER BY 84 | ## ASC - по возрастанию (по умолчанию) 85 | ## DESC - по убыванию 86 | SELECT * FROM users ORDER BY firstName ASC; 87 | SELECT * FROM users ORDER BY age DESC; 88 | SELECT * FROM users ORDER BY lastName DESC, isMarried ASC; 89 | 90 | # HAVING 91 | ## Фильтрация результатов группировки 92 | ``` 93 | - Использование псевдонимов 94 | ```sql 95 | # AS 96 | SELECT firstName AS name FROM users WHERE name = "Alex"; 97 | ``` 98 | - Изменение таблиц 99 | ```sql 100 | # ALTER TABLE 101 | ## Добавить новую колонку city к таблицe users 102 | ALTER TABLE users ADD COLUMN city VARCHAR(50); 103 | ## Удалить колонку isMarried из таблицы users 104 | ALTER TABLE users DROP COLUMN isMarried; 105 | ## Переименовать колонку firstName в fName в таблицe users 106 | ALTER TABLE users RENAME COLUMN firstName TO fName; 107 | ## Переименовать таблицу users в consumers 108 | ALTER TABLE users RENAME TO consumers; 109 | ``` 110 | - Изменение данных в таблице 111 | ```sql 112 | # UPDATE 113 | ## Изменить в таблицe users записать с id = 1 114 | UPDATE users SET firstName = 'Kale', age = 33 WHERE id = 1; 115 | ## Изменить записи, где gender = 'female' 116 | UPDATE users SET city = 'Paris' WHERE gender = 'famale'; 117 | ``` 118 | - Удаление данных из таблицы 119 | ```sql 120 | # DELETE 121 | # Удалить запись в таблице users, где id = 2 122 | DELETE FROM users WHERE id = 2; 123 | # Удалить все записи в таблице users, где gender = 'male' 124 | DELETE FROM users WHERE gender = 'male'; 125 | ``` 126 | - [Агрегатные функции](https://codetown.ru/sql/agregatnye-funkcii/) 127 | > Используются для обобщения/подсчёта данных. 128 | ```sql 129 | # COUNT 130 | ## Возвращает количество элементов в таблице users 131 | SELECT COUNT(*) FROM users; 132 | ## Возвращает количество не повторяющихся значений столбца firstName 133 | SELECT COUNT(DISTINCT(firstName)) FROM users; 134 | 135 | # MAX, MIN 136 | SELECT MAX(age) FROM users; 137 | SELECT MIN(age) FROM users; 138 | 139 | # SUM 140 | # Сумма всех значений столбца age 141 | SELECT SUM(age) FROM users; 142 | 143 | # AVG 144 | ## Среднее значение столбца age 145 | SELECT AVG(age) FROM users; 146 | ``` -------------------------------------------------------------------------------- /images/exception.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/exception.png -------------------------------------------------------------------------------- /images/linux/bash-scripts-cheatsheet.md: -------------------------------------------------------------------------------- 1 | # Шпаргалка по Bash скриптам 2 | 3 |
    Вернуться на главную страницу ⬆️
    4 | 5 | **Содержание:** 6 | 7 | - [Hello world](#hello-world) 8 | - [Комментарии](#комментарии) 9 | - [Переменные](#переменные) 10 | - [Пользовательский ввод](#пользовательский-ввод) 11 | - [Передача аргументов](#передача-аргументов) 12 | - [Условия if else](#условия-if-else) 13 | - [Операторы условий](#операторы-условий) 14 | - [Логические операторы](#логические-операторы) 15 | - [Арифметические операторы](#арифметические-операторы) 16 | - [Конструкция switch case](#конструкция-switch-case) 17 | - [Массивы](#массивы) 18 | - [Цикл while](#цикл-while) 19 | - [Цикл until](#цикл-until) 20 | - [Цикл for](#цикл-for) 21 | - [Цикл select](#цикл-select) 22 | - [Break и continue в циклах](#break-и-continue-в-циклах) 23 | - [Функции](#функции) 24 | - [Локальные переменные](#локальные-переменные) 25 | - [Ключевое слово readonly](#ключевое-слово-readonly) 26 | - [Обработка сигналов](#обработка-сигналов) 27 | 28 | Скрипты Bash имеют расширение `.sh`: 29 | ``` 30 | $ touch script.sh 31 | ``` 32 | 33 | Хорошей практикой считается указывать путь до вашего терминала вначале каждого скрипта: 34 | ```sh 35 | #! /bin/bash 36 | ``` 37 | > Этот прием называется **shebang**, подробнее можно почитать [тут](https://ru.wikipedia.org/wiki/%D0%A8%D0%B5%D0%B1%D0%B0%D0%BD%D0%B3_(Unix)) 38 | 39 | Список доступных терминалов в вашей системе можно посмотреть с помощью этой команды: 40 | ``` 41 | $ cat /etc/shells 42 | ``` 43 | 44 | ## Hello world 45 | 46 | ```sh 47 | #! /bin/bash 48 | echo "Hello world" 49 | ``` 50 | 51 | Запуск скрипта: 52 | ``` 53 | $ bash script.sh 54 | ``` 55 | 56 | Скрипт можно сделать исполняемым файлом и запускать без команды `bash`: 57 | ``` 58 | $ chmod +x script.sh 59 | ``` 60 | ``` 61 | $ ./script.sh 62 | ``` 63 | 64 | ## Комментарии 65 | 66 | Однострочные комментарии: 67 | ```sh 68 | # Это просто коммент 69 | # И это тоже 70 | echo "Hello from bash" # эта команда выводит строку в консоль 71 | ``` 72 | 73 | Мультистрочные комментарии: 74 | ```sh 75 | : 'Мультистрочные комментарии очень удобны 76 | для подробного описания ваших скриптов. 77 | Успользуйте их с умом!' 78 | ``` 79 | 80 | ## Переменные 81 | 82 | ```sh 83 | MY_STRING="bash is cool" 84 | echo $MY_STRING # Вывод значения переменной 85 | ``` 86 | > Имя переменной не должно начинаться с цифры 87 | 88 | ## Пользовательский ввод 89 | 90 | Команда `read` читает пользовательский ввод и записывает его в указанную переменную: 91 | ```sh 92 | echo "Введите ваше имя:" 93 | read NAME 94 | echo "Привет $NAME!" 95 | ``` 96 | > Если переменная не указана, то команда `read` по умолчанию сохранит все данные в переменную `REPLY` 97 | 98 | 99 | Можно записывать несколько переменных. Для этого, при вводе из терминала, значения необходимо разделять пробелом: 100 | ```sh 101 | read V1 V2 V3 102 | echo "1 переменная: $V1" 103 | echo "2 переменная: $V2" 104 | echo "3 переменная: $V3" 105 | ``` 106 | ``` 107 | $ bash script.sh 108 | $ hello world some other text 109 | 1 переменная: hello 110 | 2 переменная: world 111 | 3 переменная: some other text 112 | ``` 113 | 114 | Флаг `-a` позволяет создать массив в который будут записываться строки пользовательского ввода разделенные пробелом: 115 | ```sh 116 | read -a NAMES 117 | echo "Массив имён: ${NAMES[0]}, ${NAMES[1]}, ${NAMES[2]}" 118 | ``` 119 | ``` 120 | $ bash script.sh 121 | Alex Mike John 122 | Массив имён: Alex, Mike, John 123 | ``` 124 | 125 | Флаг `-p` позволяет не переносить пользовательский ввод на следующую строку. 126 | 127 | Флаг `-s` позволяет скрыть вводимые символы (как это происходит при вводе пароля). 128 | ```sh 129 | read -p "Введите ваш логин: " LOGIN 130 | read -sp "Введите ваш пароль: " PASSWD 131 | ``` 132 | ``` 133 | $ bash script.sh 134 | Введите ваш логин: bash_hacker 135 | Введите ваш пароль: 136 | ``` 137 | 138 | ## Передача аргументов 139 | 140 | Аргументы это просто значения, которые могут быть указаны при запуске скрипта. 141 | 142 | Всем переданным аргументам присваивается уникальное имя равное их порядковому номеру: 143 | ```sh 144 | echo "Аргумент 1 - $1; aргумент 1 - $2; aргумент 1 - $3." 145 | ``` 146 | ``` 147 | $ bash script.sh hello test 1337 148 | Аргумент 1 - hello; aргумент 1 - test; aргумент 1 - 1337. 149 | ``` 150 | 151 | Нулевой аргумент всегда равен названию файла со скриптом: 152 | ```sh 153 | echo "Вы запустили файл $0" 154 | ``` 155 | ``` 156 | $ bash script.sh 157 | Вы запустили файл script.sh 158 | ``` 159 | 160 | Все аргументы можно положить в именованный массив: 161 | ```sh 162 | args=("$@") 163 | echo "Полученные аргументы: ${args[0]}, ${args[1]}, ${args[2]}." 164 | ``` 165 | ``` 166 | $ bash script.sh some values 123 167 | Полученные аргументы: some, values, 123 168 | ``` 169 | > `@` - это название массива по умолчанию, который хранит все аргументы (за исключением нулевого) 170 | 171 | Количество переданных аргументов (за исключением нулевого) хранится в переменной `#`: 172 | ```sh 173 | echo "Всего получено аргументов: $#" 174 | ``` 175 | 176 | ## Условия if else 177 | 178 | Условия всегда начинаются с ключевого слова `if` и заканчиваются на `fi`: 179 | ```sh 180 | echo "Введите ваш возраст:" 181 | read AGE 182 | 183 | if (($AGE >= 18)) 184 | then 185 | echo "Доступ разрешен" 186 | else 187 | echo "Доступ запрещен" 188 | fi 189 | ``` 190 | ``` 191 | $ bash script.sh 192 | Введите ваш возраст: 193 | 19 194 | Доступ разрешен 195 | 196 | $ bash script.sh 197 | Введите ваш возраст: 198 | 16 199 | Доступ запрещен 200 | ``` 201 | 202 | Условий может быть сколько угодно много, для этого используется конструкция `elif`, которая также как `if` может проверять условия: 203 | ```sh 204 | read COMMAND 205 | 206 | if [ $COMMAND = "help" ] 207 | then 208 | echo "Доступные команды:" 209 | echo "ping - вернет строку PONG" 210 | echo "version - вернет номер версии программы" 211 | elif [ $COMMAND = "ping" ] 212 | then 213 | echo "PONG" 214 | elif [ $COMMAND = "version" ] 215 | then 216 | echo "v1.0.0" 217 | else 218 | echo "Команда не определена. Воспользуйтесь командой 'help' для справки" 219 | fi 220 | ``` 221 | > Обратите внимание, что после конструкций `if` и `elif` всегда следует строчка с ключевым словом `then`
    222 | > Так же не забывайте отделять условия пробелами внутри фигурных скобок -> `[ condition ]` 223 | 224 | ## Операторы условий 225 | 226 | Для цифр и строк могут использоваться разные операторы сравнения. Полные их списки с примерами приведены в таблицах ниже. 227 | > Обратите внимания, что разные операторы используются с определенными скобками 228 | 229 | ### Операторы сравнения для чисел 230 | 231 | | Оператор | Описание | Пример | 232 | | -------- | -------------------- | ------------------ | 233 | | -eq | равняется ли | if [ $age -eq 18 ] | 234 | | -ne | не равняется | if [ $age -ne 18 ] | 235 | | -gt | больше чем | if [ $age -gt 18 ] | 236 | | -ge | больше чем или равно | if [ $age -ge 18 ] | 237 | | -lt | меньше чем | if [ $age -lt 18 ] | 238 | | -le | меньше чем или равно | if [ $age -le 18 ] | 239 | | > | больше чем | if (($age > 18)) | 240 | | < | меньше чем | if (($age < 18)) | 241 | | => | больше чем или равно | if (($age => 18)) | 242 | | <= | меньше чем или равно | if (($age <= 18)) | 243 | 244 | ### Операторы сравнения для строк 245 | 246 | | Оператор | Описание | Пример | 247 | | -------- | ------------------------------------------- | ------------------------ | 248 | | = | проверка на равенство | if [ $str = "hello" ] | 249 | | == | проверка на равенство | if [ $str == "hello" ] | 250 | | != | проверка на НЕ равенство | if [ $str != "hello" ] | 251 | | < | сравнение меньше чем по ASCII коду символов | if [[ $str < "hello" ]] | 252 | | > | сравнение больше чем по ASCII коду символов | if [[ $str > "hello" ]] | 253 | | -z | проверка пустая ли строка | if [ -z $str ] | 254 | | -n | проверка есть ли в строке хоть один символ | if [ -n $str ] | 255 | 256 | Так же существуют операторы для проверки различных условий над файлами. 257 | 258 | ### Операторы для проверки файлов 259 | 260 | | Оператор | Описание | Пример | 261 | | -------- | --------------------------------------------------------------------------------- | --------------- | 262 | | -e | проверяет, существует ли файл | if [ -e $file ] | 263 | | -s | проверяет, пустой ли файл | if [ -s $file ] | 264 | | -f | проверяет, является ли файл обычным файлом, а не каталогом или специальным файлом | if [ -f $file ] | 265 | | -d | проверяет, является ли файл каталогом | if [ -d $file ] | 266 | | -r | проверяет, доступен ли файл для чтения | if [ -r $file ] | 267 | | -w | проверяет, доступен ли файл для записи | if [ -w $file ] | 268 | | -x | проверяет, является ли файл исполяемым | if [ -x $file ] | 269 | 270 | ## Логические операторы 271 | 272 | Условия с оператором "И" возвращают истину только в том случае, когда все условия истины. 273 | > Существует несколько вариантов написания условий с логическими операторами 274 | 275 | ```sh 276 | if [ $age -ge 18 ] && [ $age -le ] 277 | ``` 278 | ```sh 279 | if [ $age -ge 18 -a $age -le ] 280 | ``` 281 | ```sh 282 | if [[ $age -ge 18 && $age -le ]] 283 | ``` 284 | 285 | Условия с оператором "ИЛИ" возвращают истину в том случае, когда хотя бы одно условие истинно. 286 | 287 | ```sh 288 | if [ -r $file ] || [ -w $file ] 289 | ``` 290 | ```sh 291 | if [ -r $file -o -w $file ] 292 | ``` 293 | ```sh 294 | if [[ -r $file || -w $file ]] 295 | ``` 296 | 297 | ## Арифметические операторы 298 | 299 | ```bash 300 | num1=10 301 | num2=5 302 | 303 | # Сложение 304 | echo $((num1 + num2)) # 15 305 | echo $(expr $num1 + $num2) # 15 306 | 307 | # Вычитание 308 | echo $((num1 - num2)) # 5 309 | echo $(expr $num1 - $num2) # 5 310 | 311 | # Умножение 312 | echo $((num1 * num2)) # 50 313 | echo $(expr $num1 \* $num2) # 50 314 | 315 | # Деление 316 | echo $((num1 / num2)) # 2 317 | echo $(expr $num1 / $num2) # 2 318 | 319 | # Остаток от деления 320 | echo $((num1 % num2)) # 0 321 | echo $(expr $num1 % $num2) # 0 322 | ``` 323 | > Обратите внимание, что при использовании умножения с ключевым словом `expr` необходимо использовать косую черту. 324 | 325 | ## Конструкция switch case 326 | 327 | Не всегда удобно использовать конструкции if/elif для большого количества условий. Для этого лучше подойдет конструкция case: 328 | 329 | ```sh 330 | read COMMAND 331 | 332 | case $COMMAND in 333 | "/help" ) 334 | echo "Вы открыли справочное меню" ;; 335 | "/ping" ) 336 | echo "PONG" ;; 337 | "/version" ) 338 | echo "Текущая версия: 1.0.0" ;; 339 | * ) 340 | echo "Такой команды нет :(" ;; 341 | esac 342 | ``` 343 | 344 | > Случай со звездочкой * отработает лишь в том случае, если не подойдет ни одно из условий выше. 345 | 346 | ## Массивы 347 | 348 | Массивы позволяют хранить целую коллекцию данных в одной переменной. С этой переменной можно удобно и легко взаимодействовать: 349 | 350 | ```sh 351 | array=('aaa' 'bbb' 'ccc' 'ddd') 352 | 353 | echo "Элементы массива: ${array[@]}" 354 | echo "Первый элемент массива: ${array[0]}" 355 | echo "Индексы элементов массива: ${!array[@]}" 356 | 357 | array_length=${#array[@]} 358 | echo "Длинна массива: ${array_length}" 359 | echo "Последний элемент массива: ${array[$((array_length - 1))]}" 360 | ``` 361 | ``` 362 | $ bash script.sh 363 | Элементы массива: aaa bbb ccc ddd 364 | Первый элемент массива: aaa 365 | Индексы элементов массива: 0 1 2 3 366 | Длинна массива: 4 367 | Последний элемент массива: ddd 368 | ``` 369 | > Обратите внимание, что элементы массива разделются пробелом без запятой. 370 | 371 | Элементы массива можно добавлять/перезаписывать/удалять по ходу выполнения скрипта: 372 | 373 | ```sh 374 | array=('a' 'b' 'c') 375 | 376 | array[3]='d' 377 | echo ${array[@]} # a b c d 378 | 379 | array[0]='x' 380 | echo ${array[@]} # x b c d 381 | 382 | array[0]='x' 383 | echo ${array[@]} # x b c d 384 | 385 | unset array[2] 386 | echo ${array[@]} # x b d 387 | ``` 388 | 389 | ## Цикл while 390 | 391 | Цикл while повторяет выполение блока кода описанного между ключевыми словами `do` - `done` пока истино заданное условие. 392 | 393 | ```sh 394 | i=0 395 | 396 | while (( $i < 5 )) 397 | do 398 | i=$((i + 1)) 399 | echo "Итерация номер $i" 400 | done 401 | ``` 402 | ``` 403 | $ bash script.sh 404 | Итерация номер 1 405 | Итерация номер 2 406 | Итерация номер 3 407 | Итерация номер 4 408 | Итерация номер 5 409 | ``` 410 | 411 | Операция увеличения числа на 1 единицу называется инкриментом и для неё существует специальная запись: 412 | 413 | ```sh 414 | (( i++ )) # post increment 415 | ``` 416 | ```sh 417 | (( ++i )) # pre increment 418 | ``` 419 | 420 | Противоположная операция - декремент: 421 | 422 | ```sh 423 | (( i-- )) # post decrement 424 | ``` 425 | ```sh 426 | (( --i )) # pre decrement 427 | ``` 428 | 429 | С помощью while циклов можно построчно читать различные файлы. Существует несколько способов сделать это: 430 | 431 | ```sh 432 | echo "Чтение файла по строкам:" 433 | while read line 434 | do 435 | echo $line 436 | done < text.txt 437 | ``` 438 | 439 | ```sh 440 | echo "Чтение файла по строкам:" 441 | cat text.txt | while read line 442 | do 443 | echo $line 444 | done 445 | ``` 446 | 447 | ```sh 448 | echo "Чтение файла по строкам:" 449 | while IFS='' read -r line 450 | do 451 | echo $line 452 | done < text.txt 453 | ``` 454 | 455 | ## Цикл until 456 | 457 | Цикл until противоположен циклу while тем, что он выполняет блок кода описанный между ключевыми словами `do` - `done` тогда, когда заданное условие возвращает false: 458 | 459 | ```sh 460 | i=5 461 | until (( $i == 0 )) # будет выполняться пока i не станет равным 0 462 | do 463 | echo "Значение переменной i = $i" 464 | (( i-- )) 465 | done 466 | ``` 467 | ``` 468 | $ bash script.sh 469 | Значение переменной i = 5 470 | Значение переменной i = 4 471 | Значение переменной i = 3 472 | Значение переменной i = 2 473 | Значение переменной i = 1 474 | ``` 475 | 476 | ## Цикл for 477 | 478 | Самый классический цикл: 479 | ```sh 480 | for (( i=1; i<=10; i++ )) 481 | do 482 | echo $i 483 | done 484 | ``` 485 | 486 | В новых версиях Bash существует более удобный способ записи с помощью оператора `in`: 487 | 488 | ```sh 489 | for i in {1..10} 490 | do 491 | echo $i 492 | done 493 | ``` 494 | 495 | Условие после ключевого слова `in` в общем случае выгядит так: 496 | 497 | ``` 498 | {START..END..INCREMENT} 499 | ``` 500 | > _START_ - с какого элемента начинать цикл;
    501 | > _END_ - до какого элемента продолжать цикл;
    502 | > _INCREMENT_ - на сколько увеличивать элемент после каждой итерации (по умолчанию на 1). 503 | 504 | 505 | Цикл for можно использовать для последовательного запуска набора команд: 506 | 507 | ```sh 508 | for command in ls pwd date # Список команд для запуска 509 | do 510 | echo "---Запуск команды $command---" 511 | $command 512 | echo "------------------------" 513 | done 514 | ``` 515 | ``` 516 | $ bash script.sh 517 | ---Запуск команды ls--- 518 | script.sh text.txt 519 | ------------------------ 520 | ---Запуск команды pwd--- 521 | /home/user/bash 522 | ------------------------ 523 | ---Запуск команды date--- 524 | Сб 03 сен 2022 10:35:57 +03 525 | ------------------------ 526 | ``` 527 | 528 | Ключевое слово `break` останавливает выполнение цикла. 529 | 530 | Ключевое слово `continue` завершает текущую итерацию цикла и переходит к следующей.
    531 | 532 | ## Цикл select 533 | 534 | Крайне удобный цикл для создания меню выбора опций: 535 | 536 | ```sh 537 | select color in "Красный" "Зеленый" "Синий" "Белый" 538 | do 539 | echo "Вы выбрали $color цвет..." 540 | done 541 | ``` 542 | ``` 543 | $ bash script.sh 544 | 1) Красный 545 | 2) Зеленый 546 | 3) Синий 547 | 4) Белый 548 | #? 1 549 | Вы выбрали Красный цвет... 550 | #? 2 551 | Вы выбрали Зеленый цвет... 552 | #? 3 553 | Вы выбрали Синий цвет... 554 | #? 4 555 | Вы выбрали Белый цвет... 556 | ``` 557 | 558 | Цикл `select` очень хорошо сочетается с оператором выбора `case`. Таким образом можно очень просто создавать интерактивные консольные приложения с большим количеством разветвлений: 559 | 560 | ```sh 561 | echo "---Добро пожаловать в меню---" 562 | 563 | select cmd in "Запуск" "Настройки" "О программе" "Выход" 564 | do 565 | case $cmd in 566 | "Запуск") 567 | echo "Программа запущена" 568 | echo "Введите число:" 569 | read input 570 | echo "$input в квадрате = $(( input * input ))" ;; 571 | "Настройки") 572 | echo "Настройки программы" ;; 573 | "О программе") 574 | echo "Версия 1.0.0" ;; 575 | "Выход") 576 | echo "Выход из программы..." 577 | break ;; 578 | esac 579 | done 580 | ``` 581 | 582 | ## Break и continue в циклах 583 | 584 | Для принудительного выхода из цикла используется ключевое слово `break`: 585 | 586 | ```sh 587 | count=1 588 | 589 | while (($count)) # всегда возвращает истину 590 | do 591 | if (($count > 10)) 592 | then 593 | break # принудительный выход несмотря на условие после while 594 | else 595 | echo $count 596 | ((count++)) 597 | fi 598 | done 599 | ``` 600 | 601 | Для того, чтобы пропустить выполнение текущей итерации в цикле и перейти к следующей - используется ключевое слово `continue`: 602 | 603 | ```sh 604 | for (( i=5; i>0; i-- )) 605 | do 606 | if ((i % 2 == 0)) 607 | then 608 | continue 609 | fi 610 | 611 | echo $i 612 | done 613 | ``` 614 | ``` 615 | $ bash script.sh 616 | 5 617 | 3 618 | 1 619 | ``` 620 | 621 | ## Функции 622 | 623 | Функции - это именованные участки кода, которые могут переиспользоваться неограниченное количество раз: 624 | 625 | ```sh 626 | hello() { 627 | echo "Hello World!" 628 | } 629 | 630 | # вызываем функцию 3 раза: 631 | hello 632 | hello 633 | hello 634 | ``` 635 | ``` 636 | $ bash script.sh 637 | Hello World! 638 | Hello World! 639 | Hello World! 640 | ``` 641 | 642 | Функции, так же, как и сами скрипты, могут принимать аргументы. Они имеют такие же названия, но аргументы функций видны только внутри функции, в которую они были переданы: 643 | 644 | ```sh 645 | echo "$1" # аргумент переданный при запуске скрипта 646 | 647 | calc () { 648 | echo "$1 + $2 = $(($1 + $2))" 649 | } 650 | 651 | # передача двух аргументов в функцию calc 652 | calc 42 17 653 | ``` 654 | ``` 655 | $ bash script.sh hello 656 | hello 657 | 42 + 17 = 59 658 | ``` 659 | 660 | ## Локальные переменные 661 | 662 | Если мы объявим какую-либо переменную, а затем объявим ещё одну с таким же именем, но уже внутри функции, то у нас произойдет перезапись: 663 | 664 | ```sh 665 | VALUE="hello" 666 | 667 | test() { 668 | VALUE="linux" 669 | } 670 | 671 | test 672 | echo $VALUE 673 | ``` 674 | ``` 675 | $ bash script.sh 676 | linux 677 | ``` 678 | 679 | Чтобы предотвратить такое поведение используются ключевое слово `local` перед именем переменной, которая объявляется внутри функции: 680 | 681 | ```sh 682 | VALUE="hello" 683 | 684 | test() { 685 | local VALUE="linux" 686 | echo "Переменная внутри функции: $VALUE" 687 | } 688 | 689 | test 690 | echo "Глобальная переменная: $VALUE" 691 | ``` 692 | ``` 693 | $ bash script.sh 694 | Переменная внутри функции: linux 695 | Глобальная переменная: hello 696 | ``` 697 | 698 | ## Ключевое слово readonly 699 | 700 | По умолчанию, каждая созданная переменная в Bash в последующем может перезаписываться. Чтобы защитить переменную от изменений можно использовать ключевое слово `readonly`: 701 | 702 | ```sh 703 | readonly PI=3.14 704 | PI=100 705 | 706 | echo "PI = $PI" 707 | ``` 708 | ``` 709 | $ bash script.sh 710 | script.sh: строка 2: PI: переменная только для чтения 711 | PI = 3.14 712 | ``` 713 | 714 | `readonly` можно использовать не только в момент объявления переменной, но и после: 715 | 716 | ```sh 717 | VALUE=123 718 | VALUE=$(($VALUE * 1000)) 719 | readonly VALUE 720 | VALUE=555 721 | 722 | echo $VALUE 723 | ``` 724 | ``` 725 | $ bash script.sh 726 | script.sh: строка 4: VALUE: переменная только для чтения 727 | 123000 728 | ``` 729 | 730 | Тоже самое касается функций. Они так же могут быть переопределены, поэтому их можно защитить с помощью `readonly` указав при этом флаг `-f`: 731 | 732 | ```sh 733 | test() { 734 | echo "This is test function" 735 | } 736 | 737 | readonly -f test 738 | 739 | test() { 740 | echo "Hello World!" 741 | } 742 | 743 | test 744 | ``` 745 | ``` 746 | $ bash script.sh 747 | script.sh: строка 9: test: значение функции можно только считать 748 | This is test function 749 | ``` 750 | 751 | ## Обработка сигналов 752 | 753 | Во время выполнения скриптов, могут происходить неожиданные действия. Например, пользователь может прервать выполнения скрипта с помощь комбинации `Ctrl + C`, либо может случайно закрыть терминал или в самом скрипте может случится какая-либо ошибка и так далее... 754 | 755 | В POSIX-системах существуют специальные сигналы - уведомления процесса о каком-либо событии. Их список определен в таблице ниже: 756 | 757 | | Сигнал | Код | Действие | Описание | 758 | | ------- | -------- | -------------------------- | -------------------------------------------------------- | 759 | | SIGHUP | 1 | Завершение | Закрытие терминала | 760 | | SIGINT | 2 | Завершение | Сигнал прерывания (Ctrl-C) с терминала | 761 | | SIGQUIT | 3 | Завершение с дампом памяти | Сигнал «Quit» с терминала (Ctrl-) | 762 | | SIGILL | 4 | Завершение с дампом памяти | Недопустимая инструкция процессора | 763 | | SIGABRT | 6 | Завершение с дампом памяти | Сигнал, посылаемый функцией abort() | 764 | | SIGFPE | 8 | Завершение с дампом памяти | Ошибочная арифметическая операция | 765 | | SIGKILL | 9 | Завершение | Процесс уничтожен (kill signal) | 766 | | SIGSEGV | 11 | Завершение с дампом памяти | Нарушение при обращении в память | 767 | | SIGPIPE | 13 | Завершение | Запись в разорванное соединение (пайп, сокет) | 768 | | SIGALRM | 14 | Завершение | Сигнал истечения времени, заданного alarm() | 769 | | SIGTERM | 15 | Завершение | Сигнал завершения (сигнал по умолчанию для утилиты kill) | 770 | | SIGUSR1 | 30/10/16 | Завершение | Пользовательский сигнал № 1 | 771 | | SIGUSR2 | 31/12/17 | Завершение | Пользовательский сигнал № 2 | 772 | | SIGCHLD | 20/17/18 | Игнорируется | Дочерний процесс завершен или остановлен | 773 | | SIGCONT | 19/18/25 | Продолжить выполнение | Продолжить выполнение ранее остановленного процесса | 774 | | SIGSTOP | 17/19/23 | Остановка процесса | Остановка выполнения процесса | 775 | | SIGTSTP | 18/20/24 | Остановка процесса | Сигнал остановки с терминала (Ctrl-Z) | 776 | | SIGTTIN | 21/21/26 | Остановка процесса | Попытка чтения с терминала фоновым процессом | 777 | | SIGTTOU | 22/22/27 | Остановка процесса | Попытка записи на терминал фоновым процессом | 778 | 779 | В Bash есть ключевое слово `trap` с помощью которого можно отлавливать различные сигналы и предусматривать выполнение определенных команд: 780 | 781 | ``` 782 | trap <КОМАНДА> <СИГНАЛ> 783 | ``` 784 | > Под сигналом можно использовать его название (колонка _Сигнал_ в таблице), либо его код (колонка _Код_ в таблице). Можно указывать несколько сигналов разделяя их названия или коды пробелом.
    785 | > **Исключения:** сигналы SIGKILL (9) и SIGSTOP (17/19/23) отловить невозможно, поэтому нет смысла их указывать. 786 | 787 | ```sh 788 | trap "echo Выполнение программы прервано...; exit" SIGINT 789 | 790 | for i in {1..10} 791 | do 792 | sleep 1 793 | echo $i 794 | done 795 | ``` 796 | ``` 797 | $ bash script.sh 798 | 1 799 | 2 800 | 3 801 | 4 802 | ^CВыполнение программы прервано... 803 | ``` 804 | 805 | ## Отладка скриптов 806 | 807 | Запуск скрипта с параметром `-x` покажет его поэтапное выполнение, что будет полезно при отладке и поиске ошибок: 808 | 809 | ``` 810 | $ bash -x script.sh 811 | ``` 812 | 813 |
    Вернуться в начало ⬆️
    -------------------------------------------------------------------------------- /images/linux/chmod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/linux/chmod.png -------------------------------------------------------------------------------- /images/linux/chmod_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/linux/chmod_eng.png -------------------------------------------------------------------------------- /images/linux/cron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/linux/cron.png -------------------------------------------------------------------------------- /images/linux/cron_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/linux/cron_eng.png -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/logo.png -------------------------------------------------------------------------------- /images/microservise/micros1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/microservise/micros1.png -------------------------------------------------------------------------------- /images/microservise/micros2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/microservise/micros2.png -------------------------------------------------------------------------------- /images/network-internet/Browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/Browser.png -------------------------------------------------------------------------------- /images/network-internet/Domain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/Domain.png -------------------------------------------------------------------------------- /images/network-internet/Hosting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/Hosting.png -------------------------------------------------------------------------------- /images/network-internet/IPv4-IPv6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/IPv4-IPv6.png -------------------------------------------------------------------------------- /images/network-internet/Internet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/Internet.png -------------------------------------------------------------------------------- /images/network-internet/Problems.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/Problems.gif -------------------------------------------------------------------------------- /images/network-internet/Traceroute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/Traceroute.png -------------------------------------------------------------------------------- /images/network-internet/browser_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/browser_eng.png -------------------------------------------------------------------------------- /images/network-internet/dns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/dns.png -------------------------------------------------------------------------------- /images/network-internet/domain_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/domain_eng.png -------------------------------------------------------------------------------- /images/network-internet/http.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/http.png -------------------------------------------------------------------------------- /images/network-internet/http_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/http_eng.png -------------------------------------------------------------------------------- /images/network-internet/osi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/osi.png -------------------------------------------------------------------------------- /images/network-internet/problems_eng.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/problems_eng.gif -------------------------------------------------------------------------------- /images/network-internet/proxy-vpn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/proxy-vpn.png -------------------------------------------------------------------------------- /images/network-internet/proxy-vpn_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/proxy-vpn_eng.png -------------------------------------------------------------------------------- /images/network-internet/tcp-ip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/tcp-ip.png -------------------------------------------------------------------------------- /images/network-internet/tcp-ip_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/tcp-ip_eng.png -------------------------------------------------------------------------------- /images/network-internet/tcp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/tcp.png -------------------------------------------------------------------------------- /images/network-internet/topologies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/topologies.png -------------------------------------------------------------------------------- /images/network-internet/topologies_rus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/topologies_rus.png -------------------------------------------------------------------------------- /images/network-internet/udp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/network-internet/udp.png -------------------------------------------------------------------------------- /images/optimization/cdn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/optimization/cdn.png -------------------------------------------------------------------------------- /images/optimization/cdn_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/optimization/cdn_eng.png -------------------------------------------------------------------------------- /images/optimization/load-balancer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/optimization/load-balancer.png -------------------------------------------------------------------------------- /images/optimization/load-balancer_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/optimization/load-balancer_eng.png -------------------------------------------------------------------------------- /images/os/concurrency-parallel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/os/concurrency-parallel.png -------------------------------------------------------------------------------- /images/os/os-layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/os/os-layer.png -------------------------------------------------------------------------------- /images/os/os-layer_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/os/os-layer_eng.png -------------------------------------------------------------------------------- /images/os/process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/os/process.png -------------------------------------------------------------------------------- /images/os/process_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/os/process_eng.png -------------------------------------------------------------------------------- /images/programming-language/regex-cheatsheet.md: -------------------------------------------------------------------------------- 1 | # Шпаргалка по регулярным выражениям 2 | 3 |
    Вернуться на главную страницу ⬆️
    4 | 5 | **Содержание:** 6 | 7 | - [Базовое применение](#базовое-применение) 8 | - [Флаги](#флаги) 9 | - [Основной синтаксис](#основной-синтаксис) 10 | - [Любой символ .](#любой-символ-) 11 | - [Перечень []](#перечень-) 12 | - [Исключающий перечень [^]](#исключающий-перечень-) 13 | - [Диапазон [-]](#диапазон--) 14 | - [Повторения *](#повторения-) 15 | - [Повторения +](#повторения--1) 16 | - [Необязательный символ ?](#необязательный-символ-) 17 | - [Количество повторений {}](#количество-повторений-) 18 | - [Диапазон повторений {,}](#диапазон-повторений-) 19 | - [Группировка ()](#группировка-) 20 | - [Логическое ИЛИ |](#логическое-или-) 21 | - [Экранирование](#экранирование-) 22 | - [Поиск в начале строки ^](#поиск-в-начале-строки-) 23 | - [Поиск в конце строки $](#поиск-в-конце-строки-) 24 | - [Классы символов](#классы-символов) 25 | - [Позиционные проверки](#позиционные-проверки) 26 | 27 | 28 | [Регулярные выражения](https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F) – это мощный инструмент для поиска и замены слов в тексте. Само регулярное выражение представляет из себя обычную строку составленную по определенным правилами. В общем виде она представляет из себя две косые черты `/ /`, где после первой черты идёт специальный паттерн для поиска, а после второй – набор флагов. 29 | 30 | Для тренировки использования регулярных выражений можно воспользоваться сайтом [Regex101.com](https://regex101.com/). 31 | 32 | Также можно воспользоваться возможностями для работы с регулярными выражениями в одном из языков программирования. Вот примеры для [Python](https://pythonru.com/primery/primery-primeneniya-regulyarnyh-vyrazheniy-v-python), [JavaScript](https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Regular_Expressions), [Go](https://tproger.ru/articles/puteshestvie-v-golang-regexp/), [Kotlin](https://java-blog.ru/kotlin/vvedenie-v-regulyarnye-vyrazheniya-kotlin), [C#](https://metanit.com/sharp/tutorial/7.4.php) и [так далее](https://www.google.com/search?q=%D0%BA%D0%B0%D0%BA+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C+%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5+%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F+%D0%B2+%5B%D0%B2%D0%B0%D1%88+%D1%8F%D0%B7%D1%8B%D0%BA+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%5D%5D) 33 | 34 | ## Базовое применение 35 | 36 | Возьмем для примера любой текст. Представим, что в этом тексте нам нужно найти все слова `London`. Это самый простой случай использования регулярных выражения, нам всего лишь необходимо вписать нужное слово между косыми чертами: 37 | 38 |

    Regex example

    39 | 40 | ## Флаги 41 | 42 | Флаги влияют на результат поиска. Их всего 5 штук: 43 | 44 | - `i` – позволяет игнорировать регистры букв (нет разницы между *A* и *a*). 45 | - `g` – позволяет искать все совпадения в тексте, без него – только первое. 46 | - `m` – включение многострочного режима (влияет только на поведение `^` и `$`). 47 | - `s` – текст трактуется как одна строка, в этом случае метасимволу `.` (точка) соответствует любой одиночный символ, включая символ новой строки. 48 | - `u` – unicode-трактовка. Выражение может содержать специальные паттерны, характерные для юникода. 49 | 50 | ## Основной синтаксис 51 | 52 | ### Любой символ `.` 53 | 54 | На месте точки может быть любой символ. Количеством точек можно определять длину слов. 55 | 56 | ```js 57 | /t..k/g 58 | ``` 59 | 60 | > take look team took hike track teak time 61 | 62 | ### Перечень `[]` 63 | 64 | Позволяют указать определенный перечень символов. 65 | 66 | ```js 67 | /t[aoi]k/g 68 | ``` 69 | 70 | > tek tok tdk tak tik tuk tyk took taoik 71 | 72 | ### Исключающий перечень `[^]` 73 | 74 | Позволяет исключить определенный набор символ из поиска, используется вместе с квадратными скобками. 75 | 76 | ```js 77 | /ba[^td]/g 78 | ``` 79 | 80 | > ban bag bat bas bad 81 | 82 | ### Диапазон `[-]` 83 | 84 | Указывает диапазон с первого по последний символ (включительно) в алфавитном порядке. 85 | 86 | ```js 87 | /[a-d]../g 88 | ``` 89 | 90 | > ost hst ast fst cst bst 91 | 92 | Аналогично работает с цифрами: 93 | 94 | ```js 95 | /201[5-9]/g 96 | ``` 97 | 98 | > 2010 2012 2015 2017 2019 2022 99 | 100 | ### Повторения `*` 101 | 102 | Звездочка после символа указывает, что данный символ может отсутствовать, либо совпадать один или более раз. 103 | 104 | ```js 105 | /wo*w/g 106 | ``` 107 | 108 | > wow waw wiw woooow wawe ww woow 109 | 110 | ### Повторения `+` 111 | 112 | Плюс после символа указывает, что данный символ должен присутствовать один или более раз. 113 | 114 | ```js 115 | /go+gle/g 116 | ``` 117 | 118 | > google ggle gogle gugle g00gle goooogle 119 | 120 | ### Необязательный символ `?` 121 | 122 | Вопросительный знак после символа указывает, что данный символ является не обязательным (может либо отсутствовать, либо встрачаться только один раз). 123 | 124 | ```js 125 | /bou?nd/g 126 | ``` 127 | 128 | > bond bound bouuund boynd 129 | 130 | ### Количество повторений `{}` 131 | 132 | Чтобы указать точное количеcтво повторений, необходимо после символа записать фигурные скобки с нужным числом. 133 | 134 | ```js 135 | /bo{3}m/g 136 | ``` 137 | 138 | > boom bom booom bm boooom 139 | 140 | ### Диапазон повторений `{,}` 141 | 142 | Чтобы указать диапазон повторений, необходимо после символа записать фигурный скобки с нужным диапазоном, разделенным запятой. 143 | 144 | ```js 145 | /lo{2,4}k/g 146 | ``` 147 | 148 | > lok look lk loook looook loooooook 149 | 150 | Верхнюю границу можно опускать. Например, запись `a{3,}` говорит о том, что символ _a_ должен встречаться не менее трёх раз. 151 | 152 | ### Группировка `()` 153 | 154 | Скобки позволяют сгруппировать любую последовательность символов, чтобы в дальнейшем обращается к ним используя выражение `\число`, где число - порядковый номер сгруппированной последовательности. 155 | 156 | ```js 157 | /(la)-\1{2}-\1{3}/g // Группируем выражение "la" и затем, обращаемся к нему через "\1" 158 | ``` 159 | 160 | > la-laaa-la-lala-lalala-lalala-la-la-la 161 | 162 | ```js 163 | /(la)-\1-(laa)-\2/g 164 | ``` 165 | 166 | > laa-la-laa-la-la-laa-laa-lalal 167 | 168 | Чтобы игнорировать сохранение группы используется конструкция `(?:)`. 169 | 170 | ```js 171 | /(?:abc)-(test),\1,\1/g // В данном случае группа "abc" не будет сохранена, поэтому первый индекс указывает на "test". 172 | ``` 173 | 174 | > abc,test-abc-test,test,test-abc-test 175 | 176 | Группам можно задавать любые имена. Для этого используется конструкция - `(?P...)`, где Name - название, ... - любая последовательность символов. Для обращения к именованным группам используется конструкция - `(?P=Name)`. 177 | 178 | ```js 179 | /(?P7{3})-(?P=seven){2}-(?P=seven)/g 180 | ``` 181 | 182 | > 7777-77-7777777-777-777777-777-777-7-7-7-7777-7 183 | 184 | Если у Вас возникли трудности с пониманием группировки, советую [посмотреть данное видео](https://youtu.be/W9CffcsYpAU). 185 | 186 | ### Логическое ИЛИ `|` 187 | 188 | Вертикальная черта позволяет указывать альтернативные варианты для поиска. Это чем-то похоже на использование квадратных скобок `[abc]`, но только вертикальная черта может работать с целыми словами и выражениями, а не только с отдельными символами. 189 | 190 | ```js 191 | /yes|no/g 192 | ``` 193 | 194 | > yes,maybe,no,idk,ok 195 | 196 | ### Экранирование `\` 197 | 198 | Для того, чтобы использовать в поиске специальные символы `{} [] / \ + *. $ ^ |?`, необходимо поставить впереди знак косой черты `\`. 199 | 200 | ```js 201 | /\.|\?/g // Поиск точек "." или знаков вопроса "?" 202 | ``` 203 | 204 | > What now? What next? Times up. Wake up. 205 | 206 | ### Поиск в начале строки `^` 207 | 208 | Символ каретки в регулярном выражении говорит о том, что поиск производится только по началу строк. 209 | 210 | ```js 211 | /^[0-9]*/gm // Поиск чисел которые находятся в начале строки 212 | ``` 213 | 214 | > 1. Apples x10
    215 | > 2. Cookies x5
    216 | > 3. Eggs x7 217 | 218 | ### Поиск в конце строки `$` 219 | 220 | Символ доллара в регулярном выражении говорит о том, что поиск производится только по концу строк. 221 | 222 | ```js 223 | /com|net/gm 224 | ``` 225 | 226 | > google.com
    227 | > nodejs.org
    228 | > sourceforge.net 229 | 230 | ### Классы символов 231 | 232 | Для более удобного поиска целого класса символов существуют встроенные обозначения. 233 | 234 | #### Любой словесный символ `\w` 235 | 236 | Обе записи ниже эквивалентны. 237 | 238 | ```js 239 | /[a-zA-Z0-9_]/g 240 | ``` 241 | 242 | ```js 243 | /\w/g 244 | ``` 245 | 246 | > some random words for example 247 | 248 | #### Любой не словесный символ `\W` 249 | 250 | ```js 251 | /[^a-zA-Z0-9_]/g 252 | ``` 253 | 254 | ```js 255 | /\W/g 256 | ``` 257 | 258 | > developer_2022@gmail.com 259 | 260 | #### Любая цифра `\d` 261 | 262 | ```js 263 | /[0-9]/g 264 | ``` 265 | 266 | ```js 267 | /\d/g 268 | ``` 269 | 270 | > developer_2022@gmail.com 271 | 272 | #### Любой символ кроме цифр `\D` 273 | 274 | ```js 275 | /[^0-9]/g 276 | ``` 277 | 278 | ```js 279 | /\D/g 280 | ``` 281 | 282 | > developer_2022@gmail.com 283 | 284 | #### Пробел `\s` 285 | 286 | К пробелам также относятся различные символы переноса строк. 287 | 288 | ```js 289 | /[\r\n\t\f\v ]/g 290 | ``` 291 | 292 | ```js 293 | /\s/g 294 | ``` 295 | 296 | #### Любой символ кроме пробела `\S` 297 | 298 | ```js 299 | /[^\r\n\t\f\v ]/g 300 | ``` 301 | 302 | ```js 303 | /\S/g 304 | ``` 305 | 306 | ### Позиционные проверки 307 | 308 | Для того, чтобы найти фразу, которая должна находится до или после другой фразы используются позиционные проверки (lookarounds). 309 | 310 | #### Опережающие проверки `(?=)` `(?!)` 311 | 312 | Чтобы найти выражение Х после которого стоит выражение Y, используется конструкция `X(?=Y)`. 313 | 314 | ```js 315 | /\d+(?=€)/g 316 | ``` 317 | 318 | > 200$ 750€ 100$ 330€ 550$ 319 | 320 | Чтобы найти выражение Х после которого НЕ стоит выражение Y, используется конструкция `X(?!Y)`. 321 | 322 | ```js 323 | /\d{4,}(?!€)/g 324 | ``` 325 | 326 | > This car was costed about 7000€ in 2015 327 | 328 | #### Ретроспективные проверки `(?<=)` `(? {"id":4,"value":123,name:"test"} 337 | 338 | Чтобы найти выражение X перед которым НЕ стоит выражение Y, используется конструкция `(? $5 $6 $7 2019 2009 1999 345 | 346 | 347 | ## Практика 348 | 349 | Потратьте немного времени на закрепление изученного материала. Напишите простую библиотеку на Вашем любимом языке программирования, которая будет выполнять валидации (проверки) заданных строк. Например, на соответствие электронной почты или номера телефона. Напишите валидатор для паролей, чтобы он соответствовал заданным требованиям по длине, наличию специальных символов, заглавных букв или цифр. Это будет вдвойне полезным занятием, поскольку в будущем вы сможете использовать эту библиотеку в Ваших приложениях. 350 | 351 | Дополнительно по запросу в Google – _regex practice_, можно найти много интересных заданий на тему регулянрых выражений. 352 | 353 | ## Дополнительные материалы 354 | 355 | 1. 📄 [**Awesome Regex** – GitHub](https://github.com/aloisdg/awesome-regex) 356 | 1. 📺 [**Регулярные выражения в SEO: где и как применяются** – YouTube](https://youtu.be/ZxWfQW32dIE) 357 | 1. 📘 [**Регулярные выражения. Сборник рецептов** – Ян Гойвертс, Стивен Левитан, 2010](https://www.litmir.me/data/Book/0/156000/156298/Goiverts_Yan_Regulyarnye_vyracheniya._Sbornik_receptov_%5BPodrobnye_resheniya_na_vosmi_yazykah_programmirova_Litmir.net_bid156298_original.pdf) 358 | -------------------------------------------------------------------------------- /images/security/hashing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/security/hashing.png -------------------------------------------------------------------------------- /images/security/hashing_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/security/hashing_eng.png -------------------------------------------------------------------------------- /images/software/message-queue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/software/message-queue.png -------------------------------------------------------------------------------- /images/software/message-queue_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/software/message-queue_eng.png -------------------------------------------------------------------------------- /images/software/web-server_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/software/web-server_eng.png -------------------------------------------------------------------------------- /images/software/web-server_rus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/software/web-server_rus.png -------------------------------------------------------------------------------- /images/testing/testing-pyramid_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/testing/testing-pyramid_eng.png -------------------------------------------------------------------------------- /images/testing/testing-pyramid_rus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DEBAGanov/interview_questions/b87d116fd46fc070cb199168eaf3f90f94952f18/images/testing/testing-pyramid_rus.png -------------------------------------------------------------------------------- /questions_data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1, 4 | "title": "Что такое Java?", 5 | "content": "Java — это объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Ключевые особенности:\n\n* Кроссплатформенность\n* Строгая типизация\n* Автоматическое управление памятью\n* Многопоточность\n* Большая стандартная библиотека" 6 | }, 7 | { 8 | "id": 2, 9 | "title": "Что такое JVM?", 10 | "content": "JVM (Java Virtual Machine) — виртуальная машина Java, исполняющая байт-код Java. Основные функции:\n\n* Загрузка и проверка байт-кода\n* Компиляция байт-кода в машинный код\n* Управление памятью и сборка мусора\n* Обеспечение безопасности\n* Взаимодействие с операционной системой" 11 | }, 12 | { 13 | "id": 3, 14 | "title": "Объясните понятие ООП в Java", 15 | "content": "Объектно-ориентированное программирование (ООП) в Java базируется на концепции объектов. Основные принципы:\n\n* Инкапсуляция — сокрытие внутренних данных и реализации\n* Наследование — создание новых классов на основе существующих\n* Полиморфизм — возможность объектов с одинаковым интерфейсом иметь разные реализации\n* Абстракция — выделение значимых характеристик объекта" 16 | }, 17 | { 18 | "id": 4, 19 | "title": "Что такое примитивные типы в Java?", 20 | "content": "Примитивные типы данных в Java представляют собой базовые типы, которые не являются объектами и хранят только одно значение. Основные примитивные типы:\n\n* byte — 8-битное целое число со знаком\n* short — 16-битное целое число со знаком\n* int — 32-битное целое число со знаком\n* long — 64-битное целое число со знаком\n* float — 32-битное число с плавающей точкой\n* double — 64-битное число с плавающей точкой\n* char — 16-битный символ Unicode\n* boolean — логическое значение (true/false)" 21 | }, 22 | { 23 | "id": 5, 24 | "title": "Как работает сборщик мусора в Java?", 25 | "content": "Сборщик мусора (Garbage Collector) в Java автоматически управляет памятью, освобождая её от объектов, которые больше не используются программой. Основные принципы работы:\n\n1. Отслеживание ссылок на объекты\n2. Определение объектов, которые больше не имеют ссылок (недостижимы)\n3. Освобождение памяти, занятой такими объектами\n4. Дефрагментация памяти для повышения эффективности\n\nВ JVM используется несколько алгоритмов сборки мусора: Serial GC, Parallel GC, CMS, G1 и др." 26 | }, 27 | { 28 | "id": 6, 29 | "title": "Чем отличается интерфейс от абстрактного класса?", 30 | "content": "Основные отличия интерфейса от абстрактного класса в Java:\n\n* Интерфейс содержит только абстрактные методы (до Java 8) и константы, абстрактный класс может иметь и реализованные методы\n* Класс может реализовать несколько интерфейсов, но наследовать только один абстрактный класс\n* Интерфейс определяет контракт, абстрактный класс — скорее базовую реализацию\n* Абстрактный класс может иметь конструкторы и поля экземпляра, интерфейс — нет\n* С Java 8 интерфейс может иметь default-методы с реализацией и статические методы\n* С Java 9 интерфейс может иметь private-методы" 31 | }, 32 | { 33 | "id": 7, 34 | "title": "Что такое исключения и как с ними работать?", 35 | "content": "Исключения в Java — это объекты, представляющие ошибки или непредвиденные ситуации в программе. Они позволяют отделить код обработки ошибок от основной логики программы.\n\nИерархия исключений:\n* Throwable — базовый класс\n * Error — критические ошибки системы (обычно не обрабатываются)\n * Exception — ошибки, которые можно обработать\n * RuntimeException — необязательные для обработки (unchecked)\n * Другие Exception — обязательные для обработки (checked)\n\nРабота с исключениями:\n```java\ntry {\n // код, который может вызвать исключение\n} catch (IOException e) {\n // обработка конкретного исключения\n} catch (Exception e) {\n // обработка других исключений\n} finally {\n // код, который выполнится в любом случае\n}\n```" 36 | }, 37 | { 38 | "id": 8, 39 | "title": "Что такое коллекции в Java?", 40 | "content": "Коллекции в Java — это структуры данных, представляющие собой хранилища объектов с различными свойствами и возможностями. Основные интерфейсы и реализации:\n\n* Collection — базовый интерфейс\n * List — упорядоченная коллекция (может содержать дубликаты)\n * ArrayList — динамический массив\n * LinkedList — двусвязный список\n * Set — коллекция уникальных элементов\n * HashSet — быстрая реализация через хеш-таблицу\n * TreeSet — сортированное дерево\n * Queue — очередь (FIFO)\n * LinkedList — двусвязный список\n * PriorityQueue — приоритетная очередь\n* Map — отображения ключ-значение\n * HashMap — быстрая хеш-таблица\n * TreeMap — сортированная по ключам\n * LinkedHashMap — сохраняет порядок вставки" 41 | }, 42 | { 43 | "id": 9, 44 | "title": "Как работает многопоточность в Java?", 45 | "content": "Многопоточность в Java позволяет выполнять несколько задач одновременно. Основные концепции:\n\n* Потоки (Threads) — наименьшие единицы исполнения\n* Синхронизация — механизмы защиты общих ресурсов\n * synchronized — ключевое слово для блокировки доступа\n * wait()/notify() — для координации потоков\n* java.util.concurrent — библиотека для работы с многопоточностью\n * Executor — фреймворк для управления потоками\n * ConcurrentHashMap — потокобезопасная хеш-таблица\n * AtomicInteger — атомарные операции\n * CountDownLatch, CyclicBarrier — для синхронизации работы потоков\n\nПример создания потока:\n```java\n// Через наследование\nclass MyThread extends Thread {\n public void run() {\n // код потока\n }\n}\n\n// Через интерфейс\nclass MyRunnable implements Runnable {\n public void run() {\n // код потока\n }\n}\n```" 46 | }, 47 | { 48 | "id": 10, 49 | "title": "Что такое лямбда-выражения в Java?", 50 | "content": "Лямбда-выражения, введенные в Java 8, представляют собой краткий способ записи анонимных функций. Они позволяют обрабатывать функции как данные.\n\nСинтаксис: (параметры) -> выражение или блок кода\n\nПримеры:\n```java\n// Без параметров\nRunnable r = () -> System.out.println(\"Hello\");\n\n// Один параметр\nConsumer c = s -> System.out.println(s);\n\n// Несколько параметров\nComparator comp = (s1, s2) -> s1.length() - s2.length();\n\n// Блок кода\nActionListener listener = e -> {\n System.out.println(\"Button clicked\");\n performAction();\n};\n```\n\nЛямбда-выражения тесно связаны с функциональными интерфейсами — интерфейсами с одним абстрактным методом." 51 | }, 52 | { 53 | "id": 11, 54 | "title": "Что такое Java?", 55 | "content": "Java — это объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Ключевые особенности:\n\n* Кроссплатформенность\n* Строгая типизация\n* Автоматическое управление памятью\n* Многопоточность\n* Большая стандартная библиотека" 56 | }, 57 | { 58 | "id": 12, 59 | "title": "Что такое JVM?", 60 | "content": "JVM (Java Virtual Machine) — виртуальная машина Java, исполняющая байт-код Java. Основные функции:\n\n* Загрузка и проверка байт-кода\n* Компиляция байт-кода в машинный код\n* Управление памятью и сборка мусора\n* Обеспечение безопасности\n* Взаимодействие с операционной системой" 61 | }, 62 | { 63 | "id": 13, 64 | "title": "Объясните понятие ООП в Java", 65 | "content": "Объектно-ориентированное программирование (ООП) в Java базируется на концепции объектов. Основные принципы:\n\n* Инкапсуляция — сокрытие внутренних данных и реализации\n* Наследование — создание новых классов на основе существующих\n* Полиморфизм — возможность объектов с одинаковым интерфейсом иметь разные реализации\n* Абстракция — выделение значимых характеристик объекта" 66 | }, 67 | { 68 | "id": 14, 69 | "title": "Что такое примитивные типы в Java?", 70 | "content": "Примитивные типы данных в Java представляют собой базовые типы, которые не являются объектами и хранят только одно значение. Основные примитивные типы:\n\n* byte — 8-битное целое число со знаком\n* short — 16-битное целое число со знаком\n* int — 32-битное целое число со знаком\n* long — 64-битное целое число со знаком\n* float — 32-битное число с плавающей точкой\n* double — 64-битное число с плавающей точкой\n* char — 16-битный символ Unicode\n* boolean — логическое значение (true/false)" 71 | }, 72 | { 73 | "id": 15, 74 | "title": "Как работает сборщик мусора в Java?", 75 | "content": "Сборщик мусора (Garbage Collector) в Java автоматически управляет памятью, освобождая её от объектов, которые больше не используются программой. Основные принципы работы:\n\n1. Отслеживание ссылок на объекты\n2. Определение объектов, которые больше не имеют ссылок (недостижимы)\n3. Освобождение памяти, занятой такими объектами\n4. Дефрагментация памяти для повышения эффективности\n\nВ JVM используется несколько алгоритмов сборки мусора: Serial GC, Parallel GC, CMS, G1 и др." 76 | } 77 | ] 78 | -------------------------------------------------------------------------------- /Вопрос 2835. Cобеседование по Java. Разбор вопросов и ответов.md: -------------------------------------------------------------------------------- 1 | # Cобеседование по Java. Разбор вопросов и ответов. 2 | 3 | 4 | 5 | 6 |    7 | 8 | 9 |    10 | 11 | с 2790 вопрос по 2834 вопрос 12 | 13 | 14 | Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется. 15 | 16 | Если вам интересно мое резюме: https://github.com/DEBAGanov 17 | 18 | 19 | 20 | Собеседование по Java EE — Spring Framework (вопросы и ответы). 21 | 22 | 2790. Расскажите о Spring Framework. 23 | 2791. Какие некоторые из важных особенностей и преимуществ Spring Framework? 24 | 2792. Что вы понимаете под Dependency Injection (DI)? 25 | 2793. Как реализуется DI в Spring Framework? 26 | 2794. Какие преимущества использования Spring Tool Suite? 27 | 2795. Приведите названия некоторых важных Spring модулей. 28 | 2796. Что вы понимаете под аспектно-ориентированным программированием (Aspect Oriented Programming — AOP)? 29 | 2797. Что такое Aspect, Advice, Pointcut, JoinPoint и Advice Arguments в АОП? 30 | 2798. В чем разница между Spring AOP и AspectJ АОП? 31 | 2799. Что такое IoC контейнер Spring? 32 | 2800. Что такое Spring бин? 33 | 2801. Какое значение имеет конфигурационный файл Spring Bean? 34 | 2802. Какие различные способы настроить класс как Spring Bean? 35 | 2803. Какие вы знаете различные scope у Spring Bean? 36 | 2804. Что такое жизненный цикл Spring Bean? 37 | 2805. Как получить объекты ServletContext и ServletConfig внутри Spring Bean? 38 | 2806. Что такое связывание в Spring и расскажите об аннотации @Autowired? 39 | 2807. Какие различные типы автоматического связывания в Spring? 40 | 2808. Является ли Spring бин потокобезопасным? 41 | 2809. Что такое контроллер в Spring MVC? 42 | 2810. Какая разница между аннотациями @Component, @Repository и @Service в Spring? 43 | 2811. Расскажите, что вы знаете о DispatcherServlet и ContextLoaderListener. 44 | 2812. Что такое ViewResolver в Spring? 45 | 2813. Что такое MultipartResolver и когда его использовать? 46 | 2814. Как обрабатывать исключения в Spring MVC Framework? 47 | 2815. Как создать ApplicationContext в программе Java? 48 | 2816. Можем ли мы иметь несколько файлов конфигурации Spring? 49 | 2817. Какие минимальные настройки, чтобы создать приложение Spring MVC? 50 | 2818. Как бы вы связали Spring MVC Framework и архитектуру MVC? 51 | 2819. Как добиться локализации в приложениях Spring MVC? 52 | 2820. Как мы можем использовать Spring для создания веб-службы RESTful, возвращающей JSON? 53 | 2821. Приведите пример часто используемых аннотаций Spring. 54 | 2822. Можем ли мы послать объект как ответ метода обработчика контроллера? 55 | 2823. Как загрузить файл в Spring MVC? 56 | 2824. Как проверить (валидировать) данные формы в Spring Web MVC Framework? 57 | 2825. Что вы знаете Spring MVC Interceptor и как он используется? 58 | 2826. Spring JdbcTemplate класс и его применение. 59 | 2827. Как использовать Tomcat JNDI DataSource в веб-приложении Spring? 60 | 2828. Каким образом можно управлять транзакциями в Spring? 61 | 2829. Расскажите о Spring DAO. 62 | 2830. Как интегрировать Spring и Hibernate? 63 | 2831. Расскажите о Spring Security. 64 | 2832. Как внедрить java.util.Properties в Spring Bean? 65 | 2833. Назовите некоторые из шаблонов проектирования, используемых в Spring Framework? 66 | 2834. Best Practices в Spring Framework. 67 | 68 | 69 | 70 | 71 | Список вопросов и ответов по теме «Веб-сервисы» в Java (Java web services). 72 | Вопросы 73 | 74 | 2935. Что такое веб сервисы? 75 | 2936. В чем разница между SOA и web service? 76 | 2937. Что такое SOAP? 77 | 2938. Что такое REST? 78 | 2939. В чем разница между REST и SOAP веб сервисами? 79 | 2940. Как бы вы решили какой из REST или SOAP веб сервисов использовать? 80 | 2941. Объясните понятие WSDL. 81 | 2942. Что такое JAX-WS? 82 | 2943. Расскажите о JAXB. 83 | 2944. Можем ли мы посылать soap сообщения с вложением? 84 | 2945. Что такое MTOM? 85 | 2946. Что такое XOP? 86 | 2947. Объясните элемент SOAP envelope. 87 | 2948. Как определяется пространство имен SOAP? 88 | 2949. Что вы знаете о кодировании в SOAP (encoding)? 89 | 2950. Что определяет атрибут encodingStyle в SOAP? 90 | 2951. Какие два конечных типа веб сервисов используют JAX-WS? 91 | 2952. Какие существуют правила для кодирования записи header? 92 | 2953. Что вы знаете об инструменте wsimport? 93 | 2954. Что вы знаете об инструменте wsgen? 94 | 2955. Какие вы можете выделить различия между SOAP и другими техниками удаленного доступа? 95 | 2956. Что такое resource в REST? 96 | 2957. Какие HTTP методы поддерживаются в REST? 97 | 2958. Когда можно использовать GET запрос вместо POST для создания ресурса? 98 | 2959. Какая разница между GET и POST запросами? 99 | 2960. Что означает WADL? 100 | 2961. Какие вы знаете фреймворки, которые реализуют REST веб сервисы? 101 | 2962. Какая разница между AJAX и REST? 102 | 2963. Что делает аннотация @Path? 103 | 2964. Что делает аннотация @PathParam? 104 | 2965. Что делает аннотация @QueryParam? 105 | 2966. Что делает аннотация @MatrixParam? 106 | 2967. Что делает аннотация @FormParam? 107 | 2968. Какие два способа получения заголовка HTTP запроса в JAX-RS вы знаете? 108 | 2969. Как скачать файл с помощью JAX-RS? 109 | 110 | 111 | 112 | 113 | 114 | 115 | Собеседование по Java EE — Java Server Faces (JSF) (вопросы и ответы). Часть 1 116 | 117 | 2865. Что такое JSF? 118 | 2866. Что такое Managed Bean? 119 | 2867. Какие три типа тегов для текстовых полей существуют в JSF? 120 | 2868. Что означает аннотация @ManagedProperty? 121 | 2869. На что указывает аннотация @ApplicationScoped? 122 | 2870. Что такое связывание ресурсов в JSF? 123 | 2871. Объясните разницу между required и requiredMessage атрибутов в теге . 124 | 2872. Какие различные типы навигации по страницам поддерживаются в JSF? 125 | 2873. Какие фазы жизненного цикла в JSF вы знаете? 126 | 2874. Объясните назначение тега . 127 | 2875. Какие теги используются для action и navigation? 128 | 2876. Какие компоненты используются для отображения данных в табличном виде? 129 | 2877. Что такое событие (event)? 130 | 2878. Как мы можем получить generated event? 131 | 2879. Какие различные типы событий существуют в JSF? 132 | 2880. Что такое класс-слушатель? 133 | 2881. Какое назначение тега facelets? 134 | 2882. Назовите несколько facelets тегов. 135 | 2883. Какие различные типы валидации используются в JSF? 136 | 2884. Какие различные типы выражений поддерживаются JSF EL (Expression Language)? 137 | 2885. В чем разница между мгновенными и отложенными выражениями? 138 | 2886. Объясните разницу между value expression и method expression. 139 | 2887. Расскажите о @ViewScoped, @SessionScoped, @CustomScoped и @RequestScoped аннотациях. 140 | 2888. Какие существую способы объявить класс управляемым бином JSF? 141 | 2889. Как используются атрибуты name и eager в Managed Bean? 142 | 2890. Какие теги для валидации существуют в JSF? 143 | 2891. Какие преимущества использования JSF Framework? 144 | 2892. Какие различные теги JSF используются для конвертации? 145 | 2893. Перечислите преимущества использования языка выражений (expression language)? 146 | 2894. Поясните название backing bean. 147 | 2895. Какие стандартные библиотеки тегов JSF вы знаете? 148 | 2896. Какие основные функции выполняет метод в backing bean? 149 | 2897. Какие различные реализации JSF API вы знаете? 150 | 2898. Объясните архитектуру JSF. 151 | 2899. Как различные компоненты рендерятся на JSF странице? 152 | 2900. Может JSF содержать несколько файлов конфигурации? 153 | 2901. Чем различается понятия backing bean и managed bean? 154 | 2902. Как отобразить сообщения об ошибках в JSF? 155 | 2903. Объясните назначение тега selectOne menu в JSF. 156 | 2904. Объясните в чем разница между атрибутами immediate и rendered? 157 | 2905. Какие два способа связывания поддерживается JSF? 158 | 2906. Какая минимальная конфигурация необходима для JSF приложения? 159 | 2907. Что означает navigation rule в JSF? 160 | 2908. Расскажите о назначение тегов converter в JSF. 161 | 2909. Перечислите преимущества таблицы данных в JSF. 162 | 2910. Как реализовать интернационализацию (локализацию) (i18n) в JSF? 163 | 2911. Какая модель рендеринга применяется в JSF? 164 | 2912. Что такое render kit? 165 | 2913. Что такое view object? 166 | 2914. Что подразумевается под Bean Scope? 167 | 2915. В чем разница между JSF-1 и JSF-2? 168 | 2916. Может ли отсутствовать faces-config.xml у JSF приложения? 169 | 2917. Сравните JSF и Spring Framework. 170 | 2918. Почему JSF не так популярна как, например, MVC фреймворки вроде Spring MVC, хотя JSF старше и входит в JEE? 171 | 2919. Можем ли мы интегрировать JSF с другими популярными фреймворками вроде Spring, Hibernate и т.д.? 172 | 2920. JSF Best Practices. 173 | 174 | 175 | 176 | 177 | 178 | 179 | Собеседование по Java EE — JEE Servlet API (вопросы и ответы) 180 | 181 | 2968. Что такое сервлет? 182 | 2969. Какова структура веб-проекта? 183 | 2970. Что такое контейнер сервлетов? 184 | 2971. Какие задачи, функциональность контейнера сервлетов? 185 | 2972. Что вы знаете о сервлет фильтрах? 186 | 2973. Зачем нужны слушатели в сервлетах? 187 | 2974. Когда вы будете использовать фильтры, а когда слушатели? 188 | 2975. Как обработать исключения, выброшенные другим сервлетом в приложении? 189 | 2976. Что такое дескриптор развертывания? 190 | 2977. Как реализовать запуск сервлета с запуском приложения? 191 | 2978. Что представляет собой объект ServletConfig? 192 | 2979. Что представляет собой объект ServletContext? 193 | 2980. В чем отличия ServletContext и ServletConfig? 194 | 2981. Что такое Request Dispatcher? 195 | 2982. Как можно создать блокировку (deadlock) в сервлете? 196 | 2983. Как получить адрес сервлета на сервере? 197 | 2984. Как получить информацию о сервере из сервлета? 198 | 2985. Как получить ip адрес клиента на сервере? 199 | 2986. Что вы знаете о классах обертках (wrapper) для сервлетов? 200 | 2987. Каков жизненный цикл сервлета и когда какие методы вызываются? 201 | 2988. Какие методы необходимо определить при создании сервлетов? 202 | 2989. В каком случае вы будете переопределять метод service()? 203 | 2990. Есть ли смысл определить конструктор для сервлета, как лучше инициализировать данные? 204 | 2991. В чем отличия GenericServlet и HttpServlet? 205 | 2992. Как вызвать из сервлета другой сервлет этого же и другого приложения? 206 | 2993. Что вы знаете и в чем отличия методов forward() и sendRedirect()? 207 | 2994. Стоит ли волноваться о “многопоточной безопасности” работая с сервлетами? 208 | 2995. В чем отличие между веб сервером и сервером приложений? 209 | 2996. Какой метод HTTP не является неизменяемым? 210 | 2997. Почему HttpServlet класс объявлен как абстрактный? 211 | 2998. В чем разница между методами GET и POST? 212 | 2999. Что такое MIME-тип? 213 | 3000. Назовите преимущества Servlet над CGI? 214 | 3001. Какие наиболее распространенные задачи выполняемые в Servlet контейнере? 215 | 3002. В чем разница между PrintWriter и ServletOutputStream? 216 | 3003. Можем ли мы получить PrintWriter и ServletOutputStream одновременно в сервлете? 217 | 3004. Расскажите о интерфейсе SingleThreadModel. 218 | 3005. Какие существуют атрибуты у сервлетов и какая сфера их применения? 219 | 3006. Почему необходимо переопределить только init() метод без аргументов? 220 | 3007. Что означает URL encoding? Зачем нужны методы java.net.URLEncoder.encode() и decode()? 221 | 3008. Зачем нужны и чем отличаются методы encodeUrl() и encodeRedirectUrl()? 222 | 3009. Какие различные методы управления сессией в сервлетах вы знаете? 223 | 3010. Что означает URL Rewriting? 224 | 3011. Как применяются Cookies в сервлетах? 225 | 3012. Как уведомить объект в сессии, что сессия недействительна или закончилась? 226 | 3013. Какой существует эффективный способ удостоверится, что все сервлеты доступны только для пользователя с валидной сессией? 227 | 3014. Как мы можем обеспечить transport layer security для нашего веб приложения? 228 | 3015. Как организовать подключение к базе данных и обеспечить логирование log4j в сервлете? 229 | 3016. Какие важные особенности существуют в Servlet 3? 230 | 3017. Какие различные способы аутентификации сервлета? 231 | 3018. Написать сервлет, реализующий загрузку файла на сервер. 232 | 233 | 234 | Собеседование по Java EE — JEE API (вопросы и ответы) 235 | 236 | 3019. Что такое Java EE? 237 | 3020. Какие модули входят в Java EE? 238 | 3021. Какие типы Java EE клиентов вы знаете? (applets, Application clients, Java Web Start-enabled clients, by Java Web Start technology. 239 | Wireless clients, based on MIDP technology) 240 | 3022. Что вы знаете о EJB? 241 | 3023. Какая разница между .jar, .war и .ear файлами? 242 | 3024. Какие компоненты содержит веб модуль? 243 | 3025. Java CDI. 244 | 3026. Какие технологии поддерживает Java EE? 245 | 3027. Расскажите о Java Persistense API. 246 | 3028. Что входит в web уровень JEE? 247 | 3029. Java Bean Validation. 248 | 3030. Java EE Security. 249 | 3031. Java EE Messaging. 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | Квалификационные задания для Java разработчиков 260 | Теперь подробнее о заданиях. Задания разделены на 3 категории. 261 | Level 1 позволяет оценить базовые знания, насколько вы, знаете базовые 262 | основы языка, основы программирования и насколько хорошо владеете 263 | программами необходимыми для разработки продуктов. 264 | Level 2 содержит вопросы, позволяющие оценить глубину ваших знаний в той 265 | или иной части языка программирования, а так же узнать о знании смежных 266 | технологий. 267 | Ну и последняя часть, это Level 3 в которой собранны вопросы и задачи по 268 | разработке масштабируемых высоконагруженных систем, а так же вопросы 269 | на знание низкоуровнего устройства технологий. 270 | 271 | 272 | 273 | Level I 274 | Вопросы данной категории не имеют однозначного ответа который можно было нагуглить или 275 | найти в википедии. Если вы еще в ответах укажите, как, при каких обстоятельствах 276 | сталкивались с проблемой на собственном опыте и как решили - это будет несомненным 277 | плюсом, и будет засчитано как COMBO X8. 278 | Q1 279 | Опишите основные плюсы разработки на Java. Как Вы производите сборку (build)? 280 | Q2 281 | Какие технологии Java Enterprise Edition вы чаще всего используете? В чем 282 | сложность их использования? 283 | Q3 284 | Расскажите о плюсах использования паттерна MVC. В каких случаях не стоит его 285 | использовать? Какие в нем минусы? 286 | Q4 287 | Расскажите об используемых Вами фреймворках (программных каркасах). В чем их 288 | плюсы? Для каких задач лучше использовать существующий фреймворк, а когда 289 | лучше все написать самому? 290 | Q5 291 | Сборка мусора. Какие проблемы с ней связанны? Какие решения вы бы предложили? 292 | Q6 293 | В чем плюсы использования SVN/CVS/GIT? Какие сложности при работе с ним у вас возникали? 294 | 295 | Q7 296 | При работе в команде, каким бы местам в разработке, вы бы удилили большее 297 | внимание? Какие бы соглашения (Coding Conventions) вам бы помогли в командной 298 | разработке? 299 | Q8 300 | Использование баг-трекеров. В чем плюсы? Расскажите о проблемах использования 301 | вами баг-трекеров. 302 | 303 | 304 | Level II 305 | Вопросы данной категории содержат технические вопросы, в некоторых вам даже придется 306 | попробовать себя в роли компилятора. Если вы сможете в ваших ответах на данные вопросы 307 | указать, что же еще происходит на низком уровне или почему так происходит - это будет 308 | засчитано как COMBO X16. 309 | Q1 310 | Объясните почему происходит следующее: Расскажите, в каких случаях, какой 311 | контейнер сервлетов лучше использовать: 312 | • Resin 313 | • Tomcat 314 | • Jetty 315 | • WebSphere 316 | • GlassFish 317 | • JBoss 318 | 319 | Q2 320 | Расскажите о использовании Java Message Service (JMS), какие проблемы могут 321 | возникнуть при работе сним? 322 | Q3 323 | Каковы плюсы использования Enterprise Java Beans (EJB)? Какие альтернативные 324 | технологии можно использовать вместо EJB? 325 | 326 | 327 | Q4 328 | Есть большая продакшен система. Поступает информация, что одна из основных 329 | частей (ORM) начала выдавать ошибки. Вам нужно эти ошибки исправить. ORM 330 | система работает с базой C-Store, используя С++ код, через JNI. 331 | • Опишите как Вы начнете анализ места генерации ошибок. 332 | • Какие варианты временного устранения неполадки (костыля) Вы можете предложить? 333 | Q5 334 | Нужно написать прослойку между почтовым сервером и front-end приложением 335 | (Flash AS3 Application). Опишите следующие моменты: 336 | • Какой формат обмена данными вы бы использовали, для минимального трафико-обмена 337 | (по умолчанию считаем, front-end сможет читать абсолютно любой формат)? 338 | • В чем плюсы выбранного вами формата? 339 | • Какие бы технологии (сервера/фреймворки/утилиты) вы использовали? 340 | 341 | 342 | Level III 343 | В данной категории содержатся задачи и описание реально возникающих проблем. Постарайтесь 344 | придумать и описать ваше решение данных задач. Чем более детализовано будет решение, тем 345 | лучше! Вы можете искать решения в интернете, гуглить, читать википедию и так далее, но 346 | помните, что вероятнее всего в будущем вам придется столкнутся с такими задачами. Если вы 347 | решите все эти задачи, то вы - TRUE HARDCORE JAVA DEVELOPER. 348 | Q1 349 | Есть проект, суть которого в продаже автомобилей. Требования у заказчиков 350 | такие: версионность данных(как Wikipedia), возможность расширения моделей 351 | данных (можно добавить к описанию автомобиля кастомное свойство, например 352 | наличие модинга). Опишите следующие моменты: 353 | • Какую базу данных лучше всего использовать? 354 | • Как реализовать версионность в данном случае? 355 | • Как реализовать возможность расширения моделей? 356 | • Какова будет конечная структура базы данных? 357 | • Какие сложности могут возникнуть в реализации проекта? 358 | 359 | 360 | Q2 361 | Планируется проект, рассчитанный на большое количество информации, для 362 | этого изначально планируется использовать более 6 серверов с MySQL базами 363 | данных (есть возможность докупить любое количество серверов). Опишите 364 | следующие моменты: 365 | • Как распределить нагрузку между всеми серверами? 366 | • Как реализовать максимальную стабильность работы серверов? 367 | • Как можно снизить загрузку серверов? 368 | • Оптимально ли использовать MySQL? Каковы плюсы и минусы использования? 369 | Q3 370 | Поступило предложение заказчика, на создания аналога сервиса микроблогинга 371 | Twitter. На вас ложится задача разработки первичной версии архитектуры 372 | проекта. По-умолчанию считаем, что заказчик готов предоставить 373 | неограниченные средства. Опишите следующие моменты: 374 | • Какую конфигурацию программной части вы бы составили для проекта (Операционная 375 | система, языки программирования, база данных, фреймворки или сторонние разработки)? 376 | Опишите в чем плюсы вашей конфигурации. 377 | • Какие слабые стороны возможны у данного проекта? Какие решения Вы можете 378 | предложить? 379 | • Опишите схему внутренней работы проекта. 380 | 381 | 382 | 1. Общие вопросы 383 | 384 | 385 | 386 | 1.1 Каковы основные функции разных версий Spring Framework? 387 | 388 | 1.2 Что такое Spring Framework? 389 | 390 | 1.3. Перечислите преимущества Spring Framework. 391 | 392 | 1.4 Каковы различные функции Spring Framework? 393 | 394 | 1.5 Сколько модулей в Spring Framework и какие они? 395 | 396 | 1.6 Что такое файл конфигурации Spring? 397 | 398 | 1.7 Каковы различные компоненты приложения Spring? 399 | 400 | 1.8 Как можно использовать Spring? 401 | 402 | 403 | 404 | 2. Внедрение зависимости (Ioc) 405 | 406 | 407 | 408 | 2.1 Что такое контейнер Spring IOC? 409 | 410 | 2.2 Что такое внедрение зависимостей? 411 | 412 | 2.3 Сколько способов может быть выполнено внедрение зависимостей? 413 | 414 | 2.4 Различия между внедрением конструктора и внедрением сеттера. 415 | 416 | 2.5 Сколько контейнеров с МОК будет весной? 417 | 418 | 2.6 Различия между BeanFactory и ApplicationContext. 419 | 420 | 2.7. Перечислите некоторые преимущества IoC. 421 | 422 | 2.8 Механизм реализации Spring IoC. 423 | 424 | 425 | 426 | 3. Beans 427 | 428 | 429 | 430 | 3.1 Что такое весенняя фасоль? 431 | 432 | 3.2 Какие методы настройки предоставляет Spring? 433 | 434 | 3.3 Поддерживает ли Spring централизованную область видимости компонентов? 435 | 436 | 3.4 Каков жизненный цикл контейнера для весенних зерен? 437 | 438 | 439 | 3.5 Что такое внутренняя составляющая весны? 440 | 441 | 3.6. Что такое пружинный узел 442 | 443 | 444 | 445 | 446 | 3.7 Какие существуют методы автоматической сборки? 447 | 448 | 449 | 3.8 Каковы ограничения автоматической сборки? 450 | 451 | 452 | 453 | 4. Аннотация 454 | 455 | 456 | 457 | 4.1 Какие важные аннотации Spring вы использовали? 458 | 459 | 4.2 Как начать сборку аннотации весной? 460 | 461 | 462 | 4.3 В чем разница между @Component, @Controller, @Repository, @Service? 463 | 464 | 4.4 Какая польза от аннотации @Required? 465 | 466 | 4.5. Какая польза от аннотации @Autowired? 467 | 468 | 4.6 Какая польза от аннотации @Qualifier? 469 | 470 | 4.7. Какая польза от аннотации @RequestMapping? 471 | 472 | 473 | 474 | 5. Доступ к данным 475 | 476 | 477 | 478 | 5.1 Какая польза от Spring DAO? 479 | 480 | 5.2 Перечислите исключения, создаваемые Spring DAO. 481 | 482 | 483 | 5.3 Какие классы существуют в Spring JDBC API? 484 | 485 | 486 | 5.4 Как можно получить доступ к Hibernate с помощью Spring? 487 | 488 | 5.5. Перечислите типы управления транзакциями, поддерживаемые Spring 489 | 490 | 5.6 Какие рамки ORM поддерживает Spring? 491 | 492 | 493 | 494 | 6. AOP 495 | 496 | 497 | 498 | 499 | 6.1 Что такое АОП? 500 | 501 | 502 | 503 | 6.2 Что такое параметры Aspect, Advice, Pointcut, JointPoint и Advice в АОП? 504 | 505 | 506 | 6.3 Что такое совет? 507 | 508 | 509 | 6.4 Какие существуют советы (советы)? 510 | 511 | 6.5 Укажите на разницу между беспокойством и сквозным беспокойством в весеннем сезоне. 512 | 513 | 514 | 6.6 Каковы методы реализации АОП? 515 | 516 | 6.7 В чем разница между Spring AOP и AspectJ AOP? 517 | 518 | 6.8 Как понять прокси в Spring? 519 | 520 | 6.9 Что такое ткачество? 521 | 522 | 523 | 524 | 7. MVC 525 | 526 | 527 | 528 | 7.1 Какая польза от Spring MVC framework? 529 | 530 | 7.2. Опишите рабочий процесс DispatcherServlet. 531 | 532 | 7.3. Введение в контекст WebApplicationContext --------------------------------------------------------------------------------