Java — Вопрос по java


Содержание

Вопросы по Java на собеседовании (1)

1. Принципы объектно-ориентированного программирования (ООП)
2. Class и его свойства
3. Методы базового суперкласса Object
4. Отношения между классами : ассоциация, агрегация и композиция
5. Конструкторы класса
6. Абстрактный класс
7. Статический класс и его свойства
8. Модификаторы свойств класса
9. Использование this и super
10. Сигнатура метода
11. Переопределение и перегрузка методов
12. Инициализация статических полей
13. Использование оператора instanceof
14. Использование модификатора final
15. Порядок инициализации статических полей потомка и его предка
16. Определения понятия «интерфейса»
17. Вложенные и внутренние классы
18. Аннотации классов
19. Использование метода finalize
20. Отличие final, finally, finalize

1. Принципы объектно-ориентированного программирования (ООП)

Объе́ктно-ориенти́рованное программи́рование (ООП) — это методология программирования, основанная на представлении программного обеспечения в виде совокупности объектов, каждый из которых является экземпляром определенного класса. Базовой основой любого класса является Object, включающий определенный набор методов.

Основные принципы ООП : абстракция, инкапсуляция, наследование, полиморфизм.

Абстракция означает выделение значимой информации и исключение из рассмотрения незначимой. С помощью принципа абстракции программа разбивается на объекты. Информация в программе обрабатывается в виде цепочки действий между отдельными объектами. Главное достоинство абстракции связано с тем, что она позволяет отделить реализацию объектов от их описания.

Так, например, с точки зрения описания должности её наименование является значимой информацией, а описание обязанностей должности относится ко второстепенной информации. Наименования должностей определяют справочник должностей и используются для определения штатного состава компании, в то время как описания обязанностей носят только информационный характер.

Инкапсуляция (encapsulation) — это свойство объединения данных и методов в одном классе, позволяющее отделить внутреннее представление от внешнего (интерфейса). Инкапсуляция позволяет закрыть доступ к полям и методам класса другим объектам, либо предоставить доступ к полям класса через свои методы. Можно сказать, что, с точки зрения java, инкапсуляция – это «сокрытие реализации».

При использовании ООП желательно использовать непрямой доступ к свойствам (полям) какого-либо класса из методов других классов. Для этого в классе необходимо предусмотреть соответствующие методы.

Наследование — это свойство, позволяющее одному классу получить все или отдельные свойства другого класса. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс, наследующий свойства базового, является потомком, наследником, дочерним или производным классом.

Полиморфизм (polymorphism) — это свойство позволяет использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Полиморфные объекты наследуют один и тот же базовый класс; не обязательно, что базовый класс является родителем, он может «быть предком в третьем колене».

В качестве примера можно рассмотреть набор различных геометрических фигур (прямоугольник, квадрат, круг), которые используются в программе для рисования. Для всех этих объектов желательно создать базовый класс, в который включить поля описания параметров объекта и метод отображения в интерфейсе. Значения параметров и код методов будут определены (переопределены) в наследниках.

Подробное описание и примеры ООП представлены здесь.

2. Class и его свойства

Класс (Class) – это шаблон описания одного или нескольких объектов. Объект представляет экземпляр класса. Шаблон (класс) включает свойства, определяемые характеристиками объектов (полями объекта) и методами их управления. Поля класса определяют, например, такие характеристики объекта, как вес, размер, цвет, площадь и т.д. Методы класса позволяют «оперировать» его полями – определять значение (методы set), выдавать значение (методы get) и т.д.

Class может наследовать свойства другого класса. Первоосновой любого класса является суперкласс Object. Пример класса :

В примере представлен класс прямоугольника Rectangle, наследующий свойства класса (фигуры) Shape, и включающий переопределенные методы draw базового класса Shape и toString суперкласса Object. Метод toString возвращает описанные в Shape свойства класса width и height в текстовом виде. При описании свойств класса был использован модификатор public.

Более подробное описание класса с примерами представлено здесь.

3. Методы суперкласса Object

Object является базовым суперклассом для всех остальных объектов/классов Java, т.е. каждый класс наследует свойства Object. Соответственно все классы наследуют следующие методы суперкласса Object :

public final native Class getClass(); возвращает в run-time класс данного объекта;
public native int hashCode(); возвращает hash-код;
public boolean equals(Object obj); сравнивает текущий клас с объектом obj;
protected native Object clone() throws CloneNotSupportedException; клонирование объекта;
public String toString(); возвращает строковое представление объекта;
public final native void notify(); возобновление работа потока, находящегося в ожидании освобождения «монитора» данного объекта;
public final native void notifyAll(); возобновление работы всех потоков, находящихся в ожидании освобождения «монитора» данного объекта;
public final native void wait(long timeout) throws InterruptedException; поток переходит в режим ожидания в течение указанного времени timeout;
public final void wait(long timeout, int nanos) throws InterruptedException; переход потока в режим ожидания в течение указанного времени timeout;
public final void wait() throws InterruptedException; перевод потока в ожидание, пока другой поток не вызовет notify() или notifyAll() методы для этого объекта;
protected void finalize() throws Throwable; вызывается сборщиком мусора, когда garbage collector определил, что ссылок на объект больше нет.

Подробное описание с примерами использования методов hashCode и equals представлено в разделе безопасности. Примеры использования методов многопочного программирования wait, notify, notifyAll c описанием класса Thread (поток) и интерфейса Runnable можно увидеть здесь. Метод finalize описан ниже.

4. Отношения между классами : ассоциация, агрегация и композиция

Ассоциация — это отношение, при котором объекты одного типа определенным образом связаны с объектами другого типа. Так объект одного типа может содержать или использовать объект другого типа. Например, игрок Player играет в определенной команде Team. В этом случае класс Player будет связан отношением ассоциации с классом Team. Таким образом, идея ассоциации достаточно простая — два объекта могут быть между собой связаны и это надо как-либо образом описать.

Агрегация и композиция являются разновидностью ассоциации при отношении между целым и его частями.

Агрегация определяет отношение одного объекта к другому. Так, например, студент может посещать дополнительные факультативные занятия.

Композиция определяет более «жесткое отношение», при котором один объект может быть только частью другого объекта. Например Машина и Двигатель : двигатель может существовать отдельно без машины, но он не может быть в двух или трех машинах одновременно, в отличии от студента, который может посещать различные факультативные занятия.

5. Конструкторы класса

Конструктор класса — это специальный метод, вызываемый при создании нового объекта. Наименование конструктора совпадает с именем класса с учетом регистра. По синтаксису конструктор похож на метод без возвращаемого значения. Класс может включать несколько конструкторов, которые отличаются друг от друга параметрами. Конструктор с параметрами используется для инициализации полей класса.

Примечание : сериализованный класс обязательно должен включать конструктор без параметров.

6. Абстрактный класс

Класс может быть объявлен абстрактным при помощи ключевого словом ‘abstract’. Абстрактный класс не предполагает создания экземпляров, а может быть использован только как базовый класс. Таким образом, абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может как содержать, так и не содержать абстрактные методы. Абстрактный метод базового класса должен быть переопределен для его неабстрактных потомков; в базовом классе абстрактный метод только описывается.

Пример абстрактного класса представлен здесь.

7. Статический класс и его свойства

Класс или его свойства могут быть объявлены статическими при помощи ключевого словом ‘static’. При обращении к статическим свойствам класса необходимо в префиксе указывать наименование класса. Статический класс может обращаться к нестатическим членам класса только при помощи объекта реализации класса.

В java можно использовать статический импорт, применяемый для импорта статических членов класса или интерфейса. Так, например, для импорта статических методов Math.pow() и Math.sqrt() можно использовать в секции import следующий код :

Статический импорт позволяет использовать вызов методов без наименования класса в префиксе.

8. Модификаторы свойств класса

Модификаторы класса позволяют определить уровень доступа к свойству класса. В java существуют следующие модификаторы доступа :

public (открытый) : поле и метод доступны всем;
protected (защищённый) : поле и метод доступны всем классам пакета и наследникам;
private (закрытый) : поле и метод доступны только методам этого класса;
без модификатора : default, friendly, доступ по умолчанию только внутри своего собственного пакета.

Примечание : конструктор класса также может иметь модификатор. Если класс имеет единственный конструктор с модификатором private, то невозможно создать объект данного класса. От такого класса нельзя наследоваться. При попытке наследования будет выдаваться ошибка :
There is no default constructor available in nameClass
А при попытке создать объект этого класса:
nameClass() has private access in nameClass

Можно ли обойти отмеченное выше Примечание? Можно, если в этом классе создать метод, который возвращает экземляр данного класса. Пример :

А теперь, создаем объект класса, у которого единственный конструктор с модификатором private. Конечно, new TestPrivate() здесь не пройдет, но решить данную задачу с использованием внутреннего статического метода можно.

9. Использование this и super

Чтобы обратиться к свойству текущего класса используют this, а к свойству базового класса — super. Так, например, в следующем примере класс Dog наследует свойства класса Animal и переопределяет метод eat(). Для обращения к переопределенному методу eat() своего класса используется вызов this.eat() в методе thisEat. Но, чтобы обратиться из наследника Dog к методу eat() базового класса Animal используется вызов super.eat() в методе superEat.

Более подробное описание наследования и пример использования this и super представлено здесь.

10. Сигнатура метода

Сигнатура метода (method signature) включает наименование метода с параметрами. При этом порядок параметров методов имеет значение. В сигнатуру метода не входят модификаторы, возвращаемое значение и вызываемые методом исключения. Также в сигнатуры не включены операнды synchronized, native и аннотация метода.

