Чем программирование игр отличается от другой разработки?
Скрипт боль
Тем же чем жизнь отличается от лавадновой удаленки обычного ИТшника - скриптом боль.cs :)
Скрипт боль
Тем же чем жизнь отличается от лавадновой удаленки обычного ИТшника - скриптом боль.cs :)
Завершить серию постов тему собеседований хочется практической задачей. При поиске товаров на любой торговой площадке мы видим разухабистые возможности фильтрации товаров. Ваша задача — спроектировать функционал фильтрации результата поиска товаров.
Если вам на собеседовании поставили задачу в такой размытой формулировке, не пытайтесь сразу приступать к её решению. В первую очередь уточните требования и ограничения. Задумайтесь на минуту, какие вопросы следует задать.
После уточнения задачи получаем следующие вводные:
— имеется клиент-серверное приложение интернет-магазина с возможностью поиска товаров;
— количество записей в результате поиска может доходить до 1кк;
— к полученным в результате поиска товарам можно применять множественные фильтры, у каждого фильтра есть набор значений;
— у разных категорий товаров разный набор фильтров;
— после применения конкретного фильтра появляется новая выборка и для нее также должны отображаться только актуальные фильтры. Рассмотрим на примере. Для телефонов должны быть фильтры "производитель" и "операционная система". После применения фильтра "производитель: Apple" в фильтрах ОС уже не может быть значения Android;
— для каждого значения фильтра необходимо отображать количество подходящих товаров. После выбора одного фильтра все счётчики должны пересчитываться. Было "производитель": "Apple: 10", "Xiaomi: 20", "Встроенная память": "128 Гб: 10", “256 Гб: 20". Выбрали "128 Гб", после применения станет, например, "производитель": "Apple: 7", "Xiaomi: 19". То есть 3 модели Apple и 1 модель Xiaomi не попали под выбранный фильтр.
— данные хранятся в PostgreSQL. Отдельно подумайте, как можно решить задачу, если у вас не стоит ограничение на базу данных
Как на настоящем собеседовании, уточняющие вопросы можно задать в комментариях. Наше решение задачи в 20:00 среды.
В DevFM пишу о полезном для разработчика: о Docker, инструментах вроде Raycast, об архитектурных схемах, записываю видео по FastAPI + Docker для начинающих. А ещё у нас есть бесплатный курс cli-for-dev по Linux на степике.
Продолжаем тему собеседований. Классический анекдот: Студент сдаёт экзамен по зоологии, а подготовился только к вопросу про блох. Тянет билет — там про собак. Начинает отвечать, что собака — млекопитающее, у неё есть голова, 4 лапы, хвост, всё это обильно покрыто шерстью, а в шерсти — блохи! И подробнейшим образом про блох. Преподаватель прерывает и просит рассказать про кошек. Студент снова: голова, усики, лапы, хвост и много шерсти, в которой — блохи, и опять про блох. Преподаватель снова прерывает и просит рассказать про рыб. Студент: тааак, рыбы., рыбы... плавают в воде, дышат жабрами, покрыты чешуёй. В чешуе блохи не водятся. Это спасает рыб от проблем с блохами. И снова про блох...
Рекомендуем версию этого анекдота с интересной историей из жизни про экзамен в РХТУ им. Менделеева. К чему это мы?
При ответе на собеседовании или на экзамене важно показать обширность и глубину ваших знаний. Выгодно максимально подробно отвечать, даже если ответ не совсем по теме. Забыли, что значит D в SOLID? Постарайтесь построить ответ так, чтобы максимально подробно рассказать про знакомые буквы. В процессе вспомнили другие темы, например, аббревиатуры, связанные с исходным вопросом? Пускайте в ход DRY, YAGNI, KISS, NIH-синдром, bus-factor и кучу другого материала, по возможности вплетая его в повествование. Высока вероятность, что собеседник забудет, что вы не до конца ответили на поставленный вопрос. Чем уместнее вы притянули смежные темы, тем менее заметна попытка скрыть незнание. Конечно, если тема совсем не к месту, то будет обратный эффект с обнаружением вашего незнания.
Кроме того, можете расставлять "ловушки". Намеренно допустите неточность в рассказе, на которую интервьюер среагирует наводящим вопросом, что ещё дальше отвлечёт его от исходного вопроса. Ляпните, что абстрактный класс и интерфейс — это одно и то же. На возмущённый уточняющий вопрос картинно задумайтесь, и дополните ответ, что не совсем одно и то же, и начните рассуждать о нюансах. Важно! Неточность можно допускать только там, где вы действительно хорошо ориентируетесь.
Но не злоупотребляйте таким приёмом. В работе важно уметь честно признать, что чего-то не знаешь. Нельзя знать всего, надо учиться у коллег, в том числе на правильном code review.
Если вы интервьюируете человека или принимаете экзамен, наоборот, добивайтесь конкретного ответа на поставленный вопрос.
В DevFM пишу о полезном для разработчика: о Docker, инструментах вроде Raycast, об архитектурных схемах, записываю видео по FastAPI + Docker для начинающих. А ещё у нас есть бесплатный курс cli-for-dev по Linux на степике.
2006-10-31: По умолчанию префикс ранее был “sqlite_”. Но затем McAfee начала использовать SQLite в своем антивирусном продукте и стала размещать файлы с именами, содержащими “sqlite”, в папке c:/temp.
Это раздражало многих пользователей Windows. Эти пользователи затем искали “sqlite” в Google, находили телефонные номера разработчиков и звонили им ночью, чтобы пожаловаться.
По этой причине стандартный префикс имени был изменен на “sqlite”, написанный задом наперед.
Таким образом, временные файлы все еще можно идентифицировать, но любой, кто достаточно умён, чтобы разобраться в коде, также, вероятно, поймёт, что звонки разработчикам не помогут избавиться от файлов.
Полиномиальное время —время выполнения алгоритма, которое растёт как полином (многочлен) от размера входных данных. Если время выполнения алгоритма можно выразить как (O(n^k)), где (n) — размер входных данных, а (k) — константа, то такой алгоритм работает за полиномиальное время.
Примеры:
Сортировка списка: Алгоритмы, такие как сортировка слиянием или быстрая сортировка, работают за (O(n \log n)), что является полиномиальным временем.
Поиск кратчайшего пути в графе: Алгоритм Дейкстры работает за (O(n^2)) или (O(n \log n)) в зависимости от реализации, что также полиномиально.
Особенности:
Алгоритмы, работающие за полиномиальное время, считаются эффективными и практически применимыми.
Задачи, которые можно решить за полиномиальное время, относятся к классу P.
Экспоненциальное время — время выполнения алгоритма, которое растёт экспоненциально в зависимости от размера входных данных. Если время выполнения можно выразить как (O(k^n)), где (n) — размер входных данных, а (k) — константа, то такой алгоритм работает за экспоненциальное время.
Примеры:
Задача коммивояжёра: Решение методом полного перебора всех возможных маршрутов требует (O(n!)) времени, что хуже экспоненциального.
Перебор всех подмножеств: Алгоритм, который проверяет все возможные подмножества множества из (n) элементов, работает за (O(2^n)).
Особенности:
Алгоритмы, работающие за экспоненциальное время, считаются неэффективными для больших входных данных, так как время выполнения становится непрактично большим даже при относительно небольших (n).
Задачи, которые могут быть решены только за экспоненциальное время, часто относятся к классам NP-трудных или NP-полных.
Полиномиальное время:
Алгоритмы, работающие за полиномиальное время, считаются практически применимыми, так как они могут обрабатывать большие объёмы данных за разумное время.
Задачи класса P (решаемые за полиномиальное время) являются основой для многих приложений в компьютерных науках, таких как обработка данных, сети, криптография и искусственный интеллект.
Экспоненциальное время:
Алгоритмы, работающие за экспоненциальное время, становятся непрактичными даже для относительно небольших входных данных. Например, при (n = 100), (2^n) уже превышает количество атомов в наблюдаемой Вселенной.
Задачи, которые могут быть решены только за экспоненциальное время, часто требуют использования приближённых методов, эвристик или параллельных вычислений.
Задача её для (n = 10) и (n = 100):
Полиномиальное время ((n^2)):
При (n = 10): (10^2 = 100) операций.
При (n = 100): (100^2 = 10,000) операций.
Экспоненциальное время ((2^n)):
При (n = 10): (2^{10} = 1,024) операций.
При (n = 100): (2^{100} \approx 1.26 \times 10^{30}) операций.
При (n = 100) полиномиальный алгоритм выполнит 10 000 операций, что вполне реально, а экспоненциальный алгоритм потребует (1.26 \times 10^{30}) операций, что практически невозможно.
Всем привет, работаю java разработчиком больше 10 лет. В этом посте хотел бы вспомнить задачу, которая однажды попалась мне на собеседовании.
Постановка задачи следующая: определить, являются ли две заданных строки перестановкой символов друг друга. Примеры:
abc, acb - является
abba, abab - является
abb, aab - не является
Первыми вспоминаются формулы для количества перестановок, в них количество вариантов стремится к факториалу, что явно не подходит для задачи по программированию. Однако можно заметить, что задача сводится к более простой: определить, совпадают ли две строки по количеству соответствующих символов. Например:
abb -> [a=1, b=2]
aab -> [a=2, b=1]
Количество соответствующих символов не совпадает
Посчитать количество символов займет линейное время (сортировка подсчетом), а дополнительная память будет пропорциональна количеству уникальных символов (алфавит).
Эта несложная задача показывает, что нужно попробовать упростить постановку, прежде чем заниматься реализацией. Такой же принцип действует при решении продуктовых задач заказчика.
Всем удачи на собеседованиях и работе!
Представьте себе: всего несколько лет назад мы могли только мечтать о компьютерах, которые "думают" и создают нечто уникальное. Сегодня это стало реальностью — нейросети уже меняют наши жизни. Но что они могут? Давайте разберёмся!
Это системы, которые учатся и работают по принципу человеческого мозга. Только представьте: вы показываете программе тысячи картин, а она сама понимает, как создавать новые шедевры!
На основе этого механизма нейросети могут: генерировать реалистичные изображения — от фантастических миров до фотопортретов, которых никогда не существовало. Создавать музыку и видео с нуля, будто вы наняли талантливую команду профессионалов. Ускорять научные исследования, анализировать данные и даже помогать находить лекарства.
Кино и игры: Создание спецэффектов, анимации и новых персонажей. Например, ИИ помогал в разработке графики для современных блокбастеров!
Медицина: Нейросети распознают опухоли на ранних стадиях лучше, чем многие специалисты. Это спасает тысячи жизней.
Образование: ИИ-тренеры адаптируются под ваш стиль обучения, помогая учить языки или осваивать сложные темы.
И это только вершина айсберга. Впереди нас ждут ещё более удивительные открытия.
Вы думаете, нейросети только для учёных? Вовсе нет! Уже сейчас они:
Экономят ваше время: пишут тексты, отвечают на письма, делают анализ данных.
Помогают в творчестве: хотите написать книгу, создать визуал или сочинить песню? ИИ готов прийти на помощь.
Упрощают рутину: от планирования дел до поиска информации.
Пример: инструменты вроде MidJourney или ChatGPT уже активно используют блогеры, предприниматели и даже школьники.
Станут ли нейросети умнее нас? Может ли ИИ заменить творческий подход и человеческую интуицию? Или это просто мощный инструмент, который остаётся под нашим контролем?
А что думаете вы?Напишите своё мнение в комментариях: боитесь ли вы технологий или считаете их лучшими помощниками?
📌 Хотите узнать больше?В моём Telegram-канале "ТРОЯН - ПроТехнологии" я рассказываю обо всех новинках, делюсь полезными инструментами и лайфхаками для работы с нейросетями.
Будущее уже наступило. Разберись в нём сегодня! 🚀✨