• 0.12

  • +0.88

  • ,

Тестовое задание в одну из крупных 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)

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

Тестовое задание на стажировку JavaRush: Полезные ссылки и хинты

Хочу поделиться с вами полезными ссылками, хинтами и советами, которые помогут при выполнении тестового задания на стажировку в реальный проект на JavaRush.

Конечно, можно просто бездумно накопировать решение тестового задания из интернета, благо примеров хватает, но мы-то хотим разобраться, что делаем :) Этот пост для тех, кто не обнаружил среди стека технологий, требующихся по заданию, знакомых слов и хочет это исправить)
  • ,

Тестовое задание: "Написать Интерпретатор на язык BrainFuck"

Привет всем!

Сегодня хочу поделится другой задачей, которая была у меня на собеседовании. Задача, которая проверит как Вы можете мыслить, как пишете код. Задача в общем полезная для развития.
  • ,

Тестовое задания для Trainee

Вобщем-то простенькое тестовое задание на позицию Trainee Functional Developer, так сказать, для затравки. Я проходил собеседование 2 года назад, поэтому не думаю, что сделаю что-то страшное выложив задание.

Технические вопросы на собеседовании.

Привет всем, Джаварашовцы!

Так уж случилось, что недавно я проходил собеседование и хотел бы рассказать, какие вопросы мне задавали предполагая, что идет позиция Junior++. Т.е. еще не мидл, но уже и не зеленый джун.

Так вот, собеседование проходило по такому плану
  1. JavaCore
  2. ООП
  3. REST
  4. Базы данных.
  5. Инструменты, которыми пользуешься.

JavaCore

  • Вначале меня попросили нарисовать иерархию интерфейсов у Коллекций.(Это было не сложно, там всего их несколько(Collection,List,Set,Queue,Map). )
  • В чем различие ArrayList и LinkedList(это один из замых заезженных вопросов и ответов в инетах просто тьма). Обсудили скорость выполнения запросов в них и какая разница между листами.
  • Вопрос про класс Object. какие у него методы, что они делают.
  • Рефлексия. что делает метод getClass(). Очень интересный вопрос, разберите его. Особенно про то, как получить всё про класс, пусть даже там приватные методы или переменные.
  • Спросили за многопоточность. Слабенько, как я считаю, так рассказать как ты понимаешь что такое многопоточность. Что нужно, чтоб запустить новый поток. Реально, если вы 20+ уровень, то эти вопросы для вас покажутся смешными.
  • Что можешь сказать про Stream. Это имеется в виду не про Java 8. Имеется в виду потоки ввода и вывода. Как базовые интерфейсы, какие они (символьные и байтовые). На понимание, никакой конкретики.
  • Исключения. Здесь опять-таки попросили нарисовать иерархию исключений, какие бывают, какие из них checked, а какие unchecked. Что нужно делать с Runtime исключениями. Назовите самое часто попадающее(NullPointerException)
  • Вопрос с тем, что нужно делать с checked исключениями(пробрасывать дальше или обработать — понятно и то и другое.)

ООП

  • Что такое ООП в двух словах?
  • Какие еще есть парадигмы программирования? В чем их различие от ООП
  • Какие основные принципы ООП?(наследование, полиморфизм и инкапсуляция) Рассказать про каждый из них. Пока всё абстракатно, не привязываясь к какому-то языку.
  • Задача на понимание проектирования систем: есть Лошадь и Птица. Нужно получить Пегаса. принцип «has a» и «is a»

REST

  • Что такое REST. В википедии об этом говориться очень круто. Реально статьи из википедии для ознакомления хватит
  • HTTP. Здесь тоже общие фразы. Его методы, для чего каждый из них.
  • Коды состояния HTTP. на какие пять частей делиться, расскажите про самые известные (200,204,404,500,501). Зачем они. Спросили еще про 401 и 403. Но я не знал их. Сказали они важные.

Базы данных

Здесь я рассказал, что знаю MySQL. Рассказал про три нормальные формы. Рассказал про Join'ы, какие бывают и нарисовал пересечение областей, в котором используются разные джоины. Рассказал про то, как я понимаю реляционную БД. Не забыл еще о про MongoDB — это NoSQL база данных. Через некоторе время я напишу и про это.

Другие Инструменты
Здесь мы прошлись по моем резюме. У меня было написано, что использую Maven/Gradle для сборки, использую JIRA для тасков, git, Docker, Swagger. Для Continuous Integration — Stash, Bamboo, Puppet. Для тестирования JUnit, Mockito, JMeter.


Я мог что-то забыть, поэтому если интересно — спрашивайте в комментариях постараюсь ответить.

Это была первая часть собеседования. Теперь жду результаты и если да, то будет вторая часть. Напишу о ней как только так сразу.
Всем кому статья понравилась и была полезна — ставьте "+". Пишите в комментариях.