11. Переопределение и перегрузка методов

Если в иерархии классов сигнатура метода класса-наследника совпадает с сигнатурой метода родительского класса, то метод подкласса переопределяет метод базового класса. Вызов переопределённого метода из своего подкласса всегда ссылается на версию, определённую подклассом, а версия метода родительского класса будет скрыта. Чтобы вызвать «переопределенный» метод родительского класса следует использовать super.

В одном java-классе можно создавать несколько методов с одинаковыми наименованиями, но разными сигнатурами. Создание метода с тем же именем, но с другим набором параметров называется перегрузкой. На основе фактических параметров JVM определяет какой из перегруженных методов класса должен выполняться при вызове.

Статические методы могут быть перегружены нестатическими. При вызове из другого класса статического метода используется наименование класса, при вызове нестатического метода – объект реализации.

12. Инициализация статических полей

Статические поля можно инициализировать в статическом или динамическом блоке инициализации, а также при объявлении. Следующий пример демонстрирует инициализацию статических полей при объявлении и в статическом блоке.

Динамический блок является дополнением к конструктору. В следующем коде роль динамического блока играет процедура init :

Статические блоки в java выполняются до выполнения конструктора. С их помощью инициализируются статические поля.

13. Использование оператора instanceof

Оператор instanceof позволяет проверить принадлежность объекта к определенному классу/родителю. Выражение возвращает true, если объект является экземпляром класса или его потомком. В следующем примере демонстрируется использование оператора instanceof в различных условиях :

14. Использование модификатора final

Модификатор final может быть применен к полям, методам или классам. Смысл в его применении зависит от сущности, к которой он применен :

  1. Класс с модификатором final не может иметь наследников.
  2. Метод с модификатором final не может быть переопределен в классах наследниках.
  3. Поле помеченное при помощи слова final не может изменить свое значение после инициализации. Инициализируется поле либо при описании, либо в конструкторе, либо в статическом или динамическом блоке.
  4. Значение локальных переменных, а также параметров метода помеченных при помощи слова final не могут быть изменены после присвоения.

15. Порядок инициализации статических полей потомка и его предка

Статические поля класса могут быть инициализированы как при объявлении, так и в статических и динамических блоках. Сначала по-порядку вызываются все статические блоки от первого предка до последнего наследника. После этого попарно от предка до последнего потомка вызываются динамические блоки инициализации и конструкторы.

16. Определения понятия «интерфейса»


Ключевое слово «интерфейс» (interface) используется для описания полностью абстрактного класса. В описании интерфейса определяются статические поля и методы без тела (кода). Описание методов интерфейса выполняется в классе, реализующим данный интерфейс.

Реализация интерфейса «определяет поведение» класса. Т.е. именно так должны выглядеть все классы, которые реализуют данный интерфейс : включать статические поля и методы. Таким образом, любой класс, реализующий конкретный интерфейс, «знает» только те статичесие поля и методы, которые представлены в интерфейсе, но не более этого (наследование и реализация в несколько поколений расширяет диапазон статических полей и методов наследника).

Пример описания интерфейса SomeInterface и его реализации в классе SomeClass :

По умолчанию все поля, описанные в интерфейсе автоматически являются статическими (static) и неизменными (final). Все методы и переменные неявно объявляются как public. Начиная с 8-ой версии Java в интерфейсе можно объявлять static методы, но они должны включать тело метода.

Методы в интерфейсе нельзя объявлять с модификатором final, т.к. данный модификатор предполагает, что метод нельзя переопределить. Но все методы интерфейса по умолчанию являются абстрактными и должны быть переопределены в классах-реализации.

Описание и пример использования интерфейса представлено здесь.

17. Вложенные и внутренние классы

Вложенный класс (nested classes) представляет собой класс, который объявлен внутри объявления другого класса. Вложенные классы могут быть статическими и нестатическими. Нестатические вложенные классы имеют и другое название — внутренние классы (inner classes).

Внутренние Java классы делятся на три вида :

  • внутренние классы-члены;
  • локальные классы;
  • анонимные классы.

Внутренние классы-члены (member inner classes) ассоциируются не с самим внешним классом, а с его экземпляром. Такие классы имеют доступ ко всем полям и методам внешнего класса.

Локальные классы (local classes) определяются в блоке java кода. На практике чаще всего объявление происходит в методе некоторого другого класса. Хотя объявлять локальный класс можно внутри статических и нестатических блоков инициализации.

Анонимный класс (anonymous class) — это локальный класс без имени.

Из внутреннего нестатического класса можно обратиться к нестатическому полю внешнего класса с использованием наименования внешнего класса и оператора this. Например, OuterClass.this.fieldName.

Примечание : использование вложенных классов приводит к некоторому нарушению инкапсуляции, поскольку вложенный класс может обращаться к закрытым членам внешнего класса, но не наоборот.

Описание и пример использования вложенных (внутренних) классов представлено здесь.

18. Аннотации классов

Аннотация («annotation») в языке Java – это специальная форма метаданных, которая может быть добавлена в исходный код. Аннотированы могут быть пакеты, классы, методы, переменные и параметры. Аннотации стали доступны в самом языке начиная с 5-ой версии Java. В 6-ой версии Java аннотации были интегрированы в компилятор javac.

Имеются встроенные широко используемые аннотации, которые отслеживаются средой разработки IDE и применяются к методу класса :

  • @Override — проверка переопределения метода. IDE вызывает предупреждение компиляции, если метод не найден в родительском классе;
  • @Deprecated — IDE отмечает, что метод устарел и вызывает предупреждение компиляции, если метод используется.
  • @SuppressWarnings — аннотация указывает IDE подавить предупреждения компиляции.

Аннотации, применяемые к другим аннотациям :

  • @Retention — определяет режим хранения аннотации (в исходном коде или в скомпилированном классе);
  • @Documented — отмечает аннотацию для включения в документацию;
  • @Target — отмечает аннотацию как ограничивающую (какие элементы java-аннотации могут быть к ней применены);
  • @Inherited — отмечает, что аннотация может быть расширена подклассами аннотируемого класса.

Подробнее об аннотациях можно прочитать здесь.

19. Использование метода finalize

Метод finalize предназначен для автоматического освобождения системных ресурсов, занимаемых объектом. Это может быть удобным, чтобы постоянно не помнить, что, например, необходимо закрыть соединение с каким-либо ресурсом.

Можно использовать finalize для чистки данных. Но, во-первых, нет гарантии, что он будет вызван, если где-то в коде осталась ссылка на объект. Ну, и во-вторых, нет гарантии на то, что метод будет вызван сразу. Это связано с тем, что если в объекте переопределен метод finalize, то он вызывается не сразу, а помещается в очередь, которая обрабатывается специально созданным для этого потоком. Следует отметить, что в очередь на «финализацию» попадают только те объекты, в которых переопределен метод finalize.

Цукерберг рекомендует:  Блестящие примеры ценовых таблиц для вашего вдохновения

Порядок очистки объектов

Cборщик мусора Garbage Collector не вызывает методы finalize() напрямую (по крайней мере, в HotSpot 1.6), а только добавляет соответствующие объекты в специальный список, вызывая статический метод java.lang.ref.Finalizer.register(Object). Объект класса Finalizer формирует двусвязный список ссылок на объекты, для которых необходимо вызвать finalize(). Т.е. в списке хранятся ссылки на следующий и предыдущий finalize().

Непосредственный вызов методов finalize() происходит в отдельном потоке «Finalizer» (java.lang.ref.Finalizer.FinalizerThread), который создаётся при запуске виртуальной машины, а точнее в статической секции при загрузке класса Finalizer. Методы finalize() вызываются последовательно в том порядке, в котором были добавлены в список сборщиком мусора. Соответственно, если какой-то finalize() зависнет, то он подвесит поток «Finalizer», но не сборщик мусора. Таким образом, если объект не имеет метода finalize(), то он будут исправно удаляться, а вот объекты с методом finalize будут увеличивать очередь до тех пор, пока «не отвиснет» поток «Finalizer», не завершится приложение или не кончится память.

Есть вероятность того, что метод finalize() не будет вызван совсем. Это может произойти в том случае, когда сборщик мусора будет готов вызвать метод объекта, но программа завершила свою работу.

20. Отличие final, finally, finalize

У этих операторов общим является только корень final, и то, что они являются зарезервированными словами в Java.

final — модификатор, применяющийся к классам, методам, переменным.

finally является частью конструкции try-catch-finally, где играет роль блока, который выполняется независимо от событий происходящих в try-catch и выполняется в любом случае.

Собеседование на java-программиста (java-developer interview). Часть 2: Вопросы

Это продолжение цикла статей о собеседовании на java-программиста:

Java-related технологии и фреймворки рождаются и умирают, а без знания java core далеко не уедешь. Как можно знать Hibernate, но не знать JDBC и SQL? Как можно разбираться в Spring MVC или Struts, но при это плавать в сервлетах? Как можно пользоваться блокирующими очередями, экзекьюторами и локами, но при этом не понимать, как работают wait/notify? Для меня это до сих пор остается загадкой.

С другой стороны, меня иногда удивляют вопросы сотрудников, которые они задают кандидатам. Зачем спрашивать о Vector и Hashtable — на дворе уже скоро 4-ое тысячелетие. Или «зачем нужен UNION»? Так и хочется ответить — для SQL-инъекций. На счет паттернов проектирования и UML я вообще молчу — неужели до сих пор не наигрались? Но это еще полбеды. Иногда интервьюеры сами допускают довольно грубые ошибки. Об этом чуть позже.

