pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Можно ли в одной компании менять несколько профессий?

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

 Во всяком случае, я это понял в ходе разговора со своим начальником и коллегами. 
Ну если ты уже с коллегами и начальством это обсудил, то КАКИЕ ЕЩЁ МОГУТ БЫТЬ ВОПРОСЫ ТО

Какой ты вообще ответ ожидал тут увидеть?
"Нет, это очень плохо. Если ты работаешь в компании на позиции X, и хочешь перейти в позицию Y, то тебе нужно либо работать на позиции X вечно, либо увольняться"
Так чтоли?

Худший ответ: Законодательно не запрещено
Вопрос: Как узнать какому VPN провайдеру принадлежит определённый IP?

Лучший ответ: Обычно так не узнаешь, потому что есть впн провайдеры, которые покупают vps/vds у разных поставщиков, есть те, у которых свои сети

Худший ответ: Обычно узнают на 2ip или whoer каком-то, так как если базы серверов/один отдельный сервер известен, то там должно это отображаться, помню так было с Surfshark'ом и CyberGhost.
Вопрос: Как принудительно обновить сертификат letsencrypt?

Лучший ответ: certbot renew --force-renewal --cert-name domain.tld
Какой именно cert-name у него, смотреть в папке /etc/letsencrypt/live/ на имя

Худший ответ: Папка с числом на конце обычно используется в качестве цели ссылки в каталоге live, поэтому при использовании путей к файлам вида /etc/letsencrypt/live/domain.tld/(chain|cert|privkey).pem ничего поломаться не должно.
Вопрос: Чем отличаются DOMNode и DOMElement?

Лучший ответ: Возьмём простейший HTML
<body>
  <p>Привет!</p>
</body>
Теперь построим дерево узлов (node)
BODY
  #text "\n  "
  P
    #text "Привет!"
  #text "\n"
Получился узел BODY с тремя дочерними узлами, #text, P и снова #text. При этом, узлы BODY и P соответствуют тэгам HTML. Именно они и являются элементами. Узлы типа #text были добавлены браузером автоматически при построении дерева DOM и элементами не являются, так как не имеют соответствующих им тэгов в HTML-коде.

Худший ответ: Первая же ссылка в гугле))) по моему доходчиво
Вопрос: Таненбаум или Олифер?

Лучший ответ: Если совсем с нуля - Олиферы, даром что учебное пособие :) А Танненбаум - на "второй проход". Там в общем-то все то же самое, но больше, подробнее, академичнее.

"Роман классический, старинный, отменно длинный, длинный, длинный..." (С)

Худший ответ: "Компьютерные сети. Нисходящий подход" - Дж.Куроуз. Очень понятное и стройное изложение.
Вопрос: Как вынести шаблонные gitlab-ci файлы в один общий?

Лучший ответ: https://docs.gitlab.com/ee/ci/yaml/includes.html
Нагулил такое, проверю - отпишу.

UPD: Идеально, то, что нужно:
include:
  - project: 'devops/templates'
    ref: master
    file: 'template-for-suck-apps.yml'

Работает так, словно я ничего и не менял.

Худший ответ: Почитайте, вроде именно то что надо
https://habr.com/ru/post/646587/
Вопрос: Как сплюсовать количество часто встречающихся слов из массива строк?

Лучший ответ: Сначала решите подзадачу с единственным предложением:

разбейте на слова по пробелам
удалите по краям слов не-буквы — знаки препинания
приведите все в маленькие буквы

Покажите, что получилось, потом поговорим.

Худший ответ: $array = [
    ['text' => "Сегодня мы пошли с друзьями на речку."],
    ['text' => "Вчера мы ходили с самого утра по магазинам."],
    ['text' => "Сегодня мы гуляли возле большого парка."]
];
$string = implode(" ", array_column($array, "text"));
$lowercased = mb_strtolower($string);
$cleaned = preg_replace("/[^а-я ]/u", "", $lowercased);
$words = explode(" ", $cleaned);
$frequency = array_count_values($words);
Вопрос: Насколько большую роль в IT-карьере играют связи?

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

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

Лучший ответ: Необходимо воспользоваться поиском

Как ежедневно автоматически сохранять значение яче...
Как автосохранять с нескольких листов на один в Go...
Как ежедневно автоматически сохранять значение сто...

либо воспользоваться предлагаемыми на рынке услугами, см. контакты в профиле.

