2017-04-15
Вы решили стать програмистом, поздравляем! Это отличный выбор профессии, которая по мимо удовольствия, приносит хороший доход и определенную независимость как от работодателя, так и от места дислокации.
У каждого из нас было первое в своей жизни собеседование. Для того что бы его не провалить, начинающий разработчик должен обладать определенным багажом знаний и умений.
Очевидно, что все знать не возможно. Даже создатель языка C++ Бьярне Страуструп говорил, что сам не знает свой язык полностью.
Вы должны обладать определенными базовыми основами языка программирования и знать как их применить.
Поэтому предлагаем вам небольшую подборку-Вопросы на собеседовании junior java developer.
ООП (Объектно-ориентированное программирование)
- Что такое ООП?
- Что такое объект?
- Назовите основные принципы ООП.
- Что такое наследование?
- Что такое полиморфизм? Какие проявления полиморфизма в Java Вы знаете?
- Что такое инкапсуляция?
- Что такое aбстракция?
- В чем преимущества объектно-ориентированных языков программирования?
- Как использование объектно – ориентерованного подхода улучшает разработку программного обеспечения?
- Имеется выражение «является» и «имеет». Что они подразумевают в плане принципов ООП? В чем разница между композицией и агрегацией?
- Что вы подразумеваете под полиморфизмом, инкапсуляцией и динамическим связыванием?
Java core
- Чем отличается JRE, JVM и JDK?
- Опишите модификаторы доступа в Java.
- Что такое package level access.
- Чем абстрактный клас отличается от интерфейса? В каких случаях Вы бы использовали абстрактный класс, а в каких интерфейс?
- Может ли объект получить доступ к private-переменной класса? Если, да, то каким образом?
- Для чего в джаве статические блоки?
- Можно ли перегрузить static метод?
- Расскажите про внутренние классы. Когда вы их будете использовать?
- В чем разница между переменной экземпляра и статической переменной? Приведите пример.
- Приведите пример когда можно использовать статический метод?
- Расскажите про классы- загрузчики и про динамическую зарузку классов.
- Что такое статическая и что такое динамическая загрузка класса?
- Для чего нужен оператор “assert” в джава?
- Почему в некоторых интерфейсах вообще не определяют методов?
- Какая основная разница между String, StringBuffer, StringBuilder?
- Расскажите про потоки ввода-вывода Java.
- Что такое Heap и Stack память в Java?
- Какая разница между Stack и Heap памятью в Java?
- Расскажите про модель памяти в джава?
- Как работает сборщик мусора (garbage collector)?
- Расскажите про приведение типов. Что такое понижение и повышение типа? Когда вы получаете ClassCastException?
- Что такое статический класс, какие особенности его использования?
- Каким образом из вложенного класса получить доступ к полю внешнего класса.
- Какие существуют типы вложенных классов? Для чего они используются?
- Возможно ли при переопределении (override) метода изменить:
- Модификатор доступа
- Возвращаемый тип
- Тип аргумента или количество
- Имя аргументов
- Изменять порядок, количество или вовсе убрать секцию throws?
- Что такое autoboxing?
- Что такое Generics?
- Какова истинная цель использования обобщенных типов в Java?
- Каким образом передаются переменные в методы, по значению или по ссылке?
- Какие методы есть у класса Object?
- Правила переопределения метода Object.equals().
- Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
- Какая связь между hashCode и equals?
- Каким образом реализованы методы hashCode и equals в классе Object?
- Что будет, если переопределить equals не переопределяя hashCode? Какие могут возникнуть проблемы?
- Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode?
- Для чего нужен метод hashCode()?
- Правила переопределения метода Object.hashCode().
- Расскажите про клонирование объектов. В чем отличие между поверхностным и глубоким клонированием?
- Правила переопределения метода Object.clone().
- Где и как вы можете использовать закрытый конструктор?
- Что такое конструктор по умолчанию?
- Опишите метод Object.finalize().
- Чем отличаются слова final, finally и finalize?
- Опишите иерархию исключений.
- Какие виды исключений в Java вы знаете, чем они отличаются?
- Что такое checked и unchecked Exception?
- Как создать свой unchecked Exception?
- Какие есть Unchecke exeption?
- Что такое Error?
- Опишите работу блока try-catch-finally.
- Возможно ли использование блока try-finally (без catch)?
- Всегда ли исполняется блок finally?
- Какие есть оссобенности класса String? что делает метод intern().
- Можно ли наследовать строковый тип, почему?
- Почему строка является популярным ключом в HashMap в Java?
- Дайте определение понятию конкатенация строк.
- Как перевернуть строку?
- Как сравнить значение двух строк?
- Как обрезать пробелы в начале и конце строки?
- Дайте определение понятию “пул строк”.
- Можно ли синхронизировать доступ к строке?
- Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?
- Почему строка неизменная и финализированная в Java?
- Напишите метод удаления данного символа из строки.
- Что такое рефлексия?
- Что произойдет со сборщиком мусора (GC), если во время выполнения метода finalize() некоторого объекта произойдет исключение?
- Что такое интернационализация, локализация?
- Что такое Аннотации в Java?
- Какие функции выполняет Аннотации?
- Какие встроенные аннотации в Java вы знаете?
- Что делают аннотации @Retention, @Documented, @Target и @Inherited?
- Что делают аннотации @Override, @Deprecated, @SafeVarargs и @SuppressWarnings?
- Какой жизненный цикл аннотации можно указать с помощью @Retention?
- К каким элементам можно применять аннотацию, как это указать?
- Как создать свою Аннотацию?
- Атрибуты каких типов допустимы в аннотациях?
- Что такое JMX?
- Какие выгоды предлагает JMX?
- Что еще умеет JMX кроме дистанционного управления?
- Что такое MBean?
- Какие типы MBeans существуют?
- Что такое MBean Server?
- Какие механизмы обеспечивают безопасность в технологии Java?
- Назовите несколько видов проверок которые выполняет верификатор байт-кода Java?
- Что вы знаете о “диспетчере защиты” в Java?
- Что такое JAAS?
- Что такое Рефакторинг?
Java collections framework (JCF)- это набор связанных классов и интерфейсов, реализующих commonly reusable collection структур данных.
- Что такое Коллекция?
- Назовите основные интерфейсы коллекций и их имплементации.
- Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
- Чем отличается HashMap от Hashtable?
- Чем отличается ArrayList от Vector?
- Как сравниваются елементы коллекций?
- Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection,Iterable, Iterator, NavigableSet, NavigableMap.
- Почему Map – это не Collection, в то время как List и Set являются Collection?
- Дайте определение понятию “iterator”.
- Что вы знаете об интерфейсе Iterable?
- Как одной строчкой преобразовать HashSet в ArrayList?
- Как одной строчкой преобразовать ArrayList в HashSet?
- Как перебрать все ключи Map учитывая, что Map – это не Iterable?
- Как перебрать все значения Map учитывая, что Map – это не Iterable?
- Как перебрать все пары ключ-значение в Map учитывая, что Map – это не Iterable?
- В чем проявляется “сортированность” SortedMap, кроме того, что toString() выводит все по порядку?
- Как одним вызовом копировать элементы из любой Collection в массив?
- Реализуйте симметрическую разность двух коллекций используя методы Collection (addAll(), removeAll(), retainAll()).
- Сравните Enumeration и Iterator.
- Как между собой связаны Iterable и Iterator?
- Как между собой связаны Iterable, Iterator и “for-each ” введенный в Java 5?
- Сравните Iterator и ListIterator.
- Что произойдет, если я вызову Iterator.next() не “спросив” Iterator.hasNext()?
- Что произойдет, если я вызову Iterator.next() перед этим 10 раз вызвав Iterator.hasNext()? Я пропущу 9 элементов?
- Если у меня есть коллекция и порожденный итератор, изменится ли коллекция, если я вызову iterator.remove()?
- Если у меня есть коллекция и порожденный итератор, изменится ли итератор, если я вызову collection.remove(..)?
- Зачем добавили ArrayList, если уже был Vector?
- В реализации класса ArrayList есть следующие поля: Object[] elementData, int size. Объясните, зачем хранить отдельно size, если всегда можно взять elementData.length?
- LinkedList – это односвязный, двусвязный или четырехсвязный список?
- Какое худшее время работы метода contain() для элемента, который есть в LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
- Какое худшее время работы метода contain() для элемента, который есть в ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
- Какое худшее время работы метода add() для LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
- Какое худшее время работы метода add() для ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
- Сколько выделяется элементов в памяти при вызове ArrayList.add()?
- Сколько выделяется элементов в памяти при вызове LinkedList.add()?
- Оцените количество памяти на хранение одного примитива типа byte в LinkedList?
- Оцените количество памяти на хранение одного примитива типа byte в ArrayList?
- Я добавляю элемент в середину List-а: list.add(list.size()/2, newElem). Для кого эта операция медленнее – для ArrayList или для LinkedList?
- Как перебрать элементы LinkedList в обратном порядке, не используя медленный get(index)?
- Как одним вызовом из List получить List со всеми элементами, кроме первых и последних 3-х?
- Могут ли у разных объектов в памяти (ref0 != ref1) быть ref0.hashCode() == ref1.hashCode()?
- Могут ли у разных объектов в памяти (ref0 != ref1) быть ref0.equals(ref1) == true?
- Могут ли у разных ссылок на один объект в памяти (ref0 == ref1) быть ref0.equals(ref1) == false?
- Есть класс Point{int x, y;}. Почему хэш-код в виде 31 * x + y предпочтительнее чем x + y?
- Если у класса Point{int x, y;} “правильно ” реализовать метод equals (return ref0.x == ref1.x && ref0.y == ref1.y), но сделать хэш-код в виде int hashCode() {return x;}, то будут ли корректно такие точки помещаться и извлекаться из HashSet?
- equals() порождает отношение эквивалентности. Какими из свойств обладает такое отношение: коммутативность, симметричность, рефлексивность, дистрибутивность, ассоциативность, транзитивность?
- Можно ли так реализовать equals(Object that) {return this.hashCode() == that.hashCode()}?
- В equals требуется проверять, что аргумент (equals(Object that)) такого же типа как и сам объект. В чем разница между this.getClass() == that.getClass() и that instanceof MyClass?
- Можно ли реализовать метод equals класса MyClass вот так: class MyClass {public boolean equals(MyClass that) {return this == that;}}?
- Будет ли работать HashMap, если все ключи будут возвращать int hashCode() {return 42;}?
- Зачем добавили HashMap, если уже был Hashtable?
- Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресацией и на основе метода цепочек. Как реализована HashMap? Почему так сделали (по вашему мнению)? В чем минусы и плюсы каждого подхода?
- Сколько переходов по ссылкам происходит, когда вы делаете HashMap.get(key) по ключу, который есть в таблице?
- Сколько создается новых объектов, когда вы добавляете новый элемент в HashMap?
- Как работает HashMap при попытке сохранить в нее два элемента по ключам с одинаковым hashCode, но для которых equals == false?
- HashMap может выродиться в список даже для ключей с разным hashCode. Как это возможно?
- Какое худшее время работы метода get(key) для ключа, которого нет в таблице (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
- Какое худшее время работы метода get(key) для ключа, который есть в таблице (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
- Объясните смысл параметров в конструкторе HashMap(int initialCapacity, float loadFactor).
- В чем разница между HashMap и IdentityHashMap? Для чего нужна IdentityHashMap? Как может быть полезна для реализации сериализации или клонирования?
- В чем разница между HashMap и WeakHashMap? Для чего нужна WeakHashMap?
- В WeakHashMap используются WeakReferences. А почему бы не создать SoftHashMap на SoftReferences?
- В WeakHashMap используются WeakReferences. А почему бы не создать PhantomHashMap на PhantomReferences?
- Сделайте HashSet из HashMap (используйте только множество ключей, но не множество значений).
- Сделайте HashMap из HashSet (HashSet<Map.Entry<K, V>>).
- Сравните интерфейсы java.util.Queue и java.util.Deque.
- Кто кого расширяет: Queue расширяет Deque, или Deque расширяет Queue?
- Почему LinkedList реализует и List, и Deque?
- В чем разница между классами java.util.Arrays и java.lang.reflect.Array?
- В чем разница между классами java.util.Collection и java.util.Collections?
- Напишите НЕмногопоточную программу, которая заставляет коллекцию выбросить ConcurrentModificationException.
- Что такое “fail-fast поведение”?
- Для множеств еnum-ов есть специальный класс java.util.EnumSet? Зачем? Чем авторов не устраивал HashSet или TreeSet?
- java.util.Stack – считается “устаревшим”. Чем его рекомендуют заменять? Почему?
- Какая коллекция реализует дисциплину обслуживания FIFO?
- Какая коллекция реализует дисциплину обслуживания FILO?
- Приведите пример, когда какая-либо коллекция выбрасывает UnsupportedOperationException.
- Почему нельзя написать “ArrayList<List> numbers = new ArrayList<ArrayList>();” но можно “List<ArrayList> numbers = new ArrayList<ArrayList>();”?
- LinkedHashMap – что это еще за “зверь”? Что в нем от LinkedList, а что от HashMap?
- LinkedHashSet – что это еще за “зверь”? Что в нем от LinkedList, а что от HashSet?
- Говорят, на LinkedHashMap легко сделать простенький кэш c “invalidation policy”, знаете как?
- Что позволяет сделать PriorityQueue?
- В чем заключаются отличия java.util.Comparator от java.lang.Comparable?
Java 8
- Какие нововведения, появились в Java 8?
- Как сортировать список строк с помощью лямбда-выражения?
- Какова структура лямбда-выражения?
- К каким переменным есть доступ у Лямбда-выражений?
- Что такое ссылки на метод?
- Какие виды ссылок на методы вы знаете?
- Объясните выражение System.out::println.
- Что такое функциональные интерфейсы?
- Для чего нужен функциональный интерфейс BiConsumer<T,U>?
- Для чего нужен функциональный интерфейс BiFunction<T,U,R>?
- Для чего нужен функциональный интерфейс BinaryOperator<T>?
- Для чего нужен функциональный интерфейс BiPredicate<T,U>?
- Для чего нужен функциональный интерфейс BooleanSupplier?
- Для чего нужен функциональный интерфейс Consumer<T>?
- Для чего нужен функциональный интерфейс DoubleBinaryOperator?
- Для чего нужен функциональный интерфейс DoubleConsumer?
- Для чего нужен функциональный интерфейс DoubleFunction<R>?
- Для чего нужен функциональный интерфейс DoublePredicate?
- Для чего нужен функциональный интерфейс DoubleSupplier?
- Для чего нужен функциональный интерфейс DoubleToIntFunction?
- Для чего нужен функциональный интерфейс DoubleToLongFunction?
- Для чего нужен функциональный интерфейс DoubleUnaryOperator?
- Для чего нужен функциональный интерфейс Function<T,R>?
- Для чего нужен функциональный интерфейс IntBinaryOperator?
- Для чего нужен функциональный интерфейс IntConsumer?
- Для чего нужен функциональный интерфейс IntFunction<R>?
- Для чего нужен функциональный интерфейс IntPredicate?
- Для чего нужен функциональный интерфейс IntSupplier?
- Для чего нужен функциональный интерфейс IntToDoubleFunction?
- Для чего нужен функциональный интерфейс IntToLongFunction?
- Для чего нужен функциональный интерфейс IntUnaryOperator?
- Для чего нужен функциональный интерфейс LongBinaryOperator?
- Для чего нужен функциональный интерфейс LongConsumer?
- Для чего нужен функциональный интерфейс LongFunction<R>?
- Для чего нужен функциональный интерфейс LongPredicate?
- Для чего нужен функциональный интерфейс LongSupplier?
- Для чего нужен функциональный интерфейс LongToDoubleFunction?
- Для чего нужен функциональный интерфейс LongToIntFunction?
- Для чего нужен функциональный интерфейс LongUnaryOperator?
- Для чего нужен функциональный интерфейс ObjDoubleConsumer<T>?
- Для чего нужен функциональный интерфейс ObjIntConsumer<T>?
- Для чего нужен функциональный интерфейс ObjLongConsumer<T>?
- Для чего нужен функциональный интерфейс Predicate<T>?
- Для чего нужен функциональный интерфейс Supplier<T>?
- Для чего нужен функциональный интерфейс ToDoubleBiFunction<T,U>?
- Для чего нужен функциональный интерфейс ToDoubleFunction<T>?
- Для чего нужен функциональный интерфейс ToIntBiFunction<T,U>?
- Для чего нужен функциональный интерфейс ToIntFunction<T>?
- Для чего нужен функциональный интерфейс ToLongBiFunction<T,U>?
- Для чего нужен функциональный интерфейс ToLongFunction<T>?
- Для чего нужен функциональный интерфейс UnaryOperator<T>?
- Что такое StringJoiner?
- Что такое default методы?
- Что такое static методы?
- Как вызывать default-метод интерфейса в классе?
- Как вызывать static-метод интерфейса в классе?
- Что такое потоки(stream) в Java 8
- Для чего нужен метод collect Java 8?
- В чем разница между коллекцией(Collection) и потоком(Stream)?
- Для чего предназначен метод forEach в потоках(stream)?
- Как вывести на экран 10 случайных чисел, используя forEach?
- Для чего предназначен метод map в потоках(stream)?
- Как можно вывести на экран уникальные квадраты чисел используя метод map?
- Какова цель метода filter в потоках(stream)?
- Как вывести на экран количество пустых строк с помощью метода filter?
- Для чего предназначен метод limit в потоках(stream)?
- Для чего предназначен метод sorted в потоках(stream)?
- Как вывести на экран 10 случайных чисел в отсортированном порядке в Java 8?
- Параллельная обработка в Java 8?
- Как найти максимальное число в списке Java 8?
- Как найти минимальное число в списке Java 8?
- Как получить сумму всех чисел в списке, используя Java 8?
- Как получить среднее значение всех чисел, в списке, используя Java 8?
- Что такое Optional?
- Что такое Nashorn?
- Что такое jjs в Java 8?
- Что такое LocalDateTime в Java 8?
- Что такое ZonedDateTime в Java 8?
- Как получить текущую дату с использованием time API из Java 8?
- Как добавить 1 неделю к текущей дате с использованием time API?
- Как добавить 1 месяц к текущей дате с использованием time API?
- Как добавить 1 год к текущей дате с использованием time API?
- Как добавить 10 лет к текущей дате с использованием time API?
- Как получить следующий вторник используя time API?
- Как получить вторую субботу текущего месяца используя time API?
- Как получить текущею дату в миллисекундах используя time API?
- Як получить текущею дату по местному времени в миллисекундах используя используя time API?
- Какой класс появился в Java 8 для декодирования данных?
- Какой класс появился в Java 8 для кодирования данных?
- Как создать Base64 декодировщик?
- Как создать Base64 кодировщик?
Потоки ввода вывода в java
- Что такоє символьная ссылка?
- Какая разница между I/О и NIO?
- Какие особенности NIO вы знаете?
- Какие существуют виды потоков ввода/вывода?
- Назовите основные классы потоков ввода/вывода.
- Чем отличаются и что общего у OutputStream, InputStream, Writer, Reader?
- Какие подклассы базового класса InputStream ви знаєте, для чего они предназначены?
- Что вы знаете о RandomAccessFile?
- Какие есть режимы доступа к файлу есть у RandomAccessFile ?
- Какие подклассы базового класса OutputStream ви знаєте, для чего они предназначены?
- Для чего используется PushbackInputStream?
- Для чего используется SequenceInputStream?
- Какие подклассы базового класса Reader ви знаєте, для чего они предназначены?
- Какие подклассы базового класса Writer ви знаєте, для чего они предназначены?
- Что такое абсолютный путь и относительный путь?
- В каких пакетах лежат классы-потоки?
- Что вы знаете о классах-надстройках?
- Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
- Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
- Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
- В чем отличие класса PrintWriter от PrintStream?
- Какой класс предназначен для работы с элементами файловой системы?
- Какой символ является разделителем при указании пути в файловой системе?
- Какие методы класса File ви знаєте?
- Что вы знаете об интерфейсе FileFilter?
- Какие классы позволяют архивировать объекты?
Многопоточность в Java (multithreading)
- Чем отличается процесс от потока?
- Каким образом можно создать поток?
- Что такое монитор?
- Какие способы синхронизации в Java?
- Как работают методы wait и notify/notifyAll?
- Чем отличается работа метода wait с параметром и без параметра?
- Как работает метод Thread.yield()? Чем отличаются методы Thread.sleep() и Thread.yield()?
- Как работает метод Thread.join()?
- Что такое dead lock?
- На каком объекте происходит синхронизация при вызове static synchronized метода?
- Для чего используется ключевое слово volatile, synchronized, transient, native?
- Что значит приоритет потока?
- Что такое потоки –демоны в джава?
- Что значит усыпить поток?
- В каких состояниях может быть поток в джава? Как вообще работает поток?
- Чем отличаются два интерфейса для реализации задач Runnable и Callable?
- Различия между CyclicBarrier и CountDownLatch?
- Что такое состояние гонки (race condition)?
- Как остановить нить?
- Что происходит, когда в нити появляется исключение?
- Что такое ThreadLocal переменная?
- Что такое FutureTask?
- Различие между interrupted и isInterrupted?
- Почему методы wait и notify вызываются в синхронизированном блоке?
- Что такое пул нитей?
- Различия между livelock и deadlock?
- Как проверить, удерживает ли нить lock?
- Как получить дамп нити?
- Какой JVM параметр используется для контроля размера стека нити?
- Различия между synchronized и ReentrantLock?
- Что такое Semaphore?
- Что будет, если очередь пула нитей уже заполнена, а вы подадите задачу?
- Различия между методами submit() и execute() у пула нитей?
- Что такое блокирующий метод?
- Что такое ReadWriteLock?
- Что такое double checked locking Синглтона?
- Что такое фреймворк Fork/Join?