Задать вопрос
  • Как ускорить процесс получения большого объема данных?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Сложно обсуждать перформанс-проблему без исходного кода.

    Я-бы предложил как всегда ударить кувалдой. Тоесть запустить по приложению JProfiler и просто посмотреть что он покажет. Проблемных мест может быть 3. Это чтение из базы. Второе это собственно проверки и валидации. Как они реализованы? Насколько качественно? И третье это собсно запись в БД. Используется ли JDBC-batch?

    SpringQuartz, cron, view здесь вообще непричем и их наличие только путает нас и вносит новые ненужные вопросы. Лучше решать проблему как одну java-функцию с входом и выходом.
    Ответ написан
    4 комментария
  • Почему Doom портируют куда только можно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Doom - это была одна из первых игр где была реализована в полной мере техника BSP (Binary-Space-Partition). Это позволяло в реальном времени очень быстро сортировать и рендерить полигоны без привлечения Z-Buffer. (Рендеринг был чисто прогарммный. На то время еще не было ускорителей 3Д графики и видеокарточка умела только отображать память на экран. ) Игра не была по настоящему трехмерной. А только рализовывала 1 этаж. Рендерить надо было только пол и потолок. Для каждой точки где стоял персонаж. И наклонных горизонтальных поверхностей в ней не было как раз по этой причине. Ее называли 2.5-мерной игрой. Было также много идей оптимизации вычислений. Например вместо вещественных чисел - целые 32х битные с fixed point.

    В скобках замечу что это был 1993 год и на дворе было царство Intel 286/386. Это были машины с тактовой частотой меньше ваших телефонов (Pentium только только релизнулся и еще ни у кого не был). И трехмерный Doom был прорывом. На моем тогда еще 386SX от подтормаживал но играть было можно. И со звуком для SoundBlaster. И конечно это было лучше чем Wolfenstein.

    Аналогичное было реализовано в Duke Nukem 3d. Но Дюк был менее популярен ИМХО. Были и масса других 3д игр в жанке RPG но они были не такие динамичные. Походовые в основном.

    Вобщем сегодня если вы гейм-дев то вам желательно хотя-бы ознакомиться с техниками оптимизации которые были в Doom. Можно почитать и про Quake но это просто развитие идеи BSP деревьев для полного 3D с 5 или 6 степенями свободы. Еще можно почитать про реализацию игры Esctatica. Там не на полигонах а на шариках или эллипсах реализована игровая графика. Тоже интересно.

    UPD: Заменил MMORPG на RPG.
    Ответ написан
    6 комментариев
  • Как считать из файла определенное слово, и посчитать сколько раз оно появляется в файле СИ?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Почему вопрос градуирован как "сложный"? Тебе нужен символьный буфер на 6 символов. Вот и пиши в него
    по кругу. Как только в круге появится ананас - вот и считай плюс один.

    Кстати где твоя попытка хоть написать привет-мир с файлами?
    Ответ написан
    Комментировать
  • Как получить диплом сред-спец образования программисту без техникума и 4 лет впустую?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я уже устроился на работу по специальности в крупную официальную компанию по специальности и успешно прошёл стажировку

    Ну вот если устроился и работаешь - то тебе вроде как оно и не надо. За образованием идут в двух случаях. Первое - это корочка которую требуют родители например или консервативное общество. Или гос-контора обязательно спросит ксиву при попытке туда устроиться (я-бы эту возможность не отбрасывал). И второе - эт собственно технический пласт знаний. Люди по разному учатся. Я-бы не смог учится УЖЕ работая. Это как мне кажется такой разрыв смыслов. Вот на работе тебя поставят за станок с ЧПУ и ты будешь знать досконально как ДАННЫЙ станок работает. Может даже станешь мастером по наладке. Но вот принципы на которых этот станок работает - тебе никто никогда на работе не расскажет. И не потому что это тайна. Просто всем некогда. На работе е6ошить надо как говорил мой шеф. А не книжки читать.

    Вот и думай себе. Кумекай что тебе на самом деле надо. Я знаю очень многих людей которые только в 40 лет осознали как много они не знают и что им реально нужно было когда-то ... давно получить это самое образование. Кусали локти потом. Но уже была семья.. дети.
    Ответ написан
    Комментировать
  • Как спарсить openapi?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Так ты сам этот инструмент назвал. Это и есть Swagger. А точнее swagger-codegen.

    https://swagger.io/docs/open-source-tools/swagger-...

    UPD: Добавил линку
    Ответ написан
    Комментировать
  • Бэкап Linux (Fedora)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Хочу при помощи tar сохранить все конфиги, но метаюсь между выбором директории home и ~/.config

    Дык тебе не надо метаться. Тем более что никто не сможет ответить нужен ли тебе home целиком или нет.
    Если места достаточно то бэкапть все что можно.

    Но проблемы бэкапа только начинаются после того как он сделан. Ты разверни виртуалку и попробуй потом восстановить все конфиги (и приложения!!) с этого бэкапа. Я гарантирую сюрпризы.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Скорее всего тебе нужно 2 таблицы. Users и Tasks. Вторая - дочерняя и таким образом у одного юзера есть несколько тасков или ни одной.

    Это называется Нормализация БД.
    Ответ написан
    Комментировать
  • Почему новичкам часто советуют парсинг?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Парсинг - это очень простое ТЗ которое можно привязать к опыту работы с сетью и с реальными а не учебными данными. Я думаю что такие ТЗ создают очень ленивые преподаватели и инструкторы. Которые обязательно воспользуются результатом вашего труда. Коллекция парсеров магазинов пром-товаров может быть собрана в пакет и перепродана кому-то еще.

    Парсинг для самого разработчика - это дно-днищенское. Очень быстро прокачаете опыт в BeautifulSoup но кроме этого дальше расти некуда. Парсинг с точки зрения договорённостей о сетевом контракте (endpoint, Swagger, SOAP, gRPG) это тоже сплошное кидалово. Что-бы вы не дизайнили - владелец сайта в любой момент может сломать просто изменив спецификацию или дизайн. Это ставит вас в заведомо рабское положение. Вроде как работу проделали но за 1 день до релиза сайт сделал редизайн и всё зря. А никто не заплатит.

    Я парсил исключительно из любопытсва. Только не на Python а на других языках. Создавал базу прокей (штук 100) и пытался работать через них в параллелизме. Типа аккуратненько. Чтоб не было очевидно. Прокси ломаются. Отъезжают. Вобщем забавно. Можно потратить кучу времени но ненадежно. Все что бесплано - ненадежно.

    Мой друг парсил валютные биржи. Но не ради парсинга а ради самих данных. Это было полезно. Он гонял на них нейросетевые алгоритмы. Торговые роботы типа.

    По поводу опыта работы с Selenium. Я не использовал никогда. Но я думаю что это очень полезный опыт если вы докажете что делаете любые штуки - можете пойти тестером автоматизатором в большую корпорацию. Это уже на несколько левелов выше чем парсинг сайтов. И оплата стабильная.

    Вобщем как цель жизни парсинг - втопку. Но как некий опыт. Попробовать. Поймать тыщи HTTP-ошибок. Парсить разные виды респонсов - это я считаю полезно.
    Ответ написан
    1 комментарий
  • Компилятор выдаёт ошибку 1 при Выставление счета через QIWI. Что делать?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Автор попробуй поменяй версию com.qiwi.billpayments.sdk на более новую или более старую.
    Ответ написан
    Комментировать
  • Где ошибка? Почему массив выводится в линию?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Кажется вот этот вывод перевода строки стоит не там.
    }cout << "\n";

    Вообще... олимпиадный код где сплошняком идет стена вычислений вперемешку с выводом читать трудно.
    Разбей хотя-бы на 3 функции. Ввод. Расчеты. И вывод результата.
    Ответ написан
    Комментировать
  • Будет ли приложение для arm64-v8a работать быстрее чем для armeabi-v7a?

    mayton2019
    @mayton2019
    Bigdata Engineer
    До 2005 года производительность зависела практически только от тактовой частоты. Покупаешь 2 процессора. Смотришь. Если в 2 раза больше - то можно предполагать что в приложениях типа рендеринга 3Д графики будет ощутима разница.

    Для современного железа все стало запутано. Стали наращивать число ядер. А это значит что программист обязан писать приложения так чтобы они бились на независимые части и работали на ядрах. Мультизадачка по сути. В твоём кейсе скорее всего не будет разницы. Или будет сильно зависеть от класса приложения. Или будет разница зависеть от совокупности - процессор-кеш-объем-памяти-тип-сетевого-соединения (3G/4G/Wifi).
    Ответ написан
    Комментировать
  • Что быстрее: select и update или просто update?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Делай просто update. Проверка не нужна.
    Ответ написан
    Комментировать
  • Стоит ли изучать sql, или же сразу заняться изучением ORM?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Стоит ли изучать sql, или же сразу заняться изучением ORM?

    Все люди которые ратуют за использование ORM с годами все равно приходят к очень сильной
    и мотивированной необходимости знать SQL. Этот язык сегодня является латынью баз данных.
    Вы сможете говорить с бизнесом на одном языке если будете в переписке активно использовать
    например язык DDL таблиц. Ваши аргументы будут выглядеть убедительно если в переписке будут
    фрагменты например любой консоли MySQL, psql, SQL*Plus e.t.c. Короче знание SQL - это признак
    джентльмена. Путь в приличное общество.

    И наоборот, вы будете вообще НЕПОНЯТЫ если попробуете показать ORM объект на Node или не дай
    бох на Java/JPA техниках аннотации. Бизнесу эти аннотации неинтересны и неинформативны.

    Да и вам самомму смоделировать любой сложности выборку или отчет будет бытрее в SQL чем в фрейморках
    ООП-отображения.

    Что касаемо перформанса. К сожалению все современные ORM реализуют только самые базовые возможности
    оптимизации запросов. Насколько я знаю Hibernate (по состоянию на 2015 год) так и не умел обращаться
    с Oracle Hints. А любой сложный ентерпрайз начинается там где вы выжимаете из запроса не 100 а 1000%
    возможностей. И здесь вам нужно управлять проприетарными функциями воздействия на оптимизатор.

    Вообще для меня например цикл оптимизации ORM запросов начинается с того что я выбрасываю из
    стека ORM. Заменяю на native. И долго наблюдаю его и оптимизирую. И когда достиг критерия готовности
    то пытаюсь затащить обратно в ORM. Иногда не заходит. Это те случаи когда ORM оказался плох.
    Эти случаи сложны, синьорны. и по каждому из них можно здесь в хабре открывать статью как минимум.

    Но не все так плохо. Существует взгляд на ORM с обратной стороны. Это фреймворки наподобие MyBatis.
    Они в первую очередь решают проблемы БД а уж потом дают опции объектных возможностей. Короче
    Батис - это ОРМ наоборот. Где эволюция системы идет не от кода к БД (как любят хипстеры) а от
    имеющихся вызовов процедур
    и запросов к объектам респонса.
    Ответ написан
    5 комментариев
  • С чего лучше всего начинать рефакторинг?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот плохо написанная функция изменения цены товара, учитывающая множество разных условий. Нужно рефакторить, так как сама функция жутко нечитабельна. С чего начать рефакторинг или какие методы использовать для начала рефакторинга?

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

    После того как модульный тест написан - можно смотреть на функцию. Что в ней видно невооруженным глазом? Видно большое количество повторяющихся действий. Например одна и та-же функция реплейса по регуляке.

    .replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')

    встречается 4 раза. Ее можно обработать через extract function. После этого кода станет визуально меньше.

    Далее - повторяющийся code-block с обновлением update_price. Его брат-близнец отличается только
    аргументом option_price. На этом можно сыграть и тоже сделать некоторое упрощение.

    if (prefix == '+') {
          update_price = current + Number(option_price);
        } else {
          update_price = current - Number(option_price);
        }


    Некоторые фрагменты кода напрашиваются на introduce temporary variable.
    Например следующий сниппет
    option_sizes.find('input[type="hidden"]')
    был использован дважды. И первый раз он нашел какое-то значение и был использован.
    И в следующей строке этот поиск был вызван снова. Хотя операция find как-бы подсказывает
    нам что она имеет complexity близкое к линейному. Тоесть нужно ценить процессорное
    время и не грузить его повторными поисками. Тут - как-бы смысл двойной. И перформанс
    и нормализация кода. Тоесть явное указание что этот результат нам еще понадобиться.

    Очень сильно в рефакторинге помогает типизация. Тоесть если переписать код с JavaScript на TypeScript
    то будут более очевидны некоторые инварианты.

    Вот на этом пожалуй хватит. Надо сделать эти рефакторинги и возможно дальше откроется видение других.
    Ответ написан
    3 комментария
  • Какая БД позволяет использовать структуру множественной связи (дерево связано с деревьями)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Посмотри графовые бд: Neo4j (например).
    Покрывает все твои потребности.
    Ответ написан
    2 комментария
  • Как поменять порядок битов в байте C?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут все биты - перевернуты.
    На псевдокоде как-то так.
    int a = 0b0010_1101;
    for(i in (1..8)) {
     b |= a & 0b0000_0001
     b <<= 1;
    }
    Ответ написан
  • Какой дистрибутив java выбрать для обучения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Можно брать последнюю с суффиксом LongTermSupport (LTS) но с условием что фреймворк тоже
    поддерживает эту версию. Например я тоже люблю топчик (JDK17) но вынужден кататься на
    более старой модели жигулей JDK11 только потому что нужные Spark/Hadoop иногда хотят
    именно старую версию.

    Для разработок в банковской среде очень многие enterprise приложения до сих пор (!)
    сидят на JDK-8 и очень мало вероятно что они когда-то переведут language на что-то более
    старшее. Поэтому весьма анекдотична ситуация когда вас собеседуют и спрашивают про
    модное-молодежное а когда приходите на рабочее место - с ужасом узнаете какой
    огромный парк легаси сред и языков вас будет сопровождать. Печаль-печаль.

    Вообще проблемы установки конкретного дистрибутива ощущают с болью в основном Windows-пользователи.
    Для Linux эта проблема не так заметна. Можешь поставить 3/11/17 LTS в разные фолдеры и переключать их просто меняя PATH/CLASSPATH для текущего сеанса консоли.

    Для приложений на базе контейнеризации (docker/kuber) - вообще такой проблемы не существует.
    Каждое приложение выбирает себе конкетную сборку JRE/JDK в конфигурации образа.
    Ответ написан
    Комментировать
  • Как можно практически закрепить знания JAVA SE?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Мне кажется ты слега перегрел себя. Что там оттачивать в Enum? Какой вопрос тебя могут спросить на собеседновании на джуна и на который ты не знаешь ответ.

    В твоей ситуации я был. Это похоже на усталость. Ничего не надо делать. Надо просто отдохнуть.
    Для систематизации-же заведи себе в гитхабе проектик типа FAQ. И складывай туда code-samples
    по каждому вопросу.
    Ответ написан
    Комментировать
  • Как сделать функцию полнотекстового поиска?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно попробовать начать с поиска по LIKE выражению. Обычно этого хватает для небольших таблиц.

    А сама постановка полно-текстового поиска - очень сложна в условиях. Например в том какие возможности поискового языка должны использоваться. Нужно ли учитывать национальные особенности языка. Стоп-слова. Стемминг. Лемматизацию. Как часто будут обновляться индексируемые данные. Это все - список экспертных вопросов которые надо проговорить. Если вы не знаете зачем вам это все - то наверное полнотекстовый поиск не нужен и like будет достаточно.
    Ответ написан
  • Как обращаться к элементам json через точку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Существует только один язык в котором объекты мапятся однозначно в JSON. Это javaScript.
    Собсно слово JSOn от этого и происходит. А во всех других - будут какие-то LinkedHashMap
    шаблонизирующиеся строкой как ключ и object как value.
    Ответ написан
    Комментировать