IT Stack | Technologies – Telegram
IT Stack | Technologies
33 subscribers
74 photos
37 links
От нуля к единице. Как создаются большие приложения. Все о технологиях и IT компаниях. Актуальные новости в мире IT.

Связь:
@ruslan_kuyanets
Download Telegram
Всем привет! Делюсь своим вторым каналом для Веб Разработчиков

- Где брать опыт и как искать работу?
- Как освоить сложную теорию?
- Какие ресурсы использовать для обучения?

Рассказываю тут:

✈️ Telegram Reactify — сложные темы простым языком. Теория, советы, истории с работы.

📹 YouTube Reactify — изучаем JavaScript, React, HTML, CSS. Создаем приложение новостей или курса криптовалюты.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👌1👨‍💻1
Всеми любимый Redux Toolkit 2.0

- Удален устаревший объектный синтаксис из createSlice и createReducer.
- Обновлены опции middleware и enhancers в configureStore, требующие теперь использования колбэков.
- Улучшена упаковка для совместимости ESM/CJS и модернизирован вывод сборки.
- Интегрированы все изменения в Redux Core 5.0, Reselect 5.0, и Redux Thunk 3.0.
- Обновлено стандартное поведение подписки в RTK Query.
- Добавлен новый метод combineSlices для ленивой загрузки редьюсеров слайсов.
- Введено "динамическое промежуточное ПО" для добавления промежуточного ПО во время выполнения.
- Добавлен новый синтаксис колбэков в createSlice.reducers, с опцией определения танков внутри createSlice.
- autoBatchEnhancer теперь включен по умолчанию в configureStore.
- Внесены множество улучшений для TypeScript.

#update #redux #frontend
👍3❤‍🔥1
5 сложных вопросов для Python разработчиков

1. Какие встроенные структуры данных в Python ты знаешь и чаще всего используешь?
Чаще всего используются списки (list), словари (dict), кортежи (tuple) и множества (set). Списки хранят упорядоченные коллекции элементов. Словари хранят данные в виде пар "ключ-значение" для быстрого доступа. Кортежи похожи на списки, но их нельзя изменить после создания. Множества хранят уникальные неупорядоченные элементы и полезны для операций объединения или пересечения.

2. Что такое Pydantic?
Pydantic — это библиотека для проверки данных и управления настройками с помощью аннотаций типов. Она автоматически проверяет типы данных и преобразует их в нужный формат. Это особенно полезно для обработки данных из запросов API или конфигурационных файлов. Библиотека помогает избежать ошибок, обеспечивая корректность данных перед их использованием.

3. Как обычно оптимизируете медленные запросы в ORM?
Оптимизация начинается с поиска узких мест с помощью инструментов вроде django-debug-toolbar. Основные методы: использование select_related и prefetch_related для уменьшения числа запросов, добавление индексов к полям и правильное использование only() или defer() для загрузки только нужных полей. Иногда эффективнее заменить сложный запрос ORM на прямое SQL-выражение с помощью extra() или RawSQL.

4. Что такое "лингвистические паттерны" (naming patterns, code smells)?
Лингвистические паттерны — это соглашения по именованию сущностей в коде, которые улучшают читаемость (например, CamelCase для классов). Code smells — это симптомы в коде, которые указывают на потенциальные проблемы дизайна (например, длинные методы или дублирование кода).

5. Что из себя внутри представляют списки?
Внутри список в Python — это динамический массив. Это означает, что элементы хранятся в непрерывном блоке памяти. Интерпретатор заранее резервирует немного больше памяти, чем нужно, чтобы быстро добавлять новые элементы. Когда место заканчивается, Python находит новый, больший блок памяти и копирует туда все элементы. Это делает добавление элементов в конец списка в среднем очень быстрым.

#data_structure #list #dictionary #validation #serialization #model #orm #performance #query #naming_patterns #readability #maintainability #implementation
🧑‍💻 5 сложных вопросов для Python разработчиков

1. Что такое "лингвистические паттерны" (naming patterns, code smells)?
Лингвистические паттерны — это соглашения по именованию сущностей в коде, которые улучшают читаемость (например, CamelCase для классов). Code smells — это симптомы в коде, которые указывают на потенциальные проблемы дизайна (например, длинные методы или дублирование кода).

