StepOne | Степан Минин – Telegram
StepOne | Степан Минин
3.42K subscribers
247 photos
35 videos
6 files
312 links
StepOne by Степан Минин @ststphn

Твой первый шаг к успеху в программировании

Закрытый тг канал https://news.1rj.ru/str/tribute/app?startapp=slOA

По вопросам рекламы @Spiral_Yuri

Ютуб https://www.youtube.com/@steponeit
Download Telegram
Как вы заработали свою первую 1000 рублей в IT?

Первые деньги мне принёс заказ на создание Telegram бота на Python!
Anonymous Poll
11%
Оплачиваемая стажировка
48%
Работа
6%
Репетиторство / наставничество / менторство
20%
Фриланс
11%
Всё ещё нищук (
4%
Другое (пишите в комментариях)
🤔2👍1🤯1😱1🙏1🐳1🌭1
Что означает «CAP» в CAP теореме?

1️⃣ Consistency, Availability, Partition Tolerance

2️⃣ Control, Allocation, Process

3️⃣ Code, Architecture, Pipeline

4️⃣ Connection Access Protocol

Правильный ответ: 1️⃣

Пояснение:

CAP теорема утверждает, что в любой распределённой системе можно добиться только 2 из 3 гарантий.

Consistency - данные между узлами системы согласованы и не противоречат друг другу

Availability - любой request к системе завершается response

Partition Tolerance - выход из строя отдельных узлов системы не влияет на её общую работоспособность


Ставь 🐳 если тебя это спрашивали на собесе
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳24👍13😱41👌1
Слово вкатуна. Харды на собесе

Криминальная драма, основанная на реальных событиях, все совпадения - случайны.

Отчаявшись попасть на стажировку в 😀 после соревнования Контеста, 16-летний Андрей возвращается домой и случайно видит, как пацаны за гаражами решают литкод.

Он присоединяется к пацанами, и работяги-джейсоноукладчики знакомят Андрея с учением Назрана. Благодаря им он узнает, что учить алгоритмы не обязательно (этим занимаются только стажеры-"чушпаны") - достаточно солгать в резюме про 3 года опыта, придумать 2-3 фейковых места работы - и можно будет "вкатиться" в Сбер на наносеки 200к/месяц.

Андрей крадет заначку у матери и поступает в академию Вкатышей. Но со временем Андрей понимает, что обучение в академии - это скам, где вместо реальных знаний его натаскивают на вопросы на собеседованиях. Ему обещают выдать куратора, который будет шептать в наушник ему ответы на вопросы и поможет пройти испытательный, а взамен он должен будет несколько лет отдавать половину своей зарплаты.

И когда Андрей пытается «соскочить», выясняется, что теперь он должен заплатить штраф размером в полмиллиона рублей…

#пятничное от @senior_unicorn
Please open Telegram to view this post
VIEW IN TELEGRAM
😁23🔥43🥱2👍1
Дорогие подписчики StepOne 🎄

От всей души поздравляю вас с наступающим 2024 годом!

Желаю как можно меньше красноглазить с залипанием в устройства, и как можно больше проводить времени с семьёй, друзьями и близкими ❤️

Пусть у вас всё будет хорошо!

В следующем году будет много интересного...😈
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉398🥰2👍1
Программисты на Си такие:

О да, valgrind 🤩
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10🍌4🤯2👍1🤩1
Backlog senior разработчика be like:
😁26🤣3🤯2💯2😢1
StepOne | Степан Минин
Visitor NET. Уникальный проект Когда я начал рефакторинг своего интерпретатора, передо мной встал вопрос, как реализовывать паттерн Visitor. Его нужно было применить несколько раз, поскольку задач по работе с AST немало: многоэтапный статический анализ,…
Casting Performance 🤖

Потихоньку влился в рабочие процессы, и наконец готов выдать первый технический пост в этом году!

Сегодня мы поговорим о производительности приведения типов в разных сценариях, касающихся ковариантности и контравариантности.

Я написал простенький бенчмарк, чтобы проверить скорость работы с типами в 5 разных сценариях:

1️⃣ Direct - полное соответствие сигнатур

2️⃣ Implicit - неявное приведение благодаря особенностям вариантности

3️⃣ Explicit - использование оператора явного приведения типов

4️⃣ As - безопасное приведение через оператор as

5️⃣ Dynamic - отключение статической типизации ключевым словом dynamic

Гипотеза: Dynamic самый медленный, Explicit и As чуть помедленнее, чем Implicit и Direct

Результаты на скрине её подтверждают!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍51👏1🤔1
Неочевидные проблемы

Недавно ко мне обратился подписчик с просьбой разобраться в проблеме.

Есть присланный фрагмент кода, на котором проверяется равенство строк.

Загвоздка в том, что при видимом одинаковом значении "5.1$1" проверка даёт false.

Опытные могли догадаться, что дело в так называемых скрытых символах.

При обработке приложением строк, пришедших извне, надо быть готовым к такому сценарию.

Для начала можно посмотреть в дебаге на результат метода ToCharArray(): он покажет весь массив символов, и врага можно будет увидеть в лицо.

Как с ними бороться, зависит от ваших потребностей и возможностей:

▪️Ожидаете их только по краям? Тогда сойдёт Trim

▪️Когда хотите почистить внутри строки, можно прибегнуть к вызову char.IsControl()

▪️При особых запросах на очистку лишних символов уже придётся прибегнуть к кастомным фильтрациям с помощью статических методов char (например, IsLetter || IsDigit) ну или регулярок
👍281🔥1
Строки и теоретико-множественные операции 🧠

Добро пожаловать в экспериментальную рубрику "сомнительно, но окЭй" 😅

Допустим, у нас есть некоторая строка и набор символов.

Надо решить две задачи:

1️⃣Проверить содержит ли строка хотя бы один символ из набора. Для этого надо проверить пересечение двух множеств - строка & символы != пустое множество

2️⃣Проверить содержит ли строка все указанные символы. Тут налицо математическое определение подмножества.

LINQ в C#, а также API интерфейса ISet<> даёт все возможности для лаконичного программирования указанных решений:

public static class StringExtensions
{
public static bool ContainsAnySymbol(
this string str,
IEnumerable<char> symbols) =>
str.Intersect(symbols).Any();

public static bool ContainsAllSymbols(
this string str,
IEnumerable<char> symbols) =>
symbols.ToHashSet().IsSubsetOf(str.ToHashSet());
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🤔9🌭41🥴1🍌1
Незамеченная фишка C# 12 😱

Уверен, вы могли упустить это нововведение в последней версии языка - лично я узнал о нём только благодаря подсказкам IDE 😱

Теперь классы, структуры и интерфейсы с пустым телом можно объявлять без фигурных скобок, прямо как рекорды!

Соответственно, следующий фрагмент кода скомпилируется:

class MyClass;

abstract class MyAbstractClass;

struct MyStruct;

interface IMarkerInterface;
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🤯6👍51
Языком 2023 года по индексу TIOBE назван C#, который сохранил 5 место, но стал лидером по росту популярности (+1.43%) 🥳

Жаба уже одной в могиле, ведь она показала один из самых высоких спадов популярности (-4.34%) ☠️

https://www.tiobe.com/tiobe-index/
👍23🔥3🍌31
Узнали? Согласны?
😁18🔥12🥴54💯4🥱3
«Когда мера становится целью, она перестает быть хорошей мерой» - закон Гудхарта 🧠

Страшно подумать - принцип был сформулирован почти 50 лет назад, но много технических компаний и эффективных менеджеров продолжают его не понимать!

Если ваша цель снизить количество легаси - удалите кодовую базу и начните всё сначала.

Если ваша цель увеличить доход - покройте все экраны рекламой.

Если ваша цель писать больше кода - добавляйте бессмысленные комментарии.

Если ваша цель фиксить больше багов - чините самое простое.

Если ваша цель делать больше пулл реквестов - время вылизывать readme.

Если ваша цель увеличить вовлечённость - превратите всё в кликабельные кнопки.

Если ваша цель уменьшить количество отчётов об ошибке - усложните отправку отчёта.

Если ваша цель быстрая загрузка страницы - удалите всё мультимедиа, JavaScript и CSS с вашего сайта.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24😁9💯52🤔1🥱1
Рекомендую к прочтению

В прошлом году у меня возникла необходимость систематизировать в моменте свои знания об асинхронном программировании в C# и при этом иметь постоянную шпаргалку под рукой.

Собственно, эта книга идеально решила эту потребность - в ней описаны все необходимые аспекты, при чём очень доступно и концептуально, на уровне идеи, а не конкретного кода.

Вы даже узнаете, в чём преимущество async / await для ASP NET приложений!

Бумажный вариант стоит недорого, сама книга имеет небольшой объём - всего 119 страниц.

Так что, однозначный лайк👍🏻
👍40🔥74
Какой сахар мне хотелось бы видеть в новых версиях C#

Вас не подвело зрение, мне действительно не хватает кое-какого синтаксического сахара)

Большинство разработчиков знакомы с оператором ??

Он делает эквивалентными две следующие строчки:

return expr is null ? fallbackValue : expr

// ...

return expr ?? fallbackValue


Однако, в моей практике часто встречалась ситуация, когда необходимо было сделать обратный процесс:

return expr is null ? null : GetResult(expr)


Хотелось бы сократить эту запись до одного оператора.

Не важно, как он будет называться, варианты: ?!, ?:, ???

Тогда, сокращение будет выглядеть так:

return expr ??? GetResult(expr)
🥴26👍12😁5🤯3👌1🕊1💯1
Priority Queue

В .NET 6 завезли такую настоящую объекто-ориентированную очередь с приоритетами.

Объектно-ориентированная в смысле поддержки своих формальных типовых параметров:

▪️TElement - тип содержимого очереди

▪️TPriority - тип приоритета содержимого очереди

По сути своей, это сортирующая коллекция, в которой приоритет выступает ключом сортировки.

Причём в конструктор очереди, можно передать экземпляр IComparer<T>, чтобы, например, определить направление сортировки:

// сортируем по убыванию некоторой даты
var queue = new PriorityQueue<string, DateTimeOffset>(
Comparer<DateTimeOffset>.Create((x, y) => y.CompareTo(x)));

queue.Enqueue("abv", DateTimeOffset.UtcNow.Subtract(TimeSpan.FromDays(2)));
queue.Enqueue("ghj", DateTimeOffset.UtcNow.Subtract(TimeSpan.FromDays(3)));
queue.Enqueue("123", DateTimeOffset.UtcNow.Subtract(TimeSpan.FromDays(1)));

while (queue.TryDequeue(out var card, out var addedOn))
{
Console.WriteLine($"{card}, {addedOn}");
}
// чтение выведет: 123 | abv | ghj


Получается, можно постоянно туда что-то докидывать и получать отсортированные подвыборки, помимо решения задачи приоритизирования.

Из недостатков можно отметить, что класс PriorityQueue<TElement, TPriority> не реализует никаких LINQ интерфейсов, или интерфейсов коллекций, поэтому совместимость с другими API придётся реализовывать самому.

Больше прочитать про внутреннее устройство класса можно в статье Вадима Мартынова на Хабре
👍242🔥2
Всех с началом рабочей недели!

«Самая зрелая реакция — это радоваться его успеху. Вам следует вознаградить его за производительность и признать его успешность, особенно если это очень качественный сотрудник.



Кроме того, мы можете учиться у этих упорно трудящихся людей. Если их показатели крайне высоки, узнайте, как им это удаётся.»

https://habr.com/ru/articles/791264/
😁6👍4🔥2🤔1🤣1
Новые выражения коллекций в .NET 8

C# 12 привнёс лаконичный синтаксис для инициализации коллекций, открыв много новых возможностей.

1️⃣ Квадратные скобки

Теперь списки, массивы, спаны и прочее можно объявлять как в JavaScript!

Правда, в случае переменных нужно обязательно указывать target type:

int[] intArray = [1, 2, 3];
List<int> intList = [4, 5, 6];
ImmutableArray<object> emptyCollection = [];


Это работает и для свойств, полей, параметров методов и так далее.

2️⃣ Развёртка коллекции

Опять же, подобное уже было в JavaScript - оператором .. можно несколько коллекций соединять в один плоский массив:

string[] vowels = ["a", "e", "i", "o", "u"];
string[] consonants = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
"n", "p", "q", "r", "s", "t", "v", "w", "x", "z"];
string[] alphabet = [.. vowels, .. consonants, "y"];


3️⃣ Поддержка пользовательских типов данных

Если у вас есть свой тип данных, для которого хочется подключить выражения коллекций, то необходимо сделать три вещи:

Реализовать интерфейс IEnumerable<T>
Написать статический класс билдер с фабричным методом, который создаёт объект вашего типа из коллекции
Пометить тип атрибутом [CollectionBuilder], указав класс строитель и имя фабричного метода

Подробнее можно прочитать по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤‍🔥3🔥21🐳1