Как скрипт Thanos случайным образом удаляет половину файлов сервера?

Java алгоритм

В «Мстителях 4» Танос может случайным образом убить половину своей жизни щелчком пальцев, на GithubСкрипт ТаносаПоловина файлов сервера может быть удалена случайным образом. Мне было интересно, как это сделать случайным образом удалить половину файлов? ? Как реализован нижний слой случайного алгоритма? Я потратил время, чтобы разобраться в ответах за последние два дня.

Тело сценария Таноса

let "i=`find . -type f | wc -l`/2";
if [[ uname=="Darwin" ]]; then
    find . -not -name "Thanos.sh" -type f -print0 | gshuf -z -n $i | xargs -0  -- cat;
else
    find . -not -name "Thanos.sh" -type f -print0 | shuf -z -n $i | xargs -0  -- cat;
fi

Чтобы полностью понять этот сценарий, я специально проверил несколько ключевых слов.let,find,shuf/gshuf,xargs.

Объясните примерно,let "i=`find . -type f | wc -l`/2";Назначьте половину количества строк в обычном файле сервера.

if [[ uname=="Darwin" ]]Его следует использовать, чтобы судить, является ли система Mac или Linux, используется Linuxshufделать случайным образом, для Macgshuf.

find . -not -name "Thanos.sh" -type f -print0 | gshuf -z -n $i | xargs -0 -- cat;найти все имена, которые неThanos.shобычных файлов, выбранных случайным образом$iи выполнить их как аргументыcatоперация, истинное удаление будетcatизменить наrmВот и все.

Случайный алгоритм Java

Отметка времени по модулю

Например, получить случайное число в диапазоне [0,100).

final long l = System.currentTimeMillis();
final int i = (int) (l % 100);

Math.random()

Например, чтобы получить случайное число int.

final double d = Math.random();
final int i = (int) (d*100);

Случайный класс

я наблюдалMath.random()Исходный код , также называетсяRandomметод класса.

    // Math.random() 实现
    public static double random() {
        return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
    }
    
    // RandomNumberGeneratorHolder 其实是 Random 类
    private static final class RandomNumberGeneratorHolder {
        static final Random randomNumberGenerator = new Random();
    }
    
    // nextDouble() 方法在 Random 类中的实现
        public double nextDouble() {
        return (((long)(next(26)) << 27) + next(27)) * DOUBLE_UNIT;
    }

RandomКласс предоставляет множество случайных методов, разные типы возвращаемых значений и два конструктора.

    public Random() {
        this(seedUniquifier() ^ System.nanoTime());
    }
    
    public Random(long seed) {
        if (getClass() == Random.class)
            this.seed = new AtomicLong(initialScramble(seed));
        else {
            // subclass might have overriden setSeed
            this.seed = new AtomicLong();
            setSeed(seed);
        }
    }

Если есть метод, посмотрите на имя метода, чтобы узнать, что он делает.

Исходный код очень трудно читать.Информация, найденная в Интернете, показывает, что случайный алгоритм Random имеет следующие характеристики:

  1. Псевдослучайный.
  2. Одно и то же количество вызовов с одним и тем же начальным числом дает один и тот же результат.
  3. Равномерное распределение, каждое число в интервале имеет одинаковую вероятность.

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

Истинные и ложные случайные числа

Алгоритмы случайных чисел — это все псевдослучайные числа.С момента передачи параметров последующий вывод является конкретным. Именно этот материал в настоящее время генерирует настоящие случайные числа.

Черепаха, используй квантовую механику. Я тоже смотрел только на мех, как на продолжение внеклассных знаний.

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


Добро пожаловать в общедоступную учетную запись WeChat, делитесь идеями и техническими статьями, время от времени разыгрывайте удачи и с нетерпением ждем прогресса вместе с вами. WeChat поискМаленький солдат Чжан ЦзяньИли отсканируйте QR-код ниже.