Pull to refresh
4
0
Ilya Pirogov @ilyapirogov

Developer

Send message

Если вам нравится идея создания компьютера с нуля, то рекомендую обратить внимание на игру Turing Complete. В ней вы сможете пройти схожий путь, что и автор данного процессора.

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

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

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

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

Много-много лет назад пытался устроится в mail.ru. Хотя я уже тогда был наслышан от коллег историй какая это гнилая компашка, но все равно как-то не верилось и решил испытать судьбу.

Пришел к ним на собеседование, сначала пообщался с жизнерадостной девочкой из HR, затем пришел хмурый технический специалист, позадавал вопросы и затем дал тестовое задание на Python. Точное задание не помню, но было что-то связанное с обработкой текста. Решать его нужно было на бумажке.

Задание я решил, на мой взгляд, простым и элегантным способом за счет того, что Python сравнивает строки в лексикографическом порядке, о чем и сообщил интервьюеру. Он явно удивился и высказал сомнение по поводу логики сравнения строк в Python, но задание принял.

Я уже было решил, что хорошо справился с собеседованием и работа у меня в кармане, но тут буквально ввалился эффективный менеджер, даже не представившись или хотя бы поздоровавшись, развалился в кресле и выложил передо мной бумажку с каким-то графиком и сразу спросил: "Вот тут нам известны 3 точки, как ты найдешь остальные?". Я немного опешил от этого, но ответил что-то вроде "аппроксимирую значения". Он: "Ну напиши формулу для x,y произвольной точки на графике". Я взял листочек и с минуту тупил, не совсем понимая что от меня хотят. И тут этот эффективный менеджер так же внезапно вскакивает и не говоря ни слова уходит. Занавес.

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

В итоге, я благодарен тому менеджеру, что открыл мне глаза и не позволил допустить такую ошибку как устроиться в mail.ru. Уже через несколько недель я работал в потрясающей международной компании за зарплату вдвое выше, чем предлагала мне эта шарашкина компания и с очень классными людьми.

Думаю что использование русской локали - это единственное решение. Возможно поможет Locale Emulator чтобы не менять ее глобально.

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

  • Вы утверждаете, что это библиотека, хотя ничего общего с библиотекой это не имеет и, в отличии от той же утилиты выше, не является production ready.

  • Создаете впечатление, будто это утилита на чистом JavaScript/TypeScript, хотя на самом деле это обертка для кода на Rust.

  • Утверждаете, что ваше решение самое быстрое, но не приводите сравнительного исследования скорости работы вашего решения и других готовых решений.

Сам подход достаточно интересный и может быть действительно полезным, но я бы на вашем месте назвал статью, например: "Как Rust помог значительно ускорить NodeJS" и сделал бы акцент именно на использовании Node-API в Rust и как это можно использовать в своих приложениях с другими библиотеками на Rust. Думаю, что тогда бы рейтинг статьи был бы весьма в плюсе :)

Вы понимаете значение слова "natively"? Это когда вы можете взять ваш "TypeScript" скопировать в браузер и он будет работать. У вас же в зависимостях бинарные библиотеки, а соответственно он никак не сможет работать в браузере и мало чем отличается от подхода "просто запустить консольную утилиту с аргументами".

Зачем ей root? Это такой же бинарник как у вас на github.

Но тут погрешность даже в 100% не изменит вывода - моя xlsx2csv самая быстрая в мире для Typescript. . Кстати, Вы хорошо ли знаете питон и раст? Если да, можете помочь?

Только не для TypeScript, а для NodeJS. А нету их, скорее всего, по тому что на сервере проще сконвертировать файл через консольную утилиту наподобии этой чем тащить в ноду еще один пакет на 3 строчки кода.

Examples называются именно examples, потому что демонстрируют работу с самой важной частью библиотеки, но преднамеренно игнорируют пограничные случаи, обработку ошибок, валидацию и прочие важные аспекты ради простоты кода.

Если бы вы сказали, что написали пример работы с Node-API, то было бы честнее. Хотя для примера у вас слишком много кода и слишком мало пояснений и комментариев.

