JavaRush/Java блог/Random/Разбор вопросов и ответов с собеседований на Java-разрабо...
Константин
36 уровень

Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 1

Статья из группы Random
участников
Привет! На JavaRush собрались разные люди. Одни из нас только хотят стать Java-разработчиками, вкладывая много времени и сил в развитие, а другие — уже Java developer-ы. В том или ином случае, необходимо быть готовыми к испытаниям — техническим собеседованиям. Это испытание не из легких, и помимо моральной подготовки нужна и техническая. Разбор вопросов и ответов на собеседовании. Часть 1 - 1Недавно я наткнулся на большой список вопросов для собеседований на Java разработчика на dou. Данные вопросы поделены на различные уровни — Junior, Middle и Senior. Не пугайтесь: не все вопросы из легких, но те, что “со звездочкой” довольно редко задают. Вопросы — это хорошо, но мне бы хотелось попытаться ответить на большинство из них. Понятное дело, что я не вложусь в рамки одной статьи, как-никак, вопросов там чрезвычайно много. Поэтому это будет целый цикл из статьей-ответов на такие вопросы. Сразу подчеркну несколько моментов:
  1. Есть отличная статья с топом вопросов и ответов для них. Некоторые вопросы пересекаются с представленным выше списком (250+), поэтому эти вопросы будут пропускаться, дабы не дублировать лишний раз информацию.

  2. Вопросы представлены на украинском, но так как большинство участников JavaRush русскоязычные (да и я в большей мере тоже), ответы будут на русском.

  3. Ответы будут краткими, так как если расписывать очень подробно, ответы на некоторые вопросы могут потянуть на отдельную статью. Да и на собеседованиях настолько подробные и объемные ответы не нужны, ведь у вас вашего интервьюера есть всего лишь час на то, чтобы опросить вас по необходимым темам (а, как вы помните, тем хватет). Для любителей покопать поглубже я буду оставлять ссылки.

Итак, начнём.

Вопросы и ответы уровня Junior

Разбор вопросов и ответов на собеседовании. Часть 1 - 2

Общие вопросы

1. Какие вы знаете шаблоны проектирования? Расскажите о двух шаблонах, которые использовали в работе.

Шаблонов есть огромное множество: начать знакомство с ними можно с этой и этой статьи. Ну а для тех из вас, кто хочет обстоятельно ознакомиться с ними, рекомендую прочитать книгу “Head First. Паттерны проектирования”. С ее помощью вы сможете подробно и в легкой форме изучить самые базовые паттерны проектирования. Говоря о шаблонах проектирования, которые вы можете привести в качестве примеров на собеседовании, на ум приходят:
  • Builder — часто используемый шаблон, альтернатива классическому созданию объектов;
  • паттерн Стратегия, который по своей сути представляет полиморфизм. То есть, у нас есть один интерфейс, но поведение программы будет меняться в зависимости от того, какую конкретно реализацию этого интерфейса передали в функционал (сейчас стратегия фактически везде используется в java-приложениях).
Если этого вам мало, обратите внимание на Spring (если вы с ним уже знакомы), ведь он представляет собой целую платформу фреймворков, которые в свою очередь пронизаны паттернами вдоль и поперек. Вот вам пара примеров того, о чем я говорю:
  • Factory — в ApplicationContext (ну или в BeanFactory);
  • Singleton — все бины по умолчанию синглтоны;
  • Proxy — по сути все в спринге так или иначе использует этот паттерн, например, АОП;
  • Chain of responsibility — паттерн, по концепции которого работает Spring Security;
  • Template — используется в Spring Jdbc.

Java Core

Разбор вопросов и ответов на собеседовании. Часть 1 - 3

2. Какие типы данных есть в Java?

В Java есть примитивные типы данных:
  • byte — целые числа в пределах -128 до 127, весит 1 байт;
  • short — целые числа в пределах -32768 до 32767, весит 2 байта;
  • int — целые числа -2147483648 до 2147483647, весит 4 байта;
  • long — целые числа в пределах 9223372036854775808 до 9223372036854775807, весит 8 байтов;
  • float — числа с плавающей запятой в пределах -3.4E+38 до 3.4E+38, весит 4 байта;
  • double — числа с плавающей запятой в пределах -1.7E+308 до 1.7E+308, весит 8 байтов;
  • char — одиночные символы в UTF-16, весит 2 байта;
  • boolean значения true/false, весит 1 байт.