Худший ответ: 1) Сделать триггер на onEdit()
2) Внутри прописать создание триггера по времени - через 3 дня
3) В качестве функции - бэкап - копирование нужной строки в лист-архив. 

или

1) Сделать триггер на onEdit()
2) Внутри прописать сохранение даты изменения и значения в userPropertyes
3) Сделать триггер по времени (раз в сутки или чаще) - чтобы сканировал userPropertyes и переносил нужные данные в лист-архив.
Вопрос: Домашний сервер для аналитики и математических вычислений?

Лучший ответ: По поводу содержания сервера дома я еще три года назад писал такой ответ. С тех пор ничего не поменялось.

Берете бу сервер в конторах, которые торгуют списанным (ну как списанным - снятым с гарантии после того как пять лет отходили) серверным оборудованием - несмотря на то, что оно как бы списано, оно еще пахать будет и пахать. Берете к нему рейд-контроллер если надо и винты (винты у них могут довольно дорогими оказаться). Ставите, что надо  и вуаля.

Вот контора, где я себе брал, но разумеется можно и другие найти. Серверный проц без серверной памяти - это просто понты типа прямотока, который ставят себе "чоткие пасаны".

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

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

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

Вы можете заняться эти уже сейчас

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

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

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

Select  .... from _data_ join _sprav_ on поле из таблицы данных = справочник.ид 
а в справочнике как я думаю есть еще поле с кодом категории, которую тоже нужно расскрыть до названия

Худший ответ: И это естественно, так как при каждом следующем запросе вы перезаписываете переменную $result.
Вам нужно каждый запрос получить в свою переменную $result1, $result2, $result3, потом объеденить их в одну и уже её передать в рендер.
Вопрос: Как оживить docker на windows 10?

Лучший ответ: А WSL2 вы устанавливали?

Худший ответ: Ненадо ставить докер в винду
Виртуалка с линукс и на неё докер...
Вопрос: Почему спидтест дает 100mbit/s а bittorrent 1.3?

Лучший ответ: 1) speedtest единственное что не режут все провайдеры
2) торент трафик первое, что режут провайдеры при нехватке пропускной способности

Худший ответ: а почему впн не 100 мбит, а 30?))
магистральные провайдеры могут шейпить трафик,
на отдачу может быть ограничение самого сида.
может у него 100 людей качает в этот момент?
маршрут может быть длинный.
Вопрос: Могут ли у класса быть два родителя?

Лучший ответ: Учитесь пользоваться удочками(поиск, учебники, видео на Ютуб), благо их в достатке, задаёте вопрос, который должны изучить сами, это азы языка

Худший ответ: Могут ли у класса питона быть два родителя?
могут

чем отличаются два этих класса
тем, что один наследуется от двух классов, второй от одного (c) Ваш кэп

вроде не один из них при вызове например функции
не дает ошибку !
А почему должен давать?
Если бы функция использовала какие-то методы класса str, давало бы.
Вопрос: Есть ли бесплатное API для получения всех улиц и домов конкретного города?

Лучший ответ: https://fias.nalog.ru/Updates
Тут есть полный архив адресов и разностные файлы на определенную дату.

Худший ответ: Что мешает поднять на Postgis открытые данные из Openstreetmap.  И там считать все что хочется.
Вопрос: Заменяема ли папка Windows?

Лучший ответ: Нет. 
Не заменяема, Работать не будет.

Худший ответ: Ну у меня корявый немного способ. Установите Windows или Linox на флэшку и запустить, а затем вы можете делать все, что хотите, на основном диске.
Но на вашем месте я бы просто переустановил Windows. Так как не факт, что проблема находится в папке Windows.
Вопрос: Как отсортировать CSV файл по дате?

Лучший ответ: C помощью pandas как вариант:
import io
import pandas as pd

data = cvs_data = io.StringIO('''Date, 1, 2, 3, 4
2010-02-04, 213.429998, 214.499996, 212.38000099999996, 214.009998
2010-03-05, 214.599998, 215.589994, 213.249994, 214.379993
2010-04-06, 214.379993, 215.23, 210.750004, 210.969995
2010-05-07, 211.75, 212.000006, 209.050005, 210.58
2010-06-08, 210.299994, 212.000006, 209.06000500000002, 211.98000499999998''')

df = pd.read_csv(data, sep=",")
df['Date'] = pd.to_datetime(df.Date)

print(df[df['Date'] > datetime.datetime(2010, 5, 1)])

