
Мерлин
22.12.2016
10:33:54

Daniel
22.12.2016
10:34:05
70% кандидатов отсеиваются

Evgeny
22.12.2016
10:34:15

Google

Daniel
22.12.2016
10:34:32

Andrey
22.12.2016
10:35:37
кстати в такой формулировки у меня проблемы с русским языком выявились :) я не сразу сообразил что обращение это реверс :)

Evgeny
22.12.2016
10:35:44
что есть обращение?

Daniel
22.12.2016
10:35:45
Почему не реализация бинарного дерева?
обращение односвязного списка - это 10-20 строк кода. быстро спросить, быстро писать, быстро проверять. и там есть двойное дно - можно доп. вопрос задать

Evgeny
22.12.2016
10:36:13

Daniel
22.12.2016
10:36:25
не до конца
но в сторону провала, да

Andrey
22.12.2016
10:36:50
а до конца это еще надо спросить что такое односвязный список? )

Daniel
22.12.2016
10:36:57
ага

Evgeny
22.12.2016
10:37:08

Daniel
22.12.2016
10:37:24
в форме "а покажите мне реальную задачу, в которой используется односвязный список"

Google

Daniil
22.12.2016
10:39:23
А ТЕПЕРЬ ВОПРОС.
Какую литературу посоветуете, чтобы были и алгоритмы рассмотрены и реализации? Пока смотрю на "Алгоритмы разработка и применение" Клейнберга.

Мерлин
22.12.2016
10:40:06
О, кстати мне на последнем собеседовании задавали вопрос, как найти обратную матрицу

Evgeny
22.12.2016
10:40:25

Мерлин
22.12.2016
10:49:04

Aleksandr
22.12.2016
10:51:12

Daniel
22.12.2016
10:51:15

Aleksandr
22.12.2016
10:51:18
тоже провал да?

Daniel
22.12.2016
10:52:06
тензорное исчисление не имеет отношения к односвязным спискам

Slava
22.12.2016
10:52:10

Evgeny
22.12.2016
10:52:42

Daniel
22.12.2016
10:53:14

Andrey
22.12.2016
10:53:23

Aleksandr
22.12.2016
10:55:08

Slava
22.12.2016
10:55:16
если подробности будут не в личную - то почему бы и не запостить на всех =)

Daniil
22.12.2016
10:55:28

Daniel
22.12.2016
10:59:40

Aleksandr
22.12.2016
11:00:39
it is an official translate, ващета
да я не спорю, но я не на факультете компьютер сайнс учился, так что совковых учебников не застал. а то, что читал сам, естественно было на ангельском

Daniel
22.12.2016
11:01:19
гугл вполне годную википедию выдает первой же ссылкой на этот запрос
так что - не катет ваша гипотенуза

Aleksandr
22.12.2016
11:02:57
ну так гугл и алгоритм reverse linked list выдаёт в первой ссылке. мы же про гипотетическое собеседование говорим

Google

Anya
22.12.2016
11:13:48
Помнится правила говорили что нужны ссылки и больше инфы а не просто собирание базы лидов по го
Простите великодушно, кину сюда ссылку, как красивое описание будет готово))

Daniil
22.12.2016
12:19:38
Теоретический Вопрос по Mutex.
Допустим, у нас есть слайс типов, которе сами по себе структура.
MyType и sliceMyType.
В этом слайсе мы храним MyType, как они есть.
И вдруг я создаю слайс с указателями на этот тип из sliceMyType, называю его slicePointMyTypes, заполняю его указателями.
Потом я сделал Mutext на действия с slicePointMyTypes и циклом по указателю поле поле во всех MyType.
Вопрос будет ли применён Mutex на оригинальный sliceMyType? Хоть мы его и не используем, но по указателю мы идём к его данным.
Не знаю как проверить на практике, что блокируется, а что нет.
Нарисовал схемку.
(пжлст сильно не бейте)

Daniel
22.12.2016
12:20:47
есть подозрение, что вы не понимаете, как работают мутексы в go