И ссылочные типы данных, которые указывают на объекты в куче.

3. Чем объект отличается от примитивных типов данных?

Первое отличие: количество занимаемой памяти: примитивы занимают очень мало, ведь они содержат лишь собственное значение, в то время как объекты могут содержать очень и очень много различных значений: как примитивов, так и ссылок на другие объекты. Второе отличие: Java —это объектно-ориентированный язык, поэтому в ней все работает через взаимодействие между объектами, и примитивы тут не сильно вписываются (собственно, поэтому Java — это не 100% объектно-ориентированный язык). Третье, вытекающее со второго: так как Java ориентирована на взаимодействие между объектами, у этих объектов есть много различных механизмов для управления. Например, конструкторы, методы, исключения (которые работают в первую очередь с объектами), и т.д. Собственно, чтобы примитивы могли как-то ввязаться (работать) в этой объектно ориентированной среде и были придуманы обертки (wrappers) для примитивных типов (Integer, Character, Double, Boolean...)

4. Чем отличаются передача параметров по ссылке и по значению?

Примитивные поля хранят свое значение: например, если мы задали int i = 9; поле i хранит значение 9. Когда у нас есть ссылка на объект, это значит, что мы имеем поле со ссылкой на объект, или другими словами — со значением адреса объекта в памяти.
Cat cat = new Cat();
Получается, поля со ссылкой на объект тоже хранят значения, значения адреса памяти. То есть, cat хранит значение адреса объекта new Cat() в памяти. Когда мы передаем параметр в некоторый метод, то происходит копирование его значения. В случае с примитивом будет копироваться значение примитива. Соответственно, в методе будет вестись работа с копией, при изменении которой оригинал не затронется. В случае со ссылочным типом будет копироваться значение адреса памяти, соответственно, адрес будет все тем же, как и объект, на который он указывает. И если мы будем менять объект по этой новой ссылке, он будет изменен и для старой (ведь они обе указывают на один и тот же объект).

5. Что такое JVM, JDK, JRE?

JVM — Java Virtual Machine — это виртуальная машина, которая запускает Java байткод, предварительно созданный компилятором. JRE — Java Runtime Environment — по сути, это среда для запуска java-приложений, которая содержит JVM, стандартные библиотеки и другие компоненты для запуска апплетов и приложений, написанных на языке программирования Java. Другими словами JRE — пакет всего необходимого для запуска скомпилированной Java-программы, но при этом не содержащий инструментов и утилит, таких как компиляторы или отладчики для разработки приложений. JDK — Java Development Kit — расширенный набор JRE, то есть, среда не только для запуска, но и для разработки java-приложений. JDK содержит все, что есть в JRE, плюс различные дополнительные инструменты — компиляторы и отладчики, которые нужны для создания приложений на Java (также содержит java-доки).Разбор вопросов и ответов на собеседовании. Часть 1 - 4

6. Зачем используют JVM?

Как говорилось выше, Java Virtual Machine — это виртуальная машина, которая запускает Java байткод, предварительно созданный компилятором. То есть, JVM не понимает исходный код Java. Поэтому сперва происходит компиляция .java файлов, которые после компиляции имеют расширение уже .class и которые и которые представлены в виде того самого байт кода, который понимает JVM. JVM для каждой OC своя, поэтому получив файлы в байт коде, JVM исполняет его, адаптируя под ОС, на которой это происходит. Собственно, из-за разных JVM версии JDK (или JRE) отличаются для разных ОС (под каждую из них нужна своя JVM). Давайте вспомним, как происходит разработка на других языках программирования. Вы разрабатываете программу, затем её код компилируется в машинный код для конкретной ОС, и после вы можете его запускать. Другими словами, под каждую систему вам нужно писать разные версии программы. В то время как на Java, благодаря двойной обработке кода (компиляция и обработка байт кода JVM), вы можете пользоваться преимуществами кроссплатформенности. Мы создали однажды код, перекомпилировали его в байткод, перенесли его на любую ОС, и уже местная JVM и запускает код. Это и есть легендарное свойство Java — пишешь однажды, запускаешь где угодно.Разбор вопросов и ответов на собеседовании. Часть 1 - 5Подробнее об этом — в статье “Компиляция и исполнение Java-приложений под капотом”.

