Нотатки про програмування, музику, подорожі та плівку
Про мене  •  Список нотаток  •  Плівка

Пізніше Ctrl + ↑

Структуры данных: связанные списки

Связанные списки — структура данных, элемент которой содержит собственные данные, так и одну или две ссылки на следующий и/или предыдущий элемент. Связанный список работает как массив, который растет и уменьшаться при необходимости из произвольной точки массива.

Наиболее используемые типы списков:

  1. Односвязный список
+-------+------+    +-------+-------+ 
| Hello |  *---+--->| world | null  +
+-------+------+    +-------+-------+
  1. Двусвязный список
+----------+---------+       +----------+----------+ 
|          |     *---|------>|          |          |
|  Hello   |         |       |          |  world   |
|          |         |<------|---*      |          |
+----------+---------+       +----------+----------+
  1. Кольцевой список
.        +-------<----------<--------------<--------+
         |                                          |
+-----+--+---+    +-----+------+    +-----+-----+   |
| 12  |  *---+--->| 15  |   *--+--->| 25  |  *--+---+
+-----+------+    +-----+------+    +-----+-----+



Быстродействие

  • Добавляет элемент в конец/начало списка — O(1)
  • Удаляет первый элемент списка со значением, равным переданному — O(n)
  • Поиск элемента — O(n)
  • Копирование а массив — O(n)
  • Получить количество — O(1)

Преимущества

  1. Элементы могут быть удалены или добавлены из середины списка
  2. Нет необходимости объявлять разvер списка при инициализации
  3. Эффективное удаление и добавление элементов

Недостатки

  1. Связанные списки не имеют возможности произвольного доступа к элементам — т. е. нет возможности получить элемент внутри списка, без того что бы пройтись по всем элементам до него.
  2. Для работы списков требуется динамическое выделение памяти, что может привести к утечкам памяти.

Ссылки

  1. https://metanit.com/sharp/algoritm/2.1.php
  2. https://rtfm.co.ua/c-svyazannye-spiski/
  3. https://ru.wikipedia.org/wiki/Связный_список
  4. https://tproger.ru/translations/linked-list-for-beginners/
  5. https://medium.com/outco/reversing-a-linked-list-easy-as-1-2-3-560fbffe2088

Годнота 11

Программирование

Интересности

Курсы

  • NYTimes опубликовала учебные материалы своего курса по работе с данными.

Продуктивность

Схема + PAN 01.06.2019

Первое посещение «схемы» было незапланированным, друзья пригласили меня в последний момент. Рейв проходил в ангаре Киностудии им. Довженка. Размах рейва впечатлил меня: темноё помещение, дымовые машины, мигающие в такт музыке массивные прожекторы.

Фото сделаны на Nikon N65 + Kodak Color Plus 200/Fujifilm C200

Работа с файлами в Powershell

Получение списка файлов

  • Get-ChildItem $path — отобразит список файлов по указанному пути.
  • Get-ChildItem -Force $path — отобразит список файлов (включая скрытые) по указанному пути.
  • Get-ChildItem -Force $path -Recurse — отобразит список всех файлов, а также вложенных.

Копирование файлов и папок

  • New-Item -Path $path -ItemType «directory | file» — создает объект в файловой системе.

Удаление всех файлов и папок, содержащихся в папке

  • Remove-Item $path — удалит все файлы по указанному пути, но будет предлагать подтверждения.
  • Remove-Item $path -Recurse — удалит все файлы без подтверждения.

Работа с содержимым файла

  • Get-Content -Path $path — вычитать содержимое файла.
  • Add-Content -Path $path «Additional content» — дописывает в конец файла текст.
  • Set-Content -Path $path -Value «New content» — позволяет перезаписать содержимое файла
  • Get-Date | Set-Content $path — также можно использовать в качестве пайпалайна
  • Out-File -FilePath $path — отправляет вывод в файл.
  • Out-File -FilePath $path -Append — дописывает данные в конец файла

Рим, Италия 2019

Фьюмичино

Здесь находится аэропорт в который мы прилетели. Это небольшой город на берегу моря и в часе езды от Рима.

  1. Береговая линия
  1. Я :-)

Рим

  1. В Риме почти на каждом здании можно увидеть ставни.
  1. Красивый магазинчик.
  1. Колизей.
  1. Пантеон.
  1. Площадь Венеции.
  1. Площадь Испании.
  1. Фонтаны Треви.
  1. Дом посреди реки.
  1. Пьяцца Навона.
  1. Район Трастевере.
  1. Просто красивые улицы

Ватикан

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

