Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Какой сервер хранения данных выбрать?

Лучший ответ:
Рекомендую посмотреть в сторону распределенных хранилищ, в частности - собрать CEPH-кластер. Серверов у вас много. Вы их свяжете между собой 10G сетью, поставите iSCSI на раздачу, а в некоторых случаях, если клиенты будут под linux, то и напрямую подключите. Будет у вас распределенное хранилище на все диски сразу. Можно будет сделать и кеширование на SSD, и прозрачное добавление дисковых ресурсов, и прозрачное восстановление и кучу всего хорошего.
Есть, правда, небольшие требования к серверам, по гигабайту RAM на терабайт диска. Если втыкаете 24 диска по терабайту, то ставите 24 гига памяти. Но это не проблема. При этом вам совсем будут не нужны RAID-карты, достаточно обыкновенных HBA и экстендеров. За каждым диском отдельно будет следить и администрировать сам CEPH. Он же будет делать дублирование и распределение данных по дискам и серверам кластера. Производительность будет заведомо лучше, чем при записи на отдельный сервер, так как запись.чтение происходит параллельно на несколько серверов кластера.
Дополнительно получите снапшоты, гибкость управления и очень хорошую отказоустойчивость.

Худший ответ:
В общем, долго решались и рядились, в конце концов остановились на серверах SuperMicro 4U Server 2 x E5-2623v4 32GB LSI 9361-8I SGL 12Gb/s / 240GB SSD Intel S4510/ 2x10Gb/ 2x920W/ Intel Ethernet Server Adapter 5210-DA2 10Gb Dual Port, SFP. Пока на каждый сервер по 100-120 камер.
Оказалось, что ПО Трассира не любит, чтобы был один большой массив RAID, разбивать по LUN потом не стали, оставили диски вообще без RAID, как порекомендовала ТП Трассира.
Почему не стали делать отдельно хранилище - мы пробовали на тесте такой вариант, он нас не устроил.
Постепенно будем нагружать аналитикой и смотреть, как будут вести себя серверы.
Вопрос: Стоит ли изучать фреймворк php и какой именно?

Лучший ответ:
Хожу пешком для себя годик. Знаю, что есть всяки-разны велосипеды.

Пешком хожу на уровне: могу пройти практически любое расстояние (от похода в магазин до похода в соседнюю деревню)

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

Не знаю, стоит ли учиться кататься на велосипеде и на каком именно. Поэтому задаю вопрос и надеюсь увидеть ответы опытных велосипедистов.

Худший ответ:
В ответе на вопрос Актуален ли Yii2 Фреймворк в 2020? есть много информации на эту тему. Думаю, что будет полезно.
Вопрос: Что выбрать под backend python, machine learning и математику/физику в python?

Лучший ответ:
с юзер экспириенс у маков всё не просто хорошо, а отлично. особенно если найдёте в себе силы отказаться от старых привычек и понять логику новой системы.
не без косяков конечно (а где их нет), но лично для меня макось - лучшая ось для повседневной работы.
что касается яблобуков: учитывая их практически нулевую способность апгрейда, брать нужно самый мощный, который можешь себе позволить.
и я бы предпочел "старые" 16гб и 4 ядра "новым" 8 гигам и 2 ядрам.

Худший ответ:
macbook pro 13 2018(8gb 2ядра) -> это модель 17 года, с большим гимороем типа проблемы у кабеля к монитору (часто ломается после пары лет эксплуатации), и проблемы с клавиатурой. 
Учитывая что эти макбуки абсолютно не ремонтопригодны покупать такую модель крайне не рекомендуется. 
Можно попробовать взять 4х ядерную модель 19 года, но отзывов пока мало, не понятно как она себя ведет (заявляется что прошлые недочеты поправили)
=======
по поводу рабочего пайплайна - ноутбуки всегда будут слабее десктопов, я бы рекомендовал попробовать выстроить схему с "облачным тестированием, компилированием, деплоем", завязанным на гит, и все бы задачи выполнялись напрямую на сервере, а ноутбук использовать как терминал и редактор кода.
Вопрос: Как управлять запущенным процессом Python? Если ли что-то типа API у работающих процессов?