Ниже приведен список вопросов (точнее небольшая его часть), которые я задаю на собеседовании, с моими комментариями. Вся прелесть в том, что в зависимости от позиции (junior java developer, mid-level, senior developer) и специализации некоторые из вопросов превращаются в более короткие либо более продолжительные диалоги с кандидатом и проверяют не только технические знания, но и умение мыслить и делать логические умозаключения. После многих пунктов вы найдете ссылки на статьи по соответствующей тематике.

[Disclamer: В статье выражается до безобразия субъективное мнение. Резкие выражения используются исключительно для донесения своих мыслей до читателя: никого обижать я не собирался и не собираюсь. Людям с расшатанной психикой или зашкаливающим ЧСВ читать, и тем более комментировать, категорически воспрещается. К спамерам и троллям это не относится: каждый ваш комментарий как лучик света в этом царстве тьмы, и дай вам бог всем здоровьечка.]

Вопросы собеседования по Core Java

Для позиций типа Senior эти вопросы можно пропустить. Но иногда все же стоит перестраховаться.

1. Модификаторы в Java.

Особо глубоко спрашивать не нужно — вкратце о назначении и вариантах использования. Можно спросить о контекстах использования этих модификаторов (класс/поле/метод). Подробные вопросы о модификаторах доступа, расширении модификаторов при наследовании, переопределение и сокрытие методов, модификатор abstract и final для классов/методов лучше оставить для вопросов по ООП в Java. Подробное знание модификаторов synchronized и volatile можно проверить в вопросах по многопоточности.

Небольшая статья про модификаторы — здесь.

2. Иерархия коллекций в Java.

Рассматриваем Collection, Set, List, Queue, Map и их основные реализации. Можно в принципе спросить о методах, которые есть в интерфейсе Collection, но лучше не надо. Стоит поинтересоваться, какими коллекциями человек пользовался, но опять же без фанатизма. Напоминаю, Vector и Hashtable (и Stack кстати тоже) — прошлый век, тем более в случае работы с legacy кодом всегда можно посмотреть сорцы. Еще можно поговорить о массивах, а следующий код может привести к интересному диалогу:

По поводу свойств и контракта equals/hashCode спросить стоит и о поломке коллекций тоже, но сильно не увлекайтесь, так как это может привести к любимому вопросу большинства интервьюеров об устройстве HashMap. В свою очередь это напрямую ведет нас к вопросам о структурах данных, алгоритмах и их сложности. Мое мнение по этому поводу — с алгоритмами хорошо знакомы олимпиадники и те, у кого в университете это преподавалось на должном уровне. Мне, например, в этом плане не повезло ни с тем, ни с другим. И разбирался в алгоритмах/АТД по ходу своей работы только тогда, когда возникали соответствующие задачи или просто было время и желание почитать и осознать. В результате — quick sort, merge sort, radix sort напишу; hash map, linked list, binary search tree напишу; semaphore, thread pool, blocking queue тоже напишу. Что-то еще нужно? Окей, напишу.

Что делать, если шило все же мешает и хочется хоть раз в жизни показать свои глубочайшие знания в области алгоритмов и структур данных и без того напуганному кандидату. Начнем с того, что такие вопросы стоит задавать только senior разработчику и только если задачи такого плана встречаются на проекте достаточно часто (что встречается достаточно редко). Так уж и быть, спрашивайте об устройстве HashMap и скорости поиска, об устройстве LinkedList и сложности операций над ним. Можно попросить, чтобы человек своими словами рассказал, откуда в quick/merge sort берется log2n. Можно еще какую-нибудь задачу алгоритмическую задать. Но помните, возможно с этим человеком вам еще придется работать в одной команде.

3. Иерархия исключений и ошибок.

Тут как бы все понятно, но бывает, что люди не знают элементарных вещей. Стоит спросить об иерархии, о checked и unchecked ошибках/исключениях, когда используются те или иные, как и когда их нужно обрабатывать. Можно даже начать небольшой диалог по поводу OutOfMemoryError. Если человек знаком с JDBC, можно поговорить об SQLException и поинтересоваться, оно chekced или unchecked и нормально ли это по мнению кандидата.

Ответ на этот вопрос можно найти здесь

4. Вложенные классы в Java.

Некоторые считают, что этот вопрос не нужен. Лично я так не думаю. Стоит спросить о классификации, вариантах использования, о нарушении инкапсуляции и самое интересное — зачем они нужны по мнению кандидата.

Моя статья о вложенных классах на Quizful — здесь.

И статья об анонимных классах — здесь.

Вопросы по ООП в Java

5. Основы ООП

Здесь уже подробно рассматриваем модификаторы доступа и прочие вещи, которые я упомянул в комментариях к первому вопросу. Можно спросить об интерфейсах и абстрактных классах. Пусть человек своими словами расскажет о полиморфизме и инкапсуляции. Если хотите послушать рассуждения человека, можно спросить о таком фрагменте кода:

Как продолжение, на этом же примере можно поговорить о расширении/сужении типов в аргументах переопределяемых методов в случае, если бы в Java список формальных параметров не входил бы в сигнатуру метода.

6. Паттерны проектирования

Напоминаю, не стоит глубоко спрашивать о паттернах проектирования. И ни в коем случае не поучайте кандидата рассказами о том, «насколько они полезные» и «как их правильно реализовывать». Кстати, по поводу красоты/понятности кода и быстроты его написания мой друг говорит следующее: «Чтобы уметь круто хачить на Java, нужно дохера хачить на Java».


Каталог паттернов проектирования можете найти здесь

Вопросы собеседования по многопоточности в Java

7. Многопоточность в Java.

Хочу посвятить этой теме цикл статей: одним абзацом не отделаешься. Если вкратце, спросите, зачем нужна многопоточность, что такое монитор объекта, спросите о модификаторах syhcnronized и volatile, методах wait/notify/notifyAll, а так же о пакете java.util.concurrent. А следующий фрагмент кода должен привести к достаточно интересному разговору:

Интересная статья про методы wait/notify доступна здесь.

Вопросы, связанные с базами данных

8. SQL

Для начала стоит задавать вопросы по ANSI SQL. Далее, в зависимости от СУБД, используемой на проекте, можно спрашивать о важных отличиях ее диалекта. Итак, пусть человек расскажет об основных элементах баз данных — таблицах, процедурах, функциях, констрейнтах и т.д. О констрейнтах можно поспрашивать чуть подробнее. Стоит поинтересоваться, как человек понимает null в базах данных. Переходите к агрегатным функциям и о том, как они работают с null, не забудьте о group by и having. Можно дать пару маленьких задачек на эту тему (см. задачи 1-2 ниже). Поспрашивайте о типах join и дайте пару задачек (см. задачи 3-4 ниже).

Задача 1. Дана таблица T с колонкой A целого типа, содержащая значения 10, 20, 30, null. Чему будут равны результаты выражений «AVG(A)» и «SUM(A) / COUNT(*)»?

Задача 2. Дана таблица T с колонкой A целого типа. Напишите запрос, который вернет все положительные значения встречающиеся в таблице более одного раза.

Задача 3. Даны таблицы T1 и T2. В каждой есть колонка A целого типа. Значения в первой таблице — 1, 2, а во второй — 2, 3. Что вернут запросы с inner join, left/right/full outer join и cross join вида «select T1.A, T2.A from T1 . join T2 on T1.A = T2.A».

Задча 4. Даны 2 таблицы с колонками A целого типа. Напишите запрос, который вернет все значения колонки А из первой таблицы, для которой нет соответствия в колонке A второй.

Статья о конструкции Join доступна здесь

9. JDBC API

Тут тоже без особых извращений. Спросите о Connection, Statement, PreparedStatement, CallableStatement, ResulSet, зачем каждая из этих сущностей нужна. Можно поинтересоваться о том, чем они являются: абстрактными классамм, конкретными классами или интерфейсами и почему.

Еще вопросы — как создать соединение в JDBC, каким образом лучше добавлять большое количество записей в таблицу, ну и обязательно о транзакциях и autocommit. Чуть не забыл — вопрос об уровнях изоляции транзакций считаю как минимум странным — в следующий раз, когда решите его задавать, вспомните, сколько раз с уровнями изоляции сталкивались лично вы.

Читайте на блоге подробный туториал по JDBC.

Вопросы собеседования по веб-программированию

10. Servlet API

Для начала надо спросить об HTTP в целом. Что такое хедеры запроса, какие вообще типы запросов бывают, что такое HTTP Status Code.

Далее нужно спросить про класс HttpServlet, в каком виде можно работать с запросом и ответом. Что такое сессия (HttpSession) и как ее получить. Не забудьте спросить про ServletFilter и варианты их использования.

Организм требует сна. Статью завершу через некоторое время. Удачи всем.

Вопросы и ответы к собеседованию на Java junior

Вопросы к собеседованию на должность Java Junior.

Подготовка к собеседованию на должность Java Junior является неотъемлемой частью пути начинающего разработчика. Перед тем как начать обход потенциальных работодателей необходимо основательно подготовиться к встрече с ними. Очень важно постараться предусмотреть вопросы, которые Вам будут заданы техническими специалистами. Очень часто так бывает, что юный соискатель прочёл несколько книг, прошёл какой-либо курс и даже, возможно, написал своё приложение для демонстрации возможностей, но волнение или отсутствие ясной картины об языке или технологии в целом не дают связать и пары слов на собеседовании. Он смотрит на потенциального работодателя, всё понимает, но не знает как правильно изложить свои мысли.

