pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Легально ли торговать номерами телефонов пользователей?

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

На всякий случай дважды проверьте ФЗ о персональных данных

Худший ответ: Можно, если есть желание пообьясняться по поводу нарушения ПДн
Вопрос: Как «подружить» git репозиторий с хостингом?

Лучший ответ: У bitbucket есть такая штука как deploy keys - это SSH-ключи, которые дают доступ к репозиторию только на чтение. Кладете открытую часть в битбакет, приватную - на сервер. И сервер получает возможность забирать (клонировать и пуллить) репозиторий из бакета (но не пушить туда)

Худший ответ: Забирать по паролю разве нельзя? По крайней мере push недавно работал по паролю.
Вопрос: Желание не вылазить из одного языка — это лень?

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

Худший ответ: Язык - инструмент, нужный для решения задач. Вам некомфортно с C# или go не потому, что лень, а потому, что Ваши задачи гораздо лучше решаются JavaScript. Судя по тому, что освоить синтаксис других языков Вы смогли, не думаю, что при появлении интересной задачи, которая не решается на JavaScript, Вы спасуете, скорее всего быстро разберетесь. А изучать просто ради изучения неэффективно. Так что вряд ли это может негативно повлиять на будущее.
Вопрос: Как анимировать бургер?

Лучший ответ: Ближе к истине?
snippet

Худший ответ: Технологии jQuery

snippet
Вопрос: Почему в СТЕКЕ разрешается выделять достаточно мало памяти?

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

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

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

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

Edit: да, если вам нужно больше стека, можно сделать так, чтобы программа получала больше стека. В С++ это делается параметром линкера.

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

Лучший ответ: # Создать новую локальную ветку
git checkout -b branche_name
# внести изменения в файлы, затем добавить их и закоммитить
git add *
git commit -m 'Commit message'
# запушить новую локальную ветку в репу
git push origin branche_name

Худший ответ: # Создать новую локальную ветку
git checkout -b branche_name
# внести изменения в файлы, затем добавить их и закоммитить
git add *
git commit -m 'Commit message'
# запушить новую локальную ветку в репу
git push origin branche_name
Вопрос: Как считается скорость по Wi-Fi?

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

Короче, 867 мегабит в секунду - это максимум, что позволяет стандарт, реальная скорость скачивания порнухи всегда будет ниже.

Худший ответ: Вопрос как будет распределяться скорость на данном подключение (в идеале)?Дуплекс возможен если частота приема и передачи не пересекается.  А они пересекаются. Поэтому скорость в одну сторону.

А вообще следует понимать что -
867Мегабит/с - это максимально возможная скорость соединения данного устройства.
Заметьте - не передачи данных, а соединения. 
По соединению передаются ваши данные, служебный трафик, коды коррекции. Процент служебных данных меняется в зависимости от ситуации и составляет 30-60% 
Поэтому на передачу ваших данных остается 600 - 350Мегабит/с

Ну а дальше - зависит от соотношения сигнал/шум, от загруженности эфира, и.т.п - если все эти вещи не идеальны, а они не бывают идеальны - скорость будет снижаться, причем может снижаться на порядок.

Ну и не стоит забывать что это мегабиты в секунду, а при скачивании файла мы говорим про мегабайты, поэтому надо поделить на 8.
Вопрос: Каким образом сделать повторную аутентификацию с JWT?

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

ИМХО смена логина не должна инвалидировать токен.

Худший ответ: Добрый день.
На мой взгляд должно быть 2 токена: refresh token и access token. 
Первый токен используется для обновления второго токена и отсылается в запросе.
Второй токен используется для авторизации.
Соответственно, при обновлении логина перекинуть его на страницу входа. И после ввода логина и пароля вернуть на клиент 2 токена и сохранить в localStorage
Вопрос: Base64 формат картинки, что делать на фронтенде?

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

