• В чём отличие составного и покрывающего индекса?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Составной индекс - это индекс по двум и более полям. А не по одному полю. Т.е. записи индекса сортированы по полю_1, если в нём одинаковые значения, то внутри группы с одинаковым значением они сортируются по полю_2, если и там одинаковые, то по полю_3...

    Покрывающий индекс - это индекс, в выражении которого присутствуют все использованные в запросе поля. То есть при выполнении запроса серверу вообще не нужна сама таблица, достаточно индекса, всё берётся прямо из него.

    Использование кластерного индекса - это обращение к самОй таблице. Даже если сортировка этого индекса никак не способствует выполнению запроса.
    Ответ написан
    Комментировать
  • В чём принципиальное отличие Eager/Explicit Loading от прямого использования Join-ов через LINQ в контексте EF Core?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    То что ты описал - разные понятия.

    Например, у тебя есть one-to-many и это представляется списком (ICollection).
    class User
    {
         public string Name { get; set; }
         public ICollection<Subscription> Subscriptions { get; set; }
    }


    Eager/Explicit/Lazy Loading

    Это КОГДА ты данные будешь получать.

    Тогда действия будут следующими:
    - Eager - не важно нужны тебе эти данные или нет - они все равно будут загружены. Тут ты сразу получишь все подписки (Subscriptions) даже если тебе просто нужно узнать Name
    - Lazy - они будут загружены, только когда обратишься к этому полю, т.е. в момент обращения к полю Subscriptions
    - Explicit - это стратегия когда ты сначала подгружаешь объекты в DbContext, а потом (в будущем) когда понадобятся загрузить из памяти - без сетевых запросов. Это уже про метод Load() у DbContext.

    Select/SelectMany/GroupMany

    Это ЧТО ты хочешь получить

    Пример все тот же:
    - Select - например, тебе нужно получить только имена, тогда ты создаешь анонимные объекты:
    context.Users.Select(u => new { u.Name });
    - SelectMany - тебе нужен только список подписок всех пользователей из списка
    context.Users.Where(u => someIds.Contains(u.Id)).SelectMany(u => u.Subscriptions); // Не уверен что запрос корректный

    - GroupBy - это уже JOIN

    Смысл ты понял - это разные зоны ответственности: КОГДА получать данные и КАКИЕ данные получать
    Ответ написан
    3 комментария
  • Почему ConcurrentCollections в C# не могут полностью предотвратить race conditions?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Смелые "желтые" заявления в заголовках привлекают внимание.
    Добиться же их заявок очень сложно. В реальности эти коллекции выполняют ровно на то что рассчитаны
    Ответ написан
    Комментировать
  • Почему ConcurrentCollections в C# не могут полностью предотвратить race conditions?

    @Kano
    В статье же написано что предотвращение возникновения состояния гонок обеспечивает только потокобезопасное api и то с некоторыми побочными эффектами навроде многократного вызова делегата обновления.
    Относительно потонебезопасного api реализуемого этими коллекциями вообще своя история в которой их поведение весьма специфичное.
    Ответ написан
    Комментировать
  • Когда в hashtable нужно хранить и ключ и значение?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Но если у нас вдруг совпадут хэши то возникнет коллизия, и тогда у нас есть 2 метода её обхода, 1 - открытая адресация 2 - связанный список.


    Да. В связном списке всегда хранятся и ключи и значения. В противном случае вы не докажете что нашли верно.

    UPD: Обновление. Поскольку я был неверно понят комментаторами - я обновляю цитату. Мой комментарий относится ко второму алгоритму. А точнее к структуре данных. В данном случае к связному списку который реализован в 99% хеш-таблиц в Java/DotNet.
    Ответ написан
    8 комментариев
  • В чем отличие float/double и decimal?

    float и double - это числа с плавающей точкой по стандарту IEEE754. Операции с ними происходят достаточно быстро, тк они реализованы в процессоре на аппаратном уровне.
    Но они достаточно не точные в плане выражения десятичных дробей. (То самое 0.1+0.2 != 0.3).
    Настоящие деньги на них считать не следует.

    decimal же напротив очень точный, но медленный.
    Ответ написан
    Комментировать
  • В чём отличие делегата от события?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    Событие - это когда что-то произошло и вы уведомляете систему об этом
    Делегат - это ССЫЛКА на метод с уже заданным набором параметров. Далее вы можете присвоить делегату любой метод, который удовлетворяет описанный делегат.

    Да, события, это тоже, частично, делегаты
    Ответ написан
    1 комментарий
  • Где можно найти задачи для практики ООП?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Надо просто брать и решать реальные задачи. Например автоматизация действий за ПК или любые задачи, которые вам интересны. Или вот к примеру написать самый обычный калькулятор с использованием WPF и паттерном MVVM (например с либой Prism).
    Ответ написан
    3 комментария
  • Почему не получается преодолеть барьер в изучении программирования?

    @k4nt
    Здравствуйте.
    Я так же, как и Вы учусь программировать. Лично мне никакое изучение материала не давало результата.
    Только когда у меня появилось к чему приложить свои знания (я сам придумал себе интересный проект и делаю его) у меня появилась больше мотивации в изучении.
    Я не смотрю курсы, не читаю литературу. Я заполняю нужные мне пробелы в знаниях исходя из практики. Да, явно с точки зрения специалиста у меня всё криво, можно лучше и тд, но знания гораздо лучше остаются в моей голове и мотивация падает только тогда, когда я упираюсь во что-то сложное для себя. Пару дней голова поварит, я соберу нужные знания и снова продвигаюсь к реализации своего мини проекта.
    Ответ написан
    2 комментария