2. Что такое Pydantic?
Pydantic — это библиотека для проверки данных и управления настройками с помощью аннотаций типов. Она автоматически проверяет типы данных и преобразует их в нужный формат. Это особенно полезно для обработки данных из запросов API или конфигурационных файлов. Библиотека помогает избежать ошибок, обеспечивая корректность данных перед их использованием.

3. Как обычно оптимизируете медленные запросы в ORM?
Оптимизация начинается с поиска узких мест с помощью инструментов вроде django-debug-toolbar. Основные методы: использование select_related и prefetch_related для уменьшения числа запросов, добавление индексов к полям и правильное использование only() или defer() для загрузки только нужных полей. Иногда эффективнее заменить сложный запрос ORM на прямое SQL-выражение с помощью extra() или RawSQL.

4. Какие встроенные структуры данных в Python ты знаешь и чаще всего используешь?
Чаще всего используются списки (list), словари (dict), кортежи (tuple) и множества (set). Списки хранят упорядоченные коллекции элементов. Словари хранят данные в виде пар "ключ-значение" для быстрого доступа. Кортежи похожи на списки, но их нельзя изменить после создания. Множества хранят уникальные неупорядоченные элементы и полезны для операций объединения или пересечения.

5. Что из себя внутри представляют списки?
Внутри список в Python — это динамический массив. Это означает, что элементы хранятся в непрерывном блоке памяти. Интерпретатор заранее резервирует немного больше памяти, чем нужно, чтобы быстро добавлять новые элементы. Когда место заканчивается, Python находит новый, больший блок памяти и копирует туда все элементы. Это делает добавление элементов в конец списка в среднем очень быстрым.

#naming_patterns #readability #maintainability #validation #serialization #model #orm #performance #query #data_structure #list #dictionary #implementation
🧑‍💻 5 сложных вопросов для Python разработчиков

1. Что такое абстрактные классы?
Абстрактные классы в Python — это классы, которые не могут быть созданы непосредственно, а служат как шаблоны для других классов. Они могут содержать абстрактные методы, которые должны быть реализованы в дочерних классах. Абстрактные классы создаются с использованием модуля abc и декоратора @abstractmethod.

2. Разница между одинарным и двойным подчеркиванием?
- Одинарное подчеркивание (_) используется как соглашение для обозначения "непубличных" атрибутов и методов, которые не предназначены для использования вне класса, но это не является жестким ограничением.
- Двойное подчеркивание (__) используется для реализации механизма именования с учётом "защищённых" атрибутов, а также для создания уникальных имен, чтобы избежать конфликтов.

3. Как работает middleware?
Middleware — это программный компонент, который обрабатывает запросы и ответы между клиентом и сервером в веб-приложении. Он может модифицировать запросы перед тем, как они попадут в обработчик, или изменять ответы перед отправкой их обратно клиенту.

4. Какие есть коды ответов HTTP?
Коды ответов HTTP делятся на пять категорий:

- 1xx (Информационные) — запрос принят, обработка продолжается.
- 2xx (Успешные) — запрос успешно выполнен (например, 200 OK).
- 3xx (Перенаправления) — нужно выполнить дополнительное действие (например, 301 Moved Permanently).
- 4xx (Ошибки клиента) — запрос содержит ошибки (например, 404 Not Found).
- 5xx (Ошибки сервера) — проблема на стороне сервера (например, 500 Internal Server Error).

5. Зачем нужен метод super в классе?
Метод super() используется для вызова методов родительского класса в дочернем классе. Это позволяет расширять или изменять функциональность родительского метода без необходимости повторно писать его код.

#abstract_class #oop #inheritance #naming #underscore #middleware #status_code #http #rest #super
🧑‍💻 5 сложных вопросов для Python разработчиков

1. Как работает middleware?
Middleware — это программный компонент, который обрабатывает запросы и ответы между клиентом и сервером в веб-приложении. Он может модифицировать запросы перед тем, как они попадут в обработчик, или изменять ответы перед отправкой их обратно клиенту.

2. Зачем нужен метод super в классе?
Метод super() используется для вызова методов родительского класса в дочернем классе. Это позволяет расширять или изменять функциональность родительского метода без необходимости повторно писать его код.

