Forwarded from Библиотека задач по C# | тесты, код, задания
Что выведет код?
Anonymous Quiz
12%
Исключение
40%
deadlock
43%
Слово "test"
5%
"test" бесконечное число раз
🥱27👍5🤔4🤩3😢2
🔥 Конкурс: 30 000 ₽ за самую смешную IT-новость
Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.
👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.
🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе
🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.
📅 Сроки: прием новостей до 11 мая включительно
Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8
Осталась неделя — ждем ваших новостей!
Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.
👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.
🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе
🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.
📅 Сроки: прием новостей до 11 мая включительно
Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8
Осталась неделя — ждем ваших новостей!
Google Docs
Конкурс на самую смешную IT-новость
Библиотека программиста запускает конкурс, который взорвет вашу ленту: создайте самую смешную альтернативную версию реальной IT-новости!
Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переворачиваете её с ног на голову, чтобы смеялись…
Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переворачиваете её с ног на голову, чтобы смеялись…
🤔4😁1
.NET Xamarin/MAUI Mobile Developer — Гибрид (Санкт-Петербург)
С#-разработчик — Гибрид (Москва)
C# Разработчик — Офис (Москва)
C# F# Developer Junior — от 80 000, Удалённо
Бустер — Удалённо (весь мир)
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👍1🥱1
🛠 How to: как соблюдать принцип DRY
DRY (Don’t Repeat Yourself) — принцип, согласно которому каждый фрагмент знания должен существовать в системе только в одном месте. Никакого копипаста и дублирующей логики.
Проблема: дублирование валидации
При изменении правила — нужно помнить обновить его везде. Ловушка копипаста.
Решение: вынос логики в общее правило
Теперь в коде
Альтернатива: использование FluentValidation или DataAnnotations
Где чаще всего нарушают DRY в .NET:
• Повторяющиеся SQL-запросы и фильтры
• Повторение одинаковых exception'ов, логов, сообщений
• Дублирование конфигурации
• UI-формы и компоненты
🐸 Библиотека шарписта #буст
DRY (Don’t Repeat Yourself) — принцип, согласно которому каждый фрагмент знания должен существовать в системе только в одном месте. Никакого копипаста и дублирующей логики.
Проблема: дублирование валидации
// Пример плохого кода
if (user.Age < 18)
throw new Exception("User must be at least 18");
...
if (user.Age < 18)
return BadRequest("User must be at least 18");
При изменении правила — нужно помнить обновить его везде. Ловушка копипаста.
Решение: вынос логики в общее правило
public static class ValidationRules
{
public static bool IsAdult(User user) => user.Age >= 18;
}
Теперь в коде
if (!ValidationRules.IsAdult(user))
throw new Exception("User must be at least 18");
// И в другом месте:
if (!ValidationRules.IsAdult(user))
return BadRequest("User must be at least 18");
Альтернатива: использование FluentValidation или DataAnnotations
public class User
{
[Range(18, int.MaxValue, ErrorMessage = "User must be at least 18")]
public int Age { get; set; }
}
Где чаще всего нарушают DRY в .NET:
• Повторяющиеся SQL-запросы и фильтры
• Повторение одинаковых exception'ов, логов, сообщений
• Дублирование конфигурации
• UI-формы и компоненты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1😢1👾1
🧱 7 архитектурных паттернов, которые должен знать каждый программист
В быстро меняющемся мире разработки от программиста всё чаще требуется не просто писать код, а понимать, как правильно проектировать системы.
Архитектурные паттерны — это фундаментальные подходы, помогающие создавать масштабируемые, устойчивые и поддерживаемые решения.
В статье собрали и разобрали 7 архитектурных паттернов, которые сегодня стоит знать каждому разработчику — будь то разработка микросервисов, проектирование API или работа с распределёнными транзакциями.
➡️ Узнать паттерны
🐸 Библиотека шарписта #буст
В быстро меняющемся мире разработки от программиста всё чаще требуется не просто писать код, а понимать, как правильно проектировать системы.
Архитектурные паттерны — это фундаментальные подходы, помогающие создавать масштабируемые, устойчивые и поддерживаемые решения.
В статье собрали и разобрали 7 архитектурных паттернов, которые сегодня стоит знать каждому разработчику — будь то разработка микросервисов, проектирование API или работа с распределёнными транзакциями.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🥱3❤1🥰1
💻 Команда дня: сборка, которой не нужен .NET
Сегодня покажем команду, которая используется для публикации .NET-приложения, готового к развертыванию на целевой платформе (в данном случае — Linux x64):
Расшифровка параметров
•
Основная команда .NET CLI, предназначенная для компиляции приложения и подготовки всех необходимых файлов для его запуска.
•
Указывает конфигурацию сборки. В данном случае Release означает, что будет использована конфигурация для продакшн-сборки, в отличие от Debug, где остаются отладочные символы и меньше оптимизаций.
•
Указывает целевую платформу. Здесь linux-x64 означает, что публикуемое приложение будет запускаться на 64-битной Linux-системе.
•
Делает сборку самодостаточной: весь .NET Runtime и все зависимости включаются в сборку.
Это позволяет запускать приложение на машине без установленного .NET.
Это похоже на то, как если бы вы не просто упаковали ваш код, а положили его вместе с собственной версией операционной системы. Он будет работать «в вакууме», не завися от того, что есть на машине пользователя.
🐸 Библиотека шарписта #буст
Сегодня покажем команду, которая используется для публикации .NET-приложения, готового к развертыванию на целевой платформе (в данном случае — Linux x64):
dotnet publish -c Release -r linux-x64 --self-contained true
Расшифровка параметров
•
dotnet publish
Основная команда .NET CLI, предназначенная для компиляции приложения и подготовки всех необходимых файлов для его запуска.
•
-c Release
Указывает конфигурацию сборки. В данном случае Release означает, что будет использована конфигурация для продакшн-сборки, в отличие от Debug, где остаются отладочные символы и меньше оптимизаций.
•
-r linux-x64
Указывает целевую платформу. Здесь linux-x64 означает, что публикуемое приложение будет запускаться на 64-битной Linux-системе.
•
--self-contained true
Делает сборку самодостаточной: весь .NET Runtime и все зависимости включаются в сборку.
Это позволяет запускать приложение на машине без установленного .NET.
Это похоже на то, как если бы вы не просто упаковали ваш код, а положили его вместе с собственной версией операционной системы. Он будет работать «в вакууме», не завися от того, что есть на машине пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🥱13🔥1🤩1
Please open Telegram to view this post
VIEW IN TELEGRAM
💯31😢8😁2❤1👾1
Рынок труда меняется, а с ним — и ожидания работодателей. Сегодняшний промпт поможет вам шаг за шагом обновить или создать резюме.
Промпт:
Assist me in reviewing, completing, or creating my resume based on my profession. First, ask if I would like to specify what my profession is (to refine the resume to make it more appealing to employers). Then, ask if I would like to paste an existing resume or create a new one from scratch. If I do, ask me to paste it. You will help me identify any missing information or sections. You will ask me to provide the necessary information, step-by-step. If I do not have an existing resume or prefer to create a new one, you will guide me, step-by-step, through the process of providing the necessary information to craft an outstanding and tailored resume. Maintain a conversational approach, divide each section so it has its dedicated space in the conversation (before moving on to the next section, display the inserted information and check to make sure it's correct.) and provide expert explanations for each step.
When the resume is complete, proofread the resume and provide specific suggestions (in bullet points) to make the resume more appealing to potential employers.
💬 Поделитесь в комментариях: когда вы в последний раз обновляли своё резюме 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍2🤔1
💬 ООП вокруг нас
Наш подписчик спросил:
Многие изучают классы и объекты, но не видят, где это всё в жизни применяется. Давайте разберёмся — и на конкретных примерах.
Базовая единица ООП это объект. Объект — это экземпляр класса. Он объединяет в себе данные (поля/свойства) и логику (методы).
Пример:
Вот это — объекты в C#:
•
•
•
•
У всех этих объектов есть состояние и поведение.
Это лишь часть, которая входит в понятие объектно-ориентированного программирования. Далее идут более глубокие принципы: абстракции, наследование, полиморфизм.
💬 Где вы используете ООП? Пишите свои варианты в комментариях👇
P.S. Если хотите задать вопрос сообществу, заполните нашу гугл-форму.
🐸 Библиотека шарписта #междусобойчик
Наш подписчик спросил:
Где используется ООП, никак не могу понять
Многие изучают классы и объекты, но не видят, где это всё в жизни применяется. Давайте разберёмся — и на конкретных примерах.
Базовая единица ООП это объект. Объект — это экземпляр класса. Он объединяет в себе данные (поля/свойства) и логику (методы).
Пример:
class Cat
{
public string Name = "Барсик";
public void Meow()
{
Console.WriteLine("Мяу!");
}
}
// Создание объекта:
Cat cat = new Cat();
cat.iss.oneow();
Вот это — объекты в C#:
•
Button
, Form
, Label
— в WinForms и WPF.•
Player
, Enemy
, Weapon
— в Unity.•
User
, Product
, Order
— в ASP.NET проектах.•
HttpClient
, FileStream
, List<T>
— в стандартной библиотеке.У всех этих объектов есть состояние и поведение.
Это лишь часть, которая входит в понятие объектно-ориентированного программирования. Далее идут более глубокие принципы: абстракции, наследование, полиморфизм.
P.S. Если хотите задать вопрос сообществу, заполните нашу гугл-форму.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱26👍4😁4🤩1🌚1
🦾 Не наступайте на чужие грабли
В мире C# даже опытные разработчики регулярно совершают на ошибки, которые на первый взгляд безобидны, но влекут за собой трудноловимые баги, утечки ресурсов и просадки производительности.
Наткнулись на видео, в котором разбираются 10 самых распостранённых ошибок — от неоптимизированной конкатенации до страшных циклов.
➡️ Смотреть видео
🐸 Библиотека шарписта #буст
В мире C# даже опытные разработчики регулярно совершают на ошибки, которые на первый взгляд безобидны, но влекут за собой трудноловимые баги, утечки ресурсов и просадки производительности.
Наткнулись на видео, в котором разбираются 10 самых распостранённых ошибок — от неоптимизированной конкатенации до страшных циклов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🕖 Почему база данных тормозит ваше приложение и как это исправить
Когда приложение начинает «тормозить», несмотря на тщательно оптимизированный код и обновлённые библиотеки, причина часто кроется не в логике приложения, а в базе данных.
Запросы к БД могут занимать секунды, превращая миллисекундные операции в узкое место производительности.
Если не решить эту проблему, API будет медленным, пользователи — недовольными, а система — нестабильной при высокой нагрузке.
➡️ Узнать как решить проблемы с БД
🐸 Библиотека шарписта #буст
Когда приложение начинает «тормозить», несмотря на тщательно оптимизированный код и обновлённые библиотеки, причина часто кроется не в логике приложения, а в базе данных.
Запросы к БД могут занимать секунды, превращая миллисекундные операции в узкое место производительности.
Если не решить эту проблему, API будет медленным, пользователи — недовольными, а система — нестабильной при высокой нагрузке.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁11👍2🥱2👾1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁26👍4❤3
Недавно в сабреддите C# разгорелась дискуссия вокруг предупреждения компилятора CA1859: «Используйте конкретные типы, когда это возможно, для улучшения производительности». Это подняло вечный вопрос: стоит ли жертвовать абстракцией ради скорости?
⚙️ Аргументы за использование конкретных типов:
— Конкретные типы позволяют избежать накладных расходов, связанных с виртуальными вызовами и аллокациями.
— Внутренние методы, использующие конкретные типы, могут быть проще и эффективнее, так как они не требуют обработки различных реализаций интерфейсов.
🧩 Аргументы в пользу абстракций:
— Использование интерфейсов, таких как
IEnumerable
или IDictionary
, позволяет методам работать с различными реализациями, повышая переиспользуемость кода.— Абстракции облегчают написание модульных тестов, позволяя подменять зависимости мок-объектами.
💬 А что выбирает вы? Гибкость или быструю работу? Пишите свои мысли в комментарии👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
📰 Еженедельный дайджест
Собрали для вас материалы, которые вы могли пропустить.
— Почему переход с C# на F# может быть выгоден для бизнеса
Компания Ada Beat делится опытом перехода с C# на F#, отмечая, что это приводит к упрощению кода, снижению затрат на поддержку и ускорению вывода продуктов на рынок.
— Extension members в C# 14
В блоге разработчиков .NET рассказали о новой фиче — extension members, расширяющей привычные extension methods. Теперь разработчики могут добавлять к существующим типам не только методы, но и свойства — как экземплярные, так и статические.
— Почему стартап Tracebit выбрал C#
В блоге Microsoft CTO стартапа Tracebit, Сэм Кокс, делится причинами выбора C# для создания B2B SaaS-продукта в области безопасности.
— Новый выпуск подкаста .NET Rocks
Ведущие обсудили извечный вопрос: как найти баланс между архитектурным дизайном и непосредственным написанием кода.
— 7 архитектурных паттернов, которые должен знать каждый программист
— Почему база данных тормозит ваше приложение и как это исправить
🐸 Библиотека шарписта #свежак
Собрали для вас материалы, которые вы могли пропустить.
— Почему переход с C# на F# может быть выгоден для бизнеса
Компания Ada Beat делится опытом перехода с C# на F#, отмечая, что это приводит к упрощению кода, снижению затрат на поддержку и ускорению вывода продуктов на рынок.
— Extension members в C# 14
В блоге разработчиков .NET рассказали о новой фиче — extension members, расширяющей привычные extension methods. Теперь разработчики могут добавлять к существующим типам не только методы, но и свойства — как экземплярные, так и статические.
— Почему стартап Tracebit выбрал C#
В блоге Microsoft CTO стартапа Tracebit, Сэм Кокс, делится причинами выбора C# для создания B2B SaaS-продукта в области безопасности.
— Новый выпуск подкаста .NET Rocks
Ведущие обсудили извечный вопрос: как найти баланс между архитектурным дизайном и непосредственным написанием кода.
— 7 архитектурных паттернов, которые должен знать каждый программист
— Почему база данных тормозит ваше приложение и как это исправить
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🥰1😁1
Forwarded from Библиотека задач по C# | тесты, код, задания
В чем разница между Convert.ToString() и ToString()?
👾 — Convert.ToString() обрабатывает значения null, а ToString() — нет
👍 — ToString() выводит данные в соответствии с предоставленным форматом
🥰 — Convert.ToString() обрабатывает только значения null
⚡️ — ToString() обрабатывает значения null, а Convert.ToString() — нет
🐸 Библиотека задач по C#
👾 — Convert.ToString() обрабатывает значения null, а ToString() — нет
👍 — ToString() выводит данные в соответствии с предоставленным форматом
🥰 — Convert.ToString() обрабатывает только значения null
Please open Telegram to view this post
VIEW IN TELEGRAM
👍48👾29🌚5😁2❤1
Senior C# Developer — до 400 000 ₽, Удалёнка.
Middle Full-stack разработчик (C#/TypeScript) — от 200 000 ₽, Удалёнка.
C#/.NET-разработчик — Удалёнка (Нижний Новгород).
Backend-разработчик (.NET) — Удалёнка.
Senior Developer — до 600 000 ₽, Удалёнка.
Бустер — Удалённо (в любом городе мира).
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4🔥3
💻 Компактный гид по основам языка
Нашли для вас шпаргалку, которая охватывает все основные темы языка. Код можно скопировать и поиграться в своей среде разработки.
➡️ Поделитесь с младшими коллегами
🐸 Библиотека шарписта #буст
Нашли для вас шпаргалку, которая охватывает все основные темы языка. Код можно скопировать и поиграться в своей среде разработки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😁5🥱1
✅ Грин-флаги в вакансиях: 10 признаков хорошего работодателя
Пока одни сосредоточены на том, как произвести впечатление на работодателя, опытные соискатели внимательно читают вакансии и ищут признаки того, что перед ними достойная компания.
В статье подробно о том, как распознать хорошего работодателя ещё до собеседования, просто внимательно вчитавшись в текст вакансии.
📎 Читать статью
🐸 Библиотека шарписта
Пока одни сосредоточены на том, как произвести впечатление на работодателя, опытные соискатели внимательно читают вакансии и ищут признаки того, что перед ними достойная компания.
В статье подробно о том, как распознать хорошего работодателя ещё до собеседования, просто внимательно вчитавшись в текст вакансии.
Please open Telegram to view this post
VIEW IN TELEGRAM
WeakReference
«отпустила» объектВ .NET слабые ссылки позволяют ссылаться на объект, не препятствуя сборщику мусора его удалить. Это полезно в кэшах, пулах объектов и других случаях, где важно избегать утечек памяти.
Но как проверить, что объект удаляется?
Можно использовать пример:
class MyObject
{
~MyObject()
{
Console.WriteLine("MyObject был удалён сборщиком мусора");
}
}
class Program
{
static void Main()
{
WeakReference weakRef = test();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Console.WriteLine("После сборки мусора: " + (weakRef.IsAlive ? "Жив" : "Удалён"));
}
static WeakReference test() {
var obj = new MyObject();
WeakReference weakRef = new WeakReference(obj);
Console.WriteLine("До удаления ссылки: " + (weakRef.IsAlive ? "Жив" : "Удалён"));
return weakRef;
}
}
•
IsAlive
показывает, жив ли объект.•
GC.Collect()
+ GC.WaitForPendingFinalizers()
заставляют сборщик мусора немедленно освободить неиспользуемые объекты.• Деструктор
~MyObject()
позволяет наглядно убедиться, что объект удалён.Метод
IsAlive
может показывать, что объект жив даже после GC.Collect()
, если объект ещё не финализирован или находится в очереди на финализацию.Для надёжности можно использовать
TryGetTarget
вместо IsAlive
.Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤3🔥1😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁26🤔3💯2❤1