См. также мои другие статьи:
Тестовое задание: «Написать Интерпретатор на язык BrainFuck»
Тестовое задание «Image Comparison»
Java — быстрее, сильнее и выше! Зарплаты украинских программистов.
История успеха спустя 1.5 года от начала обучения
Технические вопросы на собеседовании.
Как найти работу? Рассылка резюме
Профессиональное выгорание. Как устоять?
Английский для IT и для собеседования
Паттерн Command своими словами.
Паттерн Singleton своими словами.
Как создать исполняемый jar в Intellij IDEA / how to create jar in IDEA
Помогите, нужна мотивация!

Подписывайтесь на мой блог Паттерны Проектирования пишите в нем статьи!
  • ,

Уровень 24. Ответы на вопросы к собеседованию по теме уровня.

1. Во что компилируются анонимные внутренние классы?
Анонимные внутренние классы компилируются в файлы внешнийКласс$n.class. На месте внешнего класса, соответственно, название обрамляющего класса, внутри которого описывается анонимный внутренний класс. На месте n число от 1 до количества анонимных классов.

2. Можно ли наследовать внутренние классы?
Наследовать внутренние классы от других — можно.
Наследование от внутреннего класса получается чуть сложнее, чем обычное, так как конструктор внутреннего класса связывается со ссылкой на окружающий внешний объект. Проблема состоит в том, что «скрытая» ссылка на объект объемлющего внешнего класса должна быть инициализирована, а в производном классе больше не существует объемлющего объекта по умолчанию. Для явного указания объемлющего внешнего объекта применяется специальный синтаксис:

//: innerclasses/InheritInner.java
// Наследование от внутреннего класса.
 
class WithInner {
  class Inner {}
}
 
public class InheritInner extends WithInner.Inner {
  //! InheritInner() {} // He компилируется 
  InheritInner(WithInner wi) {
    wi.super();
  }
  public static void main(String[] args) {
    WithInner wi = new WithInner();
    InheritInner ii = new InheritInner(wi);
  }
}

Здесь класс InheritInner расширяет только внутренний класс, а не внешний. Но когда дело доходит до создания конструктора, предлагаемый по умолчанию конструктор не подходит, и вы не можете просто передать ссылку на внешний объект. Необходимо включить в тело конструктора выражение
ссылкаНаОбъемлющийКласс.super();

в теле конструктора. Оно обеспечит недостающую ссылку, и программа откомпилируется.

3. Можно ли наследовать анонимные внутренние классы?
Описывая анонимный класс мы уже наследуемся от какого-то класса или реализуем какой-либо интерфейс. К анонимным классам напрямую нельзя применить слова extends или implements, но ведь никто не мешает заранее подготовиться и расширить нужный интерфейс, который будем реализовывать с помощью анонимного класса. Пример в коде ниже.
import java.awt.event.WindowListener;

public class TestExtendAnonym {
    private interface MyInterface extends Runnable, WindowListener {
    }

    Runnable r = new MyInterface() {
    ...
    //Пример того как реализовать 2 и более интерфейса в анонимном классе
    };
}

Наследоваться от анонимного класса нельзя.

4. Можно ли переопределять внутренние классы?
Переопределение внутреннего класса, как если бы он был еще одним методом внешнего класса, фактически не имеет никакого эффекта:
//: innerclasses/BigEgg.java
// Внутренний класс нельзя переопределить 
// подобно обычному методу,
import static net.mindview.util.Print.*;
 
class Egg {
  private Yolk y;
  protected class Yolk {
    public Yolk() { print("Egg.Yolk()"); }
  }
  public Egg() {
    print("New Egg()");
    y = new Yolk();
  }
}	
 
public class BigEgg extends Egg {
  public class Yolk {
    public Yolk() { print("BigEgg.Yolk()"); }
  }
  public static void main(String[] args) {
    new BigEgg();
  }
}

Вывод:
New Egg()
Egg.Yolk()

Конструктор по умолчанию автоматически синтезируется компилятором, а в нем вызывается конструктор по умолчанию из базового класса. Можно подумать, что при создании объекта BigEgg должен использоваться «переопределенный» класс Yolk, но это отнюдь не так, как видно из результата работы программы.

Этот пример просто показывает, что при наследовании от внешнего класса ничего особенного с внутренними классами не происходит. Два внутренних класса — совершенно отдельные составляющие, с независимыми пространствами имен.
Иными словами нельзя.