3. Разница между одинарным и двойным подчеркиванием?
- Одинарное подчеркивание (_) используется как соглашение для обозначения "непубличных" атрибутов и методов, которые не предназначены для использования вне класса, но это не является жестким ограничением.
- Двойное подчеркивание (__) используется для реализации механизма именования с учётом "защищённых" атрибутов, а также для создания уникальных имен, чтобы избежать конфликтов.

4. Что такое абстрактные классы?
Абстрактные классы в Python — это классы, которые не могут быть созданы непосредственно, а служат как шаблоны для других классов. Они могут содержать абстрактные методы, которые должны быть реализованы в дочерних классах. Абстрактные классы создаются с использованием модуля abc и декоратора @abstractmethod.

5. Какие есть коды ответов HTTP?
Коды ответов HTTP делятся на пять категорий:

- 1xx (Информационные) — запрос принят, обработка продолжается.
- 2xx (Успешные) — запрос успешно выполнен (например, 200 OK).
- 3xx (Перенаправления) — нужно выполнить дополнительное действие (например, 301 Moved Permanently).
- 4xx (Ошибки клиента) — запрос содержит ошибки (например, 404 Not Found).
- 5xx (Ошибки сервера) — проблема на стороне сервера (например, 500 Internal Server Error).

#middleware #super #inheritance #oop #naming #underscore #abstract_class #status_code #http #rest
🧑‍💻 Вопросы с собесов для Node.js Разработчика

1. Расскажите о генераторах и итераторах в JavaScript и приведите пример их использования.
Итераторы — это объекты, которые реализуют метод next() и возвращают значение на каждой итерации. Генераторы — это функции, которые создают итераторы с помощью function* и yield. Генераторы позволяют контролировать выполнение кода и возвращать значения по мере необходимости, что упрощает работу с большими или бесконечными наборами данных.

2. Что такое дескрипторы свойств объектов в JavaScript и как их можно использовать на практике?
Дескрипторы свойств — это специальные объекты, которые описывают атрибуты свойства объекта, такие как возможность его изменения, перечисления или удаления. Используя дескрипторы, можно точно контролировать, как свойства объекта будут вести себя. Например, можно сделать свойство неизменяемым или скрыть его от перебора через цикл.

3. Что такое ArrayBuffer и в чем разница между типами Uint32Array и Float32Array?
ArrayBuffer — это объект, который хранит фиксированное количество байт данных в памяти. Он используется для работы с бинарными данными. Uint32Array и Float32Array — это типизированные массивы, которые представляют разные типы данных: Uint32Array работает с беззнаковыми целыми числами, а Float32Array — с числами с плавающей точкой. Основное различие между ними — в типе данных, который они хранят.

4. Назовите несколько способов создания неизменного объекта в JavaScript.
Существуют несколько способов сделать объект неизменным. Один из самых популярных — это метод Object.freeze(), который запрещает добавление, удаление и изменение свойств объекта. Также можно использовать Object.seal(), который позволяет изменять существующие свойства, но не добавлять новые. Для глубоких объектов применяют рекурсивное замораживание.

5. Объясните разницу между последовательным и параллельным выполнением асинхронных функций. Как работают Promise.all() и Promise.allSettled()?
Последовательное выполнение асинхронных функций означает, что каждая следующая функция начинается только после завершения предыдущей, тогда как параллельное выполнение позволяет нескольким функциям выполняться одновременно.

Метод Promise.all() запускает несколько промисов параллельно и возвращает результат, когда все они успешно завершатся, а Promise.allSettled() возвращает результат независимо от того, завершился ли каждый промис успехом или ошибкой.

#функция #yield #next #объекты #defineproperty #байт #данные #arraybuffer #freeze #объект #seal #promise #асинхронность
🧑‍💻 Вопросы с собесов для Node.js Разработчика

1. Виды тестов и их различия
Основные виды тестов: unit (проверка отдельных компонентов), integration (проверка взаимодействия компонентов), e2e (проверка всей системы). Они различаются scope, скоростью выполнения и сложностью setup.

