• В каком контексте значение класса String является неизменяемым в отличии от StringBuilder?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Почему все методы StringBuilderнельзя было поместить в класс String, чтобы не плодить классы строк?

    Главный поинт при создании immutable String - безопасность кода. Когда компиллятор точно
    знает что value строки не изменится - то он может доказать много кейсов и гарантировать что
    разделяемая память не будет сломана. Особенно это важно для мультипоточки. Когда
    разные потоки владеют строкой и здесь сам вопрос доказательства вдруг становится очень важным.

    Язык С++ например такой защитой не обладает и для него строка как фундаментальный тип
    может иногда мутировать. Тоесть если вы старались писать правильно то она конечно не мутирует.
    Но в этом есть большая разница между C++ и Java. На уровне платформы гарантировано отсуствие
    какого-то класса ошибок.

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

    Специально для уменьшения этой проблемы (реаллокации и копирования) был создан StringBuilder.
    Это вообще не строка а как-бы мутирующий буфер куда можно добавлять в хвост строки. И в конце
    когда все готово - из буфера берется иммутабельная строка и на этом работа билдера закончена.

    Immutable строки - это гениальное изобретение. Оно реализовано во многих языках и платформах
    и оно практически спасает разработчика бизнес-приложений от трудно уловимых ошибок.
    Ответ написан
    2 комментария
  • Как намекнуть начальству, что agile не избавляет от тз?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Agile не запрещает вам самим писать и согласовывать ТЗ. Для этого есть процедуры типа Груминг и прочее.

    Темпы современной разработки не то чтобы отменяют ТЗ а делают его просто сильно быстро неактуальным
    документом в силу того что бизнес очень быстро меняется
    . Поэтому пишите User Stories. Это и будет
    ваше основание для разработки. Пишите много. Добавляйте линки на Confluence.

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

    Тоесть в самом agile нет ничего контр-продуктивного или вредящего. Agile - это про гибкость.
    А вот для кого по настоящему agile может быть плох - так это для бесполезного специалиста в команде
    которые никакой полезной работы не делает. Он пару спринтов побегает. Посимулирует активность
    и потом будет удален из команды т.к. задач для него не будет.
    Ответ написан
    4 комментария
  • На сколько популярно и корректно хранить данные в столбце в виде JSON строки?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В конце 20-го века, когда Эдгар Кодд развивал свою реляционную теорию было очень
    модно все данные нормализовывать для хранения их в БД. Это соотвествовало экономии
    ресурсов (диски мерялись килобайтами и мегабайтами) и нормализация хорошо ложилась на
    техно-стек. Все данные должны быть атомарны. И ты - плохой DBA и программист если
    кладешь в ячейку что-то более комплексное чем просто атом.

    В 2000х развитие веб и XML(XHTML/SGML, XSLT, XPath) дало толчок новым видам
    хранения информации в виде markup languages. Появляются технологии семанического веба.
    Мечтатели-теоретики создают RDF, OWL. Базы данных пытаются успеть втянуть в себя новые типы.
    Oracle начинает поддерживать XML+Schema как тип данных в таблице. Браузер начинает
    поддерживаеть трансформацию XML и обогащение его стилями. XML - моден. Его внедряют
    везде где можно и где не нужно. Даже в конфигах Apache Http и в сборщике Maven.

    Параллельно Дуглас Крокфорд работает над Java Scrip Obj Notation и создает лайтовый язык
    для описания объектов и документов. Они - конкурируют с XML но JSON практически побеждает
    в вебе, полностью захватывая веб протоколы (Ajax, WebSockets, e.t.c). И интеракцию с сервером.
    JSON становится более популярный для REST. Многие БД тоже начинают поддерживать JSON.
    Postgres даже делает бинарный JSON и добавляет спец-индексы для быстрого поиска атрибутов.
    Узко-специализированные системы такие как Mongo изначально заточены на храннение JSON
    информации.

    BigData плавно проростает в 2007 (кажется) и где-то в 2014 (или позже) году фреймворк Spark начинает поддерживать DataFrames + Structured Types которые по сути являются зеркалом JSON. Фреймворк
    позволяет грузить в бигдату JSON-lines датасеты, автоматически выводя схему.

    Это - финал. Я считаю что после такой конвергенции в бигдату JSON получил путевку везде где только можно.
    Сегодня вы можете без стыда использовать JSON везде в любых уровнях стека (даже в Redis) если
    у вас хватает памяти и вы уже порешали вопросы бизнес-согласованности данных и умеете эти
    данные инвалидировать и обновлять.

    Если поискать анти-паттерны применения JSON в базах данных - то я-бы предложил такую метрику.
    Если вы очень часто обновляете маленькое поле внутри большого JSON документа и это создает
    сильные I/O нагрузки то скорее всего вам надо перепроектировать вашу БД как-то по другому
    и вынести это поле во вне по отношению к документу
    Ответ написан
    5 комментариев
  • Как работают транзакции в Spring?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Не все режимы изоляции поддерживаются целевой DBMS.
    DEFAULT(-1),
        READ_UNCOMMITTED(1),
        READ_COMMITTED(2),
        REPEATABLE_READ(4),
        SERIALIZABLE(8);

    Перечисление Isolation взято из умных теоретических книжек. Но Oracle к примеру поддерживает
    только READ_COMMITED и SEAIALIZABLE.

    И что ему делать если вы заказали READ_UNCOMMITED ? Поэтому я-бы сказал что Spring делегирует
    гарантии по изоляции к целевой системе.
    Ответ написан
    Комментировать
  • Как правильно обрабатывать SQLException?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Скорее всего коды SQL ошибок зависят от DBMS. Например я по старой памяти помню что если
    в коде вы видите ORA-00001 то вы скорее всего используете Oracle и ваша ошибка
    связана с нарушением Primary KEY во время INSERT/UPDATE.

    Другие DBMS (Postgres/MySQL) будут иметь другие коды ошибок.
    Ответ написан
    3 комментария
  • Как корректно изменить права во всей системе, чтобы others не могли ничего делать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Правильно написали что по умолчанию ОС и так достаточно безопасна и ничего уже из гаек
    закручивать не стоит
    . Иначе просто что-то перестанет работать.

    Но если ты такой любитель мозохизма - то посмотри в сторону Alpine Linux. Возможно
    там тебе будет еще больше бондажа. Кайфанешь.
    Ответ написан
    Комментировать
  • Как перевести этот блок if в математическую функцию?

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

    x   |  y
    ..  | ...
    8   | 30
    9   | 30
    10  | 50
    11  | 50
    ...

    Это используется в криптографии для внутренних замен внутри раунда в шифрах.

    Можно описать функцию как набор булевых функций и минимизировать их по Карно или Квайну
    для достижения какой-то минимальной формы. Это - тоже вполне себе метод.

    x1,x2.....x32   |  y1...y32
    ----------------|------------
     00 1010        | 01 1110
      .....         | 11 0010
                    | 11 0010


    Все эти способы - правильные. И разработчик выбирает тот который удобнее.
    Ответ написан
    Комментировать
  • Почему строка таблицы mysql выводится 3 раза?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Все правильно. Такие данные.
    Ответ написан
    Комментировать
  • Какой стек выбрать если я хочу разработать интернет-сервис по аналогии с Авито?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Бизнес успех таких сетей как VK, Facebook слабо связан со стеком. Они все стартовали с PHP но просто
    очень умно кешировали контент и децентрализовывали. Поэтому в первую очередь важен скилл
    специалистов которые будут видеть узкие места в системе и сумеют быстро их пофиксить.

    Популярность.

    Я-бы не брал в расчет вообще. Сервисы yahoo в свое время создавались на Lisp, а это был вообще
    нигде не популярный язык.
    Ответ написан
    3 комментария
  • Почему не создается файл логирования из артифакта?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Релизная сборка (jar/war/ear) может отличаться по составу файлов от того что видит IDE. Может конфиг собрался не туда.

    Сделай
    <configuration debug="true">
    и процесс инициализации Logback станет более подробным и смотри что он напишет.
    Ответ написан
    6 комментариев
  • Почему C# не кроссплатформенный?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если почитать обучающий портал A tour of the C# language
    https://learn.microsoft.com/en-us/dotnet/csharp/to...
    то там вообще нигде не пишут про кросс-платформенность.

    Мне кажется что этот миф пошел из обсуждения что платформа .Net создавалась MS в противовес
    Java чтобы иметь конкурентное преимуществое для чисто своей Windows-разработки но при этом
    обеспечить удобства (Managed Memory, CLR e.t.c).
    Ответ написан
  • Почему пропускатеся return в одном из методов Enum-класса?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Предположительно идет на вход не та кодировка. Попробуй заменить на "male" / "female" и все будет ОК
    Ответ написан
    Комментировать
  • Какая зависимость в Java приложении к подключению БД?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    1. Java (JDK/JRE) не содержит в себе драйверов доступа к БД вообще. В ней определен только базовый
    интерфейс java.sql.* и существует некий стандарт на то как драйверы должны работать. Например когда мы делаем ResultSet::close, или Statement::close, драйвер может ничего и не делать в этот момент. Все зависит от того
    как производитель (Oracle, MSSQL) реализовал под капотом работу драйвера. Поэтому как работает внутри драйвер это - тайна.

    2. Обычно если в приложении тебе часто и много нужно создавать объектов Connection, то используют пулы коннектов (Hikari Connection pool, DBCP, C3PO). Почитай в этом направлении. Пулы экономят сессионные
    объекты на стороне БД и создают новые коннекты быстрее за счет переиспользования сущесвтующих коннектов.
    В обычном (прямом режиме) работы с БД процесс установки соединения может занимать несколько секунд.
    Это может быть запредельно медленно для некоторых алгоритмов.

    3. В сложных ent. приложениях используются фреймворки типа Spring которые декларируют зависимости одник
    компонент от других
    и также обеспечивают ленивую инициализацию и работу синглтона. Всем новичкам
    нужно знать что такое синглтон и уметь им пользоваться. И лучше уметь это сначала без фреймворка
    чтобы понимать уже как это делает фреймворк.
    Ответ написан
  • Какие существуют кольцевые lock free очереди / каналы для Rust?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тебе не нужно никакое кольцо. Ищи просто lock-free очереди. Если будет кольцо
    - то тебе не хватит памяти и нужно будет придумывать механизм выхода из
    ситуации (хопа привет блокировка).
    Ответ написан
    Комментировать
  • Почему появляется ошибка Sqlite3.OperationalError: table users has no column named name?

    mayton2019
    @mayton2019
    Bigdata Engineer
    CREATE TABLE IF NOT EXISTS

    Скипает таблицу если она уже существует. Удали таблицу и тогда этот DDL отработает успешно.
    Ответ написан
  • Что потенциально Windows может знать о том что происиходит в Linux, установленные на один жесткий диск?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Все зависит от того как отформатирован Linux-диск. Во времена первых Linux Black Cat (я себе ставил)
    почти все пользователи делали большой fat32 раздел чтоб шарить файлы между Windows 98 к примеру
    и Black Cat. Другого способа перекинуть файло не было.

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

    Современные версии Linux уже видять NTFS через ntfs-3g поэтому Linux неограничено видит почти все.

    WSL - это вообще отдельная вселенная. Кажется он реализован как Докер контейнер. И видит Windows
    через /mnt/c точку монтирования.
    Ответ написан
  • Почему в https не используется асимметричное шифрование?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Оно используется для проверки сертификатов.
    Ответ написан
    7 комментариев
  • Как увеличить объем разделов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    1) Можно создать 7 фолдеров типа /disk1, /disk2 .... и примонтировать диски через mount.
    2) Можно собрать ZFS pool из 7 дисков и подключить их все как один большой диск (zpool create).
    3) Программный JBOD на базе Btrfs (mkfs.btrfs ... )
    4) LVM как уже писали выше
    Ответ написан
    Комментировать
  • Почему после перезагрузки ноутбука на системном диске освобождается 20-30 гб и все начинает лагать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нажми Ctrl+Shift+ESC. Появится таск менеджер. И посмтотри какие процессы висят в топе по CPU, Memory, Disk.
    Ответ написан