Расходы

Одноразовый билет в метро 1,5 евро
Билет в метро на 24 часа 7 евро
Музей Ватикана 17 евро
Средний чек в ресторане на двоих 35-45 евро
Экспресс из Фьюмичино в Рима 14 евро
Убер Блэк (самый низкий класс) 25-40 евро

Ссылки

Посты о Риме в других блогах:

  1. Илья Бирман — Рим 2010
  2. Флоренция и Рим

Кстати, не путайте проект и продукт

Чтобы сделать проект, нужно знать, «как» его сделать. Чтобы сделать продукт, нужно знать, «что» сделать, и это совершенно другая дисциплина. Можно очень чётко сделать проект, который не превратится в продукт и умрёт. А можно всё делать через жопу, ходить кругами, но в итоге создать успешный продукт.

Источник: https://ksoftware.livejournal.com/429180.html

Годнота, часть 10

Программирование

  1. EntityFramework: (анти)паттерн Repository

Продуктивность

  1. Обзор Agile Results.
  2. Календарь дел.
  3. 🎦Как обустроить свое рабочее место и снизить влияние на здоровье.

Visual Studio Code

  1. Visual Studio Code. Настройка и применение. Часть 1
  2. Visual Studio Code. Настройка и применение. Часть 2

Другое

  1. Музыка для работы (Spotify).
  2. Кайдзен — японская философия или практика, которая фокусируется на непрерывном совершенствовании процессов производства, разработки и т. д.

Разработка на C# с помощью Visual Studio Code

Пару недель назад решил перейти на VS Code в качестве основной IDE для .NET приложений. Составил список плагинов, которые использую каждый день.

  1. C#
  2. vscode-solution-explorer — позволяет работать с файлами .sln. Добавляет для этого дополнительное меню.
  3. Visual Studio IntelliCode
  4. PowerShell — отличное расширение, которое полностью заменяет PowerShell ISE.
  5. GitLens — Git supercharged
  6. Code Spell Checker
  7. C# Extension
  8. .NET Core Test Explorer
  9. Bookmarks

CancellationToken в C#

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

Чтобы решить эту проблему нужно использовать механизм отмены задач. Состоит он из двух компонентов:

  • CancellationTokenSource — позволяет создавать специальные токены, который содержат информацию про состояние текущей отмены.
  • CancellationToken — собственно сам токен, у него есть свойство IsCancellationRequested, которое показывает состояние отмены, а также есть метод, который выбрасывает исключение (OperationCanceledException) в случае отмены операции.

Как это работает?

Большенство методов стандартной библиотеки уже имеют перегрузку, которая принимает токен. Чтобы его создать, нужно сначала создать фабрику CancellationTokenSource. Дальше с ее помощью сгенерировать токен и передать его в качестве аргумента в наш асинхронный метод.

Чтобы отменить задачу нужно вызвать метод Cancel у экземпляра CancellationTokenSource. Он переведет все выпущенные токены в отмененное состояние. Внутри асинхронного метода сработает проверка токена и работа будет завершена.

Также CancellationTokenSource позволяет установить таймаут по истечению которого автоматически отменяться все токены.

Простой пример реализации метода, который принимает токен и проверяет его состояние.

public static void Main() 
{
    CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
    CancellationToken token = cancelTokenSource.Token;
    
    var task = Task.Run(() => Task(cancelTokenSource.Token), cancelTokenSource.Token);

    cancelTokenSource.Cancel();
}

public static void Task(CancellationToken cancellationToken) 
{
    while (true) 
    {
        // делает полезную работу.

        cancellationToken.ThrowIfCancellationRequested();
    }
    
}

Советы

  • В ASP.NET Core приложениях стоит использовать токены отмены для эндпоинтов, которые долго выполняются или сильно нагружают систему. Это позволит отменять такие операции в случае тайм-аутов или когда закрылось подключение.
  • Если операция может быть отменена сразу же без дополнительных действий то для проверки отмены стоит использовать ThrowIfCancellationRequested. Если же нам нужно после вызова отмены сделать некую дополнительную работу (очистить ресурсы), то стоит проверять состояние с помощью свойства IsCancellationRequested и если оно равно true — выполнить дополнительную логику очистки.
  • Если метод уже выполнил свою работу и была вызвана отмена, то не нужно бросать исключение OperationCanceledException. Нужно просто вернуть результат работы и пускай вызывающий код решать что делать с этим результатом.
  • Можно вообще обойтись без использования механизма отмены если код отрабатывает очень быстро.

Полезные ссылки по теме:

Раніше Ctrl + ↓