Я постарался собрать наиболее полный список вопросов к собеседованию на должность java junior, большинство из которых Вы точно услышите при поиске своего первого места работы в отрасли java разработчика.

94)Как в java можно разделить вывод сообщений в системную консоль, а ошибок в файл?
95)Какая разница между интерфейсом и абстрактным классом?
96)Когда лучше использовать синхронизированный блок вместо синхронизированного метода?
97)Какое назначение у ключевого слова transient?
98)Как можно запустить сборщик мусора?
99)В чём разница между конструкторами и другими методами?
100)Объясните в чём смысл использования пакетов в Java?
101)В чём разница между J2SDK 1.5 и J2SDK 5.0?
102)Имеет ли значение, в каком порядке отлавливаются исключения FileNotFoundException и IOException, и почему?
103)Что произойдёт, если заменить && на & в следующем коде:

104)В чём главная разница между Vector и ArrayList?
105)В чём разница между очередью и стеком?
106)Назовите все состояния объекта Thread?
107)В какие состояния может перейти нить, при входе в блок synchronized?
108)В какое состояние перейдет нить, при вызове метода wait()?
109)В какое состояние перейдет нить, при вызове метода wait(500)?
110)В какое состояние перейдет нить, при вызове метода notify()?
111)В какое состояние перейдет нить, при вызове метода notifyAll()?
112)Три нити в блоке synchronized вызвали wait() у объекта-мютекса.
113)В какое состояние перейдут эти нити, если четвертая нить вызовет notifyAll()?
114)Чем отличается join(500) от wait(500)?
115)Чем отличается wait(500) от sleep(500)?
116)В какое состояние перейдет нить при вызове метода yield()?
117)Можно ли объявлять внутренние классы private?
118)Можно ли объявлять анонимные внутренние классы private?
119)Сколько у класса максимально может быть внутренних классов?
120)В чём смысл ключевого слова super в Java?

Переменные и методы суперкласса могут быть переопределены в классе-наследнике. В случае переопределения, подкласс определяет свои переменные и методы, используя имена переменных и методов суперкласса.
В результате переопределения подкласс больше не сможет обращаться к переменным и методам суперкласса напрямую, ведь они теперь оказываются скрытыми в пространстве имён подкласса. К счастью, в Java предусмотрен механизм доступа к переопределённым методам и переменным суперкласса — ключевое слово super. super может помочь при обращении к переменным, методам, конструкторам суперкласса.
Важный момент: при вызове конструктора суперкласса super должен быть первым выражением в конструкторе.

121)Какая разница между перегрузкой и переопределением методов в Java?
122)Благодаря чему приложения Java не зависят от платформы?
123)Что такое перегрузка(overloading) метода в Java?
124)Какие отличия между C++ и Java?
125)Что такое JIT компиляция?
126)Что такое байт-код?
127)Что такое класс(class)?
128)Что такое объект в Java?
129)Что такое метод в Java?
130)В чём смысл инкапсуляции?
131)Объясните почему у метода main() именно такая сигнатура (public, void, static)?
132)Что такое конструктор в Java?
133)В чём разница между length и length()?
134)Что такое ASCII?
135)Что такое Unicode?
136)Что такое и как используются константы в Java?
137)В чём разница между «>>» и «>>>» в Java?
138)Какие Вы знаете стандарты оформления кода?
139)Что такое «IS-A» отношение в Java?
140)Что такое «HAS-A» отношение в Java?
141)В чём разница между отношениями «HAS-A» и «IS-A»?
142)Объясните назначение оператора instanceof в java?
143)Что есть null в Java?
144)Можно ли иметь много классов одном файле?
145)Какие модификаторы доступа можно указывать для главного (top) класса?
146)Можно ли указывать более одного пакета в одном файле?
147)Можно ли объявлять пакет после объявления импорта файле?
148)Что такое ThreadGroup и зачем он нужен?
149)Что такое ThreadPool и зачем он нужен?
150)Что такое ThreadPoolExecutor и зачем он нужен?
151)Что такое Concurrency?
152)Что такое «атомарные типы» в Java?
153)Зачем нужен класс ThreadLocal?
154)Что такое модификатор volatile?
155)Что такое Executor?
156)Что такое ExecutorService?
157)Зачем нужен ScheduledExecutorService?
158)Назовите все состояния объекта Thread.
159)В какие состояния может перейти нить при входе в блок synchronized?
160)В какое состояние перейдёт нить при вызове метода wait()?
161)В какое состояние перейдёт нить при вызове метода wait(500)?
162)В какое состояние перейдёт нить при вызове метода notify()?
163)В какое состояние перейдёт нить при вызове метода notifyAll()?
164)Три нити в блоке synchronized вызвали метод wait() у объекта-мютекса. В какое состояние перейдут эти нити, если четвертая нить вызовет notifyAll()?
165)Чем отличается join(500) от wait(500)?
166)Чем отличается wait(500) от sleep(500)?
167)В какое состояние перейдёт нить при вызове метода yield()?
168)Какие модификаторы доступа могут использоваться с классами?
169)Перечислите модификаторы доступа у методов.
170)Расскажите об абстрактных классах в Java.
171)Можно ли описать конструктор в абстрактном классе?
171)Что такое абстрактный метод?
172)Что такое исключения в Java?
173)Назовите несколько вариантов применения механизма исключений.
174)Что такое перехват исключений в Java?
175)Сколько способ обработки исключений Вы знаете?
176)Назовите 5 ключевых слов, относящихся к механизму Java.
177)Можно ли использовать блок try без блока catch?
178)В чём важность блока finally?
179)Можно ли писать код между блоками try … catch?
180)Можно ли отлавливать более одного исключения в одном блоке catch?
181)Что такое проверяемое (checked exceptions) исключение?
182)Расскажите о непроверяемых (unchecked exceptions) исключениях.
183)Для чего служит ключевое слово throw?
184)Можно ли писать код после throw?
185)Для чего нужно ключевое слово throws?
186)Может ли быть так, что блок finally не будет выполнен? Если да, то когда?
187)Можно ли блоке catch перехватить проверяемое (checked) исключение?
188)Как можно создать собственное исключение?
189)Можно ли выбросить исключение из блока catch?
190)Можно ли использовать вложенность для блоков try?
191)В каком случае можно получить ClassNotFoundException?
192)Поток и процесс — это одно и тоже? Если нет, в чём разница?
193)Что такое многопоточность в Java?
194)Какие есть преимущества у многопоточного программирования?
195)Сколько способов создания потока (thread) Вы знаете?
196)Какой лучший подход создания потока(thread)?
197)Что Вы знаете о планировщике задач в JVM?
198)Можно ли стартовать мёртвую нить в Java?
199)Можно ли перезапустить нить после запуска?
200)Какие способы синхронизации Вы знаете?
201)Что такое синхронизированный метод?
202)Могут ли зайти в синхронизированный метод потоки, если в нём уже находится один поток?
203)Что такое синхронизированный блок в Java?
204)Могут ли статические методы быть синхронизированны?
205)Как в Java используются приоритеты потоков?
206)Как можно задать или изменить приоритет нити?
207)Если две нити имеют одинаковый приоритет, какая начнёт выполнение первой?
208)Получит ли шанс на повторное выполнение уступившая (yielded) нить?
209)Объясните важность метода join()
210)Что является демоном (daemon) в Java?
211)Объект или ссылку уничтожает сборщик мусора?
212)Когда и кто может вызывать finalize() метод в Java?
213)Приведите пример перечислений (enumeration) в Java.
214)Есть ли разница между коллекцией, Collection и Collections в Java?
215)Какие классы реализуют интерфейс List?

Цукерберг рекомендует:  Адаптивная сетка иконок

1) ArrayList
2) Vector
3) LinkedList

216)В чём разница между ArrayList и LinkedList?
217)Для чего нужен класс Iterator и какие у него есть методы?
218)Какая разница между Comparator и Comparable?
219)Какие есть альтернативы у сериализации в Java?
220)Как сделать объект сериализуемым?
221)Что такое serialVersionUID и обязательно ли его определять?
222)Какие 2 метода необходимы объекту для того, что бы он мог являться ключом в HashMap?

Перед тем как использовать объект как ключ в HashMap, необходимо убедиться в том что у него реализованы (правильно) методы equals и hashcode.

223)Что такое Java-апплет? Что вы о нём знаете?

Java-апплет — это программа на языке Java, которая может встраиваться в HTML разметку и выполняться прямо в браузере на стороне клиента. Апплеты используются для создания динамичных и интерактивных страниц.

224)Расскажите о жизненном цикле java-апплета.

Апплет может находиться в следующих состояниях:
Init: Апплет инициализируется каждый раз, когда запускается.
Start: Начинается выполнение апплета.
Stop: Останавливается выполнения апплета.
Destroy: Завершение и уборка за собой. Освобождение ресурсов, очистка.

225)Что происходит при загрузке апплета?
226)В чём разница между апплетом и Java-приложением?
227)Какие ограничения существуют у java-апплетов?
228)Что такое «ненадежный апплет»?
229)В чём разница между апплетом, загруженным через интернет и апплетом, загруженным из файловой системы?
230)Что из себя представляет загрузчик классов для апплетов?
231)Что такое и что обеспечивает менеджер безопасности апплетов?

SWING

232)В чём разница между Choice и List?
233)Для чего нужен layout manager?
234)В чём разница между Scrollbar и JScrollPane?
235)Какие есть потоко-защищённые метод в SWING?

Всего 3 потоко-защищённых метода: repaint, revalidate, и invalidate.

