Задать вопрос
  • Что быстрее: 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.
    Ответ написан
    Комментировать
  • Какую область программирования выбрать PHP или Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если автор знает Python - это очень хорошо. Мне кажется что под него щас проще искать работу. В том смысле что он - широкоформатный. Есть и девопс и электронная коммерция и дата-саенс и автоматизация тестирования и нейросети с роботами и железяки.
    Ответ написан
    Комментировать
  • В чем практический смысл тестирования?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У багов есть разный impact. Или степень влияния на качество продукта. Вот какое влияние сдвинутых иконок?
    Я думаю их увидели только жители стран которые используют перевод с английского и этот перевод оказался на несколько символов длинее оригинала из-за чего произошел развал дизайна. Можно сказать что аудитория некоторых стран ощутила легкое неудобство.

    Тоесть impact - так себе.

    А что будет если программист 3Д графики допустил ошибку, которая приводит к крашу игры? Тут влияние посильнее. Я-бы сказал что это провал релиза. Как такое пропустили тестировщики (автоматизаторы или ручники) неважно) - ХЗ. Но тут важно срочно бежать в студию и выкладывать на steam экстренное обновление игры. И счет идет не на недели а на считанные дни. Кое-кому из отдела разработки и тестирования придется провести несколько безсонных ночей перед багфиксом.

    Вот в этом и есть практический смыл тестирования. Тестировать важные части логики.
    Ответ написан
    Комментировать
  • Какой монитор выбрать, если материнка DVI-D и HDMI?

    mayton2019
    @mayton2019
    Bigdata Engineer
    DVI-D - это морально устаревший стандарт. И его стоит брать только для железа которое уже не будет модернизироваться. Кроме того у DVI-D есть ограничения по разрешению видео. Посмотрие в технических описаниях стандарта.
    Ответ написан
    Комментировать
  • Какой формат (с изменениями) эффективнее хранится в Git?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вам надо в git складывать не бэкапы Sqlite а текстовое представление wiki по состоянию на сегодняшний день. Насколько я помню там есть
    свой язык форматирования типа markup. Так что все будет норм.
    Ответ написан
    2 комментария
  • Какую выбрать бд для телеграм бота на пайтоне?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нашел информацию, что sqlite не поддерживает многопоточность.

    Это не проблема для твоего приложения. Обеспечивай синхронизацию на уровне python и работай короткими
    операциями (OLTP). insert/update по одной строчке.

    А мультипоточность можно заказывать для долгоиграющих процессов. В боте таковых нету. Не должно быть вообще. Никогда не должно быть.
    Ответ написан
    Комментировать
  • Зачем паттерн одиночка?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Этот паттерн нужен для тех языков где нет специальных возможностей для сингл-тонизации. Например в Java это всегда реализуется через статичное поле или метод в любом классе.

    В Scala есть object - это уже готовый синглтон из коробки поэтому необходимости в следовании паттерну уже вроде как нет.
    Ответ написан
  • Можно ли ускорить запрос SELECT?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть простейший запрос SELECT * from Table.
    ...
    Реально ли как-то ускорить в этом случае?

    Есть много мест в application где может что-то замедлятся . И это не обязательно SQL. Это может
    быть веб-приложение, которое медленно отрисовывает таблицу. Или это может быть сетевой канал
    который медленно отдает данные. Чтоб заниматься оптимизацией - нужно точно-точно знать где
    оптимизировать. Или это будут зря потраченные усилия. Кроме того для UI например важно
    получение 1 page вместо того чтобы загружать миллиард строк. Поэтому нужно знать какой %
    результата выборки вы хотите использовать сразу (сию секунду) после получения и что
    можно отложить на потом. Мой опыт подсказывает что пользователь вообще не воспринимает
    информацию больше чем 1 абзац текста. Поэтому разгонять UI для отдачи миллиарда строк
    нет никакого смысла.
    Ответ написан
    Комментировать
  • Почему так популярны телеграм боты?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется что преподаватели задают такое. Потому-что трудно представить себе более безсмысленные постановки которые прилетают. Их архитектура - смехотворна. Нет даже намека на какую-то идею. Или может быть на мощное хранение больших данных. Так.... if-else-if-else.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Пишу в учебных целях класс, который будет заниматься логгированием.

    Держи всегда файл открытым. Если это для Windows - то пользователю не запрещается открывать его на ЧТЕНИЕ в текстовом редакторе в этот момент.

    И не забудь добавить ротацию логов там по минутам или часам или суткам. Чтоб не было 1 файла в петабайт.
    Такой точно нигде не откроешь.

    может вырасти вычислительная нагрузка

    Какие-то непонятные страхи. Что там куда вырастет? Я не вижу в работе логгера вычислительной нагрузки.
    Давай чтоб-не было в вопросе всяких метафор типа "безболезненно", "прелестно".... и так далее - дай
    цифры. Сколько будет записей в день. Сколько на пике в секунду. Как часто пользователь будет лог
    открывать. Что он будет с ним делать? Будет ли редактировать(!) ?
    Ответ написан
  • Как сформировать деревья в json используя golang?

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

    id name     path  parent
    -----------------------
    1  Беларусь 1     null
    2  Россия   2     null
    3  Минск    1.3   1
    4  Москва   2.4   2
    5  СПБ      2.5   2
    6  Невский  2.5.6 5


    Ну а дальше - select... connect prior и получим ранжированый курсор по дереву. Там-же будет
    доступно виртуальное поле level. И обходом этого курсора можно сделать JSON документ.
    Если level растет - то увеличиваем indentation и открываем вложенный элемент соотв.

    Если go-lang поддерживает stremable json writers то даже лучше.
    Ответ написан
    9 комментариев