PHP | Вопросы собесов
Відкрити в Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Показати більше2 343
Підписники
-124 години
-47 днів
-2430 день
Архів дописів
🤔 Какая из следующих функций используется для получения текущей даты и времени в PHP?
Что такое транзакции ?
Спросят с вероятностью 13%
Транзакции в контексте баз данных представляют собой последовательность операций, которые выполняются как единое целое. Они обеспечивают выполнение всех операций в рамках транзакции либо полностью, либо ничего. Это свойство транзакций делает их важными для обеспечения целостности и консистентности данных.
Основные характеристики:
1️⃣Atomicity (Атомарность):
✅Транзакция должна быть атомарной, что означает, что все операции в рамках транзакции должны быть выполнены успешно или ни одна из них не должна быть выполнена. Если какая-либо часть транзакции не удается, вся транзакция откатывается, и данные возвращаются в исходное состояние.
2️⃣Consistency (Согласованность):
✅Транзакция должна переводить базу данных из одного согласованного состояния в другое согласованное состояние. Это означает, что после завершения транзакции все правила и ограничения базы данных остаются непротиворечивыми.
3️⃣Isolation (Изоляция):
✅Транзакции должны выполняться в изоляции друг от друга, так что операции одной транзакции не влияют на операции другой. В зависимости от уровня изоляции, параллельные транзакции могут быть ограничены в доступе к данным, которые модифицируются другими транзакциями.
4️⃣Durability (Долговечность):
✅После завершения транзакции (и фиксации изменений), изменения должны быть постоянными, даже в случае сбоя системы. Это гарантируется сохранением изменений на долговременном хранении, например, на диске.
Рассмотрим пример банковского перевода, где важно гарантировать, что деньги списываются с одного счета и зачисляются на другой в рамках одной транзакции.
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
В этом примере:
✅START TRANSACTION начинает новую транзакцию.
✅UPDATE уменьшает баланс на одном счете и увеличивает на другом.
✅COMMIT фиксирует транзакцию, делая изменения постоянными.
Если в ходе выполнения транзакции произойдет ошибка (например, недостаточно средств на счете), можно откатить изменения:
ROLLBACK;
Преимущества
1️⃣Целостность данных:
✅Обеспечивает целостность данных, гарантируя, что все операции в транзакции выполнены полностью или вообще не выполнены.
2️⃣Согласованность:
✅Поддерживает согласованность базы данных, так как все транзакции переводят базу данных из одного согласованного состояния в другое.
3️⃣Изоляция:
✅Обеспечивает изоляцию транзакций, что предотвращает взаимное влияние транзакций и гарантирует корректное выполнение параллельных операций.
4️⃣Восстановление после сбоев:
✅Транзакции обеспечивают долговечность изменений, гарантируя, что зафиксированные изменения не будут потеряны в случае сбоя системы.
Транзакции — это последовательности операций в базах данных, которые выполняются атомарно, согласованно, изолированно и долговечно. Они обеспечивают целостность и согласованность данных, изоляцию параллельных операций и долговечность изменений, что делает их важными для надежного управления данными в системах баз данных.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхЧто такое первичный ключ ?
Спросят с вероятностью 13%
Первичный ключ (primary key) — это уникальный идентификатор записи в таблице базы данных. Он служит для обеспечения уникальности каждой записи и позволяет однозначно идентифицировать каждую строку в таблице. Первичный ключ играет важную роль в организации и управлении данными в реляционных базах данных.
Основные характеристики
1️⃣Уникальность:
✅Значение первичного ключа должно быть уникальным для каждой записи в таблице. Это гарантирует, что не будет двух записей с одинаковым значением первичного ключа.
2️⃣Неизменность:
✅Значение первичного ключа не должно изменяться после того, как оно было установлено. Это позволяет поддерживать целостность данных и их связей.
3️⃣Отсутствие NULL:
✅Поле, выбранное в качестве первичного ключа, не должно содержать NULL значений. Каждая запись должна иметь определенное значение ключа.
Рассмотрим пример таблицы
users в базе данных:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
В этом примере:
✅Поле id является первичным ключом. Оно автоматически увеличивается для каждой новой записи благодаря атрибуту AUTO_INCREMENT.
✅Каждая запись в таблице users будет иметь уникальное значение в поле id.
Создание таблицы и вставка записи с первичным ключом:
<?php
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = '';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Создание таблицы
$pdo->exec("
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
)
");
// Вставка записи
$stmt = $pdo->prepare("INSERT INTO users (username, email) VALUES (:username, :email)");
$stmt->execute(['username' => 'john_doe', 'email' => 'john@example.com']);
echo "Запись успешно добавлена с id: " . $pdo->lastInsertId();
} catch (PDOException $e) {
echo "Ошибка: " . $e->getMessage();
}
?>
Преимущества
1️⃣Целостность данных: Гарантирует уникальность каждой записи и предотвращает дублирование данных.
2️⃣Производительность: Ускоряет поиск, обновление и удаление записей, так как индексируется автоматически.
3️⃣Связи между таблицами: Обеспечивает установление и поддержание связей между таблицами через внешние ключи (foreign keys).
Первичный ключ — это уникальный идентификатор записи в таблице базы данных, который обеспечивает уникальность, неизменность и отсутствие NULL значений для каждой записи.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых🤔 Какой функцией можно использовать для удаления пробелов (или других символов) из начала и конца строки в PHP?
👨💻 Джун: Слушай, вот стажировку я прошел, где теперь можно чекнуть вакансии на работу?
🍷 Мидл: Ооо, тебе помогут ребята с канала Джун работает
💯 Карьеру нужно начинать с хорошими работодателями. Твое резюме будет ликовать, ведь контент выходит каждый день, работа ждет тебя, мой друг!
😏 Не упускай возможность и подписывайся, чтобы не потерять
Чем отличается left join от right join ?
Спросят с вероятностью 7%
LEFT JOIN и RIGHT JOIN для объединения двух таблиц на основе определенного условия, но они различаются тем, как они обрабатывают строки из левой и правой таблиц.
LEFT JOIN (или LEFT OUTER JOIN)
Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если нет соответствующих строк в правой таблице, результат будет содержать NULL для всех столбцов правой таблицы.
SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id;
✅Левая таблица (table1): Все строки.
✅Правая таблица (table2): Только строки, которые соответствуют условиям соединения, или NULL, если соответствия нет.
RIGHT JOIN (или RIGHT OUTER JOIN)
Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если нет соответствующих строк в левой таблице, результат будет содержать NULL для всех столбцов левой таблицы.
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.id = table2.id;
✅Левая таблица (table1): Только строки, которые соответствуют условиям соединения, или NULL, если соответствия нет.
✅Правая таблица (table2): Все строки.
Примеры для иллюстрации
employees:
| id | name |
|----|-----------|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
salaries:
| id | salary |
|----|--------|
| 2 | 5000 |
| 3 | 7000 |
| 4 | 6000 |
LEFT JOIN:
SELECT employees.id, employees.name, salaries.salary
FROM employees
LEFT JOIN salaries
ON employees.id = salaries.id;
Результат:
| id | name | salary |
|----|---------|--------|
| 1 | Alice | NULL |
| 2 | Bob | 5000 |
| 3 | Charlie | 7000 |
RIGHT JOIN:
SELECT employees.id, employees.name, salaries.salary
FROM employees
RIGHT JOIN salaries
ON employees.id = salaries.id;
Результат:
| id | name | salary |
|----|---------|--------|
| 2 | Bob | 5000 |
| 3 | Charlie | 7000 |
| 4 | NULL | 6000 |
Ключевые отличия
1️⃣Объединяемые строки:
✅LEFT JOIN: Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы.
✅RIGHT JOIN: Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы.
2️⃣Результат для отсутствующих соответствий:
✅LEFT JOIN: Заполняет NULL для отсутствующих соответствий в правой таблице.
✅RIGHT JOIN: Заполняет NULL для отсутствующих соответствий в левой таблице.
Краткое резюме
✅LEFT JOIN: Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы или NULL, если соответствий нет.
✅RIGHT JOIN: Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы или NULL, если соответствий нет.
Эти операции помогают объединить данные из разных таблиц в зависимости от ваших конкретных требований к выборке данных.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых📕 Прогер, как ты расширяешь свой кругозор в сфере IT?
Не достаточно знать что-то одно, мысля глобально и изучая смежные отрасли, ты не только становишься умнее, но и увеличиваешь свою востребованность и свой заработок.
🗿 Не обязательно читать заумные книги и смотреть подкасты - это долго.
У нас есть решение:
🔥 Полезные статьи - концентрат знаний.
🔥 Советы - короткие сообщения, которые будут увеличивать твою эффективность.
🔥 Инструменты - tool-сайты в разы упростят и ускорят твою работу.
🧑💻 Время, силы, желание - ресурсы, которые нужно использовать с умом. Подпишись на канал Заметки прогера, IT ниша скажет "спасибо" за такого специалиста.
🤔 Какой из следующих модификаторов доступа запрещает доступ к свойству или методу класса из внешнего кода, но разрешает доступ из дочерних классов?
😭 Джун: Как мне найти работу в IT, если опыта нет?
🧑💻 Мидл: Просто зайди на канал Джун стажер и подбери стажировку по душе.
📕 Админы отбирают самые сочные вакансии от ведущих компаний, к тому же контент выходит каждый день.
🔥 Не упускай возможность и подписывайся, чтобы не потерять
Чем в composer.json отличаются require и require-dev ?
Спросят с вероятностью 13%
В файле composer.json в Composer используются секции
require и require-dev для управления зависимостями вашего проекта. Эти секции служат для разных целей, и понимание их различий важно для правильной организации зависимостей в вашем проекте.
require
Содержит список пакетов, которые необходимы для работы вашего проекта в любом окружении, будь то разработка, тестирование или продакшн. Эти зависимости необходимы для выполнения самого приложения.
Пример composer.json с require:
{
"name": "vendor/package",
"description": "A sample package",
"require": {
"monolog/monolog": "^2.0"
}
}
В этом примере:
✅Пакет monolog/monolog версии 2.0 или выше, но ниже 3.0, необходим для работы приложения.
require-dev
Содержит список пакетов, которые необходимы только для разработки и тестирования проекта. Эти зависимости не требуются для работы приложения в продакшн-окружении.
Пример composer.json с require-dev:
{
"name": "vendor/package",
"description": "A sample package",
"require": {
"monolog/monolog": "^2.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5"
}
}
В этом примере:
✅Пакет phpunit/phpunit версии 9.5 или выше, но ниже 10.0, необходим только для разработки и тестирования приложения.
Как это используется
Установка зависимостей
✅Все зависимости:
При установке всех зависимостей, включая dev-зависимости, используется команда:
composer install
Это установит пакеты, указанные в секциях require и require-dev.
✅Только продакшн-зависимости:
При установке только продакшн-зависимостей используется флаг --no-dev:
composer install --no-dev
Это установит только пакеты из секции require.
Пример использования
1️⃣Файл `composer.json`:
{
"name": "vendor/package",
"description": "A sample package",
"require": {
"monolog/monolog": "^2.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5"
}
}
2️⃣Установка всех зависимостей (включая dev-зависимости):
composer install
3️⃣Установка только продакшн-зависимостей:
composer install --no-dev
✅require: Содержит зависимости, необходимые для работы приложения во всех окружениях (продакшн, разработка и тестирование).
✅require-dev: Содержит зависимости, необходимые только для разработки и тестирования приложения, но не требуемые в продакшн-окружении.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых👨💻 Будущий специалист, ты знаешь, какая самая частая ошибка новичка в сфере IT?
Отсутствие практики убивает в тебе потенциал
✈️ Как с этим бороться, мой друг?
Найди работу и прокачивай свои скилы на конкретных задачах
🔥 У нас ты будешь находить большое количество вакансий каждый день. Понятие работы перестанет быть для тебя размытым.
Подпишись на канал и не откладывай свой прогресс в долгий ящик.
🤔 Какой из ниже перечисленных методов используется для сортировки массива по значению в обратном порядке?
🧑💻 Если твой английский позволяет ответить только на вопрос "Do you speak English", то с этим нужно что-то делать, будучи программистом.
🫤 Ты в курсе, что ...
- говорят по-английски — 20% из всех людей.
- Большое кол-во IT документации написано на английском.
Хочешь понимать код лучше? Изучи язык, который используется в его основе.
📕 На нашем канале ты постепенно будешь набираться опыта, в этом тебе помогут:
- Тесты для изучения английского: проверьте свои знания на практике.
- Английский через мемы: учите язык весело и с интересом.
- Шпаргалки для повторения: закрепите знания быстро и эффективно.
- Английский сленг программиста: станьте настоящим профи в коммуникации.
🔥 Маленький шаг в изучении иностранного откроет перед тобой большие возможности будущего специалиста и значительно повысит твое зп.
🌸 Подпишись, do it!
Как отнестись к тестовым заданиям ?
Спросят с вероятностью 7%
Тестовые задания — это распространенный метод оценки навыков и знаний кандидатов в процессе отбора на работу, особенно в технических и креативных областях. Они имеют свои плюсы и минусы, как для работодателей, так и для соискателей.
Плюсы:
1️⃣Объективная оценка навыков:
✅Тестовые задания позволяют работодателям увидеть реальные навыки кандидата в действии, а не полагаться только на резюме и собеседование.
✅Задания часто моделируют реальные рабочие задачи, что помогает оценить, как кандидат справится с повседневной работой.
2️⃣Проверка практических знаний:
✅Тестовые задания позволяют оценить практические знания и умение применять их на практике, а не только теоретическую подготовку.
3️⃣Сравнение кандидатов:
✅Единообразные тестовые задания для всех кандидатов позволяют сравнить их навыки и подходы к решению задач на равных условиях.
4️⃣Отсеивание неподходящих кандидатов:
✅Тестовые задания помогают быстро отсеять кандидатов, которые не соответствуют требованиям позиции, что экономит время и ресурсы на дальнейшие этапы отбора.
Минусы:
1️⃣Время и ресурсы:
✅Выполнение тестовых заданий может занимать много времени, что не всегда удобно для кандидатов, особенно если у них есть текущая работа или они участвуют в нескольких процессах отбора.
✅Разработка и проверка тестовых заданий также требует времени и ресурсов со стороны работодателя.
2️⃣Стресс для кандидатов:
✅Некоторые кандидаты могут испытывать стресс или дискомфорт при выполнении тестовых заданий, что может негативно сказаться на их результатах и не отражать их реальный уровень компетенции.
3️⃣Ограниченность задач:
✅Тестовые задания не всегда могут охватить весь спектр навыков, необходимых для выполнения работы. Задания могут быть узконаправленными и не отражать реальную сложность и многообразие задач на рабочем месте.
4️⃣Неоплачиваемая работа:
✅В некоторых случаях кандидаты могут чувствовать, что выполняют работу бесплатно, особенно если задания объемные и требуют значительных усилий.
Рекомендации:
1️⃣Четкость и релевантность: Задания должны быть четкими и соответствовать реальным задачам, с которыми кандидат столкнется на работе.
2️⃣Ограничение по времени: Убедитесь, что выполнение задания не занимает слишком много времени. Два-три часа — разумное время для тестового задания.
3️⃣Обратная связь: Предоставляйте обратную связь по результатам выполнения задания, даже если кандидат не прошел на следующий этап. Это помогает кандидатам улучшаться и создает положительное впечатление о компании.
4️⃣Справедливость: Убедитесь, что задания оценивают именно те навыки, которые важны для позиции, и не требуют от кандидатов выполнения слишком большого объема работы.
Тестовые задания являются эффективным инструментом оценки кандидатов, если они разработаны и используются правильно. Они помогают найти лучших кандидатов, способных эффективно выполнять работу, и дают кандидатам возможность продемонстрировать свои навыки в реальных условиях.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
🤔 Какой из ниже перечисленных методов используется для объединения массивов в PHP?
Чем отличается Stub от мока ?
Спросят с вероятностью 13%
В контексте тестирования программного обеспечения, особенно при использовании тестирования на основе объектов (например, в PHP с PHPUnit), термины "стаб" (stub) и "мок" (mock) относятся к созданию поддельных объектов или методов для имитации поведения реальных объектов. Они используются для изоляции тестируемого кода и проверки его поведения. Вот основные различия между стопами и мока:
Стаб (Stub)
✅Используется для предоставления предопределенного ответа на вызовы методов, которые не влияют на проверку поведения тестируемого кода. Основная цель — заменить реальные зависимости и предоставить контролируемую среду для тестов.
✅Позволяют задать фиктивные данные, которые будут возвращены методами объекта.
✅Они не следят за вызовами методов или их параметрами.
class UserServiceTest extends TestCase {
public function testGetUserName() {
// Создаем стаб для UserRepository
$userRepositoryStub = $this->createStub(UserRepository::class);
// Настраиваем метод find на возврат заранее определенного результата
$userRepositoryStub->method('find')
->willReturn(new User('John Doe'));
// Тестируем UserService с использованием стаба
$userService = new UserService($userRepositoryStub);
$this->assertEquals('John Doe', $userService->getUserName(1));
}
}
Мок (Mock)
✅Используется для проверки взаимодействия между тестируемым кодом и его зависимостями. Моки могут устанавливать ожидания на вызовы методов, их количество и параметры, а также проверять, что эти ожидания были выполнены.
✅Следят за вызовами методов, позволяют устанавливать ожидания и проверять, что методы были вызваны определенное количество раз с определенными параметрами.
class UserServiceTest extends TestCase {
public function testGetUserName() {
// Создаем мок для UserRepository
$userRepositoryMock = $this->createMock(UserRepository::class);
// Настраиваем ожидания для метода find
$userRepositoryMock->expects($this->once())
->method('find')
->with($this->equalTo(1))
->willReturn(new User('John Doe'));
// Тестируем UserService с использованием мока
$userService = new UserService($userRepositoryMock);
$this->assertEquals('John Doe', $userService->getUserName(1));
}
}
Основные различия
1️⃣Цель:
✅Стаб: Предоставление предопределенных ответов, фокусировка на результатах методов.
✅Мок: Проверка взаимодействий между объектами, установка ожиданий на вызовы методов и их параметры.
2️⃣Проверка:
✅Стаб: Не проверяет, как и когда вызываются методы.
✅Мок: Проверяет вызовы методов, их количество и параметры.
3️⃣Использование:
✅Стаб: Используется, когда нужно подставить фиксированные данные и не важно, как они были получены.
✅Мок: Используется, когда нужно проверить, что определенные методы были вызваны определенное количество раз с определенными параметрами.
✅Стаб возвращает заранее определенные данные и не проверяет вызовы методов.
✅Мок устанавливает ожидания на вызовы методов и проверяет их выполнение.
👉 Можно посмотреть примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхЧто такое односвязный список ?
Спросят с вероятностью 7%
Односвязный список (или просто связный список) — это базовая структура данных, состоящая из узлов, каждый из которых содержит данные и указатель (ссылку) на следующий узел в последовательности. Эта структура данных используется для хранения коллекции элементов и отличается от массивов тем, что элементы не обязательно расположены в последовательной памяти.
Структура
1️⃣Узлы (Nodes):
Каждый узел в односвязном списке состоит из двух частей:
✅Данные: Значение, которое хранится в узле (например, целое число, строка или объект).
✅Указатель: Ссылка на следующий узел в списке.
2️⃣Голова (Head):
Указатель на первый узел списка. Если список пуст, голова указывает на
null.
3️⃣Хвост (Tail):
Последний узел списка, его указатель на следующий узел равен null.
Пример реализаци
class Node:
def __init__(self, data):
self.data = data
self.next = None
class SinglyLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
last_node = self.head
while last_node.next:
last_node = last_node.next
last_node.next = new_node
def print_list(self):
current_node = self.head
while current_node:
print(current_node.data, end=" -> ")
current_node = current_node.next
print("None")
# Использование односвязного списка
sll = SinglyLinkedList()
sll.append(1)
sll.append(2)
sll.append(3)
sll.print_list() # Выведет: 1 -> 2 -> 3 -> None
Основные операции
1️⃣Вставка (Insertion):
✅В начало списка: Вставка нового узла в начало списка.
✅В конец списка: Вставка нового узла в конец списка (как показано в примере выше).
✅В середину списка: Вставка нового узла после определенного узла.
2️⃣Удаление (Deletion):
✅Удаление первого узла: Изменение указателя головы на второй узел.
✅Удаление последнего узла: Поиск предпоследнего узла и изменение его указателя на null.
✅Удаление узла в середине: Изменение указателя предыдущего узла на узел, следующий за удаляемым.
3️⃣Поиск (Search):
Поиск узла с определенным значением, начиная с головы и проходя через каждый узел до нахождения нужного или достижения конца списка.
4️⃣Обход (Traversal):
Прохождение через все узлы списка, обычно для выполнения какой-либо операции, такой как вывод данных всех узлов (как в методе print_list).
Преимущества
1️⃣Динамическое управление памятью: Узлы могут быть добавлены и удалены без перераспределения всей структуры, что делает односвязные списки гибкими и экономными с точки зрения использования памяти.
2️⃣Простота вставки и удаления: Вставка и удаление узлов, особенно в начале списка, происходит за константное время O(1).
Недостатки
1️⃣Сложность поиска: Поиск элемента в списке требует обхода всех узлов, что занимает линейное время O(n).
2️⃣Отсутствие прямого доступа: Нет возможности прямого доступа к элементу по индексу, как в массиве; необходимо пройти по всем предыдущим узлам, чтобы добраться до нужного.
Односвязный список — это структура данных, состоящая из узлов, каждый из которых содержит данные и указатель на следующий узел. Он обеспечивает гибкое управление памятью и позволяет эффективно выполнять операции вставки и удаления. Однако поиск и доступ к элементам требуют линейного времени, что может быть неэффективно для больших списков.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовыхКак запустить собственный пет-проект и зарабатывать на нём зарплату senior-разработчика?
На этом канале мы решаем сложные задачи, которые часто попадаются на собеседованиях. Но что, если перевернуть игру и вместо работы на кого-то запустить собственный пет-проект, который будет приносить деньги?
Александр Рогачев запустил телеграм-канал Indie Hackers, где рассказывает про пет-проекты, которые приносят стабильный доход своим создателям.
Без венчурных инвестиций, без бизнес-планов и команды.
Разве такое возможно?
Да!
Несколько примеров:
Агрегатор вакансий c доходом в 4000$ / месяц
Плагин для Chrome с доходом 20000₽ / месяц
Если вы в поиске свежих идей, которые могут обеспечить стабильный пассивных доход, подписывайтесь на канал Indie Hackers.
Уверен, что там вы найдёте то самое, что зажжёт огонь в вашем сердце ❤️🔥
➡️ Ссылка для входа