На серьёзном хайлоад проекте это была бы, условно, смерть серверам по трафику.
Но клиенты с не самым хорошим интернетом отлетели бы ещё раньше. А не самый хороший это даже мобильный 4g в средних условиях приёма сигнала. 470кб это очень, очень много для всего лишь одного запроса. Тяжелее запрос - дольше время до отрисовки.
Ну и мобильный интернет далеко не у всех безлимитный. А не в России и подавно.

А ещё есть лимиты на длину строки. В разных движках причём разные. Так что, теоритически, наверное, можно упереться в лимит строки и картинка не отобразится или будет битая.

Худший ответ: Обрабатывать такую картинку не обязательно, но если есть такое желание, можно его конвертировать в Blob и получить на него ссылку и уже эту ссылку вставить в атрибут src у картинки:
(async function() {
    
    var base64 = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1OXB4IiBoZWlnaHQ9IjQ1OXB4IiB2aWV3Qm94PSIwIDAgNDU5IDQ1OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDU5IDQ1OTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9InNoYXJlIj4NCgkJPHBhdGggZD0iTTQ1OSwyMTYuNzVMMjgwLjUsMzguMjV2MTAyYy0xNzguNSwyNS41LTI1NSwxNTMtMjgwLjUsMjgwLjVDNjMuNzUsMzMxLjUsMTUzLDI5MC43LDI4MC41LDI5MC43djEwNC41NUw0NTksMjE2Ljc1eiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K';
    var blob = await (await fetch(base64)).blob();
    var url = URL.createObjectURL(blob);
    
    document.querySelector('img').src = url; // Заменить селектор на свой
    
})();
В идеале этот Blob и вовсе надо сохранить в базе данных браузера и при повторной загрузке страницы не запрашивать его с сервера заново, а просто брать его из базы данных браузера. Оставим за кадром вопрос, почему вообще картинки отдаются таким неэффективным образом.
Вопрос: Язык программирования D. Почему отличный язык остался невостребованным?

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

Худший ответ: D - причесанные плюсы со сборкой мусора. Без GC его использовать сложно, а там, где GC допустим все привыкли к более простым языкам.
Кроме того он не дает радикальных преимуществ, как Rust в области надежности.
Ну и библиотек нет.
Вопрос: Нет доступа к файловому серверу через windows 2019, код ошибки: 0х80070035?

Лучший ответ: secpol.msc - локальные политики - Параметры безопасности - сетевая безопасность уровень проверки подлинности Lan  manager - свойства - Отправлять LM и NTLM – использовать сеансовую безопасность.

HKLM\SYSTEM\CurrentControlSet\ Services\LanmanWorkstation\ Parameters\AllowInsecureGuestAuth - 1

Проверяем автозапуск служб - 
Хост поставщика функции обнаружения
Публикация ресурсов обнаружения функции
Служба обнаружения SSDP
Узел универсальных PNP устройств
Служба DNS клиента.

Проверять после перезагрузки или очистки сетевых кэшей.

Худший ответ: Попробуйте не выключить брандмауэр, а включить, но разрешить все входящие подключения. 
И проверяйте SMB, скорее всего на 2019 по умолчанию отключен v1, как не безопасный и по дефолту включен v3, а в 2012 версия 1 все еще рабочая.
Вопрос: Настройка сети в Linux?

Лучший ответ: Убунта некоторое время назад бодро поскакала на netplan ,  проверяйте /etc/netplan

Худший ответ: прочитай оф.документацию
https://ubuntu.com/server/docs/network-introduction
Вопрос: Корректно ли копировать работающий luks криптоконтейнер?

Лучший ответ: Не может ли так быть, что файл будет битым при этом. Почти наверняка будет битым.
И тормозить СУБД может быть даже недостаточно. Гарантировать "небитость" можно только при размонтировании.

остановили СУБД
отмонтировали контейнер
сделали бэкап
примонтировали контейнер
подняли СУБД

