Задать вопрос
Контакты
Местоположение
Россия, Новосибирская обл., Новосибирск

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (21)

Лучшие ответы пользователя

Все ответы (28)
  • Как откатиться назад на стабильный commit и при этом сохранить полезный код, который ты сделал после допущенной ошибки?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    Временно переключиться на другой коммит:

    Вы можете временно переключиться на другой коммит:

    git checkout <your_commit_sha>

    Если вы хотите делать коммиты, пока вы временно на другой ветке:

    git checkout -b old-state <your_commit_sha>

    Чтобы вернуться туда, где вы были, просто снова checkout ветку, в которой вы были. (Если вы внесли изменения, при переключении веток, вам придется обращаться с ними соответствующим образом.

    Отменить раннее опубликованные коммиты новыми коммитами:

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

    # Это создаст три отдельных коммита возврата:
    git revert <your_commit_sha1> < your_commit_sha2> <your_commit_sha3>
    # Это вернет последние два коммита. Также принимает диапазоны:
    git revert HEAD~2..HEAD
    # Точно так же вы можете отменить ряд коммитов, используя хэши коммитов (не включая первый хеш):
    git revert <your_commite_sha>
    # Отмена мердж коммита:
    git revert -m 1 <merge_commit_sha>
    # Чтобы получить только один коммит, вы можете использовать 'rebase -i', 
    # Или вы можете сделать это вручную (обязательно сделайте это на верхнем уровне вашего репозитория)
    # Привести ваш индекс и дерево в нужное состояние, не меняя HEAD:
    git checkout <your_target_commit_sha>
    # После чего обязательно зафиксируйте коммит. Будьте уверены в том, что вы сделали на 150% и напишите хорошее сообщение с описанием того, что вы только что сделали:
    git commit


    Раздел git-scm.com, где описывается использование git-revert. Если вы решите, что все-таки не хотите возвращаться, вы можете отменить возврат (как описано здесь) или вернуться к состоянию до возврата. В этом случае вам также может быть полезен этот ответ:
    тык
    Ответ написан
    Комментировать
  • Зачем json считывать через Scanner?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    Зачем считывать файл через Scanner?


    С помощью класса Scanner вы можете читать данные из файла точно так же, как и с помощью BufferedReader'а, BufferedInputStream'а и других классов, способных читать файловые данные. Почему же здесь использовали Scanner известно только тому, кто написал этот класс, потому что есть более подходящие классы для подобных операций.

    Зачем использовать цикл? нельзя взять и всю прочитать без цикла?


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

    Зачем строке происваевать данные файла?


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

    Зачем указывать тип объекта в конце?


    Метод fromJson десериализует JSON, прочитанный из Reader'а (в данном случае из строки) в объект класса, указанного вторым аргументом.
    Ссылочка на спек класса
    https://www.javadoc.io/doc/com.google.code.gson/gs...
    Ответ написан
    Комментировать
  • @Volatile, кэшировние?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    CPU имеют кэши разного уровня L1, L2, L3. Каждый поток(а также ядро процессора) имеет собственный кэш. Эти кэши хранят минимальный набор оперативной памяти для обеспечения производительности. Если переменная определена как volatile, то все операции записи над ней сразу же отражаются в памяти и не кэшируются. У потоков нет локальной копии памяти и часть данных которую поток читает / записывает может быть из кэша, а не из основной памяти, а поэтому когда один поток изменяет какую-либо переменную, то другой поток не может увидеть изменения над ней. Грубо говоря, для таких случаев и нужен volatile. Фух, объяснил как мог, возможно кто-то объяснит более подробно.

    5fec4c344c127654024248.png

    Можете почитать про модель памяти в Java
    https://docs.oracle.com/javase/specs/jls/se7/html/...
    Ответ написан
    Комментировать
  • Как узнать какие версии библиотек установлены в Java проекте?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    Библиотеки могут быть добавлены в проект как в виде java-архива вручную, так и управляться системой автоматической сборки проектов по типу maven/gradle/ant. Делают абсолютно то же самое, а именно добавляют java-архивы в раздел "External Libraries" вашего проекта, в названии самого архива как правило указывается версия этой библиотеки, либо если вы пользуетесь системой авто-сборки, то версия библиотеки указывается в разметке при ее добавлении.
    Ответ написан
    Комментировать
  • В чем разница между str и &str?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    str представляет собой неизменяемую последовательность байтов UTF-8 динамической длины где-то в памяти. Поскольку размер неизвестен, его можно обрабатывать только за указателем. Это означает, что str чаще всего используется как &str — ссылка на некоторые данные UTF-8, обычно называемые «срезом строки» или просто «срезом». Срез — это просто представление данных, и эти данные могут быть где угодно, например:

    - В статическом хранилище: строковый литерал "foo"представляет собой файл &'static str. Данные жестко закодированы в исполняемый файл и загружаются в память при запуске программы.

    - Внутри выделенной кучи: String разыменовывает представление &str в строке.

    - На стеке: Например, в следующем примере создается массив байтов, выделенный стеком, а затем он получает представление этих данных как &str:

    use std::str;
    
    let x: &[u8] = &[b'a', b'b', b'c'];
    let stack_str: &str = str::from_utf8(x).unwrap();


    Используйте String, если вам требуется владение строковыми данными (например, передача строк в другие потоки или их создание во время выполнения), и используйте &str, если вам нужно только представление строки.
    Ответ написан
    1 комментарий