Alena
35 уровень
Минск

Тестовое задание в одну из крупных IT компаний Беларуси

Пост из группы Архив info.javarush.ru
3710 участников
Всем привет! Как и обещала в комментарии к прошлой статье, выкладываю тестовое задание по J2SE и JavaEE которое мне прислали для зачисления на стажировку. Для его выполнения дается 30 минут. Правда, сохранить успела 12 из 14 вопросов. - означает, что может быть несколько вариантов ответа * означает, что может быть только один вариант ответа
  1. Вопрос
  2. Integer a = new Integer(2); Integer b = new Integer(2); What code will provide output: "false"? Check all that apply. Варианты ответов: - System.out.println(a.intValue() == b.intValue()); - System.out.println(a.compareTo(b)); - System.out.println(a.equals(b)); - System.out.println(a == b);
  3. Вопрос
  4. Which HTTP methods are NOT considered idempotent (multiple execution of query will give the same result)? (Choose all that apply) Варианты ответов: - GET - POST - HEAD - PUT
  5. Вопрос
  6. How should servlet developers handle the HttpServlet's service() method when extending HttpServlet? (Choose all that apply). Варианты ответов: - They should override the service() method in most cases. - They should call the service() method from doGet() or doPost(). - They should call the service() method from the init() method. - They should override at least one doXXX() method (such as doPost()).
  7. Вопрос
  8. Which methods are used by a servlet to handle form data from a client? (Choose all that apply) Варианты ответов: - HttpServlet.doHead() - HttpServlet.doPost() - HttpServlet.doForm() - ServletRequest.doGet() - ServletRequest.doPost() - ServletRequest.doForm()
  9. Вопрос
  10. Given the Product Bean: public class Product{ public Product(String title, int size){ this.title = title; this.size = size; } String title; int size; } How would servlet code from a service method (e.g. doPost()) pass a Product bean info to the jsp? Варианты ответов: * response.setAttribute("product", new Product("Shirt", t)); * response.setParameter("product", new Product("Shirt", t)); * request.setAttribute("product", new Product("Shirt", t)); * request.setParameter("product", new Product("Shirt", t));
  11. Вопрос
  12. You have to create your own type of exception, named UserOperationExсeption. And you need to make it a checked exсepetion. What is the appropriate signature in this case? Check all that apply. Варианты ответов: - public class UserOperationExсeption extends RuntimeExсeption{...} - public class UserOperationExсeption extends Exсeption{...} - public class UserOperationExсeption extends IOExсeption{...} - public class UserOperationExсeption extends extends Error{...}
  13. Вопрос
  14. Given following classes hierarchy: public class Building {...} public class Warehouse extends Building {...} public class Shop extends Building {...} public class SportsShop extends Shop {...} and code: ... Building b1 = new Building(); Building b2 = new Warehouse(); ... What code will cause a ClassCastException to be thrown? Check all that apply. Варианты ответов: - Warehouse w1 = b2; - Warehouse w2 = (Warehouse) b2; - Warehouse w3 = new SportsShop(); - Shop s1 = (Shop)b1; - Shop s2 = new SportsShop();
  15. Вопрос
  16. Given the method: public int shift(int value, int offset) { value += offset; return value; } What will be the output of following code: int v = 2; shift(v,5); System.out.println(v); Варианты ответов: * 2 * 5 * 7 * 3
  17. Вопрос
  18. Given: public class Product { public Product(String title, int size){ this.title = title; this.size = size; } String title; int size; public String toString() { return title + ":" + size; } } ... Set products = new HashSet(); products.add(new Product("Hat", 3)); products.add(new Product("Hat", 3)); System.out.println(products); What items will be in the programm output, considering that Product class inherits equals() and hashCode() methods from Object? Варианты ответов: * Hat * [Hat:3, Hat:3] * [Hat:3] * RuntimeException about duplicate elements
  19. Вопрос
  20. What code is valid for creating immutable list? Варианты ответов: * List immutableItems = Collections.unmodifiableList(new ArrayList()); immutableItems.add("i1"); immutableItems.add("i2"); * List items = new ArrayList(); items.add("i1); items.add("i2"); List immutableItems = Collections.unmodifiableList(items); * List items = new ArrayList(); items.add("i1); items.add("i2"); final List immutableItems = items; * List can't be immutable
  21. Вопрос
  22. What is complexity (Big 0 notation) of ArrayList contains() method? Варианты ответов: * 0(n^2) * 0(log(n)) * 0(n) * 0(1)
  23. Вопрос
  24. Given and array of size n, suppose you need to write a program that calculates the sum of every second element of this array. What will be the complexity (Big 0 notation) of most optimal implementation of this algorithm? Варианты ответов: * 0(n^2) * 0(n/2) * 0(n) * 0(1)
