Задачи для IT интервью

assazello
Уже с Приветом
Posts: 1218
Joined: 06 Mar 2015 00:18
Location: San Jose, CA

Re: Задачи для IT интервью

Post by assazello »

Да, вот она, ошибка копи-паста. Я чувствовал, что тут что-то не так, но прекрасный результат затмил доводы разума. :)
Спасибо, helg.

Ваш ответ, скорее всего, оптимальный. В том месте, где я эту задачу нашел, формулировка и была "есть ли у игрока стратегия, позволяющая добиться выигрыша в 2/3 случаев?" Т.е., ответ уже был дан и вы его нашли. Я позже код посмотрю, может еще задам пару вопросов. Спасибо!
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Задачи для IT интервью

Post by helg »

assazello wrote:Ваш ответ, скорее всего, оптимальный. В том месте, где я эту задачу нашел, формулировка и была "есть ли у игрока стратегия, позволяющая добиться выигрыша в 2/3 случаев?"
Тогда нужно внимательно перечитать оригинальную формулировку условия и побуквоедить. Если интервал 1..2000 понимать в "программистском" смысле, когда левая граница включена, а правая - нет, всего чисел в таком интервале 1999. Для него ответ из таблицы 1333/1999. Это немного больше, чем 2/3, и стратегия есть. Если же оба края интервала включены, то ответ 1333/2000. Это немного меньше, чем 2/3. Стало быть, требуемой стратегии нет.
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

Сабина wrote: -how would you architect various things around Twitter company.
Нашелся ответ на то вопрос в книжке Designing Data intensive applications. Может кому то пригодится
To make this idea more concrete, let’s consider Twitter as an example, using data published in November 2012 [13]. Two of Twitter’s main operations are:
Post tweet
A user can publish a new message to their followers (4.6 k requests/sec on average, over 12 k requests/sec at peak).
Home timeline
A user can view tweets recently published by the people they follow (300 k requests/sec).

Simply handling 12,000 writes per second (the peak rate for posting tweets) would be fairly easy. However, Twitter’s scaling challenge is not primarily due to tweet volume, but due to fan-outii — each user follows many people, and each user is followed by many people. There are broadly two approaches to implementing these two operations:

1. Posting a tweet simply inserts the new tweet into a global collection of tweets. When a user requests home timeline, look up all the people they follow, find all recent tweets for each of those users, and merge them (sorted by time). In a relational database like the one in Figure 1-2, this would be a query along the lines of:
SELECT tweets.*, users.* FROM tweets
JOIN users ON tweets.sender_id = users.id
JOIN follows ON follows.followee_id = users.id
WHERE follows.follower_id = current_user

2. Maintain a cache for each user’s home timeline — like a mailbox of tweets for each recipient user (see Figure 1-3). When a user posts a tweet, look up all the people who follow that user, and insert the new tweet into each of their home timeline caches. The request to read the home timeline is then cheap, because its result has been computed ahead of time.

The first version of Twitter used approach 1, but the systems struggled to keep up with the load of home timeline queries, so the company switched to approach 2. This works better because the average rate of published tweets is almost two orders of magnitude lower than the rate of home timeline reads, and so in this case it’s preferable to do more work at write time and less at read time.
However, the downside of approach 2 is that posting a tweet now requires a lot of extra work. On average, a tweet is delivered to about 75 followers, so 4.6 k tweets per second become 345 k writes per second to the home timeline caches. But this average hides the fact that the number of followers per user varies wildly, and some users have over 30 million followers. This means that a single tweet may result in over 30 million writes to
home timelines! Doing this in a timely manner — Twitter tries to deliver tweets to followers within 5 seconds — is a significant challenge.

In the example of Twitter, the distribution of followers per user (maybe weighted by how often those users tweet), is a key load parameter for discussing scalability, since it determines the fan-out load. Your application may have very different characteristics, but you can apply similar principles to reasoning about its load.