Daniil
22.12.2016
12:21:09
Верное :(

Мерлин
22.12.2016
12:23:59

Zver
22.12.2016
12:33:30
Верное :(
Мютекс используется, для выполнения каких-то действий эксклюзивно. Если вы знаете, что к каким-то данным будет обращение из нескольких потоков, то все действия с этими данными оборачиваете в мютексы и все. Внутри одного потока мютексы не нужны.

Daniel
22.12.2016
12:34:12
Верное :(
действие мутекса распространяется только на сам мутекс
то, что горутина блокируется на попытке взять занятый мутекс - это побочный эффект
полезный побочный эффект
соответственно, если ваш код берет (лочит) мутекс - он этот эффект может использовать
не берет - не может

Daniel
22.12.2016
12:36:52
в отличие от явы, где мутекс распростряняется на synced блок кода, в го мутекс надо явным образом отпускать
если вы забудете его отпустить - его никто больше не возьмет
кстати, @kirilldanshin , это было бы полезно втащить в ваш goodlng
как и реентерабельные мутексы

Daniil
22.12.2016
12:39:19
А теперь вот так вот:
Две функции, которые меняют переменную.
Они могут вызваться одновременно (ну или во время исполнения одной из них) из параллельных горутин. Обе обёрнуты в mutex
ЧТо произойдёт? Одна гоурутина будет ждать пока выполнит действия первая над этой переменной? Или т.к. это разные функции, то они выполнятся одновременно?
Что синхронизирует mutex область памяти или действия одной функции?

Daniel
22.12.2016
12:40:02
первая горутина вызывает Lock(), и он возвращается сразу
вторая горутина вызывает Lock() - и он не возвращается, пока первая не вызовет Unlock()
как только первая вызвала Unlock() - управление из Lock() второй горутины возвращается в нее

Google

Daniel
22.12.2016
12:41:09
так понятно?
никаких других связей ни с переменными, ни с кодом у мутекса нет

Daniil
22.12.2016
12:42:11
Всё теперь понял.
Я просто думал они ждут не освободили ли переменную.
Т.е. получается не важно что заблокировано, горутины будут просто ждать, пок кто-то не отпустит Mutex?

Daniel
22.12.2016
12:42:22
именно
и не кто-то, а тот, кто его взял
впрочем - я не проверял!

Daniil
22.12.2016
12:42:54
Эх.. в мечтах было красивее.

Daniel
22.12.2016
12:43:11
ну - в go мутексы так себе

Admin
ERROR: S client not available

Daniel
22.12.2016
12:43:34
поэтому большую часть того, что мы привыкли делать на мутексах, надо делать на каналах
например, две функции

Slava
22.12.2016
12:43:50

Daniil
22.12.2016
12:43:53
Т.е. много Mutex очень вредно, как тогда ещё можно синхронизировать работу над одной областью пмяти?

Daniel
22.12.2016
12:43:59
еще канал и еще одна горутина
две функции пишут в канал, а третья из канала читает и монопольно переменную меняет

Daniil
22.12.2016
12:44:44
А кналы не на Mutex реализованы?

Zver
22.12.2016
12:44:46

Daniel
22.12.2016
12:45:01
поэтому канало сыщественно медленнее мутексов

Slava
22.12.2016
12:45:16
на mutex но там есть хитрости

Google

Мерлин
22.12.2016
12:45:24

Daniel
22.12.2016
12:45:27
но ctst строгие отцы говорят нам игнорировать это
Они там вполне стандартные.
я в яве привык к реентерабельным мутексам, которые втоматически отпускаются по завершении блока. в go этого нет

Daniil
22.12.2016
12:46:35
Не, у меня задумка над паралелльной работй с одним слайсом, кто-то может читать, 10 других гоурутин заходят написать или убрать в него что-то.

Мерлин
22.12.2016
12:46:43
Мне with в go не хватает :с

Daniel
22.12.2016
12:47:04

Slava
22.12.2016
12:47:30
@onokonem ты можешь сам такую функцию написать =)

Daniel
22.12.2016
12:47:38
какую?

Kirill
22.12.2016
12:47:53

Slava
22.12.2016
12:48:24
какую?
которая будет имитировать блок с мьютексом

Daniil
22.12.2016
12:49:29
тогда изучите RWMutex
Да, это я уже делал, просто одним придётся ждать, пока другие пишут, вот я и хотел поделить на разные слайсы (когда был неверно одурманен мыслями про mutex)

Kirill
22.12.2016
12:51:54
"напишите обращение односвязного списка"
чуть не испортил тебе вопрос для этого чята уточнением а-ля *кусок кода* ты это имел ввиду?. потом задумался. тут же ничего другого не придумаешь.
слаб я в русских терминах.

Daniel
22.12.2016
12:53:06
ааааааа!
взять лок может один, а отпустить другой
аааа!!!111
https://play.golang.org/p/oVZZsCBmQp
даже вот так: https://play.golang.org/p/cVnVhL7gql
понятно, почему мутексы нереентерабельные

Kirill
22.12.2016
12:56:19
это одна из причин, по которой я не люблю mutex'ы