236)Назовите 3 подкласса Component, поддерживающих рисование.

Canvas, Frame, Panel

237)Что такое клиппинг (clipping)?
238)В чём разница между MenuItem и CheckboxMenuItem ?
239)По какому принципу выстраиваются элементы в BorderLayout?
240)По какому принципу выстраиваются элементы в GridBagLayout?
241)Какая разница между классами Window и Frame?
242)Может ли GUI компонент сам обрабатывать свои события?
243)Какой паттерн проектирования используется для всех Swing компонентов?

244)Что такое JDBC?
245)Для чего используется драйвер JDBC?
246)Какое назначение у метода Class.forName?
247)Какие преимущества PreparedStatement над Statement ?

Remote Method Invocation (RMI)

248)Что такое RMI?
249)Какие базовые принципы архитектуры RMI Вы знаете?
250)Какие уровни составляют архитектуру RMI?
251)Какова роль удалённого интерфейса в RMI?
252)Для чего служит java.rmi.Naming Class?
253)Как вы понимаете связывание в RMI?
254)Какая разница между использованием bind() и rebind() методов?
255)Какие шаги необходимо выполнить для запуска RMI программы?
256)Что такое «заглушка» (stub) в RMI?
257)Что такое DGC и как это работает?
258)Какая цель использования RMISecurityManager в RMI?
259)Приведите примеры Marshalling и demarshalling.
260)Приведите примеры Serialization и Deserialization.

Servlets

261)Что такое сервлет?
262)Приведите пример архитектуры сервлетов.
263)В чём разница между Applet и Servlet?
264)В чём разница между GenericServlet и HttpServlet?
265)Расскажите о жизненном цикле сервлета.
266)В чём разница между doGet() и doPost()?
267)Что означает «Веб-приложение»?
268)Что такое Server Side Include (SSI)?
269)Что такое цепочка сервлетов?
270)Как вы узнаете что клиентская машина послала запрос вашему сервлету?
271)Какая структура у HTTP заголовка?
272)Что такое cookie?
273)По какому протоколу взаимодействуют браузер и сервлет?
274)Что вы знаете о HTTP Tunneling?
275)Что такое URL Encoding и URL Decoding?

276)Что такое JSP страница?
277)Как происходит обработка JSP запроса?
278)Какие есть преимущества использования JSP?
279)Что такое директивы? Чем различаются типы директив, доступных в JSP?
280)Что такое JSP действия?
281)Что такое сценарии (скриптлеты, Scriptlets) ?

Общее

282)В чём разница между JDK и JRE?
283)Что такое JVM?
284)Почему Java называется «платформо-независимым» языком?
285)Какие есть типы данных в Java?
286)Что такое Autoboxing и unboxing?
287)Какая разница между String и StringBuffer?
288)Какая разница между байтовым и символьным потоками?
289)Что такое FileInputStream и FileOutputStream?
290)Что такое FileReader и FileWriter?
291)Как работать с классом SimpleDateFormat?
292)Как из объекта типа Date получить строку «21 Aug 1992»?
293)Что такое ClassLoader?
294)Напишите программу, проверяющую число на четность/нечетность.
295)Приведите пример двойной проверки блокировки в синглтонею
296)Как создать потоко-безопасный синглтон?
297)Когда используются volatile переменные?
298)Когда используются transient переменные?
299)В чём разница между volatile и transient переменными?
300)Можно ли переопределить приватный метод?
301)Какая разница между List и Set?
302)В чём разница между PATH и Classpath в Java?
303)Может ли абстрактный класс иметь конструктор?
304)Как сделать класс Immutable?
305)Какие типы данных используются для представления денег?
306)Какой последний паттерн проектирования Вы использовали?
307)Сколько в java зарезервированных ключевых слов? Сколько из них используются?
308)Какие символы нельзя использовать в имени переменной?
309)На какие группы делятся типы данных в Java?
310)Какие значения присваиваются разным типам по умолчанию?
311)Какие есть циклические конструкции в java? Когда и какуую использовать?
312)Как Вы понимаете слово «класс»? Опишите термин своими словами.
313)Какие вы знаете блоки инициализаций?
314)Как правильно реализовывать hashcode объекта?
315)Есть ли смысл в добавлении private методу модификатора final?
316)Какие есть коллекции типа Queue?
317)Можно ли сделать коллекцию только для чтения? Если да, то для чего? Если нет, то почему?
318)Какие главные отличия между стеком и очередью?
319)Что означает термин «конкатенация»?
320)Как можно разбить строку на подстроки встроенными средствами java?
321)К чему приведёт выполнение одного и того же участка кода разными потоками?
322)Как можно получить ссылку на текущий поток?
323)Какие условия должны выполниться перед вызовом методов wait/notify?
324)Что является мьютексом в случае синхронизированного метода?
325)Что вы знаете об агрегатных функциях? Как они работают со значением null?
326)Опишите структуру, используемую в веб-проекте.
327)Что вы знаете о ServletConfig?
328)Методы, необходимые к определению при создании сервлетов.
329)Что такое WWW?
330)Какие методы передачи данных по HTTP вы знаете?
331)Что Вы знаете об ORM?
332)Какие Вы знаете принципы ООП? Откуда Вы их знаете? Используете ли?
333)Что входит в сигнатуру метода? Что не входит?
334)В чём особенность инициализации final static переменных?
335)Какие отличия и в чём сходства между внутренними и вложенными классами?
336)Какого предназначение модификаторов abstract и final в отношении методов и классов.
337)Могут ли быть перехвачены исключения из разных веток наследования в одном блоке catch?
338)Что такое Error? Для чего используется?
339)Какие есть особенности у коллекций типа Set?
340)Возможно ли получение синхронизированной коллекции из несинхронизированной?
341)Приведите пример выброса ConcurrentModificationException.
342)Можно ли наследоваться от строкового типа?
343)Каким методом можно вырезать подстроку?
344)Какие основные классы есть в механизме ввода-вывода в Java?
345)Какой символ используется в качестве разделителя при указании пути к элементам файловой системы в Java?
346)Когда стоит рассматривать использование многопоточности в приложении? Всегда ли многопоточность — это хорошо?
347)Для чего нужны потоки-демоны? Есть ли потоки-ангелы?
348)Где используется метод join?
349)Какие есть неявные, внутренние объекты JSP EL? Чем они отличаются от объектов jsp?
350)Какой у сервлета жизненный цикл? Какие методы вызываются на его этапах?
351)Какая разница между encodeUrl() и encodeRedirectUrl()?
352)В чём заключаются отличия между web server и application server?
353)Что Вы знаете об AJAX? Какие принципы лежат в основе данной технологии?
354)Какие есть примитивные типы и сколько места они занимают в памяти?
355)Какие есть логические операции в Java?
356)Что такое побитовый сдвиг? Какая математическая операции ему соответствует?
357)С помощью какого оператора можно немедленно оборвать выполнение цикла?
358)Может ли меняться количество передаваемых в метод аргументов?
359)Как правильно выполнять инициализацию статических и нестатических полей?
360)Может ли метод являться абстрактным и статическим одновременно?
361)Может ли класс быть статическим?
362)Какие модификаторы есть по умолчанию у полей и методов интерфейсов?
363)Какой метод возвращает строковое описание объекта?
364)С помощью чего можно добраться до приватных полей класса? Возможно ли это?
365)Может ли потомок расширить видимость приватного метода класса-родителя?
366)Что Вы знаете о MVC? Каков принцип его работы?
367)Есть ли смысл в обработке ошибок jvm?
368)Бывают ли ситуации, когда блок finally не выполняется?
369)Метод может выбросить IOException и FileNotFoundException. Какая очередность должна быть у блоков catch?
370)Какие есть коллекции типа List?
371)Какие Вы знаете реализации SortedSet?
372)Какие коллекции являются синхронизированными?
373)Какова реализация метода foreach?
374)Что такое fail-safe и fail-fast свойства?
375)Что Вы знаете об алгоритмах сортировки?
376)Как развернуть строку задом-наперёд?
377)Что Вы знаете о пуле строк?
378)Как проще всего найти необходимый символ в строке?

Java FAQ: для начинающих

Привет всем форумчанам,в этом Java FAQ,е постараюсь собрать все самое нужное о Java)
Для начала давайте разберемся,что такое Java?Как говорит нам вики:

Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems
(в последующем приобретённой компанией Oracle). Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года.(http://ru.wikipedia.org/wiki/Java)

Но Java это не только язык программирования,но и платформа,которая позволяет сделать нам все,что душа захочет,и вообще это классная весчь)

Пойдем дальше,многие видели,что есть какая-то Java SE,EE и.т.дНо какую Java,мне использовать?

Java SE — Java Standard Edition, основное издание Java, содержит компиляторы, API, Java Runtime Environment; подходит для создания пользовательских приложений, в первую очередь — для настольных систем.
Java EE — Java Enterprise Edition, представляет собой набор спецификаций для создания программного обеспечения уровня предприятия(сервлеты,jsp,и.тд).
Java ME — Java Micro Edition, создана для использования в устройствах, ограниченных по вычислительной мощности, например в мобильных телефонах, КПК, встроенных системах;
JavaFX — технология, являющаяся следующим шагом в эволюции Java как Rich Client Platform; предназначена для создания графических интерфейсов корпоративных приложений и бизнеса.
Java Card — технология предоставляет безопасную среду для приложений, работающих на смарт-картах и ​​других устройствах с очень ограниченным объемом памяти и возможностями обработки.