В остальных случаях получится бэкап Шрёдингера. :)

Ну или правильный метод: делать бэкап средствами СУБД, без остановки. Можно бэкапить в другой примонтированный криптоконтейнер.

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

Все еще раз проверю временем.
Вопрос: Не работает деструктор. В чем ошибка?

Лучший ответ: Не работает деструктор
"Не работает деструктор" -- это когда программу компилируешь, запускаешь, а деструктор не делает того, что в нём написано. У тебя же программа не компилируется. Из-за того, что в настройках компилятора стоит "трактовать предупреждения как ошибки" и "предупреждать о неэффективном коде С++". Ну и вдобавок, предупреждение тебе правильно говорит, что если ты не реализовал конструктор копирования и оператор присваивания для класса самостоятельно управляющего памятью, то жди проблем, когда начнёшь копировать объекты этого класса.

Худший ответ: Если в деструкторе выполняется очистка памяти, то его следует объявлять виртуальным:
virtual ~Polynomial() { ... }
Вопрос: Есть ли название у радиопередатчика с синусоидой на выходе?

Лучший ответ: передатчик немодулированного сигнала,
CW-передатчик https://ru.wikipedia.org/wiki/Непрерывный_сигнал
телеграфный передатчик https://eax.me/cw-transmitter/

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

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

Регистрируете ООО с уставным капиталом 10 тысяч рублей. Желательно сразу взять айтишные ОКВЭДы. Назначаете себя директором и сразу уходите в не оплачиваемый административный отпуск.

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

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

В общем, не так страшен черт, как его малюют.

Худший ответ: Подумайте ка будете закрывать ООО, когда понадобится.  Вот уж столько геморроя вы ни на ИП, ни на СЗ не встретите.
Вопрос: Что означает и зачем нужен + в начале prompt?

Лучший ответ: Унарный плюс (+)
Арифметические операторы

Худший ответ: Унарный плюс (+)
Арифметические операторы
Вопрос: Что нужно использовать, чтобы файл сам себя перенес?

Лучший ответ: Примерно как в ответе 0hquazEd 
Только не хардкодить file_path (а что если исполняемый файл будет переименован?), а взять argv[0]
https://docs.microsoft.com/ru-ru/cpp/cpp/main-func...

Худший ответ: Можете воспользоваться std::filesystem

#include <filesystem>
int main()
{
	std::string file_path = "CP.mp4";
	std::string path = "xxx/CP.mp4";

	std::filesystem::copy_file(file_path, path);
	return 0;
}

Примерно так. В "file_path" вы указываете путь к файлу, в "path" - полный путь к файлу в который хотите скопировать
Вопрос: В чем преимущества процессов над потоками?

Лучший ответ: Главное приемущество: независимость процессов. Потоки делят между собой одну память и ресурсы системы (всякие хандлеры в винде, например).

Если один из процессов завершится или, что чаще происходит, упадет - остальные не будут затронуты. Плюс эта независимость позволяет делать песочницы для безопасности. Так, все современные браузеры запускают js и вообще каждую вкладку в отдельном процессе. Даже если куллхацкер полностью взломает браузер через специальный сайт, он окажется в процессе, который особо прав никаких не имеет, библиотеки особо интересные туда не загружены, а все общение с внешним миром - через жестко прописанные протоколы ipc (inter-process communication). Так что злодею придется взламывать еще и их.

Эта же независимость позволяет выполнять работу даже после завершения основного процесса. Так, если вы хотите сделать автообновятор программы, то после скачки/установки нового приложения, надо будет перезапустить основное приложение, чтобы перезаписать исполняемый файл (по крайней мере в винде). Но поток завершится вместе с программой и кто же тогда потом будет ее запускать? А вот процесс останется работать.

Недостатки тут - ресурсоемкость. С точки зрения системы поднять и поддерживать процесс гораздо больше работы чем сделать это с потоком. Плюс упомянутое выше ipc - это лишняя работа на каждый чих.