Date           1           2           3           4
3 2010-05-07  211.750000  212.000006  209.050005  210.580000
4 2010-06-08  210.299994  212.000006  209.060005  211.980005

Худший ответ: Эксель же.
Вопрос: Нужно ли использовать interface?

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

Худший ответ: Вы когда на работу устраиваетесь - заключаете контракт. Контракт описывает что вы должны уметь. Это вот интерфейс "на вас".
Тогда как вы сами - это "класс", который что-то уже умеет.

Если ваши классы ничего ЧТО ТРЕБУЕТСЯ ДРУГИМ не делают - интерфейс на них не обязателен.

Интерфейс выполняет две задачи. Даёт классу назначение (имя в рамках задачи) и контроллирует, что класс что-то умеет.

* Ещё он умеет константы хранить, но этим редко пользуются (а зря, интерфейс меняется от проекта-к-проекту, а реализация - от задачи-к-задаче, стало быть объявленные константы вполне себе могут быть в интерфейсе, т.к. реализацию могут удалить)

Назначение чаще всего применяется в контейнерах зависимостей (см. Psr\ContainerInterface), там два интерфейса можно (и нужно) использовать, чтобы два одинаковых объекта положить в разные "коробки" и достать одну в одном классе, а другую - в другом.

Вторая функция применяется для проверки входных данных, когда вы в функции указываете тип данных для параметра, и программа упадет в ошибку, если тип данных неверный. Этот же принцип используется для организации ПОДМЕНЫ одного класса на другой. Если смотреть на вашу задачу (хотя здесь интерфейс не нужен) , то вместо того, чтобы на входе писать RurMoney вы сможете написать MoneyInterface, если вам не важно, какая валюта придет в функцию, но они все умеют в ваш ->getName()

В некоторых программах есть классы-данные, в которых нет методов (либо есть только геттеры и сеттеры - это вот ваш случай). Эти классы называют ValueObject. Для них интерфейс писать не надо. Чаще всего для них даже несколько классов делать не надо, просто один класс с разными свойствами. Но вот если методы есть - то нужно сделать АБСТРАКТНЫЙ КЛАСС, от него наследовать конкретные классы, тогда на входе проверять не интерфейс, а абстрактный класс. Абстрактный класс объединяет в себе "действия по-умолчанию" и "проверку умения" (через абстрактные методы). Они похожи на те, что в вашей задаче - getName() есть у всех - отличный способ положить этот метод в абстракцию, и не писать интерфейс, т.к. у вас уже есть абстрактный класс.

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

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

Конкретно вашу задачу лучше решать разобравшись как настраивать вот этот пакет:
https://github.com/moneyphp/money
Вопрос: Почему компонент рендерится дважды? Проблема в codesandbox?

Лучший ответ: Эта хрень из-за < StrictMode > в index.ts. С ним начинает твориться какая-то абсолютно черная магия. Ещё и делается замена console.log, чтобы скрыть правду ))

https://codesandbox.io/s/suspicious-bohr-crvsh - используется сохраненная функция console.log, видно два рендера.

без < StrictMode > всё как ожидалось.

Худший ответ: Может быть вы хотели сделать что то подобное ? 
import React, { useState } from "react";

export default function App() {
  let [getID,setID] = useState(0);
  return (
    <>
      <p> {getID} </p>
      <button onClick={ () => setTimeout(() => setID(getID + 1),800)} > clickMe </button>
    </>
  )
}

или что то вроде этого 

import React, { useState } from "react";

const MemoID = ({getID}) => {
  return Array.from(new Array(getID)).map( (_,i) => {
    return (<p key={i}> {i} </p>)
  })
}

export default function App() {
  let [getID,setID] = useState(0);
  return (
    <>
      <MemoID key={getID} {...{getID}}/>
      <button onClick={ () => setTimeout(() => setID(getID + 1),800)} > clickMe </button>
    </>
  )
}
Вопрос: Что действительно пишут на Python как правило в бизнесе?

Лучший ответ: 
Нейронные сети
Инструменты для работы с BIG DATA
Скрипты для автоматизации
Серверные части веб-сайтов (то, что вы описали - клиентская часть).
Боты для соц.сетей.


Худший ответ: С завидным постоянством, примерно раз в месяц, на кого-то падает озарение и он задает этот вопрос. Даже не удосужившись порыться самостоятельно в поисках ответа.
Вот, ровно месяц и два дня назад:
https://qna.habr.com/q/1182966
Там же есть ссылки на статьи, где вы найдет вполне конкретные ответы на ваши вопросы.
Вопрос: Как запустить многознаковую гитовскую конструкцию?