2. Pick, Omit, Partial в TS
Pick, Omit и Partial — это утилитарные типы TypeScript для работы с объектными типами. Pick создает тип из выбранных свойств исходного типа. Omit создает тип, исключая указанные свойства. Partial делает все свойства типа необязательными.

3. Что такое "всплытие" (hoisting) в контексте переменных и функций?
Hoisting (всплытие) - это механизм в JavaScript, при котором объявления переменных и функций "поднимаются" в начало своей области видимости. Объявления функций поднимаются полностью, а переменные, объявленные через var - только объявление, но не инициализация. let и const также всплывают, но не инициализируются до фактического объявления.

4. Представь есть очень толстый сложный запрос (загрузка видео или в бд). Что делать в Node.js? А если в SQL?
В Node.js для тяжелых операций используйте асинхронную обработку, потоки и очередь задач. Для SQL-запросов оптимизируйте запросы, добавляйте индексы и используйте пагинацию. В обоих случаях важно не блокировать event loop и эффективно использовать ресурсы.

5. Какие бывают транспорты между микросервисами (синхронный подход (REST, gRPC) и асинхронный (kafka, rabbitMQ, NATS))
Для коммуникации микросервисов используются синхронные (REST, gRPC) и асинхронные (Kafka, RabbitMQ, NATS) транспорты. Синхронные требуют immediate response, асинхронные используют message brokers для декаплингования сервисов.

#testing #unit #integration #type_utility #pick #omit #hoisting #performance_optimization #streams #sql_optimization #microservices #communication
🧑‍💻 Подборка из 5 вопросов для Golang разработчиков

1. Какие методы уменьшения объема Docker-образа ты знаешь?
Основные методы: использование многоступенчатой сборки (multi-stage build), выбор минимального базового образа (например, alpine), объединение команд RUN в одну для уменьшения слоёв, использование файла .dockerignore и удаление кэша пакетного менеджера в том же слое, где он использовался.

#docker #image_optimization
🧑‍💻 Подборка из 5 вопросов для Golang разработчиков

1. Как в Go реализовать middleware?
Middleware — это функция, которая оборачивает http.Handler и добавляет дополнительную логику до и после вызова ServeHTTP.

2. Как устроен Outbox-паттерн и зачем он нужен?
Outbox-паттерн сохраняет сообщение в таблицу вместе с изменением состояния, а потом отдельный процесс (consumer) читает и отправляет их в Kafka. Это обеспечивает атомарность между БД и очередью.

3. Что такое transactional outbox и зачем он нужен?
Transactional outbox — это способ гарантированной доставки сообщений между сервисами. Он сохраняет сообщение в БД в рамках бизнес-транзакции, а затем отправляет его асинхронно.

4. Как предотвратить списание средств с баланса при гонке транзакций?
Нужно использовать транзакции с блокировкой строк (SELECT FOR UPDATE), чтобы избежать одновременного изменения баланса разными транзакциями.

5. Что такое палиндром и как его определить в Go?
Палиндром — это строка, которая читается одинаково слева направо и справа налево. В Go важно учитывать работу с рунами, а не байтами, особенно для кириллицы. Также часто приводят символы к нижнему регистру для корректного сравнения.

#middleware #http #decorator #outbox #transactional_messaging #kafka #pattern #transaction #locking #balance #string #palindrome
🧑‍💻 Подборка из 5 вопросов для Golang разработчиков

1. RabbitMQ использует базу данных?
RabbitMQ не использует базу данных для хранения сообщений. Вместо этого оно записывает сообщения на диск в двух случаях: если сообщение имеет delivery_mode=2 (устойчивое сообщение) или при недостатке оперативной памяти, чтобы освободить её для других задач.

2. Что такое Erlang?
Erlang — это функциональный язык программирования, разработанный для создания распределённых и отказоустойчивых систем. RabbitMQ разработан на Erlang и использует его платформу Open Telecom Platform (OTP) для кластеризации и обеспечения высокой доступности.

3. Какой протокол использует RabbitMQ?
RabbitMQ использует AMQP (Advanced Message Queuing Protocol) — открытый стандарт для передачи сообщений через сеть. Он обеспечивает надежную, масштабируемую и стандартизированную коммуникацию между системами.

