В тази статия ще разгледаме въпроси за интервю за Core Java за младши до старши Java разработчици. Като се запознаете с тези въпроси и техните потенциални отговори, можете по-добре да се подготвите за следващото си интервю за старши Java разработчик и да покажете своя опит в тази област.

Защо низът е неизменен?

Низовете са неизменни, защото техните стойности не могат да бъдат променяни след създаването им. След като низът бъде създаден, съдържанието му не може да се променя. Тази неизменност осигурява няколко предимства, като например ефективно използване на паметта, безопасност на нишките и позволяване на интерниране на низове за подобрена производителност.

Как да създадете персонализиран неизменен клас?

  1. Декларирайте класа final, за да предотвратите наследяването.
  2. Направете всички полета private и final, така че да не могат да бъдат променяни, след като бъдат зададени.
  3. Не предоставяйте никакви методи за настройка за полетата.
  4. Ако класът съдържа променливи обекти, не забравяйте да създадете копия на тези обекти, за да избегнете модификация от външни източници.
  5. Уверете се, че всички методи, които връщат вътрешното състояние на класа, не излагат действителните препратки към променливи обекти.
  6. Ако е необходимо, осигурете методи за достъп до полетата, но се уверете, че те връщат копия или неизменни версии на обектите.
  7. Приложете методите hashCode() и equals() правилно, като вземете предвид неизменното състояние на обекта.
  8. Помислете дали да накарате класа да внедри интерфейса Serializable, за да поддържа сериализация, ако е необходимо.

Как променящата се препратка може да се обработва в неизменен клас?

За да обработвате променливи препратки в неизменен клас:

  1. Използвайте защитно копиране.
  2. Обвивайте променливи обекти с неизменни обвивки.
  3. Върнете защитни копия на променливи обекти.
  4. Уверете се, че променливият обект е неизменен по договор.

Програма за поток Java 8 — сортирайте имената на служителите въз основа на азбука A и сортирайте в низходящ ред.

public class EmployeeFilterAndSortExample {
    public static void main(String[] args) {
        List<Employee> employees = new ArrayList<>();
        employees.add(new Employee("John"));
        employees.add(new Employee("Alice"));
        employees.add(new Employee("David"));
        employees.add(new Employee("Bob"));

        List<Employee> filteredAndSortedEmployees = employees.stream()
                .filter(e -> e.getName().startsWith("A")) // Filter based on names starting with 'A'
                .sorted(Comparator.comparing(Employee::getName).reversed()) // Sort in descending order
                .collect(Collectors.toList());

        System.out.println("Filtered and Sorted Employees (Descending Order):");
        for (Employee employee : filteredAndSortedEmployees) {
            System.out.println(employee.getName());
        }
    }

    static class Employee {
        private String name;

        public Employee(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }
}

Разлика между Hashtable и Concurrent HashMap?

Ключовите разлики между Hashtable и ConcurrentHashMap могат да бъдат обобщени, както следва:

  • Заключващ механизъм: Hashtable използва едно заключване за цялата таблица, докато ConcurrentHashMap използва множество заключения (сегменти) за постигане на едновременност.
  • Едновременност: Hashtable има по-ниска едновременност и може да страда от конкуренция, докато ConcurrentHashMap позволява едновременни операции за четене и актуализиране на различни сегменти, което води до подобрена производителност в много едновременни среди.
  • Нулева поддръжка: Hashtable не позволява нулеви ключове или стойности, докато ConcurrentHashMap поддържа нулеви ключове и стойности.
  • Производителност: ConcurrentHashMap е проектирана за по-добра мащабируемост и производителност при едновременни сценарии, докато Hashtable може да показва по-бавна производителност в много едновременни среди.
  • Изброяване: Изброяването в Hashtable не е безопасно, докато ConcurrentHashMap осигурява безопасно изброяване.
  • Версия на Java: Hashtable е налична от Java 1.0, докато ConcurrentHashMap е въведена в Java 1.5.

Като цяло ConcurrentHashMap осигурява подобрена паралелност, по-добра производителност, нулева поддръжка и безопасно изброяване в сравнение с Hashtable.

Как работи Hashmap?

