- При регистрации юзер вводит некий пароль
- Генерим случайную соль индивилуально для каждого юзера
- Создаем хеш на основе введенного юзером пароля и соли
- Записываем хеш(не пароль) в БД + соль в отдельном филде
- Юзер вводит в поле авторизации некий пароль
| { | |
| "extends": ["tslint-react"], | |
| "rules": { | |
| "align": [ | |
| true, | |
| "parameters", | |
| "arguments", | |
| "statements" | |
| ], | |
| "ban": false, |
| app.use(async (ctx: IContext, next) => { | |
| const context = {}; | |
| console.log(ctx.request.url) | |
| const componentHTML = ReactDomServer.renderToString( | |
| <StaticRouter location={ctx.request.url} context={context}> | |
| <Provider store={store}> | |
| <App/> | |
| </Provider> | |
| </StaticRouter> |
| fn main() { | |
| let mut scan = Scanner::default(); | |
| let out = &mut BufWriter::new(stdout()); | |
| let n = scan.next::<usize>(); | |
| let q = scan.next::<usize>(); | |
| if n > q { | |
| writeln!(out, "Shi").ok(); | |
| } else { |
| import math | |
| import numpy as np | |
| def length(v): | |
| return math.sqrt((v[0]*v[0])+ (v[1]*v[1]) + (v[2]*v[2])) | |
| def normalize(v): | |
| l = length(v) | |
| if l != 0: | |
| inv = 1.0 / l |
Одной из ключевых особенностей Rust является "безбоязненная конкурентность" (fearless concurrency). Однако тот вид конкурентности, который нужен для обработки большого количества задач, зависящих от производительности ввода/вывода (I/O), и который имеется в Go, Elixir, Erlang — отсутствует в Rust.
Давайте предположим, что вы хотите собрать что-то наподобие веб-сервера. Он будет обрабатывать тысячи запросов в каждый момент времени (проблема c10k). Говоря общими словами, рассматриваемая нами проблема состоит из многих задач, выполняющих в основном I/O операции (особенно связанных с сетевым взаимодействием).
"Одновременная обработка N задач" — такая задача лучше всего решается использованием нитей. Однако… Тысячи нитей? Наверное, это слишком много. Работа с нитями может быть довольно ресурсозатратной: каждая нить должна выделить большой стек (stack), настроить нить, используя набор системных вызовов. Ко всему прочему переключение контекста тоже затратно.
Конечно, тысячи одновременно работающих ните
| const readline = require('readline'); | |
| const { stdin: input, stdout: output } = require('process'); | |
| const getUserInput = () => { | |
| return new Promise(resolve => { | |
| const rl = readline.createInterface({ input, output, terminal: false }) | |
| rl.question('Enter two numbers: ', answer => { | |
| const [x, y] = answer.split(' ') | |
| resolve([Number(x), Number(y)]); |
| import requests | |
| import os | |
| import sys | |
| YOUTRACK_BASE_URL = os.getenv('YOUTRACK_BASE_URL') | |
| YOUTRACK_AUTH_TOKEN = os.getenv('YOUTRACK_AUTH_TOKEN') | |
| def get_project_id(project_name: str) -> str: | |
| params = f"fields=id&query={project_name}" |
| package benchgzip | |
| import ( | |
| "bytes" | |
| "compress/gzip" | |
| "io" | |
| "sync" | |
| "testing" | |
| ) |