5. Какие ограничения есть у локальных классов?
Вначале вспомним что такое локальный класс. Это класс, описанный в блоке кода, то есть, по-простому — между кавычек {}. Наиболее часто эти кавычки являются телом метода. Но могут они быть и просто блоком, статическим блоком, телом if-ов, циклов и т.д.
Локальный класс наделён особенностями внутренних классов, но имеет отличительные черты, а именно:
  1. он имеет доступ только к финальным полям и аргументам обрамляющего метода, а также ко всем полям обрамляющего класса, в том числе приватным и статическим;
  2. локальный класс виден и может создаваться только в блоке, в котором описан;
  3. у локального класса не ставиться модификатор доступа;
  4. не может иметь статических полей, методов, классов (за исключением финальных);
  5. локальный класс, объявленный в статическом блоке может обращаться только к статическим полям внешнего класса.

Но! Начиная с Java8 мы можем обращаться в локальных классах к не финальным локальным переменным, если они не были изменены до момента инициализации класса. Также теперь стало возможным обращение к не финальным параметрам метода.

6. Может ли анонимный внутренний класс содержать статические методы?
Нет. У Анонимных внутренних классов, как и у внутренних классов не может быть статических полей, методов. (вспомним, что анонимные классы компилируются в обычные внутренние, а те, в свою очередь, связаны с объектом обрамляющего класса)

7. Можно ли создать объект внутреннего класса, если у внешнего класса только private конструктор?
Имея подобный код:
public class PrivateConst {
    private PrivateConst() {}
    public class InnerClass{
        public void f(){
            System.out.println("hello");
        }
   }
}

Напрямую, в другом классе (вне обрамляющего), конечно, создать объект InnerClass следующим способом не получится:
PrivateConst.InnerClass priv = new PrivateConst().new InnerClass();

Но! Что если у нас есть метод, возвращающий экземпляр
PrivateConst:public class PrivateConst {
    private static PrivateConst instance;
    private PrivateConst() {}

    public static PrivateConst getInstance(){
        instance = new PrivateConst();
        return instance;
    }

    public class InnerClass{}
}

В этом случае приватный конструктор нам не помеха для создания объекта InnerClass. Так же мы без проблем сможем создавать его в методах и в других внутренних классах, принадлежащих PrivateConst. Ответ — можно, если каким-либо способом нам удастся получить объект обрамляющего класса.

8. Можно ли объявлять внутренние классы private?
Да, можно.

PS Обоснования так и не нашел, но на философии java встречались подобные примеры.
Плюс IDE не ругается.
Буду признателен за обоснование, но предположу, что в этом плане внутренний класс ничем не отличается от обычного класса.

9. Можно ли объявлять анонимные внутренние классы private?
Аналогично (в плане не нашел обоснования). Можно объявить private переменную от типа которой наследуется наш анонимный класс.

10. Сколько у класса максимально может быть внутренних классов?
Сколь угодно много. Ограничение особенности ОС и длинны имени файлов.
  • ,

Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юникод (UTF 8, 16, 32) — как исправить проблему с кракозябрами

Здравствуйте, уважаемые читатели блога KtoNaNovenkogo.ru. Сегодня мы поговорим с вами про то, откуда берутся кракозябры на сайте и в программах, какие кодировки текста существуют и какие из них следует использовать. Подробно рассмотрим историю их развития, начиная от базовой ASCII, а также ее расширенных версий CP866, KOI8-R, Windows 1251 и заканчивая современными кодировками консорциума Юникод UTF 16 и 8.

Оглавление:
  • ASCII — базовая кодировка текста для латиницы
  • Расширенные версии Аски — кодировки CP866 и KOI8-R
  • Windows 1251 — вариация ASCII и почему вылезают кракозябры
  • Юникод (Unicode) — универсальные кодировки UTF 8, 16 и 32
  • Кракозябры вместо русских букв — как исправить

Кому-то эти сведения могут показаться излишними, но знали бы вы, сколько мне приходит вопросов именно касаемо вылезших кракозябров (не читаемого набора символов). Теперь у меня будет возможность отсылать всех к тексту этой статьи и самостоятельно отыскивать свои косяки. Ну что же, приготовьтесь впитывать информацию и постарайтесь следить за ходом повествования.

ASCII — базовая кодировка текста для латиницы


Развитие кодировок текстов происходило одновременно с формированием отрасли IT, и они за это время успели претерпеть достаточно много изменений. Исторически все начиналось с довольно-таки не благозвучной в русском произношении EBCDIC, которая позволяла кодировать буквы латинского алфавита, арабские цифры и знаки пунктуации с управляющими символами.

Но все же отправной точкой для развития современных кодировок текстов стоит считать знаменитую ASCII (American Standard Code for Information Interchange, которая по-русски обычно произносится как «аски»). Она описывает первые 128 символов из наиболее часто используемых англоязычными пользователями — латинские буквы, арабские цифры и знаки препинания.

