Результати пошуку
ITVDN: курси програмування
Відеокурси з
програмування
Підписка

300+ курсів за популярними IT-напрямками

Вибери свою IT спеціальність

Підписка
Підписка

300+ курсів за популярними IT-напрямками

Результати пошуку за запитом: mvc 5*
WebForms чи MVC?

Автор: Редакция ITVDN

Введение Когда в 2008 году компания Microsoft придумала ASP.NET MVC, у многих возник вопрос: «Зачем нужна ещё одна технология ASP.NET?». Многие считают, что ASP.NET MVC не обязательно использовать, заменив на Web Forms ASP.NET. Однако, это неправда. Оба имеют свои плюсы и минусы. В статье мы рассмотрим преимущества этих двух технологий – и каждый сможет определиться, какая из них ему ближе. Мы также объясним понятия ASP.NET, ASP.NET Web Forms, MVC, ASP.NET MVC. Опытным разработчикам в ASP.NET MVC данная статья поможет переосмыслить свои концепции. Web-технологии Когда речь идёт о web-технологиях, на ум приходит классический ASP, PHP, JSP, ROR, ASP.NET Web Forms, ASP.NET MVC и другое. Классический ASP - web-технология, созданная корпорацией Microsoft. У классического ASP было два недостатка: слишком большой, неудобный исходный код и ненадёжность. К примеру, у Вас есть текстовые поля и кнопка. Нажав на кнопку, можно проверить данные, хранящиеся на сервере. Успешная проверка означает, что данные хранятся в базе, а в обратном случае выведется определённое сообщение об ошибке. В чём проблема такого сценария? Вам нужно совершить много действий. Приложение ASP.NET ASP.NET – приложение Microsoft, его структура построена на всеязыковой среде выполнения для построения динамических веб-сайтов – для создания можно использовать такие языки: C#, VB.NET и другие. ASP.NET поддерживает две модели: Web Forms и ASP.NET MVC. ASP.NET Web Forms Корпорация Microsoft первой вывела ASP.NET Web Forms из ASP, таким образом они решили множество проблем путём создания высокого уровня абстрагирования. Web Forms включает в себя postback (постит данные на заданную страницу) и ViewState. И самое интересное в том, что для ASP.NET Web Forms не требуется написания вручную ни единой строчки кода. ASP.NET 4.0 В ASP.NET 4.0 придумали, как преодолеть некоторые трудности: появилась возможность отключать и контролировать размер ViewState; с URL routing можно предоставить собственный URL вместо физического пути; в ASP.NET 4.0 мы имеем лучший контроль над ID элементов и, таким образом, интеграция с платформой JavaScript стала проще. Шаблон MVC MVC – архитектурный шаблон. Многие используют его с Java-технологией. MVC – не новое понятие, созданное Microsoft. Однако, в MVC ASP.NET нужно разобраться. До этого стоит уточнить для себя некоторые определения – в том числе, что такое MVC. Архитектурный шаблон – то, что решает наш вопрос на суб-системном уровне или на коротком уровне модуля. Речь идет о проблеме, связанной с архитектурой проекта. Это говорит о том, как можно разделить системы, а в частности - почему. Создаются библиотеки классов, компоненты, веб-сервисы, чтобы решить данный вопрос. MVC – архитектурный шаблон, позволяющий уловить тонкую связь между input-логикой, бизнес-логикой и UI-логикой. Платформа ASP.NET MVC ASP.NET MVC – еще одна платформа web-приложений от Microsoft. В ней устранены недостатки, имеющие место в предыдущих, подобного типа платформах. Эта платформа построена на всеязыковой среде выполнения (CLR) и полностью основана на MVC-архитектуре. Источник: http://www.codeproject.com/Articles/528117/WebForms-vs-MVC#Visual_in_Web
Популярні PHP MVC фреймворки

Автор: Редакция ITVDN

Автор статьи: Влад Кобылянский, архитектор программного обеспечения, разработчик и консультант по технологиям малого бизнеса (Майами, Флорида).   Вопрос: Что сегодня происходит с PHP фреймворками? В феврале 2017 года я так ответил на этот вопрос: «В основном все крутится вокруг двух PHP фреймворков -  Laravel и Symfony. Особой нужны в использовании CakePHP, Zend, CodeIgniter, Yii и т. д. нет, если вы начинаете новый проект. Только если вы уже знаете эти фрэймворки или у вас в команде есть разработчики которые привыкли работать с ними, тогда причины их использования обоснованы. Когда начинается реальная разработка, вы должны иметь возможность находить инструменты, плагины, ответы на общие проблемы. С сообществами Laravel и Symfony, с постоянным развитием новых «модулей» или функций, не будет ощущения, что вы остались «в стороне». Одни Laracast (даже если вы не работаете в Laravel) чего стоят! Они просто фантастичны. Когда заходит речь об интеграции с iron.io или другими SaaS сервисами, поддержке широкого спектра источников данных или о среде разработки – Laravel и Symfony и их расширения намного более продвинуты. Еще одним достоинством  Lumen, является быстрая разработка и прототипирование API для Laravel. При этом это никак не ограниченно для построения больших приложений.Вообще говоря, сегодня мы определенно видим переход к контейнерной архитектуре, где MVC играет гораздо меньшую роль. Все это касается микросервисов, оркестровки и создания приложений как «функций» (AWS Lambda и подобных сервисов). Возможно, пришло время освежить наши навыки Node/JS и GoLang?»   Хотя я в целом доволен этим ответом, сейчас я думаю, что некоторые моменты пришло время пересмотреть. Прежде чем перейти к таким странным темам, как GoLang, давайте взглянем на тенденции PHP MVC фреймворков. Я бы сказал, что тенденции, которые мы наблюдали в прошлом, остаются. Laravel продвигается вперед, в то время как большинство остальных фреймворков отстает. В популярности Symfony наблюдается небольшой всплеск, вероятно, из-за долгожданного выпуска Symfony 3. Я попробовал более конкретные поиски для сравнения, такие как «CakePHP 3» или «ZF2», однако они не привели к статистически значимым тенденциям. На этот раз я добавил CodeIgniter, потому что он оказалася очень популярным. Я получил ряд вопросов о CodeIgniter. Если коротко, CI сейчас не в конкуренции, потому что это не 100% фреймворк MVC. Иначе, чем организованной коллекцией POPO, я это не назову. Для наглядности представляю вам цитату из руководства CodeIgniter: «CodeIgniter имеет довольно свободный подход к MVC, поскольку не требуются Models. Если вам не нужно дополнительное разделение или вы обнаружите, что поддерживающие Models требуют большей сложности, чем вы хотите, вы можете их проигнорировать и создать свое приложение с помощью Controllers и Views.» Когда дело доходит до построения структуры, я просто не согласен с таким подходом. Возможно, это достойный шаблон (отсюда и популярность CodeIgniter), однако должна быть какая-то дисциплина, навязанная фреймворком, иначе конечный продукт в итоге превращается в беспорядочный спагетти-код, завернутый в какой-то «шаблон». Далее, Symfony 3 привнес некоторые достойные улучшения в разработку и целый ряд новых «фич». Как и многие аналоги PHP, теперь он предлагает микро-фреймворк. ZF3, к примеру, добавил ряд улучшений, таких как поддержка PHP7 (наконец!) и даже стал микро-фреймворком... но, в их руководстве так и говорится: «Для пользователей Zend Framework 2 MVC, различия с ZF3 незначительны...» Я действительно надеялся, что они скажут, что различия есть, что было замечательное архитектурное усовершенствование, замечательные новые модули, которые помогают вам разрабатывать все по-современному. Но, увы, по большей части ZF3 по-прежнему похож на ZF2. Long Story Short Вот как я вижу мир PHP фреймворков сегодня: Symfony или Laravel (выбор зависит от того, какую задачу вам нужно решить) Все остальное Laravel на первом месте. Объем доступной информации, Laracasts, таланты разработчиков во всем мире, простые реализации шаблонов, интегрированные наборы инструментов тестирования, активная реализация записей в форме Eloquent, облегченная версия в Lumen, развитие Homestead (Vagrant) – все перечисленное способствует фреймворку действительно выделяться и для новых, и для опытных разработчиков. Однако модели Eloquent могут стать непослушными и довольно большими по размеру, а сервисов Laravel (не путать с микросервисами) можно создать очень много, и вот тут люди начинают думать о реализации Repository, которому здесь не место. Так родился Monolith. Если вам не нравится активный шаблон записи и вам нужна дополнительная гибкость в репозиториях, или, возможно, вы видите слишком много независимых анонимных функций, тогда используйте Symfony + Doctrine. Рассматриваю ли я Symfony как шлюз для монолитных приложений? В какой-то степени, да. В целом, я бы не назвал это резким изменением с прошлого года. Тем не менее, нам нужно взглянуть на общую картину: правильно разработанное приложение выходит за рамки чистого MVC; речь идет об инфраструктуре, конвейере развертывания, разъединённой архитектуре. Все это может быть достигнуто в стеке MVC, но нужно быть внимательным, чтобы избежать Monolith. Приход микросервисов Раньше я упоминал о распространенности микросервисов и необходимости улучшать навыки GoLang или Node. А в статье о PHP MVC было бы глупо не упомянуть о явно растущем движении к микросервис-ориентированной архитектуре (MOA); и это движение набирает обороты, поверите вы или нет. Хотя эти два понятия не являются взаимоисключающими, не нужно находить параллели между ними, ведь они действительно представляют собой разные философии. В качестве примера, размещение вашего приложения MVC в одном контейнере и MySQL в другом, а затем объединение их вместе, не обязательно представляет собой надлежащую MOA. Это, безусловно, лучший подход, чем пытаться установить MAMP, XAMPP или что-либо еще, чтобы заставить ваш компьютер работать с приложением. Кроме того, это может решить некоторые проблемы, такие как простота запуска локальной среды на разных платформах и, возможно, в некоторых случаях стратегии развертывания, но вы застрянете с монолитным MVC в вашем приложении/контейнере. Уничтожение Monolith Микросервисы – это как раз о «разрушении». В то время как MVC обращается к вашей структуре кода и организации, обеспечивая надежный подход к разделению проблем, эта концепция еще больше расширяется контейнерами/сервисами/MOA. Вместо того, чтобы просто отделять виды (Views) от моделей (Models), вы теперь разделяете каждый «кусок» или логическую единицу вашего приложения на индивидуальную службу, предназначенную для правильной работы с собственными обязанностями. Если у вашего MVC-приложения есть контроллер «Поиск», действия и соответствующие методы модели, то у нас уже есть пример монолитного приложения. Напротив, используя подход MOA, у нас будет сервис для каждого из этих процессов. В качестве примера: Router сервис Request сервис Query сервис DataSource сервис Response сервис Но не все эти «сервисы» являются частью стека MVC? Конечно нет. Они являются строительными блоками нашего Monolith. С MOA каждый сервис работает в рамках собственной среды, а мы, как архитекторы, можем разработать лучший подход к решению конкретного запроса. В качестве примера, если я должен был бы написать службу обработки изображений в среде Laravel, я использовал бы что-то вроде расширения PHP-GD2, что может быть не самым эффективным способом обработки изображений. Служба C++, которая обрабатывает мои запросы в обработке изображений, может быть намного быстрее и определенно более надежной при масштабировании. И мы могли бы сделать вывод службы обработки изображений и отправить ее в службу DataStore, службу CloudStorage и службу Queue Email. Решение этой же задачи с кучей скрытых заданий и, возможно, нескольких отдельных приложений MVC и пользовательских сценариев – это то, как разработчики делали это раньше (2 года назад). Время двигаться вперед. Масштабируемость Здесь возникают проблемы (или заканчиваются, в зависимости от того, куда вы держите курс). С одной стороны, очень сложно масштабировать Monolith: если вы создадите все больше и больше логики в одном и том же наборе MVC, вы застрянете с хорошо структурированным приложением ужасной сложности. С другой стороны, если вы построите тысячу микросервисов на разных языках, как вы будете управлять этим беспорядком? Существуют различные инструменты компоновки контейнеров (например, Kubernetes, Swarm, Mesos), услуги по развертыванию контейнеров (GKE и AWS ECS), однако лишь немногие предприятия используют архитектуру Docker. Есть удачные истории в построении инфраструктуры с использованием Docker или других контейнерных технологий (т. е. GKE). Большинство из этих историй исходят от компаний, которые могут позволить себе тратить ресурсы на архитекторов, дефолтов, администраторов баз данных и инженеров. Тем не менее, сейчас идут бесчисленные дискуссии о том, как развернуть хорошо организованный и элегантный MOA. В любом случае, вы не решите эту проблему самостоятельно, и пока вы не достигнете относительно большого масштаба, эта проблема действительно нуждается в решении. Может быть, сейчас не самое время усердствовать. Золотая середина на сегодняшний день (даже для тех, кто занимается приложениями меньшей сложности или не такими требованиями к трафику) заключается в том, чтобы разгрузить многие типичные сервисы сторонним провайдерам. Почти все доступно сейчас как сервис. Фоновые задания, обработка изображений, аутентификация, аналитика данных, ведение журнала, отправка электронной почты, системы очереди не обязательно должны строиться в одном стеке MVC, а архитектор должен подумать о том, что может быть выгружено в систему SaaS за небольшую ежемесячную стоимость (т.е. поиск Algolia) или, возможно, специально созданную докерную службу, работающую в облачном пространстве, которая выполняет эту обработку изображений. Я думаю, важно, чтобы вы не начали перепроектировать весь проект с начала, не сбрасывать все, что у вас уже есть, а выпускать докеры, где это можно сделать. Существуют способы постепенного развертывания вашего проекта/продукта путем разъединения, изучения узких мест в системе (и т.д.) и последующим применением разделения проблем в этих проблемных областях. Вывод 2017 год принес нам много дискуссий и производственных развертываний, основанных на контейнерах и MOA. Мои размышления о Docker, используя GoLang или Node, не означают, что PHP «умирает» или что-то в этом роде ... Я считаю, что разработчикам нужно оставаться в тренде. Если микросервисы и дальше будут развиваться в том же русле, в котором это происходит сейчас, то почему бы не изучить GoLang? Он идеально подходит (из-за низкой занимаемой площади, скорости и параллельной обработки) для разработки небольших контейнерных приложений. Node и GoLang позволяют создавать небольшие сервисы, которые являются частью более крупного проекта, связывают созданные сервисы и выпускают их как контейнеры Docker, если это необходимо в вашей работе. Тем не менее, все эти передовые решения и языки не уменьшают значимость и востребованность языка PHP. Разработчикам еще нужны будут стеки MVC и работа с  API. MOA пока не помогает решить архитектурные проблемы на стороне frontend, UI или Views, хотя при этом контейнеры помогают нам избежать работы с Monolith на backend. Мы можем создать чрезвычайно надежное backend-приложение, но оно среагирует на JSON, который каким-то образом должен быть представлен в клиентском приложении. Имеет ли значение, если результирующий объект ответа поступает из РНР кода, URL или от модулей принятия решений и обработки, разделенных интерфейсом обмена сообщениями? Это зависит от Ваших потребностей и требований к вашему приложению. Мой совет: в этом году учите Laravel, следите за Docker, GoLang и фокусируйтесь на конвейере развертывания. Продвижение от локального небольшого проекта к продакшену должно быть достаточно плавным, особенно при создании приложений MVC.   Оригинал статьи
Побудова мікросервісів на ASP.NET Core (без MVC)

