Задать вопрос
  • Нормально ли что джуна бэкэндера просят проектировать бд?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если ты только в самом начале пути, и единственный вопрос, который тебя при этом заботит - это "а не слишком ли много от меня хотят?", то далеко по этому пути не уйдешь. В этой профессии любой опыт ценен. И возможность получить дополнительные знания - это плюс вакансии, а не минус.
    Суть профессии программиста в том, что ты учишься все время. То есть, любые полученные знания - это не вершина, а всего лишь еще одна ступенька. И просто глупо ставить какие-то рамки - "это будем учить, а это уже они много хочут".

    При чем здесь самоуверенность - вообще непонятно
    Разумеется весь код джуна будет проходить код-ревью, то есть прямо в продакшен никто эту БД заливать не будет.
    Но при этом и создавать за него простенькую БД для небольшого сервиса, типа отзывов на товары, никто не будет: такой беспомощный джун никому не нужен. Предполагается, что еще на этапе обучения он уже делал подобные проекты и умеет спроектировать для них БД.
    Ответ написан
    Комментировать
  • Как организовать тесты в пакетах вида адаптер?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    У меня в некоторых проектах схема очень похожа на вашу.
    Я выношу тесты и инициализацию в папку repo.
    Структура папок выглядит таким образом (беру пакет users для примера)
    users/repo.go - описание интерфейса Repo
    users/repo/repo.go - тут инициализация любого типа реализации в зависимости от конфига
    users/repo/repo_test.go - тут тесты
      (создаю все типы репозиториев (mongo, redis...)) и одними и теми же тестами прогоняю каждый тип. 
      Тут и инициализация репозиториев для тестов и зачистка после тестов.)
    users/repo/mongodb - реализация (импортирует пакет users при необходимости)
    users/repo/redis
    users/repo/sqlite

    В приложении (там, где идёт инициализация) импортируется только пакет "users/repo", он (на основе конфига) подключается базе нужного типа.
    А все остальные пакеты (если кому нужен интерфейс users.Repo) - импортируют пакет users
    Ответ написан
    5 комментариев
  • Как организовать тесты в пакетах вида адаптер?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Проблема в том что эти адаптеры имеют одни и те же методы, делают одно и тоже (но по своему),

    Это заворачивается в интерфейс и тестируете по этому интерфейсу ваши конкретные реализации.
    https://gobyexample.com/interfaces

    пример repo_test.go:
    type Repository interface{
        MethodA() error
        MethodB() error
    }
    
    func TestRedis(t *testing.T) {
         testRepo(t, NewRedis(...))
    }
    
    func TestMongo(t *testing.T) {
         testRepo(t, NewMongo(...))
    }
    
    func testRepo(t *testing.T, repo Repository){
        err := repo.MethodA()
        if err != nil {
            t.Errorf("methodA: %s", err)
        }
    
        err = repo.MethodB()
        if err != nil {
            t.Errorf("methodB: %s", err)
        }
    }


    ... но тут проблема с цикличным импортом (все адаптеры импортируют компоненты из repo).

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

    @posters
    На мой взгляд, беда большинства программистов в том, что они зациклены на it сфере. В ней уже многое реализовано. Гитхаб заполонен никому не нужными велосипедами. Придумать и реализовать что-то уникальное в этой сфере уже довольно сложно. А чтобы улучшать уже имеющееся и востребованное может пока еще не хватать компетентности.

    Попробуйте выйти за рамки IT. Наверняка у вас есть друзья/родственники, работающие в сферах далеких от IT. Разузнайте больше о их деятельности, попробуйте вникнуть в рабочий процесс, мысленно представить себя на их месте. Подумайте, что бы вы могли сделать, чтобы как-то облегчить их труд, какая программа могла бы стать потенциально полезной. Обсудите идею с этим человеком и если он согласился, что программа может облегчить ему жизнь, ПРИСТУПАЙТЕ. Вот вам мотивация и почти настоящий проект.

    Если ну совсем никак, обратите внимание на отрасли науки. Вот, к примеру, об исторической информатике не думали? Научитесь работать с данными. Возьмите, например, информацию Международного мемориала ( https://www.memo.ru/ru-ru/projects/memoid и https://www.memo.ru/ru-ru/projects/hackathon ) и попробуйте на ее основе сделать какой-нибудь информационный сайт, который в перспективе будет интересен не только вам. Поработайте со статистикой, попробуйте выявить какие-нибудь закономерности.

    Все это разумеется совсем нетривиальные задачи. Пошаговые гайдики на ютубчике на них не найти. Но тем и интересней, разве нет? Если вы способный, обучаемый программист, то должны справиться.
    Ответ написан
    2 комментария
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Бенчмарки - это хорошо, но очень важно понимать что именно там меряли и почему результаты именно такие.

    Несколько лет назад я тоже делал бенчмарки Python, PHP, Node, Go.
    Для меня были важны две вещи:
    1 - скорость ответа сервера/кол-во запросов в секунду
    2 - объём сервиса в памяти, т.к. от этого зависит стоимость ресурсов

    На тесте, где сервисы не делали запросы в базу - из всех четверых лучше всего отработал Go с приличным отрывом, цифры, к сожалению, уже не помню.

    Но вся эта разница сошла на нет, как только добавился всего один простой SQL запрос в базу, в таблицу с 10 строками. И на этом фоне разница по скорости ответа была меньше 10%.

    Иными словами если ваш сервис работает с базой - критической разницы по скорости работы между Go/Rust/PHP/Node/Java, особо не будет.

    Другое дело если ваш сервис не будет делать запросы в базу, или будет кешировать результаты запросов, тогда вы почувствуете ощутимую разницу.

    Еще очень важно понимать сколько ваш скрипт потребляет ресурсов. Это становится критически важным, когда вы имеете дело с большими нагрузками.

    Один экземпляр Go занимал в памяти порядка 6мб RAM, при том, что Pytho+Django порядка 60мб.
    Node уже не помню сколько, но что-то близкое к Python'у.

    Вот тут уже, когда серверов у вас будет много - количество серверов с Go у вас будет в 10 раз меньше, соответственно расходы за эти сервера у вас будут в 10 раз меньше :)

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

    Где-то читал статью, что у людей было API на порядка 40 серверов на Node, после переписывания на Go - серверов осталось два, из которых второй запасной :)
    Ответ написан
    13 комментариев
  • Портфолио backend?

    glaphire
    @glaphire
    PHP developer
    github + ссылка на сервер, на котором проект работает и есть базовый фронт или апи, который показывает это в динамике (вторая опция скорее для джуна, по нормальному коду и так видно что человек шарит, а ошибки можно пофиксить)
    Ответ написан
    Комментировать
  • Стоит ли использовать fasthttp для создания библиотеки по работе с json API?

    Непонятно, откуда "вырезан" контекст. Если ваше решение нормально работает без контекста - почему нет?
    Про второй пункт - если нет прямой необходимости в максимальной производительности, то выбор фреймворка или библиотеки для web значения не имеет. Хватает стандартного http - хорошо. Хочется более удобного и легкочитаемого кода - можно использовать что-то ещё.
    Ответ написан
    Комментировать
  • Как добавить в массив с json строкой еще одну строку?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    Комментировать
  • Как исправить дубликацию данных в mongodb?

    7workers
    @7workers
    почитайте про "upsert" возможно подойдёт: https://docs.mongodb.com/manual/reference/method/d...
    либо проверяйте перед вставкой
    либо ловите исключение и игнорируйте
    БД не виновата, что заставляют два раза вставить одно и тоже :)
    Ответ написан
    2 комментария
  • Что должен знать junior golang backend разработчик/разработчик на golang?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Кроме Golang еще нужно знать сам backend))
    Ответ написан
    Комментировать
  • Как оптимизировать Symfony внутри Docker?

    @sl0
    Подозреваю, что проблема не в симфони, а в докере на маке.
    Известная проблема в Docker-е под маком - дополнительная задержка, возникающая из-за разных файловых систем. На symfony проекте, например, эта задержка доходит до ~5-10сек на открытие одной страницы. Данную проблему отлично решает утилита docker-sync.


    1) - sudo gem install docker-sync
    2) - Создает docker-sync.yml файл со следующим содержимым (все последующие комманды должны выполняться из папки с проектом-):
    
    version: '2'
    
    options:
      verbose: true
    
    syncs:
      #название volum-а
      app-sync:
        src: '.'
        sync_excludes: ['var', 'node_modules', 'tests']
    
    
    3) в файле docker-compose-dev.yml вносим следующие изменения:
    
    volumes:  
      app-sync:
        external: true
    
    Меняем код
    
    services:  
      #...
    
      php:
        #...
        volumes:
          # ...
          - ./app:/var/www/app
    
    
    На
    
    services:  
      #...
    
      php:
        #...
        volumes:
          # ...
          - app-sync:/var/www/app
    
    То есть, чтобы php контейнер смотрел на наш новый volum
    4) Далее создаем volum коммандой:
    
    docker volume create app-sync
    
    
    5) Выполняем команду
    
    docker-sync start
    
    
    6) И запускаем
    
    docker-compose -f docker-compose-dev.yml up
    
    Для того чтобы не вводить команды с 4-6 каждый раз, можно создать Make файл со следующим содержимым:
    
    OS := $(shell uname)
    
    start_dev:  
    ifeq ($(OS),Darwin)  
        docker volume create --name=app-sync
        docker-compose -f docker-compose-dev.yml up -d
        docker-sync start
    else  
        docker-compose up -d
    endif
    
    stop_dev:           ## Stop the Docker containers  
    ifeq ($(OS),Darwin)  
        docker-compose stop
        docker-sync stop
    else  
        docker-compose stop
    endif
    
    
    И использовать команду
    
    make start_dev
    Ответ написан
    1 комментарий
  • Какое архитектурное решение выбрать для ролей пользователей?

    inoise
    @inoise Куратор тега PHP
    Solution Architect, AWS Certified, Serverless
    Да какая разница как называются роли. Стоит прочитать про RBAC или ACL. Я не знаю что из них принято использовать в laravel. Я за первое
    Ответ написан
  • Можно ли с локального node js подключиться к MySQL на сервере?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Если порт сервера открыт и в базе разрешено подключение для этого хоста и пользователя то да. Это кстати не рекомендуется. Другой путь это туннелирование через ssh это чуть сложнее но действует везде
    Ответ написан
    1 комментарий
  • Как можно отследить где узкое место на сервере?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Я бы начал с того что включил slow_query_log в MySQL

    Если считаете что дело не в БД, то нужно глубже зарываться в мониторинг сервера (cpu, inodes)
    Так же сессии в файлах могут стать причиной такой проблемы, и тормозящий запрос именно тот на который выпадает запуск GC.
    Ну и логи php-fpm обязательно посмотреть, нету ли сообщений о том что не хватает воркеров, так как в зависимости от настроек fpm может быть затуп в момент когда создаются новые воркеры при динамическом пуле или затуп от того что кончается лимит воркеров.

    Спам запросов из браузера + сессии тоже может быть причиной проблемы из-за блокировок сессий.
    Ответ написан
    1 комментарий
  • Какие есть способы восстановить пароль из хеша?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    из хеша НЕВОЗМОЖНО восстановить пароль. Почитайте смысл хеширования.
    Можно только подобрать.
    Подобрать можно по словарю, брутфорсом и радужными таблицами.
    Ответ написан
    5 комментариев
  • Как сделать разработку web-движка публичной?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    github. Но не забудьте сделать хорошую документацию, иначе оно нафиг не нужно
    Ответ написан
    4 комментария
  • Как сделать разработку web-движка публичной?

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

    Alexufo
    @Alexufo
    противоречивый, сложный, весь компьютерный.
    Обфусцируйте код. Че вы, хуже битрикса?
    Вставляете туда какого нибудь adminer.php и усе

    Смешно то, что наивно думать что на хостинге отсуствуют бекапы убиенного вами проекта. )
    Ответ написан
    1 комментарий
  • Какую ОС лучше использовать для веб-дизайнера?

    Главным приемуществом MacOS над линуксами является возможность запуска продукции Adobe без дополнительных танцев с бубном. Плюс так исторически сложилось что поддержка консольных плюшек (Node.js и т.д.) в винде довольно посредственна. Дизайнеры выбирают мак просто потому что он может тоже что и линукс, и винда, но с ним меньше гемороя в плане освоения и танцев с бубнами.

    Мне приходится держать виндовую машину под Adobe и линь под всё остальное.
    Купил мак, и в принципе мне больше ничего не нужно )
    Ответ написан
    3 комментария