Академический Документы
Профессиональный Документы
Культура Документы
Общие вопросы
Что происходит, когда я вбиваю в адресную строку моего браузера medium.com? Как запрос доходит до
сервера, и как идет обратно? Гранулярность — настолько маленькая, насколько возможно.
1. Парсинг строки запроса - получаем протокол, хост, ресурс, параметры запроса
2. Хост необходимо преобразовать в IP-адрес - браузер обращается к своему DNS-кэшу, DNS-кэшу ОС,
файлу hosts… Так или иначе мы резолвим хост в IP
3. Пусть это будет http запрос - сформируется GET запрос, добавятся куки при необходимости,
заголовки, хост, адрес/ресурс, параметры, тело запроса. На уровне приложения дальше будет идти
речь просто о взаимодействии по http
4. Этот запрос упакуется в tcp сегмент, средствами ОС установится tcp-соединение, начнется обмен
данными по http
5. Сервер примет запрос, вернет некий ответ (страницу + данные), браузер отобразит это пользователю
Как можно отсортировать файл на 100GB, в котором расположены числа в случайном порядке, по 1 числу
на строку? Ограничения — объем ОЗУ на машине составляет 1GB.
Самый распространенный ответ гугла - разбиение на доступные по памяти куски, сортировка, далее слияние
отсортированных кусков.
Какая твоя любимая технология (это может быть БД, сервер очередей, библиотека — что угодно)? А
почему?
Нет, я просто делаю задачи от ПМ-а и тимлида)))
-:
- Труднее тестировать и запускать приложение в целом
- Необходимость заботиться о надежной коммуникации между микросервисами
- Сложность с транзакциями в БД
Что ты использовал (или о чем слышал) для трассировки сервисов? Для мониторинга? А для
логирования?
Слышал и немного использовал прометей, графану, логи вроде в кибане были (бла-бла, тут просто у меня
нет реального опыта)
3. Что будет происходить при конкурентной записи в map? Как можно решить эту проблему?
Возможна паника/гонки при одновременном доступе к одному полю мапы, поэтому стоит использовать
мьютексы, например, из пакета sync.
4. Нужно ли лочить структуру мьютексом, если идет конкурентная запись в разные поля структуры?
Из соображений безопасности можно этого не делать, а в целях быстродействия - стоит.
https://stackoverflow.com/questions/29496605/is-it-thread-safe-to-access-different-members-of-struct-in-go
func main() {
runtime.GOMAXPROCS(1)
done := false
go func() {
done = true
}()
for !done {
}
fmt.Println("finished")
}
Будет лок
Как можно изменить этот код, чтобы был вывод “finished”?
Убрать ограничение на 1 процессор или увеличить.
(пишу по памяти)
Канал внутри представлен структурой hchan, в ней есть поля:
buf
bufSize
bufQnt
указатель на позицию в буфере на запись
указатель на позицию в буфере на чтение
closed
список горутин на запись (представлены структурой sudog {elem, g})
список горутин на чтение (представлены структурой sudog {elem, g})
тип данных в канале
размер единицы данных в канале
мьютекс для блокировки вышеописанных полей при чтении/записи
changePointer(p)
println(*p)
}
5
5
Почему? Как нужно изменить функцию changePointer, чтобы вывело 5 и 3 (в оригинальной версии
выводится 5 и 5)?
https://play.golang.org/p/p01jCK9-lkc
go func() {
time.Sleep(3 * time.Second)
ch <- 42
}()
return ch
}
func main() {
timeStart := time.Now()
_, _ = <-worker(), <-worker()