Автор: Filip W

Существует несколько причин для создания суперпростых и легких HTTP сервисов, которые еще называются «микросервисами». Нет нужды говорить обо всех операционных и архитектурных преимуществах такого подхода к построению системы, так как это не раз обсуждалось на разных ресурсах. Я хотел бы показать пару техник построения весьма простых и компактных HTTP сервисов на основе ASP.NET Core без использования каких-либо фреймворков и с минимальным разрастанием кода. Предпосылки То, что я буду обсуждать в данной статье, базируется на пакете ASP.NET Core 1.2, который на момент написания еще не был в релизе. Я использую CI, поданную в ASP.NET Core, поэтому мой Nuget.config выглядит таким образом: Когда версия 1.2 добавится в Nuget, этого больше не потребуется. ASP.NET HTTP endpoints без MVC ASP.NET Core позволяет определить HTTP endpoints непосредственно на спецификации OWIN, которая построена вокруг, не используя полномасштабную структуру MVC и ее контроллеры для обработки входящих запросов. Так было с самого начала – вы могли использовать компоненты промежуточного программного обеспечения для обработки входящих HTTP запросов и короткую схему ответа непосредственно клиенту. Во многих проектах на основе профиля ASP.NET Core уже используется такая техника, например, Identity Server 4.  Это не новая концепция – нечто подобное существовало (хотя и в ограниченной форме) в классическом ASP.NET с HTTP модулями и HTTP обработчиками. Позднее, в Web API можно было определить обработчики сообщений для обработки HTTP запросов без необходимости определения контроллеров. И, наконец, в OWIN и в Project Katana это также было возможно через подключение к пользовательским компонентам промежуточного ПО. Другой альтернативой является точное определение пользовательского IRouter и прикрепление от него различных endpoints. Основное различие между этим подходом и подключением пользовательских компонентов промежуточного ПО в том, что маршрутизация сама по себе представляет единое промежуточное ПО. Это также дает нам возможность для гораздо более сложного сопоставления URL шаблона и определения ограничения маршрута – то, что Вам нужно было бы обрабатывать вручную в случае промежуточного программного обеспечения. ASP.NET Core 1.2 скоро представит ряд новых методов расширения на IRouter, которые сделают создание простых и компактных HTTP endpoints еще проще. Станет возможным заполнить более ранние версии ASP.NET Core этой функциональностью путем простого копирования новых расширений в ваш проект. Настройка базы для простого и компактного HTTP API Это project.json для нашего микросервиса. Он содержит только самые базовые пакеты. Мы используем здесь абсолютный минимум: • Kestrel и IIS интеграция выступают в качестве хоста сервера • пакет маршрутизации • пакеты протоколирования и конфигурации Для того, чтобы привести и наш код к абсолютному минимуму, мы можем даже бросить концепцию Startup класса для нашей API установки, и просто писать весь код бэкэнда API в одном файле. Вместо того, чтобы закреплять все в типичные Startup точки расширения, такие как методы Configure() и ConfigureServices(), мы повесим все на WebHostBuilder. WebHostBuilder довольно часто игнорируется разработчиками ASP.NET Core, потому что генерируется шаблоном в качестве точки входа внутри класса Program, и, как правило, нам не нужно даже изменять его – поскольку он по умолчанию указывает на класс Startup, где происходит почти вся работа по настройке и конфигурации. Тем не менее, он также предоставляет аналогичные зацепки, которые есть у Startup, поэтому можно просто определить все непосредственно на WebHostBuilder. Наша базовая API конфигурация приведена ниже. Она еще ничего не делает с точки зрения воздействия HTTP endpoints, но она полностью функциональна со стороны процесса подготовки создания (маршрутизатор подключен), входа в консоль и захвата конфигурации из JSON и переменных окружения. Мне нравится этот подход, поскольку он поразительно краток. Примерно в 20 строках кода мы имеем отличную базу для легкого HTTP API. Естественно, мы могли бы обогатить ее более широкими возможностями по необходимости – например, добавить в наши собственные сервисы или добавить проверку маркера с использованием соответствующих пакетов интеграции из Microsoft.Security или IdetntityServer4. Добавление HTTP endpoints в наше решение Финальный шаг – это добавление HTTP endpoints. Мы сделаем это, используя вышеупомянутый расширяющий метод, который будет представлен в ASP.NET Core 1.2. Для демонстрации нам необходима любая модель и сымитированные данные, чтобы использовать стандартный Contact и примеры ContactRepository. Код ниже запускается в расширяющем методе Configure() на WebHostBuilder, о чем уже было упомянуто ранее. Он показывает HTTP обработчики для получения всех контактов и получения контакта по ID. Этот код должен быть достаточно самостоятельным в описании – мы делегируем справочную операцию в хранилище и затем просто выводим результат в HTTP ответе. Расширяющий метод-маршрутизатор также дает нам доступ к значениям данных маршрута, делая простым управление сложных URI. К тому же, мы можем использовать обычные шаблоны маршрутов ASP.NET Core со всей мощью ограничений, которые очень удобны, например, так как вы и ожидаете, contacts/{id:int} не будут поставлены в соответствие для нецелочисленных ID. Я также помог себе, добавив удобный расширяющий метод для написания ответного потока. Финальный шаг – это добавление в HTTP endpoints изменения состояния серверной части: POST (добавить) новый контакт PUT контакт (изменить существующий) DELETE (удалить) контакт Нам потребуется дополнительный расширяющий метод, чтобы упростить это, потому что необходимо дессерилизовать запрос тела потока в JSON и нам хотелось бы проверить аннотацию данных нашей модели, чтобы гарантировать, что запрос от клиента является валидным. Очевидно, что будет глупо повторять код раз за разом. Этот расширяющий метод приведен ниже и в нем используются JSON.NET и System.ComponentModel.DataAnnotations.Validator. Заметьте, что метод вернет клиенту ‘400 Bad Request’, если модель не окажется валидной. Например, требуемое поле будет пропущено – мы также получим ошибку валидации. Далее показано определение HTTP endpoints: Вот и все – вы можете улучшить этот код, добавив в него, например, удобные методы чтения и выбора значений из RouteDataDictionary. Также не вызовет проблем усиление кода аутентификацией и даже внедрение в него новой авторизационной политики ASP.NET Core. Полный код нашего «микросервиса» (без вспомогательных расширяющих методов, которые, я предполагаю, вы в любом случае захотите собрать воедино и заново использовать) показан ниже – и мне нравится полученный результат. Я считаю, что это весьма привлекательный, лаконичный способ построения простого и компактного API в ASP.NET Core. Исходники доступны на Github. Оригинал статьи тут: http://www.strathweb.com/2017/01/building-microservices-with-asp-net-core-without-mvc/
Розгортання ASP.NET MVC Web Site на Microsoft Azure

Автор: Редакция ITVDN

Введение Microsoft Azure является облачно-вычислительной платформой и инфраструктурой, предоставленной корпорацией Microsoft. Эта платформа выполняет такие функции, как построение, развертывания и управления приложениями и услугами, и они могут быть доступны по всему миру. Azure доступен как Платформа, как сервис (PaaS) и Инфраструктура, как сервис (IaaS). Чтобы сделать развертывание приложения.NET на Microsoft Azure, Visual Studio 2012 и Visual Studio 2013 предоставляет Вам необходимые инструменты. Вы можете загрузить полную версию Visual Studio 2013 года здесь. Чтобы использовать Azure, сначала нужно посетить сайт manage.windowsazure.com и подписаться на эту услугу. Вы также можете получить бесплатную пробную подписку, чтобы начать работу. После входа на портал, на следующем рисунке продемонстрированы некоторые службы/функции, которые можно получить: В этой статье мы будем использовать приложение, созданное с помощью Angular.js, MVC, WEB API для выполнения CRUD-операций. Мы будем публиковать приложения на Azure в качестве веб-сайта. Загрузите исходный код и откройте это приложение в Visual Studio 2013. Создание сервера базы данных с помощью SQL Azure Чтобы успешно запустить веб-сайт, Вы должны развернуть базу данных, используемую нашим веб-сайтом в облаке. Чтобы развернуть базу данных Azure, нужно создать сервер базы данных, используя Azure SQL. Шаг 1: Выберите SQL DATABASES, и Вы увидите страницы базы данных, как показано здесь: Выберите Servers, это позволит создать новую базу данных SQL SERVER. Нажмите кнопку  "CREATE A SQL SERVER DATABASE", ниже появится окно: Введите необходимые данные. После ввода данных выберите галочку в нижнем углу, чтобы создать базу данных сервера: Кликаем на кнопку "MANAGE" внизу страницы, это позволит Вам добавить сервер доступа в правила брандмауэра, так чтоб был получен доступ к приложению. Эти правила добавят IP-адрес вашей машины в правила брандмауэра. Чтоб узнать имя экземпляра сервера базы данных, кликаем по имени базы данных для отображения информационной панели. Прокрутите вниз страницы панели мониторинга для отображения MANAGE URL. Она начинается от https://.database.windows.net. Часть URL после https://, имя экземпляра базы данных. Шаг 2: Чтобы Соединиться с сервером базы данных, скопируйте часть URL после http://, и от локального экземпляра SQL Server, кликаем по Connect на объектном проводнике, и в Connect To Server окно вводит детали базы данных как показано здесь: Это выведет на экран Сервер базы данных Azure SQL экземпляр в объектном проводнике на локальном экземпляре SQL Server. Введите необходимые параметры. SERVICE TIERS позволит выбрать уровень базы данных, таких как BASIC | STANDARD | PREMIUM. Выберите уровень BASIC. Выберите SEERVER как сервер базы данных, его мы создали ранее. Создаваемая база данных будет такая, как показано на изображении: Кликните по кнопке MANAGE внизу страницы, она создаст правило Брандмауэра для того, чтобы установить доступ базы данных: Далее откроется следующая страница, где информация об Администраторе Базы данных обязательна к заполнению: Клик на Log On выведет на экран следующую страницу:  Кликните по “Design”, чтобы составить таблицы, Views и Stored Procedures. Кликаем по “New Table” и создаем список сотрудников, как показано: Введите простые записи в эту таблицу, используя ссылку New Query. Внесение изменений в Web.config файл MVC-приложения Откройте приложения MVC в Visual Studio 2013 и внесите следующие изменения в строку подключения. data source=; initial catalog=Application; user id=; password=; MultipleActiveResultSets=True; App=EntityFramework" "providerName="System.Data.EntityClient" />   (В качестве альтернативы Вы можете запустить Entity Framework в проект, в папку Models для создания строки подключения) Создание Веб-Сайта С Помощью Windows Azure Portal Нажмите кнопку на сайте, чтобы отобразить параметры создания веб-сайта. Нажмите на ссылку CREATE A WEBSITE. Это приведет к появлению следующих вариантов для создания веб-сайта:     Далее Вы можете ввести информацию о URL. Введённый URL уникальный и будет проверен Azure. Если это имя не будет корректное, то URL будет .azurewebsites.net. Центр обработки данных должен быть выбран согласно Вашему выбору. Как только Центр обработки данных выбран, тогда все другие ресурсы, необходимые веб-сайту, например, Базы данных SQL, должны быть размещены в том же Центре обработки данных, так как это поможет в управлении затратами. Как только будет создан Веб-сайт, портал покажет детали:     Чтобы получить детали о веб-сайте, кликните по его имени, ниже будет выведена инструментальная панель на экран, она поможет в управлении и мониторинге веб-сайта.     Чтобы опубликовать наш веб-сайт, созданный с помощью VS tools в Visual Studio, мы должны загрузить профиль публикации. Он может быть загружен и скачан по ссылке, как продемонстрировано на изображении. Публикация веб-сайта в Visual Studio Откройте SPA Application в Visual Studio 2013. Кликните правой кнопкой по названию проекта, чтобы вывести на экран контекстное меню Publish Option.     Эта опция выведет на экран следующее окно:     Данное окно имеет следующие параметры: Microsoft Azure веб-сайтов - поддержка прямого входа на Windows Azure на основе подписки. Import - позволяет импортировать веб-сайт и публиковать профиль, который загружается с портала Azure. Custom - позволяет создать новый профиль, публиковать для развертывания веб-сайта.   Нажмите на кнопку "Import" и будет отображено следующее окно для импорта профиля публикации:     После нажатия "OK", будет отображено следующее окно с деталями веб-развертывания:     Кликните “Next”. Так как мы уже развернули базу данных по Azure SQL, и последовательность подключений к базе данных уже обновлена в web.config файле, следующее окно покажет строку подключения:     Выберите “Далее”, чтобы отобразить список файлов, которые будут опубликованы:     Кликните по кнопке “Publish”, веб-сайт будет опубликован со всеми требуемыми ссылками.  Как только веб-сайт будет успешно опубликован, он может быть просмотрен.     Примечание: в этой статье не использовался CSS и, следовательно, неправильно расположение таблиц. Добавьте свои CSS, чтобы украсить страницу. Таким образом происходит развертывание веб-сайта на Azure. Источник: http://www.dotnetcurry.com/showarticle.aspx?ID=1064
Розробка ASP.NET 5 веб-застосунків з Visual Studio Code

