• Какие требования к С# джуниору?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Джун джуну рознь. Чем больше знаний - тем лучше.
    Троелсен и правда очень медленно и педантично повествует. Он удобен как настольная книга джуниора, как справочник - по конкретным задачам копать. Но, ИМХО, Шилдт будет приятнее.


    Основные контейнеры - преимущества и недостатки. Сложность алгоритмов поиска и вставки, сортировки. Хэш-таблицы, хэш-код объектов, equality и как это все устроено. Неплохо бы знать про многопоточность и примитивы синхронизации (в общих чертах).
    Хорошо бы знать кое-что про платформу .NET - типы-значения и ссылочные типы (про стек и кучу), про GC с поколениями, SOH/LOH, как можно устроить утечку памяти -> IDisposable.
    Уметь делать запросы к базе через голый ADO.NET.
    По базам данных: владеть основными запросами SQL, писать и вызывать хранимые процедуры. Знать что такое и зачем нужны индексы, нормализация, View, где смотреть query execution plan.
    Суметь рассказать о том, что такое MVC, ориентироваться в основных паттернах.

    Если курс на веб, то понимать работу HTTP, REST, знать основы фронта (приоритет селекторов в CSS, "всплывающие" объявления переменных в javascript, разницу "==" и "===", чем отличается асинхронность от параллельности и чем это грозит).

    Вызовет уважение в глазах интервьюера: понимать и применять IoC/DI, уметь писать тесты, работать с ORM (EntityFramework допустим), async/await и SynchronizationContext.
    Ответ написан
    11 комментариев
  • Помечать данные, которые появились в момент отсутствия юзера на сайте?

    AMar4enko
    @AMar4enko
    Записывайте в профиль пользователя дату последней активности.
    Дата обновления / создания новости > дата последней активности пользователя = отметка "новое"
    Ответ написан
    3 комментария
  • Разработка: что должно быть впереди фронтэнд или бекенд?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В идеале второй вариант, если это возможно.

    Скажем я на своих проектах пытаюсь делать так насколько это возможно. Перед началом разработки какой-то фичи разработчики просто договариваются между собой как будет организовано взаимодействие с сервером (по сути пишется описание API на каком api blueprint, сейчас будем переходить на raml).

    После чего из этого описания разработчик серверной части может спокойно генерить себе тесты, json схемы респонсов и т.д. что бы быть уверенным что он делает так как договаривались, а мобильщики могут поднять себе из описания mock сервер.

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

    p.s. этот подход я форсирую еще и потому, что при таком варианте можно легко наладить кодогенерацию как для клиента так и для бэкэнда. Скажем валидация запросов, маршрутизация, мэппинги и т.д. - все можно сгенерировать. RAML в этом плане дает из всех форматов максимальную гибкость, и поэтому я и планирую на него переходить. В очень простых случаях можно сгенерировать код хоть всего бэкэнда, но и так в целом скорость разработки неслабо увеличивается.
    Ответ написан
    6 комментариев
  • Как правильно переконвертировать изображение в 1-битовое?

    alsopub
    @alsopub
    Для начала currbit>=7 надо заменить на currbit>=8, но проблема кажется не в этом.
    Сходу сложно сказать в чем проблема, так как тут задействована еще и процедура чтения файла и сам исходный файл.
    Есть еще момент - строка должна быть кратна 4 байтам.
    Плюс биты заполняются не слева-направо, а справа-налево, то есть currbit должен пробегать значения не 0..7, а 7..0.
    Ответ написан
  • Почему игровые пк не юзают несколько процессоров?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Добавлю что скорее всего игры будут работать медленнее, чем на десктопе. Медленнее потому что серверные CPU часто имеют базовые частоты гораздо ниже, чем их десктопные братья, это сделано для более высокой надежности. А поскольку игры плохо используют больше двух ядер, то вы скорее упретесь в частоту одного ядра, чем в их количество.
    Ответ написан
    Комментировать
  • Почему игровые пк не юзают несколько процессоров?

    Иногда и четырех ядер слишком много. Распараллеливание вычислений - не такое уж и простое дело.

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

    eduardtibet
    @eduardtibet
    Technical Writer / Documentation Engineer
    Doxygen?

    Первый вариант: по связке: SCM - выгрузка на диск - генерация - web-server. Правда, здесь онлайн документирования не будет - только документирование в коде.

    Второй вариант: SCM - выгрузка в docbook - комментарии в XML Editor applet (прямо на сервере) - генерация - web-server. Но опять же с онлайном в чистом виде (как в wiki) не будет - только через выполнение апплета на клиентской машине.

    Да, и еще... забыл добавить. Тот ресурс, который вы привели, использует статику. В нем нет возможности обновить онлайн.
    Ответ написан
    5 комментариев
  • В чем разница в драйверах Linux, OS X и Windows?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    "драйвер это чаще всего графический инсталлятор"
    "Если в винде драйвер это инсталлятор, то что есть драйвер в Linux и OS X?"

    Не приравнивайте инсталлятор драйвера и сам драйвер. Драйвер в винде может предствлять собой один .inf файл, и не иметь никакого инсталлятора.

    У вас вообще сильно перепутано что такое драйвер и в качестве отличия драйверов между системами вы видите только способ установки, но всем системам нужны драйвера.

    Вам нужно просто понять принципы дистрибьюции софта в разных ОС.
    В Линукс принято пользоваться репозиториями, и редко качать что-то с сайта (обычно если качать, то там исходники, которые нужно еще и собирать)

    В Mac производитель железа и ОС один и тот же, поэтому идет с ОС, но для некоторых устройств - также на диске или с сайта, но так как производитель один, несложно организовать автоматическое скачивание, и даже сторонняя периферия сертифицируется в Apple, что упрощает автоматизацию.

    С виндой идет множество вшитых драйверов, которые не требуют от вас никаких действий, чтобы работать. Чем старше винда, тем больше девайсов, которые определятся сами.
    Но множество девайсов выпускаются без особого взаимодействия с MS, просто пользуясь их рекомендациями, WHQL драйвера считаются стабильными, но любой может написать драйвер к своему устройству, выложить на своем сайте, и понятно что MS про это может и не знать.

    В Линукс ядро разрабатывается одними людьми, а дистрибутив Линукса и тулзы, которые входят в дистрибутив - другие. Поэтому часто указывается, что драйвер встроен в ядро (то есть будет присутствовать на всех Линукс).
    В Линукс лучше сделана работа со стандартным типом устройства, поэтому может не всегда будут работать все фичи и все возможности, но зато стандартным драйвером, встроенным в ядро, будет поддерживаться гораздо больше устройств этого типа, не задействуя все фичи устройства.

    Если взять видеокарту, которая поддерживает DirectX12, то в Линуксе его (DirectX) вообще нет, и Линукс не сможет пользоваться всеми фичами, предоставляемыми карточкой, вот и ответ почему Линукс работает со многими устройствами стандартными драйверами, а Windows требует индивидуальный.
    Ответ написан
    Комментировать
  • На чём реализовать прокси сервер?

    ulrich-schnauss
    @ulrich-schnauss
    Системный администратор, веб-разработчик
    На данный момент лучше чем squid и lightsquid ничего не придумали
    Ответ написан
    Комментировать
  • В чем преимущества *nix, linux перед windows (для веб разработчика)?

    @spotifi
    Нету никаких проблем.
    Если только ваше конкретное используемое для ваших задач ПО нормально работает с Windows.

    Например, в моем случае используется Ansible и Docker, который не поддерживается на Windows. Приходится использовать Vagrant. Это достаточно удобно. Но ресурсы все же кушает.

    А так - даже Vim хорошо себя чуствует на Windows. Нативный. Не cygwin.

    Microsoft это тоже понимает.
    И вот уже они встроили подсистему Linux Ubuntu в Windows 10. Это не виртуализация, а именно полноценная подсистема.

    И многие вещи, например, те же шрифты - в Windows работают лучше, чем под Linux.

    Могут сказать - что лучше использовать для разработки ту же среду что и для production.

    Но дело в том, что даже если вы сидите на Ubuntu Desktop, то ваша среда серьезно отличается от среды сервера FreeBSD, CentOS, Debian, Ubutntu Server. И для полноценного CI все равно умные дядьки категорически рекомендуют и на Linux даже использовать Docker для полноценной эмуляции.

    Но ведь Docker-то можно использовать и на Windows. Правда, запускается он там подольше.

    Где именно вести разработку, где вам удобнее - это ваше личное дело. Вопрос ваших предпочтений. Никаких объективных причин в наше время, когда существуют Docker, Vagrant и виртуальные машины, когда куча приложений изначально сделанных для *nix запускаются в native под Windows - нет никаких причин себя строить. Кроме любопытства - а как оно там на других системах живется.

    У тех кто вас троллит есть еще одна причина: им приятно показать себя более умными. Как же - ведь Linux можно сконфигурить руками.

    Ага, конечно.

    Или используют готовые десктопные дистрибутивы. Не зря Ubuntu так популярна.
    Или если освоили ArchLinux - то построили себе совершенно убогое окружение по готовым мануалам.

    Чтобы действительно набрать скиллы ручной настройки Linux - нужно огромное количество упроства и времени, чем ваши друзья, которые вас троллят, вряд ли обладают.

    На деле 99% твердящих о гибкости Linux - далее чем ставить Apache и MySQL из пакетов - ничего сами и не умеют. Фактически работая в то же настроенной другими людьми десктопной среде. Но разве вы не умеете делать то же самое под Windows?

    Другое дело, что разворачивать и тестировать нужно под аутентичным операционным окружением.
    Неважно под Ubuntu ты сидишь или под Windows.

    Лучшие практики советуют использовать полностью изолированный и независимый от рабочего места разработчика инструментарий - виртуальные машины, Vagrant, Docker, отдельные физические сервера.

    В этом случае под твоей любимой ОС работает только текстовый да графический редактор. А все развертывание для тестирования и для продакшн проводится в совсем другой среде.

    Используя Docker хоть под Windows ты будешь получать даже больше преимущество повторяемости рабочей среды чем тем кругом, кто советуют тебе просто перейти на Linux. Если на более слабом железе это и было бы существенно (Docker под Linux стартует быстрее), то на твоем - несущественно на чем работать.
    Ответ написан
    9 комментариев
  • В чем преимущества *nix, linux перед windows (для веб разработчика)?

    DevMan
    @DevMan
    1. вы получаете окружение близкое или идентичное к продакшену.
    2. вы получаете внятную консоль/шел из коробки.
    3. вы избавляетесь от массы вопросов типа "на локалке все работает, а залил на сервер и получил жопу" (или наоборот).
    4. у вас появляется более лучшее понимание как на сервере все работает.

    при теперешнем развитие технологий и производительности железа, нет необходимости себя ломать.
    можно попробовать в виртуалке (docker/vagrant)/дуалбуте и самому для себя решить стоит или нет.
    Ответ написан
    17 комментариев
  • Что подразумевается под получением ресурса и его инициализации в RAII?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    RAII это оборачивание в класс некоторой "сырой" сущности. Сущность может быть любая, но с ней неудобно работать, потому что надо следить за созданием и уничтожением в программе. Например

    class WinAPI32_Window
    {
    HWND hWnd = 0; // <--ресурс
    public:
      WinAPI32_Window()
      {
        //100 строк для регистрации класса окна и создания окна
        hWnd = CreateWindow(/* много параметров */); // <--получаем ресурс
    
        if (!hWnd) throw std::system_error("win creation error"); // кидаем исключение в конструкторе, если окно не создается, то объект не создается тоже 
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
      }
    
      ~WinAPI32_Window()
      {
        DestroyWindow(hWnd);  // <-- освобождение ресурса
      }
    }
    
    //ну а дальше в программе:
    try {
      auto win = new WinAPI32_Window; //создаем объект = инициализируем и получаем внутри hWnd
    } catch //...
    //работаем
    delete win; //освобождаем ресурс путем удаления объекта
    Ответ написан
    1 комментарий
  • Typescript и типы по условиям. Как правильно поступить?

    @sanex3339 Автор вопроса
    Сделал пока через user defined guard functions:
    https://github.com/Microsoft/TypeScript/issues/1007

    public static isIdentifierNode (node: ITreeNode): node is IIdentifierNode {
        return node.type === 'Identifier';
    }
    
    estraverse.replace(catchClauseNode.param, {
        leave: (node: ITreeNode, parentNode: ITreeNode) => {
            if (NodeUtils.isIdentifierNode(node)) {
                this.catchClauseParam.set(node.name, Utils.getRandomVariableName());
                node.name = this.catchClauseParam.get(node.name);
    
                return;
            }
    
            return estraverse.VisitorOption.Skip;
        }
    });
    Ответ написан
    1 комментарий
  • Какие виды работ входят в тех поддержку сайта?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Кратко:
    Тех. поддержка - это починить, если поломалось и не допустить поломки.
    Всё остальное - доработки.

    По-видам работ для ТП:
    1. следить за объемом свободного места на хостинге (логи и прочее)
    2. следить за безопасностью и своевременно устранять "дыры"
    3. при внезапно возросшей нагрузке на сервер/сеть - быстро находить и устранять проблему (лучше - причину).
    4. обеспечить безотказную работу веб-сайта/сервиса на протяжении всего времени ТП.
    5. делать резервные копии и обновления ПО или его модулей (при необходимости)

    Остальное - ТЗ/доработки и/или доп.работы.
    Ответ написан
    4 комментария
  • Как ограничить доступ для разработчика в git проекте?

    sim3x
    @sim3x
    Никак
    Определить код в разные репозитории
    Ответ написан
    Комментировать
  • Как зарабатывают разработчики на бесплатных framework`ах?

    Rou1997
    @Rou1997
    А вы не задумывались, зачем вообще фреймворки нужны?
    Чтобы ускорить разработку - срубить больше бабла в те же сроки.
    Они запросто могут сами их использовать для создания сайтов по заказу.
    Фреймворк может быть разработан прямо в рамках одного из крупных и не срочных заказов, по принципу "долго запрягаем, потом быстро едем".
    Напротив, если автор фреймворков не создает сайтов на своем фреймворке, а сам фреймворк написал с бухты-барахты, то очень сомнительно, что фреймворк будет на что-то годиться - у него же нет опыта.
    Ответ написан
    1 комментарий
  • Как зарабатывают разработчики на бесплатных framework`ах?

    Denormalization
    @Denormalization
    Взять тот же Laravel:
    - Как минимум 3 сопутсвующих ПЛАТНЫХ проекта (forge, spark, envoyer).
    - Конференции с нехилым ценником.
    - Консультации
    - Не уверен, но возможно laracasts что-то отстегивает.

    И так же у многих крупных OpenSource проектов. Заработок идет на enterprise решениях на основе их проекта. (Та же платная поддержка).

    Некоторые (на вскидку не вспомню) OpenSource проекты получают финансированние от крупных организаций (Google, Yahoo, Microsoft, IBM).
    Ответ написан
    Комментировать
  • Как узнать скорость подключения клиента к сайту и дать соответствующий контент?

    @lubezniy
    Подход считаю неверным. Канал может быть и шустрым, но с платным и дорогим для пользователя трафиком. Как вариант, дайте пользователю минимальную версию и позвольте ему самому решить, надо ли ему какие-то плюшки в более высоком качестве.
    Ответ написан
    Комментировать