The final twist of the Twitter anecdote: now that approach 2 is robustly implemented, Twitter is moving to a hybrid of both approaches. Most users’ tweets continue to be fanned out to home timelines at the time when they are posted, but a small number of users with a very large number of followers are excepted from this fan-out. Instead, when the home timeline is read, the tweets from celebrities followed by the user are
fetched separately and merged with the home timeline when the timeline is read, like in approach 1. This hybrid approach is able to deliver consistently good performance
https://www.youtube.com/watch?v=wOwblaKmyVw
assazello
Уже с Приветом
Posts: 1218
Joined: 06 Mar 2015 00:18
Location: San Jose, CA

Re: Задачи для IT интервью

Post by assazello »

Задача из Белого Дома.
https://www.whitehouse.gov/blog/2015/05/17/hello-world
Alice and Bob are playing a game. They are teammates, so they will win or lose together. Before the game starts, they can talk to each other and agree on a strategy.

When the game starts, Alice and Bob go into separate soundproof rooms – they cannot communicate with each other in any way. They each flip a coin and note whether it came up Heads or Tails. (No funny business allowed – it has to be an honest coin flip and they have to tell the truth later about how it came out.) Now Alice writes down a guess as to the result of Bob’s coin flip; and Bob likewise writes down a guess as to Alice’s flip.

If either or both of the written-down guesses turns out to be correct, then Alice and Bob both win as a team. But if both written-down guesses are wrong, then they both lose.

The puzzle is this: Can you think of a strategy Alice and Bob can use that is guaranteed to win every time?

To get you started, here is an example of a strategy that doesn’t work: Alice and Bob decide in advance that they will both guess Heads. This isn’t a guaranteed-winning strategy, because a quarter of the time they will both flip Tails so both guesses will be wrong. They’ll win 75% of the time, but that isn’t enough – they need to win every time.

It might seem at first like this puzzle is impossible, but don’t give up – there is a solution, which I’ll reveal in a future post. In the meantime, watch my Twitter stream @edfelten44 for hints.
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Задачи для IT интервью

Post by helg »

А загадывает то, что у неё выпало, Б - обратную сторону того, что выпало у него. Когда монетки выпали одной стороной, угадывает A, когда разными - Б.
assazello
Уже с Приветом
Posts: 1218
Joined: 06 Mar 2015 00:18
Location: San Jose, CA

Re: Задачи для IT интервью

Post by assazello »

Да, это старая загадка. А вот источник забавный. :)

Кстати, не все знают, но есть и обобщенное решение для N игроков.
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

Кстати если кому из ребят скучно готовится к интервью, вот вам в подмогу :). (До чего только народ на ютьюбе не додумается :))

https://www.youtube.com/user/itcuties/videos
https://www.youtube.com/watch?v=wOwblaKmyVw
XpoH
Уже с Приветом
Posts: 2123
Joined: 08 Nov 2013 22:33
Location: SFBA

Re: Задачи для IT интервью

Post by XpoH »

Огонь!
assazello
Уже с Приветом
Posts: 1218
Joined: 06 Mar 2015 00:18
Location: San Jose, CA

Re: Задачи для IT интервью

Post by assazello »

assazello wrote: Кстати, не все знают, но есть и обобщенное решение для N игроков.
Никто не поддержал... потому, что очевидно или потому, что непонятно? :)

Я сформулирую тогда. N человек играют в игру - каждый генерирует случайное число из отрезка от 1..N (подбрасывая монету или используя генератор случайных чисел), а после называет число из того же отрезка. Если хотя бы один из участников назвал число, сгенерированное хотя бы одним из других участников, то игра выиграна, иначе - проиграна. Найти 100% выигрышную стратегию.
User avatar
MaximS
Уже с Приветом
Posts: 777
Joined: 30 Apr 2015 07:11

Re: Задачи для IT интервью

Post by MaximS »