Предлагаю обсудить какие варианты ответов правильные.
Комментарии (41)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
EleNikIvi35 уровень, Полтава
5 июня 2017, 16:45
4 вопрос — «HttpServlet.doPost()».Ссылка на ответ
5 вопрос — (если не ошибаюсь) «request.setAttribute(»product", new Product(«Shirt», t));"
qwerfghi40 уровень, Минск
31 мая 2017, 23:16
ExpertSoft, я так полагаю?
PrepareYour26 уровень
1 марта, 16:13
я вообще если честно почти уверен в том, что их стажировка висит чисто для галочки, ибо как не решай merge тест, всегда приходит отказ из-за того, что тест решен «неправильно»:D
bridennis35 уровень, Санкт-Петербург
31 мая 2017, 04:40
Я конечно старый ворчун-буквоед, но все-таки: Exeption нужно писать как Exсeption
Alena35 уровень, Минск
31 мая 2017, 07:53
Спасибо, исправила.
lichMax40 уровень, Санкт-Петербург
2 июня 2017, 09:26
Не везде. А ты просто скопировала это с браузера? у них тоже были такие ошибки?
Alena35 уровень, Минск
2 июня 2017, 09:52
нет, у них не было таких ошибок. Я сюда писала вручную.
realcorwin14 уровень, Ravensburg
31 мая 2017, 00:22
Вопросы про сервлеты даже не читал. По остальному:

1. — System.out.println(a == b); (Забавно, что compare выведет 0)
6. — public class UserOperationExeption extends Exeption{...}
— public class UserOperationExeption extends IOExeption{...}
7. — Warehouse w1 = b2;
8. * 2
9. * [Hat:3, Hat:3]
10. * List can't be immutable
11. * 0(n)
12. * 0(n/2)

Правильность не гарантирую, но пояснить могу :).
Alena35 уровень, Минск
31 мая 2017, 08:04
А можно пояснить три последних варианта?
sinusX37 уровень
31 мая 2017, 17:37
11. метод contains() проходит по массиву в поисках нужного элемента, т.е. это обычный линейный поиск, следовательно и сложность — линейная, т.е. O(n). Вроде так)
12. может быть потому, что для вычисления суммы достаточно пройти по половине элементов массива.
Enigma40 уровень, Москва
31 мая 2017, 21:09
10. Вариант номер 2. Вот
12. Если у нас например ArrayList или примитивный массив, то мы уже знаем где находятся все элементы, поэтому O(n/2) — то есть половина элементов.
Был бы у нас LinkedList, то было бы O(n), так как нужно пройтись по всем элементам поочерёдно.
Так как в задании нужен самый оптимальный алгоритм, то ответ — O(n/2).
tanzwud34 уровень
31 мая 2017, 22:53
Почему ответ N/2 в 12 вопросе. Насколько я понимаю вас спрашивают про Биг Тета. А там насколько я помню нет такого варинта.

Таблица в википедии той же
Насколько я понимаю вне зависимости от константы, time complexity будет всегда возрастать линейно. Т.е. чем больше элементов в масиве, тем больше их надо пройти.
Как результать Q(n).
Понятно что можно прыгать через один элемент и вроде даже как-бы ускорить работу, но если представить что массив неприлично большой и к примеру чтобы его пройти надо 1000лет, поможет ли решение которое сделает это за 500 лет? а за 3 если это будет log1000? Это мое видение algorithm time complexity не более
Enigma40 уровень, Москва
31 мая 2017, 23:21
Оно будет линейно возрастать, но учитывая что «n» это размер массива, то время на прохождение всех нужных элементов будет «n/2».
tanzwud34 уровень
31 мая 2017, 23:48
What will be the complexity (Big 0 notation) of most optimal implementation of this algorithm?

