• Как правильно построить роуты?

    @q2digger
    никого не трогаю, починяю примус
    что в FORWARD ? (iptables -L FORWARD -vnx)
    Ответ написан
    1 комментарий
  • Возможно ли подключать библиотеки в модуль ядра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    программу для изменения маршрута пакета в спутниковом сегменте
    планирую всё переписать на Си, сделать модуль ядра

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

    Нужно в идеале кэш и отправку некоторых данных, как я понимаю это всё придётся писать в нуля в ядре

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    То, что вы ищете называется хеш-функцией.

    Возьмите первые (или любые) два байта из результата любой хеш-функции от этих данных.
    Надеюсь вы понимаете, что мощность множества ваших адресных пар гораздо больше, чем 2**16. Это значит, что неизбежны коллизии.
    Вот как получить это число можно однострочником на баше с помощью питона:
    py '(lambda a, b: 256 * a + b)(*hashlib.md5(b"any bytes for hashing").digest()[:2])'

    Или вот так в командной строке можно захешировать любой текст в два байта:
    echo 'any text' | py '(lambda a, b: 256 * a + b)(*hashlib.md5(sys.stdin.read().encode("utf-8")).digest()[:2])'
    Ответ написан
    1 комментарий
  • Как правильно выстроить архитектуру приложения?

    Color
    @Color
    Golang SWE, Cloud & DevOps
    Все в кучу смешано, но попробую ответить. Вообще не понял, в чем суть данной инфраструктуры, ну да ладно.

    Я так понял, у вас клиент-серверное взаимодействие реализовано посредством очередей поверх натса.
    Не понятно, зачем у вас клиент хранит данные, хотя этим должен заниматься сервер. Возможно в этом есть некая подмена терминов.

    Будем называть это так: есть первый сервис, подменяющий src_ip и dst_ip в пакете из очереди, и отправляющий в другую очередь.
    Есть второй сервис, также подменяющий src_ip и dst_ip в пакете из очереди, но уже отправляющий их в сеть напрямую по завершению.
    Есть задача в первом сервисе хранить некие персистентные данные.

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

    Итак, я бы сделал несколько сервисов:
    - сервис 1, принимающий пакеты из очереди 1, меняющий их, используя данные из бд (и записывая в бд), и пишущий результат в очередь 2
    - сервис 2, читающий из очереди 2, меняющий данные, и отправляющий их в интернет (не понимаю, почему назвали его сервером, если там больше логики, то мб. имеет смысл писать в очередь 3, из которой будет читать третий сервис и только отправлять пакеты в интернет)
    - опционально сервис 3, читающий из очереди 3 и отправляющий данные в интернет

    А также инфраструктура:
    - натс
    - бд (что больше подходит/нравится, ну я бы взял редис или монгу как самые элементарные)

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

    Но вообще выглядит как сильно переусложненная фигня, это можно сделать в одном приложениями с тремя воркерпулами и двумя каналами.
    Ответ написан
    Комментировать
  • Как развить алгоритмические навыки программирования?

    @kaz_orphan
    Алгоритмы вторичны. Начинать надо с системотехнических навыков. Системный анализ и даст вам план. Программирование по сути это моделирование систем.
    Ответ написан
    Комментировать
  • Как развить алгоритмические навыки программирования?

    Beshere
    @Beshere
    Разработчик
    Вопрос: а зачем? Если честно, все эти "реверсни-ка строку" встречаются только на собеседованиях. Непонятно, чего хотят увидеть вопрошающие.

    Но если надо, вот можно потренироваться на кошках https://simpleprogrammer.com/programming-interview...
    Почти наверняка одну из этих задач вам подсунут.
    Ответ написан
    Комментировать
  • Как развить алгоритмические навыки программирования?

    myjcom
    @myjcom
    jajabin, попробуйте использовать классический подход.
    Есть много книг по алгоритмам, обзоры/отзывы/рецензии можно найти в интернете.
    Что лучше/хуже для конкретного индивида может понять только сам индивид. Возможно вам конкретика нужна, "сколько вешать в граммах" или "ткните пальцем"
    как правильно себе построить план?

    В общем случае план одинаков +/- нюансы конкретного издания. (теория + практика)
    Тут главное не распыляться, а начать.
    Левитин А.В.
    Алгоритмы: введение в разработку и анализ (написана доступным языком, много упражнений для закрепления)
    Кратко

    5d64febe62b08896920686.png

    и Алгоритмические головоломки (немного теории и практика, практика и еще раз практика) этого же автора.

    Поллис Г., Хайнеман Дж., Селков С.
    Алгоритмы. Справочник с примерами на C, C++, Java ... (поможет понять что где когда и как применять)

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

    @tlbogdanov
    Самое легкое, что нужно сделать, это понять - в задачах на hackerrank или где вы их смотрите нет ни одной задачи, которая создана, чтобы Вас завалить. Ни единой. Уверен, за то время, что вы работаете, вы уже изобрели собственный подход к решению рабочих задач и он эффективен и подходит именно вам. Попробуйте применить его в алгоритмических задачках. Представьте, что вы решаете не какую-то "сложную задачу, которую фиг знает как решать", а одну из тех, что вам дали на работе... Просто - вот такую.
    И не стесняйтесь гуглить, большинство задач уже прорешано, и посмотреть метод решения - не значит завалить задачу... Вы же хотите принцип понять, а не "нарешать ответственно 100 задач без подглядывания в гугл"
    Ответ написан
    2 комментария
  • Как развить алгоритмические навыки программирования?

    DevMan
    @DevMan
    нет никакого плана, только опыт.
    нельзя прочитать/посмотреть что-то и сразу просветиться.
    теория даст базу, но без практики эта база ничего не стоит и быстро забудется.
    прост решайте задачи по интересующей тематике, и всё придёт само собой.
    Ответ написан
    Комментировать