Berlaga wrote:Есть подраздел Головоломки, то я хочу все таки что-то попроще и более приближенного к IT сфере. То, что можно спросить на интервью и понять, как кандидат думает и думает ли он вообще.

Например.
Программист преследует Вора, который пытается скрыться в пещере. Пещера представляет собой 3 туннеля одинаковой длины, расходящихся из небольшой комнаты под углом 60гр к друг другу и заканчивающихся тупиком. В пещере темно, и Программист может разглядеть Вора только с расстояния не более 10м. Скорость Программиста в два раза больше скорости Ворв. При какой максимальной длине туннеля Программист может гарантированно поймать Вора за конечное время?
Что скажете, Умы? :)
Не меньше пяти километров думаю, иначе никак
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

Спросили на днях закодировать Multiset. Сделала через HashMap, но нашла в И-нете варианты с LinkedLists ( keySet, valueSet).
Никому не доводилось ? Как сделали ?
PS. Что там гуглогуава написала в оригинале смотреть поленилась, многа буков :oops:
https://www.youtube.com/watch?v=wOwblaKmyVw
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

Сабина wrote:Спросили на днях закодировать Multiset. Сделала через HashMap, но нашла в И-нете варианты с LinkedLists ( keySet, valueSet).
Никому не доводилось ? Как сделали ?
PS. Что там гуглогуава написала в оригинале смотреть поленилась, многа буков :oops:
Задачка на multiset может быть простая, например дан string "adbafgeef" а на выходе надо выдать "a2b1d1e2f2g1"

MultiSet для этого дела:
a: 2,
b: 1,
d: 1,
e: 2,
f: 2,
g:1


Вот например парень делает через два листа - http://magicoftutorial.blogspot.com/201 ... ation.html" onclick="window.open(this.href);return false;

А то что я делала через ХашМап примерно было вот так

Получается что такая вот версия например не очень efficient

Code: Select all

public class MultiSet {
	private static Map<Character, Integer> m = new HashMap<Character, Integer>();
	
	private static Map<Character, Integer> buildMultiSet(String s) {
		char[] stringChars = s.toCharArray();
				for (int i = 0; i < stringChars.length; i++) {
					if (m.containsKey(stringChars[i]))
						m.put(stringChars[i], m.get(stringChars[i]) + 1);
					else
						m.put(stringChars[i], 1);
				}
		return m;
	}
	
	public static String printStringMultiSet (String s) {
		StringBuffer buf = new StringBuffer();
		for (Map.Entry<Character, Integer> entry: buildMultiSet(s).entrySet()) {
			buf.append(entry.getKey()).append(entry.getValue());
			
		}
		return buf.toString();
	}
}
Оказывается самое еффективное бы было сделать через char[] array.
Index = (Integer) charAt
value = count of this char occurences.

При условии что речь идет об ASCII chars (всего в массиве 128)
https://www.youtube.com/watch?v=wOwblaKmyVw
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

Сегодня интересную задачку дали. Точнее оптимальное решение шокировало простотой.

У вас есть linked list с nodes следующего формата:

public class Node {

int data,
Node next,
Node random}

Где random - это линк на любой другой node в том же листе, включая null, self etc.
Задача написать clone метод для листа.
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
AndreyT
Уже с Приветом
Posts: 2997
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: Задачи для IT интервью

Post by AndreyT »

Сабина wrote:Задача написать clone метод для листа.
Сразу приходит в голову простое двухпроходное решение, если разрешается временно модифицировать входной список, т.е. временно установить поля 'random' входного списка в новые значения, а потом вернуть обратно (т.е. в итоге исходный список останется неизменным). Но такая возможность должна быть явно оговорена в постановке задачи, ибо традиционная каноническая постановка задачи предполагает, что входные данные являются read-only.
Best regards,
Андрей
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Задачи для IT интервью

Post by helg »