4. Что такое pub/sub?
Pub/sub (publish/subscribe) — это асинхронная модель взаимодействия, где производитель публикует сообщение на определённую тему, и все подписчики этой темы получают его одновременно. Этот подход часто используется в микросервисах для организации событийного взаимодействия.

5. Является ли RabbitMQ устойчивым?
RabbitMQ поддерживает устойчивость сообщений и очередей. Чтобы обеспечить сохранение сообщений при перезапуске сервера, очередь должна быть помечена как durable, а сообщения — как persistent (указанием delivery_mode=2 при публикации). Устойчивые очереди сохраняются между перезапусками сервера, но сами сообщения требуют дополнительного указания их устойчивости.

#rabbitmq #storage #delivery_mode #erlang #otp #amqp #protocol #pub #sub #durability #persistence
#Собес #sql #select #performance

🤔 Middle Java Backend-разработчик в компанию МВидео.

Техническое собеседование. Зима 2025. Просил 250к+. Проект: биллинг (сбор информации по поставщикам). Опыт в резюме: 3 года. Сначала было много вопросов об опыте, стеке, тестах, "почему уходишь с текущего места работы?" и т.д. Был лайкводинг.

💬 Вопросы:

- Как реализовать базовое приложение на Spring Boot?

- Зачем нужен Spring Framework?

- Что такое чистый и поддерживаемый код?

- Какие принципы важны при работе с базой данных?

- Влияет ли количество полей в SELECT на производительность?

👉 Все вопросы из этого собеседования (7)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#video #ошибки
📚 IT-расследование: как ошибка в программе убила людей?

Нашел для вас интересное видео про баг в аппарате Therac-25 и почему он стоил людям жизни.

Перейти к материалу

👉 База вопросов 👉 Новости
🧑‍💻 Подборка из 5 вопросов для Golang разработчиков

1. Можно ли передать функцию как параметр другой функции?
Да, в Go функции можно передавать как параметры другим функциям. Это позволяет создавать гибкие и переиспользуемые блоки логики. Такие функции называются функциями первого класса.

 

2. Какова алгоритмическая сложность доступа по ключу для map?


Доступ по ключу в map в Go выполняется за амортизированное время O(1). Это означает, что операции получения, вставки и удаления обычно очень быстры.

 

3. Что происходит, когда в коде просят выделить 1 КБ памяти?


При выделении 1 КБ памяти программа запрашивает у операционной системы блок памяти нужного размера. Обычно это происходит через аллокатор, который управляет памятью внутри процесса.

 

4. Как реализовать транзакции через SQL-запросы?


Используются команды BEGIN, COMMIT, ROLLBACK.

5. Почему поиск в B-tree работает быстрее полного перебора данных?


Потому что B-tree отсеивает ненужные данные, двигаясь по дереву, а не проверяя каждую строку таблицы.

 

#function #first_class #parameter #map #hash_table #complexity #memory_allocation #heap #pointer #begin #commit #rollback #b-tree #binary_search #index
#Собес #grpc #middleware #concurrency

🤔 Middle+ Golang Backend-разработчик в Ozon

Техническое собеседование. Лето 2025. Вилка 290к+. Проект: мультисервисная платформа для работы с заказами и аналитикой в Ozon. Опыт в резюме — 3.5 года. Вопросы по конкурентности, работе с HTTP, базам данных, Kafka, паттерну Outbox, архитектуре и SQL.

💬 Вопросы:

- Зачем использовать UUID вместо автоинкрементного ID в распределённой системе?

- Что такое transactional consistency в контексте Outbox?

- Что такое transactional outbox и зачем он нужен?

- Что такое паттерн Strategy и зачем он нужен?

- Как реализовать worker pool в Go?

👉 Все вопросы из этого собеседования (15)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#article #инструменты #ии
📚 AI уже тут: в какие инструменты уже интегрирован ИИ

AI довольно быстро стал интегрироваться в инструменты и пускать корни во многие профессии, QA не исключение. Здесь точно есть что оптимизировать, ведь у тестировщиков всегда много рутинных задач, которые требуют внимательности, но не слишком сложны по своей сути.

Перейти к материалу

👉 База вопросов 👉 Новости
#podcast #кейсы #проекты
📚 Machine Learning: Нейросети и машинное обучение

