До того, как прийти в ЕРАМ, я побывал примерно на 20 собеседованиях в питерских IT-компаниях, и во многих давали задачи. Я синтезировал свой опыт и придумал пять задач, которые похожи на те, что дают на онлайн-тестированиях и очных собеседованиях.
19-20 мая в Питере прошла конференция DotNext, где мы предложили участникам пройти квест, который и состоял из этих задач. Отвечая правильно на задачу, участник получал следующую.
С первыми тремя могут справиться джуниоры, им часто задают подобные вопросы на собеседованиях. Четвертую можно задать кому угодно, но я бы рассчитывал на специалистов уровня middle: далеко не все джуниоры разбираются в возрастаниях сложности алгоритмов.
С пятой задачей справились единицы. Ее сложность – не в том, чтобы вычислить, что будет в селекте (с этим как раз справились многие), а в том, чтобы найти следующее число в последовательности, а для этого требуются хорошие математические знания. Мне кажется, математическая база очень важна для программиста.
Участники конференции подходили и спрашивали, как решать задачи и где можно увидеть их полный список, и я пообещал, что опубликую их тут. Правильные ответы и комментарии спрятаны, чтобы те, кто увидит задачи впервые, смогли решить их без подсказок.
Итак, начнем.
1) Какой результат выведет на консоль данная программа?
class Program { static void Main(string[] args) { var numbers = new int[] { 7, 2, 5, 5, 7, 6, 7 }; var result = numbers.Sum() + numbers.Skip(2).Take(3).Sum(); var y = numbers.GroupBy(x => x).Select(x => { result += x.Key; return x.Key; }); Console.WriteLine(result); } }
2) Какой результат выведет на консоль данная программа?
class Program { private static string GetNumber(int input) { try { throw new Exception(input.ToString()); } catch (Exception e) { throw new Exception((int.Parse(e.Message) + 3).ToString()); } finally { throw new Exception((++input).ToString()); } return (input += 4).ToString(); } static void Main(string[] args) { string result; try { result = GetNumber(1); } catch (Exception e) { result = e.Message; } Console.WriteLine(int.Parse(result) * 100); } }
3) Какой результат выведет на консоль данная программа?
class MagicValue { public int Left { get; set; } public int Right { get; set; } public MagicValue(int left, int right) { Left = left; Right = right; } public static void Apply(MagicValue magicValue) { magicValue.Left += 3; magicValue.Right += 4; magicValue = new MagicValue(5, 6); } public static void ApplyRef(ref MagicValue magicValue) { magicValue.Left += 7; magicValue.Right += 8; magicValue = new MagicValue(9, 10); } } class Program { static void Main(string[] args) { var magicValue = new MagicValue(1, 2); MagicValue.ApplyRef(ref magicValue); MagicValue.Apply(magicValue); Console.WriteLine(magicValue.Left * magicValue.Right); } }
4) Даны 9 функций. Каждой функции соответствует номер от 1 до 9. Расположите функции в порядке возрастания сложности, после чего подставьте 9 номеров отсортированных функций последовательно в формулу _ _ _ — _ _ _ + _ _ _ = «?». Напишите, чему равно «?».
1.
2.
3.
4.
5.
6.
7.
8.
9.
Решение:
6.
1.
3.
2.
4.
9.
8.
5.
7.
6 1 3 — 2 4 9 + 8 5 7 = 1221
5) Пусть таблица carTable содержит следующие значения:
id | model | price |
---|---|---|
1 | Nissan | 1000 |
2 | BMW | 2000 |
3 | Toyota | 1000 |
4 | Renault | 2000 |
5 | Peugeot | 1000 |
6 | Opel | 2000 |
Результатом представленного ниже SQL запроса будет 2 значения — <1> и <2>.
;WITH someTable AS (SELECT 1 val UNION ALL SELECT val + 1 FROM someTable WHERE val BETWEEN 1 AND 3) SELECT carTable.price / SUM(CASE WHEN carTable.price = 1000 THEN 1 ELSE 2 END) / 250 AS result FROM someTable INNER JOIN carTable ON carTable.id = someTable.val GROUP BY carTable.price ORDER BY carTable.price ASC
<1> и <2> — это первые числа последовательности <1>, <2>, 6, 34, 270, <?>.
Найдите следующее число последовательности.
Решение:
Результатом запроса будут числа 2 и 2 (BETWEEN даст выборку 1,2,3,4. Join сработает на первые 4 записи, GROUP BY их сгруппирует, SELECT вычислится как , . Последовательность вычисляется как , где – число уже полученных элементов.
Т.е.:
Заключение
Спасибо всем, кто решал задачи, а особенно тем, кто смог дойти до конца! Было интересно читать ваши отзывы и комментарии. А те, кто внимательно читал условия и давал ответы в двоичной форме – вдвойне молодцы!
Фото взято из архива конференции DotNext.
ссылка на оригинал статьи https://habrahabr.ru/post/329998/
Добавить комментарий