Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Можно ли сделать сетеры для методов массива?

Лучший ответ:
JS вполне себе динамический язык, позволяющий многое, но некоторыми вещами стоит пользоваться с осторожностью, чтобы потом не было мучительно больно это отлаживать.
Нужные методы можно подменить, просто перезаписав в них новые функции, но лучше делать это не глобально для всех массивов на прототипе, а на конкретном инстансе массива, например так:const arr = []; // создали массив
arr.push = function() { // перезаписываем конкретно его push
  Array.prototype.push.apply(this, arguments); // вызвали оригинальный push со всеми аргументами
  // тут делаем еще что-то
};
Еще что-то может производить неожиданный эффект, который впоследствии доставит боли при дебаге такого кода, поэтому как рекомендовали выше, лучше пользоваться декоратором, но метод вполне рабочий, и используется например в vue.js для отслеживания изменений в массивах

Худший ответ:
<классическое отступление>
Делать подобные вещи, а так же переопределять прототип - считается плохим тоном. 
Написание, как Вы выразились "обёртки" - лучший выбор.
</классическое отступление>
Гетеры и сетеры это по своему существу - методы. 
.push() - тоже метод.
Вы хотите установить метод для метода? Крайне маловероятно.
Ближайшее что Вам, гепотетически, может помочь - Proxy или декораторы
Вопрос: Как и кого набрать в IT-стартап команду для разработки платформы как авито?

Лучший ответ:
Наймите fullstack-разработчика и адекватного дизайнера. Получите MVP в адекватные сроки, дальше уже будет видно из задач, кто требуется, fullstack со временем перейдет в стан менеджмента и будет разруливать вопросы найма специалистов самостоятельно. 

Это, конечно, если бюджеты ограничены. Если нет: делаете три команды на фронт, пять на бек, в каждом по пять человек, сеньоры, джуны, тимлиды, есть еще несколько команд тестировщиков, продакт-менеджеров, отдельно технического директора, в каждое направление еще по руководителю. Все должны сраться друг с другом 24/7, продакт менеджеры должны каждый день таскать ВСЕХ участников на ОБЯЗАТЕЛЬНЫЕ совещания в зуме, имитируя бурную деятельность и обсуждая, на сколько пикселей сдвинуть новую кнопку (команда бэкенда обязательно должна присутствовать). Команда разработчиков обязательно должна пилить говнолегаси, которое будет оправдывать тем, что "бизнес задачи важнее", а "техдолг потом потихоньку разберем, отрефакторим". 

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

Прочтите книгу RE:Work, там много лайфхаков касательно построения процессов в IT стартапах.

Худший ответ:
Банальный ответ - Программистов и юристов
Вопрос: Когда следует создавать функции?

Лучший ответ:
Пример заметного количества функций https://github.com/contributorpw/lodashgs/blob/mas... Время работы скрипта растет минимально. Многие пользуются. Дело не в размере. Тем более, что скрипты хорошенько сжимаются перед исполнением. И вот этот файл https://github.com/contributorpw/alasqlgs/blob/mas... (не открывать при медленной сети) работает нормально даже в качестве пользовательской функции, а там, на секундочку, всего полминуты времени исполнения.

Вы привели в примере SpreadsheetApp.flush(). Этот метод останавливает все расчеты и пересчитывает все, что находится у вас в Таблице. Вероятно, из-за него у вас и проблемы.

Судя по предыдущим вашим вопросам, вы усиливаете работу интерфейса, давите на впечатление. Ну, так в браузере оно будет работать так как будет работать, и заставить это всё работать быстрее не получится.

Совет. Откажитесь от 
Всё выделяется сразу. Теперь видно с каким диапазоном работаю. Намного более понятно что попадает в значения диапазона.
, потому что это все ерунда, и никому не надо смотреть на экран, чтобы понимать, что там работает, а что нет. Пользователю нужно знать три вещи:

Еще не считало
Еще считает
Уже посчитало

Остальное для него мрак и туман, а вы тратите на них время.