Лучший ответ:
Управляют через сигналы, сокеты, API
Можно и через файловую систему.

Худший ответ:
Дополню. Есть этот большой скрипт, который постоянно работает и находится "на подхвате", а есть более мелкие, с которыми взаимодействует пользователь (данные с формы). И задача в том, чтобы передавать данные от пользователя в запущенный 'тяжелый' процесс.
Вопрос: Как сделать правильную семантическую разметку?

Лучший ответ:
Удивительно, но заказчик прав. А тебе рекомендую обратиться к документации, что есть footer и header. Там же и найдешь уточняющую информацию к моему ответу.

Худший ответ:
С одной стороны прав тот кто платит, с другой надо бы выслушать аргументацию. Почему ему надо так как он хочет, и почему вы считаете что вы правы. 
Если это просто хотелки с обоих сторон - делайте как говорят. Принципиально это не меняет ничего.
Вопрос: Какие существуют способы создания инструмента для форматирования текста (на подобии текстовых редакторов)?

Лучший ответ:
Смотри сюда, сырцы у них открытые.
https://github.com/codex-team/editor.js

Худший ответ:
Это js. 

Contenteditable может вообще не использоваться, так как поведение от браузера к браузеру отличается. Изначально это кажется прикольной идеей, но потом понимаешь, что технология нулевая. 

Gdoc, facebook и некоторые другие ребята делают вообще полностью свое решение. Трекают нажатия клавиш, рисуют кастомный курсор, записывают контент в виде неких блоков, которым можно задать свойства или подменить на валидный html. 

Тема достаточно сложная. Наверное, во фронтенде это в принципе одна из самых замороченных штук.
Вопрос: Как решать задачи?

Лучший ответ:
Значит вам кажется, что вы понимаете.

Худший ответ:
Пробуй гуглить и экспериментировать. Я часто встречаюсь с этим и решаю всё с помощью гугла или экспериментальным путем
Вопрос: Как запустить программу Python на фоне?

Лучший ответ:
Переименуйте свой скрипт в .pyw

Python scripts (files with the extension .py) will be executed by python.exe by default. This executable opens a terminal, which stays open even if the program uses a GUI. If you do not want this to happen, use the extension .pyw which will cause the script to be executed by pythonw.exe by default (both executables are located in the top-level of your Python installation directory). This suppresses the terminal window on startup.


https://docs.python.org/2/using/windows.html#execu...

Худший ответ:
сделать файл исполняемым и запустить.
PS Недавно меня повысили до Адмирала.
Вопрос: Почему пишут const когда можно написать let?

Лучший ответ:
Ответ прост:
const => ReadOnly на переменную.
let => ReadWrite на переменную.

Причины для защиты переменной от изменения могут быть абсолютно любыми.

1. Как наиболее частое употребление защиты: многократное использование значения константной переменной в разных блоках кода.

2. Иногда, используют как хранилище, используя объект внутри константы. 
Важно помнить: объект внутри константы МОЖНО изменять, но нельзя менять ссылку на него (значение самой константы).

Ну и отрывок из доки:const создаёт константу (новую именованную ссылку на область памяти), доступную только для чтения. Это не означает, что указываемое значение неизменно, но это означает, что идентификатор не может быть переназначен. Например, если константа указывает на объект, то сам объект может быть изменён.


Худший ответ:
const используется для того, чтобы другой разработчик случайно не изменил значение переменной. Если ты пишешь для себя и прекрасно держишь все в голове, то пиши свой код хоть в одну строку сразу минифицированным). Это становится максимально понятно при разработке крупных проектов. Тоже самое могу сказать, например, про ООП.
Вопрос: Каннибализация ключевых слов?

