• В чем разница связаного списка от хеш-таблицы?

    @Mercury13
    Программист на «си с крестами» и не только
    Связанный список решает такую задачу: как хранить коллекцию объектов, добавляя и удаляя туда объекты. (Простите, что я не пишу характеристики того и другого, почитайте это в умных книгах)

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

    Хэш-таблица решает другую задачу: наладить отображение ключ→значение. Например, «осёл → иа, петух → кукареку», и так далее. Массив, только индексом будет не цифра, а что-то другое: x[«осёл»] = «иа». Так называемый ассоциативный массив.

    Если индексом массива может быть только цифра, поступим так: превратим нашего осла в цифру — например, о+с+ё+л = 4363 (в Юникоде), и пусть 63 — это номер гнезда. В 63-м элементе массива пусть и лежит наше «осёл → иа».

    Если у другого животного значением хэша будет 63 — это хэш-коллизия, и в разных реализациях решается по-разному. Я знаю такое: в гнезде лежит не просто один элемент, но связанный список. Главное, что такое слегка снижает производительность, но допустимо.
    Ответ написан
    Комментировать
  • Какие технологии использовать для постоянного мониторинга страниц?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    1) https://www.rabbitmq.com/
    2) ну, без Яндекса-то вряд ли кто сообщит такое, а вот с яндексом как раз вся сложность
    Ответ написан
    Комментировать
  • Какой тип класса сделать для логов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    dependency injection
    Ответ написан
    Комментировать
  • Symfony 4 - {{ app.request.getSchemeAndHttpHost() }} выдает http при https?

    @Flying
    Если в посмотрите в исходный код, то увидите что Request::getScheme(), которую использует Request::getSchemeAndHttpHost() вернёт вам https в зависимости от того признан ли запрос безопасным или нет методом Request::isSecure().

    Сам метод isSecure(), как видно по коду, возвращает true в двух случаях:
    1. Либо это HTTPS запрос и есть соответствующий заголовок
    2. Либо это запрос от доверенного proxy сервера и сервер передаёт информацию о том что оригинальный запрос безопасен


    Таким образом я бы предположил что у вас используется схема nginx + php-fpm и либо nginx некорректно сконфигурирован и не передаёт нужные данные либо nginx не указан в качестве trusted proxy.
    Ответ написан
    Комментировать
  • Codeception, как в собственном хелпере подключиться к 2-м БД?

    @Nc_Soft
    Как-то вы странно делаете в конфиге, логичнее было бы так
    config:
            Db1:
                dsn: 'mysql:host=localhost;port=3309;dbname=db_1'
                user: 'test_user'
                password: 'passwd'
            Db2:
                dsn: 'mysql:host=localhost;port=3309;dbname=db_1'
                user: 'test_user'
                password: 'passwd'

    $this->db1 = new Module\Db($container, $this->_getConfig('Db1'));
    $this->db2 = new Module\Db($container, $this->_getConfig('Db2'));
    Ответ написан
    5 комментариев
  • Можно ли пойти сисадмину на инженера программиста?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    На инженера-программиста может пойти и обладатель кулинарного средне-специального образования. Или человек вообще без средне-специального образования.
    Ответ написан
    Комментировать
  • Как такое реализовать Сделайте разбиение на страницы ( на PHP) с переходом по номерам страниц?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тебе ещё рано браться за такие сложные задачи.
    Повторяй пока выполнение запроса SELECT из РНР.
    А оператор LIMIT проходят в следующем классе.
    Ответ написан
    Комментировать
  • Зачем использовать готовые решения?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос писать или не писать такую тривиальщину как роутер, сводится, в сущности, к вечному вопросу поддержки.

    Написать десяток велосипедов не проблема.
    Поддерживать один-два в актуальном состоянии - тоже.
    Но может накопиться такое количество велосипедов, что их поддержка будет занимать все наличные ресурсы, и на разработку собственно функционала попросту не останется времени.

    Впрочем, это естественный процесс, который проходит каждый велосипедописатель, и по достижении этого порога радостно выкидывает велосипеды, заменяя на модули, поддержкой которых занимается сообщество.
    Ответ написан
    1 комментарий
  • Зачем использовать готовые решения?

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

    Нужно писать своё, чтобы учиться (как вы описываете в вопросе). И чтобы понимать как работают готовые решения и почему именно так.

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

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

    2. Правильное решение. Соглашусь, но если практиковать свои навыки, разве у вас не получится также?
    Опять же - речь про годы практики.
    Ответ написан
    Комментировать
  • Как быть с гросс/нэт зарплатой при ВЭД?

    DevMan
    @DevMan
    при ВЭД, как правило, ты получаешь только гросс.
    все местные налоги - твоя головная боль.

    отстёгивать с полученных или полученные будут увеличины - как договоритесь.

    кстати, даже в рамках одной страны, нэт может оказаться таким, что или государство тебе ещё доплатит, или ты будешь должен доплатить государству.
    Ответ написан
    Комментировать
  • Как могли использовать уязвимость функции copy() в PHP?

    revenger
    @revenger
    49.5
    Так вот просто принимать $_POST не очень хорошо.
    Я бы разрешил пропускать только a-z0-9, к примеру.
    Не проверял, но подозреваю, что передача конструкции типа ../../../ приведет к переходу на каталог выше.
    Ответ написан
    Комментировать
  • Как с return передать ещё View?

    @yevhenkoriakin
    Добрый день!
    Не могу понять вопрос, но напишу.
    У вас есть контроллер, в нем есть метод который возвращает Вам форму
    к примеру

    public function index()
        {
            return view('home');
        }


     Если нужно передать что-то вместе с формой
    return view('home', ['form' => 'value', 'key' => 'value2']);

    https://laravel.com/docs/6.x/views#passing-data-to...

    для typeahead
    сделайте новый метод в контроллере который будет будет возвращать json
    Для етого метода делайте новый роут и этот же роут указываете как источник данных для typeahead скрипта.
    Ответ написан
    Комментировать
  • Symfony - как поместить в контейнер свою реализацию сервиса?

    @Flying
    Здесь есть несколько путей:
    1. Если это что-то простое и вы работаете с Symfony Framework (т.е. не со standalone контейнером) - то вам просто необходимо описать ваш сервис в конфигурации сервисов (в Symfony 4 и выше это config/services.yaml). Как это делается - описано в документации. Описание стандартного controller_resolver можно увидеть здесь, в Yaml это будет выглядеть вот так:

      services:
        controller_resolver:
          class: Full\Name\Of\Your\Implementation
          arguments:
           - '@service_container'
           - '@?logger'
         tags: 
           - {'name:':'monolog.logger', channel: 'request'}

      ваша реализация, конечно, может отличаться по зависимостям.

    2. Если это что-то более сложное - то настройка сервисов производится через compiler pass. В них вы имеете полный доступ к ContainerBuilder и можете программно сформировать в нём всё что вам необходимо. Однако сомнительно что в данном случае вам это потребуется.


    В целом все эти вопросы очень подробно разобраны в документации компонента Dependency Injection.
    Ответ написан
    Комментировать
  • Почему Object.toString(obj) != String.ValueOf(obj)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Потому что в Java оператор равенства не применим для проверки эквивалентности объектов. Каноничный ответ на эту тему.
    Ответ написан
    1 комментарий
  • Что такое cascade, в ->onDelete('cascade')?

    Fragster
    @Fragster
    помогло? отметь решением!
    Комментировать
  • Почему Ruby недооценённый язык?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Конкретно в случае Ruby VS Python дело не во вкусах, а наличии у Python простой и эффективной двусторонней интероперабельности с C\C++.
    Ответ написан
    1 комментарий
  • Почему composer жрет ОЗУ?

    @Flying
    Проблема Composer'а с потреблением памяти при обновлении с большим количеством зависимостей - весьма известная, достаточно посмотреть в их issue tracker (1,2 и множество других).

    Jordi Boggiano, один из авторов Composer говорит (к примеру здесь) что проблема будет принципиально решена во второй версии, которая сейчас в разработке.

    Aside note: обычно команды, модифицирующие список пакетов (и требующие для этого кучу памяти) стоит запускать только при разработке (т.е. к примеру на вашей локальной машине), для деплоя проекта необходимо использовать composer install, а он много памяти не требует.
    Ответ написан
    Комментировать
  • Какие книги, статьи, best practices можно изучить для организации логирования работы приложения?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Посоветую log4j и как враппер к нему slf4j. Пользуетесь API из slf4j, который укладывает логи через log4j или какую другую библиотеку логирования.
    www.slf4j.org/manual.html
    Чем хорош такой подход - у вас в зависимостях только slf4j, который сам определяет, какой механизм логирования использует приложение. И собственно этот механизм можно безболезненно поменять в дальнейшем.
    Особенно хорошо так делать в библиотеках, потому как приложение может использовать все что угодно.

    У меня типично все библиотеки работают через SLF4J, и да, там есть в составе простой логгер slf4j-simple-XXX.jar , если не нужно что-то навороченное типа log4j.
    Ответ написан
    Комментировать
  • Как запустить интеграционные тесты в заданном порядке?

    @dimuska139
    Backend developer
    Так делать не правильно. Тесты не должны зависеть друг от друга.
    Ответ написан
    2 комментария