Автор: Редакция ITVDN

Введение 10 лет назад трудно было вообразить, что разработка ASP.NET веб-приложений вне интегрированной среды разработки Visual Studio .NET буде возможна. Но в прошлом году произошли изменения. В апреле 2014 года на конференции разработчиков (Build)  Microsoft анонсировал запуск нового легкого кросс-платформенного кодового редактора для разработки современных веб-приложений под именем Visual Studio Code. Visual Studio Code Visual Studio Code свободна для скачивания с официального сайта.  Работаете ли Вы на Linux, Mac или Windows – не имеет значения. Вы можете скачать и запустить VS код на своей платформе. Установка Visual Studio Code довольно проста, но если Вы застрянете, то всегда можете просмотреть документацию по установке. Visual Studio Code является просто редактором кода на файловой основе и не имеет всех преимуществ полной интегрированной среды разработки Visual Studio .NET. Он легче по дизайну. Тем не менее, у редактора есть множество особенностей, которые поддерживают такие технологии, как IntelliSense для дополнения кода, Peek Definition для быстрого взгляда на функциональный код без навигации,  реорганизацию кода и прочие. Visual Studio Code также поддерживает множество языков, например CoffeeScript, F#, Go, Jade, Java, Handlebars, Powershell и Python, для примера. Вы можете проверить языковую поддержку здесь. Также Visual Studio Code способен поддерживать такие среды выполнения, как ASP.NET 5 и Node.JS. Если Вы их используете для веб-разработки с Microsoft Stack, можете быть уверенны, что ASP.NET 5 (новая версия ASP.NET) сейчас поддерживает кросс-платформенную разработку. Это значит, что можно разрабатывать ASP.NET-приложение в среде Linux, Mac или Windows так же, как и запускать его в любой из них. И Вам даже не нужно иметь интегрированную среду разработки Visual Studio .NET, чтобы сделать это. Visual Studio Code – это все, что вам нужно, чтобы начать работать с ASP.NET 5, и это здорово! Установка ASP.NET 5 & DNX (среды выполнения .NET): ASP.NET 5 был построен с нуля, чтобы убедиться, что он придерживается современной парадигмы веб-приложений, и что приложения, разработанные с его помощью являются «облачными». Ключевыми аспектами ASP.Net 5 являются гибкость и модульность – он предлагает минимальные накладные расходы и позволяет нам выбирать только то, что мы хотим в рамках нашего веб-приложения. DNX расшифровывается как Dot Net eXecution Environment. Что такое Yeoman? Если Вы работали в интегрированной среде разработки Visual Studio .NET, Вам будет интересно: «Есть ли здесь File > New > ASP.NET шаблон проекта?» Visual Studio Code является редактором кода на файловой базе, так что Вы можете просто открыть файл и начать редактирование. Кроме того, нужны поддерживающие средства, чтобы работать с исполняемым шаблоном ASP.NET. Yeoman является популярным консольным инструментом для автоматического построения структуры проекта, а также обеспечивает базовым ASP.NET шаблоном для старта. Yeoman может быть установлен с помощью NPM, но для начала надо установить Node.JS. Если у Вас нет Node в системе, можете установить его. Кроме Yeoman, Вам также нужны другие поддерживающие средства, такие как генератор ASP.NET, исполнитель задач Grunt и Bower. Вы можете выполнить это за одну команду. В командной строке набрать следующую команду и нажать enter: npm install –g yo grunt-cli generator-aspnet bower Теперь Вы можете строить веб-приложения. Создание веб-приложения Разберем пошагово, как  построить структуру проекта нового ASP.NET 5 веб-приложения. 1. Откройте командную строку и перейдите в папку, где Вы хотите создать свое новое веб-приложение. 2. Введите в командную строку следующую команду:  yo aspnet 3. Yeoman отобразит варианты приложений для генератора aspnet. Возможные варианты: консольное приложение веб-приложение основное веб-приложение (без членов/аутентификации) веб-приложение API Nancy ASP.NET приложение библиотека классов тестовый проект Unit Выберите сейчас основное приложение. Используйте клавиши со стрелками для выбора опции и нажмите enter. 4. Дальше нам нужно назвать веб-приложение. Используем HelloWorld как имя нашего образца ASP.NET 5 веб-приложения. Введите имя и нажмите enter. Yeoman построит структуру проекта. 5. Каталог, в котором будет создано наше веб-приложение будет иметь то же имя, что мы дали только что Yeoman. В данном случае - “HelloWolrd”. cd HelloWorld   6. Через командную строку откройте Visual Studio Code code 7. Visual Studio Code запустит проект HelloWorld. Файлы в проекте будут отображаться в окне Проводника. 8. В редакторе Visual Studio Code выберите View > Command Palette option и в командной палитре введите следующую команду: dnx: dnu restore - (HelloWorld) Выше написанная команда restore устанавливает нужные NuGet пакеты, необходимые для запуска веб-приложения. Она запустит командную строку, куда будут загружаться все пакеты. После выполнения будет получено сообщение, что загрузка завершена. Запуск веб-приложения Теперь, когда мы успешно создали веб-приложение, пришло время запустить его и посмотреть на результат. 1. В Visual Studio Code откройте Command Palette, выбрав View > Command Palette. Введите следующую команду для запуска приложения: dnx: kestrel -(HelloWorld,Microsoft.AspNet.Hosting--server Kestrel–config hosting.ini Примечание: Когда Вы начинаете набирать команду, командная палитра подскажет Вам полную команду в списке. Вы можете выбрать команду из списка и команда будет выполнена. 2. Откройте браузер и перейдите по ссылке http://localhost5000 Мы только что создали ASP.NET веб-приложение вне интегрированной среды разработки Visual Studio. Фактически, в настоящее время ASP.NET больше не только в Windows. Мы переходим на кросс-платформу – как с точки зрения разработки, так и размещения. Интеграция Telerik UI для набора ASP.NET MVC Teleric предлагает пользовательский интерфейс, известный как UI для ASP.NET MVC. Он произошел от Kendo UI и предусматривает HTML-помощников, которых называют “Kendo UI wrappers.” Они упрощают работу с элементами управления Kendo UI и ускорят вашу разработку. Представим пошагово добавление пользовательского интерфейса для ASP.NET MVC в наш проект: 1. Откройте файл project.json и в узле (“dependencies”) добавьте Kendo (в настоящее время доступна бинарная версия Kendo Mvc – 2015.2.805). "dependencies":{     ...     "Kendo.Mvc":"*" } 2. Дальше откройте Startup.cs и найдите метод “ConfigureServices”. Добавьте следующий фрагмент в метод. //Register UI for ASP.NET MVC Helpers Services.AddKendo(); 3. Затем откройте ~/Views/_ViewImports.cshtml и импортируйте пространство имен Kendo.Mvc.UI. @using Kendo.Mvc.UI 4. Скопируйте Kendo UI ресурс с клиентской стороны. Для этого Вам нужно установить пакет Kendo UI Professional (Commercial Package). Его можно установить через Bower с помощью следующей команды: bower install https://bower.telerik.com/bower-kendo-ui.git Пакет Kendo UI Professional Bower размещается в частном git-хранилище и требует активировать аккаунт Telerik. Во время установки Вам предложат ввести пароль несколько раз. Bower установит пакет Kendo UI Professional как “kendo-ui” в папку wwwroot/lib. 5. Дальше нам необходимо зарегистрировать скрипты Kendo UI и стили в ~/Views/Shared/_Layout.cshtml. <head>     ...     <link rel="stylesheet" href="~/lib/kendo-ui/styles/kendo.common-bootstrap.min.css" />     <link rel="stylesheet" href="~/lib/kendo-ui/styles/kendo.bootstrap.min.css" />     <link rel="stylesheet" href="~/lib/kendo-ui/styles/kendo.dataviz.bootstrap.min.css" /> head> 6. Теперь  давайте используем виджет Kendo UI в одном из видов. Мы будем использовать виджет Kendo UI DatePicker. Откройте ~/Views/Home.Index.cshtml и добавьте следующий фрагмент: <body>     ...     <script src="~/lib/kendo-ui/js/kendo.all.min.js">script>     <script src="~/lib/kendo-ui/js/kendo.aspnetmvc.min.js">script>     @RenderSection("scripts", required: false) body> 7. Запустите веб-приложение через dnx: kestrel команду, что мы использовали ранее. Результат представлен ниже. Заключение Готово. У нас есть законченное веб-приложение ASP.NET 5, интегрированное с Telerik UI для ASP.NET MVC виджетов, разработанное только использованием Visual Studio Code с поддержкой таких инструментов, как Yeoman и Bower. Надеемся, Вам понравилось! Источник -  http://developer.telerik.com/featured/developing-asp-net-5-web-apps-with-visual-studio-code/
Коли потрібно переходити на ASP.NET Core?

Автор: Steven Smith

