Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.
— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выводит Console.WriteLine("Hello".ToUpper());?
👾 — HELLO
👍 — hello
🥰 — Error
⚡️ — Ничего из вышеперечисленного
Библиотека задач по C#
👾 — HELLO
👍 — hello
🥰 — Error
⚡️ — Ничего из вышеперечисленного
Библиотека задач по C#
👾66😁5
Forwarded from Библиотека программиста
Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране?
Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить.
В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео.
Please open Telegram to view this post
VIEW IN TELEGRAM
Record class скопировали через with. Вложенный список тоже скопировался?
У объекта есть свойство Tags — изменяемый список строк. Используется стандартный copy constructor. В нём один элемент. Создали copy выражением
Сколько элементов теперь в
👾 — Два, оба объекта ссылаются на один список
👍 — Один, with копирует весь граф объектов
🥰 — Ноль, исходный список очищается
⚡️ — Ошибка компиляции, record запрещает изменяемые свойства
Библиотека задач по C#
У объекта есть свойство Tags — изменяемый список строк. Используется стандартный copy constructor. В нём один элемент. Создали copy выражением
original with { } и добавили второй элемент в copy.Tags.Сколько элементов теперь в
original.Tags?👾 — Два, оба объекта ссылаются на один список
👍 — Один, with копирует весь граф объектов
🥰 — Ноль, исходный список очищается
⚡️ — Ошибка компиляции, record запрещает изменяемые свойства
Библиотека задач по C#
👾16
checked вокруг вызова защитит умножение внутри другого метода?
Метод Multiply принимает два int и возвращает их произведение в unchecked-контексте. Выполняется выражение
Что получится?
👾 — -2
👍 — OverflowException
🥰 — 4294967294
⚡️ — Ошибка компиляции
Библиотека задач по C#
Метод Multiply принимает два int и возвращает их произведение в unchecked-контексте. Выполняется выражение
checked(Multiply(int.MaxValue, 2)). Пользовательских операторов нет.Что получится?
👾 — -2
👍 — OverflowException
🥰 — 4294967294
⚡️ — Ошибка компиляции
Библиотека задач по C#
👍2⚡1👾1
Что попадёт в результат LINQ после изменения списка?
Что выведет код? Нужные using подключены.
👾 — 2, 3 — запрос запомнил исходный список
👍 — 2, 3, 4 — список читается при переборе
🥰 — 4 — запрос видит только новые элементы
⚡️ — InvalidOperationException
Ответ: 👍 — 2, 3, 4 — список читается при переборе.
Where выполняет отбор при переборе. Добавление произошло до начала перебора в string.Join, поэтому в результат попадёт и 4.
Правило в документации C#
Библиотека задач по C#
Что выведет код? Нужные using подключены.
var numbers = new List<int> { 1, 2, 3 };
var selected = numbers.Where(n => n > 1);
numbers.Add(4);
Console.WriteLine(string.Join(", ", selected));👾 — 2, 3 — запрос запомнил исходный список
👍 — 2, 3, 4 — список читается при переборе
🥰 — 4 — запрос видит только новые элементы
⚡️ — InvalidOperationException
Where выполняет отбор при переборе. Добавление произошло до начала перебора в string.Join, поэтому в результат попадёт и 4.
Библиотека задач по C#
Docs
Enumerable.Where Method (System.Linq)
Filters a sequence of values based on a predicate.
👍9👾2
До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один.
Например, можно совместить:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью.💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.
Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽
Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога.
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие числа напечатают действия, созданные в цикле for?
Что выведет код? Нужные using подключены.
👾 — 012
👍 — Ошибка компиляции
🥰 — 123
⚡️ — 333
Ответ: ⚡️ — 333.
Все три лямбды захватывают одну переменную i из for. Действия выполняются после завершения цикла, когда i равна 3. Это отличается от захвата переменной foreach в современных версиях C#.
Правило в документации C#
Библиотека задач по C#
Что выведет код? Нужные using подключены.
var actions = new List<Action>();
for (int i = 0; i < 3; i++)
{
actions.Add(() => Console.Write(i));
}
foreach (var action in actions)
action();
👾 — 012
👍 — Ошибка компиляции
🥰 — 123
⚡️ — 333
Все три лямбды захватывают одну переменную i из for. Действия выполняются после завершения цикла, когда i равна 3. Это отличается от захвата переменной foreach в современных версиях C#.
Библиотека задач по C#
Docs
Lambda expressions - Lambda expressions and anonymous functions - C# reference
C# lambda expressions that are used to create anonymous functions and expression bodied members.
⚡1
Изменит ли finally значение, уже выбранное для return?
Что выведет код? Нужные using подключены.
👾 — 1
👍 — 2
🥰 — Ничего: finally отменит return
⚡️ — Ошибка компиляции
Ответ: 👾 — 1.
Выражение return value вычисляется до выполнения finally: результатом становится число 1. Затем finally меняет локальную переменную, но уже выбранное возвращаемое значение от этого не меняется.
Правило в документации C#
Библиотека задач по C#
Что выведет код? Нужные using подключены.
class Program
{
static int GetValue()
{
int value = 1;
try { return value; }
finally { value = 2; }
}
static void Main()
{
Console.WriteLine(GetValue());
}
}
👾 — 1
👍 — 2
🥰 — Ничего: finally отменит return
⚡️ — Ошибка компиляции
Выражение return value вычисляется до выполнения finally: результатом становится число 1. Затем finally меняет локальную переменную, но уже выбранное возвращаемое значение от этого не меняется.
Библиотека задач по C#
Docs
Statements - C# language specification
This chapter covers statements in C#. Each statement is defined, as are statement blocks, statement reachability, and end points.
👾5❤3
Изменится ли структура после вызова метода через интерфейс?
Что выведет код? Нужные using подключены.
👾 — 1 и 1
👍 — 0 и 0
🥰 — 0 и 1
⚡️ — Ошибка компиляции
Ответ: 🥰 — 0 и 1.
При преобразовании Counter к ICounter происходит упаковка: в объект помещается копия структуры. Increment изменяет эту упакованную копию. Исходная структура сохраняет Value = 0, а при распаковке boxed получаем Value = 1.
Правило в документации C#
Библиотека задач по C#
Что выведет код? Нужные using подключены.
interface ICounter { void Increment(); }
struct Counter : ICounter
{
public int Value;
public void Increment() { Value++; }
}
class Program
{
static void Main()
{
Counter original = new Counter();
ICounter boxed = original;
boxed.Increment();
Console.WriteLine(original.Value);
Console.WriteLine(((Counter)boxed).Value);
}
}👾 — 1 и 1
👍 — 0 и 0
🥰 — 0 и 1
⚡️ — Ошибка компиляции
При преобразовании Counter к ICounter происходит упаковка: в объект помещается копия структуры. Increment изменяет эту упакованную копию. Исходная структура сохраняет Value = 0, а при распаковке boxed получаем Value = 1.
Библиотека задач по C#
Docs
Boxing and Unboxing - C#
Learn about boxing and unboxing in C# programming. See code examples and view other available resources.
🥰2
В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок.
Например, можно совместить два направления по работе с ИИ:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью.💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.
А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога.
Акция действует до 31 октября включительно
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно ли записать число в массив строк через переменную object[]?
Что произойдёт при выполнении кода? Нужные using подключены.
👾 — OK — число сохранится как object
👍 — ArrayTypeMismatchException
🥰 — Ошибка компиляции
⚡️ — OK — число превратится в строку
Ответ: 👍 — ArrayTypeMismatchException.
string[] можно присвоить переменной object[] благодаря ковариантности массивов. Но сам массив остаётся массивом строк. Запись int проходит компиляцию, а во время выполнения проверка типа вызывает ArrayTypeMismatchException.
Правило в документации C#
Библиотека задач по C#
Что произойдёт при выполнении кода? Нужные using подключены.
object[] values = new string[1];
values[0] = 42;
Console.WriteLine("OK");
👾 — OK — число сохранится как object
👍 — ArrayTypeMismatchException
🥰 — Ошибка компиляции
⚡️ — OK — число превратится в строку
string[] можно присвоить переменной object[] благодаря ковариантности массивов. Но сам массив остаётся массивом строк. Запись int проходит компиляцию, а во время выполнения проверка типа вызывает ArrayTypeMismatchException.
Библиотека задач по C#
Docs
Arrays - C# language specification
This chapter defines arrays. It includes the rules for array variance, multi-dimensional arrays, and jagged arrays.
👍1
Какую перегрузку выберут для строки в переменной object?
Что выведет код? Нужные using подключены.
👾 — stringstring
👍 — objectobject
🥰 — Ошибка компиляции
⚡️ — objectstring
Ответ: ⚡️ — objectstring.
В первом вызове тип аргумента при компиляции — object, поэтому выбирается Show(object). После явного приведения аргумент имеет тип string и выбирается Show(string). Здесь нет dynamic, и фактическое содержимое переменной не переключает перегрузку.
Правило в документации C#
Библиотека задач по C#
Что выведет код? Нужные using подключены.
class Program
{
static void Show(object value)
{
Console.Write("object");
}
static void Show(string value)
{
Console.Write("string");
}
static void Main()
{
object value = "hello";
Show(value);
Show((string)value);
}
}
👾 — stringstring
👍 — objectobject
🥰 — Ошибка компиляции
⚡️ — objectstring
В первом вызове тип аргумента при компиляции — object, поэтому выбирается Show(object). После явного приведения аргумент имеет тип string и выбирается Show(string). Здесь нет dynamic, и фактическое содержимое переменной не переключает перегрузку.
Библиотека задач по C#
Docs
Expressions - C# language specification
This chapter covers operators and expressions. Expressions form several groups, including primary expressions, unary operators, arithmetic operators, relational and type testing operators, and logical operators.
⚡1
Что получится, если соединить null и bool?
C# 12. Что выведет код?
👾 — False True
👍 — null null
🥰 — False False
⚡️ — Ошибка компиляции
Ответ: 👾 — False True.
Для bool? работают три значения: true, false и null. У выражения value & false результат всегда false. У value | true — всегда true. Неизвестное значение второго операнда этому не мешает.
Документация: логические операторы для bool?
➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии
🐸 Библиотека программиста
C# 12. Что выведет код?
using System;
bool? value = null;
Console.WriteLine($"{value & false} {value | true}");
👾 — False True
👍 — null null
🥰 — False False
⚡️ — Ошибка компиляции
Для bool? работают три значения: true, false и null. У выражения value & false результат всегда false. У value | true — всегда true. Неизвестное значение второго операнда этому не мешает.
Please open Telegram to view this post
VIEW IN TELEGRAM
Docs
Boolean logical operators - the boolean and, or, not, and xor operators - C# reference
C# logical operators perform logical negation (`!`), conjunction (AND - `&`, `&&`), and inclusive and exclusive disjunction (OR - `|`, `||`, `^`) operations with Boolean operands.
👾1
Что выполнится раньше: фильтр catch или finally?
C# 12. Что выведет код?
👾 — FQC
👍 — QFC
🥰 — QCF
⚡️ — FCQ
Ответ: 👍 — QFC.
Сначала среда ищет подходящий обработчик и проверяет фильтр — печатается Q. Затем выполняет finally при выходе из вложенного блока — F. После этого управление попадает в catch — C.
Документация: фильтры исключений
➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии
🐸 Библиотека программиста
C# 12. Что выведет код?
using System;
try
{
try { throw new Exception(); }
finally { Console.Write("F"); }
}
catch (Exception) when (Check())
{
Console.Write("C");
}
static bool Check()
{
Console.Write("Q");
return true;
}
👾 — FQC
👍 — QFC
🥰 — QCF
⚡️ — FCQ
Сначала среда ищет подходящий обработчик и проверяет фильтр — печатается Q. Затем выполняет finally при выходе из вложенного блока — F. После этого управление попадает в catch — C.
Please open Telegram to view this post
VIEW IN TELEGRAM
Docs
Exception-handling statements - throw and try, catch, finally - C# reference
Use the C# throw statement to signal an occurrence of an exception. Use the C# try statements to catch and process exceptions occurred in a block of code.
🥰1👾1
Равны ли кортежи с разными именами полей?
C# 12. Что выведет код?
👾 — Ошибка компиляции
👍 — False
🥰 — True
⚡️ — Исключение при сравнении
Ответ: 🥰 — True.
Оператор == сравнивает соответствующие элементы кортежей. Имена полей в сравнении не участвуют: здесь сравниваются 1 с 1 и 2 с 2.
Документация: равенство кортежей
➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии
🐸 Библиотека программиста
C# 12. Что выведет код?
using System;
var first = (X: 1, Y: 2);
var second = (A: 1, B: 2);
Console.WriteLine(first == second);
👾 — Ошибка компиляции
👍 — False
🥰 — True
⚡️ — Исключение при сравнении
Оператор == сравнивает соответствующие элементы кортежей. Имена полей в сравнении не участвуют: здесь сравниваются 1 с 1 и 2 с 2.
Please open Telegram to view this post
VIEW IN TELEGRAM
Docs
Tuple types - C# reference
C# tuples: lightweight data structures that you can use to group loosely related data elements. Tuples introduce a type that contains multiple public members.
🥰2
Что попадёт в params, если передать null?
C# 12, проверка nullable отключена. Что выведет код?
👾 — 1 1
👍 — 0 1
🥰 — null null
⚡️ — null 1
Ответ: ⚡️ — null 1.
В первом вызове null передаётся как сам массив. Во втором приведение к object заставляет передать один элемент: компилятор создаёт массив длины 1, который содержит null.
Документация: параметры params
➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии
🐸 Библиотека программиста
C# 12, проверка nullable отключена. Что выведет код?
using System;
Show(null);
Show((object)null);
static void Show(params object[] items)
{
Console.Write(
items is null ? "null " : items.Length + " "
);
}
👾 — 1 1
👍 — 0 1
🥰 — null null
⚡️ — null 1
В первом вызове null передаётся как сам массив. Во втором приведение к object заставляет передать один элемент: компилятор создаёт массив длины 1, который содержит null.
Please open Telegram to view this post
VIEW IN TELEGRAM
Docs
Method parameters and modifiers - C# reference
Parameter modifiers enable pass-by-reference semantics, with distinctions for read-only, and `out` parameters. The `params` modifier allows optional arguments.
⚡4
В каком порядке выполнится код с await?
C# 12. Что выведет код?
👾 — ABC
👍 — BAC
🥰 — ACB
⚡️ — Порядок каждый раз разный
Ответ: 👾 — ABC.
Вызов Work() сразу печатает A. На незавершённой задаче выполнение метода приостанавливается, и вызывающий код печатает B. Только после SetResult метод может продолжить работу и вывести C.
Документация: выполнение асинхронного метода
➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии
🐸 Библиотека программиста
C# 12. Что выведет код?
using System;
using System.Threading.Tasks;
var gate = new TaskCompletionSource<bool>();
async Task Work()
{
Console.Write("A");
await gate.Task;
Console.Write("C");
}
var task = Work();
Console.Write("B");
gate.SetResult(true);
await task;
👾 — ABC
👍 — BAC
🥰 — ACB
⚡️ — Порядок каждый раз разный
Вызов Work() сразу печатает A. На незавершённой задаче выполнение метода приостанавливается, и вызывающий код печатает B. Только после SetResult метод может продолжить работу и вывести C.
Please open Telegram to view this post
VIEW IN TELEGRAM
Docs
Asynchronous programming - C#
Explore an overview of the C# language support for asynchronous programming by using async, await, Task, and Task.
Получит ли класс готовый метод из интерфейса?
C# 12. Скомпилируется ли программа?
👾 — Да, выведет I
👍 — Нет, у Item нет доступного метода Show
🥰 — Да, но ничего не выведет
⚡️ — Да, но при вызове будет исключение
Ответ: 👍 — Нет, у Item нет доступного метода Show.
Реализация метода в интерфейсе не добавляет этот метод в класс. Вызвать её можно через переменную интерфейсного типа: IShow item = new Item(); item.Show();. Такой код выведет I.
Документация: реализация методов в интерфейсах
➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии
🐸 Библиотека программиста
C# 12. Скомпилируется ли программа?
using System;
var item = new Item();
item.Show();
interface IShow
{
void Show() => Console.Write("I");
}
class Item : IShow { }
👾 — Да, выведет I
👍 — Нет, у Item нет доступного метода Show
🥰 — Да, но ничего не выведет
⚡️ — Да, но при вызове будет исключение
Реализация метода в интерфейсе не добавляет этот метод в класс. Вызвать её можно через переменную интерфейсного типа: IShow item = new Item(); item.Show();. Такой код выведет I.
Please open Telegram to view this post
VIEW IN TELEGRAM
Docs
interface keyword - C# reference
Use the `interface` keyword to define contracts that any implementing type must support. Interfaces provide the means to create common behavior among a set of unrelated types.
👍1👾1
Какая переменная изменит элемент массива?
C# 12. Что выведет код?
👾 — 1 7
👍 — 7 7
🥰 — 9 7
⚡️ — 9 9
Ответ: 🥰 — 9 7.
Обычное присваивание сохраняет в copy отдельное число. Переменная alias объявлена с ref и ссылается на элемент массива. Запись в неё меняет values[0].
Документация: возврат по ссылке
➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии
🐸 Библиотека программиста
C# 12. Что выведет код?
using System;
int[] values = { 1, 2 };
int copy = First(values);
ref int alias = ref First(values);
copy = 7;
alias = 9;
Console.WriteLine($"{values[0]} {copy}");
static ref int First(int[] items)
=> ref items[0];
👾 — 1 7
👍 — 7 7
🥰 — 9 7
⚡️ — 9 9
Обычное присваивание сохраняет в copy отдельное число. Переменная alias объявлена с ref и ссылается на элемент массива. Запись в неё меняет values[0].
Please open Telegram to view this post
VIEW IN TELEGRAM
Docs
Jump statements - break, continue, return, and goto - C# reference
C# jump statements (break, continue, return, and goto) unconditionally transfer control from the current location to a different statement.
Могут ли две проверки на null дать разные ответы?
C# 12, проверка nullable отключена. Что выведет код?
👾 — False False
👍 — True True
🥰 — Ошибка компиляции
⚡️ — True False
Ответ: ⚡️ — True False.
Выражение value == null вызывает наш оператор, который всегда возвращает true. Проверка value is null перегруженный оператор не вызывает. Объект существует, поэтому её результат — false.
Документация: проверка is null
➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии
🐸 Библиотека программиста
C# 12, проверка nullable отключена. Что выведет код?
using System;
var value = new Item();
Console.WriteLine(
$"{value == null} {value is null}"
);
class Item
{
public static bool operator ==(Item a, Item b)
=> true;
public static bool operator !=(Item a, Item b)
=> false;
public override bool Equals(object other)
=> ReferenceEquals(this, other);
public override int GetHashCode() => 0;
}
👾 — False False
👍 — True True
🥰 — Ошибка компиляции
⚡️ — True False
Выражение value == null вызывает наш оператор, который всегда возвращает true. Проверка value is null перегруженный оператор не вызывает. Объект существует, поэтому её результат — false.
Please open Telegram to view this post
VIEW IN TELEGRAM
Docs
The `is` operator - Match an expression against a type or constant pattern - C# reference
Learn about the C# `is` operator that matches an expression against a pattern. The `is` operator returns true when the expression matches the pattern.
❤1