Прочитал задание так и не понял где спрашивает какой код будет быстрее исполнятся.
Big 0 notation подразумевает под собой сложность алгоритма. Фактически Q(N) = Q(2 * n) = Q (n / 2 ) по причине того, что во всех случаях для испольнения алгоритма на массиве размера близкого к бесконечности будет всгеда расти линейно и как итог константы игнорируются о чем пишет почти любоей ресурс о биг тета.
Big 0 notation это теоритическая концепция, связаная с производительностью (Линейно, Квадратически и тп) и сложностью алгоритма, тогда как время выполнения — это время которое код будет выполнятся. В задании спрашивают про Big 0 notation.
realcorwin14 уровень, Ravensburg
1 июня 2017, 00:17
10. List всегда будет мутирующий. Все пляски из примера — вокруг ссылки на лист. С ней, да, можно поизвращаться. Вроде как в Java 9 появятся немутирующие листы.

11. В переводе на нормальный язык задание звучит так: сколько элементов массива размером N нужно пробежать в худшем случае, чтобы в массиве что-либо найти. Понятно, что все N и надо пробежать.

12. Аналогично: сколько элементов массива нужно пробежать, чтобы сложить все чётные.
Alena35 уровень, Минск
1 июня 2017, 11:50
Спасибо! Хоть немного ввели в курс дела. А то я вообще не поняла этого задания. Да и сейчас еще плохо понимаю, но уже знаю как это искать в гугле.
Alena35 уровень, Минск
1 июня 2017, 11:58
Спасибо за ответ на 11 и 12 вопрос. А вот с 10 не совсем понятно, т.к. на stackoverflow был ответ что list можно сделать immutable в виде:
beanList = Collections.unmodifiableList(beanList);

вот здесь
Или я что-то неправильно понимаю?
Alena35 уровень, Минск
1 июня 2017, 12:09
Всё, поняла! В ответах представлены варианты именно с объектом, а immutable можем сделать только инициализированную ссылку листа, так? А вновь создать лист и сразу сделать его immutable не можем, правильно?
realcorwin14 уровень, Ravensburg
1 июня 2017, 12:10
Alena35 уровень, Минск
1 июня 2017, 12:15
А почему в 10 второй вариант? Я тоже его выбрала, но вроде как это неправильно. Ведь там создается и инициализируется сразу объект immutable, а можно только существующую ссылку на лист сделать immutable.
Alena35 уровень, Минск
1 июня 2017, 12:20
То есть лучший способ сделать лист immutable это сделать копию листа и объявить эту ссылку final, так?
realcorwin14 уровень, Ravensburg
1 июня 2017, 12:29
Вот тут ничего сказать не могу. Не настолько хорошо пока знаю предмет :).
Enigma40 уровень, Москва
1 июня 2017, 12:34
Объект immutable, но переменная которая хранит ссылку на объект — нет.
А если сделать ссылку final, то получится массив фиксированного размера. Но добавлять можно будет всё равно.
Прочитайте ссылку которую я скинул. Там всё хорошо объясняется.
driver41 уровень
1 июня 2017, 13:43
Не путайте Алену!

<code>List immutableItems = Collections.unmodifiableList(new ArrayList());
immutableItems.add("i1");
immutableItems.add("i2");</code>
Тут получим java.lang.UnsupportedOperationException, т.к. unmodifiableList возвращает неизменяемую копию листа.

<code>List items = new ArrayList();
items.add("i1");
items.add("i2");
List immutableItems = Collections.unmodifiableList(items);</code>
Это верный ответ: сначала создаем и заполняем лист, потом создаем его неизменяемую копию, в которую уже невозможно ничего добавить.

<code>List items = new ArrayList();
items.add("i1");
items.add("i2");
final List immutableItems = items;</code>
Тут создаем обычный mutable ArrayList и просто присваиваем ссылку на него другой переменной, объявленной final, что никак не влияет на свойства самого листа, в него по-прежнему можно вносить изменения, используя обе ссылки.
final в данном случае говорит о том, что этой переменной нельзя переприсвоить значение, т.е. нельзя дальше в теле метода написать еще раз immutableItems = anything (компилятор ругнется)
Alena35 уровень, Минск
1 июня 2017, 14:25
Спасибо!
vsineln40 уровень, Нижний Новгород
1 июня 2017, 22:15
Тут про О нотацию и вот еще habrahabr.ru/post/188010/. Это нужно обязательно, меня спрашивали на собеседовании.
Yuri_050411 уровень
3 июня 2017, 00:31
7. — Warehouse w1 = b2;
Warehouse w1 = b2 и Warehouse w3 = new SportsShop()
дадут Compile error, так как компилятор в состоянии определить несоответствие типов.

Warehouse w1 = b2 можно спасти сделав явное приведение Warehouse w1 = (Warehouse) b2 и компилятор эту строку пропустит, а JVM выполнит без ошибок, так как в переменной типа родитель может находится любой предок, но чтобы компилятор это пропустил надо сделать явное приведение (explicit casting)

Warehouse w3 = new SportsShop() — в этом случае явное несоответствие типов.

Shop s1 = (Shop)b1 даст ClassCastException на этапе выполнения кода, так как компилятор пропустит этот код(приведение типа указано), но JVM при проверке найдет, что ссылка с типом родитель содержит другую ветвь потомков и выбросит исключение.

10. * List can't be immutable @driver уже все расписал, может. Правильный второй вариант ответа.

12. На самом деле непонятно как отвечать — надо глубже вникать в определение BigO notation так как по определению все константы должны отбрасываться, но в этом случае всегда будет перебираться только половина массива и это может быть исключением из правил.
Update: Я все же склоняюсь к варианту O(n)
realcorwin14 уровень, Ravensburg
3 июня 2017, 00:32
12. Есть разница между О и тетой, которая строго граничная. Неясно, что там в оригинале теста. Вопрос как бы намекает на ответ, когда требует оптимального алгоритма. Понятно, что можно пробежать и по каждому элементу массива, складывая только чётные, но хотят чтобы мы пробежали через i+=2.
Yuri_050411 уровень
3 июня 2017, 14:57
Я не знаю, что было в изначальном вопросе, но в случае с Big O ответ будет O(n) и здесь не важно перебираются все элементы или только каждый второй. Big Theta Θ более сложная и я не думаю, что ее будут спрашивать на собеседованиях на позицию Junior
realcorwin14 уровень, Ravensburg
3 июня 2017, 15:12
Тогда был бы бессмысленнен кусок задания про «most optimal implementation of this algorithm». Так что я продолжу думать, что ответ n/2 правильный :).
Yuri_050411 уровень
3 июня 2017, 16:03
Он не бессмысленный, а как и все задания в этом тесте проверяет насколько глубоко человек разбирается в вопросе. Если бы была Big Θ, то вопрос был бы скорее:
> What will be the worst and best time complexity (Big Θ notation) of the most optimal implementation of this algorithm?
realcorwin14 уровень, Ravensburg
3 июня 2017, 16:58
Ну, может быть :).
Alena35 уровень, Минск
30 мая 2017, 13:28
Те, которые я предполагаю, что правильные ответы:
1. — System.out.println(a==b);
6. — public class UserOperationExeption extends Exeption{...}
— public class UserOperationExeption extends IOExeption{...}
7. — Warehouse w1 = b2;
— Shop s1 = (Shop)b1;
8. * 7
9. * [Hat:3, Hat:3]
10. List items = new ArrayList();
items.add(«i1»);
items.add(«i2»);
List immutableItems = Collections.unmodifiableList(items);
belstrel31 уровень, Москва
30 мая 2017, 13:55
www.javaportal.ru/java/articles/equalsobjects.html
пишут если equals() не переопределен возвращает false
(я так понял))
Alena35 уровень, Минск
30 мая 2017, 14:01
Дело в том, что у Integer метод equals переопределен и сравнивает не объекты, а значения

public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}

Поэтому true.
belstrel31 уровень, Москва
30 мая 2017, 14:02
www.quizful.net/interview/java/equals-equality-difference
а тут true))
получается у Integer он уже переопределен.
belstrel31 уровень, Москва
30 мая 2017, 14:03
только что прочел внимательно)
Alena35 уровень, Минск
30 мая 2017, 14:04
Я говорю, что когда начала делать тесты, то волосы дыбом встали от моих незнаний )))) Столько нюансов…
Aleksey7322 уровень
30 мая 2017, 14:14
Вопрос 8.
Ответ 2.
Примитивные типы не изменяются при такой передаче в метод.
belstrel31 уровень, Москва
31 мая 2017, 21:29
Вопрос №2 какие методы http не являются идемпотентными
ответ POST
belstrel31 уровень, Москва
31 мая 2017, 21:47
Вопрос №3 They should override at least one doXXX() method (such as doPost()).
www.durgasoft.com/scwcd_material_2.asp?chapter=1&page=8
Ну это ты наверное и сама нагуглила))