Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (4)

Наибольший вклад в теги

Все теги (39)

Лучшие ответы пользователя

Все ответы (44)
  • Убрать все повторяющиеся элемента за O(n) времени?

    @ayazer
    Sr. Software Engineer
    используйте доп. структуру данных чтоб хранить кол-во вхождений каждого элемента в список. т.е. для каждого элемента в списке (сложность O(n)) нужно увеличить счетчик в этой структуре данных (в случ. с хеш таблицой это O(n) в худшем и О(1) в среднем). и потом еще раз пройтись по хештаблице и достать с нее все элементы где счетчик = 1 (сложность O(n)). в итоге даже сложность для худшего случая будет o(n + n + n) = O(n)

    те
    var inputArray = new[] { 1, 2, 3, 4, 5, 4, 3, 2, 1 };
    var set = new Dictionary<int, int>();
    
    foreach (var val in inputArray)
    {
        if (!set.ContainsKey(val))
        {
            set.Add(val, 1);
        }
        else
        {
            set[val] = set[val] + 1;
        }
    }
    
    var result = new List<int>();
    foreach (var val in set)
    {
        if (val.Value == 1)
        {
            result.Add(val.Key);
        }
    }
    
    return result; //[5]

    ^ можете считать примером на псевдокоде, читатся вроде должно без проблем
    Ответ написан
  • Как работает .NET?

    @ayazer
    Sr. Software Engineer
    код превращается в IL, который уже будет превращаться в байткод по мере необходимости (см. JIT компиляцию). Т.е. по сути первый вызов метода будет происходить чуть дольше т.к. будет происходить оптимизация и компиляция IL кода под реальную аппаратную платформу. После чего все последующие вызовы будут выполняется быстрее. Если такой вариант по каким-то причинам не подходит - есть ngen который позволяет сразу скомпилировать код под известную платформу (выиграв на холодных запусках, по потеряв в переносимости). И в этом случае jit компиляция во время работы приложения уже выполнятся не будет.

    В CLR не входит CIL?

    не совсем понял вопрос. cil/msil/il - просто промежуточный в который превращается код на С#/F#/VN.NET/etc. Можно расценивать его как ассемблер для .нета. Мало того, никто не запрещает написать свой DSL, который будет генерировать IL, который в свою очередь будет работать везде где работает .нет

    JIT запускается каждый раз при сборке проекта или только один раз чтобы запомнить архитектуру платформы?

    оба варианта нет. jit компиляция = just-in-time и запускается прямо во время работы приложения. как-раз она и превращает IL код в нужный набор машинных кодов.
    Ответ написан
  • .NET неоправдано сжирает память?

    @ayazer
    Sr. Software Engineer
    1) алгоритмы сжатия изпользуют доп. память для генерации словарей. Размер словаря будет зависеть как от алгоритма сжатия, так и от данных которые надо сжать.
    2) для того чтоб освободить память от кучи хлама - можно сделать GC.Collect для инициализации сборщика мусора. В данном случае прийдеться делать GC.Collect(2), что достаточно дорогая операция.

    кроме того, следует помнить про нюансы сборки мусора для LOH. В отличии от SOH, для LOH не будет проводиться дефрагментация данных в памяти, а CLR будет просто пытаться переиспользовать освободившиеся куски. Потому вполне возможна ситуация когда память в куче вроде как есть, но CLR продолжает ее выделять для новых обьектов.
    Ответ написан
  • Нужна помощь с решением задачи. Необходимо посчитать смену знаков. В чем моя ошибка?

    @ayazer
    Sr. Software Engineer
    ну так запустите дебаггер и посмотрите. тут больше чем 1 ошибка.

    1) можете начать проверять с варианта когда i==2 и j==4. тогда array[i++,j++] уже выходит за границу
    2) array[i++,j++] - вы уверены что вам нужно сравнивать значения именно по диагонали?
    3) i++ это постинкремент который изменяет значение. подозреваю что вы хотели просто сравнить со следующим
    4)
    array[i,j] < 0 && array[i++,j++] >= 0 || array[i,j] >= 0 && array[i++,j++] < 0
    запустите в дебаггере/интерактивной консоли и проверьте действительно ли это будет работать как вы думали. подозреваю что вы хотели получить все-же другой результат
    Ответ написан
  • Как разобраться с типами проектов .net core и где тут ARM?

    @ayazer
    Sr. Software Engineer
    То есть, насколько я понимаю, несмотря на то, что у меня выбрано приложение .net core, оно всё равно будет создано под целевую платформу .net framework? И, соответственно, будет работать только на винде?

    это было бы странно. нет, будет создан .нет кор проект.

    а что тогда во втором столбце, что еще за runtime?

    1 - сдк для разработчика, 2 - рантайм для клиента (на котором будет выполнятся приложение). если знакомы с той-же джавой то это JDK/JRE соотв.

    В чем различия между первым и вторым столбцом, нужно качать обе версии?

    нет, для пишке нужен только рантайм

    Почему в .net core пошло разделение на x64 и x86

    ну это в принципе разные архитектуры. такое разделение везде

    Раньше я мог писать приложение на винде x64, но при публикации указывать, что оно будет на x86. Что теперь с этим разделением делать?

    если не использовать прекомпиляцию ngen-ом то пофиг. указывайте x64-x86 (для полного фреймворка) или версию неткора в качестве целевой платформы, все остальное - проблема .нета

    На компьютере x64 нужно установить SDK x86, чтобы писать под x86 архитектуру?

    нет

    Что мне необходимо установить и как правильно скомпилировать приложение при разработке на винде?

    с 2.1 версии неткор поддерживает ARMv7/v8. потому на пишку нужно установить .неткор рантайм нужной верии и под него компилировать на рабочей машине. все остальное - проблемы рантайма. Собственно именно для этих целей он и был нужен.
    Ответ написан