0% нашли этот документ полезным (0 голосов)
2 просмотров16 страниц

Python Interview Cheatsheet-2

Документ представляет собой шпаргалку по Python, охватывающую ключевые концепции и синтаксис, необходимые для подготовки к собеседованию на позицию Junior. Он включает темы, такие как переменные, типы данных, строки, условия, циклы, функции, коллекции, обработка ошибок и декораторы. Каждая секция содержит примеры кода и важные моменты, которые следует запомнить для успешного прохождения собеседования.

Загружено:

Айжан Кахарман
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
2 просмотров16 страниц

Python Interview Cheatsheet-2

Документ представляет собой шпаргалку по Python, охватывающую ключевые концепции и синтаксис, необходимые для подготовки к собеседованию на позицию Junior. Он включает темы, такие как переменные, типы данных, строки, условия, циклы, функции, коллекции, обработка ошибок и декораторы. Каждая секция содержит примеры кода и важные моменты, которые следует запомнить для успешного прохождения собеседования.

Загружено:

Айжан Кахарман
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd

Python — Полная шпаргалка

Подготовка к Junior собеседованию · Avrora Holding


Стек: Python · FastAPI · SQLAlchemy · PostgreSQL · Redis · Docker

1. Переменные и типы данных

Переменная — коробка с именем, внутри которой хранятся данные. Содержимое можно менять —
отсюда и слово «переменная».

name = 'Айдана' # str — текст


age = 25 # int — целое число
salary = 350_000.0 # float — дробное число
is_ok = True # bool — True или False
empty = None # NoneType — нет значения

# Вывод
print(f'Привет, {name}! Тебе {age} лет.') # f-строка
print('Привет, ' + name) # конкатенация

# Ввод от пользователя
user_input = input('Введи имя: ') # всегда возвращает str!
number = int(input('Введи число: ')) # конвертация в int

# Узнать тип переменной


print(type(name)) # <class 'str'>
print(type(age)) # <class 'int'>

На собеседовании: «Переменная — именованное место в памяти. Python — динамически типизированный язык, тип
определяется автоматически при присвоении.»

2. Строки (str) — важные методы

Строки в Python неизменяемые (immutable). Каждый метод возвращает новую строку.

s = 'Привет, Айдана!'

print([Link]()) # ПРИВЕТ, АЙДАНА!


print([Link]()) # привет, айдана!
print([Link]('Айдана', 'Дана')) # Привет, Дана!
print([Link](', ')) # ['Привет', 'Айдана!']
print([Link]()) # убрать пробелы по краям
print(len(s)) # длина строки — 16
print([Link]('Прив')) # True
print([Link]('!')) # True
print('Айдана' in s) # True — есть ли подстрока

# Срезы (slice) — как в Java substring


print(s[0:7]) # Привет,
print(s[-1]) # ! — последний символ
print(s[::-1]) # строка наоборот
На собеседовании: «Строки в Python неизменяемые — методы не меняют строку, а возвращают новую. Индексация с
нуля, поддерживаются срезы.»

3. Условия — if / elif / else

Python проверяет условия сверху вниз. Как только одно сработало — остальные игнорируются.

temperature = 35

if temperature > 30:


print('Жарко!') # выполнится это
elif temperature > 20:
print('Тепло') # сюда не дойдёт
else:
print('Прохладно')

# Операторы сравнения
# == != > < >= <=

# Логические операторы
if age >= 18 and name != '':
print('OK')
if age < 13 or age > 65:
print('Особый случай')
if not is_ok:
print('Не OK')

# Тернарный оператор (как ? : в Java)


result = 'Взрослый' if age >= 18 else 'Ребёнок'

На собеседовании: «Как только одно условие сработало — Python выходит, остальные не проверяет.»

4. Циклы — for / while

# for — перебор элементов / повторить N раз


for i in range(5):
print(i) # 0 1 2 3 4

for i in range(1, 10, 2): # от 1 до 10 с шагом 2


print(i) # 1 3 5 7 9

# Перебор списка
fruits = ['яблоко', 'груша', 'манго']
for fruit in fruits:
print(fruit)

# Перебор с индексом
for i, fruit in enumerate(fruits):
print(i, fruit) # 0 яблоко, 1 груша...

