Проект

Общее

Профиль

JAVA CORE » История » Версия 2

Александр Александров, 18.04.2019 16:28

1 1 Александр Александров
h1. JAVA CORE
2
3
h2. Вопросы
4
5
# Чем отличается JRE, JVM и JDK?
6
# Опишите модификаторы доступа в Java.
7
# Что такое package level access.
8
# Чем абстрактный клас отличается от интерфейса? В каких случаях Вы бы использовали абстрактный класс, а в каких интерфейс?
9
# Может ли объект получить доступ к private-переменной класса? Если, да, то каким образом?
10
# Для чего в джаве статические блоки?
11
# Можно ли перегрузить static метод?
12
# Расскажите про внутренние классы. Когда вы их будете использовать?
13
# В чем разница между переменной экземпляра и статической переменной? Приведите пример.
14
# Приведите пример когда можно использовать статический метод?
15
# Расскажите про классы- загрузчики и про динамическую зарузку классов.
16
# Что такое статическая и что такое динамическая загрузка класса?
17
# Для чего нужен оператор "assert" в джава?
18
# Почему в некоторых интерфейсах вообще не определяют методов?
19
# Какая основная разница между String, StringBuffer, StringBuilder?
20
# Расскажите про потоки ввода-вывода Java.
21
# Что такое Heap и Stack память в Java?
22
# Какая разница между Stack и Heap памятью в Java?
23
# Расскажите про модель памяти в джава?
24
# Как работает сборщик мусора (garbage collector)?
25
# Расскажите про приведение типов. Что такое понижение и повышение типа? Когда вы получаете ClassCastException?
26
# Что такое статический класс, какие особенности его использования?
27
# Каким образом из вложенного класса получить доступ к полю внешнего класса.
28
# Какие существуют типы вложенных классов? Для чего они используются?
29
# Возможно ли при переопределении (override) метода изменить:
30
## Модификатор доступа
31
## Возвращаемый тип
32
## Тип аргумента или количество
33
## Имя аргументов
34
# Изменять порядок, количество или вовсе убрать секцию throws?
35
# Что такое autoboxing?
36
# Что такое Generics?
37
# Какова истинная цель использования обобщенных типов в Java?
38
# Каким образом передаются переменные в методы, по значению или по ссылке?
39
# Какие методы есть у класса Object?
40
# Правила переопределения метода Object.equals().
41
# Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
42
# Какая связь между hashCode и equals?
43
# Каким образом реализованы методы hashCode и equals в классе Object?
44
# Что будет, если переопределить equals не переопределяя hashCode? Какие могут возникнуть проблемы?
45
# Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode?
46
# Для чего нужен метод hashCode()?
47
# Правила переопределения метода Object.hashCode().
48
# Расскажите про клонирование объектов. В чем отличие между поверхностным и глубоким клонированием?
49
# Правила переопределения метода Object.clone().
50
# Где и как вы можете использовать закрытый конструктор?
51
# Что такое конструктор по умолчанию?
52
# Опишите метод Object.finalize().
53
# Чем отличаются слова final, finally и finalize?
54
# Опишите иерархию исключений.
55
# Какие виды исключений в Java вы знаете, чем они отличаются?
56
# Что такое checked и unchecked Exception?
57
# Как создать свой unchecked Exception?
58
# Какие есть Unchecke exeption?
59
# Что такое Error?
60
# Опишите работу блока try-catch-finally.
61
# Возможно ли использование блока try-finally (без catch)?
62
# Всегда ли исполняется блок finally?
63
# Какие есть особенности класса String? что делает метод intern().
64
# Можно ли наследовать строковый тип, почему?
65
# Почему строка является популярным ключом в HashMap в Java?
66
# Дайте определение понятию конкатенация строк.
67
# Как перевернуть строку?
68
# Как сравнить значение двух строк?
69
# Как обрезать пробелы в начале и конце строки?
70
# Дайте определение понятию "пул строк".
71
# Можно ли синхронизировать доступ к строке?
72
# Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?
73
# Почему строка неизменная и финализированная в Java?
74
# Напишите метод удаления данного символа из строки.
75
# Что такое рефлексия?
76
# Что произойдет со сборщиком мусора (GC), если во время выполнения метода finalize() некоторого объекта произойдет исключение?
77
# Что такое интернационализация, локализация?
78
# Что такое Аннотации в Java?
79
# Какие функции выполняет Аннотации?
80
# Какие встроенные аннотации в Java вы знаете?
81
# Что делают аннотации @Retention, @Documented, @Target и @Inherited?
82
# Что делают аннотации @Override, @Deprecated, @SafeVarargs и @SuppressWarnings?
83
# Какой жизненный цикл аннотации можно указать с помощью @Retention?
84
# К каким элементам можно применять аннотацию, как это указать?
85
# Как создать свою Аннотацию?
86
# Атрибуты каких типов допустимы в аннотациях?
87
# Что такое JMX?
88
# Какие выгоды предлагает JMX?
89
# Что еще умеет JMX кроме дистанционного управления?
90
# Что такое MBean?
91
# Какие типы MBeans существуют?
92
# Что такое MBean Server?
93
# Какие механизмы обеспечивают безопасность в технологии Java?
94
# Назовите несколько видов проверок которые выполняет верификатор байт-кода Java?
95
# Что вы знаете о "диспетчере защиты" в Java?
96
# Что такое JAAS?
97
# Что такое Рефакторинг?
98
99
h2. Ответы
100
101
h3. Чем отличается JRE, JVM и JDK?
102
103 2 Александр Александров
JRE кратко - для работы. Java Runtime Environment (сокр. JRE) - минимальная реализация виртуальной машины, необходимая для исполнения Java-приложений, без компилятора и других средств разработки. Состоит из виртуальной машины - Java Virtual Machine и библиотеки Java-классов. JDK кратко - для программирования. Java Development Kit (сокращенно JDK) - бесплатно распространяемый компанией Oracle Corporation (ранее Sun Microsystems) комплект разработчика приложений на языке Java, включающий в себя компилятор Java (javac), стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE). Java Virtual Machine (сокращенно Java VM, JVM) - виртуальная машина Java - основная часть исполняющей системы Java, так называемой Java Runtime Environmen (JRE). Виртуальная машина Java интерпретирует Байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac). JVM может также использоваться для выполнения программ, написанных на других языках программирования.
104
105 1 Александр Александров
h3. Опишите модификаторы доступа в Java.
106
107 2 Александр Александров
В Java существуют следующие модификаторы доступа:
108
* private: (используется конструкторах, внутренних классах, методах и полях класса) - Доступ разрешен только в текущем классе.
109
* default (package-private): (используется в классах, конструкторах, интерфейсах, внутренних классах, методах и полях класса) - Доступ на уровне пакета. Если класс будет так объявлен он будет доступен только внутри пакета.
110
* protected: (используется конструкторах, внутренних классах, методах и полях класса) Модификатор доступа на уровне пакета и в иерархии наследования.
111
* public: (используется в классах, конструкторах, интерфейсах, внутренних классах, методах и полях класса) - Модификатор доступа общественный, доступен всем. Последовательность модификаторов по убыванию уровня закрытости: private, default ,protected, public)
112
113 1 Александр Александров
h3. Что такое package level access.
114
115 2 Александр Александров
Доступ из классов одного package-а в классы другого package-a.
116
117 1 Александр Александров
h3. Чем абстрактный клас отличается от интерфейса? В каких случаях Вы бы использовали абстрактный класс, а в каких интерфейс?
118
119 2 Александр Александров
Абстрактный класс это класс, который помечен как "abstract", он может содержать абстрактные методы, а может их и не содержать. Экземпляр абстрактного класса нельзя создать.
120
Класс, который наследуется от абстрактного класса может реализовывать абстрактные методы, а может и не реализовывать, тогда класс наследник должен быть тоже абстрактным. Также если класс наследник переопределяет реализованный в абстрактном классе родители метод, его можно переопределить с модификатором абстракт! Т.е отказаться от реализации. Соответственно данный класс должен быть также абстрактным также. Что касается интерфейса, то в нем находятся только абстрактные методы и константы, так было до выхода Java 8. Начиная с Java 8 кроме абстрактных методов мы также можем использовать в интерфейсах стандартные методы (default methods) и статические методы (static methods).
121
* Default метод в интерфейсе - это метод в интерфейсе с по умолчанию реализованной логикой, который не требуется обязательно определять в реализации этого интерфейса.
122
* Static методы в интерфейсе - это по существу то же самое, что static-методы в абстрактном классе. 
123
124
При реализации интерфейса, класс обязан реализовать все методы интерфейса. Иначе класс должен быть помечен как абстрактный. Интерфейс также может содержать внутренние классы. И не абстрактные методы в них. Что же использовать Интерфейс или Абстрактный класс? Абстрактный класс используется когда нам нужна какая-то реализация по умолчанию. Интерфейс используется когда классу нужно указать конкретное поведение. Часто интерфейс и абстрактный класс комбинируют, т.е. имплементируют интерфейс в абстрактном классе, чтоб указать поведение и реализацию по умолчанию. Это хорошо видно на примере свига:
125
126
<pre><code class="java">
127
class AbstractTableModel implements TableModel {
128
}
129
class MyTableModel extends AbstractTableModel {
130
}
131
</code></pre>
132
133
Мы создаем свою модель таблицы с определенным поведением и уже с реализацией по умолчанию.
134
135
*ВАЖНО!* При реализации интерфейса, необходимо реализовать все его методы, иначе будет Fatal error, так же это можно избежать, присвоив слово abstract.
136
137
Пример:
138
139
<pre><code class="java">
140
interface I {
141
    public void F();
142
    public void say();
143
}
144
145
public abstract class A implements I {
146
    
147
    @Override
148
    public void say() {
149
       System.out.println("Hello!"); 
150
    }
151
    // public void F(); - not implenented
152
}
153
</code></pre>
154
155 1 Александр Александров
h3. Может ли объект получить доступ к private-переменной класса? Если, да, то каким образом?
156
157 2 Александр Александров
Вообще доступ у приватной переменной класса можно получить только внутри класса, в котором она объявлена. Также доступ к приватным переменным можно осуществить через механизм _Java Reflection API._
158 1 Александр Александров
159 2 Александр Александров
h3. Для чего в java статические блоки?
160
161
Статические блоки в java выполняются до выполнения конструктора, с помощью них инициализируют статические поля к примеру. 
162
163
<pre><code class="java">
164
static final int i;
165
static {
166
    i = 10;
167
}
168
</code></pre>
169
170
Еще один ньюанс, блок статической инициализации может создаваться сам при компиляции программы.
171
172
Например:
173
174
<pre><code class="java">
175
public static int MAX = 100;
176
</code></pre>
177
178
Будет создан код:
179
180
<pre><code class="java">
181
public static int MAX;
182
static {
183
    MAX = 100;
184
}
185
</code></pre>
186
187 1 Александр Александров
h3. Можно ли перегрузить static метод?
188
189 2 Александр Александров
Статические методы могут перегружаться нестатическими и наоборот - без ограничений. А вот в переопределении статического метода смысла нет.
190
191 1 Александр Александров
h3. Расскажите про внутренние классы. Когда вы их будете использовать?
192
193 2 Александр Александров
Внутренний класс - это класс, который находится внутри класса или интерфейса. При этом он получает доступ ко всем полям и методам своего внешнего класса. Для чего он может применятся? Например чтоб обеспечить какую-то дополнительную логику класса. Хотя использование внутренних классов усложняет программу, рекомендуется избегать их использование.
194
195 1 Александр Александров
h3. В чем разница между переменной экземпляра и статической переменной? Приведите пример.
196
197 2 Александр Александров
Статические переменные инициализируются при загрузке класса класслодером, и не зависят от объекта. Переменная экземпляра инициализируется при создании класса.
198
199
Пример: 
200
201
Например нам нужна глобальная переменная для всех объектов класс, например число посещений пользователей определенной статьи в интернете. При каждом новом посещении статьи создается новый объект и инкрементируется переменная посещений.
202
203 1 Александр Александров
h3. Приведите пример когда можно использовать статический метод?
204
205 2 Александр Александров
Статические методы могут быть использованы для инициализации статических переменных. Часто статические методы используются в классах утилитах, таких как Collections, Math, Arrrays
206 1 Александр Александров
207 2 Александр Александров
h3. Расскажите про классы- загрузчики и про динамическую загрузку классов.
208
209
Любой класс, используемый в джава программу так или иначе был загружен в контекст программы каким-то загрузчиком. Все виртуальные машины джава включают хотябы один загрузчик классов, так называем базовый загрузчик. Он загружает все основные классы, это классы из rt.jar. Интересно то, что этот загрузчик никак не связан с программой, тоесть мы не можем получить например у java.lang.Object имя зарузчика, метод getClassLoader() вернет нам null. Следующий загрузчик - это загрузчик расширений, он загружает классы из $JAVA_HOME/lib/ext. Далее по иерархии идет системный загрузчик, он загружает классы, путь к которым указан в переменно класпас. Для примера предположим что у нас есть некий пользовательский класс MyClass и мы его используем. Как идет его загрузка :
210
211
Сначала системный загрузчик пытается найти его в своем кэше загрузок его, если найден - класс успешно загружается, иначе управление загрузкой передается загрузчику расширений, он также проверяет свой кэш загрузок и в случае неудачи передает задачу базовому загрузчику. Тот проверяет кэш и в случае неудачи пытается его загрузить, если загрузка прошла успешно - загрузка закончена. Если нет - передает управление загрузчику расширений. Загрузчик расширений пытается загрузить класс и в случае неудачи передает это дело системному загрузчику. Системный загрузчик пытается загрузить класс и в случае неудачи возбуждается исключение java.lang.ClassNotFoundException. 
212
213
Вот так работает загрузка классов в джава. Так называемое делегирование загрузки. Если в системе присутствуют пользовательские загрузики, то они должны быть унаследованы от класса java.lang.ClassLoader .
214
215 1 Александр Александров
h3. Что такое статическая и что такое динамическая загрузка класса?
216
217 2 Александр Александров
Статическая загрузка класса происходит при использовании оператора "new". Динамическая загрузка происходит "на лету" в ходе выполнения программы с помощью статического метода класса Class.forName(имя класса). Для чего нужна динамическая загрузка? Например мы не знаем какой класс нам понадобится и принимаем решение в ходе выполнения программы передавая имя класса в статический метод forName().
218
219 1 Александр Александров
h3. Для чего нужен оператор "assert" в джава?
220
221 2 Александр Александров
Это так называемый оператор утверждений. Он проверяет некое условие, если оно ложно, то генерируется AssertationError 
222
223
assert status: "message error"; 
224
225
Тут проверяется булевская переменная "status".
226
227 1 Александр Александров
h3. Почему в некоторых интерфейсах вообще не определяют методов?
228
229 2 Александр Александров
Это так называемые интерфейсы - маркеры. Они просто указывают что класс относится к определенной группе классов. Например интерфейс Clonable указывает на то, что класс поддерживает механизм клонирования. Степень абстракции в данном случае доведен до абсолюта. В интерфейсе вообще нет никаких объявлений.
230
Интерфейси-маркери в Java:
231
* Searilizable interface
232
* Cloneable interface
233
* Remote interface
234
* ThreadSafe interface
235
236 1 Александр Александров
h3. Какая основная разница между String, StringBuffer, StringBuilder?
237 2 Александр Александров
238
String - неизменяемый класс, тоесть для для добавление данных в уже существующую строку, создается новый объект строки. StringBuffer и StringBuilder могут изменятся и добавление строки не такое дорогостоющее с точки зрения памяти. Первы - синхронизированный, второй - нет. Это их единственное различие. Правда если нам нужно сделать подстроку строки, то лучше использовать String, так как ее массив символов не меняется и не создается заново для новой строки. А вот в StringBuffer и StringBuilder для создания подстроки создается новый массив символов.
239 1 Александр Александров
240
h3. Расскажите про потоки ввода-вывода Java.
241
242
h3. Что такое Heap и Stack память в Java?
243
244
h3. Какая разница между Stack и Heap памятью в Java?
245
246
h3. Расскажите про модель памяти в джава?
247
248
h3. Как работает сборщик мусора (garbage collector)?
249
250
h3. Расскажите про приведение типов. Что такое понижение и повышение типа? Когда вы получаете ClassCastException?
251
252
h3. Что такое статический класс, какие особенности его использования?
253
254
h3. Каким образом из вложенного класса получить доступ к полю внешнего класса.
255
256
h3. Какие существуют типы вложенных классов? Для чего они используются?
257
258
h3. Возможно ли при переопределении (override) метода изменить:
259
260
h3. Модификатор доступа
261
262
h3. Возвращаемый тип
263
264
h3. Тип аргумента или количество
265
266
h3. Имя аргументов
267
268
h3. Изменять порядок, количество или вовсе убрать секцию throws?
269
270
h3. Что такое autoboxing?
271
272
h3. Что такое Generics?
273
274
h3. Какова истинная цель использования обобщенных типов в Java?
275
276
h3. Каким образом передаются переменные в методы, по значению или по ссылке?
277
278
h3. Какие методы есть у класса Object?
279
280
h3. Правила переопределения метода Object.equals().
281
282
h3. Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
283
284
h3. Какая связь между hashCode и equals?
285
286
h3. Каким образом реализованы методы hashCode и equals в классе Object?
287
288
h3. Что будет, если переопределить equals не переопределяя hashCode? Какие могут возникнуть проблемы?
289
290
h3. Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode?
291
292
h3. Для чего нужен метод hashCode()?
293
294
h3. Правила переопределения метода Object.hashCode().
295
296
h3. Расскажите про клонирование объектов. В чем отличие между поверхностным и глубоким клонированием?
297
298
h3. Правила переопределения метода Object.clone().
299
300
h3. Где и как вы можете использовать закрытый конструктор?
301
302
h3. Что такое конструктор по умолчанию?
303
304
h3. Опишите метод Object.finalize().
305
306
h3. Чем отличаются слова final, finally и finalize?
307
308
h3. Опишите иерархию исключений.
309
310
h3. Какие виды исключений в Java вы знаете, чем они отличаются?
311
312
h3. Что такое checked и unchecked Exception?
313
314
h3. Как создать свой unchecked Exception?
315
316
h3. Какие есть Unchecke exeption?
317
318
h3. Что такое Error?
319
320
h3. Опишите работу блока try-catch-finally.
321
322
h3. Возможно ли использование блока try-finally (без catch)?
323
324
h3. Всегда ли исполняется блок finally?
325
326
h3. Какие есть особенности класса String? что делает метод intern().
327
328
h3. Можно ли наследовать строковый тип, почему?
329
330
h3. Почему строка является популярным ключом в HashMap в Java?
331
332
h3. Дайте определение понятию конкатенация строк.
333
334
h3. Как перевернуть строку?
335
336
h3. Как сравнить значение двух строк?
337
338
h3. Как обрезать пробелы в начале и конце строки?
339
340
h3. Дайте определение понятию "пул строк".
341
342
h3. Можно ли синхронизировать доступ к строке?
343
344
h3. Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?
345
346
h3. Почему строка неизменная и финализированная в Java?
347
348
h3. Напишите метод удаления данного символа из строки.
349
350
h3. Что такое рефлексия?
351
352
h3. Что произойдет со сборщиком мусора (GC), если во время выполнения метода finalize() некоторого объекта произойдет исключение?
353
354
h3. Что такое интернационализация, локализация?
355
356
h3. Что такое Аннотации в Java?
357
358
h3. Какие функции выполняет Аннотации?
359
360
h3. Какие встроенные аннотации в Java вы знаете?
361
362
h3. Что делают аннотации @Retention, @Documented, @Target и @Inherited?
363
364
h3. Что делают аннотации @Override, @Deprecated, @SafeVarargs и @SuppressWarnings?
365
366
h3. Какой жизненный цикл аннотации можно указать с помощью @Retention?
367
368
h3. К каким элементам можно применять аннотацию, как это указать?
369
370
h3. Как создать свою Аннотацию?
371
372
h3. Атрибуты каких типов допустимы в аннотациях?
373
374
h3. Что такое JMX?
375
376
h3. Какие выгоды предлагает JMX?
377
378
h3. Что еще умеет JMX кроме дистанционного управления?
379
380
h3. Что такое MBean?
381
382
h3. Какие типы MBeans существуют?
383
384
h3. Что такое MBean Server?
385
386
h3. Какие механизмы обеспечивают безопасность в технологии Java?
387
388
h3. Назовите несколько видов проверок которые выполняет верификатор байт-кода Java?
389
390
h3. Что вы знаете о "диспетчере защиты" в Java?
391
392
h3. Что такое JAAS?
393
394
h3. Что такое Рефакторинг?
Go to top