Задать вопрос
  • В чем разница между HttpServer и HttpServlet?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Сервлет это Java-аналог cgi-скрипта. Сервлет - архаизм. Древний и достаточно бесполезный. Хотя в стеке технологий веба вы еще часто можете его видеть везде где есть такие контейнеры как JBoss, Tomcat, Web-Sphere. Все они понимают сервлет как актор который может обслуживать GET/POST/PUT запросы и что-то возвращать.

    В современных технологиях шаблонизаторов сервлет уже является ненужным звеном и его можно выбросить. Для асинхронного веб-сервера netty ЕМНИП сервлет тоже не нужен.
    Ответ написан
  • Как удалить записи из таблицы, которые написаны не на русском языке?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В любом языке или системе программирования всегда есть функция которая получает из буквы ее код таблицы ASCII (или в наше время Unicode). Все английские и служебные символы будут в диапазоне от 32 до 127. Русские - соотв не попадают в этот диапазон.

    SELECT ascii('x');

    Проверить все буквы в строке - дело техники. Или другая задача.
    Ответ написан
    Комментировать
  • Что нужно использовать и как в общем должен выглядеть код для моей программы и возможно ли вообще такое реализовать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Программа будет писаться в приложении "Embarcadero Dev-C++"

    Я думаю что это не имеет значения для вопроса. Хорошее приложение не должно зависеть от сред. И вы это должны понимать и изучать собственно язык и библиотеки. А визуальные среды здесь вообще непричем.

    Реализация работы нескольких процессоров одновременно.

    Я здесь немного выпадаю из тапок. Потому что у меня на 2-м курсе был курсовик - что-то вроде написания эмулятора процессора с ограниченным набором команд. И я помню как это было тяжело. Особенно в отладке. Там еще были другие цели которые я впрочем не помню.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Данный вопрос безсмысенно обсуждать только в разделе АЛГОРИТМЫ.

    Дело в том что в каждом языке программирования есть своя реализация хеш-таблиц со своими преференциями.
    Например в Java создается по умолчанию пустая табличка с 16 buckets и с фактором загрузки 0.75.

    Типы данных для ключей и значений - могут быть любые. От них лишь требуется один контракт. Ключи должны позволять на себе посчитать хеш. И ключи нужно сравнивать на равенство и они должны быть иммутабельны. Тоесть ключом не может быть объект представляющий системный таймер например или генератор случайных чисел.

    Для случая автора число 42. Мы считаем остаток от деления на 16 это будет 10. Тоесть мы запишем в 10 бакет. А после того как в табличку зайдет большое число ключей и и соотношение ключей и емкости станет больше чем 0.75 - будет создана новая таблица с 32 бакетами и старые данные будут скопированы туда с реогранизацией ключей. Это тяжеловатая процедура поэтому изначально хеш-таблицу рекомендуется создавать уже с заранее известным capacity. Если хотите хранить 6 млрд социальных номеров людей планеты земля - то создавайте соотв такую таблицу. Тогда реорганизации не будет. И load factor можно сделать близким к 1.0.

    (Старая таблица с 16 бакетами после этой процедуры будет уничтожена)
    Ответ написан
    Комментировать
  • Как можно анимировать звуковую волну?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Звуковые волны - это области высокого-низкого давления в 3д пространстве. Кроме того они слишком быстро меняют форму и полярность чтобы их отображать. Вы можете изобразить их только в виде остановки времени.

    Для рисования чего-либо в объеме используют объемные пикселы (voxels) но при этом нужно сделать кубическую сетку данных для каждого кубика. Тут объем информации достаточно велик. Посмотрите как работает софт для томографов. Он примерно решает ту-же задачу. Отображает объем через информацию о десатке срезов исследуемого объекта. У вас срезом - будет воздух и звуковая колонка или источник звука.
    Ответ написан
    Комментировать
  • Как правильно сделать запрос с поиском текста?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По всем ответам - согласен. Добавлю. В данной постановке точный поиск вообще не работает. Но работает fuzzy - поиск с использованием триграмм. Триграммы - это тройки букв которые должны максимально близко совпасть у шаблона и искомой строки. Чем их больше - тем выше similarity. Похожесть типа.

    Вобщем делайте поиск где SIMILARITY > 0.5 или какой-то любой величины. И выводите пользователю строки-кандидаты в порядке ранга похожести. И пускай он сам выбирает.

    Для скорости - стройте триграм-индекс. Вот тут для начала почитайте https://www.postgresql.org/docs/current/pgtrgm.html
    Ответ написан
    Комментировать
  • Оптимизация структуры БД. Какие варианты в данном случае?

    mayton2019
    @mayton2019
    Bigdata Engineer

    Перетащил это всё на MongoDB с такой структурой:

    Справочники остались в MySQL.
    .......
    Какие есть идеи?

    Думаю попробовать перенести структуру на PostgreSQL аналогично MongoDB и использовать

    Дружище. Так жеж не делается в мире Документно-ориентированных БД! В монге ты делаешь не таблицы. А хранилища документов. Где каждый документ - самодостаточен и полностью хранит в себе всю информацию. Грубо говоря никаких СПРАВОЧНИКОВ и СВЯЗНЫХ таблиц у тебя быть не должно. И нельзя джойнить документы. И нельзя джойнить документы с таблицами MySQL.

    Почитай про модель АГРЕГАТОВ в противовес реляционной модели. Это можно найти в книжках типа NoSQL и еще я находил это в доках по Cassandra.
    Ответ написан
    1 комментарий
  • Насколько безопасно заводить биткоин-кошелек на Blockchain?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По поводу безопасности. Мне вспоминается история господина Отиса (американский изобретатель лифтовой механики). Вобщем в качестве теч-демо возможностей системы торможения лифта - он сам лично участвовал в испытаниях. Стоял на платформе лифта в то время как происходила симуляция обрыва тросов.

    Вот те кто клятвенно обещают самые безопасные хранения кошельков - должны предъявить обществу ссылку на свой криптовалютный кошелек с приличным балансом. И это будет самое красноречивое proof of security.
    Ответ написан
    Комментировать
  • Существует ли какая- та тула, плагин или просто сервис который бы помогал улучшить код.?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я полностью поддерживаю использование УЛУЧШАТОРОВ типа SonarQube, PMD и прочие которые просто позволяют указать мне на явные ошибки типа potenrial null pointer de-referencing.

    Но вот в части - написать по другому - я-бы сказал что это открытый вопрос. Ставить ТЗ нельзя так чтобы "сделать на выходе хоть что-нибудь". При таких критериях мы получим просто рандомный шум который тем не менее компилируется. Типа "бей посуду - я плачу". Но автору такое не надо.

    Тогда давайте зададим вопрос. А что собсно надо автору? Приведу пример который я часто использую. Решения задач на codewars. Они разные. Но обычно в топе висят 2-3 штуки которые поражают своей краткостью и различностью парадигм. Например в топе висит одно решение с хвостовой рекурсией а другое с циклом. И я не могу решить которое мне больше нравится. Нравятся оба. Но скорее всего при разработке code beautifier я-бы не стал вообще копать 2 направления. Достаточно было-бы просто поставить задачу сделать код меньше. Я думаю что все согласятся что меньше строк - меньше надо будет скроллить вниз. Особенно эти дело любят Джависты. Как накидают своих бинов с геттерами-сеттерами ойойой. 80% кода - нечитаемый шлак. Ну да ладно. А насколько меньше? Есть обфускация. Это сознательне выпиливание смыслов из всех идентификаторов. Вобщем переменные можно называть $1,$2 e.t.c. и это тоже работает. Но ... согласитесь это путь в никуда.

    Поэтому. Чтобы улучшать мы должны САМИ задать вектор улучшения. Парадигмы например. Мы хотим код тяготеющий к функциям или к объектам с методами? Мы хотим код с детальным дебагом (каждый оператор в своей строчке) или нам пойдет исходник как у Джона Кармака. Весь С++ исходник в 1 длинную строку. Мы хотим код на конечных автоматах? Или на комбинаторах? Мы хотим больше перформанс но хуже читаемость (вспоминаем знаменитую Кривую Шипилёва) или наоборот?

    Вобщем думайте над вектором улучшения.
    Ответ написан
    Комментировать
  • Как запустить браузер в изолированной среде на Linux?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Заведи себе пользователя-болвана. И от имени него запускай браузер. Ну а после работы можешь каждый раз убивать его профиль на локальном диске.

    Вообще если ты настолько беспокойный кабанчик что тебе надо именно сильная изоляция то посмотри на такие флешки-операционки как tails https://tails.boum.org/ они вот спецом созданы для мамкиных хакеров. Ничего не остаётся после них. Можешь прон смотреть. Или вещества в торе покупать. Или в хабре писать. Вобщем все можно.
    Ответ написан
    3 комментария
  • Как выучить математику с уровня 8 класса?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я вот не уверен что тебе для спорт-программирования нужна математика до конца ВУЗА. Тебе что нужны тройные интегралы? Или роторы с дивергенциями?

    Почитай вообще олимпиадные задания. Там сложнее чем дискретная математика вобщем-то нет ничего.

    А если ты забыл что такое логарифм - то почитай справочник Выгодского. Там очень все разжевано в идеальной преподавательской манере. Можно лекции даже не писать имея этот справочник.
    Ответ написан
  • Почему битовый сдвиг влево работает по разному в JS и Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для python3
    >>> type(34567 << 16)
    <class 'int'>

    вот этот класс int представляет собой хитрую штуку. Это как-бы аналог целого числа бесконечно большой радрядности.

    А JavaScript там по ситуации либо int (32 bit) либо double.
    Ответ написан
  • В каких книгах хорошо описываются внутренние процессы С++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Какие указатели укладываются в регистры, в каком порядке и тд?

    Я думаю что этот вопрос выходит за рамки чистого С++. По крайней мере компиллятор clang
    может перекладывать эту задачу на backend компиллятор и уже тот в свою очередь решает
    в каком порядке.
    Ответ написан
  • Написание эмулятора сервера с нуля возможно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Насколько реально для одного человека имея клиент Lineage 2 написать эмулятор сервера с нуля, не заглядывая в код pts и java версии сервера, а так же не анализируя входящий трафик с работающих серверов?

    Постановка - безмысленная и безпощадная. Я думаю что реверс-инжинерингом сети можно понять только простые протоколы. А в условиях когда где-то существует исходный код будет выгодно его купить или украсть чем делать то что вы задумали.

    Есть риски. Lineage2 оставляет за собой право в любой момент изменить сетевой протокол. Обфусцировать. Или поменять семантику команд. В этом случае вы оказываетесь в дураках и выкидываете в мусорное ведро плод многих месяцев работы. Lineage2 может иметь редкие сетевые команды которые вы просто не увидите в силу условий. Тогда ваше понимание протокола - неполное. И эта проблема неустранима.

    Кроме того, сколько лет вы готовы потратить на это мероприятие? Я думаю что вы будете достойны либо премии Дарвина. Либо книги рекордов посмертно.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Похоже на сетевую проблему.

    Проведи диагностику на низком уровне. Пингуй хост DB_HOST.
    Попробуй телнетом подключится к порту DB_PORT.

    Потом - консолью
    $ psql ....
    Ответ написан
  • Выбор оптимального метода распределения банкоматов по территории города?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не знаю что такое тепловая карта но догадываюсь. Возьмите случайным образом бросьте на карту n банкоматов. Потом методом градиентного спуска спустите их по теплу в локальный максимум. Получится первый вариант расклада. Запомните его. И еще таких штук 10 рандомных раскладов. Потом - пускай человек выберет из этих раскладов тот который наиболее приятен глазу. Или введите там еще один критерий. Чтобы в радиусе километра не было соседних банкоматов.
    Ответ написан
  • Как научиться решать задачки на python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По математики не силен ((

    Не переживай сильно. Для 80% современных задач разработки тебе понадобиться только школьная математика.
    Сложить умножить и процент посчитать. Всё остальное - технический дискурс что делать и как делать.

    Высокая наука ушла в области datascience, AI, quantum-computing, и всякие формальные логические (тьфу) системы где теоретики занимаются онаниз.... эээ короче фигнёй страдают.

    Что тебе понадобиться на самом деле. Структуры python. Библиотеки. Основы мульипоточки. Работа с файлами и сетью. Там не бох весть какая наука. Школьники разбираются. Вот... тут каждый день кодят дискорд и телеграм ботов.

    Еще обрати внимание на операции со строками. Строки - основа современного бизнес-кода. Сравнение строк. Подстроки. Замены. Поиск по регулярке. Это должно быть выучено как молитва. Очень часто программист хорошо умеющий работать со строками выкрутится из любой ситуации. Распарсит json и так далее вручную.
    Ответ написан
    2 комментария
  • Java и выгорание на первой работе, что делать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это нормальная ситуация. Я тоже выгорал на некоторых проектах. В основном из-за того что мои знания просто были не нужны. Мне ставили задачи которые не хотелось делать. А те proposals которые я писал по проекту отклонялись по разным причинам.

    Кроме того события последних лет с ковидом и прочее создали ужасные условия для обучения в первую очередь. Люди выгорают. В основном от отсуствия эмоционального контакта с преподавателем. Уж сколько я поднаторел на самообучении но и мне тоже хочется взять в плюнуть на этот Databricks с ажуром.
    Ответ написан
    Комментировать
  • Стоит ли брать в 2022 году MacBook pro 15 2014 для программирования?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужен ноутбук для программирования на java, c++, c#.

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

    В остальных случаях лучше взять Dell или HP и еще лишние деньги будут. Прикупить хороших гаджетов.
    Ответ написан
    Комментировать
  • Какой смысл команды dup в JVM байт коде? И что за индексы локальных переменных?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Какой смысл команды dup в JVM байт коде?

    Жаль что ты не программировал на калькуляторе МК 60. Это целая эпоха.

    Значит есть разные пути к вычислению арифметики. Например если тебе надо возвести в квадрат число 5 на регистровой машине - то ты должен загрузить регистр R1 числом. Потом регистр R2. И потом найти такую команду умножения которая свяжет регистры R1 и R2 и перемножит и сохранит еще где-то результат. В силу современного зоопарка процессоров практически нереально создать такой абстрактный байткод который бы эффективно отображался на опкоды разных железяк. Поэтому решили забить на регистровую машину. И использовать стек как хранилище операндов для операций. Разумеется в JVM есть и аналоги регистров но с ними не выполняются операции. ЕМНИП. Если хошь что-то сложить или вызвать функцию - то положи на стек и там-же получи результат. И если вернуться к возведению числа 5 в квадрат это может быть так

    положить 5 на стек.
    дублировать
    вызвать функцию умножения


    На каком-нибудь языке Forth это было-бы тремя командами
    5 DUP * .
    Результат - на вершине стека.

    Это кратко записывается. Но это несет абсолютно ту-же смысловую нагрузку для арифметики.

    Почему их только 256 может быть?

    А чорт его знает. Так решили. Решили что 256 регистров это капец какой максимум для процедуры или функции. Послушай ради интереса видосы про процессор Эльбрус. Там тоже интересно с регистрами сделано.

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

    Я думаю что твое предположение о том какой код соберет JIT не совсем верное.
    Вместо спора я предлагаю взять какой-то тестовый сценарий и подсмотреть какой
    будет собран код. Я знаю что скептики Java обычно после изучения вопроса глубже
    меняют свою точку зрения. Ну по крайней мере перестают считать Java
    "медленным покемоном". Java действительно была слоупоком во времена Jdk 1.1.
    Но щас это не так.

    Несколько лет назад я мерял производительность floating-point вычислений на приложении
    которое рендерит зеркальные шары. И разница между С++ и Java была не сильно большая.
    10 секунд на сях и 12 секунд на втором языке соотв. Хотя этот тест узкий и он просто
    показывает частный случай.
    Ответ написан
    4 комментария