Видите,выбирай по вкусу,идем дальше,как мне начать пользоваться и писать на Java?Очень просто Нужно выпольнить несколько простых шагов:

  1. Нужно скачать JDK(скачать отсюда http://www.oracle.com/technetwork/ja. s-2133151.html)
  2. Установить JDK.Это просто щелкайте по установленному приложению,она загрузилась,дальше настройте системные переменные.Заходите Пуск\пр.щ.мыши по мой компьютер\свойства\слева меню дополнительные параметры системы\внизу переменные среды\системные переменные.Далее нажмите создать,и пропишите сначала
    JAVA_HOME(имя переменной) C:\Program Files\Java\jdk1.8.0_92(путь взял для примера)(значение переменной)
    PATH(имя переменной) C:\Program Files\Java\jdk1.8.0_92\bin(путь взял для примера)(значение переменной)
  3. Все!!)можно уже писать на Java,но вы скажете,что прямо в командной строке,я скажу -да)Но можно и в IDE(http://ru.wikipedia.org/wiki/%D0%98%. 82%D0%BA%D0%B8) .Их много,выбрал самые популярные):
    1. Eclipse
    2. Netbeans
    3. IntelliJ IDEA(версия Ultimate Edition — платная, Community Edition — бесплатная)
    4. Jdeveloper

Тут уж ваш выбор,где писать,почитайте,установите,какая вам понравится в ней и пишите)

Итак,мы все настроили ,установили,давайте что-нибудь напишем на Java,давайте,открываем понравившуюся IDE,и пишем в ней такое:

Смотрим в консоль ,и видим:
Тут не Hello Word,странно??
Можете порадоваться,но то,что вы сейчас написали,ради чего мучались,это капля в море,из всего моря..языка Java
Поэтому,мы же хотим стать крутыми программистами,нам нужно дольше изучать Java,и тут встает вопрос о литературе,долго о ней говорить я не буду,просто скажу:
Кей Хорстманн Гари Корнелл Java 2 Том 1.Основы
Кей Хорстманн Гари Корнелл Java 2 Том 2.Тонкости программирования
Я считаю(и не один я )лучшими книгами по Java для начинающих

На нашем форуме есть раздел Литература по Java Литература по Java .Там много интересного почитайте)


(предлагайте ссылки в сообщениях)

P.S Предлагаю в этой теме выложить простые программы для начинающих(я в их числе)
Если я где-то ошибся ,исправьте,следующий FAQ,создание простого сайтика,с картинками!))
Всем пока,удачи!!)
И главное не путайте Java и JavaScript,это разные вещи)

Java — Вопрос по java

Вопрос: Как определить какая у меня JVM, 32-bit или 64-bit?
Ответ:
java -d64 -version
Вопрос: Как распаковать .jar файл?
Ответ:
jar xf jar-file [archived-file(s)]
Вопрос: Как обновить .war или .jar файл?
Ответ:
jar xf myapp.war WEB-INF/web.xml
nano WEB-INF/web.xml
jar -uf myapp.war -C ./ WEB-INF/web.xml

  • How to extract classes from .jar file?
  • How to update one file in a zip archive

Вопрос: Как преобразовать int в byte?
Решение:
You can use 256 values in a byte, the default range is -128 to 127, but it can represent any 256 values with some translation.

Would print out: «Signed: -1 Unsigned: 255»
Вопрос: Как сделать обход Map?
Решение:
Вопрос: Как получить первый элемент в Map?
Ответ: Невозможно получить первый или последний элемент в Map потому что в этой структуре данных не поддерживается порядок или очередность. Map предоставляет значение только по ключу.
Question: How to check a String is a numeric type in Java?
Solution:
Вопрос: Как узнать версию Java на Mac OS X?
Решение:
Вопрос: Как скомпилировать много .java файлов?
Решение:
Question: How to show exception message?
Solution:
Вопрос: Как получить массив строк удовлетворяющих регулярному выражению?
Решение:
1-й способ
2-й способ
Вопрос: Как получить текущую дату и время?
Решение:
Вопрос: Как сравнивать даты в Java?
Ответ:
Правильно использовать метод compareTo, т.к. он принадлежит интерфейсу Comparable. Метод equals принадлежит классу Object и сравнивает объекты, а не даты.
Кроме того, класс Date имеет методы before и after:
К тому же можно использовать метод getTime() для получения численного значения даты.
Ещё как вариант можно использовать Joda-Time — Java date and time API.
Вопрос: Как получить последний день месяца?
Решение:
Вопрос: Как бороться с ошибкой java.lang.OutOfMemoryError?
Решение: Opcode Java Blog
Вопрос: Как работать с потоками?
Ответ:

  • Вселенная Java: Часть 2. Выполнение задач в многопоточном режиме
  • Cybern.ru » Урок 4. Возврат значений из задач. Интерфейс Callable.
  • Java concurrency (multi-threading) — tutorial

Вопрос: Что означает исключение IllegalStateException? Когда обычно возникают эти исключения?
Ответ:
Возникает — когда угодно. Все имеют право его кидать при желании. А кидают обычно когда объект находится в противоречивом состоянии. Ошибка IllegalStateException, например, может возникнуть, если вы пытаетесь вызвать у сессии метод invalidate(), а она уже была закрыта:

Или, например, при попытке форворда вроде:

если response уже был committed.
To be continued.

По поводу изучения Java?

Всем привет.
Сейчас изучаю Java. Изначально начинал учить по лекциям на ютубе, потом перешел на книги. В данный момент читаю Герберта Шилдта: Java. Полное руководство. 1300 страниц и очень много информации.

Вопрос такой, обязан ли будущий Java разработчик всё это знать, прямо что бы по среди ночи разбудили, спросили про многопоточность и методы всякие и он сразу ответил? Или можно на наизусть не знать, а просто быть в курсе, если по работе понадобится, залез в документацию и прочитал.

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

Как проходит JAVA собеседование? Ответы на многие вопросы тут!

Я понимаю – это может испортить ваше ожидание собеседования. Вы начинаете считать дни, а затем часы и минуты, пока наконец не сядете со своим потенциальным работодателем, чтобы обсудить свое будущее в компании. Иногда нервозность может взять верх над вами, и вы можете оказаться в трудной ситуации, не зная, что сказать или как ответить. Однако, чтобы избежать этого и пройти интервью, вы должны прийти подготовленными. Эта статья поможет вам встретить Java собеседование во всеоружии.

Эти вопросы были разделены на несколько групп. Ответы на них помогут вам подготовиться и успешно пройти Java собеседование при приеме на работу.

Введение

Мы затронем версию Java 8, сначала будут освещены более базовые вопросы, а затем уже более продвинутые. Давайте начнем с самого начала и перейдем к основам.

Java собеседование: Основы

Вопрос 1: Что такое Java?

Это кажется довольно простым вопросом, не так ли? Что ж, ваш потенциальный работодатель, вероятно, ожидает четкого и однозначного ответа, поэтому давайте подготовим хотя бы один.

Java – это объектно-ориентированный, безопасный и высокоуровневый язык программирования. Он был создан и разработан еще в 1991 году человеком по имени Джеймс Гослинг. Язык Java разработан под слоганом «WORA» – «напиши один раз, запускай угодно» (write once, run anywhere). Он известен своей гибкостью и высокой эффективностью.

Вопрос 2: Является ли Java полноценно объектно-ориентированным языком?

Это вполне возможный вопрос на Java собеседование, и нет, он не полностью объектно-ориентирован. Java использует некоторые типы данных (char, byte, float), которые не являются объектами.

Вопрос 3: Назовите несколько преимуществ Java

Для начинающих программистов и разработчиков наиболее важной особенностью является простота. Считается, что функции Java довольно легко изучать и осваивать, особенно по сравнению с другими языками программирования.

Язык программирования Java также считается очень безопасным по сравнению с другими языками программирования. Это достигается благодаря интерпретатору, называемого JVM – этот интерпретатор устанавливается вместе с самой Java, и он постоянно снабжает ваш компьютер последними обновлениями безопасности из Интернета.

Кроме того, Java полностью адаптируем. Благодаря принципу «WORA», на котором основан язык Java, его можно переносить и применять на любом компьютере и операционной системе, которые вам нужны, – он полностью гибкий и многофункциональный.

Вопрос 4: В чем особенность Java 8?

На Java собеседование вам необходимо подготовить ответы на вопросы-сравнения, подобные этому. Это одно из самых крупных обновлений языка, поэтому было бы неплохо знать, в чем они заключаются.

Java 8 представила языковую поддержку для String, предоставила улучшенный Date / Time API и способствовала разработке JVM – системы, отвечающей за многие вещи в Java, включая функции Java, отвечающие за безопасность. В целом, Java 8 сделала язык программирования более доступным и более похожим на современные языки программирования.

Скорее всего на Java собеседование вы столкнетесь именно с таким вопросом. Просто имейте в виду, что Java 8 стало огромным обновлением как с точки зрения производительности, так и в плане безопасности.

Цукерберг рекомендует:  20 бесплатных, адаптивных eCommerce шаблонов

Вопрос 5: Что такое access specifiers в Java?

Всего есть четыре спецификатора доступа, про которые вас могут спросить на Java собеседование. Существуют следующие спецификаторы: public (публичные), private (частные), protected (защищенные) и default (стандартные).

Публичные спецификаторы разрешают доступ к любому классу или через любой метод (отсюда и их имя). В отличие от этого, частные спецификаторы разрешают доступ только внутри самого указанного класса. Защищенный открывает доступ, который каким-то образом коррелирует с классом – либо изнутри класса, из подкласса или просто из того же пакета. Наконец, default обозначает стандартную (по умолчанию) область и разрешает доступ только из одного пакета.