Прошло много времени с момента релиза ASP.NET Core 1.0. Затем появились версии 1.1, 2.0… В общем и целом серверные компоненты и технология оказались достаточно качественными, в них было замечено всего лишь несколько багов. Кроме того, начиная с вышеупомянутой версии 1.1, было добавлено бессчётное множество различных полезных примочек к Entity Framework Core и самой ASP.NET Core. Помимо прочего, стоит также отметить радикальные отличия в структуре проектов, которые могут показаться слегка непривычными, но являются жизненно необходимыми для взаимодействия проектов .Net Core с другими типами проектов. Но ожиданиям качественного инструмента пришел конец. Произошел релиз Visual Studio 2017, и она успела зарекомендовать себя как достаточно стабильная версия. К тому же я без проблем сумел перенести мои проекты на базе project.json в новый формат файлов MSBuild без всяких проблем. Помимо прочего, стоит также отметить целую серию приятных улучшений стандартной среды языка .NET. Мы долго ждали и дождались – наконец-то стандарт .NET Core (вместе с технологией ASP.NET Core) успешно захватывает IT-рынок и обладает целым рядом полезных инструментов для разработки. Если вы из компании, которая от стольких лет ожидания успела натереть себе мозоль – определенно, вам есть чему радоваться. Итак, ASP.NET Core сейчас уже на полках. Так в каких случаях нам стоит забыть про старый добрый ASP.NET и опробовать его кроссплатформенную версию? Позволю себе поделиться мнением. Новые проекты Если вы начинаете разработку нового проекта с использованием MVC-подхода и/или Web API, вам определенно нужно обратить свое внимание на ASP.NET Core. Технология содержит в себе целую серию значительных улучшений, которые заметно отличают ее от предшественницы. Помимо прочего, она также может похвастаться первоклассной системой внедрения зависимостей. ASP.NET Core также обладает специальными tag-helper`ами. Используя сервис TestServer, вы запросто сумеете производить локальные тесты прямо на свое ПК (забудьте про падения через неверную конфигурация фаервола). Web API теперь внедрены в ASP.NET Core MVC, потому теперь нет никакой необходимости использовать сторонние библиотеки с кучей дублирующих компонентов. Также скорость работы значительно выше, плюс, помимо прочего, арсенал может похвастаться значительно большим количеством опций, нежели MVC5/WebAPI2, который в значительной мере привязан к IIS. Но что, если проект имеет среди зависимостей сторонние библиотеки (собственные или чьи-то еще), которые требуют полноценной среды .NET Framework, не включенной в .NET Core? Нет никаких проблем. При желании в ASP.NET Core можно включить полноценный .NET Framework. Желаете использовать ваш Entity Framework 6 или NHibernate для работы с данными? Да ради Бога. Все прекрасно будет работать и в ASP.NET Core. Единственное, что вы от этого утратите – это кроссплатформенность, ибо эти сервисы могут быть запущены только в рамках Windows-сервера. У меня нет времени переучивать команду на ASP.NET Core! На счастье, переход на новую платформу не займет много времени, если ваша команда уже знакома с ASP.NET MVC и/или Web API. Концепция Core – использовать все, что было раньше, но значительно лучше. Контроллеры и представления никуда не делись. Представления все еще используют Razor. Маршрутизация по сути своей осталась прежней – она даже стала немного проще. Фильтры также особо не изменились, а Web API добавили своего удобства в использовании (так как они были интегрированы в MVC). Конечно, отличия все же есть, но это не критично. Несколько новых вещей, вроде того, как запускается приложение или как работает middleware, выучить придется, но в целом опыт работы на предыдущей ASP.NET Core MVC тут будет решать очень многое. Я хочу поместить приложение в контейнер на Linux! Тогда вы можете желать только ASP.NET Core. Вы не сможете использовать библиотеки из среды .NET Framework, но что касательно стандартных компонентов .NET Core – полный вперед. И да, вы также можете помещать свои приложения под Azure на Linux. Судьба приложений на ASP.NET MVC 5 и/или Web API 2 Предугадать тут что-либо конкретное будет несколько затруднительно. Если эти приложения работают и запускаются без проблем, не думаю, что необходимость переходить под ASP.NET Core такая уж  срочная. Однако, несколько причин, по которым  стоит интегрировать подобные программы под ASP.NET Core, все же есть: Сама поддержка. Если вы бы хотели деплоить приложение и его сервер вместе, без привязки к IIS – Core, – это однозначно ваш выбор. Поддержка различных платформ. Порой использование Windows-ориентированных серверов может быть дороже прочих других. Возможно, вы могли слышать об поддержке контейнеров, Докера и так далее. Core все это поддерживает – причем на очень даже приличном уровне. Множественные приложения. Приходилось ли вам запускать несколько экземпляров приложения на одной и той же машине? ASP.NET Core позволит это делать значительно удобнее и эффективнее, нежели традиционный ASP.NET. Тестирование и Domain-Driven Design (DDD). Если ваша команда следует этому подходу, пишет тестируемое программное обеспечение, то ASP.NET Core (и Entity Framework Core) привнесёт целый ряд полезных фич, которые значительно могут упростить жизнь. Программы Web Forms         Если ваше приложение базируется на веб-формах, возможно, вам лучше всего будет оставаться на ASP.NET. Microsoft активно инвестирует в эту технологию. Существует множество способов улучшить качество кода, используя внедрение зависимостей и прочее. Но смена платформы на ASP.NET Core MVC будет такой же «болезненной», как и переход на ASP.NET MVC 5,4,3,2,1. Что хуже, используя MVC 5, вы можете запускать страницы отдельно друг от друга, но проделать подобное с ASP.NET Core не представляется возможным. Лично я могу посоветовать оставаться на веб-формах до тех пор, пока приложение не потребует полноценной замены. В плане нагрузки на данные, потребовалось бы применить стиль SPA-приложений со значительно большим количеством клиентского кода и фрейморков типа Angular 2, или React. Другие размышления Хотя Visual Studio – прекрасный инструмент для разработки приложений, эта среда не бесплатная (за исключением комьнити-версии). Помимо прочего, она Windows-ориентированная (да, есть VS для MacOS, но это совершенно другое приложение). Если же студия для вас по причине цены или размеров неприемлема, .NET Core будет воистину полезным приобретением. Вы можете на MacOS, Linux (и, разумеется, под Windows) работать в Visual Studio Code! Подобным образом, если ваши приложения больше ориентированы на клиентскую часть, ASP.NET Core порадует более облегченными размерами. В то время, как фронтендеры превозносят NodeJS как быструю технологию (и ее возможность исполнять js-код на сервере), ASP.NET Core может также исполнять Node.JS на сервере (и вы также можете работать под JS на сервере, если вам захочется). Используя TechEmpower, ASP.NET Core, развернутый с использованием Kestrel, может обрабатывать до 1 миллиона запросов за секунду на том же ПК и в рамках того же приложения, в то время, как NodeJS обрабатывает всего около 175 тысяч в секунду. Подведем итоги Безусловно, ваш опыт и ваше мнение может сильно отличаться от моего, потому вопрос о том, стоит ли переходить на ASP.NET Core для некоторых может остаться открытым. И, конечно, ASP.NET Core далеко не единственная технология, используя которую вы будете создавать свое следующее веб-приложение. Однако, тема этой статьи как раз-таки ASP.NET Core, с которым мне приходилось долго проработать. К тому же, написано очень много официальной документации на официальном сайте Microsoft. Я не советую переходить на ASP.NET Core лишь потому, что он такой новый и весь из себя красивый. Решение перейти должно быть тщательно взвешенным и подкрепленным весомыми аргументами, которые я постарался привести в своей статье. Что дальше? Разработка ASP.NET Core продолжается. Уверен, версия 2.0 – далеко не последняя! Было бы неплохо взглянуть на обновленный SignalR и новую функциональность разор-страниц. Автор перевода: Евгений Лукашук Оригинал статьи
500+ питань на співбесіді щодо Ruby

Автор: Влад Сверчков

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 14 июня 2021 года. Оригинальная версия на украинском языке доступна по ссылке. Junior Ruby Developer Middle Ruby Developer Senior Ruby Developer Что нужно знать, когда проходишь техническое собеседование по Ruby? Конечно, ко всем вопросам готовым не будешь, но мы попросили интервьюеров-практиков прислать свои списки вопросов, а затем обобщили их в одном материале. Junior Общие вопросы 1. Какие принципы программирования вы знаете и какие из них вы пытаетесь соблюдать чаще всего? 2. Что такое парадигма ООП? Какие основные составляющие парадигмы? 3. Зачем нужна инкапсуляция? Что может произойти и не произойти, если все методы будут иметь модификатор доступа public? 4. Что такое наследование? Назовите пример(ы) плохого наследования (такое наследование, которое не стоило бы реализовывать). 5. Что такое полиморфизм? Приведите пример использования полиморфизма. 6. Что такое паттерн/шаблон проектирования? Какие шаблоны знаете? 7. Что такое клиент и сервер? Какая механика их взаимодействия? 8. Опишите путь, который проходит запрос после того, как в браузер ввести URL любого ресурса. 9. Что такое протокол HTTP? Какая разница между HTTP и HTTPS? 10. Что такое API? Может ли веб-приложение использовать более одного API? 11. Что такое REST API? Какие действия чаще всего выполняются над ресурсами? 12. Что такое сессия? Что такое cookies? Какая разница между ними? 13. Какие веб-уязвимости знаете? Как от них защититься? Какие есть инструменты, чтобы автоматически контролировать защиту от веб-уязвимостей? 14. Какими критериям пользуетесь для выбора библиотеки? 15. Что такое рефакторинг? Какие должны быть условия для выполнения рефакторинга? 16. Знаете ли вы семейство UNIX-подобных операционных систем (Linux, MacOS)? Назовите команды, которые чаще всего используете в терминале. 17. Что такое аутентификация? 18. Что такое авторизация? 19. Из каких частей состоит HTTP Request и HTTP Response? 20. Какие HTTP-статусы (HTTP-коды) знаете? На какие группы вы могли бы их разделить? 21. Какие HTTP-методы знаете? Зачем используется каждый из них? Git 22. Знакомы ли вы с системой Git? 23. Для чего нужны ветки в Git? Как сделать ветку? 24. Как скопировать с Git-хостинга (GitHub / GitLab / Bitbucket / другие) проект? 25. Что такое флаг -f? Для чего он и какие минусы использования? 26. Что такое Pull Request? Зачем ветви соединяют через Pull Request? 27. Какие еще команды чаще всего применяете, когда пользуетесь Git? Ruby 28. Как вы контролируете версии Ruby на своей локальной машине? 29. Что такое метапрограммирование? Какие плюсы и минусы при использовании метапрограммирования? 30. Какой менеджер библиотек для Ruby знаете? Как добавлять библиотеки? Как контролировать версии библиотек? Style guide 31. Что такое style guide и зачем его используют? 32. Какой популярный линтер контролирует выполнение большей части пунктов с Ruby Style Guide? Основы Ruby 33. Какие типы переменных есть в Ruby? 34. Что вернётся в результате сложения 10.5 и 10? 35. Чем отличаются переменные, начинающиеся с @, @@ и $? 36. Что такое attr_reader, attr_writer, attr_accessor и зачем они? 37. Что такое метод? 38. Что значит "?" в конце названия методов? Что означает "!" в конце названия методов? 39. Чем отличается энумератор map от each? 40. Что такое модуль? Какие есть варианты подключения модулей в класс? 41. Что такое класс и зачем он нужен? 42. Что такое модуль и зачем его используют? Чем модуль отличается от класса? 43. Что такое константа? 44. Что такое блок? Что такое yield? Можно ли передавать блоки в методы? Каким образом? 45. Что такое proc? 46. Что такое lambda? 47. В чем разница между proc и lambda? 48. Что такое eigenclass? 49. Какие виды условных операторов есть в Ruby? (if, unless, ternary, case) 50. Есть ли разница между операторами && и and? 51. Какие виды циклов есть в Ruby? (loop, while, until, for, each(), times(), upto()) Типы данных 52. Какие типы данных есть в Ruby? 53. Что такое интерполяция? 54. Что такое конкатенация? 55. Что такое массив в Ruby? 56. Что такое Hash в Ruby? Чем Hash отличается от массива? 57. Что такое символ и зачем он нужен? 58. Что такое Range и зачем его используют? 59. Что такое Time и Date? 60. Что такое Struct? 61. Что такое File? Структура классов и объектов 62. Что такое BasicObject? 63. Что такое Numeric? 64. Что такое Enumerable? 65. Что такое Struct? 66. Что такое OpenStruct? 67. Что такое Set? 68. Что такое Queue? 69. Что такое Object? 70. Что такое Kernel? ООП на Ruby 71. Есть ли интерфейсы в Ruby? 72. Что такое getter и setter в Ruby? Как их создавать? 73. Что такое инстансная переменная? 74. Что такое константа класса? 75. Какая разница между методом класса и методом объекта? 76. Какие есть области видимости? 77. Какие есть модификаторы доступа? Как private отличается от protected? 78. Поддерживает ли Ruby множественное наследование? 79. Как наследуются методы? Можно ли переопределить метод? 80. Зачем метод super? 81. Что такое Singleton-метод? 82. Что такое миксины? Зачем они и чем отличаются от декоратора? 83. Что такое include и extend и в чем разница между ними? 84. Какой путь поиска метода в иерархии классов? 85. Какая разница между последовательными и именуемыми аргументами метода? 86. Что такое exception? Когда они применяются? Как вызвать exception? Как отловить exception? Метапрограммирование 87. Что означает open class? 88. Что такое monkey patching? 89. Возможно ли создать класс динамически? Если да, то как именно? 90. Какие есть способы динамического управления методами, переменными и классами (define_method(), class_eval(), module_eval())? 91. Как происходит поиск метода в иерархии? Как можно обработать отсутствие метода (method_missing())? 92. Что такое алиас метода? Для чего нужны алиасы? 93. Как получить значение инстансной переменной? Как задать значение? Как проверить существование инстансной переменной (instance_variable_get(), instance_variable_set(), instance_variable_defined())? 94. Какие методы интроспекции есть в Ruby (class(), ancestors(), methods(), private_methods(), instance_variables(), singleton_methods(), local_variables())? 95. Что такое хуки и зачем их используют (inherited(), included(), method_added(), singleton_method_added(), method_missing())? RubyGems 96. Что такое gem? Что такое RubyGems? 97. С какой целью используют RVM? Что такое gemset? 98. Что такое Bundler и зачем он? 99. Что такое Gemfile и для чего его используют? 100. За что отвечает каждый из gem`ов? Если знаете нюансы в работе какого-либо из них — обязательно озвучьте. active_admin active_model_serializers bundle audit bcrypt devise jwt cancancan / pundit draper kaminari sidekiq rspec shoulda-matchers faker factory_bot simplecov rubocop (with extensions) pry Ruby on Rails 101. Что такое MVC? Является ли Rails MVC-фреймворком? 102. Что такое миграция? Для чего она нужна? Какие правила создания миграций? 103. Что такое роуты? Что такое resource и resources в роутах? 104. Чем отличается has_many through от has_and_belongs_to_many? 105. Зачем используют concerns? 106. Как работать с sensitive-данными в Rails-приложениях (токены, ключи и т. д.)? Как работает механизм credentials в Rails? 107. С какой целью используют локалы (locals)? Style guide 108. Знакомы ли вы с RoR style guide? Структура файлов в Rails 109. Из чего состоит Rails-приложение? Какая архитектура директорий? Зачем нужна каждая из них? 110. Чем отличается lib от vendor? 111. Как создать background job в Rails? 112. Какие способы загрузки ассоциаций в Rails? Модели и ActiveRecord 113. Зачем нужны модели? Что представляет собою модель? 114. Что такое ORM? Что такое ActiveRecord? 115. Какие есть правила наименования моделей и таблиц в базе данных? 116. Что такое миграции и зачем нужен этот механизм? Как создавать миграции? 117. Какие виды валидаций есть в AR? 118. Как можно вызвать валидацию? Когда валидация вызывается автоматически? Как можно отключить валидацию при сохранении? 119. Что такое callback в Rails? 120. Какие есть виды колбеков в AR? 121. Какие виды ассоциаций есть в AR? 122. Что такое has_one и belongs_to? 123. Что такое has_many? 124. Что такое has_many: through? 125. Что такое has_one: through? 126. Что такое has_and_belongs_to_many? 127. Что такое полиморфная ассоциация? 128. Что такое STI? 129. Каким образом можно получить данные из базы данных? Как получить один объект и коллекцию? Как задать условия выборки? 130. Что такое скоупы? Какова их функция? 131. Як выполнить произвольный SQL-запрос? 132. Как посмотреть информацию о том, как выполнялся запрос, какие использовались ключи и т. п.? Контроллеры 133. Что такое контроллер? Какую задачу выполняет? 134. Что такое action? Что такое CRUD action? 135. Что такое permit params? 136. Что такое ActiveRecord? Как он реализован в Rails-фреймворке? 137. Что такое параметры? Как они попадают в контроллер? Что такое дефолтные параметры (в роутах)? Что такое стронг-параметры? 138. Что такое cookies и зачем они? Где хранятся cookies? Как получить доступ к cookies? 139. Что такое сессии и в чем их задача? Где хранятся сессии? Как получить доступ к сессии? 140. Какие виды фильтров есть в Rails? (Before / after / around actions) 141. Зачем нужен объект Request? Какую информацию он содержит? 142. Для чего нужен объект Response? Какую информацию он содержит? 143. Что такое стриминг? Каким образом можно отдать файл на загрузку (Send_data, send_file)? 144. Что такое Rescue в контроллерах и для чего применяется? 145. Как принудительно включить использование HTTPS-протокола? Маршрутизация 146. Что такое роуты и в чем их функция? 147. Что означает аббревиатура CRUD? 148. Если нужно сделать новый CRUD для определенного ресурса, какие классы вы создадите и какие файлы измените? 149. Что такое ресурсы? 150. Что такое Singular ресурсы и что отличает их от обычных ресурсов? 151. Что делают неймспейсы в роутах? 152. Что такое вложенные ресурсы? 153. Что такое shallow nesting? 154. Что означает RESTful роуты? 155. Что такое нересурсные роуты? 156. Что такое actions в роутах? View 157. Что такое view и для чего он нужен? 158. Что такое layout? Чем отличается от view? 159. Что такое шаблонизатор и с какими шаблонизаторами приходилось работать? 160. Зачем нужен метод render? Что рендерить с его помощью? 161. Как передаются переменные во view? 162. Что такое partial? Когда стоит его применять? 163. Что такое хелпер и зачем его используют? 164. Какие есть хелперы для генерации роутов? 165. Какие есть хелперы для генерации форм? 166. Как создавать собственные хелперы? Интернационализация Rails 167. Что такое i18n? Зачем нужна i18n? Как она устроена в RoR? В каком виде можно хранить переводы? ActionMailer 168. Что такое ActionMailer и какие задачи он решает? AssetsPipeline 169. Что такое AssetsPipeline и какие задачи он выполняет? Инструменты консоли и rake-таски 170. Какие есть консольные команды для работы с RoR? Что такое rake-таски? Безопасность 171. Знаете ли вы какие-то уязвимые места, защиту от которых Rails предоставляет out of the box? 172. Какие атаки могут быть при неправильном использовании сессий? Почему нельзя хранить важные данные в сессиях? 173. Что такое CSRF? Как правильно защититься от CSRF? 174. В чем уязвимость Open Redirect? Как защититься от возможных атак, связанных с Open Redirect? 175. Какие уязвимости связаны с загрузкой файлов? Почему важно фильтровать имена и расширения файлов? Как защититься от опасности? 176. Почему нельзя загружать файлы в каталог, доступный снаружи? Что будет, если злоумышленник загрузит файл с кодом? 177. Какие уязвимости связаны с управлением пользователями (ссылка активации, пароли в чистом виде)? Как защититься? 178. Что такое инъекции и как происходит такая атака? Как их избежать? 179. Как организовать безопасную генерацию приглашений? Что такое deep_munge? Конфигурация 180. Где располагается основная конфигурация программы? 181. Что такое initializers? Зачем они? 182. Что такое окружение? Каково его назначение? 183. Как и где настраивается взаимодействие с базой данных? 184. Как и где настраивается Assets, генераторы, мидлвары, i18n? 185. Можно ли указывать произвольные настройки? Если да, то где и каким образом? Кэширование 186. Что такое кэш и зачем нужен этот механизм? 187. Какие виды кэширования есть в Rails? 188. Где может храниться кэш? 189. Зачем использовать кэширование страниц? 190. Зачем использовать кэширование экшенов? 191. Зачем использовать кэширование фрагментов? 192. Что такое Memcached? 193. Зачем и как реализуется низкоуровневое кэширование? 194. Как и когда кэшируется SQL? 195. Как тестировать кэширования в режиме разработки? Реляционные базы данных Теория реляционных баз данных 196. Что такое СУБД? 197. Что такое реляционная база данных? 198. Что такое нормализация базы данных? 199. Что такое нормальная форма? 200. Сколько есть нормальных форм баз данных? 201. Опишите первые три нормальные формы баз данных. 202. Что такое денормализация баз данных? 203. В чем разница между Primary Key, Foreign Key? Зачем они? 204. Какая разница между LEFT JOIN, INNER JOIN, RIGHT JOIN? 205. Как добавить запись в таблицу без ORM? 206. Как обновить запись в таблице без ORM? 207. Как удалить запись из таблицы без ORM? 208. Как прочитать записи в таблице без ORM? 209. Какие правила группировки данных в таблице вы знаете? SQL 210. Что такое DML (Data Manipulation Language)? 211. Что такое DDL (Data Definition Language)? 212. Что такое DCL (Data Control Language)? 213. Что такое TCL (Transaction Control Language)? 214. Как выбрать данные из нескольких таблиц? Какие виды JOIN вы знаете? 215. Какие агрегированные показатели можно использовать во время выборки из таблицы? 216. Что такое таблица в базе данных? 217. Как создать таблицу? 218. Как выбрать записи из таблицы? 219. Как вставить запись в таблицу? 220. Как изменить запись в таблице? 221. Как удалить запись из таблицы? 222. Как объединить выборку из разных таблиц? 223. Что такое группировка или агрегирование? 224. Каким образом можно задавать условия агрегирования? Индексы баз данных 225. Что такое индексы в базе данных? 226. Для чего нужны индексы? 227. Какие виды индексов существуют? 228. Что такое первичный ключ? 229. Что такое внешний ключ? 230. Что такое составной ключ? Полнотекстовый индекс в базах данных 231. Что такое полнотекстовый поиск и в чем его задача? 232. Что такое полнотекстовый индекс? 233. Что такое ts_vector? 234. Что такое ts_query? PostgreSQL 235. Что такое select distinct и какова его функция? 236. Каким образом можно сортировать результаты выборки? 237. Как ограничить количество результатов выборки? 238. Как проводить поиск по подстрокам? 239. Какие виды объединений (JOIN) есть в PostgreSQL? 240. Что такое подзапросы и в чем их задача? 241. Какие типы данных есть в PostgreSQL? 242. Какие есть виды символьных типов данных? 243. Какие есть виды типов данных для работы с датой и временем? 244. Что такое тип enum? Когда он используется? 245. Как можно создавать таблицы в базе данных? 246. Как изменять структуру таблицы? 247. Как удалять таблицы? 248. Как очистить таблицу? 249. Возможно ли задавать значения по умолчанию для полей? Если да, то как именно? 250. Возможно ли контролировать уникальность значений при вставке? Если да, то каким образом? 251. Что такое функции в PostgreSQL? 252. Какие операторы есть в PostgreSQL? Базы данных NoSQL Redis 253. Что такое Redis и зачем используют этот инструмент? Elasticsearch 254. Что такое Elasticsearch и зачем его используют? Статический анализ кода 255. Что такое Overcommit и зачем нужен? 256. Что такое Danger и для чего используется? 257. Что такое статические анализаторы кода? Зачем их используют? 258. Какие анализаторы для Ruby / Ruby on Rails знаете? 259. Какие статические анализаторы кода для JavaScript знаете? Тестирование 260. Какие виды тестирования знаете? Какие из них вы практиковали при использовании Rails? 261. Какой фреймворк для тестирования используете? 262. Какие показатели качества для своих тестов можете назвать? 263. С помощью какой библиотеки вы контролируете процент покрытия тестами? 264. Расскажите об основах тестирования в Ruby. Что такое RSpec? Какая разница между describe, context и it? 265. Какая разница между юнит-тестами и интеграционными? 266. Что проверяют приёмным тестированием? 267. Что проверяют интеграционным тестированием? 268. Что тестируют в моделях? 269. Что тестируют в контроллерах? 270. Что тестируют в сериалайзерах? 271. Как тестировать API? 272. Как тестировать различные Service Objects? 273. Что такое RSpec? Какие задачи выполняет этот инструмент? 274. В чем разница между let и let! в RSpec? 275. Какие хуки в RSpec знаете? 276. Что выполняется раньше: let! или хук before (:all) ? 277. Что такое Capybara? Какие задачи решает Capybara? 278. Что такое стабы? 279. Что такое моки? 280. Что такое матчер? 281. Какую задачу выполняет гем Shoulda Matchers? 282. Какую задачу выполняет Faker? 283. Зачем нужны Webmock и VCR? Чем они отличаются? 284. Что такое WebKit и PhantomJS? В чем разница между ними? Какие еще есть драйверы? 285. Как работать с базой данных в тестах? Как работает gem database_cleaner? Дополнительные RubyGems и Rails плагины 286. Какую задачу выполняет Devise? 287. Какую задачу выполняет Rake? 288. Какую задачу выполняет Cancancan и Pundit? 289. Какую задачу выполняет Kaminari и Will_paginate? 290. Какую задачу выполняет Carrierwave? 291. Какую задачу выполняет MiniMagick? 292. Какую задачу выполняет Aasm? 293. Какую задачу выполняет ActiveAdmin? 294. Какую задачу выполняет Nokogiri? 295. Какую задачу выполняет Formtastic и SimpleForm? 296. Какую задачу выполняет Omniauth? 297. Какую задачу выполняет Draper? 298. Какую задачу выполняет Faye? 299. Какую задачу выполняет Pusher? 300. Какую задачу выполняет Sidekiq, Resque? 301. Какую задачу выполняет Mongoid? Управление, сервисы и DevOps 302. Что такое SSH? Как и для чего используется? 303. Каким образом можно настроить аутентификацию на хосте без пароля? 304. Какие задачи выполняет Heroku? В чем его особенность? 305. Какие задачи выполняет Digitalocean? 306. Какие задачи выполняет Docker? Мониторинг 307. Какие задачи выполняют Airbrake, DataDog, NewRelic? 308. С какой целью используют Monit? Ruby Web Tools 309. Какие есть веб-серверы, написанные на Ruby? 310. Что такое Sinatra? 311. Что такое API? Для чего используется? Что такое сериалайзеры и зачем они нужны? 312. Что такое клиент-серверная модель? 313. Какая разница между GET- и POST-запросами? 314. Что такое HTTParty и какие задачи он выполняет? 315. Что такое Faraday и какие задачи он выполняет? 316. Что такое Rack? Что такое Rack-application? Что такое Rack middleware? 317. Что такое push-технология? Интеграции 318. Есть ли опыт интеграции с Facebook? Если да, то на каком проекте? 319. Есть ли опыт интеграции с Twitter? Если да, то на каком проекте? 320. Есть ли опыт интеграции с LinkedIn? Если да, то на каком проекте? 321. Есть ли опыт интеграции с Google? Если да, то на каком проекте? Практические задания 322. Описать в ООП-стиле: один из предметов интерьера в контексте конкретного бизнеса. Например, кресло, на котором сидит кандидат, теперь надо продавать в магазине. 323. Написать консольную версию игры «крестики-нолики», где входные данные передаются через gets, а выводят через puts. Два пользователя на одной машине должны иметь возможность сыграть партию. 324. Отсортировать массив. 325. Написать функцию, которая вернет уникальные элементы массива, не используя функцию uniq или set, to_set со стандартной библиотеки. Middle Общее 1. Что такое SOLID? Приведите примеры на каждую из букв. 2. Что такое микросервисная архитектура? Какие плюсы и минусы вы видите во время её использования? 3. Знаете ли вы шаблоны проектирования Singleton / Factory / Facade / Decorator / Template Method / Strategy? 4. Можно ли измерить скорость выполнения алгоритма? Какие факторы влияют на скорость? Какие виды зависимостей вы знаете? 5. Что такое методология Scrum? На каких активностях / встречах может присутствовать / быть полезным Software Developer? 6. Какие инструменты для логирования используете в работе? 7. Какие инструменты для мониторинга веб-приложений используете? 8. С помощью какого/каких инструментов вы деплоили приложения на staging / production? Опишите процесс. 9. Если один из ендпоинтов в приложении отрабатывает очень долго, что делать, чтобы улучшить скорость? 10. Чем отличается библиотека от фреймворка? 11. Что такое трехзвенная архитектура? Зачем и когда ее используют? Приведите примеры. 12. Что такое кэширование? Зачем и когда его используют? Приведите примеры. 13. Что такое функциональное разделение? Зачем и когда его используют? Приведите примеры. 14. Что такое Comet-сервер? Зачем и когда его используют? Приведите примеры. 15. Что такое денормализация? Зачем и когда ее используют? Приведите примеры. 16. Что такое деградация функциональности? Зачем она и в каких случаях используется? Приведите примеры. 17. Что такое сервис-ориентированная архитектура? Зачем и когда ее используют? Приведите примеры. 18. Что такое монолитное приложение? Зачем и когда его используют? Приведите примеры. 19. Что такое асинхронная обработка? Зачем и когда ее применяют? Приведите примеры. 20. Что такое ленивые вычисления? Зачем и когда их используют? Приведите примеры. Предметно-ориентированное проектирование 21. Что такое DDD? В чем преимущества перед классическим MVC? 22. Что такое домен? 23. Что такое модель? 24. Что такое контекст? 25. Что такое сущность? 26. Что такое value object? 27. Что такое агрегирование? Git и code review 28. Что делают команды cherry-pick, log, stash, reset, squash? 29. Что такое Gitflow? Какие правила использования Git на вашем прошлом проекте? 30. Каких правил именования комитов / ветвей / Pull Request`ов вы придерживаетесь? 31. На что обращаете внимание при code review? 32. Что бы вы могли назвать плохо проведенным code review? Базы данных 33. Для чего нужны индексы? 34. Какие есть виды индексов? 35. Ускоряют ли индексы все операции с базами? 36. Что такое DB view? 37. Чем отличаются materialized db view от non-materialized db view? 38. Как можно сохранить данные в различные таблицы и гарантировать, что все они или запишутся, или нет? 39. Можно ли строить индексы по нескольким полям? Важен ли порядок этих полей в индексе? 40. Какие вы знаете constraints при создании столбцов? 41. В чем разница между SQL и NoSQL базами данных? 42. Как бы вы импортировали большие массивы данных в БД (1-2 миллиона строк в CSV-файл)? 43. Что такое N+1 и как избегать? Реляционные базы данных 44. Какие различия между джоинами FULL OUTER JOIN, CROSS JOIN, NATURAL JOIN, INTERSECT и EXPECT? 45. Какие специфические типы данных есть в PostgreSQL? 46. Что такое view? С какой целью используется? 47. Что такое materialized view? 48. Что такое recursive view? 49. Что такое хранимая процедура и зачем она нужна? 50. Что такое партиционирование и какую проблему оно решает? 51. Умеете ли вы работать с чистыми SQL-запросами? 52. Каким образом можно работать с геолокацией в PostgreSQL? 53. Какие способы резервного копирования данных? Что такое pg_dump? В каком виде можно создавать резервные копии? NoSQL базы данных Redis 54. Что такое Redis? Какие задачи он выполняет? 55. Какие типы данных есть в Redis и для чего нужен каждый из них? 56. Что такое pub / sub? 57. Что такое транзакции? 58. Что такое mass insertion? 59. Что такое партиционирование? 60. Умеете ли работать с Redis в консоли? 61. Умеете ли настраивать Redis? Elasticsearch 62. Что такое Elasticsearch и какие задачи он выполняет? 63. Что такое кластер? 64. Что такое нода? 65. Что такое индекс? 66. Что такое тип? 67. Что такое документ? 68. Что такое шарды и реплики? 69. Что такое Query DSL? 70. Что такое мапинг? Статический анализ кода 71. Что такое overcommit и зачем нужна эта утилита? 72. Что такое danger и для чего используют эту утилиту? 73. Какую задачу выполняет каждый из нижеперечисленных гемов? Rubocop; Reek; Rails Best Practices; Brakeman; RubyCritic; SimpleCov; Bundle Audit; Bundle Leak; Traceroute. 74. Какие задачи выполняет каждый из нижеперечисленных модулей? Eslint; Stylelint; Prettier. Ruby 75. Какие проблемы в Ruby (как в языке программирования) вы видите? Какие, по вашему мнению, нужно решать как можно быстрее? 76. Какими библиотеками, кроме фреймворка Rails, пользовались для создания структуры проекта? 77. Как можно в Ruby запросить сторонний API? Какой встроенный класс позволяет это сделать? 78. Что такое Thread? Чем он отличается от Process? 79. Есть ли в Ruby возможность создать абстрактный класс? Есть ли способ искусственно создать абстрактный класс? 80. Есть ли в Ruby возможность множественного наследования? Есть ли способ искусственно заменить множественное наследование? 81. Назвать максимально точный путь поиска методов в Ruby 82. Какие минусы использования method_missing знаете? 83. Можно ли узнать идентификатор объекта в памяти, если да, то каким образом? 84. Какие виды enumerator для массива вы знаете? 85. Что такое мемоизация методов? Зачем ее используют? 86. С помощью какого хука можно посчитать количество потомков определенного класса? 87. В чем разница запуска rspec и bundle exec rspec? 88. Создавали ли вы гем в Ruby? Какая механика / последовательность действий для создания гема? 89. Что такое Rack middleware? 90. Есть такой код:             users = User.where (id: [1,3,4])             users.where (name: "Alex")             users.inspect После какой строчки кода ActiveRecord выполняет запрос в базу? Ruby on Rails 91. Что такое ActiveSupport? Зачем нужен? Какие задачи выполняет? Приведите пример методов, которые добавляет ActiveSupport. 92. Что такое Action Cable? Зачем используют этот фреймворк? 93. Как создать функциональность для отправки имейла в Rails-приложении? 94. Какие библиотеки для background jobs использовали? Какая механика работы таких библиотек? 95. Какие и виды кэша в Rails знаете? Где можно хранить кэш? 96. Какие библиотеки / подходы для создания API документации знаете / используете? 97. Что такое Swagger? Какие преимущества создания API документации в Swagger-формате? 98. Что такое Query Objects? Когда и как их можно использовать? 99. Что такое Decorators? Когда и как их можно использовать? 100. Что такое Form Objects / Contract? Когда и как их можно использовать? 101. Где и как вы рекомендуете держать бизнес-логику в Rails-приложении? 102. Что такое JSON API формат? Использовали ли вы библиотеки для сериализации объектов в JSON API формате? Тестирование 103. Работали ли вы с feature-тестами? Что такое capybara? 104. Что такое TDD? Какие преимущества / недостатки использования TDD-подхода видите? 105. Что такое BDD? В чем отличие между TDD и BDD? 106. Что может быть причиной того, что тесты на проекте выполняются очень долго? 107. Что такое принцип тестирования FIRST? 108. Как порекомендуете писать тесты на код, в котором посылается запрос на сторонний сервис (API)? 109. Какие инструменты помогают контролировать качество тестов? 110. Какие составляющие response`a вы тестируете, когда пишете тест на определенный эндпоинт? 111. Является ли 100% code coverage на проекте залогом низкой вероятности что-то «сломать» во время багфиксинга / имплементации новой функциональности? Объясните свой ответ. Управления, сервисы и DevOps 112. Опишите CI / CD-подход на своем последнем проекте? Как бы вы его изменили? 113. Какие в целом Continuous strategies знаете? Чем отличается Continuous Deployment от Continuous Delivery? 114. Что такое Docker? Чем отличается Docker от виртуальной машины? 115. Для чего используют docker-compose? 116. Умеете ли вы работать с Docker? 117. Что такое image в Docker? Как работать с ним в Docker? 118. Что такое container в Docker? Как работать с контейнерами? Как запускать и останавливать контейнеры? Как узнать список рабочих контейнеров? 119. Что такое Docker Daemon? 120. Что такое Docker Client? 121. Что такое Docker Hub? 122. Что такое Docker Compose? Практические задания 123. Написать клиент для открытого API ресурса с использованием только низкоуровневых библиотек: Net::HTTP, HTTP.rb, Faraday, etc. 124. Как бы вы посчитали количество пассажиров, которые заходят или выходят на определенной станции метро? 125. Посчитать количество автомобилей в пробке. 126. Организовать автомобильную стоянку. 127. Написать функцию, которая вернет уникальные элементы массива, не используя uniq или set, to_set со стандартной библиотеки. Ожидается вариант с применением хеш-таблицы, где ключами будут уникальные элементы из массива, а значениями true. Senior Общие вопросы 1. Опишите основные способы аутентификации в API. 2. Назовите основные принципы построения REST API. 3. Вам нужно спроектировать API, какие основные вопросы будете задавать клиенту? 4. Какие основные преимущества и недостатки монолитной архитектуры? 5. Какие основные преимущества и недостатки микросервисной архитектуры? 6. Что такое SOLID? Какие из принципов, по вашему мнению, чаще всего нарушаются, какие являются наиболее критичными? 7. Опишите Singleton-паттерн. Где и когда вы его использовали? 8. Опишите принцип работы DNS? 9. Что такое code smells? Каковы основные признаки плохого кода? 10. Что такое reverse proxy, для чего он нужен? 11. Что такое load balancer, основные разновидности? 12. Что такое MVC и как не попасть с ним в беду? 13. Опишите процесс обработки HTTP-запроса на примере любого веб-фреймворка в Ruby (Rails, Hanami, Sinatra, Roda, etc). 14. Чем отличается refactoring от оптимизации? Как и когда нужно выполнять каждый из вышеназванных процессов? 15. Знаете ли вы GraphQL? Какие плюсы и минусы вы видите по сравнению с REST? 16. Что такое multi-tenant architecture? Когда рекомендуете ее использовать? 17. Чем отличается понятие Dependency Inversion от Dependency Injection и от Inversion of Control? 18. Что такое GDPR? Назовите правила, которые использовали, чтобы быть GDPR compliant? Метапрограммирование и DSL 19. Параллельное выполнения кода через Thread, Fiber, Ractor. Объясните на примерах. 20. Дизайн-паттерны: Service, Form, Value, Policy, Guard, etc. Объясните на примерах. 21. Расскажите об архитектурных паттернах: Monolith, Microservices, Distributed app, etc. 22. Как организовать бизнес-логику, когда в проект уже 1000+ бизнес-операций? 23. Что такое Sidekiq? Как правильно организовывать очереди? 24. Расскажите об оптимизации быстродействия через benchmark, lineprof и flamegraph. 25. Работали ли вы с Garbage collector? Расскажите. 26. Расскажите о собственных примерах решений, которыми гордитесь и почему. Ruby / Rails 27. Что такое Thread? Какие особенности использования тредов в разработке? 28. Что такое Process? Какие особенности использования процессов в разработке? 29. Что такое Mutex? Приведите примеры использования мьютексов в разработке? 30. Если нужно определить, сколько выполняется тот или иной код, как порекомендуете это сделать? 31. Какие недостатки видите в Ruby? Когда и как они могут себя проявить во время разработки? 32. Можно ли передать контекст выполнения одного метода в другой метод? Если да, то как это сделать? 33. Какие callback-s знаете в Ruby? 34. Как реализовать Singlethon-класс Ruby? Опишите базовые концепты. 35. Как работает Garbage collection в Ruby? Опишите базовые концепты. 36. Что такое Ractor? Какая разница между классической моделью работы с тред и работой с помощью Ractor? 37. Как работают Lazy Enumerators? Чем они отличаются от классических Enumerators? Как и когда они могут помочь? 38. Назвать примеры использования Fiber`ов 39. Как include добавляет метод модуля в класс? Что происходит на уровне MRI? В чем разница по сравнению с extend и prepend? 40. У вас есть задача импортировать пользователей в базу Rails-приложения. Пользователи записаны в CSV-файле, где каждая строка - это данные. Опишите ваш подход к решению проблемы. Как изменится решение, если файл станет очень большим (> 300000 строк)? 41. Если в модели User у вас есть callback, то какие могут возникнуть проблемы при решении предыдущей задачи? 42. Как мы можем отслеживать прогресс Background Job? 43. Опишите жизненный цикл Request - Response в Rails. Через какие основные компоненты фреймворка проходит запрос и для чего они нужны? 44. Какие основные типы тестов используете и с какой целью? 45. Как вы относитесь к интеграционным тестам? 46. Что такое полиморфные ассоциации в ActiveRecord? 47. Как бы вы порекомендовали построить semantic versioning для Rails API, работающего с мобильными приложениями (iOS, Android, Web)? Поверхностно опишите стратегию. 48. Если необходимо, чтобы каждый запрос, пришедший к Rails app независимо от роута, возвращал 403 статус как можно быстрее, как бы вы порекомендовали реализовать код для этой задачи? 49. Какие, по вашему мнению, пять основных минусов Rails? Что бы вы порекомендовали изменить, чтобы нейтрализовать эти минусы? 50. Можно ли в Rails работать с несколькими базами, если да, то как это сделать? Базы данных 51. Что такое транзакция? Какие основные свойства транзакций? 52. Что такое database lock и чем он отличается от транзакций? 53. Что такое Pessimistic и Optimistic locking? 54. У нас есть таблица Users. Мы добавили к ней индекс в трех полях: first_name, last_name, email. Именно в таком порядке. Теперь делаем запрос SELECT * FROM users WHERE first_name = "Alex" AND email = "<a href="mailto:test@mail.com"> test@mail.com </a>". Поможет ли нам индекс ускорить такой запрос, и почему? 55. Что такое Database View? Какие виды есть? 56. Что такое Database trigger? 57. Что такое партицирование? Опишите кейсы, когда партицирование было бы полезным? 58. Поверхностно опишите шаги для реализации партицирования на примере любой СУБД. 59. Что такое триггеры? Как и когда их можно использовать? Какие плюсы и минусы вы видите в сравнении с тем, чтобы использовать триггеры / колбеки на уровне бэкенд? 60. Что такое WAL? Какую роль он играет? 61. Была ли у вас возможность / необходимость использовать шардинг? Чем отличается шардинг от партицирования? 62. Опишите принципы, преимущества и недостатки работы с primary / secondary (master / slave) репликацией? 63. Знакомы ли вы с CAP-теоремой? Если да, объясните основную идею. 64. Знаете ли вы ACID? Как вы понимаете букву "I" в этой аббревиатуре? 65. Представьте ситуацию, когда ваш сервер, на котором размещен redis, по неизвестным причинам перезапустился. Что рекомендуете сделать заранее, чтобы такие ситуации не нанесли большой вред? Тестирование 66. Знаете ли вы, что такое Load Testing? Чем может помочь разработчик при Load Testing? 67. Какие инструменты используют для того, чтобы собрать как можно больше метрик при Load Testing? 68. Какие подходы вы бы порекомендовали использовать, чтобы ускорить тесты на CI? 69. Как внедрить процесс написания тестов, если проект (Rails API) их совсем не имеет? Практические задания 70. Написать реализацию структуры данных Set. Объяснить алгоритмическую сложность добавления элементов к сету. 71. Спроектировать реферальную систему (то есть, пользователь может пригласить других пользователей, которые становятся его рефералами, они приглашают своих рефералов, и так формируется древовидная структура). Есть модель: class Users <ActiveRecord :: Base             end Как бы вы связали ее с рефералами? 72. Добавьте метод: class Users <ActiveRecord :: Base             end который возвращает рефералы пользователя поуровнево. Например, user имеет рефералы user1, user2. user1 имеет реферала user3, user2 имеет рефералов user4 и user5. Должны получить результат: {0 => [user]             1 => [user1, user2],             2 => [user3, user4, user5} Спасибо за вопросы Денису Земляному, Николаю Воронину, Сергею Гнилицкому, Владимиру Свередюку, Михаилу Одинюку, Виктору Нову, Александру Шестопалу, Андрею Зеленцу, Кириллу Шевченко, Виктору Новицкому.
Створення Web API в MVC6

Автор: Редакция ITVDN

Введение ASP.Net Web API – это основа создания HTTP услуг широкого спектра клиентов, таких как браузеры, мобильные телефоны, планшеты и так далее. API должна быть совместима с современными браузерами, чтобы использовать эти услуги в простой форме. Мы можем быстро и просто сбрасывать служебные данные в браузер, а также приложения. Необходимость в Web API Если Вы нуждаетесь в Web Service и Вам не нужно SOAP, то API ASP.Net –лучший выбор. Он строит простые HTTP сервисы, основанные на базе существующей WCF. ASP.Net Web API на основе HTTP легко определяются. У них открытый исходный код. Легкая архитектура подходит для устройств с ограниченной шириной полосы, например, смартфонов. Создание простой Web API в ASP. NET MVC 6 Запустите Visual Studio 2015 Preview. В меню Файл выберите New > Project. В диалоговом окне New Project нажмите Tempates > Visual C# > Web и выберите ASP. NET шаблон проекта Web-приложений. Назовите проект "WebApplication1" и нажмите OK. В диалоговом окне New ASP.NET Project выберите "ASP.NET 5.0 Empty” шаблон. Проект включает в себя следующие файлы:   Global.json содержит настройки решения. В project.json находятся настройки проекта. Project_Readme.html – read me файл. Startup.cs содержит встроенный код конфигурации. Откройте файл Project.json. Добавьте библиотеки классов (class libraries) в разделе зависимостей (dependencies). ​ "dependencies": {           "Microsoft.AspNet.Server.IIS": "1.0.0-beta1",           " "Microfost.AspNet.Diagnostics": "1.0.0-beta1" } Затем откройте Startup.cs с кодом, показанным ниже.  public class Startup    {         public void Configure(IApplicationBuilder app)         {             // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940              app.UseWelcomePage();             // app.UseMvc();          }     }  После отладки Visual Studio перейдите на http://localhost:port/ в браузере. Создание Web API Мы создадим Web API, чтобы упорядочить список клиентских продуктов. Сначала нужно добавить ASP.Net MVC6 в приложение. Добавьте пакет MVC6 в список зависимостей в Project.json. Используйте код ниже. "dependencies": {         "Microsoft.AspNet.Server.IIS": "1.0.0-beta1",         "Microsoft.AspNet.Diagnostics": "1.0.0-beta1",         "Microsoft.AspNet.Mvc": "6.0.0-beta1"       } Затем добавьте MVC в request pipeline в Startup.cs. Добавьте Using для Microsoft.Framework.DependencyInjection.   Добавьте следующий метод в Startup класс. using System; using Microsoft.AspNet.Builder; using Microsoft.AspNet.Http; using Microsoft.Framework.DependencyInjection;//add new  namespace WebApplication1 {     public class Startup     {         public void Configure(IApplicationBuilder app)         {                      app.UseWelcomePage();              app.UseMvc();         }         public void ConfigureServices(IServiceCollection services)         {             services.AddMvc();         }     } } Добавьте модель using System; using System.ComponentModel.DataAnnotations; namespace WebApplication1.Model {     public class Customer     {         public int CustomerId { get; set; }         [Required]         public string Name { get; set; }     } } Добавьте контроллер  using Microsoft.AspNet.Mvc; using System.Collections.Generic; using System.Linq; using WebApplication1.Model; namespace WebApplication1.Controllers {     public class HomeController : Controller     {                 static readonly new List<Customer> _items = new List<Customer>()             {                 new Customer  { CustomerId = 1, Name = "Henry" },                 new Customer { CustomerId = 2, Name = "John" },             };         public IEnumerable<Customer> Get()         {             return _items;         }         public IActionResult GetById(int id)         {             var its = _items.FirstOrDefault(x => x.CustomerId == id);             if (its == null)             {                 return HttpNotFound();             }             return new ObjectResult(its);         }         public void CreateCustomer([FromBody] Customer item)         {             if (!ModelState.IsValid)             {                 Context.Response.StatusCode = 400;             }             else             {                 item.CustomerId = 1 + _items.Max(x => (int?)x.CustomerId) ?? 0;                 _items.Add(item);                 string url = Url.RouteUrl("GetByIdRoute", new { id = item.CustomerId },                     Request.Scheme, Request.Host.ToUriComponent());                 Context.Response.StatusCode = 201;                 Context.Response.Headers["Location"] = url;             }         }         public IActionResult DeleteItem(int id)         {             var item = _items.FirstOrDefault(x => x.CustomerId == id);             if (item == null)             {                 return HttpNotFound();             }             _items.Remove(item);             return new HttpStatusCodeResult(204);         }     } } Выше описывается класс HomeController. Маршрутизация Атрибут маршрутизации определяет URL шаблоны контроллера. [Route("api/[controller]")] Методы HTTP [HttpGet], [HttpPost] и [HttpDelete] – атрибуты, определяющие методы HTTP для контроллера. public IEnumerable<Сustomer> Get() { }  //[HttpGet]  public IActionResult GetById(int id) { } //[HttpGetbyid}  public void СreateСustomer([FromBody] Сustomer item) { } // [HttpPost]  public IActionResult DeleteItem(int id) { } //[HttpDelete] {Customerid: int} int ограничивает переменную до соответствия целому числу, чтобы URL-адреса совпадали. http://localhost/api/home/1 http://localhost/api/home/42 Из этой статьи Вы узнали, как создавать Web API в MVC 6, используя модели, контроллер и HTTP методы. Источник: http://www.c-sharpcorner.com/UploadFile/85ed7a/create-web-api-in-mvc-6/
.NET Core та C# - технології, за якими майбутнє

Автор: Редакция ITVDN

Я работал с .NET Core около года и сейчас могу сказать, что был очень впечатлен. Поскольку наша компания создает приложения для разработчиков, которые базируются на .NET Core, я ощущаю нас причастными к тому, что сейчас происходит. Каждый день мы общаемся с клиентами, которые уже используют .NET Core в своих разработках. .NET Core быстро завоевывает популярность, и я уже предсказываю огромную потребность в разработчиках на C# и .NET Core в 2018 году. Согласно индексу программирования TIOBE, C# уже входит в пятерку наиболее популярных языков программирования. 6 вещей, которые стоит знать о C# и .NET Core Узнайте, почему .NET Core возводит C# в топ списка наиболее популярных языков программирования. 1) Простота в изучении Если вы уже работали с С, Java или даже JavaScript, синтаксис C# покажется Вам довольно знакомым. Сам синтаксис достаточно прост в понимании и чтении. Исходя из индекса TIOBE, приведенного выше, уже сейчас большинство разработчиков могут легко перейти с Java или C. В сети существует много онлайн-ресурсов для изучения C#. Большинство из них – бесплатные, другие же можно использовать за умеренную плату. Pluralsight – Отличный обучающий контент за доступную цену Microsoft Virtual Academy – Бесплатные видео и оценивание Microsoft Getting Started with C# - Бесплатные интерактивные туториалы 2) Современные возможности языка .NET существует на протяжении длительного времени и за последние 15 лет достаточно сильно преобразился и улучшился. На протяжении лет я отмечал такие прекрасные нововведения как MVC, обобщения, LINQ, async/await операторы и многое другое. Как человеку, который лично посвятил себя изучению языка, я рад наблюдать, как он модернизируется. Многое претерпело изменения с появлением .NET Core. Взять тому примером стек технологий ASP.NET. Все эти 15 лет язык C# был с нами, и он продолжает совершенствоваться. Вот некоторые наиболее примечательные особенности: Строгая типизация Качественные библиотеки классов Асинхронное программирование – шаблон async/await Сборка мусора, автоматическое управление памятью LINQ – интегрированный язык запросов Обобщения – примером List<T>, Dictionary<T, T> Управление пакетами Общие бинарные файлы для разных платформ и фреймворков Простота в использовании фреймворков для создания MVC веб-приложений и REST API. 3) Универсальность: веб, мобильные, серверные, настольные приложения Одним из наиболее значимых плюсов C# в частности и .NET в целом, я считаю, является его многогранность. Я могу писать программы для ПК, вести веб-разработку, создавать фоновые сервисы или даже мобильные приложения (спасибо Xamarin!). Кроме того, все, что мне нужно знать, дабы скомпоновать все UI-коды вместе (чего я все же стараюсь избегать), это, кроме C#, всего лишь немного JavaScript’а (+ TypeScript). Шаблоны ASP.NET Core в свою очередь при создании клиентских библиотек даже используют макеты Бутстрапа и npm. Универсальность языка - довольно весомый плюс, так как ваш вклад в его изучение может найти применение в широком спектре возможностей. Ваши навыки очень мультиплатформенные. Если пожелаете, Вы можете легко «перескочить» с разработки веб-приложений на мобильные. Пожалуй, это уникальное отличие от других языков, заточенных только под серверную часть. Не стоит забывать о первоклассной поддержке Microsoft Azure. Нужно задеплоить проект на облако? Нет ничего проще: сия операция осуществляется всего лишь в пару кликов. Поддержка Docker-контейнеров также присутствует, что значительно упрощает деплой приложений на AWS или другие хостинги на Ваше усмотрение. 4) Качественные инструменты разработчика Visual Studio всегда считалась одной из лучших сред разработки. Это прекрасный редактор кода, поддерживающий такие фичи, как компиляцию, отладку, профилирование, git-репозиторий, юнит-тестирование и многое другое. Плюс, за вами всегда остается возможность писать коды для .NET Core в любом текстовом редакторе в виде обычных текстовых файлов. Вы также можете использовать Visual Studio Code на любой ОС в качестве отличного редактора кода. Даже те из нас, кто никогда не желает расставаться с этим Vim или Emacs, могут вести разработку на C#. Можно также установить плагины для Visual Studio и добавлять свои «горячие клавиши». Вся экосистема .NET изобилует прекрасными инструментами. К примеру, вряд ли я смогу представить жизнь без Resharper`а или JetBrains. Существуют десятки классных инструментов, включая смеси открытого кода и коммерческих продуктов. 5) Обобщение навыков .NET обладает очень хорошим набором базовых библиотек. В отличие от Node.js, такие простые строковые функции, как LeftPad(), уже встроены. Подобное разнообразие стандартных библиотек значительно уменьшает потребность в сторонних пакетах. Также благодаря вмешательству Microsoft, мы можем использовать такие технологии, как JSON.NET и прочее. Microsoft обеспечивает качественный набор шаблонов и их реализаций на .NET. К примеру, сервис для работы с данными (Entity Framework) и MVC уже встроены. Большинство разработчиков именно ими и пользуется. Подобный подход значительно упрощает взаимодействие между командами и ускоряет понимание, как проект работает. Благодаря этому, Ваши знания и навыки становятся более универсальными. 6) Код .NET Core в свободном доступе Одним из наиболее значимых событий, которое когда-либо происходило на .NET, является публикация исходного кода. Теперь каждый на GitHub’е может просматривать, вносить правки и дополнять его. Пожалуй, большинство людей даже никогда не думали о том, что подобное может когда-либо произойти. Как разработчику, время от времени Вам необходимо «заглядывать за ширму», дабы понимать, как на самом деле работает код. К примеру, раньше я мог только гадать, закрывает ли вызов метода Dispose() на базе данных соединение или нет. Если же Вы можете заглянуть в исходный код, большинство схожих вопросов отпадает. Даже если Вы не дополняете исходники, так или иначе Вы получаете пользу от тех, кто это делает. Проблемы и возможные улучшения быстро обсуждаются, реализуются и публикуются в свободный доступ. Прошли теперь те дни, когда на ожидание сколь-либо значительных улучшений или незначительных правок уходили годы. Заключение На протяжении лет я читал о программистах-полиглотах и о новых классных языках. В разное время люди писали на Ruby, Python, Scala, Go, Node.js, Swift и прочем. Приятно видеть, что Microsoft, сообщество сделали с .NET Core и как он вознесся в ранг первоклассной платформы. Я даже портировал .NET приложения на Maрc! Проблемой многих существующих языков программирования является то, что они узкоспециализированы. Ruby и PHP прекрасно подходят для веб-приложений. Swift или Objective C лучшего всего использовать для IOS или MacOS. Если нужно написать серверное приложение, можно использовать Python, Java и так далее. Пожалуй, кроме C#, только JavaScript и Java могут считаться языками широкого профиля. Мне бы было трудно применить навыки для решения различных задач, если бы я был вынужден работать со многими языками программирования. Это ограничивает возможности. Мне нравится универсальность C#, нравится то, что его можно использовать для разных типов приложений. Теперь, поскольку .NET Core так же подходит и для MacOS и Linux, больше нет никаких лимитов на его применение. Автор перевода: Евгений Лукашук Источник
Основи AngularJS на практиці