Лучший ответ: Эта «многознаковая конструкция» — артефакт конфликта слияния. Конфликт нужно разрешить: git-scm.com/book/en/v2/Git-Branching-Basic-Branchi...

Ну или просто удалить его, если он на самом деле пустой.

Худший ответ: Такие конструкции это остатки от резолва конфликта при мердже. В данном случае их надо просто удалить. Если это находится реально в репозитории то предлагаю просто сделать pull request где этих строк просто не будет
Вопрос: С чего начать в 30 лет?

Лучший ответ: Фундаментальная проблема - в игрострой стоит очередь фанатов с горящими глазами. Людей, которые пишут игры, играют в игры, моддят игры, хакают игры..., начиная с возраста, когда они смогли дотянуться до клавиатуры (как ваш покорный слуга). При этом, у них столько мотивации, что они могут сами поставить себе задачу, сами нагуглить все, что нужно (Спасибо дяде Немнюгину за его учебник. Это все что нужно знать о DOS, чтобы закодить dOOm) и сами все напишут и нарисуют (работая над этим сутками. Не потому что над душей стоит босс с воплями о лишении премии, а потому что им это интересно).

И вот теперь, Андрей, который уже устал хочет встать в очередь высоко мотивированных конкурентов и попросить себе оффер. Каковы его шансы на успех?

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

Для универсального развития, нужно начинать с простых фиговин вроде тетриса, арканоида, бильярда и прочего (в которых однако есть все столпы игростроя - графика + логика + системный движок, можно и добавить сеть, если подумать)  и потом наращивать сложность - делать платформер или RTS.

Худший ответ: К сожалению тратить 70-100 тысяч рублей на обучение я не могу, как и заниматься сутками. Решил учится на выходных и после работы.
Правильно, на курсы нет смысла тратить деньги.
Но заниматься нужно сутками, выходных не хватит.
Есть очень простое и действенное "Правило 10000 часов", которое говорит о том, что тебе надо потратить 10000 часов, чтобы преуспеть в какой-то области. Я на себе и знакомых проверял - оно работает.
Сам посчитай сколько времени у тебя это займёт, если будешь использовать только выходные.
Вопрос: Почему chatGPT обрывает ответ на половине?

Лучший ответ: Это связано с его ограничениями на вывод данных. Текст на русском занимает у него больший объём, чем английский. 
Лучше писать вопрос на английском языке, тогда он будет выводить ответы большего объёма и к тому же быстрее выводить свои ответы.
Если текст вывелся не конца, напишите слово "continue" и он продолжит выводить свой ответ с того места, где остановился.

Худший ответ: Никак. Чат понимает, что сболтнул лишнее и прерывает общение.
Либо вообще всё стирает и пишет network error.
Пофиксить это невозможно.
Вопрос: Как сделать так, чтобы иконка была слева от текста?

Лучший ответ: Я думаю, что вариант с :before к заголовку будет нормальным вариантом. С отдельным дивом я бы не стал делать

Худший ответ: див. position:relative в нем текст и картинка. диву padding-left:50px; 
картинке positionLabsolute; top:0; left:0
Вопрос: Как организовать видеонаблюдение в доме?

Лучший ответ: 1. Без спец знаний - лучше регистратор
2. Берите hiwatch , если еднег много - hikvision(но для Вашей задачи они бесмысленны)
3. Матрица, подсветка EXIR, 4мп качество съемки
4. Есть.  
Ставите - регистратор hiwatch 200й-300й серии(берите сразу со встроенным POE)
Камеры - 4мп hiwatch
БРП(бесперебойник 12 v , лучше с 2мя АКБ)
роутер zyxel keneetic+yota - для обеспечения удаленного доступа

Худший ответ: Большинство IP камер имеют встроенный порт microSD. На карточку 64 Гб влезает около двух недель записи h.265
Так что дополнительный регистратор не обязателен.
В среднем камера потребляет 0.3А без ИК подсветки. Делал я одному клиенту - на столб освещения ББП-20 в гермокожухе с аккумулятором 7 АЧ и WiFi камера. Ночью аккумулятор заряжается от освещения. 
1.5 года - полет нормальный
Про перечисленные модели не  отвечу. 15 лет пользовал D-Link, сейчас перешел на IMOU (тот же Dahua) 
Качество картинки устраивает. Особо нравится у это модели детекция человека - реально опознает что в кадке человек а не собака например - удобно
Для опознания человека с 15 метров достаточно и 1Мбит матрицы но чем больше- тем лучше. Объектив лучше 2.8 (угол шире)
Вопрос: Какие книги для изучения Python вы порекомендуете?