Если бы она везде стоила $3, то может быть и не было бы такого ажиотажа вокруг.

Понятное дело, что с песчаными пляжами Флориды мало что сравнится. Тем не менее Калифорния - это куда большая пустыня, чем Техас.

Такое впечатление, что оригинальный пост писали исключительно с целью остановить поток людей в Остин. Других причин писать такие глупости я не вижу.

Все знают, что в Техасе жарко, как и в Калифорнии. Я и мои знакомые айтишники думали, что с этим у нас проблем не будет. Но оказалось, что в Остине еще и влажно! Тут выпадает на 90% больше осадков, чем в Портленде.

Я три года прожил в Портланде и больше 5 в Остине. Одна из причин переезда были именно бесконечные дожди.

Что такое дожди в Портланде? Это когда у тебя круглый год 24/7 днем и ночью серая морось. То-ли дождь, то-ли нет - не понятно. И так постоянно.

Что такое дожди в Остине? Это когда у тебя летом все время солнце, а отом бац! и за полчаса вылилась стена воды, как за целый месяц, а затем опять солнечно. Зимой хуже, да, но зимой и температур таких нету.

И потом странно, чтобы такое писал человек из Сан Франциско.
Средняя влажность в Сан Франциско:

Average relative humidity in San Francisco, the United States of America
Average relative humidity in San Francisco, the United States of America

И средняя влажность в Остине:

Average relative humidity in Austin, the United States of America
Average relative humidity in Austin, the United States of America

если дома нет кондиционера, постоянно потеешь.

Что, простите? Этот человек точно был в Остине? Написать подобное, это все равно, что сказать: "если у вас нет воды, то вы будете хотеть пить" или "если у вас нет еды, то вы будете постоянно голодными".

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

Воздух в целом менее свежий, потому что до океана тут 250 километров.

https://www.iqair.com/us/usa/texas/austin
https://www.iqair.com/us/usa/california/san-francisco

Песчаные пляжи, каньоны, тропы вдоль ручьев — всё это кому-то принадлежит. Много земли огорожено колючей проволокой, знаками «Не входить». Даже ручьи и реки находятся в частной собственности, если захочешь подойти к ним на природе — зачастую вход платный.

Тоже не правда. Практически везде есть доступ и к хайкингу, и к речкам/озерам. Не везде бесплатно, да, зто везде чисто, безопасно и с удобствами в виде парковок и туалетов.

В пределах 90 минут езды находится памятка штата, Зачарованная скала, Enchanted Rock. Но если попытаешься выбраться туда в выходные, тебя встретит 3-километровая пробка, а на месте негде припарковаться.

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

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

Эта проблема называется немного по другому. Это не "всюду обман", а это называется "соседство с Мексикой". Это действительно проблема. Зато если вы русский, который умеет сам все делать на совесть, то скорее всего проблем с поиском работы у вас не будет.

Проявлений нашлось много, но удивила в том числе нетерпимость ко всем калифорнийцам, «понаехам».

Я не калифорниец, так что не могу тут объективно судить, но в свой адрес от американцев грубость не слышал, наверное, ни разу. Может дело в человеке, а не месте проживания?

Карательные, милитаристские школы

У меня самого нет детей, но от детей друзей я знаю, что местные школы, например:

Это все хоть и не противоречит словам автора, но тем не менее как-то слабо сочетается с "карательными, милитаристскими школами", на мой взгляд.

Странные аллергии

И тут опять город виноват? Т.е. в любом другом городе такой проблемы возникнуть не может?

[humor]Тем не менее, с целью статьи я согласен. Не переезжайте в Техас, нам тут и без вас хорошо :D[/humor]

Вообще-то в "пустынном" (который на самом деле полон зелени) Техасе есть Мексиканский залив, в котором можно купаться с мая по октябрь включительно.

Вы, возможно, удивитесь, но в Остине весьма не маленькое русскоязычное комьюнити. И нет, американцы как раз очень вежливо относятся к русскоговорящим.

Кстати, в данном случае можно было бы без мьютекса обойтись.