# while — пока условие верно


n = 0
while n < 3:
print(n)
n += 1
# break — выйти из цикла
# continue — перейти к следующей итерации
for i in range(10):
if i == 5:
break # остановиться на 5
if i % 2 == 0:
continue # пропустить чётные
print(i) # 1 3

На собеседовании: «for — когда знаем количество итераций. while — когда условие. break выходит из цикла, continue
пропускает итерацию.»
5. Функции — def / return / *args / **kwargs

def — объявить функцию. return — вернуть результат. Функция без return возвращает None.

def greet(name):
return f'Привет, {name}!'

print(greet('Алия')) # Привет, Алия!

# Параметр по умолчанию
def power(x, n=2):
return x ** n

print(power(3)) # 9 (n=2 по умолчанию)


print(power(3, 3)) # 27

# *args — переменное число позиционных аргументов


def total(*args):
return sum(args)

print(total(1, 2, 3, 4)) # 10

# **kwargs — переменное число именованных аргументов


def show_info(**kwargs):
for key, value in [Link]():
print(f'{key}: {value}')

show_info(name='Айдана', city='Алматы')
# name: Айдана
# city: Алматы

# Lambda — анонимная функция (как в Kotlin)


square = lambda x: x ** 2
print(square(5)) # 25

# Используется с map, filter


nums = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, nums)) # [2, 4, 6, 8, 10]
evens = list(filter(lambda x: x % 2 == 0, nums)) # [2, 4]

На собеседовании: «*args — список любого числа аргументов. **kwargs — словарь именованных аргументов. lambda —
короткая анонимная функция.»

6. Коллекции — list, tuple, set, dict

Тип Синтаксис Аналог Java Изменяемый Порядок Дубликаты

list [] ArrayList Да Да Да

tuple () неизм. List Нет Да Да

set {} HashSet Да Нет Нет

dict {k: v} HashMap Да Да (Python 3.7+) ключи уникальны

# LIST
fruits = ['яблоко', 'груша', 'манго']
[Link]('банан') # добавить в конец
[Link](0, 'слива') # вставить по индексу
[Link]('груша') # удалить по значению
[Link]() # удалить последний
print(fruits[0]) # яблоко — индекс с 0!
print(fruits[-1]) # последний элемент
print(fruits[1:3]) # срез — элементы 1 и 2
print(len(fruits)) # длина
[Link]() # сортировка

# TUPLE — неизменяемый список


point = (10, 20)
x, y = point # распаковка

# SET — уникальные элементы


tags = {'python', 'java', 'python'}
# {'python', 'java'} — дубликат удалён автоматически!
[Link]('kotlin')

# Убрать дубликаты из списка одной строкой:


nums = [1, 2, 2, 3, 3, 3]
unique = list(set(nums)) # [1, 2, 3]

# DICT — ключ: значение


person = {'name': 'Дана', 'age': 30, 'city': 'Алматы'}
print(person['name']) # Дана
person['email'] = 'd@[Link]' # добавить ключ
del person['city'] # удалить ключ
print([Link]('phone', 'нет'))# безопасное получение

# Перебор словаря
for key, value in [Link]():
print(f'{key}: {value}')

На собеседовании: «list — меняется, с порядком. tuple — фиксирован, для координат/RGB. set — уникальность. dict —
ключ-значение.»
7. List Comprehension

Создать список в одну строку вместо цикла for. Аналог stream().map().collect() в Java / .map() в Kotlin.

nums = [1, 2, 3, 4, 5]

# Вместо цикла for:


squares = [x**2 for x in nums] # [1, 4, 9, 16, 25]
evens = [x for x in nums if x % 2 == 0] # [2, 4]
doubled_evens = [x*2 for x in nums if x % 2 == 0] # [4, 8]

# Строки тоже можно:


words = ['hello', 'world', 'python']
upper = [[Link]() for w in words] # ['HELLO', 'WORLD', 'PYTHON']

# Dict comprehension
squares_dict = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# Формула:
# [что_делаем for элемент in список if условие]

На собеседовании: «List comprehension — питоновский способ создать список в одну строку. Аналог stream().map().filter()
в Java.»

8. Mutable vs Immutable

