04 НояJava. Вопросы на собеседовании и ответы. Часть 2

Часто задаваемые вопросы на собеседованиях по Java. В статье рассмотрено 5 вопросов.

1. Какие бывают модификаторы доступа в джава?

  • public(используется в классах, конструкторах, интерфейсах, внутренних классах, методах и полях класса) – Модификатор доступа общественный, доступен всем.
  • protected(используется в конструкторах, внутренних классах, методах и полях класса) – Модификатор доступа на уровне пакета и в иерархии наследования
  • private(используется в конструкторах, внутренних классах, методах и полях класса) – Доступ разрешен только в текущем классе
  • friend(используется в классах, конструкторах, интерфейсах, внутренних классах, методах и полях класса) – на уровне пакета

Заметьте что protected не равен friend, их нельзя сравнивать!

2. Может ли объект получить доступ к private-переменной класса, не используя getter/setter-методы?

С помощью механизма Java Reflection мы можем это сделать.
Пример

import  java.lang.reflect.Field;

public class Main {

    public static void main(String[] args) {

        try {
            PublicClass PClass = new PublicClass();
            Field f = PublicClass.class.getDeclaredField("a");
            f.setAccessible(true);
            Integer fieldValue = (Integer) f.get(PClass);
            System.out.println(fieldValue);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

    }

    public static class PublicClass {
        private int a = 10;
    }

}

3. Чем отличается ArrayList от LinkedList?

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

4. В каком случае может быть потерян элемент в HashMap?

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

5. Что такое метод equals().
Метод equals() обозначает отношение эквивалентности объектов. Эквивалентным называется отношение, которое является симметричным, транзитивным и рефлексивным.
Рефлексивность: для любого ненулевого x, x.equals(x) вернет true;
Транзитивность: для любого ненулевого x, y и z, если x.equals(y) и y.eqals(z) вернет true, тогда и x.equals(z) вернет true;
Симметричность: для любого ненулевого x и y, x.equals(y) должно вернуть true, тогда и только тогда, когда y.equals(x) вернет true.
Также для любого ненулевого x, x.equals(null) должно вернуть false.

Нет комментариев. Напишите первым

Оставить комментарий

Заполните данные
Имя
Email
Ваш комментарий


+ пять = 9