GithubHelp home page GithubHelp logo

enhorse / java-interview Goto Github PK

View Code? Open in Web Editor NEW
4.9K 202.0 1.9K 2.12 MB

Вопросы и ответы к интервью Java разработчика

Batchfile 50.00% Shell 50.00%
java interview interview-questions

java-interview's Issues

Каков порядок вызова конструкторов и блоков инициализации с учётом иерархии классов?

Необходимо поменять вопрос или ответ на него, либо добавить пояснение. Если спрашиваем про порядок вызова, то сначала вызывается конструктор самого младшего и далее выше по иерархии, но выполняются они в том порядке, какой написан в ответе. В дебагере порядок вызова виден.

public class A extends B {
    public A() {
        super("From A");
        System.out.println(", но выполняются от самого старшего к самому младшему");
    }
}
public class B extends C {
    public B(String param) {
        super("From B");
        System.out.print(" самого младшего к самому старшему");
    }
}
public class C {
    public C(String param) {
        System.out.print("На самом деле вызываются от");
    }
}

Screenshot 2021-04-19 at 20 57 21

Неточность по кастам

Например, к запрещенным преобразованиям относятся приведения от любого ссылочного типа к примитивному и наоборот (кроме преобразования к строке)

Можно ещё привести боксовую ссылку к примитивному типу.

Ошибка в вопросе "в чём разница между «конкуренцией» и «параллелизмом»?"

Добрый день! У вас тут ошибка: "если поток управления один, то конкурентного выполнения быть не может" https://en.wikipedia.org/wiki/Concurrency_(computer_science) и выдержка из этой статьи: "Concurrency is about structure, parallelism is about execution, concurrency provides a way to structure a solution to solve a problem that may (but not necessarily) be parallelizable.[3]." Из этого следует, что конкурентное выполнение может быть на одном процессоре. И вот еще на русском статья https://www.zhashkevych.com/concurrency-and-parallelism.

Incorrect information

https://github.com/enhorse/java-interview/blob/master/jcf.md#%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D1%82%D0%B5-iterator-%D0%B8-listiterator

При помощи ListIterator вы можете модифицировать список, добавляя/удаляя элементы с помощью методов add() и remove(). Iterator не поддерживает данного функционала.

на самом деле
https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#remove--

Jvm Architecture

Please provide access to create branches and PR for adding information about JVM Architecture topic.

Сравните Iterator и ListIterator

"При помощи ListIterator вы можете модифицировать список, добавляя/удаляя элементы с помощью методов add() и remove(). Iterator не поддерживает данного функционала."

Iterator же имеет remove()?

Ошибка в описании дефолтной реализации Object#hashCode

https://github.com/enhorse/java-interview/blob/master/core.md#%D0%BA%D0%B0%D0%BA%D0%B8%D0%BC-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%BC-%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D1%8B-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-hashcode-%D0%B8-equals-%D0%B2-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B5-object

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

https://stackoverflow.com/questions/49172698/default-hashcode-implementation-for-java-objects (accepted answer)
https://bugs.openjdk.org/browse/JDK-8199394

Возможная ошибка в ответе Чем отличается Statement от PreparedStatement?

https://github.com/enhorse/java-interview/blob/master/jdbc.md#%D1%87%D0%B5%D0%BC-%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%B0%D0%B5%D1%82%D1%81%D1%8F-statement-%D0%BE%D1%82-preparedstatement

Суммируя: PreparedStatement выгодно отличается от Statement тем, что при повторном использовании с одним или несколькими наборами параметров позволяет получить преимущества заранее прекомпилированного и кэшированного запроса, помогая при этом избежать SQL Injection.

https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html
При прекомпилорованный запрос документация есть, но непонятно откуда взята информация о кешировании
Если, это о кешировании плана запроса, то из текста воспринимается не так, а как кеширование ответа БД

Maven

Че-нибудь по мавену бы

Not exact explanation

Привет,

вот здесь
https://github.com/enhorse/java-interview/blob/master/java8.md#%D0%B2-%D1%87%D0%B5%D0%BC-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-collection-%D0%B8-stream

Принципиальная разница между ними состоит не в том, можно ли по одному обрабатывать элементы. Здесь важнее концепт сущностей: Collection - это прежде всего воплощение Структур Данных. Тот же Set не просто в себе хранит элементы, он реализует идею множества с уникальными элементами.
Тогда как Stream, это прежде всего абстракция необходимая для реализации "конвеера вычислений", собственно поэтому, результатом работы конвеера являются те или иные Структуры Данных или же результаты проверок/поиска и т.п.

Roadmap

Почитать для собеза

Худшее время добавление в LinkedList скорее (N/2)

Худшее время добавление в LinkedList скорее (N/2) так как для вставки по индексу как и для удаления, может быть выбран как хвост, так и голова списка, тогда получится что максимум надо перейти по половине списка.

https://github.com/enhorse/java-interview/blob/master/jcf.md#%D0%BA%D0%B0%D0%BA%D0%BE%D0%B5-%D1%85%D1%83%D0%B4%D1%88%D0%B5%D0%B5-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0-add-%D0%B4%D0%BB%D1%8F-linkedlist

Метод интерфейса имеет public abstract

Local classes - incorrect info

what

https://github.com/enhorse/java-interview/blob/master/core.md#%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9-%D0%BA%D0%BB%D0%B0%D1%81%D1%81-%D0%BA%D0%B0%D0%BA%D0%BE%D0%B2%D1%8B-%D0%B5%D0%B3%D0%BE-%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8

Не могут иметь внутри себя статических объявлений (полей, методов, классов);

why

Поля всё-таки могут иметь статические

image

Lexical mistakes

Есть пару лексических ошибок:
image
и
image

Я исправил у себя локально это. Могу ли я запушить эти изменения?

HashSet use only key

Неверно - "В качестве ключа и значения используется добавляемый элемент.". HashSet использует добавляемый элемент только в качестве ключа, а значение - объект Object.

private static final Object PRESENT = new Object();
public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

https://github.com/enhorse/java-interview/blob/master/jcf.md#%D0%BD%D0%B0%D0%B7%D0%BE%D0%B2%D0%B8%D1%82%D0%B5-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D1%8B-jcf-%D0%B8-%D0%B8%D1%85-%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8

Правила переопределение метода Object.equals()

Ссылка: https://github.com/enhorse/java-interview/blob/master/core.md#%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0-objectequals

Не стоит делать проверку с помощью instanceof, так как такая проверка будет возвращать true для подклассов и будет работать правильно только в случае, если класс объявлен как immutable. Вместо этого желательно использовать только getClass()

Empty questions

Not correct explanation

Привет,

вот тут есть момент https://github.com/enhorse/java-interview/blob/master/java8.md#%D0%BE%D0%B1%D1%8A%D1%8F%D1%81%D0%BD%D0%B8%D1%82%D0%B5-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-systemoutprintln

Здесь сказано "... передачу ссылки на статический метод println() класса System.out", но это не корректно, т.к. println - не статический метод, а System.out - не класс. В данном случае показан instance method reference на примере статического поля out в классе System.

Spring

Че-нибудь по спрингу бы

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.