До того, как прийти в ЕРАМ, я побывал примерно на 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);
}
}
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);
}
}
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);
}
}
id | model | price |
---|---|---|
1 | Nissan | 1000 |
2 | BMW | 2000 |
3 | Toyota | 1000 |
4 | Renault | 2000 |
5 | Peugeot | 1000 |
6 | Opel | 2000 |
;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
К сожалению, не доступен сервер mySQL