All Blogs

Archives for: August 2022

Сниппет для сэмплинга пользователей или A/B тестирования (Java)

Допустим, у нас есть стабильный идентификатор пользователя userId. С помощью этой функции мы превращаем строковый идентификатор в псевдослучайное число:

int userNumber = stringIdToSamplingMillis(userId);

Теперь мы можем использовать это число так:

if (userNumber < 50) ... // Пользователь попал в 5% тестовую выборку
if (userNumber < 500) ... // Пользователь попал в категорию A
else ... // Пользователь попал в категорию B

Функция:

    // Генерирует по строке псевдослучайное число от 0 до 999 включительно.
    private static int stringIdToSamplingMillis(final String str) {
        // Используем MD5 в качестве генератора псевдослучайного числа на базе строки
        final MessageDigest hasher = MessageDigest.getInstance("MD5");
        final byte[] data = str.getBytes();
        hasher.update(data, 0, data.length);
        // Получим MD5 в виде длинного целого числа
        final BigInteger bigInt = (new BigInteger(hasher.digest())).abs();
        // Получим хвост длинного целого в виде обычного int-а [0..999]
        return bigInt.mod(BigInteger.valueOf(1000)).intValue();
    }

Archives

                                                                                                                                                                                                                                                                   
August 2022
Mon Tue Wed Thu Fri Sat Sun
<<  <   >  >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Blogs :

Search :

Misc

Powered by


© Sergey A. Galin, 1998-2021 sageshome.net/blog/