Лучший ответ: Марк Лутц - изучаем Python. 5-е издание. (в двух томах).
Однако я бы советовал в пару к нему взять что-то по алгоритмам (навскидку вспомню "Грокаем алгоритмы", в комментариях могут посоветовать лучше/еще), полагаю на ЕГЭ это будет полезно.

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

Лучший ответ: Если речь про Innodb, то
 Indexes other than the clustered index are known as secondary indexes. In InnoDB, each record in a secondary index contains the primary key columns for the row, as well as the columns specified for the secondary index. InnoDB uses this primary key value to search for the row in the clustered index.

If the primary key is long, the secondary indexes use more space, so it is advantageous to have a short primary key. 
https://dev.mysql.com/doc/refman/5.7/en/innodb-ind...

В вольном переводе каждый из ваших вторичных индексов будет содержать в себе значение из primary key (PK) и чем длиннее PK, тем больше все индексы в таблице.
Вполне вероятно, что при таких раскладах PK даже из 8 байтового bigint сильно выиграет у 36 байтового char+int (а то и 102, если с дуру сделали ID utf8mb4). Как минимум по занимаемому месту.

Худший ответ: Сделал ещё ряд тестов.

Точно так же, две таблицы:
- первичный ключ: char(32)+date, партицирование по годам + 3 дополнительных индекса по полям;
- первичный ключ: auto increment+date, партицирование по годам, уникальный ключ char32+date + 3 дополнительных индекса по полям;

В каждой таблице изначально 5 млн строк, в каждом тесте вставлялось по 100 000 новых.
Строки вставлялись по одной и пачками по 20 (среднее кол-во на продакшене за один вызов скрипта).
Запросы делались по одному, без оборачивания в транзакцию (насколько я понимаю, если запрос один - то и транзакция бесполезна, независимо от кол-ва строк?).

В результате получено ускорение в 2,6 раз:
- 0,010 сек с суррогатным и 0,026 сек с char(32) построчно;
- 0,003 и 0,007 по 20 строк за запрос.

Кроме этого, batch-запросы с auto increment имеют намного меньшее max время вставки: 1,5 сек против 11,4 (да, 11 секунд на вставку 20 строк). 

Также при заполнении таблиц тестовыми данными (5 млн строк на каждую), auto increment показал в ~2.3 раза больше скорость и в целом скорость держалась +- стабильной, когда как для первичного char(32) ключа она постоянно падала вместе с заполнением таблицы.

В целом можно сказать, что да, суррогатный первичный ключ действительно сильно ускоряет вставку по сравнению с char(32).
Вопрос: Где можно подтянуть технический английский?

Лучший ответ: где можно изучить технический английския язык
Думается мне, что нигде. Это не изучается на курсах или по спец. литературе. Это изучается на опыте. К примеру вот надо будет вам интегрировать ресурс с каким-то забугорным сервисом -- будете сидеть и читать их мануалы. И разберётесь, никуда не денетесь, т.к. нынешние браузерные плюшки типа "перевести страницу на русский" дают, зачастую, смешные результаты. Не стесняйтесь вашего уровня технического английского, а смело говорите на собеседованиях, что с удовольствием учитесь и хотите иметь такую возможность как можно чаще.

Худший ответ: не хватает именно знаний технических слов
Боюсь, это симптом, а не причина. Потому что если бы у вас действительно было достаточно знаний о том, что стоит за терминологией, среди этих знаний неизбежно было бы и название термина на техническом английском.
Вопрос: Подойдет ли macbook pro 13 2010 для xcode и в целом для программирования?

Лучший ответ: нет, этот бук слишком старый для xcode. в указанном бюджете лучше попробуйте поискать mac mini 2012 года, или подкопите ещё.

Худший ответ: Убедитесь что на него можно свежую ОСь накатить - а то xcode требует обнов.
Вопрос: Как создать веб-сервер на python?

Лучший ответ: Ищем по словам flask + json  или aiohttp + json. Статей и уроков такая куча, что просто не буду перечислять, в том числе и на русском.

Худший ответ: А вы искать в гугле не пробовали? 
Первый же ответ:
https://pythonbasics.org/webserver/