Автор: Редакция ITVDN

Введение AngularJS – фреймворк-библиотека Javascript, разработанная для создания одностраничных приложений на основе MVC (Model-View-Controller) шаблона. Будем осваивать данную технологию на практике. Создадим HTML страничку со стандартной структурой. Далее нам нужно преобразовать ее в одностраничное приложение. Для этого подключим AngularJS к своей странице, добавив в тег с данным кодом: <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> script> Следующим шагом мы явно укажем на то, что наша страница является AngularJS приложением. Нужно добавить ng-app директиву, которой мы обозначим корневой элемент приложения. Зачастую таким элементом выступает тег или же тег . Добавим эту директиву к :  <!DOCTYPE html> <html ng-app=""> <head>     <title>title>     <meta charset="utf-8">     <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">     script> head> <body> body> html> Проверим,  все ли работает, добавив небольшое выражение для подсчета произведения чисел 123 и 45. В AngularJs все выражения записываются в двойных скобках. Добавим в параграф со следующим содержимым: <p>Результат произведение чисел 123 и 45 равен : {{ 123 * 45 }}p> Запустим в браузере:  Теперь у нас есть готовый шаблон приложения, который мы будем использовать во всех последующих примерах. AngularJS позволяет разработчику легко взаимодействовать с пользовательским вводом. Для этого есть соответствующая директива ng-model, которая связывает значения HTML элементов контроля (teaxtarea, input etc.) с приложением. Использовать эти данные поможет директива ng-bind, добавив эти данные во View (элемент MVC) и отобразив их на странице. Применим полученные знания на практике. В созданный ранее шаблон добавим поле для ввода <input> с директивой ng-model и параграф для вывода данных c директивой ng-bind. Код странички: <!DOCTYPE html> <html ng-app=""> <head>     <title>title>     <meta charset="utf-8">     <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">     script> head> <body>     <p>Ввведте свое имя:p>     <input type="text" ng-model="yourName">     <p>Здравствуй, <span ng-bind="yourName">span>p> body> html> Откроем в браузере: Теперь попробуйте ввести свое имя в поле для ввода. Давайте добавим в данный пример дефолтное значение имени, к примеру Анна. Сделаем это, конечно же, с помощью директивы ng-init, которая позволяет инициализировать любую переменную AngularJS приложения. В строку  добавим директиву ng-init. <input type="text" ng-model="yourName" ng-init="yourName='Aнна'"> Посмотрим изменения в браузере: Теперь мы имеем значение по дефолту – Анна, но все так же можем изменять его: Вывод данных в этом примере можно сделать еще одним способом, а именно, использовав выражение. Заменим на {{yourName}}. <p>Здравствуй, {{ yourName }}p> Открыв страницу, мы не увидим абсолютно никаких изменений, а все потому, что выражения в AngularJS связывают данные со страничкой точно так же, как и ng-bind директива. Как упоминалось в статье ранее, AngularJS строит приложения на основе MVC. Часть модель – представление (Model - View) определяется с помощью директивы ng-app. Контроллер в свою очередь определяется директивой ng-controller. Рассмотрим пример с использованием контроллера страницы. Создадим страничку со списком гостей, которых Вы пригласите на свой день рождения. К созданному ранее шаблону добавим контроллер, а так же установим имя для приложения. В тег внесем следующие изменения: <html ng-app="firstApp" ng-controller="firstController"> Далее добавим с типом text для введения имени гостя и еще один с типом submit для добавления гостя в список. Также добавим с полем для вывода списка и чекбоксом с типом checkbox для того, чтобы можно было удалять тех, кто не придет на ваш праздник. В данный добавим директиву ng-repeat, отвечающую за повторение данных в обозначенном контейнере. <!DOCTYPE html> <html> <head>     <title>title>     <meta type="utf-8">     <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">script> head> <body ng-app="firsApp" ng-controller="firstController">     <h2>Мои гости:h2>     <form ng-submit="addGuest()">         <input type="text" ng-model="guestsInput" size="50" placeholder="Введите имя гостя">         <input type="submit" value="Добавить гостя">     form>     br>     <div ng-repeat="guest in listOfGests">         <input type="checkbox" ng-model="guest.come"> <span ng-bind="guest.guestName">span>     div>     <p><button ng-click="remove()">Удалить гостя button>p> body> html> Осталось добавить скрипт, который будет содержать функции для работы с элементами нашего приложения. Замечу, что все функции будут расположены в контроллере приложения. Скопируйте и добавьте после закрывающегося тега параграфа с кнопкой <p><button ng-click="remove()">Удалить гостя button>p> следующий код: <script>         var app = angular.module('firsApp', []);         app.controller('firstController', function($scope) {             $scope.listOfGests = [{guestName:'Я любимый', come:false}];             var countOfGuests = 1;             $scope.addGuest = function() {                 $scope.listOfGests.push({guestName:$scope.guestsInput, come:false});                 $scope.guestsInput = "";                 countOfGuests++;                 checkNumberOfGuests();             };             $scope.remove = function() {                 var oldGuests = $scope.listOfGests;                 $scope.listOfGests = [];                 angular.forEach(oldGuests, function(guest) {                     if (!guest.come) $scope.listOfGests.push(guest);                     countOfGuests--;                 });                 checkNumberOfGuests()             };             function checkNumberOfGuests(){                 if(countOfGuests <= 2){                     alert("Маленькая вечеринка тоже не плохо! Не печалься! Лучших друзей не бывает много!");                 }else if(countOfGuests >= 9){                     alert("Праздник?! ВЕЧЕРИНИЩЕ!");                 }else{                     alert("Узкий круг самых близких, это всегда хорошо!");                 }             } script> В данном коде у нас есть три функции: добавление и удаление гостя и проверка количества гостей. В функции добавления мы берем введенные данные guestsInput и добавляем их в лист listOfGests. Устанавливаем значение чекбокса в false (в нашем случае, это значит, что человек придет / если значение true, то есть галочка стоит - значит не придет), после чего очищаем поле ввода. Далее увеличиваем счетчик гостей и вызываем функцию проверки их количества. В функции удаления мы берем список гостей listOfGests и проверяем значение чекбокса каждого гостя, определяя, кто придет, а кто нет. Удаляем тех, кто отмечен галочкой (не пойдет) и уменьшаем счетчик элементов. Функция проверки количества гостей очень проста, поэтому подробнее мы ее разбирать не будем. Давайте откроем пример в браузере и поработаем с ним: Добавим несколько гостей: С изменением количества гостей содержимое оповещений будет меняться. Когда вы добавите больше 9 друзей, тогда увидите такое оповещение: Поздравляем, вот Вы и создали свое первое одностраничное приложение с помощью AngularJS!
Notification success