Худший ответ: процессы не имеют общей памяти и вы ipc сами руками делаете это и плюс и минус
минус тормоза
плюсов больше не морозитесь насчет всего что с тредами идет просто тупо выполняете все подряд
если процесс упал вы повторяете , мастер процесс не зависит от криворуких потомков и от утечек памяти в них
Вопрос: Как улучшить качество изображения на Python?

Лучший ответ: Если вы неспособны самостоятельно сделать этот элементарный запрос в Гуугл и найти на него ответ, то браться за такую задачу вам точно не стоит. 
Видите-ли, программирование -  это не копирование чужого кода, и исправление ошибок в коде.  А дебажить без твердого умения гууглить сегодня просто невозможно.  На подсказках с форума программистом не станешь никогда.
P.S. "Спокойно" можно использовать чужие нейронки разве что для получения результата операции XOR. Остальные спокойствия не гарантируют и требуют существенной нервотрепки.

Худший ответ: Python Новичок, по вашему вопросу, я вижу что вы только начинаете свой путь в IT. Не советую сразу самому лезть в такие сложные штуки как нейросети и пытаться их запустить в своём коде.
Для начала попробуйте пользоваться публичными API которые выполняют определённую работу. К вашей задаче может подойти нейросеть waifu2x, у которой есть публичный API: 
https://deepai.org/machine-learning-model/waifu2x
Вопрос: Хочу написать программу, которая бы симулировала общение с пользователем, но не знаю как?

Лучший ответ: В теории балабола (по ссылке - библиотека для работы с ним).
Пример:
from balaboba import Balaboba
bb = Balaboba()
intros = bb.intros(language="ru")
intro = next(intros)
response = bb.balaboba("Кто ты?", intro=intro.number)
print(response)
response = bb.balaboba("А я кто?", intro=intro.number)
print(response)
Ответ:

Кто ты? — Не знаю.
— Где твой дом, где твой город?
Есть ли у тебя семья, друзья, любимый человек?
Зачем ты пришел в этот мир?
Что ты здесь делаешь?
Почему ты не можешь найти ответ на эти вопросы?
Ты — никто.
Ты не знаешь, кто ты есть.
Откуда ты взялся?
Кем ты был до этого?
Кто ты, почему ты здесь, куда ты идешь?
Эти вопросы, наверное, волнуют многих людей.
Но что ты на них можешь ответить?
Вот так и мы — не знаем.
Мы рождаемся, растем, взрослеем, стареем.
И все это время спрашиваем себя: "Кто я?"
А я кто? Я - человек!
Не больше!
И не меньше!
Хотя, и не очень скромный...
Но это не значит, что надо всех в одну кучу валить!
Вот я - Человек!
А Вы?
Кто?
Что?
Почему?
Зачем?
А если бы Вы были Человеком...
Вы бы на всё это смотрели по-другому
В любом случае, каждый из нас — человек, а значит, он и есть тот самый бог, который не сделал ничего плохого по своей вине, но которого мы по-прежнему ненавидим.

Не совсем то, но вот альтернатива.
Из минусов - придется настраивать вручную, требует мощного железа и на английском.
В остальном-же надо понимать:
1.Генерация связного текста очень ресурсоемкий процесс и генерировать бесплатно большое количество текста никто не будет. Скорее всего - рано или поздно, в зависимости от того, насколько популярен будет бот, через балаболу будет достигнут лимит обращений.  
2.Нейросети еще довольно тупы и даже если реплики по отдельности кажутся осмысленными, то вот с диалогом могут быть проблемы. По примеру это видно.
В частности, на полноценную имитацию связного диалога натаскана только AIDungeoun и тот пример по ссылки, но они на английском, а у первой нет api.
Второй момент: у нейронок очень плохо с накоплением информации - последовательная генерация может выглядеть связно, но чем дальше генерить, тем выше шанс, что нейронка забудет о чем-то.