Худший ответ:
Ну без кода говорить о какой либо оптимизации нет смысла.

Общие принципы такие, старайтесь реже обращаться к документам и диску, если вы это делаете.

Если вы работает с таблицей старайтесь реже перерисовывать интерфейс (spreadsheet.flush()).

Опять же нужен ваш код чтобы понимать что вы делаете.

---
Максим Стоянов (stomaks), pазработчик Google Apps Script.
g-apps-script.com
stomaks.me
Вопрос: Как называется книга для с и с++?

Лучший ответ:
Еще есть хорошая книга Дейтелов "Как программировать на Си". Там то же самое начало Си, дальше С++. Книжка годная.

Худший ответ:
Она?
Вопрос: Какой системой управления проектами Вы пользуетесь?

Лучший ответ:
Trello

Слышал, некоторые для заметок используют Notion

Худший ответ:
Trello с дополнением Custom Fields
Завершеные задачи выгружаются для анализа в Google Sheets
Вопрос: Как сделать, чтобы WiFi работал по всему дому?

Лучший ответ:
Вопрос задаётся с завидно регулярностью, но ответ остаётся неизменным. Не протянув кабель и без установки второй точки ничего работоспособного собрать не получится.
Усилив сигнал WiFi вы получите ослабление приёма.

Можно попробовать использовать powerline адаптеры, но я ниразу не использовал их сам и не скажу насколько они будут эффективны, в особенно ти в загар одном доме. Есть модели адаптеров со встроенным wifi https://lantorg.com/article/zachem-nuzhny-powerlin...

Худший ответ:
Советую купить Два Кинетика. Как вариант Вива и Эйр. Соединить их в бесшовную сеть. На ютубе есть видео. Управляй со смартфона, лучшая поддержка, отличные отзывы, недорого.
Вопрос: Array_chunk + последний эелемент массива дублируется в первый следующего?

Лучший ответ:
Всем большое спасибо, если кому либо необходимо решение, можно использовать любое из представленных. Немного результатов (на верность их не претендую, специальных условий никаких не делал, заливал просто на рабочий vds 1vcpu/1ram/ssd nvme):

как шаблон
<?php
$start = microtime(true);
$i = 0;
while ($i <= 100000)
    $array[] = '127.0.0.' . $i++;

//здесь предложенный код

var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';


nokimaro
<?php
$start = microtime(true);
$i = 0;

    while ($i <= 100000)
        $array[] = '127.0.0.' . $i++;

    $chunks = array_chunk($array, 4);

    foreach($chunks as $key => $vals)
    {
        $next_chunk_key = $key+1;
        if(isset($chunks[$next_chunk_key]))
        {
            //добавляем в начало след. чанка последний элемент текущего чанка
            array_unshift($chunks[$next_chunk_key], end($vals));
        }
    }

var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';



Compolomus
<?php
$start = microtime(true);
$i = 0;

    while ($i <= 100000)
        $array[] = '127.0.0.' . $i++;

    $result = []; // результат
    $len = 4; // длинна первого массива (менять для экспериментов)
    $c = ceil(count($array) / $len) - 1; // количество итераций
    $result[] = array_slice($array, 0, $len); // первый срез
    $offset = $len - 1; // смещение для первой итерации
    for (++$len, $j = 0, $i = 0; $i < $c; $i++, $offset += $len - 1, $j += $len) {
        $result[] = array_slice($array, $offset, $len);
    }

var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';



GogElf
<?php
$start = microtime(true);
$i = 0;

    while ($i <= 100000)
        $array[] = '127.0.0.' . $i++;

    $chunks = [];
    while($array){
      $current = array_splice($array, 0, 4);
      if(isset($old))
        array_unshift($current, $old);
      $old = end($current);
      $chunks[] = $current;
    };

var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';



мой вариант
<?php
$start = microtime(true);
$i = 0;

    while ($i <= 100000)
        $array[] = '127.0.0.' . $i++;

    $array = array_chunk($array, 3);
    $count = count($array);
    for ($i = 0; $i < $count; $i++) {
        $lastip = end($array[$i]);
        if ($i < $count - 1)
            array_unshift($array[$i + 1], $lastip);
    }


