Результати пошуку за запитом: обучение c
Изучай Python бесплатно на украинском языке
Автор: Редакция ITVDN
С 16 по 23 марта 2023 года на ITVDN проходит акция – вы можете пройти обучение по новому курсу “Python Базовый” бесплатно! Курс на украинском языке!
Что такое Python?
Python — язык программирования высокого уровня, самыми главными ценностями которого является простота, читабельность и высокомодульность. Python используется для создания широкого спектра приложений, включая веб-разработку, анализ данных, искусственный интеллект, научные вычисления, разработку игр и т. д.
О курсе «Python Базовый»
В курсе “Python Базовый” рассматривается парадигма объектно-ориентированного программирования (ООП) и ее реализация в языке Python. Вы познакомитесь с основными концепциями ООП – инкапсуляцией, наследованием, полиморфизмом, абстракцией и тем, как эти принципы воплощены в конструкциях Python.
Отдельные уроки посвящены темам практического применения рекурсии в Python, способам работы с файлами, особенностям сложных структур данных, созданию своих модулей и основам правильного оформления кода по стандартам PEP8.
К каждому уроку есть практические задания и тесты для проверки знаний. А в конце вы сможете пройти финальный тест и получить сертификат.
Продолжительность курса – 4 часа 18 минут.
Программа курса:
Знакомство с ООП. Наследование.
Инкапсуляция.
Полиморфизм.
Абстракция.
Работа с рекурсией.
Структуры данных.
Модули Python.
Чтение и запись файлов.
PEP8 стандарты оформления кода.
Автор курса – Виктория Бойчук, Python Developer и тренер в учебном центре CyberBionic Systematics.
Предварительные требования
Для понимания материала необходимо владеть начальными знаниями конструкций Python, а именно следующими темами: переменные и типы данных, условные и циклические конструкции, списки и срезы, множества, кортежи, словари, функции, исключения. Эти темы рассматриваются на курсе Python Стартовый, который можно просмотреть в свободном доступе на YouTube-канале CodeUA по ссылке.
Чему вы научитесь на курсе Python Базовый:
Создавать простые объектно-ориентированные программы.
Понимать основы парадигмы ООП и её особенности в Python.
Выстраивать архитектуру программы на основе классов и объектов.
Уметь читать, обрабатывать и записывать файлы (текстовые, XML, CSV, JSON).
Разбираться в том, что такое PEP8, PEP20 и уметь применять на практике правила оформления кода Python 3.
Понимать Дзен Python.
Использовать List and dict comprehensions (генераторы списков).
Работать со сложными структурами данных в Python.
Создавать свой Python модуль.
Сроки акции
Акция проходит с 16 по 23 марта 2023 года включительно. Доступ к курсу открывается на 10 дней.
Вивчай "HTML5 & CSS3 Поглиблений" безкоштовно
Автор: Редакція ITVDN
С 20 по 27 января на ITVDN проходит акция — вы можете пройти обучение по курсу “HTML5 & CSS3 Углублённый” бесплатно!
Что такое HTML5 & CSS3?
HTML5 и CSS3 являются фундаментальными технологиями, которыми обязан владеть каждый веб-разработчик. Язык гипертекстовой разметки HTML позволяет создать разметку (каркас) каждой веб-страницы, а CSS — язык стилей — преображает сайт, придавая ему привлекательный и эффектный внешний вид.
Хорошее владение HTML и CSS уже позволяет верстать сайты и зарабатывать деньги. Именно с этих двух базовых технологий начинается путь к профессии FrontEnd разработчика.
О курсе “HTML5 & CSS3 Углублённый”
Данный курс предназначен для тех, у кого уже есть базовые знания HTML5 и CSS3. В курсе будут рассмотрены такие темы, как: гибкая верстка, реализации анимаций, использование хранилищ браузера, многопоточность, а также подключение препроцессора и сборщика для отображения кроссбраузерности веб-страницы на различных устройствах.
Автор видео курса — Сергей Патёха, Senior Software Engineer at ITernal Group.
Программа курса:
Микроданные, геолокация.
Canvas.
WebStorage. Audio, Video.
Принципы построения разметки Flex, Grid. Шаблоны сайтов.
Трансформация и анимация. Градиенты.
Основы SASS.
Практика.
Предварительные требования
Для понимания курса нужны базовые знания по HTML & CSS, в частности по таким темам:
основные теги HTML5 и свойства CSS3;
работа с изображениями, таблицами и списками;
позиционирование элементов;
стили для текста;
формы, метатеги.
Также нужны определенные знания JavaScript, в частности:
навигация по DOM элементам и модификация DOM дерева;
работа со свойствами, атрибутами и стилями из JS;
события в JavaScript;
функции конструкторы, классы;
работа с формами и элементами управления, валидация формы;
Cookies и Web Storage;
обработка исключений;
асинхронность;
сетевые запросы.
Чему вы научитесь на этом курсе:
Работать с обновленными спецификациями HTML5 & CSS3.
Применять гибкую и адаптивную верстку (Flex, Grid).
Настраивать проект с помощью сборщика Gulp, работать с менеджером пакетов npm.
Придавать динамичность страницам, используя анимации и переходы.
Понимать основы препроцессора SASS.
После изучения материала курса вы можете пройти онлайн тестирование и получить Сертификат, подтверждающий ваши знания.
Сроки акции
Акция проходит с 20 по 27 января 2022 года включительно. Доступ к курсу открывается на 10 дней.
Карта спеціальності FrontEnd розробник.
Автор: Віталій Мазяр
<p>FrontEnd разработка — самое популярное направление в IT с низким порогом входа для новичков. Специалисты по FrontEnd имеют возможность совмещать программирование с творчеством, создавая клиентскую сторону веб-приложений. Большая часть того, что вы видите и с чем можете взаимодействовать на любом веб-сайте — результат работы FrontEnd разработчика.</p>
<p>Это направление для многих привлекательно еще и тем, что фронтенд разработчику не обязательно знать математику, алгоритмы и структуры данных. Таким образом, путь во фронтенд открыт для самых разных специалистов, желающих войти в IT.</p>
<p>На сайтах по поиску работы в IT вы можете видеть огромное количество вакансий по фронтенду — компании открыты для квалифицированных специалистов и готовы хорошо платить за качественную работу. Если вам интересно это направление, и вы хотите сделать профессиональный старт в данной сфере, эта встреча будет для вас как нельзя кстати!</p>
<p>Цель мероприятия — помочь вам разобраться с главными аспектами данной специальности, опираясь на тенденции развития IT-рынка, правильно расставить приоритеты и помочь спланировать ваше обучение и карьеру по направлению FrontEnd.</p>
<p> </p>
<p><strong>Программа встречи: </strong></p>
<ol>
<li>Кто такой FrontEnd разработчик?</li>
<li>Актуальность специальности и востребованность на IT-рынке.</li>
<li>Как стать FrontEnd разработчиком:
<ol style="list-style-type:lower-alpha;">
<li>предварительные требования;</li>
<li>карта специальности;</li>
<li>обзор обязательных и факультативных технологий.</li>
</ol>
</li>
</ol>
<ol>
<li value="4">Где и как изучить FrontEnd.</li>
<li>Angular, React, jQuery, Vue.js - какие фреймворки нужно знать новичку?</li>
<li>Как получить первый практический опыт.</li>
<li>Стажировка и первая работа - возможности и перспективы.</li>
<li>Вопросы и ответы.</li>
</ol>
<p> </p>
<p><strong>Целевая аудитория</strong>: начинающие разработчики, студенты ВУЗов, а также все, кто интересуется FrontEnd направлением и хочет профессионально развиваться в нём.</p>
<p><strong>Условия участия:</strong> бесплатно. Для получения приглашения на онлайн-трансляцию заполните регистрационную форму.</p>
<hr>
<p><strong>Информационные партнеры:</strong></p>
<p><strong><a href="https://ru.jobsora.com/" name="Работа. Вакансии. Трудоустройство" target="_blank" rel="nofollow"><img alt="Работа в России" src="https://itvdn.blob.core.windows.net/mail-delivery/mail-delivery-573a679a-1426-488a-99f9-3c79d5d073ad.png" style="width: 171px; height: 60px; float: left;"></a></strong><br>
<span style="font-size: 13px;"> Работа. Вакансии. Трудоустройство</span></p>
<p> </p>
<p> </p>
<p> </p>
Пріоритет операторів у JavaScript (частина 1)
Автор: Олександр Марченко
Введение
В данной статье мы познакомимся со стандартными операторами и их применением в языке программирования JavaScript для работы с переменными и со значениями.
Сперва познакомимся со специфической терминологией, которая используется при работе с операторами.Большинство операторов обозначаются символами пунктуации, такими как =, +, - и другими. Некоторые – специальными ключевыми словами, к примеру, delete и new. Но, как знаки пунктуации, так и ключевые слова обозначают обычные операторы, просто используют для этого разный синтаксис.
Оператор присвоения
Операнд – то, к чему будет применен оператор, или порой можно встретить название: «аргумент оператора».
Оператор присваивания выглядит как знак равенства = :
var a = 1, b = 2;
В данной строке переменной "a" было присвоено значение 1, а переменной b – значение 2.
var a = a + 2;
В этой строке переменной "a" было присвоено ее значение, увеличенной на 2. Иначе говоря, сперва выполнится операция сложения текущего значения переменной a, результат которого будет пере-присвоен переменной a.
Полезной особенностью данного оператора является использование его по цепочке:
var a, b, c;
a = b = c = 2 + 3;
В результате работы последней строки всем трем переменным будет присвоено значение 5.
Арифметические операторы
Арифметические операторы используются для определения простейших математических операций над операндами, в качестве которых могут выступать как значения, так и переменные: плюс + , минус - , умножить * , поделить / , деление по модулю (определение остатка от деления) %.
Большинство JavaScript-операторов работают с двумя операндами, следовательно, способны два простых выражения объединить в одно более сложное. Но JavaScript поддерживает несколько унарных операторов, которые преобразуют только одно выражение в другое, более сложное.
Таким оператором является унарный минус, который изменяет знак числа на противоположный. В таком случае оператор «минус» в выражении -1 представляет собой унарный оператор и выполняет смену знака у своего единственного операнда 1.
<script type="text/javascript">
var x = 1;
document.write(-x + " ");
document.write(-(-x) + " ");
document.write(-(x + 4) + " ");
script>
Унарный плюс, используемый в качестве арифметического оператора, не выполняет каких-либо действий:
<script type="text/javascript">
document.write(+1);
document.write(" ");
document.write(+(1 - 2));
script>
Более распространенным применением унарного плюса является преобразование значения в число.
В случае объединения двух выражений в одно более сложное используются бинарные операторы, иначе говоря, бинарным называют оператор, который применяется к двум операндам, к примеру, если оператор плюс будет стоять между двумя числами, он будет представлен в своей бинарной форме:
<script type="text/javascript">
var a = 1, b = 2;
document.write(a + b + " ");
document.write(b + a + " ");
script>
Кроме того, если у нас есть две переменные со строковыми значениями, бинарный плюс сложит эти строки. произведя конкатенацию, а применение унарного плюса к каждой из переменных произведет преобразование их значений к числу.
var a = "2";
var b = "3";
alert(a + b); // "23", произошла конкатенация строк
alert(+a + b); // "23", второй операнд - всё ещё стоковая переменная
alert(+a + +b); // 5, число, поскольку оба операнда предварительно преобразованы в числа ((+a) + (+a))
В то же время, если использовать оператор «минус», мы получим другие результаты:
var a = "2";
var b = "3";
alert(a - b); // -1, произошло неявное преобразование типов
Таким образом, мы подошли к тому, что создавая JavaScript-выражения, важно обращать внимание на типы данных, передаваемых операторам, и, как следствие, на типы данных, которые они возвращают. Стоит отметить, что различные операторы требуют, чтобы операнды, с которыми они работают, возвращали значения только определенного типа. Так, нельзя выполнить умножение строк, поэтому выражение var a = "text1" * "text2"; не является допустимым и приведет к ошибке. В то же время, выражение var a = "2" * "3"; вполне допустимо, потому что интерпретатор JavaScript будет пытаться по мере возможностей преобразовать выражение в требуемый тип данных, в нашем случае из строкового типа в числовой.
Познакомимся с работой операторов умножения и деления на простом примере. В данном случае мы используем бинарные формы операторов, поскольку они взаимодействуют с двумя операндами:
<script type="text/javascript">
document.write("2" / 2 + " "); // 1, произойдет неявное преобразование строки в число
document.write(((2 + 2) * 6) / "12" + " "); // 2, произойдет неявное преобразование строки в число
document.write(12 * 7 / 2 + " "); // 42
document.write(17 % 7 + " "); // 3, возвращаем остаток от целочисленного деления
document.write(21 / 3 - 1 + " "); // 6, наблюдаем правильный порядок выполнения операций: сперва деление, затем нахождение разницы
script>
Если с работой операторов +, -, *, / в самом простом их применении мы были знакомы еще из младшей школы, то с оператором % стоит познакомиться детальней. Оператор деления по модулю % вычисляет остаток, получаемый при целочисленном делении первого операнда на второй, которые в курсе школьной математики именовались как делимое и делитель соответственно, а в результате самого деления мы получали частное и остаток от деления. Деление по модулю подразумевает возвращение остатка от деления.
Например, выражение var a = 190 % 27; будет выполнено следующим образом:
Оператор деления по модулю зачастую применяют к целочисленным операндам, но он корректно работает и с вещественными значениями. Так, в итоге выполнения выражения var a = -6.3 % 3; переменной a будет присвоено значение -0.3.
Кроме этого, стоит отметить следующие особенности вычислений в JavaScript:
<script type="text/javascript">
var a = 4,
b = true;
c = undefined,
d = Infinity,
e = 0,
res = undefined;
res = a * d;
document.write(res + " "); // Infinity, умножение числа на бесконечность возвращает бесконечность
res = a + b;
document.write(res + " "); // 5, true преобразовывается в 1 и производится операция сложения
res = a / e;
document.write(res + " "); // Infinity, деление числа на ноль возвращает бесконечность
res = a * c;
document.write(res + " "); // NaN, умножение числа на неопределенный тип данных, вернет сигнализацию об ошибке в виде NaN - Not a Number
script>
В дальнейшем мы познакомимся с такими операторами как инкремент/декремент, операторами сравнения, равенства и идентичности, которые будут часто использоваться в написании клиентских сценариев c использованием языка JavaScript.
.NET & Blazor. Створення веб-програми на основі браузера
Автор: Daniel Roth
В рамках сегодняшней статьи я рад представить новый экспериментальный проект от команды ASP.NET под названием Blazor. Что такое Blazor? Blazor – это экспериментальный веб UI – фреймворк на базе C#, Razor и HTML, который работает непосредственно в браузере посредством WebAssembly. Цель эксперимента – в значительной мере упростить задачу построения простых и качественных одностраничных приложений, которые могут быть запущены в рамках любого браузера. Достигается это за счет написания .NET веб-приложений, которые при помощи открытых веб-стандартов могут запускаться на стороне клиента.
В случае если вы уже работаете с .NET, подобный подход открывает перед вами следующие перспективы: вы сможете использовать навыки разработки браузерных приложений в дополнение к существующим сценариям серверных, облачных, нативных и игровых приложений. Однако, даже если вы непосредственно с .NET не знакомы, мы надеемся, что Blazor подтолкнет к его изучению.
Зачем использовать .NET для браузерных приложений?
Хотя веб-разработка за прошедшие годы значительно упростилась, создание современных веб-приложений - задача далеко не всегда тривиальная. Построение же веб-приложений на базе .NET предоставляет уникальную возможность улучшить качество написания подобного рода программ. Среди основных преимуществ стоит выделить:
Стабильность и целостность: инструменты стандарта .NET на протяжении многих лет зарекомендовали себя в качестве надежных помощников при разработке приложений.
Современные инновационные языки: с использованием C# и F# процесс создания программ, по сути, становится чем-то вроде развлечения, настолько широким спектром возможностей эти языки обладают.
Популярная среда разработки: стек IDE Visual Studio обеспечивает максимальное удобство работы с Windows, Linux и macOS.
Быстрота вычислений: .NET обладает длинной историей по улучшению производительности, надежности и защиты веб-приложений для серверов. Соответственно, при разработке full-stack .NET приложений все указанные преимущества также ощущаются.
Browser + Razor = Blazor!
Blazor базируется на существующих веб-технологиях, таких как HTML и CSS, но в этом случае для создания UI-элементов вы используете C# и Razor – синтаксис вместо JavaScript. Однако отметьте, что это не то же самое, что и деплой существующего проекта UWP или Xamarin в браузер.
Blazor будет обладать всеми ключевыми особенностями современных веб-фреймворков, включая:
Компонентную модель для построения комплексных UI
Маршрутизацию
Слои
Формы и валидацию
Внедрение зависимостей
Поддержку JavaScript
Перезагрузку в браузере во время разработки «вживую»
Рендеринг на стороне сервера
Полноценную поддержку .NET – отладки (как в браузере, так и в IDE)
IntelliSense и прочие различные инструменты
Возможность запускать более старые (не WebAssembly) браузеры через asm.js
Публикацию и мониторинг размера приложения
Изменения WebAssembly
Запуск .NET – приложений в браузере стал возможен благодаря WebAssembly, новому веб-стандарту для «портативных, умеренных в размерах и быстрых» веб-приложений. Таким образом, WebAssembly вводит фундаментально новый способ построения веб-приложений, так как код, скомпилированный под WebAssembly, не уступает скорости нативных .NET-приложений. Никаких прочих сторонних зависимостей нам не нужно: вы можете запустить обычные .NET-сборки в браузере с использованием WebAssembly.
В августе прошлого года наши друзья из команды Xamarin Microsoft анонсировали планы по созданию Mono .NET специально для браузеров с использованием все той же WebAssembly. По сути, Blazor частично базируется на результатах их работы.
Новый эксперимент
Сейчас мы восхищаемся возможностями Blazor-технологии, но не стоит забывать, что сейчас это лишь экспериментальная технология, а не официально выпущенная и готовая для полноценной работы. На этой стадии мы можем более глубоко ознакомиться с основными функциональными возможностями представленной технологии, а также выразить свои замечания и пожелания разработчикам.
Я хочу попробовать!
Найти технологию вы можете в Blazor repo, который сейчас доступен для использования. Это проект с полностью открытым исходным кодом: все текущие изменения и дополнения могут быть отслежены в вышеупомянутом репозитории.
Пожалуйста, отметьте, что технология находится в статусе раннего доступа. Здесь еще нет никаких инсталляторов или шаблонов проектов, кроме того, многое из заявленного еще не реализовано. Даже то, что уже сделано, не оптимизировано. Если вам интересно, вы можете загрузить репозиторий, построить его и протестировать, но пытаться на его базе разработать рабочий проект – задумка явно не удачная. Что же касательно предложений и поддержки, вы можете использовать issue tracker репозитория. Через месяц мы планируем выпустить первые черновые версии заготовок веб-проектов и инструментов, сделав технологию более доступной для широкой аудитории.
Автор перевода: Евгений Лукашук
Источник
Нововведення в С# 8
Автор: Jonathan Allen
Хотя внимание разработчиков приковано сейчас к таким глобальным вещам, как дефолтная реализация методов интерфейсов, мы хотим поговорить с вами о нюансах новой версии популярного языка программирования С#.
Новые операторы присвоения: &&= и ||=
Начиная с самой первой версии, C# поддерживал комбинирования операторов присвоения с другими операторами. Существует поддержка всех бинарных операторов (а именно - +, -, & и так далее), кроме булевских && и ||. Теперь комбинации типа &&= и ||= дополнят этот список.
Дословно-интерполируемые строки
Дословные строки начинаются на @”. Интерполируемые строки используют $”. Но что, если нам нужно создать дословно-интерполируемую строку? Что нам писать - @$” или $@”? Сейчас первый вариант работает, но второй выдает ошибку уровня компиляции, что может вызывать некоторые неудобства у многих разработчиков, так как обычно такие нюансы часто забывают.
Суть нововведения заключается в том, что в новой версии можно использовать как первый вариант конструкции, так и второй.
Впрочем, некоторые все равно находят это изменение лишним, так как оно может привести к некоторой фривольности кода и проблемам с единым стилем.
Выражение using структурно соответствует IDisposable
У компилятора C# интересное отношение к интерфейсам. Довольно часто вам не нужно на самом деле реализовывать абстрактный интерфейс для определенных фичей языка. Все, что вам нужно, так это просто реализовать в классе определенный публичный API, что по своей структуре повторяет абстрактный интерфейс.
Классическим примером этого является foreach и IEnumerable. Если класс обладает методом GetEnumerator, возвращающим значение свойства Current и методом MoveNext, тогда вы можете использовать foreach. Сами типы возвращаемых данных не имеют значения, что позволяет таким классам, как List<T>, реализовывать более быстрые перечисления. Этот подход достаточно часто называется структурным соответствием.
В рамках новой версии языка using также будет поддерживать структурное соответствие. На первый взгляд, это нововведение кажется лишенным смысла, так как мы вряд ли ожидаем увидеть класс для использования с using без реализации интерфейса IDisposable. Впрочем, мы упускаем такое нововведение как ref struct. Реализация интерфейса в данном случае невозможна, поэтому здесь нам на помощь приходит структурное соответствие.
Методы расширения с foreach и using
Как дополнение к предыдущему посту, теперь мы можем добавить GetEnumerator и Dispose в качестве методов расширения для работы с foreach и using соответственно. Опять же, здесь мы говорим об особенности, которая станет полезной в частном случае. К примеру, вы хотите добавить Dispose-расширение в COM-объект сторонней библиотеки (к примеру, дабы вызвать Marshal.ReleaseComObject).
Впрочем, информация об этом еще неполная и мы можем упустить некоторые случаи использования данной фичи.
Using неявной области видимости
На данный момент выражение using может быть использовано только в рамках явной области видимости (в скобках). Если данное нововведение будет принято на вооружение, теперь вы можете писать конструкции следующего вида:
Каждая из этих переменных будет автоматически очищена в конце текущей области видимости в реверсивном порядке. Функционально написанное выше эквивалентно этому, но гораздо более элегантно:
Подобное может быть полезно в тех случая, когда в одно и то же время создается множество dispose-объектов. Теперь вы можете создавать подобные объекты даже внутри выражений в полной уверенности в безопасности данного типа объявлений.
Возможный минус данного нововведения в том, что оно не совместимо с оператором goto.
Автор перевода: Евгений Лукашук
Источник
Вступ до NUnit
Автор: Редакція ITVDN
Введение
Статья рассказывает об NUnit – открытой среде юнит-тестирования приложений для .NET. В данной статье мы рассмотрим, что такое NUnit, как его загрузить и установить, создание классов тестов , а также запуск теста.
NUnit - открытая среда юнит-тестирования приложений для .NET, которая позволяет создавать автоматические тесты. Даный вид тестов обладает рядом преимуществ:
Высокое качество программы;
Снижение стоимости;
Безопасность регрессии сети
Чем выше качество программы, тем меньше средств затрачивается на устранение недостатков проекта. То есть, если найти недостатки в проекте на раннем этапе, решить их будет дешевле.
Загрузка и установка NUnit
Вы можете скачать NUnit с сайта http://www.nunit.org/
После завершения загрузки, разархивируйте файл и запустите программу.
Создание проекта библиотечного класса
Теперь создадим простой класс теста, используя C#, который добавляет два показателя, и протестируем его. Чтобы создать тест класса в Visual Studio, используя С#, выполните следующие шаги:
Шаг 1: Создание проекта библиотечного класса
Откройте Visual Studio.
Для создания проекта библиотечного класса сначала нажмите File -> New -> Project, выберите Visual C # в установленном шаблоне, выберите Class Library. Введите подходящее название (мы используем IntroNUnitTest), нажмите "OK".
После того, как Вы кликнули кнопку "OK", Вы увидите Ваш проект в Solution Explorer (в правом верхнем углу Visual Studio).
Шаг 2: Добавьте ссылки к Вашему проекту.
Чтобы добавить ссылку NUnit к Вашему проекту, кликните правой кнопкой мыши на ссылку, выберите Add reference-> Browse, затем nunit.framework.dll и «OK».
Шаг 3: Создание тестового класса.
Кликните правой кнопкой мыши на Вашем проекте, выберите Add -> Class, введите имя (используем MyNUnitTestClass) и далее "Add".
После того, как Вы кликнули на кнопку Add, Вы увидите класс.
После того, как Вы создали класс, добавьте using NUnit.Framework.
Следует соблюдать некоторые условия и понятия:
Каждый класс должен содержать атрибут [TestFixure] и должен быть общедоступен.
В каждом методе должен присутствовать атрибут [Test].
Оператор подтверждения об отсутствии ошибок: Булевские значения, описывающие, что должно быть ключевым словом, когда выполняется действие.
Ожидаемое исключение: один из типов исключения, который мы ожидаем во время выполнения тест-метода.
Установка: программа, которая запускается перед выполнением каждого тест-метода (например, регистрация в системе конкретного пользователя или инициализация одноэлементных классов).
Демонтаж: программа запускается после окончания каждого тест-метода (например, удаление строк из таблицы, которые были вставлены во время теста).
На примере мы постараемся сравнить две переменные х и у. Каждой переменной присвоили значение 20. В общей сложности написали 4 теста (PositiveTest, NegativeTest, ExpectedExceptionTest и NotImplementedException).
Запуск тестов
После написания всех тестов в тестовом классе необходимо запустить тесты, чтобы проверить, проходят ли они успешно. Для запуска тестов перейдите в папку NUnit, выберите NUnit Application (.exe) и дважды кликнике по ней, выберите команду File-> Open Project, выберите проект (в нашем случае это IntroNUnitTest.dll), затем кликаем Run.
Далее Вы увидите количество тестов, которые не сработали, и количество невыполненных тестов.
Если Вы хотите запустить какой-то определенный тест, кликните правой кнопкой мыши в тесте, который Вы хотите запустить, и выберите Run test(s).
Другие настройки
Вы также можете использовать другие настройки для запуска тестов:
Testdriven.net
ReSharper Jetbrains
Источник: http://www.c-sharpcorner.com/UploadFile/18fc30/introduction-to-nunit-test-driven-development-using-nunit-a/
Вивчай JavaScript з нуля українською мовою
Автор: Редакція ITVDN
Добрий день, друзі!
Сьогодні хочемо вас порадувати новим відео курсом, який обов'язково стане в нагоді кожному FrontEnd розробнику, а також BackEnd програмістам та Automation QA, які використовують мову JavaScript в якості основного інструменту написання коду. На ITVDN опубліковано всі уроки нового курсу “JavaScript Стартовий”. Курс українською мовою!
JavaScript – це одна з найпопулярніших мов програмування. Вона користується великим попитом як серед новачків, так і серед досвідчених девелоперів, оскільки:
простіша у вивченні в порівнянні з іншими загальновідомими мовами програмування (С#, Java, C++/C тощо);
успішно використовується для створення клієнтської сторони веб-застосунків (FrontEnd), але також поширена і на серверній стороні в тандемі з Node.js (BackEnd);
може використовуватися в геймдеві, розробці мобільних та настільних застосунків, тестуванні ПЗ тощо;
має великий попит на ІТ-ринку.
Вивчення JavaScript – це інвестиції в майбутнє, що окуплять себе з лихвою, оскільки досвідчені JavaScript розробники щедро оплачуються, мають широкий спектр проєктів та кар’єрних можливостей, а також можуть вести професійну діяльність дистанційно.
Курс “JavaScript Стартовий” є першою сходинкою у вивченні програмування мовою JavaScript.
Він спрямований на вивчення головних синтаксичних конструкцій JavaScript. Ви дізнаєтеся, як працювати зі змінними, використовувати умовні та циклічні конструкції, масиви та об'єкти. Отримаєте необхідні знання для написання алгоритмів та підготуєте базу, після якої можна розвивати свої навички у веб-розробленні або почати використовувати JS для інших цілей.
Автор курсу – Дмитро Охріменко, CEO CyberBionic Systematics, сертифікований тренер Microsoft та автор курсів з .NET та FrontEnd розробки. У записаних відео уроках Дмитро ділиться ефективними техніками роботи з мовою JavaScript, які актуальні та потрібні на сьогоднішній день.
Тривалість курсу – 8 годин 40 хвилин.
Структура курсу:
Вступ.
Структура коду.
Змінні та типи даних.
Рядки та перетворення типів.
Оператори.
Умовний оператор if.
Switch та тернарний оператор.
Цикли.
Масиви.
Методи масивів.
Функції. Частина 1.
Функції. Частина 2.
Об'єкти. Частина 1.
Об'єкти. Частина 2.
Чого ви навчитеся на даному курсі:
Створювати мовою JavaScript базовий динамічний контент для web-сторінок.
Працювати зі змінними та типами даних.
Працювати з умовними та циклічними конструкціями.
Розуміти особливості використання масивів та працювати з методами оброблення даних у масивах.
Використовувати функції (розуміти та використовувати області видимості, контекст, рекурсію).
Працювати з об'єктами.
Попередні вимоги
Для успішного проходження даного курсу необхідно володіти мовами верстання HTML & CSS на базовому рівні.
Якщо ви вже займаєтеся розробкою іншою мовою програмування та хочете вивчити JavaScript – ці відео матеріали вам ідеально підійдуть: просто швидко перегляньте перші уроки і сконцентруйте увагу на особливостях роботи JavaScript.
Якщо ви займаєтеся тестуванням ПЗ, “JavaScript Starter” допоможе вам розібратися з синтаксисом мови та стане першим кроком у освоєнні автоматизації тестування.
Дивіться перший урок у вільному доступі. Курс вже доступний на нашому сайті в повному обсязі – до кожного уроку є практичні завдання, опорний конспект та онлайн тести для більш глибокого засвоєння матеріалу. Якщо у вас є активна підписка, ви можете дивитися його прямо зараз.
Курс входить до комплексних програм підготовки за спеціальностями:
Frontend Developer
Верстальник сайтів
JavaScript Developer
React Developer
Python Developer
ASP.NET Core Developer
ASP.NET MVC Developer
PHP Developer
Ruby Developer
400+ питань на співбесіді щодо С++
Автор: Влад Сверчков
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 5 апреля 2021 года. Оригинальная версия на украинском языке доступна по ссылке.
Junior
1.1 Общие вопросы
1.2 Метапрограммирование
1.3 Препроцессор и компиляция
1.4 Язык C
1.5 Язык С++ и ООП
1.6 STL / Algorithms
1.7 Многопоточность
1.8 Networking
1.9 OS/Linux
1.10 SCM / CI / CD
1.11 Практические задания
Middle
2.1 Общее
2.2 Препроцессор и компиляция
2.3 Язык С
2.4 Язык С++
2.5 Паттерны проектирования
2.6 Метапрограммирование
2.7 OOP/OOD
2.8 STL / Algorithms
2.9 Многопоточность
2.10 Networking
2.11 SCM / CI / CD
2.12 Практические задания
Senior
3.1 Общее
3.2 Препроцессор и компиляция
3.3 C/C++
3.4 OOP/OOD
3.5 STL / Algorithms
3.6 Многопоточность
3.7 SCM / CI / CD
3.8 Практические задания
Предлагаем список технических вопросов, которые, вероятно, вам поставят на собеседованиях по C++. Вопросы предоставили специалисты, принимающие участие в проведении технических интервью по этому языку. Учтите, что есть широкий спектр специализаций, поэтому выбирайте свое направление и готовьтесь.
Junior
Общие вопросы
1. В чем заключаются основные принципы ООП?
2. Что такое сложность алгоритма?
3. Код работает неправильно. Что делать?
4. Объясните такие структуры данных, как стек и очередь.
5. Какие книги, связанные с программированием, читали? Чему с них научились?
6. Что интересного нашли в новых стандартах С++17, С++20?
7. Что такое таблица ASCII?
8. Что такое Unicode?
9. Что такое паттерны проектирования и для чего их используют?
10. Патерны Singleton, Strategy, Template-Method, Decorator?
11. Для чего нужны модульные тесты?
12. Какая разница между модульными и интеграционными тестами?
13. Что такое TDD?
Метапрограммирование
14. Что такое шаблонный класс и шаблонная функция?
15. Что такое конструкторы? Какие типы знаете?
16. Может ли конструктор быть шаблонной функцией?
17. Может ли виртуальная функция быть шаблонной?
18. Что такое инстанциация шаблона?
19. Что такое специализация шаблона? Частичная специализация шаблона?
20. Расскажите об имплементации шаблонных классов в срр-файле?
Препроцессор и компиляция
21. Как проходит процесс компиляции срр-файлов в бинарный файл?
22. Что такое препроцессор?
23. Как работает препроцессор?
24. Какие знаете команды препроцессора?
25. Как работает директива include?
26. Как работает директива define?
27. Что именно линкует линкер?
28. Что такое оптимизация компилятора?
29. Что такое флажки компиляции?
30. Как защитить хедер от повторного включения?
31. Что делает директива include?
32. Как работают макросы?
Язык C
33. Как static влияет на глобальные/локальные переменные?
34. Как сonst влияет на переменную?
35. Какие варианты использования extern знаете?
36. Какие варианты использования volatile знаете?
37. Какие есть битовые операции?
38. Что такое булевая алгебра?
39. Расскажите об этапах разработки библиотеки или программы.
40. Что такое алгоритмы сортировки и какие вы знаете?
41. Какие алгоритмы работы со строками знаете?
42. Какие алгоритмы на графах знаете?
43. Где может храниться переменная?
44. Какая разница между calloc и malloc?
45. Для чего используют realloc?
46. Что такое указатель?
47. Каков размер указателя и от чего он зависит?
48. Какие есть операции с указателями?
49. Что такое struct?
50. Как определить размер структур?
51. Что такое выравнивание в структурах?
52. Что такое union?
53. Какой размер union?
C++/OOP
54. Что такое класс?
55. Какие есть основные типы данных в C++?
56. Что такое инкапсуляция? Как она реализуется в C++?
57. Какие есть встроенные типы в С++?
58. Что такое enum?
59. Как соотносится класс и объект?
60. Какая разница между структурой и классом?
61. Разница между private/protected/public и где они используются?
62. Какие методы класса являются стандартными для класса?
63. Что такое абстрактный класс и зачем он?
64. Сколько памяти занимает объект пустого класса class A {}; ?
65. Что случится с функцией, если к ней добавить ключевое слово static? В контексте члена класса? В контексте метода класса?
66. Какие особенности статических полей класса?
67. Какая особенность константных методов-членов класса?
68. Как изменить поле класса в константном методе класса?
69. Какие методы можно вызвать из константных объектов?
70. Что такое куча и стек? Различия, принцип работы.
71. В чем разница между указателем и ссылкой?
72. Для чего нужен указатель на функцию? Как его объявить?
73. Что будет, если забыть вызвать delete? Когда освободится эта память?
74. Что такое умный указатель? Какие умные указатели есть в стандартной библиотеке?
75. Как работает std::unique_ptr?
76. Как работает std::shared_ptr?
77. Расскажите о константности переменной, ссылки, указателя. Что такое константный указатель и указатель на константу? Размер указателя в памяти?
78. Расскажите о передаче аргументов по значению, по ссылке и по указателю.
79. Расскажите о порядке вычисления аргументов функции?
80. Что произойдет, если вернуть ссылку на временный объект?
81. Что такое перегрузки функции? Виды перегрузки.
82. Что такое явное и неявное приведение типов в С++? Расскажите о функциях явного приведения типов в C++.
83. Что такое инициализация переменной в if?
84. Что такое ленивые вычисления в С++?
85. Расскажите о циклах for и range-for.
86. Что делает ключевое слово auto? auto-определение return-типа, аргументов функции?
87. Чем отличаются delete и delete [ ] ? Что случится, если вызвать delete у объекта, созданного через new [ ] ?
88. Обработка ошибок в С++. Какие конструкции используют при обработке exception?
89. Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?
90. Что такое memory leak?
91. Можно ли выбрасывать exception из деструктора?
92. Как отловить деление на 0 в С++?
93. Как работают константные методы?
94. Что такое лямбда-функция в С++? Как получить доступ к переменным во внешней области видимости?
95. Для чего использовать namespace, anonymous namespace?
96. Как вызвать объект из nested namespace?
97. Как работают inline-функции? Может ли такая функция быть рекурсивной?
98. Что такое полиморфизм?
99. Для чего используется наследование?
100. Какие бывают типы наследования?
101. Для чего используют виртуальное наследование?
102. Как можно решить проблему ромбовидного наследования без использования виртуального наследования?
103. Что случится, если класс-наследник передать по значению в функцию, которая принимает базовый класс?
104. Что случится, если пронаследоваться от базового класса, который не имеет виртуального конструктора?
105. Что случится, если вызвать переопределенную virtual function из конструктора? Может ли конструктор быть виртуальным?
106. Может ли pure virtual function иметь имплементацию? Что случится, если вызвать pure virtual function из конструктора?
107. Какие методы генерируются для класса по умолчанию? В каком случае такие методы не будут генерироваться? Как заставить компилятор добавить/удалить эти методы?
108. Как запретить наследовать класс?
109. Какой порядок конструирования и разрушения классов в иерархии? Порядок инициализации полей класса?
110. Какие есть способы инициализации полей класса?
111. Может ли деструктор быть виртуальным?
112. Что делает ключевое слово virtual?
113. Для чего используют виртуальный деструктор?
114. Что такое глубокое копирование?
115. Что такое виртуальные функции и зачем они нужны?
116. Как защитить объект от копирования?
117. Что такое семантика перемещения?
STL / Algorithms
118. Из чего состоит STL?
119. Какие алгоритмы применяли с STL? В чем преимущество использования алгоритмов перед собственноручно написанными функциями?
120. Расскажите о контейнерах стандартной библиотеки vector, list, map, unordered_map.
121. Какие знаете типы итераторов? Чем они отличаются? В каких контейнерах используются?
122. Какая разница между std::set, std::map, std::unordered_multimap?
123. Что такое идиома remove-erase?
124. Как получить наименьшее значение типа?
125. Какая разница между std::map и std::hashmap?
126. Как подсчитать количество элементов в std::list?
127. Что такое сложность алгоритма и от чего она зависит?
128. В чем разница между vector и list и в каких случаях их лучше использовать?
Многопоточность
129. Что вам известно о многопоточности?
130. Что общего и различного в процессах и потоках?
131. Как синхронизировать передачи информации между потоками?
132. Какая разница между мьютексом и семафором?
133. Что такое deadlock?
134. Является ли С++ thread-safe?
135. Что такое race-condition?
136. Как избежать состояния гонки?
137. Что такое атомарная операция?
138. Как работать с std::mutex?
Networking
139. Что такое сокет?
140. Какие операции можно делать с сокетом?
141. Какая информация нужна, чтобы создать сокет?
142. Какие бывают модели сетей?
143. Расскажите об уровнях модели OSI.
144. Расскажите об уровнях модели TCP/IP.
145. Что такое IP-адрес?
146. Для чего используется маска подсети?
147. Какая разница между IPv4 и IPv6?
148. Сколько памяти необходимо для хранения IPv4?
149. Для чего нужен порт?
150. Сколько максимально может быть портов?
151. Какая разница между TCP и UDP?
152. Для чего такой ненадежный UDP-протокол?
OS/Linux
153. Что такое менеджер пакетов?
154. Какие бывают менеджеры пакетов?
155. Какие бывают дистрибутивы Linux?
156. Что такое PID?
157. Для чего используют файловые дескрипторы?
158. Расскажите о стандартных файловых дескрипторах процесса.
159. Что такое Pipe?
160. Что такое Named Pipe?
161. Что такое UID?
162. Расскажите о командах bash.
SCM / CI / CD
163. Какие есть виды SCM?
164. Для чего используют системы контроля версий?
165. Какие есть команды git?
166. Какие этапы во время комита изменений?
167. Разница между git fetch и git pull?
168. Какие есть этапы решения merge conflict?
Практические задания
169. Посчитайте количество единиц в произвольном числе.
170. Есть структура по типу «односвязный список». Напишите функцию, которая разворачивает список. То есть, первый элемент становится последним, а последний - первым.
171. Напишите реализацию функции int atoi (const char *str); преобразования строки в число.
172. Для структуры типа односвязный список напишите функцию вставки элемента.
173. Реализуйте класс vector.
174. Реализуйте бинарный поиск в массиве.
175. Реализуйте любую сортировку.
176. Реализуйте макрос для сравнения двух строк.
177. Реализуйте реверс строк.
178. Реализуйте перевода числа из строки в int.
179. Реализуйте подсчет слов в предложении.
180. Реализуйте подсчет чисел Фибоначчи.
181. Найдите такие элементы двух массивов, которые попадаются только в каждом из них. Желательно использовать STL.
182. Удалите из unordered_map элементы, которые делятся на 2 и выведите ключи этих элементов.
183. Напишите класс для логирования, который мог бы логировать к консоли или файлу.
184. Напишите функцию для определения, является ли определенный год високосным.
185. Напишите функцию для определения, является ли определенное слово палиндромом.
186. Напишите реализацию паттерна Singleton.
187. Напишите реализацию std::vector с операциями: push_back, push_front, pop_back, pop_front, size, clear.
188. Напишите рекурсивный поиск значения в дереве бинарного поиска.
189. Напишите функцию, которая проверяет, является ли дерево сбалансированным.
190. Напишить функцию для поиска уникального элемента в массиве.
Middle
Общее
1. Какие курсы прошли или книги прочитали за этот год? Чему научились?
2. Что нравится и не нравится в С++? Чего не хватает?
3. Что интересного нашли в новых стандартах С++17, С++20 (конкретные фичи)?
4. Расскажите о фичах, которые появились в разных версиях языка.
5. Расскажите о модели памяти, которая появилась в С++11 стандарте.
6. Что такое сериализация? Какие библиотеки знаете?
7. Какие знаете паттерны проектирования?
8. Что такое операционная система? Какие существуют типы по назначению?
9. Назвать основные составляющие и принципы работы ОС Linux в качестве примера системы общего назначения.
10. Что такое SFINAE и PIMPL?
11. Назовите порождающие, структурные и поведенческие паттерны программирования и приведите примеры их использования.
Препроцессор и компиляция
12. Расскажите о системах автоматизации билд-процесса.
13. Какая разница между статической и динамической библиотеками?
14. Какая разница между исполнительным файлом и динамической библиотекой?
15. Что такое DLL hell?
16. Что такое флажки компиляции (fPIC)?
17. В чем разница между дебаженной и релизной сборкой?
18. Что нужно для использования сторонней библиотеки?
19. Что такое internal linkage?
C
20. Что будет, если дважды вызвать free?
21. Как происходит вызов функции?
22. Как происходит передача параметров в функцию?
23. Как прорабатывается константа переменных?
24. Что означает ключевое слово inline?
25. Для чего используют выравнивания, можно ли его контролировать?
26. Расскажите о битовых полях.
27. Для чего нужен extern "C"?
28. Что будет, если в двух файлах сделать функцию с одинаковым именем и параметрами? На каком этапе возникнет ошибка?
29. Как экспортировать/импортировать функции из динамической библиотеки?
30. Какая разница между С-style приведением типов и C++ приведением?
C++
31. Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?
32. Что такое Uniform initialization? Aggregate initialization?
33. Что такое Reference to temporary object? Как продлить время жизни временного объекта?
34. Что такое делегирующий конструктор?
35. Что такое список инициализации?
36. Какой порядок инициализации полей класса? Что случится, если конструктор инициализирует поля в другом порядке?
37. Что случится, если инициализировать поле другим полем?
38. Что такое copy elision? Сколько раз будет вызван конструктор/деструктор у объекта, которого возвращают по значению?
39. Что такое move-семантика?
40. В каких случаях не будет сгенерирован конструктор копирования?
41. Чем отличается конструктор копирования от оператора присваивания?
42. При каких условиях в конструкторе можно выбросить exception?
43. Что такое конструктор по умолчанию? Для чего нужны default и delete?
44. Чем отличается интерфейс от абстрактного класса?
45. Какие виды полиморфизма в С++?
46. Как реализовано наследование в большинстве компиляторов?
47. Множественное наследование: за и против?
48. Виртуальное наследование и порядок конструирования?
49. Зачем использовать override?
50. Какие есть правила вывода типа при использовании auto? В каких случаях auto может привести к нежелательному копированию объекта?
51. Расскажите обо всех возможных способах использования ключевого слова static в С++. Что такое static initialization order fiasco?
52. Что делает вызов throw; в блоке catch?
53. Чем отличается constexpr от const?
54. Что такое const correctness?
55. В каком случае можно использовать const_cast?
56. Что такое ключевое слово mutable и когда его нужно использовать?
57. Что такое ключевое слово friend и когда его нужно использовать?
58. Расскажите о лямбда-выражениях в С++ и доступ к переменным во внешней области видимости, захват this в лямбду и время жизни лямбды и захваченных переменных?
59. Что такое функтор? Напишите пример.
60. Что такое специализация шаблона?
61. Что такое dynamic_cast и run-time type identification?
62. Что такое exception? Как бросить и поймать?
63. Что будет, если бросить exception из конструктора? А из деструктора?
64. Что будет, если не поймать exception?
65. Что произойдет, если exception выйдет за пределы блока noexcept функции?
66. Для чего можно использовать приватное наследование?
67. Что такое контракт функции?
68. Что такое vptr и vtable?
69. Где содержится vptr?
70. Где содержится vtable?
71. Какая разница между overload and override?
72. Как компилятор различает члены класса и обычные переменные в функциях?
73. Зачем используют exceptions?
74. Что такое блоки try-throw-catch?
75. Расскажите о логике catch-блоков.
76. Что такое move constructor?
77. В чем разница между константным методом и неконстантным?
78. Что такое В-нотация и как определить сложность любого алгоритма?
79. Что такое таблица виртуальных методов?
80. Какие функции класса автоматически генерирует компилятор, если их не определить?
81. Что такое выравнивание данных?
82. Что такое exception?
83. Какие есть стандартные контейнеры и на основе каких структур они построены?
84. Что такое Undefined behavior? Приведите примеры.
85. Как определить, что в программе есть memory leak?
86. Для чего нужен std::make_shared? Чем он лучше создания std::shared_ptr через конструктор?
87. Что будет, если выделить один объем памяти, а записать больше?
88. Что такое переполнение stack?
Паттерны проектирования
89. Зачем нужны паттерны? Какие типы паттернов различают?
90. Недостатки паттерна Singleton? Когда он уместен?
91. Преимущества и недостатки PIMPL?
92. В чем разница между паттерн-фабрикой и фабричным методом? Когда использовать какой из них?
93. Что такое паттерн Observer?
94. Як контролировать состояние программы? Машину состояний? Паттерн состояние?
95. Что такое паттерн Visitor?
Метапрограммирование
96. Какие есть правила вывода типа в шаблоне?
97. Чем отличается using от typedef?
98. Сколько памяти занимает произвольная структура? Что такое выравнивание объекта?
99. Почему пустая структура занимает 1 байт? Какая минимальная единица адресации в С++?
OOP/OOD
100. Что такое SOLID? Что означает каждый из этих принципов?
101. Расскажите о паттернах проектирования.
102. Что такое Dependency Injection? Приведите пример.
103. Какие преимущества и недостатки функционального подхода?
104. Что такое принцип RAII?
105. Что такое принцип DRY?
106. Что такое принцип KISS?
107. Какие преимущества композиции перед наследованием?
STL / Algorithms
108. Какие алгоритмы с STL использовали? Каких не хватает?
109. Какими особенностями должен обладать класс, чтобы он был итератором?
110. Какие бывают итераторы?
111. Расскажите об инвалидации итераторов.
112. Как оптимизировать удаление элемента со средины вектора?
113. Как реализован vector?
114. Как реализован list?
115. Как расширить STL-контейнеры?
116. Какие есть алгоритмы в STL?
117. В чем разница между vector, deque, list, set e STL?
118. Когда надо использовать map? Когда - unordered_map? Какая сложность поиска и вставки в этих контейнерах?
119. Как проверить, есть ли в контейнере элементы? Почему вызов container.size() является плохой практикой?
120. Что такое exception safety guarantee? Какую exception safety guarantee имеют STL-контейнеры?
121. Расскажите о типах умных указателей и о подсчете ссылок в них.
Многопоточность
122. Является ли С++ thread-safe?
123. В чем разница между многопоточностью и асинхронностью?
124. Что такое многопоточность? Какую функциональность предоставляет С++ для разработки многопоточных приложений? Какие основные проблемы многопоточных приложений?
125. Как передать информацию между несколькими процессами?
126. Как синхронизировать между собой несколько процессов?
127. Какие есть особенности работы с shared memory?
128. Как работает spinlock?
129. Какие вы знаете особенности использования recursive mutex?
130. Расскажите о read-write mutex.
131. Что такое race-condition? Взаимная блокировка? Что такое критическая секция?
132. Как избежать состояния гонки?
133. Чем отличается мьютекс от семафора?
134. Какие примитивы синхронизации реализованы в C++? Преимущества lock_guard?
135. Что случится, если exception выйдет за пределы потока? Какие инструменты есть для безопасной асинхронности в С++?
136. Чем отличается std::launch::async от std::launch::deferred?
137. Что такое атомарная операция? std::atomic?
138. Как работать с std::conditional_variable?
139. Как создать поток с помощью std::thread?
140. На сколько потоков лучше разбить задачу? От чего это зависит?
141. Как работать с std::async?
142. Thread-safe гарантии контейнеров в С++? В чем недостаток интерфейса front() + pop_front()?
Networking
143. Что такое TCP handshake?
144. Какая разница между TCP и UDP?
145. Расскажите о протоколах верхнего уровня.
146. Какая разница между HTTP и HTTPS?
147. Расскажите об SSL/TLS handshake.
SCM / CI / CD
148. Расскажите о процессах CI.
149. Как отредактировать комит?
150. Расскажите об интерактивном rebase.
151. Какие могут быть способы дебаггинга кода?
152. Для чего нужны Unit test? Чем отличается от Functional Test?
153. Как тестировать код? Какой используете фреймворк?
154. Какие библиотеки знаете для написания тестов?
155. Что такое mock?
156. Сколько тестов нужно написать на одну функцию?
157. Что такое побочный эффект, идемпотентность и чистые функции?
158. Что такое контейнеризация и в чем преимущества и недостатки? Что такое Docker или иной инструмент контейнеризации?
159. Что такое CI/CD и какие преимущества приносит для разработчика?
160. Какие принципы итеративных методологий?
161. Какие преимущества и недостатки code-convention?
Практические задания
162. Напишите максимально корректную реализацию класса string с конструктором копирования и оператором присваивания.
163. Напишите реализацию очереди.
164. Реализуйте функцию, которая за один проход найдет уникальный элемент в контейнере.
165. Напишите thread-safe пул потоков.
166. Напишите игру жизни в ООП стиле.
167. Напишите класс, который достает из базы список товаров по фильтру и показывает на консоли. Напишите тесты для него.
168. Любая задача на написание кода, чтобы проверить умение проектировать интерфейсы и придерживаться принципов SOLID, DRY, KISS.
169. Напишите свою реализацию std::atomic.
170. Напишите программу для анализа графов: нахождение циклов, deadlock-состояний, циклов, недоступных состояний.
171. Напишите программу, которая бы проверяла, что в системе запущен только один ее экземпляр. Решение должно быть cross-platform.
172. Проанализируйте C++ код с точки зрения качества: выявить потенциальные memory leak, нерациональное использование STL-контейнеров, алгоритмов, неоптимальные конструкции и тому подобное.
173. Напишите код для решения судоку.
174. Напишите код, который найдет зацикливание в односвязном списке.
Senior
Общее
1. Как вы понимаете SOLID?
2. Как разработать систему плагинов на С++?
3. Что такое RPC? Какие библиотеки знаете?
4. На что обращать внимание при проведении code review?
5. Какие есть проблемы при написании кроссплатформенного кода? На что обращать внимание?
6. Что делать, если код работает медленно?
7. Какие есть способы и методологии измерения быстродействия кода? Как можно устранить/уменьшить влияние замеров на быстродействие?
8. Что такое SFINAE? Для чего используется?
9. Что такое метапрограммирование? С помощью чего реализуется на С++?
10. Как использовать variadic templates?
11. Как тестировать закрытые методы?
12. Как считать покрытие тестами? Нужно ли это делать?
13. Что такое cache miss и как это выявить?
14. Что такое SIMD-инструкции? Какие необходимые условия и способы их использования?
15. Что такое покрытие кода и как обеспечивается?
16. Опишите принципы lock-free структур данных и свой опыт работы с ними.
Препроцессор и компиляция
17. Расскажите о построении билд-системы.
18. Как работать с билд-системами: Make, CMake.
19. Как интегрировать third-party в проект?
20. Что такое барьеры памяти?
21. Расскажите о работе с сырыми указателями и о ручном управлении памятью.
22. Что такое статический анализатор кода? Какие знаете?
23. Что такое динамический анализатор кода? Какие знаете?
24. Проект медленно собирается. Как можно ускорить?
C/C++
25. Расскажите об использовании realloc в контейнерах.
26. Как работают шаблоны?
27. Расскажите о специализации шаблонов.
28. Как работает RTTI?
29. Можно ли использовать exception в конструкторе/деструкторе?
30. Что такое rvalue и lvalue?
31. В чем особенности контейнеров std::set, std::map, std::unordered_map, std::hash?
32. Что такое placement new? Для чего используют? Как сделать placement delete?
33. Как размещается в памяти класс со множественным наследованием и виртуальными функциями?
34. Как работают точки остановки?
35. Что такое уязвимости? Каков механизм их работы?
36. Как написать собственный std::shared_ptr?
37. Что такое curiously recurring template pattern?
38. Опишите назначение и принцип работы std::shared_ptr, std::unique_ptr и std::weak_ptr.
39. Какое назначение и отличия использования std::variant и std::any?
40. Какие улучшения получил std::search в С++17 ?
41. Что такое copy elision и когда он становится возможным? Какие особенности для разных стандартов?
42. Что такое Return Value Optimization?
OOP/OOD
43. Объясните принципы SOLID.
44. Объясните принципы KISS.
45. Объясните принципы YAGNI.
46. Какие есть подходы к оптимизации кода?
47. На что стоит обращать внимание при code review?
48. Какие есть паттерны проектирования? Почему не советуют использовать Singleton?
49. Что такое статический полиморфизм?
STL / Algorithms
50. Когда std::vector может использовать std::move?
51. Расскажите о своем любимом алгоритме поиска.
52. Что такое lock-free и wait-free алгоритмы? В чем их отличия и способы реализации?
53. Опишите назначение execution policy для параллельных алгоритмов.
Многопоточность
54. Расскажите о построении API, рассчитанных на многопоточное использование.
55. В чем разница между kernel-level и user-level потоками?
56. Что такое coroutine?
57. Что делает спецификатор thread_local?
58. Как реализовать синхронизацию в задаче producer-consumer?
59. Як синхронизироваться между различными процессами?
SCM / CI / CD
60. Расскажите о настройке процесса менеджмента ветвей репозитория.
61. Расскажите о стратегии разветвления (branching).
Практические задания
62. Напишите базовую реализацию std::shared_ptr.
63. Реализуйте алгоритм сортировки.
64. Реализуйте алгоритм хеширования.
65. Реализуйте shared_ptr с расширением для weak_ptr.
66. Реализуйте простейший producer-consumer, используя условные переменные.
67. Опишите как можно подробнее, что происходит в системе, когда приложение делает сетевой запрос.
68. Детально описать дизайн программного компонента, например, системы голосования; учесть при этом высокую нагрузку и сделать ее расширяемой и отказоустойчивой.
Выражаем благодарность за участие в статье Александру Жакуну, Ярославу Пушко, Назару Семенишину, Сергею Подоброму, Владимиру Кочуну, Владимиру Новикову, Сергею Кривоносу, Марку Цирульнику, Кириллу Пшеничному, Виктору Шуму, Сергею Братусю.
Как подготовиться к собеседованию в IT на английском
Автор: Влад Сверчков
Английский в IT. Для каких задач нужен?
English в школе. Опыт автора.
Какой английский необходим для разработчиков и тестировщиков?
Что не работает.
Что реально работает в изучении English.
Как это организовать.
Глоссарий.
Рекомендации по изучению английского + бонус!
Заключение.
Друзья, предлагаем вашему вниманию занимательную статью, написанную на основании интервью одного IT-специалиста из Кремниевой долины. В своё время ему потребовался английский для работы над крутыми международными проектами, однако камнем преткновения стал разговорный English. Это краткая и поучительная история о том, как наш герой перепробовал множество вариантов, но таки смог найти тот самый, который помог ему «заговорить» и добиться желаемого в IT. Приятного чтения!
Приветствую!
Сегодня мы поговорим о том, как быстро прокачать английский для собеседований в IT-компанию. Я буду рассказывать на примере своего опыта, когда решения на базе искусственного интеллекта ещё не были распространены.
Немного о себе. Меня зовут Александр, сейчас я работаю аналитиком в EPAM в Калифорнии, проект у нас в компании Google. В прошлом у меня уже был опыт управления проектами. Сам я из цеха программистов, но сейчас занимаюсь бизнес-анализом.
Эта статья будет полезна в первую очередь для тех, кто хочет подтянуть свой английский для работы в информационных технологиях. Данный способ подходит не только для IT, но и для любой другой сферы.
Когда говорим про обучение, нужно понимать, что есть множество способов и вариантов. Я помогу выбрать лучший способ именно в контексте работы в IT.
После прочтения статьи вы поймете, как сэкономить время на изучение английского языка. Время – это самый драгоценный ресурс, поэтому думаю, что вам будет полезно.
Английский в IT. Для каких задач нужен?
Пару слов об IT и какой английский нужен.
Приведу свой пример: когда я был разработчиком, English сводился к тому, что я читал мануалы на английском языке, первоисточники, использовал Stack Overflow, читал на форумах. В основном это была текстовая информация, то есть беглое чтение больших объемов информации. Если говорим про какую-то документацию, протоколы и т. д., я выделяю это как первичный уровень знания языка.
Также упомяну про английский для резюме. Сталкивался с тем, что у людей прекрасный инглиш, и у них в резюме указано, что уровень B2 или TOEFL. Но касаемо работы это не приносило бенефитов. Нужно четко разделить английский в плане работы, особенно в IT, на два уровня.
Английский для различных ролей в IT
Английский, который нужен тестировщикам и разработчикам, является первым входным порогом. Следующий порог – это там, где требуется коммуникация, например, для ролей бизнес-аналитика или проектного менеджера, которые общаются с англоговорящими заказчиками или стейкхолдерами.
Если говорить о разработчиках, тестировщиках, архитекторах, то один из важных аспектов – это техническое интервью. Оно может быть для собеседования в компанию или внутренним. В моем случае, чтобы подтвердить свою компетентность, я проходил assessment – экзамен, на котором присутствовало пять человек из разных стран с разным уровнем знания языка и акцентами. Нужно было отвечать на профессиональные вопросы и приводить примеры из прошлого опыта.
Говоря о техническом интервью, важно отметить, что английский язык необходим не только для понимания вопросов, но и для передачи своего опыта и знаний. Кроме того, есть понятие поведенческого интервью, где тоже важно владеть языком.
Английский в школе. Опыт автора
Расскажу про свой опыт изучения английского в школе. У нас English был со второго класса, это были базовые буквы и слова. В пятом классе начался обычный школьный английский: много грамматики, сложные слова, которые нужно было заучивать наизусть. Произношению уделялось меньше внимания, особенно если говорить не о гимназиях и школах с углубленным изучением языка.
Мы делились на группы по уровню знаний. В одной группе были ученики с более сильным английским, куда попал и я. В другой группе учительствовал профессиональный переводчик без преподавательского образования: ученики слушали песни, общались только на английском – обучение было больше в игровой форме без особого упора на грамматику. Баллы во второй группе, соответственно, были ниже.
В итоге, несмотря на хорошие оценки в школе и институте, в реальной жизни, при поездках в Европу, я убедился, что мой английский был недостаточно хорош для повседневного общения – я не понимал людей, равно как и они меня.
Чему не учат в школе:
Простоте и понятности. В школе не дают базовые потребительские фразы, которые можно заучить и использовать в повседневной жизни.
Беглости и плавности. Школьная программа не учит беглому чтению и пониманию общего смысла текста или речи без детального перевода каждого слова. Также не учат говорить плавно и непринужденно, как и пониманию живой речи собеседника.
Практическим навыкам. Научиться говорить естественно и понимать собеседника в реальном времени – это то, что приходит с практикой и чего в школе не преподают.
Английский, необходимый для разработчиков и тестировщиков
Первый и важнейший ресурс – это время. Все хотят быстро выучить язык, но в реальности это требует времени и усилий. Для того чтобы подтянуть английский, нужно им регулярно заниматься, а также использовать на практике.
Второй ресурс – деньги. В идеале, чтобы всё было бесплатно. Однако даже если у вас есть средства, нужно понимать, сколько вы отдадите и какое качество получите взамен.
Порог входа
Для тестировщиков и разработчиков начальным порогом является базовое владение английским, чтобы понимать и использовать техническую документацию, писать простые отчеты о багах, взаимодействовать с другими членами команды. Однако, если вы претендуете на роль бизнес-аналитика или проектного менеджера, где требуется постоянное взаимодействие с англоязычными заказчиками и стейкхолдерами, уровень английского должен быть значительно выше.
Технические и внутренние интервью
Как я уже упоминал выше, английский пригодится для собеседований на работу в иностранную команду / работу с иностранным заказчиком, а также могут быть внутренние технические интервью (для подтверждения квалификации, например). Важно уметь отвечать на профессиональные вопросы и приводить примеры из своего опыта.
Что не работает
Учитель-академик. Академический подход с упором на грамматику и теорию мало помогает в развитии навыков свободного общения.
Письма, чаты и статьи. Письменная практика не дает значительных результатов в развитии разговорных навыков.
Голосовые сообщения. Запись голосовых сообщений создает иллюзию обучения, но не развивает навык быстрой реакции, схватывания на лету и понимания в реальном времени.
Зазубривание теории и слов. Заучивание теоретических вопросов и слов не помогает в реальном разговоре, так как любое отклонение от заученного сценария вызывает замешательство.
Просмотр фильмов и сериалов. Хотя это полезно для общего понимания языка, данный метод не способствует развитию активных навыков спикинга и понимания на высоком уровне.
Что действительно работает при изучении английского
Очень эффективным является ежедневное общение на английском языке по 45 минут либо по часу в день. Это может быть разговор с носителем языка или человеком с уровнем выше вашего. Важно, чтобы это была активная разговорная практика, а не пассивное восприятие информации. Практика в экстремальных условиях, когда нужно быстро реагировать и формулировать мысли, значительно улучшает спикинг-навыки.
Как это организовать
Найдите собеседников внутри компании. Отправьте письмо коллегам с предложением готовиться вместе к профессиональному интервью / экзамену либо чему-то в этом роде. Укажите список вопросов и предложите созваниваться раз в неделю. Таким образом, у вас будет постоянная практика.
Используйте сервисы для общения. Как пример – сервисы вроде Conversation Exchange или Italki. Они помогут найти людей для практики, с которыми можно регулярно созваниваться и общаться на английском – как профессиональных преподавателей, так и простых энтузиастов, готовых заниматься за небольшую плату. Именно так я заполнял свой ежедневный часовой спринт.
Платные преподаватели. В случае если коллег недостаточно или вы хотите повысить интенсивность занятий, можно обратиться к платным преподавателям на том же Italki.
Глоссарий
В моей практике словарный запас оказался особенно важен, поскольку необходимо было уверенно использовать профессиональные термины, специфичные для разработки, тестирования, архитектуры и бизнес-анализа. И чтобы свободно общаться я создал свой глоссарий.
Как я создал свой глоссарий:
Взял книги, которые считаются "библиями" в области управления проектами и бизнес-анализа:
PMBOK (Project Management Body of Knowledge) для менеджеров проектов.
BABOK (Business Analysis Body of Knowledge) для бизнес-аналитиков.
Скачал эти книги в формате PDF, затем скопировал их содержимое в текстовый файл.
Заменил все пробелы на переносы строки, чтобы сформировать одну колонку текста.
Для анализа текста и выделения наиболее часто используемых слов – Excel. В Excel я создал сводную таблицу (pivot table), чтобы определить частоту встречаемости слов.
Из тысячи слов я выбрал 40 самых употребляемых и заучил их. Это позволило мне быстро расширить свой профессиональный словарный запас и начать активно использовать эти термины в своей речи.
При построении глоссария важно использовать проверенные и авторитетные источники. Книги, такие как PMBOK и BABOK, предоставляют стандартизированные термины, которые часто употребляются в профессиональных кругах. Это гарантирует, что глоссарий будет достоверным и актуальным.
Можете выбрать другие авторитетные книги. Главное — следовать методике: создайте колонку с текстом, проанализируйте частотность слов и выберите наиболее часто встречающиеся термины для заучивания.
Рекомендации по изучению английского
Ежедневная практика. Первая и самая важная рекомендация — ежедневно уделять не менее одного часа на общение на английском языке. Хотите хорошо говорить и проходить собеседования на английском? Просто говорите и слушайте. Уже через месяц-два регулярной практики вы увидите результаты.
Определение канала восприятия. Важно определить, как вы лучше всего воспринимаете информацию: через аудио, текст или визуальные материалы.
Экспериментирование. Пробуйте разные методы изучение языка и найдите то, что работает именно для вас. Не бойтесь делать ошибок!
Поддержание языковой среды. Окружите себя источниками английского языка для улучшения восприятия и запоминания:
текстовый формат: книги, статьи и новости на английском языке;
аудио: подкасты, аудиокниги;
используйте стикеры с новыми словами и расклейте их на видных местах, чтобы легче запоминать;
переведите интерфейсы телефонов и компьютеров на английский язык.
Бонус: бесплатный сервис для практики английского языка
А теперь я хочу поделиться с вами действительно полезным бонусом — это бесплатный сервис под названием Pramp. Он позволяет вам находить собеседников со всего мира, имеющих разный уровень подготовки. Вы можете выбрать тему для интервью, будь то техническое или поведенческое собеседование.
Алгоритм использования Pramp прост:
Найдите человека для общения: на выбор множество стран, собеседники с разным уровнем английского.
Выберите тему для интервью: FrontEnd, системный дизайн, поведенческое интервью и т. д.
Организация созвона, который длится около 30 минут. У вас есть заранее подготовленный набор вопросов.
Задаете вопросы своему собеседнику, делаете заметки о том, что понравилось и что можно улучшить.
Меняетесь ролями: ваш собеседник задает вам вопросы.
В сервисе есть множество готовых наборов вопросов для каждой тематики. Вы можете следовать им или использовать свой собственный список. Так же может поступить и собеседник.
Повторюсь: сервис бесплатный. Вы сможете общаться с людьми из разных стран и с различным профессиональным опытом; вопросы и темы максимально приближены к реальным собеседованиям. Вы не только улучшите свои языковые навыки, но и получите ценные советы по прохождению интервью.
Я использовал этот сервис для подготовки и могу сказать, что это великолепная возможность. Общался с менеджерами проектов, инженерами из Америки, Азии и Индии. Pramp идеально сочетает в себе все необходимые элементы для успешной подготовки к прохождению собеседований.
Заключение
Самое главное в изучении английского – это регулярность и интенсивность практики. Ежедневные занятия по часу в стрессовых условиях с различными собеседниками помогут быстро повысить уровень английского языка, улучшить беглость и плавность речи, а также развить навыки понимания собеседника. В своё время мне очень помогли Conversation Exchange, Italki, Pramp.
В моём случае я перепробовал много различных вариантов: тексты, статьи, аудиокниги, сериалы, подкасты, преподаватели английского. Наблюдал увеличение словарного запаса, совершенствование грамматики, но «заговорить» так и не мог.
В итоге, именно регулярный живой разговорный формат и помог мне достичь успеха на англоязычном собеседовании и осуществить свои карьерные амбиции. Уверен, что мой опыт окажется ценным для многих из вас. Успехов в изучении английского!