mirror of
https://github.com/yakimka/python_interview_questions.git
synced 2025-12-18 20:04:35 +03:00
Compare commits
14 Commits
1.0.0
...
renovate/p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
535848e08c | ||
|
|
d4e0aed6ee | ||
|
|
e364d2cc98 | ||
|
|
7bd2b608a3 | ||
|
|
ae4c5061aa | ||
|
|
a19d2ebf06 | ||
|
|
33d7ec3d0c | ||
|
|
db9d0142b8 | ||
|
|
0b40521541 | ||
|
|
345d531fde | ||
|
|
adcaa9e332 | ||
|
|
7c45b4264c | ||
|
|
bcc68f8424 | ||
|
|
2ad0d538c2 |
6
.github/workflows/ci-workflow.yml
vendored
6
.github/workflows/ci-workflow.yml
vendored
@@ -6,7 +6,7 @@ jobs:
|
||||
check-toc:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run
|
||||
run: make toc-check
|
||||
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v4
|
||||
- name: Get TAG
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
run: echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
run: sed -i "s/dev-build/$TAG/g" metadata.txt
|
||||
- name: Create epub
|
||||
uses: docker://pandoc/core:2.14
|
||||
uses: docker://pandoc/core:2.19
|
||||
with:
|
||||
args: --toc --toc-depth=6 -o questions_${{ env.TAG }}.epub metadata.txt questions.md
|
||||
|
||||
|
||||
12
README.md
12
README.md
@@ -128,7 +128,7 @@
|
||||
+ [В каких случаях можно обработать SyntaxError](questions.md/#В-каких-случаях-можно-обработать-SyntaxError)
|
||||
+ [Можно ли создавать собственные исключения](questions.md/#Можно-ли-создавать-собственные-исключения)
|
||||
+ [Для чего нужны предупреждения (warnings) и как создать собственное](questions.md/#Для-чего-нужны-предупреждения-warnings-и-как-создать-собственное)
|
||||
+ [Для чего нужен модуль warning](questions.md/#Для-чего-нужен-модуль-warning)
|
||||
+ [Для чего нужен модуль warnings](questions.md/#Для-чего-нужен-модуль-warnings)
|
||||
* [Декораторы](questions.md/#Декораторы)
|
||||
+ [Что такое декораторы. Зачем нужны](questions.md/#Что-такое-декораторы-Зачем-нужны)
|
||||
+ [Что может быть декоратором. К чему может быть применен декоратор](questions.md/#Что-может-быть-декоратором-К-чему-может-быть-применен-декоратор)
|
||||
@@ -322,6 +322,16 @@
|
||||
* [Что такое VACUUM в PostgreSQL](questions.md/#Что-такое-VACUUM-в-PostgreSQL)
|
||||
* [Что такое EXPLAIN. Какая разница между ним и EXPLAIN ANALYZE](questions.md/#Что-такое-EXPLAIN-Какая-разница-между-ним-и-EXPLAIN-ANALYZE)
|
||||
* [Какие виды Join'ов вы знаете, чем они отличаются друг от друга](questions.md/#Какие-виды-Joinов-вы-знаете-чем-они-отличаются-друг-от-друга)
|
||||
- [Дизайн-интервью](questions.md/#Дизайн-интервью)
|
||||
* [План интервью](questions.md/#План-интервью)
|
||||
* [1. Сбор требований](questions.md/#1-Сбор-требований)
|
||||
* [2. Эстимейты](questions.md/#2-Эстимейты)
|
||||
* [3. API](questions.md/#3-API)
|
||||
* [4. High-level design](questions.md/#4-High-level-design)
|
||||
* [5. Detailed design](questions.md/#5-Detailed-design)
|
||||
+ [Performance mantras](questions.md/#Performance-mantras)
|
||||
* [6. Масштабирование](questions.md/#6-Масштабирование)
|
||||
+ [Performance bottlenecks](questions.md/#Performance-bottlenecks)
|
||||
- [Вопросы работодателю](questions.md/#Вопросы-работодателю)
|
||||
* [Вопросы HR'у](questions.md/#Вопросы-HRу)
|
||||
* [Вопросы для технического собеседования](questions.md/#Вопросы-для-технического-собеседования)
|
||||
|
||||
249
questions.md
249
questions.md
@@ -12,14 +12,18 @@
|
||||
### Какие операции поддерживают большинство последовательностей
|
||||
|
||||
- `x in s`, `x not in s` – находится ли элемент x в последовательности s (для строк и последовательностей байтов – является ли x подстрокой s)
|
||||
- `s + t` – конкатенация последовательностей
|
||||
- `s + t` – конкатенация последовательностей s и t
|
||||
- `s * n, n * s` – конкатенация n нерекурсивных копий последовательности s
|
||||
- `s[i]` – i-й элемент последовательности s
|
||||
- `s[i:j]` – срез последовательности s от i до j
|
||||
- `s[i:j:k]` – срез последовательности s от i до j с шагом k
|
||||
- `len(s)` – длина последовательности
|
||||
- `min(s)` – минимальный элемент последовательности
|
||||
- `max(s)` – максимальный элемент последовательности
|
||||
- `s[:i]` - срез всех элементов последовательности s до i (не включая i)
|
||||
- `s[i:]` - срез всех элементов последовательности s от i до последнего элемента
|
||||
- `s[-i:]` - срез последних i элементов последовательности s
|
||||
- `s[::-1]` - перевернуть последовательность
|
||||
- `s[i:j]` – срез последовательности s от i до j (не включая j)
|
||||
- `s[i:j:k]` – срез последовательности s от i до j с шагом k (не включая j)
|
||||
- `len(s)` – длина последовательности s
|
||||
- `min(s)` – минимальный элемент последовательности s
|
||||
- `max(s)` – максимальный элемент последовательности s
|
||||
- `s.index(x[, i[, j]])` – индекс первого вхождения x (опционально – начиная с позиции i и до позиции j)
|
||||
- `s.count(x)` – общее количество вхождений x в s
|
||||
- `sum(s)` – сумма элементов последовательности
|
||||
@@ -68,7 +72,43 @@
|
||||
|
||||
На уровне языка отличаются тем, что в кортеж нельзя добавить или убрать элемент. На уровне интерпретатора различий нет. Обе коллекции представлены массивом указателей на структуру `PyObject`.
|
||||
|
||||
Для списка определены функции, которые добавляют в такой массив новый элемент, удаляют имеющийся, соединяют два массива в один. Они вызываются методами списка `.append()`, `.pop()`, `.sort()` и т.д.
|
||||
Существуют специальные функции для работы со списками. Они вызываются методами списка. Ниже приведены наиболее часто используемые.
|
||||
|
||||
```python
|
||||
# Создаем исходный список
|
||||
lst = [1, 2, 3]
|
||||
|
||||
# append(x): добавляет элемент в конец списка
|
||||
lst.append(4)
|
||||
# Теперь lst = [1, 2, 3, 4]
|
||||
|
||||
# extend(iterable): расширяет список, добавляя элементы из итерируемого объекта
|
||||
lst.extend([5, 6])
|
||||
# Теперь lst = [1, 2, 3, 4, 5, 6]
|
||||
|
||||
# insert(i, x): вставляет элемент x на позицию i
|
||||
lst.insert(0, 'start')
|
||||
# Теперь lst = ['start', 1, 2, 3, 4, 5, 6]
|
||||
|
||||
# remove(x): удаляет первое вхождение элемента x
|
||||
lst.remove(3)
|
||||
# Теперь lst = ['start', 1, 2, 4, 5, 6]
|
||||
|
||||
# pop([i]): удаляет и возвращает элемент на позиции i (по умолчанию последний)
|
||||
last = lst.pop()
|
||||
# last = 6, а lst = ['start', 1, 2, 4, 5]
|
||||
|
||||
# sort(): сортирует список на месте
|
||||
lst = [3, 1, 4, 1, 5, 9, 2]
|
||||
lst.sort()
|
||||
# Теперь lst = [1, 1, 2, 3, 4, 5, 9]
|
||||
|
||||
# reverse(): разворачивает список на месте
|
||||
lst.reverse()
|
||||
# Теперь lst = [9, 5, 4, 3, 2, 1, 1]
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Что такое диапазон
|
||||
|
||||
@@ -380,7 +420,7 @@ foo()
|
||||
|
||||
Интерпретатор создаёт объект «john» и «имя» var, а затем связывает объект с данным именем.
|
||||
При вызове функции, новых объектов не создаётся, вместо этого в её области видимости создаётся имя, которое связывается с существующим объектом.
|
||||
Но в python есть изменяемые и неизменяемые типы. К первым, например, относятся числа: при арифметических операциях существующие объекты не меняются, а создаётся новый объект, с которым потом связывается существующее имя. Если же со старым объектом после этого не связано ни одного имени, оно будет удалено с помощью механизма подсчёта ссылок.
|
||||
Но в python есть изменяемые и неизменяемые типы. Ко вторым, например, относятся числа: при арифметических операциях существующие объекты не меняются, а создаётся новый объект, с которым потом связывается существующее имя. Если же со старым объектом после этого не связано ни одного имени, оно будет удалено с помощью механизма подсчёта ссылок.
|
||||
Если же имя связано с переменной изменяемого типа, то при операциях с ней изменяется память объекта, соответственно все имена, связанные с данной областью памяти «увидят» изменения.
|
||||
|
||||
### Что такое замыкание
|
||||
@@ -925,9 +965,9 @@ except ZeroDivisionError:
|
||||
Базовым классом для предупреждений является Warning, который наследуется от Exception.
|
||||
Базовым классом-наследником Warning для пользовательских предупреждений является UserWarning.
|
||||
|
||||
### Для чего нужен модуль warning
|
||||
### Для чего нужен модуль warnings
|
||||
|
||||
В модуле warning собраны функции для работы с предупреждениями.
|
||||
В модуле warnings собраны функции для работы с предупреждениями.
|
||||
Основной является функция warn, которая принимает один обязательный параметр message, который может быть либо строкой-сообщением, либо экземпляром класса или подкласса Warning (в таком случае параметр category устанавливается автоматически) и два опциональных параметра: category (по умолчанию – UserWarning) – класс предупреждения и stacklevel (по умолчанию – 1) – уровень вложенности функций, начиная с которого необходимо выводить содержимое стека вызовов (полезно, например, для функций-обёрток для вывода предупреждений, где следует задать stacklevel=2, чтобы предупреждение относилось к месту вызова данной функции, а не самой функции).
|
||||
|
||||
## Декораторы
|
||||
@@ -1433,16 +1473,17 @@ import aiohttp
|
||||
urls = ['http://www.google.com', 'http://www.yandex.ru', 'http://www.python.org']
|
||||
|
||||
async def call_url(url):
|
||||
print('Starting {}'.format(url))
|
||||
response = await aiohttp.get(url)
|
||||
data = await response.text()
|
||||
print('{}: {} bytes: {}'.format(url, len(data), data))
|
||||
return data
|
||||
async with aiohttp.ClientSession() as session:
|
||||
print('Starting {}'.format(url))
|
||||
async with session.get(url) as response:
|
||||
data = await response.text()
|
||||
print('{}: {} bytes: {}'.format(url, len(data), data))
|
||||
return data
|
||||
|
||||
futures = [call_url(url) for url in urls]
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(asyncio.wait(futures))
|
||||
loop.run_until_complete(asyncio.gather(*futures))
|
||||
```
|
||||
|
||||
Программа состоит из метода async. Во время выполнения он возвращает сопрограмму, которая затем находится в ожидании.
|
||||
@@ -1637,6 +1678,7 @@ class MyClass(BaseClass, metaclass=Singleton):
|
||||
## Что такое garbage collector. В чём его плюсы и минусы
|
||||
|
||||
- [Всё, что нужно знать о сборщике мусора в Python](https://habr.com/ru/post/417215/)
|
||||
- [CPython Garbage Collection: The Internal Mechanics and Algorithms](https://blog.codingconfessions.com/p/cpython-garbage-collection-internals)
|
||||
|
||||
GC (generational garbage collector) - это сборщик мусора, создавался он в первую очередь для обнаружения и удаления циклических ссылок.
|
||||
`gc` является встроенным в python модулем и при необходимости его можно выключить и запускать вручную (или не запускать). Чтобы понимать для чего был создан GC нужно понимать как в Python работает менеджер памяти и как эта память высвобождается.
|
||||
@@ -2194,6 +2236,8 @@ HTTPS — расширение протокола HTTP, поддерживающ
|
||||
- [GitHub - pkolt/design_patterns: Паттерны проектирования](https://github.com/pkolt/design_patterns)
|
||||
- [GitHub - faif/python-patterns: A collection of design patterns/idioms in Python](https://github.com/faif/python-patterns)
|
||||
- [Python Design Patterns](https://python-patterns.guide/)
|
||||
- [Design Patterns in Python: A Series](https://medium.com/@amirm.lavasani/design-patterns-in-python-a-series-f502b7804ae5)
|
||||
- [A Catalog For Design Patterns in Python](https://towardsdev.com/a-catalog-for-design-patterns-in-python-a1b69493c677)
|
||||
|
||||
### Порождающие (Creational)
|
||||
|
||||
@@ -4906,7 +4950,7 @@ print(quicksort([10, 5, 2, 3]))
|
||||
|
||||
## Очередь и стек
|
||||
|
||||
Очередь FIFO (first in first out), стрек LIFO (last in first out)
|
||||
Очередь FIFO (first in first out), стек LIFO (last in first out)
|
||||
|
||||
## Дерево
|
||||
|
||||
@@ -5288,7 +5332,7 @@ Pre-commit check можно использовать например так:
|
||||
|
||||
Запрос к реляционной базе данных обычно возвращает несколько рядов (записей) данных, но приложение за один раз обрабатывает лишь одну запись. Даже если оно имеет дело одновременно с несколькими рядами (например, выводит данные в форме электронных таблиц), их количество по-прежнему ограничено. Кроме того, при модификации, удалении или добавлении данных рабочей единицей является ряд. В этой ситуации на первый план выступает концепция курсора, и в таком контексте курсор – указатель на ряд.
|
||||
|
||||
Курсор в SQL – это область в памяти базы данных, которая предназначена для хранения последнего оператора SQL. Если текущий оператор – запрос к базе данных, в памяти сохраняется и строка данных запроса, называемая текущим значением, или текущей строкой курсора. Указанная область в памяти поименована и доступна для прикладных программ.
|
||||
Курсор в SQL – это область в памяти базы данных, которая предназначена для хранения последнего оператора SQL. Если текущий оператор – запрос к базе данных, в памяти сохраняется строка данных запроса, называемая текущим значением, или текущей строкой курсора. Указанная область в памяти поименована и доступна для прикладных программ.
|
||||
|
||||
Обычно курсоры используются для выбора из базы данных некоторого подмножества хранимой в ней информации. В каждый момент времени прикладной программой может быть проверена одна строка курсора. Курсоры часто применяются в операторах SQL, встроенных в написанные на языках процедурного типа прикладные программы. Некоторые из них неявно создаются сервером базы данных, в то время как другие определяются программистами.
|
||||
|
||||
@@ -5374,6 +5418,144 @@ USING — это сокращённая запись условия, полез
|
||||
|
||||
Еще есть cross join - декартово произведение.
|
||||
|
||||
# Дизайн-интервью
|
||||
|
||||
[Как задизайнить Facebook за пол часа или секреты System Design Interview / Алексей Петров](https://www.youtube.com/watch?v=Be7INI_U6GY)
|
||||
|
||||
Тема очень обширная, поэтому этот раздел следует воспринимать как чеклист для его прохождения.
|
||||
|
||||
## План интервью
|
||||
|
||||
Будем считать что тайм-слот интервью - 40 минут.
|
||||
|
||||
1. Уточнить требования и ограничения (4 минуты)
|
||||
2. Сделать эстимейты проектируемой системы (пропускная способность, сколько нужно хранить информации, количество серверов и т.д.) (3 минуты)
|
||||
3. System interface - какие сервисы предоставляет система, какие сервисы использует система (3 минуты)
|
||||
4. System high-level design - какие компоненты входят в систему, как они взаимодействуют друг с другом (5 минут)
|
||||
5. Component detailed design - какие компоненты входят в систему, как они взаимодействуют друг с другом. Описать возможные ботлнеки (15 минут)
|
||||
6. Масштабирование - как система будет масштабироваться (5 минут)
|
||||
7. Summary - общий обзор и презентация решения (5 минут)
|
||||
|
||||
## 1. Сбор требований
|
||||
|
||||
Собираем ответы на вопросы "Что система делает?" и "Какой должна быть система?"
|
||||
|
||||
Примеры вопросов:
|
||||
|
||||
- Это должна быть глобальная система или региональная?
|
||||
- Как быстро система должна реагировать на внесенные изменения (latency)?
|
||||
- Какая должна быть доступность системы (availability)?
|
||||
- Сколько у нас пользователей активно ежедневно?
|
||||
- Сколько пользователи генерируют трафика ежедневно (количество постов, публикаций и тд)?
|
||||
- Какое количество информации пользователь просматривает каждый день?
|
||||
|
||||
Если нам предлагают спроектировать систему по примеру существующей (twitter, facebook, google docs, etc), то мы можем спросить:
|
||||
- Какую часть системы мы проектируем?
|
||||
- Какие именно функции должны быть реализованы?
|
||||
|
||||
Сразу формируем для себя чек-лист требований, чтобы не забыть что-то важное.
|
||||
Например нам предложили спроектировать Facebook с такими требованиями:
|
||||
|
||||
- Дизайним ленту новостей (news feed) фейсбука
|
||||
- Фото/видео не реализуем
|
||||
- Ранжирование постов не нужно, хронологический порядок
|
||||
- Встраиваем реламу в ленту (желательно)
|
||||
- Глобальная система (multi-region)
|
||||
- Latency (внутри региона) < 1s
|
||||
- Latency (между регионами) < 60s
|
||||
- Durability (постоянство данных) очень важно
|
||||
- Availability (доступность) менее важно
|
||||
- Миллиард пользователей
|
||||
- 10 миллионов постов в день
|
||||
- 500 друзей в среднем
|
||||
- 5 просмотров фида на пользователя в день
|
||||
|
||||
## 2. Эстимейты
|
||||
|
||||
Чтобы посчитать эстимейты нужно примерно представить какой тип информации сколько весит.
|
||||
|
||||
Хранение информации:
|
||||
- Символ - 1 байт
|
||||
- Метаданные (строка в базе, вес поста, etc) - 5-10 килобайт
|
||||
- 1080p изображение - 2 мегабайта
|
||||
- 1080p видео (минута) - 30 мегабайт
|
||||
|
||||
Сервера:
|
||||
- Дисковое пространство - 10 терабайт
|
||||
- RAM - 256-512 гигабайт
|
||||
|
||||
Итого считаем эстимейты для примера с фейсбуком:
|
||||
- Read-write ratio - 5B / 10M = 500:1
|
||||
- RPS
|
||||
- Read: 5B / (24 * 60 * 60) = ~58k rps
|
||||
- Write: 10M / (24 * 60 * 60) = ~115 rps
|
||||
- Storage:
|
||||
- 10KB * 10M = 100GB ежедневно
|
||||
- 30 * 100GB = 3TB ежемесячно
|
||||
- Пропускная способность:
|
||||
- Read: 5B * 20 постов * 10KB = 1PB ежедневно
|
||||
- Write: 10M * 10KB = 100GB ежедневно
|
||||
|
||||
PS. RPS мы посчитали "постоянный", в пиках он может увеличиваться в 10 раз (условно)
|
||||
|
||||
## 3. API
|
||||
|
||||
Описываем максимально просто - какие методы будут доступны, какие параметры будут принимать.
|
||||
|
||||
## 4. High-level design
|
||||
|
||||
Не стоит называть какие-то конкретные технологии, а просто описывать какие компоненты будут в системе и как они будут взаимодействовать.
|
||||
Ну тоесть не нужно прям называть Nginx, а просто описать что будет балансировщик нагрузки.
|
||||
|
||||
- Если ставим лоад-балансер, то какой? (Round-robin, sticky sessions, etc)
|
||||
- Если БД, то какая? (RDBMS, NoSQL, inmemory etc)
|
||||
|
||||
## 5. Detailed design
|
||||
|
||||
- Описываем схему БД и запросы к ней (можем прям примеры запросов писать)
|
||||
- Перебираем подходы по обработке данных (pros/cons)
|
||||
- Выбираем решения и объясняем их tradeoffs
|
||||
- Проверяем требования (список который мы составили на шаге 1)
|
||||
- Определить edge cases (если они есть)
|
||||
|
||||
### Performance mantras
|
||||
|
||||
В процессе, если мы сталкиваемся с проблемой производительности, то мы можем применять следующие [мантры](https://www.brendangregg.com/methodology.html):
|
||||
- Не делай этого
|
||||
- Делай, но только один раз
|
||||
- Делай это реже
|
||||
- Сделай это позже
|
||||
- Сделай пока пользователь этого не видит
|
||||
- Сделай это параллельно
|
||||
- Сделай это дешевле
|
||||
|
||||
## 6. Масштабирование
|
||||
|
||||
Если говорим про шардирование, то сразу оговариаем какой ключ шардирования выбираем.
|
||||
|
||||
### Performance bottlenecks
|
||||
|
||||
В зависимости от количества пользователей нам может понадобиться разные инфраструктурные решения:
|
||||
|
||||
- 1000 пользователей
|
||||
- 1 сервер
|
||||
- 1 БД
|
||||
- 10 000 пользователей
|
||||
- Read replicas
|
||||
- Несколько серверов
|
||||
- Load balancer(s)
|
||||
- 100 000 пользователей
|
||||
- Message queue
|
||||
- Rate limits
|
||||
- Cache
|
||||
- CDN
|
||||
- 1 000 000 пользователей
|
||||
- Stateless services (если они еще не такие)
|
||||
- Возможно появится noSQL (если еще не использовался)
|
||||
- Database sharding
|
||||
- 1 000 000 000 пользователей
|
||||
- Regional DCs
|
||||
|
||||
# Вопросы работодателю
|
||||
|
||||
- [Вопросы не мальчика, а джуна. 22 вопроса работодателю на собеседовании на позицию «Middle Python-разработчик»](https://habr.com/ru/post/428283/)
|
||||
@@ -5382,16 +5564,20 @@ USING — это сокращённая запись условия, полез
|
||||
|
||||
1. Что с отпуском и больничными?
|
||||
2. Переносится ли отпуск на следующий год?
|
||||
3. Есть ли мед-страховка?
|
||||
4. Есть ли стажировка и как проходит?
|
||||
5. Свободный график? Нужно находиться в офисе n часов?
|
||||
6. Как в компании относятся к удалённой работе?
|
||||
7. Существует ли в компании годовая/квартальная оценка сотрудников и как она происходит?
|
||||
8. Есть ли у в компании переработки? Если есть, то компенсируются ли они и как часто они происходят?
|
||||
9. Насколько в компании сильна бюрократия?
|
||||
10. Является ли компания участником каких-либо IT-конференций и есть ли у компании публикации на IT-темы?
|
||||
11. Есть ли митапы внутри компании?
|
||||
12. Есть ли в компании стажёры и развита ли система наставничества?
|
||||
3. Какое отношение к официальным государственным выходным?
|
||||
4. Есть ли мед-страховка?
|
||||
5. Какие ограничения есть на период испытательного срока
|
||||
6. Свободный график? Нужно находиться в офисе n часов?
|
||||
7. Как в компании относятся к удалённой работе?
|
||||
8. Можно ли получить оборудование для удалённой работы (мониторы, etc.) или может есть компенсация на оборудование рабочего места
|
||||
9. Существует ли в компании полугодовая/годовая оценка сотрудников и как она происходит?
|
||||
10. Какой минимальный срок для первого пересмотра ЗП начиная с первого рабочего дня?
|
||||
11. Есть ли у в компании переработки? Если есть, то компенсируются ли они и как часто они происходят?
|
||||
12. Насколько в компании сильна бюрократия?
|
||||
13. Является ли компания участником каких-либо IT-конференций и есть ли у компании публикации на IT-темы?
|
||||
14. Есть ли митапы внутри компании?
|
||||
15. Есть ли в компании стажёры и развита ли система наставничества?
|
||||
16. Зарплата в какой валюте и привязана ли к курсу, если не в у.е?
|
||||
|
||||
## Вопросы для технического собеседования
|
||||
|
||||
@@ -5408,6 +5594,13 @@ USING — это сокращённая запись условия, полез
|
||||
11. Используется ли технология контейнеризации в проектах?
|
||||
12. Немного поспрашивать собеседующего о том, чем он занимался до этого проекта и давно ли он в проекте.
|
||||
13. Есть ли синьеры в команде или просто очень опытные разрабы?
|
||||
14. Оцениваниются ли задачи по времени или стори-поинтам?
|
||||
15. Как легко втащить в проект новую технологию? Как выбирается стек для нового проекта?
|
||||
16. Как в команде принимаются решения? Есть ли человек за которым последнее слово?
|
||||
17. Попросить описать несколько типичных задач или несколько последних
|
||||
18. Какие версии Python и фреймворков используются?
|
||||
19. Насколько часто приходится работать с legacy?
|
||||
20. Если приходится работать с legacy то какой подход: вносим минимальные правки или пытаемся привести legacy в нормальный вид?
|
||||
|
||||
# Интересные ссылки
|
||||
|
||||
|
||||
6
renovate.json
Normal file
6
renovate.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:recommended"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user