var_dump($array);
echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';



Худший ответ:
<?php
$array = [
  '127.0.0.1',
  '127.0.0.2',
  '127.0.0.3',
  '127.0.0.4',
  '127.0.0.5',
  '127.0.0.6',
  '127.0.0.7',
  '127.0.0.8',
  '127.0.0.9',
];

$chunks = array_chunk($array, 4);

foreach($chunks as $key => $vals)
{
    $next_chunk_key = $key+1;
    if(isset($chunks[$next_chunk_key]))
    {
        //добавляем в начало след. чанка последний элемент текущего чанка
        array_unshift($chunks[$next_chunk_key], end($vals));
    }
}

print_r($chunks);
Вопрос: Получаю 429 status_code, хотя и делаю sleep(30) перед каждым запросом и использую прокси в каждом треде?

Лучший ответ:
Этого мало.

Худший ответ:
1. вы можете проверить через любой публичный чекер, какой IP видит сайт.
2. Возможно, у вас куки шарятся между всеми тредами, и вас тупо по ним и палят :)
Вопрос: Как правильно захардкодить запрос с https на http?

Лучший ответ:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
Это обратное того что вам надо. Вы говорите браузеру в случае если он встретит запрос по http сделать его по https

Худший ответ:
Не страдайте...
Переводите бэк на https 
сделать это можно и мало того в большенстве манов по nginx так и делают, НО как вы заметили бэк должен иметь https в противном случае вот такую хрень вы будете ловить всегда.
Вопрос: Разбор регулярного выражения на пальцах?

Лучший ответ:
preg_replace() служит для замены, первый параметр - регулярное выражение. Заключается в '//'. Второй параметр - то, на что нужно заменить.([a-z]+) - скобочная группа номер 1, указано: "символы от a до z, не менее 1"([^\}]+) - скобочная группа номер 2, здесь указано: "всё, кроме }, от 1 символа и более". В квадратных скобках, если первый символ [^ ] - далее идут символы, которые необходимо исключить. Слэш \ экранирует символ }, не обязателен, фигурная скобка не является спецсимволом.(?P<\1>\2) - замена, которая убирает все, что не в скобочных группах (двоеточие и { } ), \1 и \2 - это вызов первой и второй скобочной группы. Добавляет (?P< > )Т.е. находим выражение, которое начинается с {, затем идут символы a-z - захватываем их в группу, затем двоеточие, затем любые символы, кроме }, захватываем в группу, и все заканчивается на }
Затем заменяем на (?P<, добавляем первую захваченную группу, >, добавляем вторую захваченную группу и )

Худший ответ:
preg_replace() служит для замены, первый параметр - регулярное выражение. Заключается в '//'. Второй параметр - то, на что нужно заменить.([a-z]+) - скобочная группа номер 1, указано: "символы от a до z, не менее 1"([^\}]+) - скобочная группа номер 2, здесь указано: "всё, кроме }, от 1 символа и более". В квадратных скобках, если первый символ [^ ] - далее идут символы, которые необходимо исключить. Слэш \ экранирует символ }, не обязателен, фигурная скобка не является спецсимволом.(?P<\1>\2) - замена, которая убирает все, что не в скобочных группах (двоеточие и { } ), \1 и \2 - это вызов первой и второй скобочной группы. Добавляет (?P< > )Т.е. находим выражение, которое начинается с {, затем идут символы a-z - захватываем их в группу, затем двоеточие, затем любые символы, кроме }, захватываем в группу, и все заканчивается на }
Затем заменяем на (?P<, добавляем первую захваченную группу, >, добавляем вторую захваченную группу и )
Вопрос: Существует ли такой парсер xml или html?

Лучший ответ:
Такую задачу можно решить на любом языке программирования, но готовых решений вы не найдете, надо писать самому. Сам бы я написал такой парсер на JavaScript и тупо оформил его в виде небольшого локального html-файла: открыл этот файлик в браузере, подцепил в поле input type="file" папку из диска, а дальше JavaScript-ом читаем все файлы из выбранной папки и распарсиваем при помощи new DOMParser().

