Задать вопрос
  • Почему не могу найти работу Junior'ом C#?

    @kttotto
    пофиг на чем писать
    Это не резюме, это набор слов, ничем Вас не выделяет из общей массы и даже делает низовым в списке общей массы.

    1. Такой кучи тегов даже у меня нет)) Если Вы знаете названия технологий, не говорит о том, что Вы знаете сами технологии. С Вашим опытом никто не поверит, что Вы имели реальный опыт со всем этим, а не просто hello world написали. Выберите те, в которых по Вашему мнению Вы лучше всего разбираетесь.

    2.
    Отличное знание WinForms, ASP.NET, LINQ и WPF. Паттерны: MVVM, MVP, Repository, IoC.

    Для третьекурсника звучит самонадеяно. При такой формулировке на техническом собеседовании будут проверять "отличное" знание и я почти уверен, что Вы его провалите. Лучше сказать что-то подобие: имел опыт работы с, для реализации использовал технологии, имею <начальные> навыки работы с и т.д.

    3.
    Занимался исправлением мелких багов, написанием небольших SQL-запросов и unit-тестов, решал небольшие задачи.

    Этим занимаются все разработчики, даже мидлы с сеньорами. Из Вашей фразы не понятно, какого уровня проект, какой стек, какие конкретно задачи Вы решали, как успешно Вы их решали. Работодателю нужно понимать Ваш реальный опыт и Ваши реальные возможности, а не нечто эфемерное "решал небольшие задачи".

    4.
    Если вспомнить css и html

    Вот такое никогда не пишите. Лучше соврать или преувеличить, или даже написать "Отличное знание", но не так как Вы здесь сформулировали.

    5. Не нужно оставлять ссылки на каждый проект в репозитории. Либо один, самый интересный на Ваш взгялд, либо одна ссылка на сам репозиторий. Работодатель пойдет туда только, если Вы заинтересуете его, не раньше. И ему пары файлов хватит оценить ваш уровень. Он не будет делать ревью всех Ваших проектов.

    6. Опыта одного проекта мало. Где опенсерс проекты, где участия в хакатонах, где амбиции стартапов, посещение конференций? Работодатель хочет понимать как Вы заинтересованы развиваться, какие у Вас планы для дальнейшего роста. Он берет вас нулевым не из альтруистических побуждений, а с надеждой, что Вы быстро вырастите и вернете ему прибылью затраченное на Вас время. Из Вашего резюме видно только одно: я студент - дайте работу. А почему Вам, за какие такие заслуги и что с этого будет иметь работодатель - не понятно.

    7. Я посмотрел Ваш код. Я бы не хотел, чтобы так писали у меня в проекте, начиная от именований и заканчивая некоторой логикой. Вас надо очень осторожно подпускать к реальным задачам и контролить, что Вы там напишете, просто чувствуется маленький опыт и до "отличных знаний" там далеко.

    В общем, вывод. Пока у Вас за плечами нет списка реальных проектов, чтобы Вас пригласили, надо себя выпячивать, хвастаться достижениями, демонстрировать амбиции, свою уникальность. Нужно убеждать работодателя, что Вы именно тот, кто ему нужен. В резюме этого нет. Когда у Вас будет пяток законченных проектов, будет наоборот, работодатель будет за Вами бегать и убеждать, что Вам у него будет лучше всего. И на hh студентов практикантов не ищут, поэтому только Вы должны делать отклики на вакансии, обязательно с сопроводительным письмом, в котором парой фраз Вы сможете заинтересовать работодателя.
    Ответ написан
    Комментировать
  • C# как удвоить символ через отдельную функцию?

    @kttotto
    пофиг на чем писать
    var source = "Test";
    
    // v.1 Заменит первое вхождение этой буквы в слове на удвоенную
    var ch = 's';
    var i = source.IndexOf(ch);
    var result = source.Substring(0, i) + ch + source.Substring(i);
    
    // v.2  Заменит все вхождения этой буквы в слове на удвоенную
    var ch = "s";
    var result = source.Replace(ch, ch + ch);
    Ответ написан
    1 комментарий
  • Как правильно выполнять регулярные операции на сайте при использовании слотов?

    @kttotto
    пофиг на чем писать
    Тут вариантов особо нет, как только использовать внешний для обоих приложений, но общий для них store: бд, просто файл на диске, сторонний сервис, дергая который будет проверятся последнее время запуска задачи.
    Ответ написан
    Комментировать
  • Как предотвратить повторное выполнение axios запроса?

    @kttotto
    пофиг на чем писать
    1. Ajax способен сам кешировать запрос, если параметр cache=true и если строка запроса не поменялась.
    2. Можно хранить состояние страницы вместе с данными где-то уровнем выше, в компонентах, которые не пересоздаются при загрузки страницы, а при загрузке страницы проверять наличие этих данных.
    3. Vuex - он как раз предназначен для глобального хранения состояний.
    Ответ написан
    Комментировать
  • Как развернуть матрицу(С#)?

    @kttotto
    пофиг на чем писать
    То, что Вы массив вывели как матрицу, не значит , что Вы создали матрицу. В обычном случае матрица инициализируется двойным циклом, где внешний считает строки, а внутренний колонки. При повороте, просто меняете местами - внешний считает колонки, а внутренний строки.
    static void Main(string[] args)
    {
        var str = "ВРАГ БУДЕТ РАЗБИТ";
        str = str.Replace(" ", string.Empty);
        char[] array = str.ToCharArray();
    
        var columnCount = 5;
        var rowCount = array.Length / columnCount;
        if (rowCount * columnCount < array.Length)
        {
            ++rowCount;
        }
    
        // Создаем перевернутую матрицу
        var invertedArray = new char[rowCount, columnCount];
        var counter = 0;
        for (var i = 0; i < columnCount; i++)
        {
            for (var j = 0; j < rowCount; j++)
            {
                invertedArray[j, i] = array[counter++];
            }
        }
    
        // Выводим матрицу на экран стандартным способом
        for (var j = 0; j < rowCount; j++)
        {
            for (var i = 0; i < columnCount; i++)
            {
                Console.Write(invertedArray[j, i]);
            }
            Console.WriteLine();
        }
    
        Console.ReadKey();
    }
    Ответ написан
    Комментировать
  • Как к текстовочисленному ID прибавить 1 в С#?

    @kttotto
    пофиг на чем писать
    Вытаскивает цифровую группу с конца строки с помощью регулярки, ну соответственно потом приводится к int и инкрементируется.
    var stringId = "client123456"
    var regex = new Regex(@"\d+$");
    
    var match = regex.Match(stringId);
    if(string.IsNullOrEmpty(match.Value)
    {
    	// В id не найдено цифровой части
    	return;
    }
    
    var intId = int.Parse(match.Value)
    var newId = $"client{++intId}"
    Ответ написан
  • Переход с C++ на C#?

    @kttotto
    пофиг на чем писать
    Шесть лет назад ушел с плюсов в .net. Случилось как-то случайно, надо было что-то сделать десктопное, до этого я это делал на win32 и это было жестоко, на винформах это было просто сказкой. А потом все сползло в веб и теперь я фулстек с упором в asp. И да, для C# работы побольше, но QT так же востребован, хоть и в меньшей степени.

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

    Каких то советов дать сложно. Мне кажется, все само вырулится и со временем само определится со стеком. Когда я окунулся в веб, я с ума сходил от того, в скольких технологиях надо разбираться и уметь ими пользоваться, в плюсах как то с этим по проще было.
    Ответ написан
    Комментировать
  • Как правильно описать объект в модели на TypeScript?

    @kttotto
    пофиг на чем писать
    export default class Model {
        _total: { [key: string]: any } = {};
    
        constructor() {
            super();
            this._total['value'] = 1;
            this._total['btn'] = {
                    add: true,
                    rem: false
            };
        }
    }


    Если все будете превращать в any, то толку от typescript не будет. Поэтому лучше типизируйте свои свойства как то так
    class Total {
        value: number,
        btn: {
            add: boolean,
            rem: boolean
        }
    };
    
    export default class Model {
        _total: Total;
    
        constructor() {
            super();
            this._total= new Total {
                value: 1,
                btn: {
                    add: true,
                    rem: false
                }
            };
        }
    }
    Ответ написан
    Комментировать
  • Что выводит лямбда-выражение?

    @kttotto
    пофиг на чем писать
    1. Может подчеркивать потому, что хочет присвоения переменной.
    var index = spisok.FindIndex(s => s.zachetka == zachetka)

    2. Нет юзинга using System.Collections.Generic
    Ответ написан
    Комментировать
  • Тенденции рынка труда для ASP.NET CORE разработчиков?

    @kttotto
    пофиг на чем писать
    Да, так и есть. Если планируете в веб разработку, то придется хоть в каком то виде и в фронт-енд разбираться.
    Ответ написан
    Комментировать
  • Как правильно возвращать объект из async метода в .NET?

    @kttotto
    пофиг на чем писать
    1. У Вас корректные примеры, никаких await Task.FromResult не нужно.
    2.
    при вызове метода GetRequestResult придётся писать await

    Придется. async/await заразен, он вынуждено подымается вверх по вызовам. С с .Result Вы убьете асинхронность, сомневаюсь, что в Ваше случае есть необходимость в его применении.

    Бест практика одна - использовать его как будто это обычный метод, в этом и красота его применения. await перед вызовом говорит только, что вызывающий поток освободится. Ну и нужно помнить о контексте синхронизации и понимать когда можно сделать .ConfigureAwait(false).
    Ответ написан
    6 комментариев
  • Высокоуровневые макросы в C#, есть ли готовые решения?

    @kttotto
    пофиг на чем писать
    Ищите scaffolding для .net, но пишется он на основе t4. Именно так пишутся шаблоны типов проектов для vs.
    Первое, что показал поиск тут.

    Мы у себя на проекте делаем генерацию кода на основе метаданных в бд. Вы можете физически читать нужные Вам файлы, на их основе генерить свой код и выгружать в какое-то место в проекте.
    Ответ написан
  • Как изолировать выполнение кода несколькими потоками?

    @kttotto
    пофиг на чем писать
    Первое, если OrderService не будет резолвится как синглтон, то на каждый запрос будет создваться свой инстанс сервиса, т.е двух потоков на один метод не будет.

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

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

    Ну и четвертое, если хотите получить баланс до того как другой запрос туда что-то добавит, то в AddOrder используйте транзакции с достаточным уровнем блокировки на изменение.
    Ответ написан
    3 комментария
  • Что значит инъецировать, а также создавать один класс от другого (паттерн MVP) в C#?

    @kttotto
    пофиг на чем писать
    1. Инъецирует, значит не создает экземпляр внутри себя (т.е. не делает new Service()), а принимает Service как параметр, чаще всего как параметр конструктора
    var service = new Service();
    var presenter = new Presenter(service);

    2. Да, это значит, что презентер должен создать внутри себя модель и вернуть ее для отображения. И в тексте не написано, что это view. Это две разные модели.
    Ответ написан
    Комментировать
  • Как получать по 5 элементов из массива?

    @kttotto
    пофиг на чем писать
    C#
    1. list.Skip(n).Take(5)
    2.
    var slice = new ArraySegment<string>(list, n, n + 5)

    3. Можете еще использовать очередь
    var queue = Queue<string>() { ... };
    var el1 = queue.Dequeue()
    var el2 = queue.Dequeue()
    var el3 = queue.Dequeue()
    var el4 = queue.Dequeue()
    var el5 = queue.Dequeue()
    Ответ написан
    2 комментария
  • С# стоимость приведения типа?

    @kttotto
    пофиг на чем писать
    Для ссылочных типов, в рантайме, это почти ничего не стоит. Основная проверка привидения происходит на стадии компиляции.
    По сути при таком приведении нет необходимости создавать новый объект, перемещать его в памяти. Просто ссылка entity, теперь будет указывать на объект MyType, но доступ к интерфейсу будет другой.
    В рантайме можно упасть с ошибкой привидения, если Вы в object положили MyType1, а привести пытаетесь к MyType2, интерфейсы совпадать не будут и ясно, что вызывать будет нечего.

    PS: Посмотрел поиском, это все написано в MSDN
    Операция приведения между ссылочными типами не меняет тип времени выполнения базового объекта; изменяется только тип значения, который используется в качестве ссылки на этот объект.
    Ответ написан
    6 комментариев
  • C# модульная архитектура. Как получить доступ к стат. классу программы из плагина?

    @kttotto
    пофиг на чем писать
    Если плагину предоставляется апи приложения, вот и добавьте апи, через который будете отдавать плагину инфу своего статического класса.
    Либо плагин, при инициализации, должен иметь возможность получать извне набор параметров, через который возможно будет принять ваши опции.
    Ответ написан
    Комментировать
  • Где найти ментора для обучению верстки?

    @kttotto
    пофиг на чем писать
    Купить курсы, коих сейчас много и вполне достойных. Менторов альтруистов еще не встречал.
    Ответ написан
  • Как убрать отслеживание объекта при сохранении?

    @kttotto
    пофиг на чем писать
    Всего скорей, Вы руками создали объект routeSave с айдишником, который уже есть в базе и пытаетесь его добавить. Если Вы хотите изменить существующий объект, то его сначала надо получить, но только не вот так, как Вы это делаете
    .ToList()[0]
    а так
    _dbContext.Routes.FirstOrDefault(a => a ...
    Ответ написан
    Комментировать
  • Почему функция нестабильно читает файл?

    @kttotto
    пофиг на чем писать
    Запустите студию с правами администратора и проверьте, будет ли та же проблема. Если нет, значит дело в правах. Если будет, смотрите на размер файла, буфер, блокировку файла другими процессами, возможно делается одновременная попытка чтения из других потоков.
    Ответ написан