2. Сервер присылает нам ответ, если он позитивный, то возвращает set-cookie, где устанавливает в cookie бразуера сессионный ключ;Притом set-cookie он возвращает с флагами secure (доступно только по https) и http-only (недоступно из js). Это единственный доступный вариант хранить сессионный ключ, чтоб его не угнали.
Во время работы приложения - каким образом фронтент понимает, что отображать? Авторизованную страницу с данными или экран авторизации.Делает запрос на эти данные, если успешно - пользователь авторизован, можно записать это в стейт в памяти, как и данные, если 401 - пишем в стейт и на основе этого у нас экран авторизации.
1. Стоит ли продолжать изучение front-end, если данное направление реально нравится или ситуация действительно такая, что там уже не нужны новые люди?Новых людей особо нигде не жалуют. Но пробиться всегда есть варианты:
2. Если уровень подготовки будет выше, чем описанные требования к джуну, то нормально ли будет подавать отклик на вакансии мидла или это плохой тон и мидл это не просто уровень знаний, но и обязательно опыт работы?Попробовать конечно можно, за попытку никто Вам ничего плохого не сделает.
1. Делать простой бек для своих проектов на nodejs, чтобы проекты были более интересными и показывали мои навыки в js. Будет ли базовое знание nodejs плюсом для front-end разработчика?Будет, большинство инструментария написано на node и конфигурируется js кодом. Ну и уметь накидать себе заглушку на express пока нормальное api в разработке тоже будет плюсом.
2. Как вообще поступить, если на данном этапе мне хочется попробовать себя в бекенде и подстраховаться на случай того, если не получится найти работу во front-end? Создать второй гитхаб и там выкладывать что-то на других языках или пока нахожусь на стадии обучения и выбора, то просто делать все в одном профиле и потом скрыть?Не заморачиваться и делать все в одном github. Лучше заморочиться тем как этот github оформлен, например сделать readme для профиля. Нормально оформлять коммиты. Не плодить кучу форков разных чужих проектов. Если есть форк чужого проекта, обязательно должен быть пул реквест туда, ну или хотя бы собственные коммиты в форке.
3. Если я выберу nodejs и буду добавлять его к своим проектам, то нормально ли тогда будет подавать отклик и к фронт и к бек вакансиям?Нормально. Как и нормально изредка менять направление, а значит и не знать что больше по душе пока не работал. Нормально будет, если полгода-год поработали с одной технологией, а потом несколько лет с другой, но плохо, если менее чем за 2 года смените 3+ стэка.
function position(): MyPosition
function position(a:number, b:number): MyPosition
function position(a:number): MyPositionWithDefault
function position(a?: number, b?:number)
, но она так же является частью имплементации:function position(a?: number, b?:number) {
if (!a && !b) {
return {x: undefined, b: undefined}
}
if(a && !b) {
return {x: a, b: undefined, default: a.toString()}
}
return {x: a, y: b}
}
return {x: undefined, b: undefined}
interface ReturnTypeOfPosition {
x: undefined
b: undefined
}
Проблема тут в двух вещах, во-первых в поле b вместо поля y, во-вторых в отсутствии поля default.function position(): MyPosition
function position(a: number, b: number): MyPosition
function position(a: number): MyPositionWithDefault
function position(a?: number, b?: number): MyPosition | MyPositionWithDefault {
if (!a && !b) {
return {x: undefined, y: undefined}
}
if(a && !b) {
return {x: a, y: undefined, default: a.toString()}
}
return {x: a, y: b}
}
то все будет окsetTimeout(function f(percent) {
if (!process.stdout.isTTY) return;
if (percent > 100) {
process.stdout.write('\n');
return;
}
const FILL = 9608;
const SHADE = 9617;
const progressSize = process.stdout.columns / 2;
const fillSize = Math.ceil(progressSize * percent / 100);
const shadeSize = Math.floor(progressSize) - fillSize;
const fillText = String.fromCharCode(FILL).repeat(fillSize);
const shadeText = shadeSize > 0
? String.fromCharCode(SHADE).repeat(shadeSize)
: '';
process.stdout.clearLine();
process.stdout.write(`\r${fillText}${shadeText} ${percent}%`);
setTimeout(f, 250, percent + 1);
}, 100, 0);
У переменной a указан тип встроенный массив [T; n]. Но у такого типа нет метода get_unchecked_mut(). Он есть у среза на массив [T]Тут нужно понять как в Rust работает оператор точка.
struct S {
a: i32,
f: fn(),
}
impl S {
fn a(&self) {}
}
let s = S { a: 0, f: || {} };
s.a; // Доступ к полю
s.a(); // Вызов метода
(s.f)(); // Вызов функции по указателю, который лежит в поле f
S::a(s);
S::a(&s);
S::a(&mut s);
<S as Deref>::Target::a(S::deref(&s));
<S as DerefMut>::Target::a(S::deref_mut(&mut s));
<<S as Deref>::Target as Deref>::Target::a(<S as Deref>::Target::deref(S::deref(&s)));
<<S as DerefMut>::Target as DerefMut>::Target::a(<S as DerefMut>::Target::deref_mut(S::deref_mut(&mut s)));
// ...
и так пока либо не найдет вариант, который компилируется, либо пока не обнаружит что для очередного типа не реализован трейт Deref.impl<T, const N: usize> Deref for [T; N] {
type Target = [T];
fn deref(&self) -> &[T] {
// ...
}
}
За счет этого все массивы (а так же векторы, у которых тоже Deref к слайсу) получают методы слайса. И по тому же принципу String получает методы str.Что тут делает unsafe код как раз понятноОднозначно понятно, он здесь делает UB так как обращается к памяти владелец которой неизвестен.
wsl$
.function fromPrototype(proto) {
function F() {}
F.protoype = proto;
return F;
}
const obj = {
_sayHi() {
console.log(`Hello, my name is ${this.name}!`);
},
};
class Person extends fromPrototype(obj) {
constructor(name, age) {
this.name = name;
this.age = age;
if (this.age < 0 ) {
this.age = 0;
}
}
}
const remove = this.on(events
callback.apply(this, args)
и callback.call(null, args)
let a = [1, 2];
let b = [3, 4];
for (a, b) in a.into_iter().zip(b.into_iter()) {
println!("{a}, {b}");
}