Лучший ответ:
Давайте подробно рассмотрим эти вопросы.
1. Пусть нас интересует ВЧ-запрос "дверные ручки". Соответствие запроса и заголовка TITLE Яндексом и Гуглом (в большей степени) определяется формулой BM25. Если посмотреть в корень этой функции, то будет понятно, что чем больше в заголовке "лишних" слов, тем ниже коэффициент BM25, что говорит о более низкой релевантности Title № 2 к рассматриваемому ВЧ-запросу.
В случае, если рассмотреть НЧ-запрос "дверные ручки на круглой накладке", то BM25 для Тайтла № 2 будет выше. Следовательно релевантность второго заголовка к НЧ-запросу выше, значит шансы ранжироваться по НЧ у данного заголовка более высоки.
2. Стоит или нет убирать слово "дверные" из заголовка, необходимо сначала оценить, а ищут ли вообще и достаточно ли ищут ручки вместе с этим словом. По логике дела ручки в этой жизни бывают разные, поэтому уточнение "дверные" является важным сигналом о том, что речь идёт не о канцелярии, не о детских ручках, а о мебели, стройматериалах. Важные сигналы для поисковиков необходимо оставлять.
3. Ответ на третий вопрос вытекает из второго.
Успехов в продвижении!

Худший ответ:
1. бред 
2. бред
3. бред

запомни - нет Букваря СЕО, все экмпериментами и соображалкой
делай СДЛ и осторожно экспериментируй

по "купить" осторожно очень, хотя вроде ссылки в href катят еще, но лучше разметкой
"дверные" не убирай
Вопрос: Могу ли я вызвать исключение из потока A в потоке B?

Лучший ответ:
Нет никакого способа сделать это средствами языка, но можно с помощью хака, использующего Cишное API CPython:import ctypes
import threading
import time


def raise_async(thread, exception):
    if thread.ident is None:
        raise ValueError('Поток не запущен')
    r = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread.ident, ctypes.py_object(exception))
    if r == 0:
        raise ValueError('Неправильный идентификатор потока')
    elif r > 1:
        ctypes.pythonapi.PyThreadState_SetAsyncExc(thread.ident, 0)
        raise SystemError('Неожиданное состояние среды выполнения')


def f():
    print('Поток запущен')
    try:
        while True:
            time.sleep(1)
    except ZeroDivisionError:
        print('Эй! Я же ничего не делил!')


if __name__ == '__main__':
    t = threading.Thread(target=f)
    t.start()

    time.sleep(3)
    raise_async(t, ZeroDivisionError)

    t.join()
Правда не факт, что поможет. Если поток заблокировался на вводе/выводе, то виртуальная машина просто не будет делать проверку исключений.
И повторюсь, что вашу проблему наверняка можно решить каким-нибудь иным, более правильным способом.

Худший ответ:
В общем случае, нет, нельзя.
Но если в потоке А предусмотреть метод, который падает с исключением, то можно вызвать этот метод из потока Б
Вопрос: Какой менеджер закладок вы используете?

Лучший ответ:
raindrop.io
вполне функционален бесплатно, за примерно 2 бакса в месяц получаешь недобэкап и возможность вложенных коллекций.
пользуюсь уже лет пять. не без косяков, но, в целом, очень даже круто.

Худший ответ:
EverySync. 
+ Бесплатный план:
    15000 Ячеек/Закладок
    500 Приватных Закладок/Ячеек
    500 Закладок/Ячеек в Архиве
+ Синхронизация\закачать на сервер\скачать с сервера закладки\бекап
+ Вложенные папки
+ Расширения под оперу, фокс и хром
+ Веб-менеджер
    - Нет драгНдропа
    - Дубовый поиск (нет регулярных выражений (не нашёл) и поиска по нескольким вариантам)
    - Нет тегов \ +Есть подписи (дискрипшн) 
    ~ Древний, но простой интерфейс
    + Есть мусорка, архив, приват, фаворит (последие 2 практически одно и тоже, неразобрался)