func main() {
	var ben = &Ben{"Ben"}
	var jerry = &Jerry{"Jerry"}
	var maker IceCreamMaker = ben
	ch := make(chan IceCreamMaker, 1)
	defer close(ch)

	var loop0, loop1 func()

	loop0 = func() {
		ch <- ben
		go loop1()
	}

	loop1 = func() {
		ch <- jerry
		go loop0()
	}

	go loop0()

	for {
		select {
		case m := <-ch:
			maker = m
		default:
			maker.Hello()
		}
	}
}

Это только полбеды. Здесь гонка сразу в трех местах: при записи в loop0 и loop1 и при чтении в цикле. Даже если мы синхронизируем изменение maker мы все равно будем иметь туже самую проблему.

Упрощенно этот пример можно было бы переписать следующим образом:

package main

import (
	"fmt"
)

type Ben struct {
	name string
}

func BenHello(b *Ben) {
	fmt.Printf("Ben says, \"Hello my name is %s\"\n", b.name)
}

type Jerry struct {
	name string
}

func JerryHello(j *Jerry) {
	fmt.Printf("Jerry says, \"Hello my name is %s\"\n", j.name)
}

func main() {
	var ben = &Ben{"Ben"}
	var jerry = &Jerry{"Jerry"}
	var maker interface{} = ben

	var loop0, loop1 func()

	loop0 = func() {
		maker = ben
		go loop1()
	}

	loop1 = func() {
		maker = jerry
		go loop0()
	}

	go loop0()

	for {
		switch m := maker.(type) { // <--- очевидно, что эта операция
		case *Jerry:
			JerryHello(m) // <--- и эта
		case *Ben:
			BenHello(m) // <--- не атомарны
		}
	}
}

Между проверкой типа maker и вызовом JerryHello/BenHello значение maker может поменяться, даже если мы защитим loop0/loop1 мьютексом. Очевидно, если мы заменим указатель значением, то ничего не поменяется и switch никуда не уйдет. Полагаю, что примерно тоже самое происходит и с интерфейсом.

Впрочем это легко проверить.
Синхронизируем только запись: https://go.dev/play/p/KJrxnbf6pB9

func main() {
	...
	var lock sync.Mutex
	...
	loop0 = func() {
		lock.Lock()
		defer lock.Unlock()
		
		maker = ben
		go loop1()
	}

	loop1 = func() {
		lock.Lock()
		defer lock.Unlock()
		
		maker = jerry
		go loop0()
	}
	...
}

Результат:

panic: I'm Ben! Not Jerry

goroutine 1 [running]:
main.(*Ben).Hello(0xc00003e730?)
	/tmp/sandbox17993843/prog.go:18 +0x59
main.main()
	/tmp/sandbox17993843/prog.go:61 +0x1cc

Не помогло. А если синхронизировать только чтение? https://go.dev/play/p/DIcbbDLZPVL

func main() {
	...
	var lock sync.Mutex
	...
	for {
		lock.Lock()
		maker.Hello()
		lock.Unlock()
	}
}

Тоже не помогло.

Последняя попытка, объединяем оба кода: https://go.dev/play/p/PLucwu_K25t
Вот только теперь работает как надо.

Хотелось бы что-то более общедоступное, желательно с конкретными доступными практическими примерами, как обсуждаемая статья 👍

Покупаете любой самый дешевый VPS с SSH доступом и локально в терминале выполняете команду:

ssh -D 8099 -q -N -f root@your_server

Все. Ваш собственный секьюрный SOCKS прокси готов, можно подключатся к нему по адресу localhost:8099. Ничего настраивать или устанавливать не надо.

PS Это должно работать и в Windows 10/11, т.к. там предустановлен OpenSSH.

При всём уважении к Кранку, его творения не сравнятся ни с Космическими рейнджерами, ни с King's Bounty...

Спорное утверждение. Лично для меня Вангеры и Космические рейнджеры находятся примерно на одном уровне.

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

-- Докажите, что этот треугольник равнобедренный
-- Мамой клянусь, что равнобедренный!

Information

Rating
Does not participate
Location
Austin, Texas, США
Date of birth
Registered
Activity