Еще в эти 128 знаков, описанных в ASCII, попадали некоторые служебные символы навроде скобок, решеток, звездочек и т.п. Собственно, вы сами можете увидеть их:



Именно эти 128 символов из первоначального вариант ASCII стали стандартом, и в любой другой кодировке вы их обязательно встретите и стоять они будут именно в таком порядке.
  • ,

Сериализация как она есть. Часть 1

На первый взгляд, сериализация кажется тривиальным процессом. Действительно, что может быть проще? Объявил класс реализующим интерфейс java.io.Serializable – и все дела. Можно сериализовать класс без проблем.

Теоретически это действительно так. Практически же – есть очень много тонкостей. Они связаны с производительностью, с десериализацией, с безопасностью класса. И еще с очень многими аспектами. О таких тонкостях и пойдет разговор.

Статью эту можно разделить на следующие части:

  • Тонкости механизмов
  • Зачем нужен Externalizable
  • Производительность
  • Обратная сторона медали
  • Безопасность данных
  • Сериализация объектов Singleton

Приступим к первой части –

Тонкости механизмов


Прежде всего, вопрос на засыпку. А сколько существует способов сделать объект сериализуемым? Практика показывает, что более 90% разработчиков отвечают на этот вопрос приблизительно одинаково (с точностью до формулировки) – такой способ один. Между тем, их два. Про второй вспоминают далеко не все, не говоря уж о том, чтобы сказать что-то внятное о его особенностях.

Итак, каковы же эти способы? Про первый помнят все. Это уже упомянутая реализация java.io.Serializable, не требующая никаких усилий. Второй способ – это тоже реализация интерфейса, но уже другого: java.io.Externalizable. В отличие от java.io.Serializable, он содержит два метода, которые необходимо реализовать – writeExternal(ObjectOutput) и readExternal(ObjectInput). В этих методах как раз и находится логика сериализации/десериализации.

Замечание. В дальнейшем сериализацию с реализацией Serializable я буду иногда называть стандартной, а реализацию Externalizable – расширенной.
  • ,

Пособие для будущего Java разработчика. Enterprise — часть 1

«Не слишком гордитесь этими техническими достижениями, которые вы построили. Способность уничтожить планету — ничто по сравнению с могуществом Силы», — Дарт Вейдер о Звезде Смерти.

Intro
Наверное, следующие две части из цикла статей для многих самые ожидаемые, и неспроста. Что же находится там, за горизонтом, за чистой Java? Чем дышат Java девелоперы в каждом проекте? Считайте это настоящим полноценным руководством для самообучения любого back-end engineer’а средней руки, для которого основной язык программирования — именно Java.

Я намерен охватить максимально среднее значение по больнице и описать не только наиболее популярные фреймворки, но и решения, который считаются актуальными на данный момент. Естественно, инструментов очень много, и понять, какие есть самые важные и лучшее — это путь в никуда. Каждый из вас рассматривал раздел «Работа» на DOU и находил стек технологий, которые постоянно повторяются от вакансии к вакансии. Понимаю, описать все невозможно, но придумать общие рамки — вполне, поэтому попробуем следовать этому направлению.
  • ,

Топ 8 диаграмм для понимания Java

Иногда диаграмма заменяет 1000 слов.

Следующая диаграмма взята из руководства по Java с сайта Program Creek, она набрала больше всего голосов на этом сайте. Надеюсь поможет вам лучше понять то, что вы уже знаете.

Если диаграмма не понятна, можно перейти к оригинальной статье и ознакомится с подробностями.

1. Иммутабельность строк
Иммутабельность данных — не возможность менять данные после их создания в памяти.
Следующая диаграмма показывает, что происходит при выполнении данного кода:

String s = "abcd";
s = s.concat("ef");



10 самых сложных вопросов на собеседованиях по Java.

10 самых сложных вопросов на собеседованиях по Java.

Сложные вопросы по Java и ответы на них
    Что такое сложные вопросы по Java на собеседованиях? Почему люди изучают их прежде чем отправиться на собеседование? Ну, это вполне естественно, что люди готовятся к сложным вопросам даже если они не ожидают что им будут задавать сложные вопросы из Java. Если вы подготовитесь к сложным и хитрым вопросам, это добавит вам уверенности в себе и поможет ответить на любые другие вопросы. С другой стороны, если вы не подготовитесь к сложным вопросам — их появление во время интервью или письменного теста будет для вас неприятным сюрпризом. Но определение что считать сложным вопросом не является универсальным, один и тот же вопрос может быть сложным для одного программиста и простым для другого. Так что, лучше подготовьте ваш личный список сложных вопросов, прежде чем заявиться на собеседование по Java. В этой статье я поделюсь с вами моим собственным списком из десяти сложных вопросов, который может вам помочь.