Почему именно JavaScript, а не php или python? Просто JavaScript самый идеальный язык для парсинга html. Там из под коробки есть богатейший набор инструментов для работы с html-кодом, ни один другой язык так хорошо не умеет работать с html, как JavaScript - ведь он буквально создан для этого.

Худший ответ:
помоему в content downloader было что-то подобное, но проще скриптами
Вопрос: Где можно брать идеи для пет-проетов с четким ТЗ?

Лучший ответ:
Написать пет-проект, генерирующий идеи проектов с чётким ТЗ.

Худший ответ:
Самостоятельность - первый признак взрослого специалиста. Возвращайся в школу.
Вопрос: Зачем нужен Google cloud?

Лучший ответ:
За тем же, что и AWS и яндекс.клауд и все остальные облака — инфраструктура для приложений. 

Если вы не знаете, что это такое — вам это точно не нужно.

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

Лучший ответ:
Возможно так?:>>> str1 = "fName: Vasya, sName: Petrov, Desc: worker, fName: Dina, sName: Egorova, Desc: engineer, worker"
>>> for im in zip(re.findall(r'(\w+):', str1), [x for x in re.split(r'\w+:', str1) if x]):print(im)
...
('fName', ' Vasya, ')
('sName', ' Petrov, ')
('Desc', ' worker, ')
('fName', ' Dina, ')
('sName', ' Egorova, ')
('Desc', ' engineer, worker')
либо вот ваши подстроки:>>> for im in zip(re.findall(r'(\w+:)', str1), [x.strip() for x in re.split(r'\w+:', str1) if x]):print(' '.join(im))
...
fName: Vasya,
sName: Petrov,
Desc: worker,
fName: Dina,
sName: Egorova,
Desc: engineer, worker

Худший ответ:
Сплитайте через , и проверяйте на содержание :
Вопрос: Как строятся связи в БД?

Лучший ответ:
Мартин Грабер - SQL для простых смертных

Худший ответ:
Это будет выглядеть так:
Вопрос: Как грамотно организовать RAID 1, используя разные диски?

Лучший ответ:
Ох уж эти мальчики, косящиеся под девочек.
По теме; сделать можно, да, но какой смысл? Вот вы отсоединили внешний диск и данные уже разные и надо их обновлять.
Так что не страдайте ерундой, лучше делайте бекапы на свой внешний диск.

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

Лучший ответ:
Воспользуюсь спорным штампом и отвечу: так происходит, потому что "в JS всё - объект". Соответственно, как объектам, мы можем назначать свойства.
С примитивами всё несколько сложнее. Мы вроде бы тоже можем назначить им свойство, но это иллюзия. Когда мы делаем подобное с примитивами, например строкой, то вызывается её конструктор String(), а когда операция "под капотом" завершается, то мы снова получаем примитив, таким образом, ошибки назначения свойства не возникает, но и свойство недоступно.
Это если сжато.
Подробно объяснять не быстро. Скорее всего Вам тут посоветуют почитать документацию, спецификацию. Я предложу почитать серию книг You Dont Know JS. Можно нагуглить перевод многих глав из этой серии книг.

Худший ответ:
Динамическое наследование.
Оно применимо к любому непримитиву.
Вопрос: Выпадающим списком нормально будет?

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

Худший ответ:
Да
Вопрос: Как решить ошибку «Строковая функция strlen работает некорректно»?

Лучший ответ:
Сталкивался с такой проблемой. 
Решение в лоб: прописать mbstring.func_overload 2 в файле php.ini глобально, а не в конфиге веб сервера или fpm.
Видимо это какой то баг php, который никто фиксить уже не будет

Худший ответ:
Проверь корректность работы func_overload.

Я пытался перейти на 7.3, но бросил это дело.

Почему может не работать mbstring.func_overload в php 7.3?
Вопрос: Как можно сократить код FizzBuzz до двух ифов?