Изменяемые (Mutable) Неизменяемые (Immutable)


• list [ ] • str — строка
• dict { } • int, float, bool
• set { } • tuple ( )
Можно менять содержимое после создания Нельзя изменить — создаётся новый объект

s = 'hello'
s[0] = 'H' # ОШИБКА! Строки неизменяемые

lst = [1, 2, 3]
lst[0] = 99 # OK! Списки изменяемые

На собеседовании: «Строки и кортежи неизменяемые — нельзя изменить элемент. Списки, словари и сеты изменяемые.
Это влияет на производительность и безопасность.»

9. Duck Typing и type hints

В Python не важен тип — важно есть ли нужный метод. Проверка во время выполнения, не при
компиляции.

class Dog:
def sound(self): return 'Woof'

class Cat:
def sound(self): return 'Meow'
def make_sound(animal):
print([Link]()) # неважно кто — главное есть метод!

make_sound(Dog()) # Woof
make_sound(Cat()) # Meow

# Type hints — подсказки (не обязательны, не проверяются!)


def greet(name: str) -> str:
return f'Привет, {name}!'

def add(a: int, b: int) -> int:


return a + b

На собеседовании: «В Java нужен интерфейс. В Python — просто наличие метода. Type hints — только подсказки для
IDE, Python их не проверяет.»
10. Классы, self, наследование

self = this в Java, но обязательный. __init__ = конструктор. new не нужен.

class Animal:
def __init__(self, name, age): # конструктор
[Link] = name # self = this
[Link] = age

def info(self):
return f'{[Link]}, {[Link]} лет'

def sound(self):
return '...' # базовый метод

# Наследование (аналог extends в Java)


class Dog(Animal):
def sound(self): # переопределяем метод
return 'Woof!'

def fetch(self):
return f'{[Link]} несёт мяч!'

class Cat(Animal):
def __init__(self, name, age, indoor):
super().__init__(name, age) # вызов конструктора родителя
[Link] = indoor

def sound(self):
return 'Meow!'

# Использование
dog = Dog('Барсик', 3) # new не нужен!
cat = Cat('Мурка', 2, True)

print([Link]()) # Барсик, 3 лет


print([Link]()) # Woof!
print([Link]()) # Барсик несёт мяч!
print([Link]()) # Meow!

На собеседовании: «Наследование через class Child(Parent). super().__init__() вызывает конструктор родителя. Методы
переопределяются без аннотаций.»

11. try / except — обработка ошибок

Аналог try/catch в Java. Главное отличие — блок else, которого в Java нет.

try:
result = 10 / 0
except ZeroDivisionError:
print('Нельзя делить на ноль!')
except ValueError as e:
print(f'Неверное значение: {e}')
except Exception as e: # поймает любую ошибку
print(f'Ошибка: {e}')
else:
print(f'Успех: {result}') # только если ошибки НЕ было
finally:
print('Всегда выполнится') # как в Java

# Частые исключения:
# ValueError — неверный тип значения
# TypeError — неверный тип аргумента
# KeyError — ключ не найден в словаре
# IndexError — индекс за пределами списка
# FileNotFoundError — файл не найден
# ZeroDivisionError — деление на ноль

Java Python Что делает

try { } try: Код который может сломаться

catch (Exception e) except Exception as e: Поймать ошибку

finally { } finally: Выполнится всегда

— (нет) else: Только если ошибки НЕ было


12. with — менеджер контекста

Аналог try-with-resources в Java. Гарантирует закрытие ресурса даже при ошибке.

# БЕЗ with — можно забыть закрыть файл


f = open('[Link]')
data = [Link]()
[Link]() # если ошибка выше — не выполнится!

# С with — закроется автоматически всегда


with open('[Link]', 'r', encoding='utf-8') as f:
data = [Link]()
# файл закрыт — даже если была ошибка

# Запись в файл
with open('[Link]', 'w', encoding='utf-8') as f:
[Link]('Привет!')

# Режимы открытия файла:


# 'r' — читать (по умолчанию)
# 'w' — записать (перезаписывает!)
# 'a' — добавить в конец
# 'rb' — читать в бинарном режиме

На собеседовании: «with гарантирует закрытие ресурса даже при ошибке — файлы, БД соединения, сетевые
соединения.»