+ Поиск дубликатов и пустых папок
+ Если поставить их Speed Dial, то и го можно синхронизировать
- Автообновление раз в час (можно вкл\выкл)
~ Общая учётка с нимбуснот
Вопрос: Как найти сумму чисел на промежутке от 1 до n(n вводит пользователь), шаг 1?

Лучший ответ:
Завести счетчик (переменная) и в цикле от 1 до n прибавлять к счетчику единицу. 
Либо испльзовать формулу подсчета суммы для арифметической прогрессии.

Худший ответ:
Можно пройтись циклом for, там не сложно.
Вопрос: Видеоуроки — долго, и много воды. Стоит ли тратить на них время?

Лучший ответ:
Нет, не стоит. 
Вы тупо будете слушать, как картавый мычащий Васян пересказывает какой-нибудь learnjavascript, пропуская половину тем, которые сам не понимает.
И таких видео - 90%.

Худший ответ:
Видеоуроки в чистом виде - нет, не стоит.
Если одна из частей обучающего курса - фактически запись лекций, тогда разумеется смысл есть.
Вопрос: Изучение базы сетей?

Лучший ответ:
Скачал Олиферов - читай :)

Худший ответ:
В плане сетей - Вы должны понимать как организуются сети, что такое маска подсети и зачем она нужна
Что такое шлюз и днс, как они работают
Что такое фаерволл и зачем, что такое НАТ и как он работает
Что такое прокси и как работает
Что такое VLAN
Что и как с впн...

Это для начала
Ну и про Танненбаума скорее всего хороший совет, хоть я и не читал
Вопрос: Может ли middle разработчик быть тимлидом?

Лучший ответ:
Может ли, по-вашему мнению, middle разработчик быть тимлидом?
По моему мнению - нет.Если да, то может ли он иметь в подчинении сеньора ?
Ну, если управление в конторе выстроено криво, то да.Или же лучше в таком случае сделать тимлидом сеньора?
В таком случае тимлидом лучше сделать управленца.Вообще какой навык, на ваш взгляд, наиболее важен для тимлида? 
Тимлид - это, в первую очередь, управленец, менеджер со знанием внутренней кухни IT, так что знания и умения те же, что и для обычного манагера.

Худший ответ:
На этот вопросы мидлы и джуны вряд ли ответят) Надо у тимлидов спрашивать.
Вопрос: Можно ли устроиться миддлом без опыта работы?

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

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

Худший ответ:
Ну это знания слабого джуна...

Да и вообще, разработка - это не только теория и сферические магазины в вакууме. Разработка - это релизы, дедлайны, работа с чужим кодом, код ревью, взаимодействие с занудами бэкендерами, идиотами фронтами, успешными-успехами проджект менеджерами, высокомерными лидами и двинутыми дизайнерами. Если вы никогда не работали над продуктовым проектом, вы не знаете истинную цену фич и вылезших багов. Из-за ваших кривых рук не отваливалось приложение у 30% юзеров. Вы не знаете когда можно, а когда не нужно писать код "по книжке". 

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

имея за собой 1 стоящий проект
Что это вообще такое? Стоящий по вашему? Сколько он приносит денег и сколько в него было инвестировано? Стоящий с точки зрения кода или полезности для людей? Что это была за команда? Что вы использовали?

позиционировать себя как мидла
Самое глупое что можно делать - это позиционировать себя не как "разработчик". В один прекрасный момент, когда я считал себя на джун+, меня пригласили на должность среднего мидла и только потому что в своей анкете я указал просто "Разработчик N". Только потому что в компании "Рога и копыта" мидл - это 1 год опыта, а в "Все будет отлично" мидл - это 2+ года и знание A,B,C,D
Вопрос: Почему не возникает событие mouseenter при наведении на ссылку с dropdow menu?