Лучший ответ:
for (let i = begin; i <= end; i++) {
  let str = '';
  if (!(i % 3)) {
    str += 'Fizz';
  }
  if (!(i % 5)) {
    str += 'Buzz';
  }
  console.log(str || i);
}
А вообще, давайте лучше сократим до 0 if'ов:

for (let i = begin; i <= end; console.log('FizzBuzz'.slice(i % 3 && 4, 4 << !(i % 5)) || i), i++) ;

Худший ответ:
Ну, можно такой вариант:
Делаем заранее массив из 15 элементов. В нулевом элементе - "FizzBuzz". В элементах, кратных трём [3,6,9,12] - "Fizz". В элементах, кратных пяти [5,10] - "Buzz". В остальных - пусто.
Вычисляем i%15. Берём соответствующий элемент массива.
Если элемент массива не пустой - это ответ. Если пустой - то берём исходное число i. Это и будет единственный "if".
Как видите - я схитрил, заменив проверки на изъятие решения из готовой таблицы. очевидно - этот метод хорош только при малом размере таблицы. Вообще, табличные методы вычислений - весьма хороши в плане скорости, рекомендую; но естественно, про размер таблицы надо помнить.
Вопрос: Как бороться с кашей в голове на работе?

Лучший ответ:
Причесаться :)
Человек не может эффективно управлять множеством обьектов. Максимальное количество обьектов (людей, вещей), которыми эффективно управляет один человек, равно шести. При большем количестве начинается "сортировка по приоритетам", в результате которой одними обьектами управляешь чаще, чем другими - при их одинаковой начальной эффективности.
Беритесь за меньщее количество проектов.
Ведите трекер, записывайте.
Доводите задачу до логического завершения.
Десять проектов, в каждом их которых сделано по два коммиту - это хуже, чем два, в каждом из которых по десять коммитов :)

Худший ответ:
Делегировать ботам.
Вопрос: Можно ли завести 2 оптические линии на 1 SFP Mikrotik?

Лучший ответ:
Хороший вариант:
Кабель от каждой точки до офиса, в офисе микрот с кучей sfp(есть такие у них). Все соединяете и радуетесь. Работать будет прекрасно, надежность хорошая.

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

По поводу sfp:
1) Расстояния пишут не просто так, ваш S+C61DLC10D модуль на 10км и на таком расстоянии он и\или его спалят такие же модули. Берите на меньшие расстояния.
2) Берите самые простые модули.

Худший ответ:
На получится. Для заведения 8 линий в одну используется уплотнитель CWDM-MUX8A, который подключается к центральному свитчу восемью CWDM-модулями с разными частотами.
На периферийных свитчах при этом должны стоять OADM, снимающие с линии сигнал нужной частоты и отправляющие его на CWDM-модуль.
Вопрос: Как чайнику разобраться с массивами в JS?

Лучший ответ:
Тут перебор циклом, но не while() и не for() — может, прокатит?// случайные:
const myArray = [...Array(3)]
  .map(
    row => 
      [...Array(3)]
      .map(
        el => Math.floor(Math.random() * 10)
      )
  )
;

// диагональ, где оба индекса равны:
const diagonal = myArray
  .map(
    (row, rowIndex) => 
      row
      .map(
        (el, elIndex) => rowIndex === elIndex ? 1 : 0
      )
  )
;

Худший ответ:
// Инициализируем массив
let ourArray = [];
// и число, которым будем заполнять
let num = 0;
// и заполняем его через цикл вложенный в цикл
for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
        ourArray[i][j] = num;
        num++;
    }
}
Насчет тега не совсем понятно, какой формат вывода должен быть? Таблица?
Вопрос: Как в bitrix установить свойство типа список(enum) у инфоблока методами api?

