Ведение блога в ИТ

User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: Ведение блога в ИТ

Post by dotcom »

Sergunka wrote: Задача всеж на интервью состоит в том чтоб еще и покодить :fr: перед ашалевшей публикой :D
Ну если приходить на интервью со своими собственными вопросами, то публика действительно ошалеет. :D А сколько раз про barber'а спрашивали на интервью?
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Ведение блога в ИТ

Post by Sergunka »

dotcom wrote:А сколько раз про barber'а спрашивали на интервью?
В той или иной форме всегда на интервью есть задачи по синхронизации. У меня был прикол два подряд интервью просили написать свою реальзацию очереди с блокировкой. На втором интервью я вроде как отписал нормально - получил офер.
"A patriot must always be ready to defend his country against his government." Edward Abbey
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Ведение блога в ИТ

Post by valchkou »

Sergunka wrote: Согласен, что задача выполнена не по спекам как завещал Дейкстра

В моей интерпретации как в общем-то и в большинстве других на просторах интернета клиент заходит в зал ожидания (т.е. у меня в очередь с блокировкой) а потом уже парикмахер разбирается с ним. Здесь есть свои плюсы и минусы.
в такой постановке, интересность задачи не тянет на блог для чувака за 150ка.
ну че там 2 метода: offer(), pull() и все решение !
у тебя клиент это не поток, а фактически сообщение которое поставили в очередь на обработку.

Задача дейкстры становится в разы интереснее если взглянуть на нее под другим углом.
Допустим что киенты, как и парикмакер - потоки.
Клиенты конкурируют за стул и время парикмакера и место в зале ожидания.
Парикмакер же за стул не конкурирует, но конкурирует за возможность поспать.
Вот тогда и начинается самое интересное.
Задача принимает нужную форму, клиенты-потоки идут спать и будятся, как только стул освободился.
Парикмакер наоборот идет спать если стул свободен и просыпается когда он становится занят.
ikatkov
Новичок
Posts: 73
Joined: 28 Apr 2005 17:27
Location: San Francisco Bay Area, CA

Re: Ведение блога в ИТ

Post by ikatkov »

а зачем вообще потоки и очереди в задаче про парикмахера?
Разве это не типичная задача для finite state machine? Нужен только один thread и заранее предсказуемое количество памяти для любого количества клиентов и парикмахеров.
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Ведение блога в ИТ

Post by valchkou »

ikatkov wrote:а зачем вообще потоки и очереди в задаче про парикмахера?
предложите свое решение на java,
к слову сергей единственный кто это сделал, все остальные только умничают, включая меня
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Ведение блога в ИТ

Post by crypto5 »

ikatkov wrote:а зачем вообще потоки и очереди в задаче про парикмахера?
Разве это не типичная задача для finite state machine? Нужен только один thread и заранее предсказуемое количество памяти для любого количества клиентов и парикмахеров.
Видимо потому что эту задачу так сформулировал Дейкстра, у него парикмахер и клиенты это разные процессы выполнения кода.
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Ведение блога в ИТ

Post by Интеррапт »

valchkou wrote: предложите свое решение на java,
В смысле? Вы никогда имплементацию не видели? Ну так гуглится на раз-два:

http://www.cs.helsinki.fi/u/kerola/rio/ ... arber.java
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Ведение блога в ИТ

Post by valchkou »

Интеррапт wrote:
valchkou wrote: предложите свое решение на java,
В смысле? Вы никогда имплементацию не видели? Ну так гуглится на раз-два:

http://www.cs.helsinki.fi/u/kerola/rio/ ... arber.java
ну что так официально, нет я про привет конкретно, только сергей посмел выложить свою, хоть и кривую, но не постеснялся. У меня тоже был свой вариант, кстати таже с 3 семафорами, по типу вышеприведенного примера, с небольшими различиями, но я полинился разукрасить его
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Ведение блога в ИТ

Post by crypto5 »

valchkou wrote:
Интеррапт wrote:
valchkou wrote: предложите свое решение на java,
В смысле? Вы никогда имплементацию не видели? Ну так гуглится на раз-два:

http://www.cs.helsinki.fi/u/kerola/rio/ ... arber.java
ну что так официально, нет я про привет конкретно, только сергей посмел выложить свою, хоть и кривую, но не постеснялся. У меня тоже был свой вариант, кстати таже с 3 семафорами, по типу вышеприведенного примера, с небольшими различиями, но я полинился разукрасить его
Так и быть, выложу на досуге свой вариант с ForkJoinPool-ом :D
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Ведение блога в ИТ

Post by Интеррапт »

valchkou wrote:ну что так официально
Ну а что вы хотели?
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Ведение блога в ИТ

Post by crypto5 »

Вот свой вариант набросал:

Code: Select all

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;


public class Barber {
	static ExecutorService barber = new ThreadPoolExecutor(
      1,
      1,
      0,
      TimeUnit.MILLISECONDS,
      new LinkedBlockingQueue<Runnable>(20),
      new ThreadPoolExecutor.AbortPolicy());
	
  public static void main(String args[]) {
  	for(int i = 0; i < 100; i ++) {
  		new Client().start();
  	}
  }
  
  static class Client extends Thread {
  	@Override
  	public void run() {
  		Future<Void> v = barber.submit(new Callable<Void>() {
				@Override
				public Void call() throws Exception {
					Thread.currentThread().sleep(1000);
					return null;
				}
			});
  		try {
				v.get();
			} catch (InterruptedException | ExecutionException e) {
				e.printStackTrace();
			}
  	}
  }
}
In vino Veritas!
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Ведение блога в ИТ

Post by valchkou »

Интеррапт wrote:Ну а что вы хотели?
хотел в гугл податься, но глянул на код крипто и понял, что нифига в жаве не рублю.
крипто, почему твои варианты ответов не выгугливаются?
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Ведение блога в ИТ

Post by crypto5 »

valchkou wrote:
Интеррапт wrote:Ну а что вы хотели?
хотел в гугл податься, но глянул на код крипто и понял, что нифига в жаве не рублю.
крипто, почему твои варианты ответов не выгугливаются?
Потому что я его 10 минут назад написал, эту страницу форума гугл видимо еще не успел проиндексировать :D
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Ведение блога в ИТ

Post by Интеррапт »

crypto5 wrote:Потому что я его 10 минут назад написал, эту страницу форума гугл видимо еще не успел проиндексировать :D
Что-то вы там гугловцы тормозите. Когда же риал-тайм индексация будет?
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Ведение блога в ИТ

Post by crypto5 »

Интеррапт wrote:
crypto5 wrote:Потому что я его 10 минут назад написал, эту страницу форума гугл видимо еще не успел проиндексировать :D
Что-то вы там гугловцы тормозите. Когда же риал-тайм индексация будет?
Это не ко мне, я по части рекламы :gen1:
In vino Veritas!

Return to “Работа и Карьера в IT”