Вопрос 6: Что такое constructor?

Constructor– это часть кода, которая инициализирует конкретный объект. Язык программирования Java имеет два типа конструкторов – по умолчанию и измененный.

Вопрос 7: Что такое Object?

Общий вопрос на Java собеседование. Объект в Java имеет состояние и поведение. Наиболее распространенным и понятным определением объекта является то, что это разновидность класса.

Вопрос 8: В чем разница между ‘equals()’ и ‘==’?

public class Equaltest <
public static void main(String[] args) <
String str1= new String(“HELLO”);
String str2= new String(“HELLO”);
if(Str1 == str2)
<
System.out.println(«String 1 == String 2 is true»);
>
else
<
System.out.println(«String 1 == String 2 is false»);
String Str3 = Str2;
if( Str2 == Str3)
<
System.out.println(«String 2 == String 3 is true»);
>
else
<
System.out.println(«String 2 == String 3 is false»);
>
if(Str1.equals(str2))
<
System.out.println(«String 1 equals string 2 is true»);
>
else
<
System.out.prinltn(«String 1 equals string 2 is false»);
>
>>

Вопрос 9: Какие объектные отсылки могут быть в Java?

Из всех вопросов на Java собеседование этот вопрос один из самых простых – в Java все ссылки на объекты являются нулевыми.

Вопрос 10: В чем разница между JDK, JVM и JRE?

JDK (Java Development Kit) – это комплект разработки Java. Это основной инструмент функции Java, используемый для компиляции программ на этом языке. В пакете имеются все необходимые инструменты, чтобы начать его использовать.

Я уже упоминал JVM (Java Virtual Machine) ранее – это означает виртуальная машина Java. Это машина, которая создает среду, в которой байт-код Java обрабатывается должным образом.

JRE (Java Runtime Environment)- это среда выполнения Java. Это тип среды, предоставляемый JVM – он позволяет правильную работу байт-кода Java.

Теперь, когда мы рассмотрели некоторые из основные вопросы, мы можем перейти к вопросам для опытных разработчиков и программистов. Эти вопросы в основном будут связаны с кодом.

Продвинутые вопросы

Вопрос 1: В чем разница между ‘method overloading’ and ‘method overriding’?

Одним из первых возможных базовых вопросов на Java собеседование может быть этот. В случае с ‘method overloading’ (перегрузка методов) методы, принадлежащие к одному и тому же классу, имеют одно и то же имя, но их параметры отличаются. Это касается расширений поведения метода больше всего на свете. И наоборот, подклассы ‘method overriding’ (переопределения методов) имеют методы с одинаковыми именами и параметрами. Цель здесь – изменить поведение уже существующего метода.

Просто для примера, так выглядит ‘method overloading’:

class Adder <
Static int add(int x, int y)
<
return x+y;
>
Static double add( double x, double y)
<
return x+y;
>
public static void main(String args[])
<
System.out.println(Adder.add(33,33));
System.out.println(Adder.add(16.4,16.8));
>>

А это ‘method overriding’:

class Dog <
void run() <
System.out.println(“dog is sleeping”);
>
Class Doberman extends Dog <
void run()
<
System.out.prinltn(“doberman is sleeping at night”);
>
public static void main( String args[])
<
Dog b=new Doberman();
b.run();
>
>

Вопрос 2: Какой вывод у этой программы Java?

public class Test
<
Test(int x, int y)
<
System.out.println(«x = «+x+» y = «+y);
>
Test(int x, float y)
<
System.out.println(«x = «+x+» y = «+y);
>
public static void main (String args[])
<
byte x = 30;
byte y = 65;
Test test = new Test(x,y);
>
>

Правильный ответ выглядит так:

a = 30 b = 65

Вопрос 3: Возможно ли запустить программу без ‘main() method’?

Довольно стандартный вопрос на Java собеседование и да, это возможно. Одним из наиболее распространенных способов выполнения такой программы является использование static block (статического блока).

Вопрос 4: Что такое ‘runtime polymorphism’?

Runtime polymorphism – это процесс, в котором конкретный вызов, отправляемый по определенному методу, будет разрешен во время выполнения, а не во время компиляции. Вот пример:

class Tree <
void run()
<
System.out.println(“tree is standing”);
>
>
class Willow extends Tree <
void run()
<
System.out.prinltn(“willow is standing on a hill”);
>
public static void main(String args[])
<
Tree b= new Willow(); //upcasting
b.run();
>
>


Вопрос 5: Что такое ‘Inheritance’?

Этот термин, честно говоря, лежит на поверхности – Inheritance – это когда один объект приобретает свойства и параметры другого (другого класса). Обсуждаемый выше метод переопределения использует это. Основная идея наследования состоит в том, что вы можете создавать новые классы на уже существующих. Существует пять различных типов наследования, но язык программирования Java поддерживает только четыре (множественное наследование не поддерживается). Почему не поддерживается множественное наследование? На самом деле есть только одна конкретная причина – упростить программу. Это должно быть важным примечанием, о которых стоит помнить для Java собеседование.

Вопрос 6: Назовите самый большой класс (SuperClass) из существующих в Java

Это один из самых простых вопросов, однако я должен также упомянуть, что это один из основных вопросов. Самый большой в Java – это объектный класс.

Вопрос 7: Что значит приставка Super в Java?

Super в Java используется как ссылка для указания на непосредственный родительский объект класса. Команду также можно использовать для вызова непосредственных родительских методов класса и конструктора.

Вопрос 8: Какой будет результат выполнения этой программы?

class Animal
<
public Animal()
<
System.out.println(«Animal class constructor called»);
>
>
public class Zebra extends Animal
<
public Zebra()
<
System.out.println(«Zebra class constructor called»);
>
public static void main (String args[])
<
Zebra e = new Zebra();
>
>

Вот такое ответ:

Animal class constructor called
Zebra class constructor called

Это очень распространенные вопросы на Java собеседование. Всегда обращайте внимание на переменные – они определяют окончательный ответ.

Вопрос 9: Что такое ‘association’ в Java?

Один из наиболее часто задаваемых вопросов о Java-программировании, на первый взгляд может показаться, что он довольно простой. Однако такие вещи, как aggregation и composition, происходят из ассоциаций (association), поэтому важно понимать этот термин.

Ассоциация (association) – это когда все объекты имеют свои жизненные циклы, а конкретный владелец не существует. Оно может варьироваться от “one” до “many”.

Вопрос 10: Что такое ‘object cloning’?

Как вы уже заметили, многие из этих вопросов имеют ответ в своем названии. Этот не исключение.

Команда ‘object cloning’ (клонирование объекта) используется для создания идентичной копии объекта. Это делается с помощью метода clone () из класса объекта.

Итак, мы закончили с основными вопросами на Java собеседование, давайте сделаем шаг назад и поговорим об общей подготовке к собеседованию.

Подсказки для интервью

Я дам вам несколько советов, которые вы можете использовать до и во время собеседования, которые помогут вам легче пройти Java собеседование.

Даже не буду говорить, что надо выспаться и хорошо позавтракать – вы, наверное, слышали это уже по крайней мере тысячу раз. Я могу точно сказать, что вам не следует вставать в 3 утра, чтобы пересмотреть вопросы на Java собеседование, если вам назначили встречу на 8 утра. Старайтесь не думать об этом и ничего не делать за 24 часа до самого собеседования – бегло пересмотрите свои заметки по дороге на собеседование.

Кроме того, действуйте расслабленно, когда вы на собеседовании. Если работодатель видит, что вы нервничаете, он может подумать, что вы беспокоитесь, потому что у вас есть что скрывать – возможно, нехватка знаний? Не ведите себя глупо – найдите идеальный баланс между уверенностью в себе и свободой для импровизации.

И наконец, не думайте, что ваше интервью – это непреодолимая стена – вам не нужно отвечать на каждый вопрос идеально. Работодатели оценивают как ваши навыки, так и вашу личность во время собеседования. Лучше чего-то не понимать и вести себя естественно, чем притворяться и стараться выглядеть тем, кем вы не являетесь.

Заключение

Всегда требуются специалисты в области программирования. Язык Java является одним из самых популярных языков программирования в мире (благодаря своей гибкости, безопасности и простоте). В этой статье мы разобрали вопросы на Java собеседование. Помимо этого существует много других вопросов, которые мы не охватили.

Все, что вам осталось сделать – пройти собеседование и получить работу мечты!

Я надеюсь, что вас возьмут на ту самую вакансию!

Собеседования на M >

Осенью 2020 я окончательно решил уходить из EPAM, где работал более полутора лет, и идти развиваться куда-то дальше.

В связи с этим я обновил резюме, завысил немного зарплатные ожидания, и опубликовал его на HeadHunter. Я особо никуда не спешил, поэтому на вакансии сам почти и не откликался, за исключением пары интересных мест. К собеседованиям решил не готовиться и почти к ним ничего и не читал ибо зачем зубрить что-то бесполезное в работе. А полезное ты и так всё помнишь. Я понадеялся на адекватных интервьюеров, которые не будут спрашивать то, что без зубрёжа нормальные люди не помнят, так и вышло. Почти сразу мне начали приходить письма и звонки, и я забил собеседованиями ближайшие полторы недели, по 1-2 в день. Тут хочу рассказать об этом опыте. Всего я прошёл собеседования в 11-ти компаниях, 8 из которых прислали офер.

