• ,

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

Всем привет! Как и обещала в комментарии к прошлой статье, выкладываю тестовое задание по 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));</li>
    * response.setParameter("product", new Product("Shirt", t));</li>
    * request.setAttribute("product", new Product("Shirt", t));</li>
    * request.setParameter("product", new Product("Shirt", t));</li>
    
  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)

Предлагаю обсудить какие варианты ответов правильные.

40 комментариев

Alena
  • Alena
  • 0
  • Комментарий отредактирован 2017-05-30 13:28:52 пользователем Alena
Те, которые я предполагаю, что правильные ответы:
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);
belstrel
www.javaportal.ru/java/articles/equalsobjects.html
пишут если equals() не переопределен возвращает false
(я так понял))
Alena
Дело в том, что у Integer метод equals переопределен и сравнивает не объекты, а значения

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

Поэтому true.
belstrel
только что прочел внимательно)
belstrel
www.quizful.net/interview/java/equals-equality-difference
а тут true))
получается у Integer он уже переопределен.
Alena
Я говорю, что когда начала делать тесты, то волосы дыбом встали от моих незнаний )))) Столько нюансов…
Aleksey73
Вопрос 8.
Ответ 2.
Примитивные типы не изменяются при такой передаче в метод.
belstrel
Вопрос №2 какие методы http не являются идемпотентными
ответ POST
belstrel
Вопрос №3 They should override at least one doXXX() method (such as doPost()).
www.durgasoft.com/scwcd_material_2.asp?chapter=1&page=8
Ну это ты наверное и сама нагуглила))
realcorwin
  • realcorwin
  • 0
  • Комментарий отредактирован 2017-05-31 00:22:44 пользователем realcorwin
Вопросы про сервлеты даже не читал. По остальному:

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)

Правильность не гарантирую, но пояснить могу :).
Alena
А можно пояснить три последних варианта?
sinusX
  • sinusX
  • +1
  • Комментарий отредактирован 2017-05-31 17:37:11 пользователем sinusX
11. метод contains() проходит по массиву в поисках нужного элемента, т.е. это обычный линейный поиск, следовательно и сложность — линейная, т.е. O(n). Вроде так)
12. может быть потому, что для вычисления суммы достаточно пройти по половине элементов массива.
Enigma
  • Enigma
  • +1
  • Комментарий отредактирован 2017-05-31 21:09:57 пользователем Enigma
10. Вариант номер 2. Вот
12. Если у нас например ArrayList или примитивный массив, то мы уже знаем где находятся все элементы, поэтому O(n/2) — то есть половина элементов.
Был бы у нас LinkedList, то было бы O(n), так как нужно пройтись по всем элементам поочерёдно.
Так как в задании нужен самый оптимальный алгоритм, то ответ — O(n/2).
tanzwud
  • tanzwud
  • +1
  • Комментарий отредактирован 2017-05-31 22:53:46 пользователем tanzwud
Почему ответ N/2 в 12 вопросе. Насколько я понимаю вас спрашивают про Биг Тета. А там насколько я помню нет такого варинта.

Таблица в википедии той же
Насколько я понимаю вне зависимости от константы, time complexity будет всегда возрастать линейно. Т.е. чем больше элементов в масиве, тем больше их надо пройти.
Как результать Q(n).
Понятно что можно прыгать через один элемент и вроде даже как-бы ускорить работу, но если представить что массив неприлично большой и к примеру чтобы его пройти надо 1000лет, поможет ли решение которое сделает это за 500 лет? а за 3 если это будет log1000? Это мое видение algorithm time complexity не более
Enigma
Оно будет линейно возрастать, но учитывая что «n» это размер массива, то время на прохождение всех нужных элементов будет «n/2».
tanzwud
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.
Alena
Спасибо! Хоть немного ввели в курс дела. А то я вообще не поняла этого задания. Да и сейчас еще плохо понимаю, но уже знаю как это искать в гугле.
vsineln
Тут про О нотацию и вот еще habrahabr.ru/post/188010/. Это нужно обязательно, меня спрашивали на собеседовании.
Alena
А почему в 10 второй вариант? Я тоже его выбрала, но вроде как это неправильно. Ведь там создается и инициализируется сразу объект immutable, а можно только существующую ссылку на лист сделать immutable.
Enigma
Объект immutable, но переменная которая хранит ссылку на объект — нет.
А если сделать ссылку final, то получится массив фиксированного размера. Но добавлять можно будет всё равно.
Прочитайте ссылку которую я скинул. Там всё хорошо объясняется.
realcorwin
10. List всегда будет мутирующий. Все пляски из примера — вокруг ссылки на лист. С ней, да, можно поизвращаться. Вроде как в Java 9 появятся немутирующие листы.

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

12. Аналогично: сколько элементов массива нужно пробежать, чтобы сложить все чётные.
Alena
  • Alena
  • 0
  • Комментарий отредактирован 2017-06-01 11:58:02 пользователем Alena
Спасибо за ответ на 11 и 12 вопрос. А вот с 10 не совсем понятно, т.к. на stackoverflow был ответ что list можно сделать immutable в виде:
beanList = Collections.unmodifiableList(beanList);

вот здесь
Или я что-то неправильно понимаю?
Alena
  • Alena
  • 0
  • Комментарий отредактирован 2017-06-01 12:09:22 пользователем Alena
Всё, поняла! В ответах представлены варианты именно с объектом, а immutable можем сделать только инициализированную ссылку листа, так? А вновь создать лист и сразу сделать его immutable не можем, правильно?
Alena
То есть лучший способ сделать лист immutable это сделать копию листа и объявить эту ссылку final, так?
realcorwin
Вот тут ничего сказать не могу. Не настолько хорошо пока знаю предмет :).
driver
  • driver
  • +2
  • Комментарий отредактирован 2017-06-01 13:43:03 пользователем driver
Не путайте Алену!

<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 (компилятор ругнется)
Alena
Спасибо!
Yuri_0504
  • Yuri_0504
  • 0
  • Комментарий отредактирован 2017-06-03 00:31:12 пользователем Yuri_0504
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)
realcorwin
12. Есть разница между О и тетой, которая строго граничная. Неясно, что там в оригинале теста. Вопрос как бы намекает на ответ, когда требует оптимального алгоритма. Понятно, что можно пробежать и по каждому элементу массива, складывая только чётные, но хотят чтобы мы пробежали через i+=2.
Yuri_0504
Я не знаю, что было в изначальном вопросе, но в случае с Big O ответ будет O(n) и здесь не важно перебираются все элементы или только каждый второй. Big Theta Θ более сложная и я не думаю, что ее будут спрашивать на собеседованиях на позицию Junior
realcorwin
Тогда был бы бессмысленнен кусок задания про «most optimal implementation of this algorithm». Так что я продолжу думать, что ответ n/2 правильный :).
Yuri_0504
Он не бессмысленный, а как и все задания в этом тесте проверяет насколько глубоко человек разбирается в вопросе. Если бы была Big Θ, то вопрос был бы скорее:
> What will be the worst and best time complexity (Big Θ notation) of the most optimal implementation of this algorithm?
realcorwin
Ну, может быть :).
bridennis
Я конечно старый ворчун-буквоед, но все-таки: Exeption нужно писать как Exсeption
Alena
Спасибо, исправила.
lichMax
Не везде. А ты просто скопировала это с браузера? у них тоже были такие ошибки?
Alena
нет, у них не было таких ошибок. Я сюда писала вручную.
qwerfghi
ExpertSoft, я так полагаю?
EleNikIvi
  • EleNikIvi
  • 0
  • Комментарий отредактирован 2017-06-05 16:45:05 пользователем EleNikIvi
4 вопрос — «HttpServlet.doPost()».Ссылка на ответ
5 вопрос — (если не ошибаюсь) «request.setAttribute(»product", new Product(«Shirt», t));"
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.