7. Что такое bytecode?

Как я и говорил выше, компилятор преобразовывает Java-код в промежуточный — bytecode (файлы с расширением .java в файлы с расширением .class). Байткод во многом похож на машинный код, только он использует набор инструкций не реального процессора, а виртуального. При этом он может включать в себя участки, ориентированные на использование JIT-компилятора, оптимизирующего выполнение команд под реальный процессор, на котором запущена программа. JIT-компиляция, называемая ещё компиляцией на лету— это технология, которая увеличивает производительность программы, использующей байткод, через компиляции байткода в машинный или в другой формат во время работы программы. Как вы могли догадаться, JVM и использует JIT-компилятор, когда запускает байткод. Давайте взглянем на пример bytecode:Разбор вопросов и ответов на собеседовании. Часть 1 - 6Не слишком читаемо, не так ли? Ну так, это и не для нас инструкция, а для JVM. Вот статья, которая поможет получше разобраться в этом вопросе.

8. Каковы признаки JavaBean?

JavaBeans — Java-класс с соблюдением определенных правил. Вот несколько правил для написания JavaBean:
  1. Класс должен содержать пустой (без параметров) конструктор с открытым доступом с модификатором доступа public. Этот конструктор дает возможность создавать объект данного класса без лишних проблем (чтобы не было лишней возни с параметрами).

  2. Доступ ко внутренним полям класса осуществляется через методы get и set, которые должны быть стандартными. Например, если поле name, то getName и setName и т. д. Это, в свою очередь, позволяет различным инструментам (фреймворкам) без осложнений автоматически определять и обновлять содержание bean-ов.

  3. Класс должен содержать переопределенные версии методов equals()hashCode() и toString().

  4. Класс должен быть сериализуемым, то есть должен иметь интерфейс маркер — Serializable или имплементировать интерфейс Externalizable. Это нужно для того, чтобы состояние объекта bean можно надежно сохранять, хранить и восстанавливать.

Разбор вопросов и ответов на собеседовании. Часть 1 - 7Про виды JavaBeans можно почитать в этом материале.

9. Что такое OutOfMemoryError?

OutOfMemoryError — одна из критических ошибок во время исполнения программы, связанная с работой виртуальной машины Java (JVM). Вызывается в тех случаях, когда JVM не может выделить объект, потому что на него не хватает памяти, и сборщик мусора не может выделить больше памяти. Некоторые виды OutOfMemoryError:
  • OutOfMemoryError: Java heap space — объект не может быть размещен в куче Java из-за недостатка памяти. Ошибку может вызвать утечка памяти или то, что размер кучи по умолчанию недостаточен для текущего приложения.

  • OutOfMemoryError: GC Overhead limit exceeded — из-за того, что объем данных едва помещается в кучу, сборщик мусора работает все время, а программа Java работает очень медленно, и как итог — превышается предел накладных расходов сборщика мусора и приложение падает с данной ошибкой.

  • OutOfMemoryError: Requested array size exceeds VM limit — указывает на то, что приложение попыталось выделить память для массива, размер которого превышает размер кучи, что, опять же может быть из-за недостаточного количества выделенной памяти по умолчанию.

  • OutOfMemoryError: Metaspace — в куче закончилось место, выделенное для метаданных (метаданные — это инструкции классов, методов).

  • OutOfMemoryError: request size bytes for reason. Out of swap space — произошел некоторый сбой при попытке выделения памяти из кучи и как итог — нехватка памяти в куче.

10. Что такое стек трейс? Как его получить?