В резюме у меня был указан опыт PHP разработчика (1.5 года), затем Java (тоже 1.5 года). С Java стандартный стек: Spring и всё что около него. В сумме в резюме 4 года опыта работы и несколько своих проектов. Кажется, неплохое резюме)

Несколько заметных пунктов:

  • Для позиции middle java рынок кандидатов, судя по всему, почти пустой. Большая часть компаний проводила всего одно собеседование, и в течении 1-2 дней присылало фидбек. Тестовые задания или несколько собеседований позволяли себе только крупные компании с каким-то известным именем на рынке труда. Видимо, тем кто поменьше, приходится забирать кандидатов, не давая им времени думать и сравнивать оферы.
  • Судя по количеству оферов и тому, что ни в одном не предложили меньше запрашиваемой мною сумме, мне нужно было ещё сильнее повысить ожидаемую зп. Значил либо я быстро вырос, либо в епаме мне недоплачивали). Собираясь искать работу, смелее завышайте зп.
  • Условия все предлагают почти одинаковые — ДМС, белая зп, свободный график, всякие компенсации. Только одна компания звала на удалёнку. И только у одной (уже другой) компании была серая зп.
  • Примерно у половины компаний в работе использовался Spring , но по нему на собеседованиях, кажется, не спрашивали ни разу. Только общие вопросы — работал ли вовсе и что делал. В целом знания конкретных фреймворков и библиотек никто не ожидал.
  • Собеседования длились от 20 минут до 2-х часов. Обычно около часа. В две компании были собеседования по Skype.
  • Некоторые простейшие вопросы ставили меня в тупик. Например что-нибудь про ООП (я спутал полиморфизм и инкапсуляцию :) ). Когда ты так привыкаешь к понятиям, что стопаришься когда о них расспрашивают. Довольно неприятные ощущения.

Теперь о вопросах на собеседованиях:

  • Вообще везде спрашивали разницу между ArrayList и LinkedList . При том в половине случаев со словами «ну этот вопрос вам уже много раз задавали, но всё же». Не знаю, то-ли по инерции, то-ли действительно бывают мидлы, которые не знают разницы, да ещё и не узнают её на первом же подобном собеседовании. В любом случае лучше помнить стандартные коллекции и то, как они работают.
  • Почти везде просили перечислить виды коллекций и то, как они работают. Чаще всего спрашивали про HashMap (после ArrayList, конечно).
  • Часто спрашивали про Object и какие методы в нём есть.
  • Часто спрашивали про SOLID и расшифровать эту аббревиатуру я как назло никогда не мог — всегда такое плохо у меня запоминается) Но общий смысл принципов конечно понятен и его объяснял.
  • Часто был вопрос про REST .
  • Периодически спрашивали про сборщик мусора, но без тонких деталей. Рассказа об одном алгоритме его работы на поколениях было достаточно.
  • Периодически спрашивали про ООП, принципы, из более менее интересного «объясни полиморфизм пятикласснику».
  • Задачи прямо на собеседовании дают редко, как и тестовые задания домой. В основном крупные и известные компании.
  • Периодически спрашивают про многопоточность, но судя по всему действительно она важна уже в вакансиях ближе к senior.
  • Часто, и это интереснее всего, идёт обсуждение каких-нибудь абстрактных задач, способы их решения, проблемы и подобное.

Об удачных собеседованиях рассказывать нет смысла, расскажу о неудачных:

  • Яндекс Деньги. Прошёл первое собеседование, после этого получил тестовое задание как раз на параллельность. Выполнил, но видимо недостаточно хорошо.
  • Deutsche Bank. Единственное собеседование, за которое мне именно стыдно. Не выспался или ещё что — но тупил страшно. Я на стажировки 5 лет назад лучше собеседования проходил. Там были вопросы по Java, потом задачки всякие посчитать какая где память, что лучше. В общем я ошибался на уровне таблицы умножения. Не удивлён что мне отказали)
  • JetBrains. Тут по требованиям в вакансии я сразу не подходил, но решил попробовать. Интересное собеседование, проводилось в офисе, но по видеосвязи с Мюнхеном. В целом отвечал вроде неплохо, но нужна была как раз тоже параллельность, в которой у меня только учебный опыт.

Больше всего понравился процесс найма в Петер-Сервис, несмотря на то, что от знакомых я получил много плохих отзывов о компании (объективности ради — были и хорошие, видимо как повезёт с отделом и командой). Там было сначала собеседование с парой разработчиков, общие вопросы, обсуждения. Затем меня пригласили в команду, куда я должен был выйти на работу, познакомиться, и я рассказал об одном своём проекте, как его делал, какие проблемы решал. Обсуждали это и некоторые подробности их проекта. И уже после этого получил офер. Таким образом, думая над офером, я уже был знаком со всей командой, примерно представлял где и с кем буду работать. Это круто, потому что примерно в половине собеседований я общался с 1-2 людьми, не знал ни с кем там работать, ни подробностей проекта, кроме общих фраз (или вовсе нескольких вариантов проектов). Но всё же пошёл работать я не к ним.

А в итоге я попал на работу во ВКонтакте, даже не на Java. Там было первое собеседование, тестовое задание и финальное собеседование.

Выводы? Ходите на собеседования почаще и завышайте ожидаемую зп.

Java — Вопрос по java

Сколько элементов имеет следующий массив?

Массив имеет 18 элементов.

Что будет выведено на консоль в результате выполнения следующего кода:

Консоль ничего не выведет, так как выполнение программы завершится ошибкой, поскольку массив имеет 3 подмассива, то, чтобы обратиться к самому последнему массиву, необходимо использовать индекс 2. А индекс 3 таким образом окажется вне границ массива.

Дан следующий массив

Каким образом мы можем обратиться к числу 7 в этом массиве?

Java FAQ: для начинающих

Привет всем форумчанам,в этом Java FAQ,е постараюсь собрать все самое нужное о Java)
Для начала давайте разберемся,что такое Java?Как говорит нам вики:

Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems
(в последующем приобретённой компанией Oracle). Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года.(http://ru.wikipedia.org/wiki/Java)

Но Java это не только язык программирования,но и платформа,которая позволяет сделать нам все,что душа захочет,и вообще это классная весчь)

Пойдем дальше,многие видели,что есть какая-то Java SE,EE и.т.дНо какую Java,мне использовать?

Java SE — Java Standard Edition, основное издание Java, содержит компиляторы, API, Java Runtime Environment; подходит для создания пользовательских приложений, в первую очередь — для настольных систем.
Java EE — Java Enterprise Edition, представляет собой набор спецификаций для создания программного обеспечения уровня предприятия(сервлеты,jsp,и.тд).
Java ME — Java Micro Edition, создана для использования в устройствах, ограниченных по вычислительной мощности, например в мобильных телефонах, КПК, встроенных системах;
JavaFX — технология, являющаяся следующим шагом в эволюции Java как Rich Client Platform; предназначена для создания графических интерфейсов корпоративных приложений и бизнеса.
Java Card — технология предоставляет безопасную среду для приложений, работающих на смарт-картах и ​​других устройствах с очень ограниченным объемом памяти и возможностями обработки.

Видите,выбирай по вкусу,идем дальше,как мне начать пользоваться и писать на Java?Очень просто Нужно выпольнить несколько простых шагов:

  1. Нужно скачать JDK(скачать отсюда http://www.oracle.com/technetwork/ja. s-2133151.html)
  2. Установить JDK.Это просто щелкайте по установленному приложению,она загрузилась,дальше настройте системные переменные.Заходите Пуск\пр.щ.мыши по мой компьютер\свойства\слева меню дополнительные параметры системы\внизу переменные среды\системные переменные.Далее нажмите создать,и пропишите сначала
    JAVA_HOME(имя переменной) C:\Program Files\Java\jdk1.8.0_92(путь взял для примера)(значение переменной)
    PATH(имя переменной) C:\Program Files\Java\jdk1.8.0_92\bin(путь взял для примера)(значение переменной)
  3. Все!!)можно уже писать на Java,но вы скажете,что прямо в командной строке,я скажу -да)Но можно и в IDE(http://ru.wikipedia.org/wiki/%D0%98%. 82%D0%BA%D0%B8) .Их много,выбрал самые популярные):
    1. Eclipse
    2. Netbeans
    3. IntelliJ IDEA(версия Ultimate Edition — платная, Community Edition — бесплатная)
    4. Jdeveloper

Тут уж ваш выбор,где писать,почитайте,установите,какая вам понравится в ней и пишите)

Итак,мы все настроили ,установили,давайте что-нибудь напишем на Java,давайте,открываем понравившуюся IDE,и пишем в ней такое:

Смотрим в консоль ,и видим:
Тут не Hello Word,странно??
Можете порадоваться,но то,что вы сейчас написали,ради чего мучались,это капля в море,из всего моря..языка Java
Поэтому,мы же хотим стать крутыми программистами,нам нужно дольше изучать Java,и тут встает вопрос о литературе,долго о ней говорить я не буду,просто скажу:
Кей Хорстманн Гари Корнелл Java 2 Том 1.Основы
Кей Хорстманн Гари Корнелл Java 2 Том 2.Тонкости программирования
Я считаю(и не один я )лучшими книгами по Java для начинающих

На нашем форуме есть раздел Литература по Java Литература по Java .Там много интересного почитайте)

(предлагайте ссылки в сообщениях)

P.S Предлагаю в этой теме выложить простые программы для начинающих(я в их числе)
Если я где-то ошибся ,исправьте,следующий FAQ,создание простого сайтика,с картинками!))
Всем пока,удачи!!)
И главное не путайте Java и JavaScript,это разные вещи)

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих