По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
На интервью по проектированию ИТ-систем кандидату нужно не только показать глубокие технические знания, но и предложить эффективные решения с нуля в ограниченное время. Такое собеседование считается одними из самых сложных среди технических.
Кандидату могут предложить спроектировать интерфейс мессенджера, новостной ленты или поисковика. Объемные задачи могут пугать и сбивать с толку. В этой статье мы рассмотрим наиболее распространённые ошибки на собеседованиях и дадим рекомендации, как их избежать, чтобы произвести лучшее впечатление на работодателя.
Что ищет интервьюер?
Для начала давайте поговорим о том, что хотят знать о вас интервьюеры. Когда интервьюеры задают вам вопрос о проектировании ИТ-системы, они ищут не только работающее решение и хорошие коммуникативные навыки.
Интервьюеры хотят получить ответы на следующие вопросы:
Сколько различных решений может методично предложить этот человек?
Может ли он провести анализ «за» и «против» различных подходов?
Какова глубина его ответов?
Думает ли этот человек о сроке службы системы и о том, как она будет развиваться по мере появления новых пользователей и данных?
Может ли он объяснить различные сценарии на конкретных примерах?
Важно отметить, что не каждый интервьюер оценит ваши сильные стороны по приведенным выше вопросам! Рассматривайте их как общие рекомендации.
Ошибка № 1. Нет понимания функциональных и нефункциональных требований
Выяснение функциональных и нефункциональных требований к системе — одна из первых вещей, которые вы должны выяснить у интервьюера.
Функциональные требования включают в себя основные функции, предлагаемые системой, и необходимы для создания конечного продукта, отвечающего ожиданиям конечных пользователей. Эти требования необходимы для того, чтобы ваша система функционировала.
Нефункциональные требования сосредоточены на ожидаемой производительности и на том, насколько ваш конечный продукт соответствует ожидаемым стандартам. Эти требования не являются необходимыми для функционирования вашей системы.
Вопросы на собеседовании по проектированию системы часто бывают намеренно расплывчатыми, и вы обязаны найти информацию, необходимую для реализации вашего проекта. Когда кандидаты переходят к разработке решения, не задав достаточно уточняющих вопросов, они могут сделать предположения о том, как должна функционировать и работать система.
Если ваш интервьюер не предлагает достаточно информации, не стесняйтесь спросить: «Каковы функциональные и нефункциональные требования к системе, которую мы проектируем?»
Потратьте время, чтобы выяснить, какие именно компоненты должна включать ваша система и каковы ее ожидаемые характеристики.
Ошибка №2. Не выявлены неисправности, точки отказа и решения
Вероятно, следует учредить награду для первого человека, который разработает систему, которая никогда не дает сбоев. Практически во всех системах есть «узкие места», и во всех системных конструкциях может быть какая-то неисправность или уязвимость, которая может привести к полному отказу системы.
Конечно, «полный отказ системы» может быть несколько драматичным, но он призван подчеркнуть важность знания слабых мест вашей системы. Как разработчик системы, вы должны уметь находить решение для непереходных, постоянных проблем, иначе система откажет сама.
Зная эти недостатки, вы сможете заранее спланировать меры по обеспечению отказоустойчивости и возвращению системы в режим 100-процентной готовности. Обязательно представьте решение (или несколько решений) для точек отказа, чтобы показать интервьюеру, что вы рассматриваете проект со всех возможных сторон.
Учет неисправностей и точек отказа может открыть дискуссию о том, станет ли пропускная способность проблемой в будущем. Если вы обнаружили, что конструкция вашей системы может выйти из строя при интенсивных нагрузках, спросите интервьюера, какая нагрузка предполагается для этой системы, прежде чем думать о том, как сделать систему более масштабируемой.
Примечание: Некоторые из самых больших (и наиболее распространенных) уязвимостей системы, которые следует искать, связаны с обработкой и вводом данных пользователем (например, лазейки в системе безопасности, SQL-инъекции).
Ошибка №3. Не учтены компромиссы для различных решений
Существует бесчисленное множество возможных решений, которые вы могли бы предложить на вопрос собеседования по проектированию системы, и, скорее всего, вы не сможете учесть компромиссы для всех из них. Однако не стоит совершать ошибку, не учитывая никаких компромиссов.
У каждой системы есть сильные и слабые стороны. Обязательно учитывайте масштабируемость, доступность, ремонтопригодность и надежность различных решений.
Ошибка №4. Недостаточная или излишняя коммуникация
Во время собеседования интервьюер оценит вашу способность общаться с другими людьми. Насколько хорошо вы умеете работать в команде? Если вы все время молчите, не задавая вопросов и не обращаясь к интервьюеру за обратной связью, это может создать впечатление, что вы не склонны к сотрудничеству или независимы до крайности. С другой стороны, вы рискуете доминировать в разговоре или перегружать собеседника неактуальной информацией.
Обе эти проблемы можно решить с помощью практики. Когда вы практикуетесь в решении проблем проектирования систем, попробуйте провести себя или кого-то другого через ваше решение. Даете ли вы им достаточно времени, чтобы задать вопросы? Ясны ли ваши объяснения и лаконичны ли они?
Наконец, убедитесь, что вам удалось выполнить следующее:
Определить проблему
Выявить все ограничения
Определить функции, необходимые для разработки системы
Определить наиболее важные компоненты для установления приоритетов
Ошибка №5. Отсутствуют обоснования дизайнерских решений
Потратьте время на то, чтобы тщательно сформулировать мыслительный процесс, лежащий в основе ваших решений.
Вы должны быть в состоянии объяснить, почему вы приняли то или иное проектное решение, и точка. Неспособность обосновать проектное решение - одна из самых серьезных ошибок, которые можно допустить на собеседовании по разработке системы, поскольку это может создать впечатление, что вы не знаете, что делаете.
Помните, что одна из главных целей интервьюера - выяснить ход ваших мыслей и понять, как вы принимаете решения. Они будут задавать вам вопросы о том, почему вы выбрали одну технологию, а не другую, или о других аспектах вашей системы. Они хотят знать, что, по вашему мнению, является наиболее подходящим решением для данной проблемы и почему.
По этой причине крайне важно ознакомиться с как можно большим количеством различных технологий и моделей проектирования систем. Один из способов научиться говорить об этих технологиях и дизайнах - объяснить их нетехническому человеку так, чтобы они были понятны.
Ошибка №6. Пропуск высокоуровневого проектирования
Переход сразу к деталям — одна из важных ошибок, которая может привести к понижению уровня. Так, например, если вы подали заявку на должность старшего специалиста SWE, а на собеседовании дали ответы на вопросы среднего уровня, вам могут предложить должность этого уровня.
Поэтому сначала обсудите детали проектирования системы высокого уровня. Важно убедиться, что в начале собеседования вы не переходите сразу к низкоуровневым аспектам проектирования системы.
Высокоуровневый дизайн (HLD) предполагает преобразование потребностей клиента в решение, которое включает в себя общий дизайн системы, архитектуру программного обеспечения, базы данных, платформы, сервисы, компоненты и модули. На этом уровне вы продумываете взаимосвязь между различными частями системы.
Низкоуровневое проектирование (LLD) сосредоточено на компонентах вашего проектного решения и обычно включает подробное описание каждого компонента, функциональной логики работы различных модулей и другие спецификации для удовлетворения потребностей вашего клиента или бизнеса.
Примечание: опытные системные дизайнеры уделяют внимание не только различным программным компонентам и их взаимодействию друг с другом, но и всему сроку жизни системы и ее развитию. Они будут думать о том, как сделать системы более эффективными, устойчивыми и масштабируемыми.
Такой большой и интересный инструмент - а разворачивать как?
В одной из предыдущих статей мы знакомились с таким инструментом разработчика, как ELK. Сегодня мы разберемся, как правильно подготовить этот комплекс для практической работы.
Для начала напомним, что ELK это один из наиболее удобных инструментов разработчика, предназначенный для быстрого выявления неполадок в работе объемных программ путем сбора и анализа логов. Этот комплекс состоит из трех приложений: поисковика Elasticsearch, сборщика данных Logstash и визуализатора Kibana. Весь комплекс разрабатывается компанией Elastic.
Ознакомимся с системными требованиями. На каждом из серверов в системе рекомендуется иметь не менее 8 физических ядер и не менее 48 Гб оперативной памяти. Кроме того, если данные планируется собирать с крупной системы, то объем внутренней памяти будем оценивать по принципу "чем больше тем лучше". 8 Тб это рекомендуемые требования, но этот показатель может варьироваться. Ну и, разумеется, чем выше скорость соединения между серверами - тем быстрее будет проводиться обработка информации. Рекомендуемый показатель - 1Гб/с. Система из трех таких серверов позволит обрабатывать до тысячи событий в секунду, собирать и отображать 95% данных за отдельные периоды времени (5 минут, сутки),хранить данные до 90 дней и обслуживать до 10 клиентов по протоколу HTTP одновременно.
Поскольку все элементы данного решения реализованы на Java, первым делом нужно установить актуальную версию Oracle Java. Также рекомендуется изучить дополнительную информацию о компонентах ELK на предмет совместимости версий.
Если на Вашей рабочей станции установлены Ubuntu или Debian, устанавливаем соединение с репозиторием для скачивания Oracle Java. Если вы пользуетесь CentOS то качаем программную среду на сервер с сайта разработчика. После того, как процесс установки завершится рекомендуется проверить актуальную версию с помощью соответствующей команды консоли. Если все хорошо, то это значит, что почва подготовлена, и можно переходить к следующему этапу
А им станет скачивание и установка поискового инструмента Elasticsearch. Это также не вызовет особой сложности достаточно скопировать в систему публичный ключ репозитория, установить с ним соединение (пользователи Debian и Ubuntu могут столкнуться с отсутствием загрузочного пакета apt-transport-https его нужно будет установить дополнительно), скачать актуальную версию Elasticsearch и запустить процесс установки. Чтобы работа приложения была корректной, его стоит добавить в автозагрузку. Затем проверяем, штатно ли прошла установка, запустив программу.
Итак, все запустилось нормально. Можно переходить к этапу конфигурирования Elasticsearch. Это не займет много времени нужно будет отредактировать пару строк в файле конфигурации /etc/elasticsearch/elasticsearch.yml. Во-первых, чтобы не собирать лишнюю информацию, указываем хост локального интерфейса, через который будет передавать данные Logstash (по умолчанию, данные собираются со всех сетевых интерфейсов), а во-вторых, указываем путь к хранилищу данных, откуда мы и будем с ними работать. Рекомендуется выделить под хранилище значительные объемы памяти чем сложнее проект, тем больше будут весить собираемые логи. После завершения процесса настройки перезапускаем и проверяем программу.
Далее нас ждет установка веб-панели Kibana. Этот процесс почти не отличается от установки Elasticsearch, ключи репозиториев будут одинаковыми. В целом, все то же самое устанавливаем соединение с репозиторием, скачиваем, устанавливаем, добавляем в автозагрузку, запускаем, проверяем. Стоит обозначить, что приложение загружается довольно долго, поэтому проверку лучше осуществить через пару минут после отдачи команды на запуск приложения.
Редактирование настроек Kibana можно осуществить через файл /etc/kibana/kibana.yml. Здесь нас интересует строка с указанием интерфейса, который будет "слушать" Kibana. Это могут быть все интерфейса, либо один определенный в данном случае нужно будет указать конкретный ip-адрес нужного сервера. Далее проверим сам веб-интерфейс, для этого указываем адрес - например, http://10.1.4.114:5601.
Наконец, перейдем к этапу установки Logstash. Здесь все то же самое, только перед проверочным запуском программу нужно настроить. Можно отредактировать основной файл настроек /etc/logstash/logstash.yml, но рациональнее будет создать несколько файлов конфигурации в директории /etc/logstash/conf.d, чтобы группировать настройки по назначению.
Создаем файлы input.conf и output.conf. В первом файле мы указываем порт, на который будем принимать информацию, а также параметры ssl, если в этом есть необходимость. Во втором файле указываем параметры передачи данных в Elasticsearch. Данные лучше передавать под указанным дополнительно индексом, также используя маску в виде даты. Также можно отключить функцию отправки данных в общий лог системы, чтобы не занимать место в хранилище дублированными фрагментами информации.
Кроме этого, потребуется создать файл с параметрами обработки данных. Дело в том, что не всегда удобно работать с полным объемом, и приходится делать выборку ключевых данных. Создаем файл filter.confи указываем параметры, на основании которых будут фильтроваться необходимые данные. Также при необходимости можно настроить, например, корректное отображение даты или географического местоположения сервера, с которого будет поступать информация. Завершив конфигурирование, можно проверить работу программы, запустив ее и просмотрев внутренний файл лога /var/log/logstash/logstash-plain.log.
Основной пакет программ установлен теперь осталось установить программы, которые будут отправлять данные, на сервера. Компания Elastic предлагает использовать Filebeat, но можно воспользоваться и альтернативными вариантами. Здесь процесс установки аналогичен предыдущим. Файл настроек по умолчанию позволяет сразу работать с программой, но можно и подредактировать его при необходимости.
Если все сделано правильно, программный комплекс уже начал собирать логи. Следующим шагом будет открытие веб-интерфейса Kibana и настройка паттерна индекса, чтобы лог открывался в веб-интерфейсе по умолчанию, а в сохраняемых данных не было путаницы.
Сегодня (да прямо сейчас) создается и производится множество различной организационной техники и гаджетов, которые не могут, и не будут работать правильно, без должного программного обеспечения. И тут понеслась 🤯
Давайте по порядку
Программное обеспечение (ПО) это программа или список программ, необходимых для работы компьютера или его устройств. Во как.
Каждый день создаются все новые и новые программы, игры, дополнения, обновления. Каждый день производятся различные устройства и гаджеты, различные звуковые и видеокарты, дисководы, принтеры, и прочие. Разумеется, данные устройства не смогут работать без соответствующего программного обеспечения, которое в свою очередь устаревает и требует обновления.
Программистам ставятся различные задачи по написанию софта, но человеческий фактор всегда имеет место быть, и при написании программы могут быть допущены ошибки, из-за чего софт просто не запустится, либо выдаст ошибку, исправление которой может занять большое количество времени, что в условиях современной экономики крайне не выгодно. Да и разработчик рискует получить по ж**е от Тимлида.
Слава небесам - для упрощения и ускорения данной задачи, в 2008 году был создан Jenkins.
Jenkins система с открытым исходным кодом, то есть продукт доступен для просмотра, изучения и изменения. Кстати создан на базе Java. Дженкинс позволяет автоматизировать часть процесса разработки программного обеспечения, без участия человека. Данная система предназначена для обеспечения процесса непрерывной интеграции программного обеспечения. Воу воу.
Непрерывная интеграция (Continuous Integration, CI) это процесс разработки программного обеспечения, смысл которого заключается в постоянном соединении рабочих копий в общую линию разработки, и выполнении постоянных автоматизированных сборок проекта для быстрого выявления возможных ошибок и решения интеграционных проблем. Вот такой конвеер.
Иными словами, это создание нескольких драфтовых версий (черновиков) проекта, то есть копий, в предварительной сборке проекта.
В настоящий момент Jenkins используется практически в любой современной компании, где есть необходимость в автоматическом деплойменте (развертывании) приложений, а также в удобном управлении различного рода задач.
Для начала разберемся, что такое деплой вообще. С английского "deploy" переводится как "развертывание". И это целый процесс действий, которые делают программный продукт готовым к использованию:
выпуск;
установка;
активация;
адаптация;
обновление;
исправление ошибок и другие.
Автоматический деплой это развертывание при помощи автоматизированных решений.
Многие пользователи скажут: "Зачем нужен Jenkins, когда есть Buildbot?". У нас есть ответочка.
Основные плюсы и отличия Jenkins в том, что разобраться с ним может обычный, рядовой программист, либо менеджер не имеющий опыта в управлении. И сделает он это за короткий срок.
Конечно настроить программное обеспечение можно и в Buildbot, но для дальнейшей работы в нём необходим специально обученный человек, что не очень удобно.
При возникновении, или обнаружении, какой-либо нестандартной ошибки, Jenkins устранит эту проблему при помощи дополнительных плагинов, без привлечения помощи человека. Jenkins является бесплатным инструментом, обладающим огромными возможностями в виде тысяч плагинов, которые постоянно добавляются и обновляются.
Плагин это программный блок, который встраивается в программу и расширяет ее возможности, а так как у Jenkins очень много всевозможных плагинов, возможности такого автоматического деплоя не ограничены.
Jenkins это стандартизированная программа, осилить которую может даже специалист с небольшим бэкграундом (опытом) в IT, всего за несколько часов.
Стоит отметить основные преимущества Jenkins:
режим работы сразу в двух и более средах;
повышенная надежность развертываемого программного обеспечения;
уменьшение ошибок, связанных с человеческим фактором;
уменьшение затрат на персонал. Пока – пока операционка и косты;
упрощение рабочего процесса (нет необходимости нанимать дорогостоящую команду опытных специалистов, с Jenkins справится небольшая группа сотрудников без специальной квалификации).
Посмотрите обучающие видео на YouTube и обязательно попробуйте этот инструмент. Уверены, вы совершенно не пожалеете. Но это не точно.