Подкаст "Machine Learning" — это захватывающее путешествие в мир нейросетей, машинного обучения и искусственного интеллекта, созданное для всех, кто хочет разобраться в технологиях, меняющих мир! Каждую неделю мы погружаемся в актуальные темы: от новейших архитектур нейросетей, таких как трансформеры, до применения ИИ в медицине, финансах, играх и творчестве. Вместе с ведущими экспертами, исследователями и практиками мы обсуждаем, как алгоритмы учатся, почему большие языковые модели вроде GPT революционизируют обработку данных, и какие этические дилеммы стоят за развитием ИИ.

Перейти к материалу

👉 База вопросов 👉 Новости
🧑‍💻 5 вопросов с собесов Frontend разработчиков

1. Что такое Сравнение (Diffing) и Патчинг?
Сравнение (Diffing) — это процесс, при котором React сравнивает старое и новое представление виртуального DOM, чтобы определить, какие изменения необходимо внести в реальный DOM. Патчинг — это этап, на котором React вносит эти изменения, обновляя только те элементы, которые изменились, а не перерисовывая всё дерево компонентов.

2. Что такое React Reconciliation (Этап согласования)?
React Reconciliation — это процесс, с помощью которого React обновляет интерфейс, определяя, какие изменения необходимо внести в виртуальный DOM и как это отразить на реальном DOM. Этот процесс включает сравнение старого и нового виртуального DOM, что позволяет React эффективно обновлять только те компоненты, которые изменились, а не перерисовывать всё приложение.

3. Что такое реактивность?
Реактивность — это подход к программированию, при котором интерфейс автоматически обновляется при изменении данных или состояния. В React это реализуется через систему состояния и пропсов, позволяющую разработчикам легко управлять изменениями в приложении и обеспечивать согласованность между данными и отображением.

4. Как работает реактивность под капотом и как реализовать её?
Реактивность в React работает через использование состояния и хуков, таких как useState и useEffect. Когда состояние изменяется, React автоматически инициирует перерисовку компонентов, которые зависят от этого состояния, обеспечивая согласованность между данными и интерфейсом. Реактивность достигается через механизм подписки на изменения состояния и виртуальный DOM, который минимизирует обновления реального DOM.

5. Что такое AbortController и как он используется в JavaScript для отмены асинхронных операций?
AbortController — это встроенный объект в JavaScript, который позволяет отменять асинхронные операции, такие как запросы через fetch. Он работает вместе с AbortSignal, который передаётся в асинхронную операцию. Если вы вызываете метод abort() у контроллера, операция прерывается, и её результат больше не будет обработан.

#virtual_dom #optimization #dom #реактивность #abort #fetch
#Собес #reducer #redux #solid

🤔 Middle Frontend разработчик (React) в компанию X5

Техническое собеседование. Весна 2025. Вилка: 300к+. Опыт в резюме: 4 года. Были вопросы на понимание принципа работы БД, вопросы про шардирование..

💬 Вопросы:

- Где хранить кэшированные данные? (LocalStorage, IndexedDB). Что делать, если IndexedDB не поддерживается?

- Как управлять версионностью зависимостей (например, React) между микрофронтами?

- Какие проблемы возникают в микрофронтенд-архитектуре?

- Как интерпретировать принцип замены Лисков (L в SOLID) во фронтенде (на примере React)?

- Как реализовать кэширование данных без библиотек?

👉 Все вопросы из этого собеседования (28)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
#documentation #база
📚 База знаний школы Systems Education

Большая база ссылок на статьи по различным темам: от работы с требованиями до протокола WebSocket.

Перейти к материалу

👉 База вопросов 👉 Новости
#course #ии
📚 «Введение в Data Science и машинное обучение»

Data Scientist is The Sexiest Job of the 21st Century, а машинное обучение и анализ данных - это захватывающие области, знакомство с которыми точно не оставит вас равнодушными! Мы начнем с самого начала, разберем центральные понятия и темы. Познакомимся с такими методами машинного обучения как деревья решений и нейронные сети. Практическая часть курса будет посвящена знакомству с наиболее популярными библиотеками для анализа данных, используя язык программирования Python — Pandas и Scikit-learn.

Перейти к материалу

👉 База вопросов 👉 Новости