Как вы заработали свою первую 1000 рублей в IT?
Первые деньги мне принёс заказ на создание Telegram бота на Python!
Первые деньги мне принёс заказ на создание 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 - выход из строя отдельных узлов системы не влияет на её общую работоспособность
Ставь 🐳 если тебя это спрашивали на собесе
Правильный ответ:
Пояснение:
Consistency - данные между узлами системы согласованы и не противоречат друг другу
Availability - любой request к системе завершается response
Partition Tolerance - выход из строя отдельных узлов системы не влияет на её общую работоспособность
Ставь 🐳 если тебя это спрашивали на собесе
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳24👍13😱4❤1👌1
Forwarded from Сеньор Юникорн | Владимир Маслов
Слово вкатуна. Харды на собесе
Криминальная драма, основанная на реальных событиях, все совпадения - случайны.
Отчаявшись попасть на стажировку в😀 после соревнования Контеста, 16-летний Андрей возвращается домой и случайно видит, как пацаны за гаражами решают литкод.
Он присоединяется к пацанами, и работяги-джейсоноукладчики знакомят Андрея с учением Назрана. Благодаря им он узнает, что учить алгоритмы не обязательно (этим занимаются только стажеры-"чушпаны") - достаточно солгать в резюме про 3 года опыта, придумать 2-3 фейковых места работы - и можно будет "вкатиться" в Сбер нананосеки 200к/месяц.
Андрей крадет заначку у матери и поступает в академию Вкатышей. Но со временем Андрей понимает, что обучение в академии - это скам, где вместо реальных знаний его натаскивают на вопросы на собеседованиях. Ему обещают выдать куратора, который будет шептать в наушник ему ответы на вопросы и поможет пройти испытательный, а взамен он должен будет несколько лет отдавать половину своей зарплаты.
И когда Андрей пытается «соскочить», выясняется, что теперь он должен заплатить штраф размером в полмиллиона рублей…
#пятничное от @senior_unicorn
Криминальная драма, основанная на реальных событиях, все совпадения - случайны.
Отчаявшись попасть на стажировку в
Он присоединяется к пацанами, и работяги-джейсоноукладчики знакомят Андрея с учением Назрана. Благодаря им он узнает, что учить алгоритмы не обязательно (этим занимаются только стажеры-"чушпаны") - достаточно солгать в резюме про 3 года опыта, придумать 2-3 фейковых места работы - и можно будет "вкатиться" в Сбер на
Андрей крадет заначку у матери и поступает в академию Вкатышей. Но со временем Андрей понимает, что обучение в академии - это скам, где вместо реальных знаний его натаскивают на вопросы на собеседованиях. Ему обещают выдать куратора, который будет шептать в наушник ему ответы на вопросы и поможет пройти испытательный, а взамен он должен будет несколько лет отдавать половину своей зарплаты.
И когда Андрей пытается «соскочить», выясняется, что теперь он должен заплатить штраф размером в полмиллиона рублей…
#пятничное от @senior_unicorn
Please open Telegram to view this post
VIEW IN TELEGRAM
😁23🔥4❤3🥱2👍1
StepOne | Степан Минин
Завтра начнётся последний месяц 2023 года, а значит пора подвести итоги ноября 🤩 В этом месяце постарался выдать побольше эксклюзивных материалов 🤫 🔥 Уникальный гайд по акклиматизации на новой работе 🔥 Разоблачение стагнации процессов собеседования OZON…
Год выходит на финишную прямую, как и контент в декабре на этом канале 🥶
Вот самые важные посты последнего месяца, которые можно перечитать ещё раз🤔
⚡️ Как растёт моя архитектурная компетенция на примере пет проекта
⚡️ Хитросделанные partial'ы
⚡️ Самое понятное объяснение ковариантности и контравариантности
⚡️ Новое и абсолютно уникальное прочтение паттерна Visitor в моём исполнении
Вот самые важные посты последнего месяца, которые можно перечитать ещё раз
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍3⚡1❤1
Дорогие подписчики StepOne 🎄
От всей души поздравляю вас с наступающим 2024 годом!
Желаю как можно меньше красноглазить с залипанием в устройства, и как можно больше проводить времени с семьёй, друзьями и близкими ❤️
Пусть у вас всё будет хорошо!
В следующем году будет много интересного...😈
От всей души поздравляю вас с наступающим 2024 годом!
Желаю как можно меньше красноглазить с залипанием в устройства, и как можно больше проводить времени с семьёй, друзьями и близкими ❤️
Пусть у вас всё будет хорошо!
В следующем году будет много интересного...😈
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉39❤8🥰2👍1
StepOne | Степан Минин
ASP NET 8 наконец-то добавит многообразие зависимостей 🥳 Реализовано это будет через ключи (например строковые). Возвращаясь к старому примеру, он преобразится следующим образом: public interface IDependency {} public class DependencyImplOne : IDependency…
Собрал для вас все посты канала про полиморфное поведение DI в одной статье на Хабр!
Прочитать и поставить плюсик➕ можно по ссылке:
https://habr.com/ru/companies/ruvds/articles/776768/
P.S. Kandinsky продолжает выручать - на этот раз попробовал 3.0 версию 🤯
Прочитать и поставить плюсик
https://habr.com/ru/companies/ruvds/articles/776768/
P.S. Kandinsky продолжает выручать - на этот раз попробовал 3.0 версию 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Dependency Injection контейнеры .NET, допускающие полиморфное поведение
Иногда случается так, что при разработке приложения на платформе .NET с внедрением зависимостей и сервисами от контейнера требуется поддержка полиморфного поведения. Когда, например, у интерфейса есть...
👍16❤5🔥5
Программисты на Си такие:
О да, valgrind 🤩
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10🍌4🤯2👍1🤩1
StepOne | Степан Минин
Visitor NET. Уникальный проект Когда я начал рефакторинг своего интерпретатора, передо мной встал вопрос, как реализовывать паттерн Visitor. Его нужно было применить несколько раз, поскольку задач по работе с AST немало: многоэтапный статический анализ,…
Casting Performance 🤖
Потихоньку влился в рабочие процессы, и наконец готов выдать первый технический пост в этом году!
Сегодня мы поговорим о производительности приведения типов в разных сценариях, касающихся ковариантности и контравариантности.
Я написал простенький бенчмарк, чтобы проверить скорость работы с типами в 5 разных сценариях:
1️⃣ Direct - полное соответствие сигнатур
2️⃣ Implicit - неявное приведение благодаря особенностям вариантности
3️⃣ Explicit - использование оператора явного приведения типов
4️⃣ As - безопасное приведение через оператор
5️⃣ Dynamic - отключение статической типизации ключевым словом
Гипотеза: Dynamic самый медленный, Explicit и As чуть помедленнее, чем Implicit и Direct
Результаты на скрине её подтверждают!
Потихоньку влился в рабочие процессы, и наконец готов выдать первый технический пост в этом году!
Сегодня мы поговорим о производительности приведения типов в разных сценариях, касающихся ковариантности и контравариантности.
Я написал простенький бенчмарк, чтобы проверить скорость работы с типами в 5 разных сценариях:
as dynamicГипотеза: Dynamic самый медленный, Explicit и As чуть помедленнее, чем Implicit и Direct
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5❤1👏1🤔1
Неочевидные проблемы
Недавно ко мне обратился подписчик с просьбой разобраться в проблеме.
Есть присланный фрагмент кода, на котором проверяется равенство строк.
Загвоздка в том, что при видимом одинаковом значении
Опытные могли догадаться, что дело в так называемых скрытых символах.
При обработке приложением строк, пришедших извне, надо быть готовым к такому сценарию.
Для начала можно посмотреть в дебаге на результат метода
Как с ними бороться, зависит от ваших потребностей и возможностей:
▪️Ожидаете их только по краям? Тогда сойдёт
▪️Когда хотите почистить внутри строки, можно прибегнуть к вызову
▪️При особых запросах на очистку лишних символов уже придётся прибегнуть к кастомным фильтрациям с помощью статических методов
Недавно ко мне обратился подписчик с просьбой разобраться в проблеме.
Есть присланный фрагмент кода, на котором проверяется равенство строк.
Загвоздка в том, что при видимом одинаковом значении
"5.1$1" проверка даёт false.Опытные могли догадаться, что дело в так называемых скрытых символах.
При обработке приложением строк, пришедших извне, надо быть готовым к такому сценарию.
Для начала можно посмотреть в дебаге на результат метода
ToCharArray(): он покажет весь массив символов, и врага можно будет увидеть в лицо.Как с ними бороться, зависит от ваших потребностей и возможностей:
▪️Ожидаете их только по краям? Тогда сойдёт
Trim▪️Когда хотите почистить внутри строки, можно прибегнуть к вызову
char.IsControl()▪️При особых запросах на очистку лишних символов уже придётся прибегнуть к кастомным фильтрациям с помощью статических методов
char (например, IsLetter || IsDigit) ну или регулярок👍28❤1🔥1
Строки и теоретико-множественные операции 🧠
Добро пожаловать в экспериментальную рубрику "сомнительно, но окЭй" 😅
Допустим, у нас есть некоторая строка и набор символов.
Надо решить две задачи:
1️⃣ Проверить содержит ли строка хотя бы один символ из набора. Для этого надо проверить пересечение двух множеств -
2️⃣ Проверить содержит ли строка все указанные символы. Тут налицо математическое определение
LINQ в C#, а также API интерфейса
Добро пожаловать в экспериментальную рубрику "сомнительно, но окЭй" 😅
Допустим, у нас есть некоторая строка и набор символов.
Надо решить две задачи:
строка & символы != пустое множествоподмножества.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🌭4❤1🥴1🍌1
Незамеченная фишка C# 12 😱
Уверен, вы могли упустить это нововведение в последней версии языка - лично я узнал о нём только благодаря подсказкам IDE😱
Теперь классы, структуры и интерфейсы с пустым телом можно объявлять без фигурных скобок, прямо как рекорды!
Соответственно, следующий фрагмент кода скомпилируется:
Уверен, вы могли упустить это нововведение в последней версии языка - лично я узнал о нём только благодаря подсказкам IDE
Теперь классы, структуры и интерфейсы с пустым телом можно объявлять без фигурных скобок, прямо как рекорды!
Соответственно, следующий фрагмент кода скомпилируется:
class MyClass;
abstract class MyAbstractClass;
struct MyStruct;
interface IMarkerInterface;
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🤯6👍5❤1
Языком 2023 года по индексу TIOBE назван C#, который сохранил 5 место, но стал лидером по росту популярности (+1.43%) 🥳
Жаба уже одной в могиле, ведь она показала один из самых высоких спадов популярности (-4.34%) ☠️
https://www.tiobe.com/tiobe-index/
Жаба уже одной в могиле, ведь она показала один из самых высоких спадов популярности (-4.34%) ☠️
https://www.tiobe.com/tiobe-index/
👍23🔥3🍌3❤1
«Когда мера становится целью, она перестает быть хорошей мерой» - закон Гудхарта 🧠
Страшно подумать - принцип был сформулирован почти 50 лет назад, но много технических компаний и эффективных менеджеров продолжают его не понимать!
Если ваша цель снизить количество легаси - удалите кодовую базу и начните всё сначала.
Если ваша цель увеличить доход - покройте все экраны рекламой.
Если ваша цель писать больше кода - добавляйте бессмысленные комментарии.
Если ваша цель фиксить больше багов - чините самое простое.
Если ваша цель делать больше пулл реквестов - время вылизывать readme.
Если ваша цель увеличить вовлечённость - превратите всё в кликабельные кнопки.
Если ваша цель уменьшить количество отчётов об ошибке - усложните отправку отчёта.
Если ваша цель быстрая загрузка страницы - удалите всё мультимедиа, JavaScript и CSS с вашего сайта.
Страшно подумать - принцип был сформулирован почти 50 лет назад, но много технических компаний и эффективных менеджеров продолжают его не понимать!
Если ваша цель снизить количество легаси - удалите кодовую базу и начните всё сначала.
Если ваша цель увеличить доход - покройте все экраны рекламой.
Если ваша цель писать больше кода - добавляйте бессмысленные комментарии.
Если ваша цель фиксить больше багов - чините самое простое.
Если ваша цель делать больше пулл реквестов - время вылизывать readme.
Если ваша цель увеличить вовлечённость - превратите всё в кликабельные кнопки.
Если ваша цель уменьшить количество отчётов об ошибке - усложните отправку отчёта.
Если ваша цель быстрая загрузка страницы - удалите всё мультимедиа, JavaScript и CSS с вашего сайта.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24😁9💯5❤2🤔1🥱1
Рекомендую к прочтению
В прошлом году у меня возникла необходимость систематизировать в моменте свои знания об асинхронном программировании в C# и при этом иметь постоянную шпаргалку под рукой.
Собственно, эта книга идеально решила эту потребность - в ней описаны все необходимые аспекты, при чём очень доступно и концептуально, на уровне идеи, а не конкретного кода.
Вы даже узнаете, в чём преимущество
Бумажный вариант стоит недорого, сама книга имеет небольшой объём - всего 119 страниц.
Так что, однозначный лайк👍🏻
В прошлом году у меня возникла необходимость систематизировать в моменте свои знания об асинхронном программировании в C# и при этом иметь постоянную шпаргалку под рукой.
Собственно, эта книга идеально решила эту потребность - в ней описаны все необходимые аспекты, при чём очень доступно и концептуально, на уровне идеи, а не конкретного кода.
Вы даже узнаете, в чём преимущество
async / await для ASP NET приложений!Бумажный вариант стоит недорого, сама книга имеет небольшой объём - всего 119 страниц.
Так что, однозначный лайк👍🏻
👍40🔥7❤4
StepOne | Степан Минин
Год выходит на финишную прямую, как и контент в декабре на этом канале 🥶 Вот самые важные посты последнего месяца, которые можно перечитать ещё раз 🤔 ⚡️ Как растёт моя архитектурная компетенция на примере пет проекта ⚡️ Хитросделанные partial'ы ⚡️ Самое…
Как же летит время, январь почти всё 🤯
Надеюсь вы хорошо провели праздники, да и для канала месяц в целом прошёл неплохо
⚡️ Начал год со статьи про полиморфизм в DI на Хабре
⚡️ Сравниваем производительность разных способов приведения типов в ковариантном и контравариантных сценариях
⚡️ Пособие по борьбе со скрытыми символами
⚡️ Новый сахар в C# 12
Надеюсь вы хорошо провели праздники, да и для канала месяц в целом прошёл неплохо
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6⚡2🔥1
Какой сахар мне хотелось бы видеть в новых версиях 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 завезли такую настоящую объекто-ориентированную очередь с приоритетами.
Объектно-ориентированная в смысле поддержки своих формальных типовых параметров:
▪️
▪️
По сути своей, это сортирующая коллекция, в которой приоритет выступает ключом сортировки.
Причём в конструктор очереди, можно передать экземпляр
Получается, можно постоянно туда что-то докидывать и получать отсортированные подвыборки, помимо решения задачи приоритизирования.
Из недостатков можно отметить, что класс
Больше прочитать про внутреннее устройство класса можно в статье Вадима Мартынова на Хабре
В .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 придётся реализовывать самому.Больше прочитать про внутреннее устройство класса можно в статье Вадима Мартынова на Хабре
Хабр
.NET 6: PriorityQueue
В .NET 6 появилась новая коллекция — PriorityQueue<TElement,TPriority>. До этого очереди с приоритетами уже были в .NET, но только в виде внутренних классов — они использовались под капотом...
👍24❤2🔥2
Всех с началом рабочей недели!
«Самая зрелая реакция — это радоваться его успеху. Вам следует вознаградить его за производительность и признать его успешность, особенно если это очень качественный сотрудник.
…
Кроме того, мы можете учиться у этих упорно трудящихся людей. Если их показатели крайне высоки, узнайте, как им это удаётся.»
https://habr.com/ru/articles/791264/
«Самая зрелая реакция — это радоваться его успеху. Вам следует вознаградить его за производительность и признать его успешность, особенно если это очень качественный сотрудник.
…
Кроме того, мы можете учиться у этих упорно трудящихся людей. Если их показатели крайне высоки, узнайте, как им это удаётся.»
https://habr.com/ru/articles/791264/
Хабр
Как реагировать на то, что вы не единственный (работодатель)?
Когда в начале пандемии мир внезапно был вынужден работать из дома, это глубоко потрясло многих руководителей. Я постоянно учусь руководству и был лидером более сорока лет, в том числе работал...
😁6👍4🔥2🤔1🤣1
Новые выражения коллекций в .NET 8
C# 12 привнёс лаконичный синтаксис для инициализации коллекций, открыв много новых возможностей.
1️⃣ Квадратные скобки
Теперь списки, массивы, спаны и прочее можно объявлять как в JavaScript!
Правда, в случае переменных нужно обязательно указывать
Это работает и для свойств, полей, параметров методов и так далее.
2️⃣ Развёртка коллекции
Опять же, подобное уже было в JavaScript - оператором
3️⃣ Поддержка пользовательских типов данных
Если у вас есть свой тип данных, для которого хочется подключить выражения коллекций, то необходимо сделать три вещи:
✅ Реализовать интерфейс
✅ Написать статический класс билдер с фабричным методом, который создаёт объект вашего типа из коллекции
✅ Пометить тип атрибутом
Подробнее можно прочитать по ссылке
C# 12 привнёс лаконичный синтаксис для инициализации коллекций, открыв много новых возможностей.
Теперь списки, массивы, спаны и прочее можно объявлять как в JavaScript!
Правда, в случае переменных нужно обязательно указывать
target type:int[] intArray = [1, 2, 3];
List<int> intList = [4, 5, 6];
ImmutableArray<object> emptyCollection = [];
Это работает и для свойств, полей, параметров методов и так далее.
Опять же, подобное уже было в 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"];
Если у вас есть свой тип данных, для которого хочется подключить выражения коллекций, то необходимо сделать три вещи:
IEnumerable<T>[CollectionBuilder], указав класс строитель и имя фабричного методаПодробнее можно прочитать по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
Docs
Collection expressions (Collection literals) - C# reference
Collection expressions convert to many collection types. You can write literal values, expressions, or other collections to create a new collection.
👍25❤🔥3🔥2❤1🐳1