Лучший ответ:
Неправильно расположен элемент .submenu, он должен находится внутри того же li, что и соответствующий ему .profile-menu-trigger.
Ну и не надо назначать новый обработчик mouseleave при каждом mouseenter, достаточно и одного раза:$('.profile-menu')
  .on('mouseenter', '.profile-menu-trigger', function() {
    $(this).next('.submenu').fadeIn(500);
  })
  .on('mouseleave', 'li', function() {
    $(this).find('.submenu').fadeOut(500);
  });

Худший ответ:
Потому что повесили событие на скрытый элемент, вот и не работает. $ ('#site-title'). on ('mouseenter', function () {
        let submenu = $ (this).parent ().find ('.submenu');
        submenu.fadeIn (500);

        $ ('#site-title'). on ('mouseleave', function () {
          submenu.fadeOut (500);
        });
    });
Вопрос: JS срабатывает только на первом элементе — как сделать для всех элементов?

Лучший ответ:
не понял про close и зачем spoiler, но суть думаю должна быть понятна -> пример
можно еще короче, но тут будет менее понятноfunction _boot() {
    let vaks = document.querySelectorAll('.vak');
    [...vaks].forEach(el => el.addEventListener('click', () => el.classList.toggle('active')));
}
_boot();

Худший ответ:
Вместо 
const vak = document.querySelector(".vak");Нужно
const vak = document.querySelectorAll(".vak");Вместо строчки
vak.addEventListener("click", function() {Нужно
vak.forEach(function(item){
item.addEventListener("click", function() {
})
Вопрос: Как сделать пермутацию массива по часовой стрелке?

Лучший ответ:
$data  = [1,2,3,4,5,6,7];
$last = array_pop($data);
array_unshift($data, $last);
echo implode(', ', $data);

P.s.: читайте доку php.net

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

$mylist2 = array(1,2,3,4,5,6,7);

$count = count($mylist2);
$newArray = array();

foreach ( $mylist2 as $key => $value ) {
	if ( ($count-1) == $key ) {
		$newArray[0] = $value;
	} else {
		$newArray[$key+1] = $value;
	}
}

ksort($newArray);
var_dump(implode(", ", $newArray));
Вопрос: Android как создать папку средствами NDK?

Лучший ответ:
Через NDK доступна функция mkdir[?].
Ее поведение для Android ни чем не отличается от изложенного в официальной документации.

Для проверки существования папки можно использовать функцию stat[?], а можно опереться на код ошибки EEXIST из mkdir.

Худший ответ:
Логично так - проверить, существует ли директория, если да - то создать файл, в противном случае - создать директорию и в ней файл.
Вопрос: Как можно получить сколько дней в этом году php?

Лучший ответ:
date('z',strtotime('31.12.2001'));
или проверить на високосность, параметр "L".

Худший ответ:
$days_in_year = ( $year % 4 ) ? 365 : 366;
Это если не заморачиваться, хотя есть и стандартные функции для вычисления разницы времени. Но в справочник дольше лезть (мне по крайней мере), да работать будет быстрее, чем вычисление разницы таймстемпов.
UPD: Ну и у меня это Юлианский календарь (по-простому). Если же ваши даты простираются больше чем на 100 лет в прошлое или будущее, то понадобится Григорианский календарь, а значит следует добавить строку:$days_in_year -= (  !( $year % 100 ) && ( $year % 400 )  ) ? 1 : 0;
Вопрос: Куда идти программисту в 10 класс или в колледж?

Лучший ответ:
Если вам не хочется тратить время на вещи, которые не будут связаны с профессией и интересами, то просто заканчивайте школу и идите работать.

Худший ответ:
10 класс, какой колледж, о чем вы ?
Вопрос: Как подключиться к ПК на linux через ssh?

Лучший ответ:
Вот этот вопрос можно в пример приводить. Я давно говорил - есть windows-чайники, которые копипастят действия, не понимая их суть и хлопают глазами, не понимая почему не работает и скоро, очень скоро появятся такие же линукс-чайники.
Ну вот, они появились.
Братан, что говорит команда
service ssh status
он там стоит, как я понял, после слова via
ничего подобного, там стоит адрес шлюза какого-нибудь, обычно это default gateway. IP смотрится командой ifconfig
# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.7.10.26  netmask 255.255.255.0  broadcast 10.7.10.255
вот здесь 10.7.10.26 - это IP адрес

Худший ответ:
Не совсем понятна задача. Компьютер друга находится в той же локальной сети что и ваш, или через интернет? В обоих случаях на компьютере друга должен быть запущен ssh-сервер, который и будет слушать порт 22 или любой другой. Порт 22 у друга должен быть открыт для подключений извне, что в случае удаленного доступа и нахождения за NAT очень даже проблематично. Ну и IP компьютера конечно же. Если подключение удаленное то внешний хотя бы не динамический. Итого у друга нужны: 1. ssh сервер, 2. открытый порт (можно любой, не обязательно 22). 3. IP  4. Отсутствие запретов файерволла на подключение к этому порту.
Вопрос: Добрый день, как при помощи bash мне найти и сохранить нужный текст?

Лучший ответ:
grep "number = " /путь_к_иссходному_файлу | awk -F " = " '{print $2}' > /путь_к новому_файлу_с _результатом
весь вопрос решается одной строкой

Худший ответ:
sed, grep и регулярки

p.s. это не программирование, это просто консольные инструменты, которыми можно выполнить задачу.
Вопрос: Связка для сервера под вордпресс?

Лучший ответ:
Вот кстати wordpress не самое удобное приложение для панели )
Он любит htaccess, поэтому без апача будет трудно. php-fpm не использует htaccess, поэтому если выберете nginx+php-fpm - придется крутить конфиг nginx. Тут вы сразу забываете про shared хостинги, потому что в конфиг вебсервера вас никто не пустит..
Я бы рекомендовал centos 7, nginx+apache, php из remi поставьте тот, который нужен. Ну или centos7 +ispmanager, но обязательно поставить apache потом в возможностях панели....
А вообще - если вы вдруг лучше всего знаете убунту - ну так ставьте ее. какая разница то....

Худший ответ:
Здравствуйте!
Тут конечно по этому поводу начнется холливар))) Но я использую apache + nginx (VestaCP)
Вопрос: Random как сгенерировать случайные числа но с определенной вероятностью выпадения?