AndreyT wrote:
Сабина wrote:Задача написать clone метод для листа.
Сразу приходит в голову простое двухпроходное решение, если разрешается временно модифицировать входной список, т.е. временно установить поля 'random' входного списка в новые значения, а потом вернуть обратно (т.е. в итоге исходный список останется неизменным). Но такая возможность должна быть явно оговорена в постановке задачи, ибо традиционная каноническая постановка задачи предполагает, что входные данные являются read-only.
Можно вместо random модифицировать поля next исходного списка: на первом проходе вставлять клонированый узел в оригинальный список сразу за соответствующим неклонированым. Соглашусь с AndreyT, что это бомба замедленного действия. Стандартную реализацию clone() можно вызывать из нескольких нитей одновременно, равно как и другине немодифицирующие методы. А такую нельзя, - и умудрённый опытом инженер так писать не будет.
User avatar
John Smith
Уже с Приветом
Posts: 1679
Joined: 04 Oct 2006 23:30
Location: Las Vegas

Re: Задачи для IT интервью

Post by John Smith »

меп старых нодов на новые, тогда на очередном next node - если меппинг для него уже в мэпе есть - значит он у кого то был рандомом - нужно будет только проапдетить его data.
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

John Smith wrote:меп старых нодов на новые, тогда на очередном next node - если меппинг для него уже в мэпе есть - значит он у кого то был рандомом - нужно будет только проапдетить его data.
Да, это второй правильный вариант, но есть еще вариант без мапа.
https://www.youtube.com/watch?v=wOwblaKmyVw
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

Про первый вариант не совсем поняла почему "умудренный опытом инженер так писать не будет". Понятно же что это просто задачка на знание структур, а не попытка написать что-то thread safe etc. Кмк на интервю этот вариант именно и ожидается
https://www.youtube.com/watch?v=wOwblaKmyVw
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

oops задачка и правда весьма заезженная оказалась
http://www.geeksforgeeks.org/a-linked-l ... t-pointer/" onclick="window.open(this.href);return false;
http://www.geeksforgeeks.org/clone-link ... ter-set-2/" onclick="window.open(this.href);return false;
https://www.youtube.com/watch?v=wOwblaKmyVw
avitya
Уже с Приветом
Posts: 3836
Joined: 13 Sep 2007 10:06

Re: Задачи для IT интервью

Post by avitya »

Я ее только студентам дают. Решение с мап-ом не проходит, так как забыто основное условие задачи: дополнительная память O(1), ну кроме самого нового списка, само собой.
Для тех, кому легко, рекомендую сделать clone() для любого графа (сейчас это граф с 2 выходящими ребрами из каждой вершины, кроме последней). Не категорично сложнее, но но сложнее ;-)
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Задачи для IT интервью

Post by helg »

Сабина wrote:Про первый вариант не совсем поняла почему "умудренный опытом инженер так писать не будет".
Побочных эффектов, пусть даже они у красивого решения, надо стараться избегать. В данном случае, клонированный список всё равно ест O(N) памяти, и потратить объём такого же порядка на временный маппинг в решении без побочных эффектов вполне нормально.
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Задачи для IT интервью

Post by helg »

avitya wrote:Для тех, кому легко, рекомендую сделать clone() для любого графа (сейчас это граф с 2 выходящими ребрами из каждой вершины, кроме последней).
Уточните задачу. Несвязный граф, к примеру, подходит под определение "любой граф"?
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

кстати тут раньше был вопрос про url shortening service
вот отличный вариант как обставить это на девелоперском интервью
http://www.tawheedkader.com/2012/03/how ... r-startup/" onclick="window.open(this.href);return false;

Хотя вот тут например ответ весьма неэдентичный :)

http://www.careercup.com/question?id=14578080" onclick="window.open(this.href);return false;
Everytime when a url is to be shortened, url_id field is incremented, url_id is converted to base-36 ( 26 alphabets + 10 digits ) OR base-62 ( 26 small alphabets + 26 capital alphabets + 10 digits ) which serves as primary key for each tuple. A string i.e. the actual url is added corresponding to this key in database. The primary key is appended to service providers domain name after '/' and returned to the user.