13. Декораторы (@)

Обёртка вокруг функции. Добавляет поведение до и после — не меняя саму функцию. Используется
везде в FastAPI.

def my_decorator(func):
def wrapper():
print('До вызова')
func() # оригинальная функция
print('После вызова')
return wrapper

@my_decorator
def say_hello():
print('Привет!')

say_hello()
# До вызова
# Привет!
# После вызова

# Реальный пример — декоратор для логирования времени:


import time

def timer(func):
def wrapper(*args, **kwargs):
start = [Link]()
result = func(*args, **kwargs)
end = [Link]()
print(f'{func.__name__} выполнилась за {end-start:.4f} сек')
return result
return wrapper

@timer
def slow_function():
[Link](1)

# В FastAPI декораторы — это роуты:


@[Link]('/users') # GET запрос
@[Link]('/users') # POST запрос
@[Link]('/users/{id}') # PUT запрос
@[Link]('/users/{id}') # DELETE запрос

На собеседовании: «Декоратор = обёртка. Используется для логирования, замера времени, проверки прав доступа,
кэширования. В FastAPI — для роутов.»

14. None vs null

name = None # нет значения

# Проверка
if name is None: # правильно!
print('Пусто')

if name is not None: # есть значение


print(name)

# None возвращается когда функция без return


def do_nothing():
pass

result = do_nothing()
print(result) # None
print(type(result)) # <class 'NoneType'>

# Отличие от Java null:


# 1. None — объект типа NoneType
# 2. В Java есть void, в Python вместо него None
# 3. Проверять через is None, не через == None

На собеседовании: «None = нет значения, как null в Java. Но None — объект. Проверяем через is None. Функция без
return возвращает None — в Java для этого есть void.»
15. FastAPI — основной фреймворк Avrora

FastAPI = Spring Boot в мире Python. Роуты через декораторы. Автодокументация на /docs и /redoc.

from fastapi import FastAPI


from pydantic import BaseModel

app = FastAPI()

# Модель данных (как @Entity в Java)


class User(BaseModel):
name: str
age: int
email: str

# CRUD операции
@[Link]('/users') # получить всех
def get_users():
return users

@[Link]('/users/{user_id}') # получить одного


def get_user(user_id: int):
return users[user_id]

@[Link]('/users') # создать
def create_user(user: User):
[Link](user)
return user

@[Link]('/users/{user_id}') # обновить
def update_user(user_id: int, user: User):
users[user_id] = user
return user

@[Link]('/users/{user_id}') # удалить
def delete_user(user_id: int):
return [Link](user_id)

# Цепочка запроса:
# Клиент -> FastAPI -> SQLAlchemy -> PostgreSQL -> обратно

Метод Что делает Пример URL

GET Получить данные GET /users

POST Создать новое POST /users

PUT Обновить полностью PUT /users/1

PATCH Обновить частично PATCH /users/1

DELETE Удалить DELETE /users/1

16. Стек Avrora — что это и зачем

Технология Аналог Java Что делает Зачем нужно

FastAPI Spring Boot HTTP сервер, роутинг Принимает запросы от клиента

SQLAlchemy Hibernate / JPA ORM — объекты вместо SQL Работа с БД без сырого SQL
Alembic Flyway / Liquibase Миграции БД Версионирование схемы БД

PostgreSQL PostgreSQL Реляционная БД Хранение данных

Redis Redis / Ehcache Кэш в памяти Быстрый доступ к частым данным

RabbitMQ ActiveMQ Очередь сообщений Асинхронная обработка задач

Kafka Kafka Стриминг событий Большие потоки данных

Docker Docker Контейнеры Одинаковое окружение везде

На собеседовании: «Знаю Spring Boot — FastAPI та же идея. SQLAlchemy как Hibernate, PostgreSQL знаком, Docker
тоже. RabbitMQ и Kafka — очереди, видела концептуально.»

17. SQLAlchemy — работа с базой данных

ORM — Object Relational Mapping. Пишешь Python классы, SQLAlchemy переводит их в SQL. Аналог
Hibernate в Java.

from sqlalchemy import Column, Integer, String


from [Link] import DeclarativeBase