Лучший ответ:
Эта элементарная задача называется "генерирование дискретных случайных величин с заданным законом распределения". Решается классическим образом.
Сначала разбиваем наш диапазон от 1 до 100 на следующие интервалы:
1-35,36-60,61-85,86-95,96-100.
Затем генерируем число, равномерно распределенное в диапазоне от 1 до 100. Номер интервала, в который это число попадает дает ваши генерируемые цифры - от 1 до 5, причем распределены они в точности по вашей таблице распределения.

Худший ответ:
Все готово, все получилось. Может кому - то пригодится 

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.Serializable;
import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button cmak = (Button)findViewById(R.id.knopka);
        final TextView ocko = (TextView)findViewById(R.id.okno);

        cmak.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ocko.setText(String.valueOf(foo()));
            }

            private Serializable foo(){
                ArrayList<Integer> foo = new ArrayList<>();

                for (int i = 0; i< 2; i++) {
                    double random = Math.floor(Math.random() * 100) + 1;
                    if (random < 36) {
                        foo.add(1);
                    } else if (random < 61) {
                        foo.add(2);
                    } else if (random < 81) {
                        foo.add(3);
                    } else if (random < 96) {
                        foo.add(4);
                    } else if (random < 98) {
                        foo.add(5);
                    }
                }
                return foo;
            }
        });
    }
}
Вопрос: Что почитать по архитектурным шаблонам проектирования?

Лучший ответ:
Советую почитать книжку Боба Мартина "Чистая Архитектура".

Худший ответ:
Есть курс на FoxMinded Enterprise Patterns - https://foxminded.com.ua/enterprise-patterns-advan...
Не знаю насколько хорошим этот курс является, но думаю, что это может вам чем-то помочь