Usually its better to add a new url_id rather than searching for existence of a url in database. So same url can be shortened to multiple short url's.

But some sites do take care of not adding multiple short url's in database if same user try to reproduce it. They consider user location for this purpose.
https://www.youtube.com/watch?v=wOwblaKmyVw
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Задачи для IT интервью

Post by Сабина »

Странное у меня interview сегодня было.
В позиции написано php, сама я на нее не апплаилась, менеджер сказал что no php - OK, они де все равно логику переносят на Go, все будут учить Go.
Начинается interview - шлют мне код на php. Смотрю там просто валидация данных обычной юзер формы - имя фамилию подрезать, емейл валидировать, соушал валидировать etc. Стала писать код на Джаве - парень меня останавливает что надо имплементировать как декоратор. Ну думаю ладно видимо какие то веши должны быть generic enough , pluggable. Создала generic декоратор с методами в тему. Он говoрит нет not generic enough. Почему говорит у вас обьект а не просто map. И еще наверное будет нужен adapter чтобы все эти decorations применить. Задачка де на design patterns. Я видимо чего то не понимаю в php или вообше в этой жизни но я не пойму каким боком для таких валидаций декораторы и адаптеры :pain1:
Точнее понимаю что php-щники бы наверное сразу поняли о чем речь (судя ои нагугленному)
http://forum.phalconphp.com/discussion/ ... validators" onclick="window.open(this.href);return false;

Но в Java world я бы наверное удивилась если бы попросили формы/user input валидровать через декораторы и адаптеры

PS. Видимо речь шла о функциональном стиле подходе где фунцкции применяются одна за другой не к обьектам, а как бы к data stream
Как в этом примере на Джава скрипте
http://robdodson.me/javascript-design-p ... decorator/" onclick="window.open(this.href);return false;
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
FreemanUSA
Уже с Приветом
Posts: 349
Joined: 24 Jul 2012 23:26
Location: echo RU::US($me);

Re: Задачи для IT интервью

Post by FreemanUSA »

Мне дали задание для получения контрактной работы 35 в час, но я сказал что это мало, за решения и я хочу 50. Вопрос это много или нет. Принцип задание, работа с JSON объектом, но весь косяк заключается в том что браузер блокирует его с ошибкой типа “Uncaught SyntaxError: Unexpected token” или при другом подходе “ No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. ” и jQuery не работает, соответственно нужно попробывать первоисточник JavaScript. Для меня вообще бы проще было бы использовать PHP c jQuery, но они хотят что бы только Ajax. После этого расстасовку на веб страницу, ну и всякие само собой респосив дизай, попАп окна при нажатие и т.д. Может я утрирую и не такое это сложное задание.
Задание:
/*================================*/
ASSESSMENT INSTRUCTIONS
/*================================*/

1. Author all HTML5 and CSS to replicate the layout as prescribed in provided wireframe example (wireframe_example.jpg).

2. Consume the following service and populate the page with the products and pricing returned. http://m.lowes.com/IntegrationServices/ ... ts=5003703" onclick="window.open(this.href);return false;


3. Consume the response on front end.

4. User Experience: Page should be responsive with at least one mobile and/or tablet experience.

5. User Interactions:

a. When a user's mouse hovers over one of the products, the information for that product will appear in the larger "hero" area (to include switching the image asset from the smaller thumbnail to the medium image asset).

b. When a user clicks the "Add to Cart" element in the larger "hero" area, a JavaScript alert message will display the price of the item. The price displayed should be determined by the product shown in the masthead.

/*================================*/
IMPORTANT NOTE
/*================================*/

1. Please change the file extension of your external JavaScript file(s) to .txt before resubmitting to prevent Lowe's email system from removing them.
Last edited by FreemanUSA on 28 May 2015 21:07, edited 1 time in total.

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