Лучший ответ:
1) Обновить списочное свойство
CIBlockPropertyEnum::GetList - получаете ID значения свойства списка
CIBlockElement::SetPropertyValues - обновляете свойство элемента используя  ID значения свойства списка2) Добавить списочное свойство
Если ID значения свойства списка пустое, тогда:$ibpenum = new CIBlockPropertyEnum;
if($PropID = $ibpenum->Add() 
{CIBlockElement::SetPropertyValues
Тут подробнее https://dev.1c-bitrix.ru/api_help/iblock/classes/c...

Худший ответ:
В результате написал функцию которая принимает 3 параметра: 1) значение которое должно быть у списочного свойства, 2) Ид инфоблока, 3) код свойства - функция возвращает Ид существующего свойства, а если не найдёт - создает запись в свойстве и возвращает её Ид. При ошибке возвращается false
Код функции и примеры использования тут blog.ivru.net/?id=175
Непосредственно по заданному вопросу, создание товаров или торговых предложений с привязкой свойства типа список(enum) осуществляется следующим образом:$el = new CIBlockElement;

$arLoadProductArray = array(
  "IBLOCK_ID"=>2, // IBLOCK торговых предложений
  "NAME"=>"Имя торгового предложения",
  "ACTIVE"=>"Y",
  "PROPERTY_VALUES"=>array(
    "CML2_LINK"=>$PRODUCT_ID, // Свойство типа "Привязка к товарам (SKU)", связываем торг. предложение с товаром
    "CML2_ARTICLE"=>"Артикул торгового предложения",
    "SIZE"=>$sizePropId,
    "CLOTH"=>$clothPropId
  )
);

$product_offer_id = $el->Add($arLoadProductArray);
В коде выше у меня свойства SIZE и CLOTH типа список(enum) в переменных $sizePropId и $clothPropId передаются идентификаторы необходимых значений свойств.
Для получения идентификатора по значению, я привёл ссылку на соответствующую функцию.
Вопрос: Как собрать огромный экран на стену?

Лучший ответ:
Это называется "видеостена" и каким боком тут прилепить Ардуино я даже не представляю. Ознакомьтесь:
Как сделать видеостену на несколько мониторов/телевизоров и одного компа?

Худший ответ:
Лучше через специализированный контроллер собирать.
Вопрос: Что более защищенней UbuntuDDE или Deepin?

Лучший ответ:
"Более защищённей" та ОС, которая настроена более пряморуким админом. То же самое относится к остальной инфраструктуре. При прочих равных - разница в "более защищённости" у популярных дистрибутивов отличается гомеопатически.

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

Лучший ответ:
Если ПК с ЛПТ портом то самый простой вариант это программатор "5 проводков".
Есть чуть по сложнее для аппаратного COMпорта (отлично работает тот что на стабилитронах).

Худший ответ:
Купить ардуино, прошить в него ArduinoISP и пользоваться как программатором
Вопрос: Какой рекомендуемый размер файла для php-скрипта?

Лучший ответ:
Мерять надо не килобайтами, а строками. 

Технически размер файла не имеет значения, он может быть сколь угодно большим. 
Но вот с точки зрения архитектуры класс размером 300Кб - это ад. Который наглядно показывает, что внутри не ООП, а голимая процедурщина.

Есть правило 30 - в классе должно быть не больше 30 методов и размер каждого метода не больше 30 строк. Но при этом не надо воспринимать это как догму. Большинство классов должно быть сильно меньше - 3-5 методов по 5-10 строк. 

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

Худший ответ:
Нуууу, если ваш класс занимается, скажем, определением текущего языка, построением ЧПУ и запросами к БД одновременно, то у меня для вас плохие новости.
Вопрос: Как исправить краш сервера?

Лучший ответ:
Задушили серверок. Вот, что вам предлагают : Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
#   JVM is running with Zero Based Compressed Oops mode in which the Java heap is
#     placed in the first 32GB address space. The Java Heap base address is the
#     maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress
#     to set the Java Heap base and to place the Java Heap above 32GB virtual address.


Но по факту увеличьте размер -Xmx/-Xms. Думаю этого должно хватить.

Худший ответ:
С самого верха вашего лога идёт здоровенный текст, который английским по белому рассказывает, что случилось, и как это исправить.