Java задачи с собеседований🔥 Собрали новый большой тест на знание Java! Тест для проверки ваших знаний, их актуальности и глубины понимания языка. Включает в себя 30 вопросов разной сложности - от простых до требующих анализа кода. 🖊 30 вопросов ⏱ 30 минут на прохождение Линк: t.…
Java задачи с собеседований🔥 Собрали новый большой тест на знание Java! Тест для проверки ваших знаний, их актуальности и глубины понимания языка. Включает в себя 30 вопросов разной сложности - от простых до требующих анализа кода. 🖊 30 вопросов ⏱ 30 минут на прохождение Линк: t.…
Пока лучший результат - 24 правильных ответов, найдется ли смельчак бросить вызов?
Java задачи с собеседований pinned «🔥 Собрали новый большой тест на знание Java! Тест для проверки ваших знаний, их актуальности и глубины понимания языка. Включает в себя 30 вопросов разной сложности - от простых до требующих анализа кода. 🖊 30 вопросов ⏱ 30 минут на прохождение Линк: t.…»
Тест для проверки ваших знаний, их актуальности и глубины понимания языка. Включает в себя 30 вопросов разной сложности - от простых до требующих анализа кода. 🖊 30 вопросов ⏱ 30 минут на прохождение
ArrayList: - Доступ к произвольному элементу по индексу за константное время O(1); - Доступ к элементам по значению за линейное время O(N); - Вставка в конец в среднем производится за константное время O(1); - Удаление произвольного элемента из списка занимает значительное время, т.к. при этом все элементы находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (capacity) не изменяется); - Вставка элемента в произвольное место списка занимает значительное время, т.к. при этом все элементы находящиеся «правее» смещаются на одну ячейку вправо; - Минимум накладных расходов при хранении.
LinkedList: - На получение элемента по индексу или значению потребуется линейное время O(N); - На добавление и удаление в начало или конец списка потребуется константное O(1); - Вставка или удаление в/из произвольного места за константное O(N); - Требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся ещё указатели на следующий и предыдущий элементы списка.
В целом, LinkedList в абсолютных величинах проигрывает ArrayList и по потребляемой памяти, и по скорости выполнения операций. LinkedList предпочтительно применять, когда нужны частые операции вставки/удаления или в случаях, когда необходимо гарантированное время добавления элемента в список.
❓Каким образом можно создать поток? - Создать потомка класса Thread и переопределить его метод run(); - Создать объект класса Thread, передав ему в конструкторе экземпляр класса, реализующего интерфейс Runnable. Этот интерфейс содержит метод run(), который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод run(). - Вызвать метод submit() у экземпляра класса, реализующего интерфейс ExecutorService, передав ему в качестве параметра экземпляр класса, реализующего интерфейс Runnable или Callable (содержит метод call(), в котором описывается логика выполнения).
❓Чем различаются Thread и Runnable? Thread - это класс, некоторая надстройка над физическим потоком. Runnable - это интерфейс, представляющий абстракцию над выполняемой задачей. Помимо того, что Runnable помогает разрешить проблему множественного наследования, несомненный плюс от его использования состоит в том, что он позволяет логически отделить логику выполнения задачи от непосредственного управления потоком.
❓В чём заключается разница между методами start() и run()? Несмотря на то, что start() вызывает метод run() внутри себя, это не то же самое, что просто вызов run(). Если run() вызывается как обычный метод, то он вызывается в том же потоке и никакой новый поток не запускается, как это происходит в случае, когда вы вызываете метод start().