Худший ответ: Вероятнее всего больше всего подходит гугловский Dialog Flow, его как и Алису надо обучать, но есть несколько собранных агентов с которыми можно сразу пообщаться и посмотреть как они работают. Только стоит понимать что сервис платный.
Вопрос: Пишу код для Telegram Бота, как не делать тупые ошибки?

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

Тебе нужно читать про register_next_step_handler(), ну или посмотреть официальный пример на тему.

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

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

Сетку на изображение можно даже в обычном Bitmap накладывать. 

В общем вам нужно огромную задачу "написать фотошоп" раздробить очень-очень мелко, и искать инфу уже по очнеь мелким задачам. Например - как создать свой конрол

Худший ответ: На просторах интернета уже долгие годы есть онлайн бесплатная версия ФШ: https://www.photopea.com/
Надо попотеть с реверс-инженерингом. Либо можно спросить у автора, если это вам для образовательных целей и не для создания конкурента.
Вопрос: Проблема с кодом на Python. Поможете?

Лучший ответ: pronoun == "I" or "he" or "she" or "it"
Так работать не будет. Если тебе нужно проверить несколько вариантов, либо используй логическое ИЛИ правильно
pronoun == "I" or pronoun == "he" or pronoun == "she" or pronoun == "it"
либо проверяй на вхождение в коллекцию
pronoun in ("I", "he", "she", "it")

Худший ответ: running = True
m = ['he', 'she', 'it', 'i', 'they', 'you', 'we']

while running:
    pronoun = str.lower(input('Введите местоимение: '))
    if pronoun in m:
        if pronoun ==  "I" or pronoun == 'i':
            print("Where am " + pronoun + " from?")
        elif pronoun == "he" or pronoun == "she" or pronoun == "it":
            print("Where is " + pronoun + " from?")
        elif pronoun == "they" or pronoun == "you" or pronoun == "we":
            print("Where are " + pronoun + " from?")
    else:
        running = False
        print("Программа завершена")
Вопрос: Почему в гугл вместо тайтл выводиться H1?

Лучший ответ: Это значит, что BM25(H1) > BM25(TITLE).
Другими словами H1 более релевантен к запросу, чем TITLE страницы.
Коэффициент релевантности (BM25, TF-IDF) зависит от общего количества слов в анализируемом тексте и от количества повторов слов из запроса, которые входят в текст.
Как правило проблемные тайтлы излишне длинные по сравнению с заголовком H1. Большое количество слов снижает BM25. 
Поэтому необходимо провести ревизию содержимого TITLE: проверить наличие в нём слов из запроса и выбросить лишние слова. НО! Есть допустимые границы такой оптимизации. Сварганить Тайтл, полностью совпадающий с запросом - провальный вариант, немного "воды" в заголовке придаст ему естественности и положительно повлияет на ранжирование.
Также важно сравнить релевантность TITLE ко всему документу и релевантность H1 ко всему документу. Если H1 лучше описывает документ, чем TITLE, то вывод очевиден - более релевантный H1 Гуглу больше нравится.

Худший ответ: Гугл сам выбирает, какой заголовок подставить в сниппет. Плюс, он часто изменяется в зависимости от запроса.
Соответственно, если вы забиваете запрос, который упоминается в h1, с большей вероятностью в сниппете появится заголовок из h1.
Вопрос: Есть хороший онлайн тренажёр для новичка, для закрепления базы?

Лучший ответ: Лутц - очень хорошо. И еще сделайте последовательно калькулятор, 2048, тетрис, блокнот, магазин на Django.

Худший ответ: лучший тренажер - реальная задача
Вопрос: Как сделать адаптивный background-image?

Лучший ответ: скорее
background-size: cover;
если речь шла про заполнение

Худший ответ: Попробуй background-size: contain - гарантированно сохраняет пропорции изображения.