# Модель = таблица в БД
class Base(DeclarativeBase):
pass

class User(Base):
__tablename__ = 'users' # имя таблицы

id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False)
email = Column(String(200), unique=True)
age = Column(Integer)

# CRUD через SQLAlchemy (db — это сессия)


# Получить всех
users = [Link](User).all()

# Получить одного по id
user = [Link](User).filter([Link] == 1).first()

# Создать
new_user = User(name='Айдана', email='a@[Link]', age=25)
[Link](new_user)
[Link]()

# Обновить
[Link] = 'Дана'
[Link]()

# Удалить
[Link](user)
[Link]()

На собеседовании: «SQLAlchemy — ORM как Hibernate. Классы = таблицы. [Link]() вместо SQL SELECT. [Link]() +
[Link]() вместо INSERT.»
18. Docker — контейнеры

Docker упаковывает приложение и все его зависимости в контейнер. Работает одинаково везде — у тебя,
на сервере, у коллеги.

# Dockerfile — инструкция как собрать образ


FROM python:3.11

WORKDIR /app

COPY [Link] .
RUN pip install -r [Link]

COPY . .

CMD ["uvicorn", "main:app", "--host", "[Link]", "--port", "8000"]

# [Link] — запустить несколько сервисов


version: '3'
services:
app:
build: .
ports:
- "8000:8000"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret

Команда Что делает

docker build -t myapp . Собрать образ из Dockerfile

docker run myapp Запустить контейнер

docker ps Список запущенных контейнеров

docker-compose up Запустить все сервисы из compose файла

docker-compose down Остановить все сервисы

На собеседовании: «Docker — контейнер с приложением и зависимостями. Гарантирует одинаковое окружение везде.


docker-compose запускает несколько сервисов вместе.»

19. Часто задаваемые вопросы на Junior Python

В чём разница между == и is?

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True — одинаковые значения
print(a is b) # False — разные объекты в памяти

x = None
print(x is None) # True — правильная проверка на None

Что такое *args и **kwargs?


def func(*args, **kwargs):
print(args) # кортеж позиционных аргументов
print(kwargs) # словарь именованных аргументов

func(1, 2, 3, name='Айдана', city='Алматы')


# (1, 2, 3)
# {'name': 'Айдана', 'city': 'Алматы'}

Как скопировать список?

original = [1, 2, 3]
wrong = original # НЕ копия — тот же объект!
[Link](4)
print(original) # [1, 2, 3, 4] — изменился!

copy1 = [Link]() # правильная копия


copy2 = original[:] # тоже правильно

Что выведет этот код?

print(bool(0)) # False
print(bool('')) # False
print(bool([])) # False
print(bool(None)) # False
print(bool(1)) # True
print(bool('hello')) # True
print(bool([0])) # True — список с элементом

20. Советы для созвона с Adil (тимлид Avrora)

Расскажи о себе:
«У меня есть опыт разработки на Java и Kotlin — писала backend, работала с API и базами данных.
Python начала изучать недавно, но концепции те же — разбираюсь быстро. Хочу развиваться именно в
Python backend.»

Как быстро вольёшься в стек?


«FastAPI очень похож на Spring Boot — роуты через аннотации, те же HTTP методы. SQLAlchemy —
аналог Hibernate. PostgreSQL знаком. Думаю за 2–3 недели смогу делать реальные задачи, за месяц
полноценно влиться.»

Что знаешь про REST API?


«Это архитектурный стиль для взаимодействия клиента и сервера по HTTP. GET — получить, POST —
создать, PUT — обновить, DELETE — удалить. Данные передаются в JSON.»

Если не знаешь ответа:


Скажи «Не знаю точно, но понимаю концепцию так...» и рассуждай вслух. Тимлиды ценят ход мысли, а
не просто заученные ответы.

Главное на созвоне:

• Будь честной — они уже знают что у тебя нет опыта на Python
• Говори уверенно — Java/Kotlin опыт это сильная сторона
• Называй конкретные сроки — «2–3 недели», не просто «быстро»
• Задай вопросы в конце — «Как устроен онбординг?», «Какие первые задачи?»
Удачи на собеседовании в Avrora Holding! Ты готова! 💪

Вам также может понравиться