Обёртка для testcontainers Kafka. Умеет читать из контейнера, писать в контейнер и очищать топик.
Читать далее Kafka testcontainer wrapperАрхив метки: java
RabbitMQ testcontainer wrapper
Обёртка для testcontainers RabbitMQ + spring-multirabbit. Умеет писать в контейнер.
Читать далее RabbitMQ testcontainer wrapperПерекладываешь жысоны? Пссст, друг, смотри сюда!
Не знаю, как я раньше жил без этих плагинов…

Да нормально жил, но утомлялся точно больше. Не скажу даже вот так сразу, какой из них полезней. Остановлюсь на каждом чуть подробней.
Читать далее Перекладываешь жысоны? Пссст, друг, смотри сюда!Сравнение методов итерации по быстродействию
Snippet для консоли JShell. НЕ ЯВЛЯЕТСЯ нормальным бенчмарком. Для бенчмарков следует использовать, например, JMH.
Читать далее Сравнение методов итерации по быстродействиюGit хук для запуска тестов

Есть у меня такой pre-push
хук – автоматом прогоняет тесты локально, через maven
. Подключается по необходимости через отдельные git конфиги для проектов.
Получение класса “Enum с параметром” по значению параметра

Частенько в коде встречаются перечисления, дополнительно хранящие некие значения (в виде private final
поля обычно).
Чтобы в дальнейшем можно было, например, при сериализации в json это значение подставлять автоматом (@JsonValue
у Jackson). Тогда возникает обычно и обратная задача – десериализовать (распарсить) значение обратно в Enum (@JsonCreator
у Jackson).
Вот мне и надоело копипастить туда-сюда все эти методы (сериализации/десериализации) между классами Enum. Решил сделать один раз утилитный метод и в проекте им пользоваться. Благо, время позволило.
Читать далее Получение класса “Enum с параметром” по значению параметраHackerRank Bit Manipulation: Counter game
Вторая из ранее сохранённых и ныне обретённых задачек с HackerRank. Как понятно из заголовка – решается через битовые операции.
Хотя – теоретическим можно было бы помучиться с BigInteger
и арифметикой… И посмотреть, какое время займёт поиск решения.
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
for (int a0 = 0; a0 < t; a0++) {
long n = in.nextLong();
String result = counterGame(n - 1);
System.out.println(result);
}
in.close();
}
private static String counterGame(long n) {
//long mask = 0x8000000000000000L; //2^63 in hex //W
//eq:
//long mask = -9223372036854775808L; //2^63 //W
long mask;
int step = 0;
for (int i = 63; i >= 0; i--) {
mask = 1L << i;
//compare with 2 power i
if ((n & mask) != 0) {
//we max 2^i
//step++;
step = step ^ 1;
}
n -= mask;
//mask >>>= 1;
}
return ((step & 1) != 0) ? "Louise" : "Richard";
}
}
Традиционно – решение на Гитхабе.
https://www.hackerrank.com/challenges/counter-game/problem
HackerRank 30 Days of Code: Day 11: 2D Arrays
Не Литкодом единым, как говорится! Нашёл на диске пару задачек с HackerRank – видимо, показались тогда особо любопытными, и были сохранены.
Впрочем, и сейчас они выглядят интересно. Эта, например (первая из них) – перемещение паттерна в виде “песочных часов” по “игровому полю”, представленному матрицей, с целью найти такой паттерн, сумма цифр в котором будет максимальной.
Здесь у меня получилось два решения – частное (на Java) и общее (на Perl).
Читать далее HackerRank 30 Days of Code: Day 11: 2D ArraysLeetCode 125. Valid Palindrome
Очередная задачка уровня Easy, но с довольно низким показателем Acceptance (44.4%). Что выражается в достаточно обширном наборе граничных случаев, некоторые из которых делают больно 🙂
Было желание сделать за один проход по исходной строке (без выделения дополнительно памяти). Вроде даже получилось, если ориентироваться на статистику запуска с LeetCode.
class Solution {
private static final int LETTER_CASE_SHIFT = 32;
public boolean isPalindrome(String s) {
if (s.length() == 1) return true;
char a, b;
int mid = (s.length() - 1) >>> 1;
for (int i = 0, j = s.length() - 1; i <= mid; i++, j--) {
a = s.charAt(i);
b = s.charAt(j);
while (isNotAlphaNumeric(a) && i < j) {
a = s.charAt(++i);
}
while (isNotAlphaNumeric(b) && i < j) {
b = s.charAt(--j);
}
if (isComparable(a, b)) {
if (!equalsIgnoreCase(a, b)) {
return false;
}
} else {
return false;
}
mid = (i + j) / 2;
}
return true;
}
private static boolean equalsIgnoreCase(char a, char b) {
return a == b
|| a - LETTER_CASE_SHIFT == b
|| a == b - LETTER_CASE_SHIFT;
}
private static boolean isComparable(char a, char b) {
return (isLetter(a) && isLetter(b))
|| (!isLetter(a) && !isLetter(b));
}
private static boolean isLetter(char ch) {
return 'a' <= ch && ch <= 'z'
|| 'A' <= ch && ch <= 'Z';
}
private static boolean isNotAlphaNumeric(char ch) {
return !isLetter(ch) && ('0' > ch || ch > '9');
}
}
Success: Runtime:2 ms, faster than 99.92% of Java online submissions. Memory Usage:42.3 MB, less than 87.41% of Java online submissions.
Ссылка на решение на Гитхаб.
A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers. Given a string s, return true if it is a palindrome, or false otherwise.
https://leetcode.com/problems/valid-palindrome/
LeetCode 2278. Percentage of Letter in String
Ещё одна простая задачка – определение процентного содержания целевого символа в исходной строке. Пара решений:
- через стримы (примитивно, без кастомной свёртки, да и помедленней)
- и через цикл
for
.
Стримы
public int percentageLetter(String s, char letter) {
long cnt = s.chars().filter(it -> it == (int) letter).count();
return (int) (100 * cnt / s.length());
}
Success: Runtime:2 ms, faster than 12.22% of Java online submissions. Memory Usage:40.6 MB, less than 45.95% of Java online submissions.
Цикл
public int percentageLetter(String s, char letter) {
int cnt = 0;
for (char c : s.toCharArray()) {
cnt += c == letter ? 1 : 0;
}
return 100 * cnt / s.length();
}
Success: Runtime:0 ms, faster than 100.00% of Java online submissions. Memory Usage:40.1 MB, less than 88.72% of Java online submissions.
Решение на гитхабе.
Given a string s and a character letter, return the percentage of characters in s that equal letter rounded down to the nearest whole percent.
https://leetcode.com/problems/percentage-of-letter-in-string/