  1. Хеширане: Когато двойка ключ-стойност се вмъкне в HashMap, хеш кодът на ключа се изчислява с помощта на метода hashCode() на ключа. Хеш кодът се използва за определяне на индекса или контейнера, където ще се съхранява записът.
  2. Кофа и масив: HashMap вътрешно използва масив от кофи, където всяка кофа може да съдържа множество записи. Размерът на масива е първоначално зададен и расте динамично според нуждите. Индексът на всяка кофа се изчислява въз основа на хеш кода на ключа.
  3. Обработка на сблъсък: В някои случаи различни ключове могат да произведат един и същ хеш код, което води до сблъсък. За да се справи със сблъсъци, HashMap използва свързан списък или дърво (в Java 8+) в рамките на всяка кофа. Ако множество записи имат един и същ хеш код, те се съхраняват като възли в свързания списък или дърво.
  4. Извличане: Когато се извлича стойност от HashMap с помощта на ключ, хеш кодът на ключа се изчислява отново. Индексът се определя на базата на хеш кода и свързаният списък или дърво в рамките на съответния контейнер се преминава, за да се намери записът със съвпадащия ключ.
  5. Ефективност: HashMap осигурява средно производителност в постоянно време за повечето операции, като get() и put(), като се предполага добра хеш функция и равномерно разпределение на ключовете. Въпреки това, в случай на чести сблъсъци или лошо проектирана хеш функция, производителността може да се влоши до O(n), където n е броят на записите.

Въпросът по-горе се задава милиони пъти в интервю, въпросите, които трябва да знаете.

Защо трябва да заменим метода за равенство и хешкод?

Замяната на методите equals() и hashCode() е необходима, за да се осигури правилно поведение при работа с персонализирани класове в колекции на Java. Той позволява правилно сравнение на обекти, позволява обектите да се използват като ключове в базирани на хеш структури от данни и гарантира съгласуваност и придържане към договора за Java обект.

Използване на услугата изпълнител

Тази рамка помага при едновременни многонишкови сценарии.

  1. Управление на нишки: Управлява създаването, разпределянето и повторното използване на нишките, като предоставя набор от нишки за ефективно изпълнение на задачи.
  2. Асинхронно изпълнение на задачи: Позволява задачите да бъдат изпращани за изпълнение и управлява присвояването на задачи към налични нишки в пула от нишки.
  3. Подобрена производителност: Чрез използването на набор от нишки се оптимизира използването на ресурсите и се намаляват разходите за създаване на нишки, което води до подобрена производителност.
  4. Координиране на задачи: Осигурява методи за координиране на изпълнението на задачи, като изчакване за завършване на множество задачи или получаване на резултата от задача чрез Future обект.
  5. График на задачите: Позволява изпълнението на задачите за планиране в определени часове или след определени закъснения, което позволява изпълнението на периодични задачи или забавено изпълнение.
  6. Грациозно изключване: Позволява правилното изключване на ExecutorService, като гарантира, че изпълняваните задачи са завършени, като същевременно отхвърля нови задачи и предотвратява внезапното прекъсване на нишките.

Ако търсите ръководства за интервю за ролята на разработчик на Java, можете да използвате ресурсите по-долу и за вашата подготовка.

Книгата по-долу съдържа 250 подбрани въпроса за Java, Spring-Boot и Microservice.



Безплатни PDF файлове от javinpaul от @javarevisited

Grokking the Java Interview [Безплатно примерно копие]

Grokking the Spring Boot Interview [Безплатно примерно копие]

Благодаря за четенето

  • 👏 Моля, пляскайте за историята и ме последвайте 👉
  • 📰 Прочетете повече съдържание в моя Medium(30 истории за интервю с Java разработчик)
  • Намерете моята книга Guide To Clear Java Developer Interview тук Gumroad(PDF формат) и Amazon (електронна книга Kindle).
  • 🔔 Последвайте ме: LinkedIn | Twitter