Ух, как же давно ничего не писал в блог! Отчасти тому виной твиттер. Я обязательно напишу отдельную заметку об этом “убийце блогов”. А сейчас, хочу представить вам пару свеженьких Java задачек.
[Далее...]
Microsoft Interview и задачка о фруктах
Рубрика: Задачки, Работа | 16 November 2008, 00:24 | Vadim Voituk
На поза-прошлой неделе у меня происходил первый (телефонный) этап интервью в Microsoft Corporation.
Не смотря на то, что вакансия (которая кстати очень соответствовала моему профилю) была открыта не в саму M$, а в небольшую французкую компанию, не так давно приобретенную оным Microsoft, со мной связался именно рекрутер из американского подразделения M$.
О самой организации и подготовительном процессе особо рассказывать не буду, замечу лишь что:
- Имея не лучший опыт вечерних интервью – пытался договориться об утреннем времени проведения — мне отказали, без какой-либо аргументации. Просто “нет”, и баста.
- Резюме несколько раз “футболилось” от одного сотрудника Recruit dept. к другому, который в очередной раз просил ответить на одни и те же вопросы
- Для проведения телефонного интервью найсточиво предложили скачать и установить Skype (странно что не MSN), на ходу расхваливая какой это хороший и главное бесплатный сервис
В результате всего это создалось впечатление что тебя там и в грош не ставят, и я должен им ещё доплачивать за то, что они тратят на меня время.
Что довольно резко контрастировало с интервью, которые я проходил в Google и Yandex.
Там чувствуешь что компания в тебе заинтересована, и готова идти на, хоть и небольшие, но уступки.
Теперь о самом интервью.
Проводила его девушка-рекрутер, как она сама сказала “non technical employe”.
При этом после вступительных разговоров (“Как вы себя видите в M$”, “Почему это вы вдруг заинтересовались нашей вакансией”, “Что вы знаете об MS”, etc), вопросов по резюме (“С какими языками/технологиями работали?”, “Работали ли с MSSQL?”, “Какой процент рабочего времени вы пишете код?” etc) начала задавать технические вопросы по OOП и Java.
Из того, что удается сейчас вспомнить – это “Что такое полиморфизм?”, “А правда ли, что Java разработана для создания сетевых и распределенных приложений?”:) (/me поулыбался, вспомнилась первая моя книга о Web-разработке которая именно так и начиналась)
Потом были вопросы: “Если бы вам нужно разработать WEB-сервис синхронизации времени, как бы вы это сделали” и “Расскажите о ваших критериях хорошего кода” .
После всего этого простая задачка про фрукты:
Есть 3 ящика фруктов – с апельсинами, с яблоками и с яблоками и апельсинами вперемешку.
На каждом ящике есть надпись, указывающая на содержимое ящика, но известно, что все надписи неверные.
Вопрос: Какое минимальное количество фруктов нужно достать из ящиков, чтоб точно идентифицировать их содержимое?
Аргументируйте.
После обсуждения этой задачки меня поздравили с успешным прохождением первого этапа интервью и посоветовали регулярнее проверять почту на предмет следующего этапа.
Ссылки “в тему”:
О прохождении интервью в Google (начало, продолжение, the-end) и Яндекс (начало, завершение)
Вопросы по PHP на собеседование в Yahoo
Задачка о шляпах от Microsoft
Как собеседовали 2х бывших сотрудников Google – я плакал
Вот еще один простой вопрос, который встречается на собеседованиях:
public class Test {
public static void test() throws Exception {
try {
throw new Exception("A");
} finally {
throw new Exception("B");
}
}
public static void main(String[] args) {
try {
Test.test();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Что будет напечатано в результате выполнения?
Ещё одна задачка про Java internals
Рубрика: Java, Задачки | 1 December 2007, 22:36 | Vadim Voituk
Вот набрел в сети на ещё одну заковыристую задачу на знание спецификации Java
Код:
[java]
double dd = 10.0;
Double r = dd;
Double r1 = dd;
System.out.println("(r==r1) is "+(r==r1));
Double r2 = 10.0;
Double r3 = 10.0;
System.out.println("(r2==r3) is "+(r2==r3));
int ft = 21;
Integer i1 = ft;
Integer i2 = ft;
System.out.println( "(i1==i2) is " + (i1==i2) );
Integer i3 = new Integer(21);
Integer i4 = new Integer(21);
System.out.println("(i3 == i4) = "+(i3 == i4));
[/java]
Вопрос: что будет выведено на экран и почему?
Puzzles: Стрелки на часах
Рубрика: Задачки | 24 November 2007, 14:36 | Vadim Voituk
Не так давно заметил что со времен окончания университета когда я ещё ходил на университетский пары, мои логические способности решать примитивные логические задачки сильно пошатнулись. Ещё раз об это мне напомнило достаточно давнее интервью в компании Sonopia, а также не столь давнее в компании Google. Посему я решился таки воплотить в жизнь уже было заброшенную идею об аггрегации небольших несложных математических/логических/аглоритмических задачек “для развития мозгов”.
Первая задачка называется “Стрелки на часах”, задавалась лично мне на интервью в Sonopia, а также одному моему знакомому на интервью в Google.
Хоть задачка, приведенная ниже, и не моя, я просто не мог удержаться и не внести ее в блог, чтобы друзья тоже получили повод посушить голову.
Вопрос, как нужно проинициализировать i, чтобы цикл был бесконечным:
[java]
// initialize i so that loop is infinite while (i == i + 1);
[/java]
Ответ опубликую в понедельник, если никто раньше не догадается :)
…
Вот и наступила новая неделя – задачку, конечно, решили.
Для первой задачи ответ такой:
[java]
double i = Double.POSITIVE_INFINITY; while (i == i + 1);
[/java]
Если объяснять ответ просто: то получится что-то вроде следующего. Каков результат выражения “бесконечность + 1″, естественно, все та же “бесконечность”.
В действительности, даже бесконечности не надо: достаточно просто большого числа. К примеру 1e24. Достаточное условие того, что цикл бесконечен – Math.ulp(i) > 1
Если объяснять подробно, то можно отправить читателей на статью в Wiki.
Что касается второй задачки – я нашел два решения: с автобоксингом и без. Оба привожу ниже:
[java]
double a = Double.NaN; double b = Double.NaN;
[/java]
[java]
double a = new Integer(1); double b = new Integer(1);
[/java]
Задали мне на днях задачку на знание Java:
Какой результат у выражения:
[java]((int) (char) (byte) -1)[/java]
Ответ написан ниже белым цветом на белом фоне :) [Далее...]
Сегодняшний quicklet не будет отличаться особой сложностью: проверьте себя, насколько хорошо вы знакомы с механизмом работы switch
[java]public class Test {
public static void testSwitch(int arg) {
switch (arg) {
case 1:
System.out.print(“1 “);
default:
System.out.print(“default “);
case 2:
System.out.print(“2 “);
}
System.out.println();
}
public static void main(String[] args) {
testSwitch(1);
testSwitch(2);
testSwitch(3);
}
}[/java]
[Далее...]
Вот еще один пример для разминки, наслаждайтесь. Как всегда, просьба сначала отвечать, а уж затем вызывать javac.
[java]
public class Test {
private static void checkMe(String a, String b) {
if (a == b)
System.out.print("The same ");
else
System.out.print("Not the same ");
if (a.equals(b))
System.out.println(" and equals ");
else
System.out.println(" and not equals ");
}
public static void main(String[] args) {
String a;
String b;
a = new String ("Are they the same?");
b = new String ("Are they the same?");
checkMe(a, b);
a = "Not a chance?";
b = "Not a chance?";
checkMe(a, b);
a = new String(b);
b = new String(a);
checkMe(a, b);
}
}
[/java]
Что будет напечатано после выполнения фрагмента?
[Далее...]
Небольшой QuickLet для разминки мозгов. Что будет напечатано в результате выполнения фрагмента?
От меня лично просьба: сначала напишите ответ в комментах, а потом проверяйте компилятором :-)
[java]
package ua.net.lab.test;
public class Main {
class Foo {
public String myName;
public Foo(String name) {
myName = name;
}
}
public Foo test() {
Foo result = new Foo("Starting");
try {
System.out.println("Try Block");
result = new Foo("TRY");
return result;
} finally {
System.out.println("In finally block");
result = new Foo("FINALLY");
}
}
public static void main(String[] args) {
System.out.println((new Main().test()).myName);
}
}
[/java]
1. Будет ошибка на этапе компиляции: для блока try не описан ни один catch.
2.
Try Block
TRY
3.
Try Block
In finally block
FINALLY
4.
Try Block
In finally block
TRY