Стек трейс (Stack Trace) — это список классов и методов, которые были вызваны до этого момента приложения. Вызвать стек трейс в определенной точке приложения можно так:
StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
Таким образом мы получим массив стек трейс элементов, расположенных в порядке LIFO — Last In First Out.Разбор вопросов и ответов на собеседовании. Часть 1 - 8В Java, как правило, когда говорят о стек трейсе то имеется ввиду стек трейс, который выводится в консоли при возникновении ошибки (или исключения). Получить стек трейс исключений можно так:
StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
Ну и если мы говорим о выводе стек трейса исключения в консоли:
try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
Также, если у нас возникнет ошибка, unchecked исключение или checked, которое мы не обработаем, а только будем пробрасывать, то при падении приложения мы получим автоматически стек трейс исключений в консоли. Небольшой пример стектрейс исключения в консоли:Разбор вопросов и ответов на собеседовании. Часть 1 - 9Подробнее о Stack Trace можете почитать вот тут. На этом вопросе мы сегодня и остановимся...Разбор вопросов и ответов на собеседовании. Часть 1 - 10
Другие материалы серии:
Комментарии (31)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Захар QA Automation Engineer в HiQo Solutions
6 июня 2021, 12:51
Стек трейс (Stack Trace) — это список классов и методов, которые были вызваны до этого момента приложения. Не всех, а только тех, которые ещё не отработали (а находятся в процессе работы). Т.е. те, внутри которых сейчас находится "курсор" выполнения программы
Lyudmila Zhdanok
Уровень 12
11 марта 2021, 19:42
3. Чем объект отличается от примитивных типов данных мне кажется здесь правильнее было бы ответить, что примитивные типы хранят значения, а обьекты - ссылки.
Константин Backend Developer в Andersen
12 марта 2021, 10:17
объекты не только ссылки хранят, но и примитивы
Just me
Уровень 41
10 марта 2021, 13:19
Уже в предвкушении крутой серии постов)
Pavel
Уровень 35
5 марта 2021, 13:28
boolean значения true/false, весит 1 байт. откуда инфа? есть ссылка на документацию jvm?
Justinian Judge в Mega City One Master
6 марта 2021, 10:15
если автор будет пруфит каждое слово, он бы дальше первого абзаца не прошел. Если ты считаешь иначе - можешь привести аргументы с ссылками. Но найти в гугле информацию на твой же вопрос в принципе быстрее чем этот вопрос написать
Pavel
Уровень 35
6 марта 2021, 21:12
Автору не надо пруфить то, что и так можно легко нагуглить, я вот что то не могу найти ответ на свой вопрос, может Вы поможете? https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.
Justinian Judge в Mega City One Master
6 марта 2021, 21:20
Могу помочь, мне не сложно. Только скажи какие поисковые запросы для гугля ты использовал, и примерное количество открытых страниц и на каких примерно ресурсах?
Pavel
Уровень 35
6 марта 2021, 21:40
docs.oracle.com stackowerflow.com habr.com запросы типа : boolean type java size, размер boolean в java. еще нашел вот что https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.3.4 Instead, expressions in the Java programming language that operate on boolean values are compiled to use values of the Java Virtual Machine int data type. теперь к вопросу, автор утверждает что, размер boolean 1 байт. Я хотел бы хотел увидеть пруф желательно на офдок. Попросил я его, потому что сам не смог найти ответ на этот вопрос,хотя вы и говорите, что такие вопросы легко гуглятся. Так что расчитываю на вашу помощь.
Константин Backend Developer в Andersen
7 марта 2021, 08:14
Ссылку на доку не нашел, но вот интересная статья, которая проводит обзор - на количество занимаемой памяти boolean в различных обстоятельствах: https://www.baeldung.com/jvm-boolean-memory-layout
Pavel
Уровень 35
7 марта 2021, 09:07
Да там в общем говорится, что в определенных случаях, зависящих от определенной jvm boolean может быть размером в 1 байт в массиве boolean. эта информация есть на оф сайте, выше я привел ссылку: In Oracle’s Java Virtual Machine implementation, boolean arrays in the Java programming language are encoded as Java Virtual Machine byte arrays, using 8 bits per boolean element. но ведь он может и не быть размером 1 байт? Так не понятно, мы можем ответить уверенно что boolean занимает 1 байт, как например int занимает 4 байта? Просто я к чему все это, вот приду я на собеседование, и у меня спросят, а сколько весит boolean? я скажу: 1 байт. Дальше мне скажут, что в документации нигде не сказано сколько весит boolean и спросят, почему я решил что он весит 1 байт, что в этом случае я должен рассказать? или может быть уместно будет сразу сказать, что мы не знаем сколько он весит, тк в документации об этом не сказано. Я не хотел придираться к Вам, просто мне вот этот момент, правда не много не ясен был.
Константин Backend Developer в Andersen
7 марта 2021, 11:19
"Просто я к чему все это, вот приду я на собеседование, и у меня спросят, а сколько весит boolean? я скажу: 1 байт. " - этого ответа на собеседованиях будет более чем достаточно, никто не будет опрашивать вас так глубоко и дотошно на эту тему Лучше потратьте время на покрытие всех необходимых тем Ну а если вы их уже всех покрыли, то вперед собеседываться и не терять драгоценное время!
Justinian Judge в Mega City One Master
7 марта 2021, 16:23
размер boolean в java
на поисковые запросы на русском можешь даже время не тратить, 99.99% наиболее актуальной, полной информации находится исключительно в англоязычном сегменте.
boolean type java size
неважно составленный запрос, у меня в проектах ряд статей и одна из них, как гуглить, ты должен анализировать результаты запроса и убирать те слова, которые дают ложносрабатывающие ссылки из-за того что ты используешь общие слова, которые никак не влияют на то что ты ищешь, в твоем случае это лишнее слово type. Введи
boolean java size site:stackoverflow.com
JVM boolean type 1 byte
там все написано. На данном этапе самое главное что ты можешь сделать это изменить свою концепцию "дайте мне пруф линк". Все что касается JVM там такое не катит, нужно знать архитектуру компьютера, ОС, нужно знать особенности JVM, нужно понимать и представлять как это все между собой связано, уметь читать, искать информацию и делать выводы. Магических пруфлинков чтобы прям было написано что тебе нужно - такое если и бывает, то редко. А что бывает, это написано it depends. Поэтому, у тебя два варианта, либо сказать что это зависит от конкретной имплементации JVM, но это не самый лучший вариант, поскольку скажут, да? Ну-ка, поподробнее. Либо сказать 1 байт, что покрывает большинство кейсов и навряд будут углублться, а даже если углубляться и ты не ответишь - то минус тебе не поставят, не каждый мидл знает то, ссылки на что ты пытаешься с нас выбить :) Но если интересно, я тебе дал пример запросов, читай, там все расписано.
hidden #2322530
Уровень 41
9 марта 2021, 08:44
boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
size of primitive types in java javadoc
булеан это 1/0, а значит прекрасно подходит под 1 бит информации. но по идее минимальная единица в JVM это байт, поэтому будет 1 байт.
AIrat163
Уровень 29
2 февраля 2023, 14:39
https://javarush.com/quests/lectures/questsyntaxpro.level07.lecture00 в лекции есть инфа, в таблице
endurance2296
Уровень 30
5 марта 2021, 13:21
Константин, натыкаюсь на твои статьи уже который раз! Классная получилась статья и в этот раз, пиши еще:)
Илья
Уровень 30
5 марта 2021, 07:20
Ппц, год обучения, по 2-3 часа в день. Полностью ответил только на 2 вопроса. Похоже куда-то я двигаюсь не туда(
Виталий Уpoвень 240, Киев в Шльоп Шльоп
5 марта 2021, 13:24
Двигайся просто дальше JR, тут же сразу говорили, что нет академического метода преподавания. Я перешел на академический лекционный метод, и не затрудняюсь ответить на эти вопросы :3
Илья
Уровень 30
5 марта 2021, 15:27
Так и придётся, другого выбора нет)
Justinian Judge в Mega City One Master
6 марта 2021, 10:20
подготовка к собеседованиям это отдельный вид активности, общеизвестен факт, что в плане теории, каждый второй джун готовящийся к собесу может заткнуть за пояс 2 с 3 мидлов. Но вот по скиллам мидлы конечно будут гораздо выше. Тоже самое качается синиоров, которые на хабре плачутся, как их заставляют решать на собесах задачки и отвечать по теории. Хотя обычно не принято спрашивать о стандартных джуновских вопросах по теории тех, у кого есть коммерческий опыт, там уже начинается с вопросов "на каких проектах был? Что там использовалось? Какие проблемы решал" и там уже по конкретным моментам проходятся. Именно это и вызывает слезы некоторых мидлов и синиоров, если их начинают спрашивать в стандартном ключе и их рассказы как они героически тушили пожары на проде, не прокатят. Поэтому теория это всегда отдельное направление подготовки к собесам. Как например, мы можем активно пользоваться и использовать родной язык, но чтобы получить хорошую оценку на экзамене, мы тоже будем готовиться, хоть казалось бы, мы носители языка. Но на экзамене найдут чем удивить ))) Так и собесы, так что все ок. Практика практикой, теория теорией, подготовка к собеседованиям - подготовкой. Это разные активности
Илья
Уровень 30
6 марта 2021, 18:10
Спасибо! Твои комменты всегда в тему) Просто казалось, что мой скил в теории повыше будет, ан нет.. Есть над чем работать.
Justinian Judge в Mega City One Master
3 марта 2021, 11:38
Хорошая статья, но уточню момент:
4. Чем отличаются передача параметров по ссылке и по значению?
Многозначный вопрос, в джава нет передачи параметров по ссылке, но в вопросе и не говорится о джаве, поэтому можно читать двояко. Вопрос валиден, но тогда нужно раскрыть что подразумевается под передачей по ссылке в тех языках, в которых она реализована либо в теории Computer science. Либо если взять текст ответа - то переформулировать вопрос: Чем отличается передача по значению для примитивов и ссылочных типов. + к читателям от меня пару уточняющих вопросов: к первому вопросу, сколько места занимает в памяти ссылка на объект? к 9-му вопросу, OutOfMemoryError возникает когда в JVM заканчивается места, памяти стало 0 грубо говоря, и возникает эта ошибка. Но OutOfMemoryError это тоже объект, как он может создаваться если память уже закончилась?
Дмитрий
Уровень 29
4 марта 2021, 07:32
1. Может недополнимаю первый вопрос. Ссылочный тип не имеет же фиксированного размера. Если это стринга, то размер будет пропорционален(условно) количеству символов в ней. 2. Или такой объект создается заранее и выбрасывается по триггеру. Но это маловероятно, т.к. неэффективное использование памяти. Либо какой-то механизм есть, который хранит необходимое количество памяти для OutOfMemoryError, на случай его достижения.
Justinian Judge в Mega City One Master
4 марта 2021, 08:33
да, это моя вина, исправил свой коммент, переформулировал вопрос, на
сколько места занимает в памяти ссылка на объект?
по второму вопросу, один из твоих вариантов правильный 👍 Но нужно знать уверенно какой именно )
Дмитрий
Уровень 29
4 марта 2021, 09:06
Признаюсь, погуглил по первому вопросу. Но думал в верном направлении, в любом случае. Предполагал, что ссылка занимает какой-то фиксированный, с большой долей вероятности, достаточно маленький размер. Узнал теперь какой. По второму вопросу, предполагаю, что правильный вариант второй из предложенных мной.
Justinian Judge в Mega City One Master
4 марта 2021, 09:09
по первому вопросу, ссылка занимает фиксированный размер но ключевое слово "какой-то", поскольку его мы знать не можем, по крайней мере как универсальный ответ, поскольку it depends from JVM ) С большей долей вероятности мы можем сказать, что для 32-битных JVM это будет 4 байта, а вот для 64-битных JVM это уже есть варианты. В ответе нужно назвать какие основные варианты и чем продиктованы. По второму вопросу, первый вариант.
Денис Сомин
Уровень 8
5 марта 2021, 14:25
А разве ссылка занимает не размер машинного слова?
Justinian Judge в Mega City One Master
5 марта 2021, 16:13
не надо недооценивать JVM :)
Денис Сомин
Уровень 8
5 марта 2021, 18:21
можешь плиз скинуть ссылку на какую-нибудь документацию по этому вопросу, если не сложно, а то в моём понимании ничем кроме машинного слова ссылка быть и не может, ведь по факту это лишь адрес в виртуальной памяти, объём которой неограничен, и следовательно размер ссылки может быть ограничен лишь самым большим регистром, который машина может обработать за 1 такт. Хотя возможно я ошибаюсь. Буду очень признателен.
Justinian Judge в Mega City One Master
6 марта 2021, 10:38
то в моём понимании ничем кроме машинного слова ссылка быть и не может,
это значит что ты не до конца понимаешь что такое JVM, посредник между языком высокого уровня и машинным уровнем, на уровне которой происходит очень много оптимизаций различного вида. Но все еще впереди :) По ссылкам, такое конечно нужно уметь гуглить самостоятельно, привыкать к этому чем раньше тем лучше - но могу и дать, чего нет: - https://suif.stanford.edu/~brm/papers/10.1.1.97.8725.pdf - статья Шипилева (специалист по JVM) - документация JVM - как это выглядит в коде JVM
Денис Сомин
Уровень 8
6 марта 2021, 18:27
спасибо:3