- HelloOne - Необходимо реализовать программу на Java, печатающую в консоль сумму всех числовых параметров командной строки. Пример строки "1fawetgdhst3gerherhetrhsdhd3dgerhge3gsh1ggg1"
- HelloTwo - Нужно не меняя метод main сделать так чтоб печаталось Hello World!
- HelloThree - Необходимо реализовать на Java метод, принимающий на вход коллекцию строк и удаляющий из переданной коллекции все элементы, начинающиеся на «aaa». Сигнатура необходимого метода должна иметь вид: public static void filterTripleA(List strings) { (в примере два варианта решения один правильный, а второй не очень =) )
- HelloFour - Написать метод возвращабщий факториал
TOP popular interview question: Примерно 190 популярных вопросов + задачки
Java SE
-
На какие группы можно поделить типы данных - примитивы и ссылочные;
-
Примитивы это - byte - 8 бит, short - 16 бит, char - 16 бит, boolean - 32 бит, int - 32 бит, float - 32 бит, double - 64 бит, long - 64 бит;
-
Ccылочные это - String, Integer, Boolean, Long, BigInteger, BigDecimal;
-
Какие значения по умолчанию инициализируют переменные - int = 0, boolean = false, String = null, double = 0.0;
-
Иницилизация - присвоение значения к переменной;
-
Из каких символов могут состоять именна переменых - с латинских букв $, _, из цифр, но не могут начинатся с цифр;
-
Сколько зарезервированно ключевых слов - 50, это приметивы, циклы, исключения, объявления, импорты, область видемости, многопоточность;
-
От какого класса наследуются все классы - Object;
-
Какие методы вы знаете класса Object - equals(), hashCode(), getClass(), wait(), clone(), notify(), notifyAll(), finalize(), toString();
-
Что вернет hashCode(), если его не перегружать - Адрес объекта в памяти;
-
Назовите Пародигмы ООП - Инкопсуляция, Наследование, Палиморфизм, Абстракция, Отправка сообщений, Повторное использование;
-
Инкопсуляция - сокрытие реализации класса, с доступом к методам(защита данных класса и позволяет не особо задумыватся а внутриней реализации);
-
Наследование - класс-наследник реализует спецификацию уже существующего класса (базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса;
-
Полиморфи́зм - возможность объектов с одинаковой спецификацией иметь различную реализацию. Один интерфейс, множество реализаций;
-
Абстракция - придание объекту характеристик, которые чётко определяют его концептуальные границы, отличая от всех других объектов(обращаясь к потомкам класса мы обращаемся к ним как к базовому классу);
-
Что такое JDBC спецификация - описание способа подключения и работы с СУБД;
-
Что такое пул строк - это набор строк который хранится в памяти Java heap Пример в классе ExampleOne;
-
Как работает gc - он останавливает приложение, обходит объекты по вектору начиная с рута потока и все кто не попадает в вектор, попадает под удаление;
-
Метод trim() - возвращает копию данной строки, в которой удаляются начальные и конечные пробелы, или данную строку, если она не имеет начальных или конечных пробелов;
-
Чем отличается interface от абстрактного класса - от абстрактного класс можно отнаследоватся, а от интерфейса нет. Так же нельзя реализовать переменные в интерфейсах;
-
Какие существуют Exception - проверяемые и не проверяемые на стадии компиляци;
-
Какие вы знаете Exception - NullPointerException, Exception, SQLException, IOException, ThreadDeath, IndexOfBoundsException, ClassNotFoundException;
-
Почему у нас исключения поделены на проверяемые/непроверяемые - потому что Uncheked это в основном ошибки программиста он должен был сам например NullPointerException мы же сами можем проверить на null, а не обрабатывать исключение.
-
Какие модификаторы доступа вы знаете - protected, public, package, private;
-
Опишите уровни доступа - private: доступ в пределах класса, public: доступен всем, package: доступен в пределах пакета, protected: члены класса доступны внутри пакета и в классах-наследниках;
-
Что такое рефлексия - это механизм исследования данных о программе во время её выполнения;
-
Минусы рефлексии - медлянная скорость и нарушение принцепов инкапсуляции;
-
Рефлексия даёт возможность изменить поля объектов - да, в том числе и приватных; https://www.youtube.com/watch?v=XJQuBXWADZg
-
Где реализована в реальных примерах - Эти возможности во всю используются во фреймверках, таких как Spring, Hibernate, а так же всё что использует Анатации.
-
Multithreading - многопоточность, то есть паролельное выполнение кода. Явный пример это GUI работающий паролельно с логикой;
-
Для чего нужен метод interrupt() - Вызов метода потока interrupt просто устанавливает флаг, означающий, что код, использующий этот поток, хочет его прервать;
-
Как безопасно остановить один паток - Через метод isInterupted() или interrupted();
-
Отличия isInterupted() от interrupted() - Метод interrupted() является статическим и проверяет был ли установлен флаг прерывания у текущего потока. При этом флаг прерывания после вызова этого метода сбрасывается. Метод isInterrupted() позволяет проверить флаг прерывания у потока, для которого этот метод был вызван. При этом сам флаг не сбрасывается.
-
Как осуществляется доступ к переменным из разных потоков - с помощью Synchronize;
-
Как потоки порождаются - Требуется отнаследоватся от класса Thread и переопределить метод run или имплиметить интерфейс Runnable и реализовать метод run() или Создать объект класса Thread и реализовать метод и перелать в него класс с требумым кодом а так же в каждом способе вызвать старт;
-
Что такое synchronized - ключевое слово которое реализует взаимное исключение и видимость изменений;
-
В чем отличие между static synchronized и просто synchronized - Использование слова synchronize на static-методе помечает весь класс как synchronize
-
Что такое volatile - видимость изменений плюс атомарность long и double;
-
В чем разница между volatile и synchronized - synchronized останавливает поток, volatile пишит сразу значение;
-
В чем отличия сервисов SOAP и REST - SOAP использует xml, а REST ASCII, XML, JSON. В модели SOAP уровень передачи данных протокола HTTP является «пассивным наблюдателем», и его роль ограничивается передачей запросов SOAP от клиента серверу с использованием любых методов передачи (POST). Детали сервисного запроса, такие как имя удаленной процедуры и входные аргументы, кодируются в теле запроса. Архитектура REST, напротив, рассматривает уровень передачи данных HTTP как активного участника взаимодействия, используя существующие методы НТТР, такие как GET, POST, PUT и DELETE, для обозначения типа запрашиваемого сервиса; В основе REST лежит концепция ресурсов, в то время как SOAP использует интерфейсы, основанные на объектах и методах. Интерфейс SOAP может содержать практически неограниченное количество методов; интерфейс REST, напротив, ограничен четырьмя возможными операциями, соответствующими четырем методам HTTP;
-
В чем разница между REST и SOAP веб сервисами - REST поддерживает различные форматы: text, JSON, XML; SOAP — только XML, REST работает только по HTTP(S), а SOAP может работать с различными протоколами(HTTP(S), FTP, SMTP)), REST может работать с ресурсами. Каждый URL это представление какого-либо ресурса. SOAP работает с операциями, которые реализуют какую-либо бизнес логику с помощью нескольких интерфейсов, SOAP на основе чтения не может быть помещена в кэш, а REST в этом случае может быть закэширован, SOAP поддерживает SSL и WS-security, в то время как REST — только SSL, SOAP поддерживает ACID (Atomicity, Consistency, Isolation, Durability). REST поддерживает транзакции, но ни один из ACID не совместим с двух фазовым коммитом;
-
Что такое SOAP - протокол обмена структурированными сообщениями в распределённой вычислительной среде;
-
Что такое REST - архитектурный стиль взаимодействия компонентов распределённого приложения в сети. REST представляет собой согласованный набор ограничений, учитываемых при проектировании распределённой гипермедиа-системы;
-
Как бы вы решили какой из REST или SOAP веб сервисов использовать - REST против SOAP можно перефразировать как «Простота против Стандарта». В случае REST (простота) у вас будет скорость, расширяемость и поддержка многих форматов. В случае с SOAP у вас будет больше возможностей по безопасности (WS-security) и транзакционная безопасность (ACID);
-
Объясните понятие WSDL - WSDL (англ. Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML Каждый документ WSDL 1.1 можно разбить на следующие логические части:
определение типов данных (types) — определение вида отправляемых и получаемых сервисом XML-сообщений элементы данных (message) — сообщения, используемые web-сервисом абстрактные операции (portType) — список операций, которые могут быть выполнены с сообщениями связывание сервисов (binding) — способ, которым сообщение будет доставлено; http://javastudy.ru/interview/jee-webservices-questions-answers/ -
Что такое JDBC - Java DataBase Connectivity - стандартный Интерфейс java для связи приложения и субд;
-
Что такое спецификация JDBC - это описание стандартного интерфейса JDBC;
-
Подключение Java-программы к БД и этапы -
- Установка связи между Java-программой и диспетчером базы данных.
- Передача SQL-команды в базу данных с помощью объекта Statement.
- Чтение полученных результатов из базы данных и использование их в программе;
-
Что такое Statment - Объект Statement используется для выполнения SQL-запросов к БД(контенеры для выполнения запросов);
-
Какие Statment вы знаите - PreparedStatement, Statement, CallableStatement;
-
Что такое Serialization - процесс перевода какой-либо структуры данных в последовательность битов;
-
Где используется Serialization - сохранение класса в файл или в БД или передача по сети;
-
Проблемы Serialization - Проблема в том что после десериализации мы получим другой объект. Таким образом, сериализация дает возможность создать Singleton еще раз, что не совсем не нужно. Конечно можно запретить сериализовать Singleton-ы, но это, фактически, уход от проблемы, а не ее решение;
-
Какие механизмы изменения стандартного механизма сериализации - Существует специальный класс Externalizable, а так же мы всегда можем перопределить методы writeObject() и readObject();
-
Модификатор transient - поля с данным модификатором не сериализуются;
-
Принципы Solid это руководства, которые могут применяться во время работы над программным обеспечением для удаления «кода с запашком» предписывая программисту выполнять рефакторинг исходного кода, пока тот не станет разборчиво написанным и расширяемым. Это часть общей стратегии гибкой и адаптивной разработки;
Состоит из 5и принципов, которые и рассмотрим ниже:
Принцип единственной ответственности (The Single Responsibility Principle) Каждый класс выполняет лишь одну задачу.
Принцип открытости/закрытости (The Open Closed Principle) «программные сущности … должны быть открыты для расширения, но закрыты для модификации.»
Принцип подстановки Барбары Лисков (The Liskov Substitution Principle) «объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы.» См. также контрактное программирование. Наследующий класс должен дополнять, а не изменять базовый.
Принцип разделения интерфейса (The Interface Segregation Principle) «много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения.»
Принцип инверсии зависимостей (The Dependency Inversion Principle) «Зависимость на Абстракциях. Нет зависимости на что-то конкретное.»
-
Чистый код clean code - Даже плохой программный код может работать. Однако если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение»;
-
Пакет java.util.concurrent.*. Что в себя включает - Concurrent Collections, Executors, Atomics, Synchronizers;
-
Что такое Concurrent Collections — набор коллекций, более эффективно работающие в многопоточной среде нежели стандартные универсальные коллекции из java.util пакета. Вместо базового враппера Collections.synchronizedList с блокированием доступа ко всей коллекции используются блокировки по сегментам данных или же оптимизируется работа для параллельного чтения данных по wait-free алгоритмам;
-
Что такое Queues — неблокирующие и блокирующие очереди с поддержкой многопоточности. Неблокирующие очереди заточены на скорость и работу без блокирования потоков. Блокирующие очереди используются, когда нужно «притормозить» потоки «Producer» или «Consumer», если не выполнены какие-либо условия, например, очередь пуста или перепонена, или же нет свободного «Consumer»'a;
-
Что такое Synchronizers — вспомогательные утилиты для синхронизации потоков. Представляют собой мощное оружие в «параллельных» вычислениях;
-
Что такое Executors — содержит в себе отличные фрейморки для создания пулов потоков, планирования работы асинхронных задач с получением результатов; Пример паралельной многопоточности: ExampleEight
-
Что такое Locks — представляет собой альтернативные и более гибкие механизмы синхронизации потоков по сравнению с базовыми synchronized, wait, notify, notifyAll;
-
Что такое Atomics — классы с поддержкой атомарных операций над примитивами и ссылками; https://habrahabr.ru/company/luxoft/blog/157273/
-
Что такое утечки памяти, как бороться - В Java может быть утечка памити только в случае говнокода тогда GC по какой то причине не удаляет объекты например на них ещё что то ссылается, а баротся можно переписав говнокод в нормальный вид;
-
Что такое дэдлоки, как бороться - Обычно достаточно согласованного между потоками порядка захвата ресурсов, при котором все потоки захватывают ресурсы в одном и том же порядке. С появлением семафоров (lock, tryLock()) это может реализовываться очень просто;
-
ORM понимание что такое и зачем это нужно - Object-Relational Mapping это отображение объектов какого-либо объектно-ориентированного языка в структуры реляционных баз данных;
-
По UNIT тестам. Зачем нужны - «юнит» означает, что мы тестируем не всю систему в целом, а небольшие ее части. Мы проводим тестирование с высокой гранулярностью;
-
Что позволяют контролировать UNIT тесты - Правильность логики написанную разработчиком;
-
TDD - техника разработки программного обеспечения, которая основывается на повторении очень коротких циклов разработки:
сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест, и под конец проводится рефакторинг;
-
Паттерны проектирования - Singleton, Factory Method, Prototype, Builder, Abstract Factory, Facade;
-
Singleton - порождающий шаблон проектирования, гарантирующий, что в однопроцессном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляр;
-
Factory Method - делегируем процесс создания объектов классам-наследникам;
-
Prototype - клонируем объекты на основании некоторого базового объекта;
-
Builder - отделяем процесс создания комплексного объекта от его представления;
-
Abstract Factory - описываем сущность для создания целых семейств взаимосвязанных объектов;
-
Facade - описываем унифицированный интерфейс для облегчения работы с набором подсистем;
-
Какие существуют виды потоков ввода/вывода - Разделяют два вида потоков ввода/вывода: байтовые и символьные;
-
Назовите основные предки потоков ввода/вывода - Байтовые: java.io.InputStream, java.io.OutputStream; Символьные: java.io.Reader, java.io.Writer;
-
Что такое контракт между equals() и hashcode() - Если equals возвращает true, то hashCode должен вернуть одно и то же значение. Обратное не верно;
-
Что такое try-with-resources - это автоматическое освобождение ресурса в конструкции try-catch если выбрашенно исключение. Освобождает ресурс только если класс ресурса имплиментирует интерфейс Closeable; https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
-
Какие состояния потоков вы знаете - New(Создание), Runnable(Выполнение), Terminated(Завершение), Blocked(Блокирован), Timed_Waiting(Ожидаит заданное время), Waiting(Ожидает оканчания другова потока);
-
Что отвечает за то в какой последовательности будут выполнятся поток - потоками управляет jvm;
-
Где хранит JVM данные - в stack(стек) и heap(куча);
-
Удалит ли GC два объекта с перекрёстными ссылками на которых больше нет ссылок - да, удалит (принцип работы 18 пункт);
-
Чем отличаются string builder от string buffer почему это лучше чем '+' - Класс String является immutable - Вы не можете модифицировать объект String, но можете заменить его созданием нового экземпляра. Создание нового экземпляра обходится дороговато: //Inefficient version using immutable String String output = "Some text"; int count = 100; for(int i =0; i<count; i++) { output += i; } return output; Кусок кода, в примере выше создаст 99 новых объектов String, 98 из которых будут тут же откинуты. Создание новых объектов неэффективно.
StringBuffer/StringBuilder
Класс StringBuffer является mutable - использовать StringBuffer или StringBuilder следует тогда, когда вы хотите модифицировать содержимое. StringBuilder был добавлен в пятой джаве и он во всем идентичен классу StringBuffer, за исключением того, что он не синхронизирован, что делает его значительно шустрее. Но цена скорости - небезопасное поведение в мультипоточной среде. //More efficient version using mutable StringBuffer // set an initial size of 110 StringBuffer output = new StringBuffer(110); output.append("Some text"); for(int i =0; i<count; i++) { output.append(i); } return output.toString(); Вышеуказанный код создает только два новых объекта, StringBuffer и строковую константу, которая возвращается. StringBuffer расширяется по мере надобности, что, в свою очередь дороговато, так что лучше инициализировать StringBuffer корректным значением размера.
-
Как получить данные после insert из statment - try (ResultSet generatedKeys = statement.getGeneratedKeys()) { if (generatedKeys.next()) { user.setId(generatedKeys.getLong(1)); } else { throw new SQLException("Creating user failed, no ID obtained."); } }
-
Метод finalize зачем он - Предназначен этот метод для автоматического освобождения системных ресурсов, занимаемых объектом, на котором будет данный метод вызван. https://habr.com/post/183344/
-
Где выполняются потоки в многопоточной среде - выполняюися в процессоре на каждый поток будет создан отдельный просцесс в системе;
Collection
-
Что такое ArrayList - это список, реализованный на основе массива;
-
Как SUN реализовала доступ в массиве по индексу к элементу например у нас есть элемент 7 - так как массив хранится у нас линейно в памяти и мы знаем размер блока памити для передоваемого типа данных можем расчитать по формуле (<адресс первого элемента массива> + (7*<Размер блока>));
-
Что такое LinkedList - это классический связный список, основанный на объектах с ссылками между ними.(абстрактно можно представить в виде железнодарожного состава у каждый вагон прицеплён к предыдущему и следующему);
-
Что лучше использовать ArrayList или LinkedList -
LinkedList:Если требуется много встовлять/удалять в середине списка или получать первое и последнее значение то LinkedList, дополнительные затраты на хранение связки между элементами; ArrayList: следует использовать при доступе по индексу так как получает элемент за константное время, нет дополнительных расходов на хранение связки между элементами; -
Какие коллекции вы знаете - ArrayList, LinkedList, HashSet, TreeSet, Vector, Stack, LinkedHashSet, HashMap, HashTable, LinkedHashMap, TreeMap;
-
Какие интерфейсы коллекций вы знаете - List, Set, Collection, Dequeue, Queue, SortedSet, SortedMap;
-
ArrayList, LinkedList, HashSet, HashMap, HashTable, LinkedHashMap, TreeMap это интерфейсы или классы - это классы интерфейсами для них являются List, Set, Collection, Dequeue, Map, SortedMap Queue, SortedSet;
-
Что такое HashMap - Это набор корзин ключь + значение. Ключь должен быть уникальным, нет сортировки;
-
Hashtable отличие от hashmap - Тем что Hashtable не может содержать Null как ключ или значение, Hashtable является потокозащищёной;
-
Как избавится от кализий в HashMap - Если ключём у нас является кастомный объект то требуется переопределить методы equals() и hashCode() написав свою реализацию с использованием полей объекта пример в классе ExampleTwo;
-
Что такое generic(Обобщение) - Generics позволяют абстрагировать множество типов; https://neerc.ifmo.ru/wiki/index.php?title=Generics https://www.youtube.com/watch?v=LF8ETKQQEXg
-
Проблемы generic(Обобщение) - мы не знаем методов передоваемого класса так как нам доступны методы только Object;
-
Что такое type erasure - костыль для поддержки generics всё, что программист указал в угловых скобках, оказалось утеряно и недоступно на этапе выполнения. Пример: ExampleFive Подробнее: http://blog.xapie.nz/2013/12/01/erasure/
-
Потоко защищённая Map - ConcurrentHashMap;
-
Как работает ArrayList - Получение значения за константное время, минимум накладных расходов при хранении такого списка, вставка в конец списка в среднем производится так же за постоянное время, вставка и удаление из середины списка за линейное время;
-
При привышении Capacity на сколько увеличивается размер ArrayList - увеличивается по формуле (oldCapacity * 3) / 2 + 1.
-
Как работает LinkedList - За постоянное время может выполнять вставку/удаление элементов в списке. Доступ к произвольному элементу осуществляется за линейное время (но доступ к первому и последнему элементу списка всегда осуществляется за константное время — ссылки постоянно хранятся на первый и последний, так что добавление элемента в конец списка вовсе не значит, что придется перебирать весь список в поисках последнего элемента;
-
Предложите эффективный алгоритм удаления нескольких рядом стоящих элементов из середины списка, реализуемого ArrayList - сместить с помощью метода subList(3,7).clear() таким образом удалятся 4,5,6 элемент;
-
Как работает HashMap - Вкратце, HashMap состоит из «корзин» (bucket`ов). С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары ключ-значение, вычисляет хеш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент. Если корзина пустая, то в нее сохраняется ссылка на вновь добавляемый элемент, если же там уже есть элемент, то происходит последовательный переход по ссылкам между элементами в цепочке, в поисках последнего элемента, от которого и ставится ссылка на вновь добавленный элемент. Если в списке был найден элемент с таким же ключом, то он заменяется. Добавление, поиск и удаление элементов выполняется за константное время. Вроде все здорово, с одной оговоркой, хеш-функций должна равномерно распределять элементы по корзинам, в этом случае временная сложность для этих 3 операций будет не ниже lg N, а в среднем случае как раз константное время;
-
Как работает HashSet - Неупорядочен как мапа и ключём является само значение;
-
Как работает TreeSet - основан на красно-черном дереве; https://habrahabr.ru/post/162017/
-
Чем можно отсартировать колекцию/Массив - с помощью метода compareTo(), для своих объектных типов его требуется переопределить и реализовать требуемую сортировку;
-
Что возвращает compareTo() - значение >0 если первое значение больше второго, значение ==0 если значения равны, значение <0 первое значение меньше второго;
-
Что появлось нового в колекциях в java 8 - stream;
Hibernate
-
Что такое Hibernate — библиотека решаящая задачи ORM;
-
Что такое ORM - связь между объектной моделью программы и реляционной моделью базы;
-
Назовите некоторые важные интерфейсы Hibernate - SessionFactory, Session, Transaction;
- SessionFactory (org.hibernate.SessionFactory) — неизменяемый потокобезопасный объект с компилированным маппингом для одной базы данных. Необходимо инициализировать SessionFactory всего один раз. Экземпляр SessionFactory используется для получения объектов Session, которые используются для операций с базами данных.
- Session (org.hibernate.Session) — однопоточный короткоживущий объект, который предоставляет связь между объектами приложения и базой данных. Он оборачивает JDBC java.sql.Connection и работает как фабрика для org.hibernate.Transaction. Разработчик должен открывать сессию по необходимости и закрывать ее сразу после использования. Экземпляр Session является интерфейсом между кодом в java приложении и hibernate framework и предоставляет методы для операций CRUD.
- Transaction (org.hibernate.Transaction) — однопоточный короткоживущий объект, используемый для атомарных операций. Это абстракция приложения от основных JDBC или JTA транзакций. org.hibernate.Session может занимать несколько org.hibernate.Transaction в определенных случаях.
Java EE
-
Что такое EJB - Enterprise Java Bean спецификация технологии написания и поддержки серверных компонентов, содержащих бизнес-логику;
-
JPA - Java Persistance Api - спецификация обеспечивающая объектно-реляционное представление java объектов;
-
JTA - API для поддержки транзакций, входящее в стандарт серверной платформы для языка программирования Java — Java EE. Определяет взаимодействие между менеджером транзакций и другими участниками распределённой транзакционной системы;
-
Что такое JIT - технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения (сравнимая с компилируемыми языками) за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. JIT базируется на двух более ранних идеях, касающихся среды исполнения: компиляции байт-кода и динамической компиляции;
-
Какие методы Servlet - service(), doPost(), doGet(), init(), destroy();
-
public void init(ServletConfig config) – используется контейнером для инициализации сервлета. Вызывается один раз за время жизни сервлета. public void service(ServletRequest request, ServletResponse response) – вызывается для каждого запроса. Метод не может быть вызван раньше выполнения init() метода. public void destroy() – вызывается для уничтожения сервлета (один раз за время жизни сервлета).
-
Зачем нужен метод doGet() - используется для получения данных(url не зашифрован);
-
Зачем нужен метод doPost() - используется для изминения данных(url зашифрован);
-
Что такое двухфазная(распределённые) транзакции - это транзакции которые требуется выполнить в нескольких базах и если в одной из баз она не выплнилась, то изминение откатываюься с обоих баз;
-
Чем отличаются дравера БД с прериской XA и без - Преписка XA говорит нам о том что дравер поддерживает двухфазная(распределённые) транзакции;
-
Какие бины бывают - Entity Bean, Session Bean, Message Driven Bean;
-
Entity Bean - содержит в себе параметры и гетреы/сетеры;
-
Session Bean - содержит в себе сесию и делится ещё на три вида.
-
Message Driven Bean - логика реакция на событие в системе;
-
Что такое RMI - програмный интерфейс вызыва удалёных методов (пример в пакете exampleRMI);
-
Что такое JMS - это стандарт позваляющий создовать, посылать, получать и читать сообщения;
-
JNDI - позваляет получать данные и объекты по их именам;
-
Что происходит когда мы переходим по ссылке - вызывается запрос GET который идёт на DNS сервер с именем сервиса и получаем IP аддрес сервиса и сервис на возращает POST запрос;
-
Бин с анотацией @Stateful – автоматически сохраняют свое состояние между разными клиентскими вызовам;
-
Бин с анотацией @Stateless – используются для реализации бизнесс-процессов, которые могут быть завершены за одну операцию;
-
Stateles - У Stateful бина есть события @PrePassivate и @PostActivate для сериализации. Т.е. при нехватке ОЗУ этот бин может сохраняться на жесткий диск;
-
Stateful - Stateless означает, что бин не держит состояние между сессиями. То есть надо "убить" бин чтобы увидеть что он не сохраняет свое внутреннее состояние;
-
Singleton session beans (Singleton) - (Гибрид, общий для клиентов, но хранит состояния)
-
Каждый сессионный бин должен иметь безнес интерфейс (business interface) (требование актуально до версии ejb 3.1) в котором декларируются бизнес методы, видимые клиентским приложениям. (bean class), который содержит реализацию бизнес-методов.
Session Beans интерфейс может иметь аннотацию:
@Remote - удаленный (business interface) - используеются разные виртуальные машины (даже если на одном хосте). @Local - локальный (business interface) - используется одна и таже виртуальная машина.
-
Servlet жизненый цикл - Жизненный цикл сервлета состоит из следующих шагов: В случае отсутствия сервлета в контейнере. Класс сервлета загружается контейнером. Контейнер создает экземпляр класса сервлета. Контейнер вызывает метод init(). Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы. За весь жизненный цикл метод init() вызывается только один раз. Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса. В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета;
Spring
-
Что такое Spring - Фреймворк с открытым исходным кодом , упращает enterprise - разработку. имеет слоистую архетиктуру;
-
Что такое aspect spring - Аспектно-ориентированное программирование с принципом конфигурирования зависимостей (dependency injection-DI) и абстракции сервисов (Enterprise Service Abstraction) являются основными принципами;
-
Spring Core - универсальный фреймворк с открытым исходным кодом для Java-платформы;
-
Что такое Inversion of Control - это некий абстрактный принцеп набор рекомендаций для написания слабосвязанного кода;
-
Dependency Injection - одна из реализаций IOF;
-
Какие есть области видимости бинов(scope) - singleton, prototype, request, session, global-session;
-
singleton - возвращает один и тот же протатип бина на каждый запрос;
-
prototype - создаёт и возвращает новый экземпляр на каждый запрос;
-
request - создаёт и возвращает экземпляр бина на каждый http запрос и уничтожает после завершения обработки запроса;
-
session - создаёт и возвращает экземпляр бина для кавждой HTTP сессии и уничтожает, после её завершения;
-
global-session - создаёт и возвращает экземпляр бина на время существования глобальной сесии всего приложения с портлетами;
SQL
-
Какие джойны вы знаете - INNER_JOIN - все совподающие (отбрасываем не совпавшие) OUTER_JOIN - оязтельно выводит все строки одной или обеих таблиц LEFT_JOIN - несеметричный вывод всех результатов левой таблицы при том в правой таблице если нет соответствия то NULL RIGHT_JOIN - несеметричный вывод всех результатов правой таблицы при том в правой таблице если нет соответствия то NULL FULL_JOIN - все результаты при этом если нет соответствия то NULL CROSS_JOIN - декартово произведение
-
Что такое Декартовое произведение - это множество, элементами которого являются все возможные упорядоченные пары элементов исходных множеств;
-
Что такое View - виртуальная (логическая) таблица, представляющая собой запрос;
-
Зачем нужны View - уменьшают сложность, повышение безопасности, повышение удобства, переимнование стобцов таблицы, настройка данных для пользователя, защита целостности данных;
-
Как работают тригеры - Допустим в БД добавили запись в таблице с полем и с созначением ON так же у нас есть тригер на данное поле то у нас произойдёт какое то событе после добавление записи;
-
Опишите структуру иерархического запроса - SELECT FROM table START WITH field1 is null CONNECT BY PRIOR field1 = field2;
-
Что такое merge - оператор языка SQL, который позволяет слиять данные одной таблицы с данными другой таблицы;
-
Опишите merge - MERGE INTO table_name USING table_reference ON (condition) WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 …] WHEN NOT MATCHED THEN INSERT (column1 [, column2 …]) VALUES (value1 [, value2 …]);
-
Какие индексы есть - Составной, Уникальный, Покрывающий
-
Какие есть уровни доступа транзакций - Шкала уровней изолированности транзакций содержит ряд значений, проранжированных от наинизшего до наивысшего; более высокий уровень изолированности соответствует лучшей согласованности данных, но его использование может снижать количество физически параллельно выполняемых транзакций. И наоборот, более низкий уровень изолированности позволяет выполнять больше параллельных транзакций, но снижает точность данных. Таким образом, выбирая используемый уровень изолированности транзакций, разработчик информационной системы в определённой мере обеспечивает выбор между скоростью работы и обеспечением гарантированной согласованности получаемых из системы данных;
-
Уровнях изоляций транзакций - Read uncommitted, Read committed, Repeatable read, Serializable;
-
Statement и PreparedStatement - Statement: используют для простых запросов без параметров, а PreparedStatement используют для запросов с параметрами так как он иньекция защищёный; В PreparedStatement все строковые параметры автоматически преобразуются в строки с эскейп-последовательностями. В частности, нет никаких проблем со строками содержащими кавычки. А при использовании сложения строк и Statement вам об этом нужно заботиться самим или вы получите SQL injection.
-
В PreparedStatement все строковые параметры автоматически преобразуются в строки с эскейп-последовательностями. В частности, нет никаких проблем со строками содержащими кавычки. А при использовании сложения строк и Statement вам об этом нужно заботиться самим или вы получите SQL injection.
-
Что такое SQL Injection - это аттака на веб приложение при которой с помощью отправления SQL кода пытаются изменить или получить данные;
-
Что такое транзакция - транзакция это последовательность операции к базе которые выполнятся либо все либо если в одной из операции будет ошибка то не одна операция не выпонится;
-
Зачем нужны транзакции - для сохранения консистентности данных;
-
Оператор HAVING - используется в сочетании с оператором GROUP BY, чтобы ограничить группы возвращаемых строк только тех, чье условие TRUE.
-
Первичный ключ – служит как ограничение целостности в рамках одной таблицы для однозначной идентификации, конкретно поле первичного ключа не может повторятся или быть пустым. Внешний ключ(вторичный) – служит как ограничение целостности связей нескольких таблиц, конкретно подчиненная таблица не может ссылаться на несуществующие записи главной таблицы(что позволяет строить целостные модели данных).
-
Типы связей между таблицами -
-
Связь "один-ко-многим" Рассмотрим базу данных, в которой фиксируются заказы, включающую таблицы "Клиенты" и "Заказы". Клиент может разместить любое количество заказов. Следовательно, у любого клиента, представленного в таблице "Клиенты", может быть много заказов, представленных в таблице "Заказы". Поэтому между таблицами "Клиенты" и "Заказы" существует отношение "один-ко-многим". Чтобы создать отношение "один-ко-многим" в структуре базы данных, добавьте первичный ключ на стороне "один" в таблицу на стороне "многие" в виде дополнительного поля или полей. В нашем примере необходимо добавить новое поле — "Код" из таблицы "Клиенты" — в таблицу "Заказы" и назвать его "Код клиента". После этого Access сможет использовать номер "Код клиента" из таблицы "Заказы" для поиска клиента по каждому заказу.
-
Связь "многие-ко-многим" Рассмотрим отношение между таблицей "Продукты" и таблицей "Заказы". Один заказ может включать несколько продуктов. С другой стороны, отдельный продукт может содержаться в нескольких заказах. Следовательно, для каждой записи таблицы "Заказы" может существовать много записей в таблице "Продукты", и наоборот. Поэтому такой тип отношения называется "многие-ко-многим". Обратите внимание, что для обнаружения существующего отношения между таблицами важно рассмотреть обе его стороны. Чтобы представить связь "многие-ко-многим", нужно создать третью (связующую) таблицу, в которой она разбивается на две связи "один-ко-многим". Первичные ключи двух таблиц вставляются в третью таблицу. В результате в третьей таблице сохраняются все экземпляры связи. Например, таблицы "Заказы" и "Продукты" имеют связь "многие-ко-многим", определяемую путем создания двух связей "один-ко-многим" в таблице "Заказано". В одном заказе может быть много продуктов, и каждый продукт может быть указан во многих заказах.
-
Связь "один-к-одному" При отношении "один-к-одному" каждая запись в первой таблице может иметь не более одной связанной записи во второй таблице, и наоборот. Отношения этого типа используются нечасто, поскольку обычно сведения, связанные таким образом, хранятся в одной таблице. Отношение "один-к-одному" используется для разделения таблицы, содержащей много полей, с целью отделения части таблицы по соображениям безопасности, а также с целью сохранения сведений, относящихся к подмножеству записей в основной таблице. После определения такого отношения у обеих таблиц должно быть общее поле.
Git
- чем отличается comit от push - comit отправка изминений в локальный репозиторий, а push в удалённый
JavaScript
- Что называют замыканием - передачу функции в качестве параметра;
Сomputer Science
- Что такое прирывания - — сигнал от программного или аппаратного обеспечения, сообщающий процессору о наступлении какого-либо события, требующего немедленного внимания. Прерывание извещает процессор о наступлении высокоприоритетного события, требующего прерывания текущего кода, выполняемого процессором.
- Конкурентность в программировании - Конкурентность реализована в логике программирования таким образом, что она явно устанавливает отдельные точки исполнения вычислений или процессов, называемые управляющими потоками. Они позволяют этим вычислениям избежать ожидания завершения всех остальных вычислений — как это происходит в случае последовательного программирования.
Алгоритмы и структуры данных
-
Что такое алгоритм - описание последовательности действий, строгое выполнение которых приводит к решению поставленной залачи за кончное число шагов.
-
Какие свойства алгоритма - Дискретность - алгоритм должен состоять из шагов, следующих в определённом порядке. Детерминированность - любое действие алгоритва должно быть точно определенно и не должно быть двухсмысленности. Кончность - каждая ветвь алгоритма должна иметь заершение Массовость - один алгоритм должен принимаит различные исходные данные. Результативность - отсутствие ошибок, при всех допустимых исходных значениях.
-
Виды алгоритмов - Линейный - действия выполняются однократно одно за другим. Разветвляющийся - алгоритм содержит минимум одно условие, в зависимости от которого выполняется ветвление. Циклический - действия повтояются многократно пока условие, пока условие цикла удовалетворяет истинности.
-
Какие типы данных вы знаете - Списки, Массивы, Хеш-таблицы, Стеки, Очкреди, Деревья
-
Время выполнения алгоритма -
O(log n) - время выполнения описывается логарифмеимческой зависимостью. Такое время выполнения имеет бинарное дерево. O(n log n) - время выполнения равно n*log n (linearithmic algorithm) имеет алгоритм быстрой сортировки. O(n^2) - время выполнения является квадратичным у алгоритма сортировки пузырьком. O(n^3) - кубическое время выполнения имеет алгоритм с циклом тройного уровня вложения. 2^n - задача коммивояжёра и алгоритмы полного перебора имеет эксподициальное временем выполнения.
Вот некоторые распространённые значения О большого:
Константная O(1) ОХРЕНЕННО!! (получение значения по индексу в массиве) Логарифмическая O(log N) КРУТО! (двоичное дерево) Линейная O(N) НОРМАС. логарифмическая O(N log N) БЛИИИН... (quick sort) Полиномиальная O(N ^ 2) ОТСТОЙ (сортировка пузырьком) Экспоненциальная O(2 ^ N) ОТВРАТИТЕЛЬНО Факториальная O(N!) ТВОЮЖМАТЬ
O(1) - затраты времени не зависят от размера задачи O(log(n)) - при увеличении размера задачи вдвое, затраты времени меняются на постоянную величину O(n) - при увеличении размера задачи в 2 раза, затраты времени возрастут тоже в два раза O(n^2) - при увеличении размера задачи в 2 раза, затраты времени возрастут примерно в четыре раза O(nlog(n)) - при увеличении задачи в два раза, затраты времени возрастут в два раза, плюс некоторая прибавка, относительный вклад которой уменьшается с ростом n. При малых n может вносить очень большой вклад. O(nlog(n)) начинает расти как квадрат при малых n, но потом рост замедляется почти до линейного O(n^p) - полиномиальный алгоритмы, остающиеся мечтой для некоторых задач. O(a^n), O(n!), O(n^n) - неполиномиальные алгоритмы, в порядке ускорения увеличения затрат времени
-
QUICK SORT - БЫСТРЫЙ СОРТИРОВКА O(n log n)
-
QUICK SORT 3-WAY - БЫСТРЫЙ СОРТ 3-ПУТЬ O(n log n)
-
HEAP SORT - СОРТИРОВКА КУЧЕЙ O(n log n)
-
SMOOTH SORT - ГЛАДКАЯ СОРТИРОВКА O(n log n)
-
MERGE SORT (IN-PLACE) - СОРТИРОВКА СЛИЯНИЕМ O(n²)
-
CYCLE SORT - ЦИКЛИЧНАЯ СОРТИРОВКА O(n²)
-
SELECTION SORT - ВЫБРОЧНАЯ СОРТИРОВКА O(n²)
-
INSERTION SORT - СОРТИРОВКА ВСТАВКАМИ O(n²)
-
GNOME SORT - ГНОМЬЯ СОРТИРОВКА O(n²)
-
BUBBLE SORT - ПУЗЫРЬКОВАЯ СОРТИРОВКА O(n²)
-
COCKTAIL SORT - КОКТЕЛЬНАЯ СОРТИРОВКА O(n²)
-
ODDEVEN SORT - ЧЁТНО/НЕЧЁТНАЯ Сортировка O(n²)
-
RADIX SORT - ПРОЗРАЧНАЯ СОРТИРОВКА Worst Case: O(kN)
https://habrahabr.ru/post/188010/
Доступ Поиск Вставка Удаление
Массив O(1) O(N) O(N) O(N)
Связный список O(N) O(N) O(1) O(1)
Двоичное дерево поиска O(log N) O(log N) O(log N) O(log N)
А так же: http://javastudy.ru/interview/list-of-question-java-interview/ https://www.youtube.com/watch?v=P6aNLWuLK18 https://jsehelper.blogspot.ru/ http://javastudy.ru/interview/jee-hibernate-questions-answers/
Тест Вакансия Разработчик трекера (Яндекс)
-
Какие из следующих стандартных контейнеров позволяют найти в них элемент за O(log(n)) по его значению?
java.util.Vector
java.util.ArrayList
java.util.LinkedList
java.util.TreeSet
java.util.HashSet
сортированный java.util.Vector
сортированный java.util.ArrayList
сортированный java.util.LinkedList
Ответ: java.util.TreeSet бинарное дерево имеет сложность O(log(n))
- Напишите lock-free реализацию класса с методом BigInteger next(), который возвращает элементы последовательности Фибоначчи. Код должен корректно работать в многопоточной среде.
Ответ:
import java.math.BigInteger; import java.util.concurrent.atomic.AtomicReference;
public class AtomicFibonacciSequence {
private static class FibonacciEntry {
BigInteger previous;
BigInteger current;
FibonacciEntry(){
previous = BigInteger.ZERO;
current = BigInteger.ONE;
}
FibonacciEntry(BigInteger previous, BigInteger current){
this.previous = previous;
this.current = current;
}
FibonacciEntry nextEntry() {
return new FibonacciEntry(current, current.add(previous));
}
}
private final AtomicReference<FibonacciEntry> entryHolder = new AtomicReference<>();
public AtomicFibonacciSequence() {
entryHolder.set(new FibonacciEntry());
}
public BigInteger next() {
for (;;) {
FibonacciEntry entry = entryHolder.get();
FibonacciEntry nextEntry = entry.nextEntry();
if (entryHolder.compareAndSet(entry, nextEntry)) {
return nextEntry.current;
}
}
}
}
-
Перечислите все проблемы, которые вы видите в данном коде:
public abstract class Digest { private Map<byte[], byte[]> cache = new HashMap<byte[], byte[]>(); public byte[] digest(byte[] input) { byte[] result = cache.get(input); if (result == null) { synchronized (cache) { result = cache.get(input); if (result == null) { result = doDigest(input); cache.put(input, result); } } } return result; } protected abstract byte[] doDigest(byte[] input); }
Ответ: Двойная проверка на null не имеет смысла: result = cache.get(input); if (result == null) Да и вообще лучше проверку пепеписать в более правильный вид: if(!cache.containsKey(input)
Массив byte[] как ключь не лучшая идея так как:
- мы можем изменить массив в мапе и хэш останится старый так как объект у нас тот же но с новыми значениями. Однако если у нас массивы в ключе immutable то значение в массиве не поменяется.
- так же для проверки ключа уже придется использовать не equals(), а Arrays.equals() так как, так как ключ в мапе и массив для сравнения скорее всего у нас будут разными объектами. Как то не очень выглядит: synchronized (cache) { Для потокобезопасности в java есть ConcurrentHashMap.
Можно вообще переписать в нормальный вид:
public abstract class Digest { private Map<ImmutableByteArray, byte[]> cache = new ConcurrentHashMap<>();
public byte[] digest(byte[] input) { ImmutableByteArray key = new ImmutableByteArray(input); if(!cache.containsKey(key)) { cache.put(key, result); } return cache.get(key); }
protected abstract byte[] doDigest(byte[] input); }
- Пусть N такое число, что 0xff = 0xc0 + N. Напишите представление числа N в десятичной системе счисления.
Ответ: 63
Вакансия Java developer (Vaadin) (Промсвязьбанк)
- Что будет напечатано на консоли при попытке откомпилировать и выполнить следующий код:
float f = 36 / 8; System.out.println( f );
a) 4
b) 4.0
c) 4.5 +
d) Ошибка времени компиляции
e) Ошибка выполнения
- Что произойдет при попытке откомпилировать и выполнить следующий код:
System.out.println( Integer.POSITIVE_INFINITY == Integer.POSITIVE_INFINITY );
a) Ошибка времени компиляции
b) будет напечатано true +
c) будет напечатано false
-
Что будет напечатано в результате выполнения следующего кода?
public class MyException extends Exception { } public class Person { public void go() throws Exception { throw new Exception(); } } public class Me extends Person { public void go() throws Exception{ throw new MyException(); } public static void main(String[] args) { try {Person person = new Me(); person.go();} catch (Exception e) {System.out.println("Exception");} catch (MyException e) {System.out.println("MyException");} } }
a) MyException +
b) Exception
c) Ошибка времени компиляции
d) Ошибка времени выполнения
-
Что будет напечатано при попытке откомпилировать и выполнить следующий код:
int i = 10; boolean b = false; if ( b = true ) { i += 2; } System.out.println( i );
a) 10
b) 12 +
c) ошибка времени компиляции
d) программа выполнится нормально, но ничего напечатано не будет
-
Какие цифры и в каком порядке будут выведены на экран программой:
public class MyClass { public static void main( String[] args ) { int k = 0; try { int i = 5 / k; } catch( ArithmeticException e ) { System.out.println( "1" ); // 1 } catch( RuntimeException re ) { System.out.println( "2" ); return; } catch( Exception ee ) { System.out.println( "3" ); } finally { System.out.println( "4" ); } System.out.println( "5" ); } }
a) будет выведено только 5
b) будет выведено 1 и 4, в таком порядке
c) будет выведено 1, 2 и 4, в таком порядке
d) будет выведено 1, 4 и 5, в таком порядке +
e) будет выведено 1, 2, 4 и 5, в таком порядке
f) будет выведено 3 и 5, в таком порядке
g) будет выведено 1
5a. Как изменится вывод примера 4, если после строки // 1 добавить строку кода:
System.exit(0);
Вывод: 1, 4;
5б. Как изменится вывод примера 4, если после строки // 1 добавить строку кода:
return;
Вывод: 1, 4;
-
Что будет выведено на экран программой:
public class MyClass { public static void main( String[] args ) { StringBuffer sb = new StringBuffer( -12 ); System.out.println( sb.toString() ); } }
a) -12 +
b) сообщение об ошибке времени выполнения
с) сообщение об ошибке времени компиляции
-
Что будет выведено на экран программой:
public class MyClass { private void processArray( int[] arr ) for ( int i = 0; i < arr.length; i++ ) { arr[i]++; } private void processString( String s ) { s = "Was changed"; } public static void main( String[] args ) { int[] iArr = {0,1}; String str = "test"; processArray( iArr ); processString( str ); System.out.println( iArr[0] + ", " + iArr[1] + ", " + str ); } }
a) 0, 1, test
b) 0, 1, Was changed +
c) 1, 2, test
d) 1, 2, Was changed
- Можно ли из программы запустить процесс сборки мусора ?
a) да
b) нет +
c) в зависимости от операционной системы
d) в зависимости от версии JVM
- Какое из следующих событий может быть причиной смерти потока ?
a) вызов метода sleep()
b) вызов метода wait()
c) окончание выполнения метода start()
d) окончание выполнения метода run() +
e) окончание выполнения конструктора класса Thread +
- В каком классе определены методы wait() и notify()
a) Thread
b) Object +
c) String
d) Math
-
Что будет выведено на экран при попытке откомпилировать и запустить программу
public class MyClass { public static void main( String[] args ) { int i = 10; Runnable r = new Runnable() { public void run() { for ( int j = 0; j < i; j++ ) { System.out.println( j ); } } }; ( new Thread( r ) ).start(); } }
a) будут напечатаны числа от 0 до 9 +
b) будет выведено сообщение об ошибке времени компиляции
с) программа завершится нормально и ничего не напечатает
d) будет выведено сообщение об ошибке времени выполнения
-
Какие предложения можно вставить в "строку 1" приведенного ниже класса, чтобы не возникла ошибка времени компиляции
public class MyClass { int a; int b = 0; static int c; void f() { int d; int e = 0; // строка 1 } }
a) a++ +
b) b++ +
c) c++
d) d++ +
e) e++ +
- Какой из классов-оболочек не имеет конструктора с параметром типа String ?
a) Integer
b) Boolean
c) Double
d) Float
e) Character +
f) Byte
g) Short
- Какая из перечисленных ниже коллекций является потокобезопасной:
a) Vector +
b) ArrayList
c) LinkedList
d) HashSet
e) TreeSet
- Какой из классов, реализующих интерфейс Set, следует использовать, если нужно получить элементы в том же порядке, в каком они были добавлены ?
a) HashSet
b) TreeSet
c) LinkedHashSet +
- Какой из классов, реализующих интерфейс List, использовать предпочтительнее, если часто используются операции вставки/удаления в середину списка ?
a) ArrayList
b) LinkedList +
c) Vector
-
Что будет выведено на экран, если откомпилировать и запустить программу:
class ClassA { public void showMe1() { System.out.println( "ClassA 1" ); } public static void showMe2() { System.out.println( "ClassA 2" ); } public static void main( String[] args ) { ClassA a = new ClassB(); a.showMe1(); a.showMe2(); } } class ClassB extends ClassA { public void showMe1() { System.out.println( "ClassB 1" ); } public static void showMe2() { System.out.println( "ClassB 2" ); } }
a) ClassA 1, с новой строки ClassA 2
b) ClassB 1, с новой строки ClassB 2 +
c) ClassA 1, с новой строки ClassB 2
d) ClassB 1, с новой строки ClassA 2
-
Что неправильно в приведенном ниже коде ?
Connection c = ... PreparedStatement p = c.prepareStatement("SELECT ..."); ResultSet r = p.execute(); if (r.next()) { ... }
a) Необходимо заменить if на while
b) Необходимо заменить execute на executeQuery +
c) Необходимо заменить execute на executeUpdate
d) Необходимо заменить next() на isFirst()
e) Нет правильного ответа.
- Какой тип данных Java следует использовать при извлечении строк из базы данных, если известно, что одно из полей представляет собой значение денежной суммы ?
a) float
b) double
c) Float
d) Double
e) BigInteger
f) long
g) BigDecimal +
- Как нумеруются столбцы в ResultSet при вызове метода getXXX(номер_столбца)?
a) c 1 +
b) c 0
c) задание числового номера недопустимо и вызовет ошибку времени компиляции
Junior Java Developer (Тинькофф)
Вопрос 1 Question 1:
-
class Ex1{
-
public static void main(String[] args) {
-
int a[][] = new int[3][]; -
a[1] = new int[]{1,2,3}; -
a[2] = new int[]{4,5}; -
System.out.print(a[1][1]);
-
}
-
}
A. Compilation fails due to line 3.
B. Compilation fails due to line 4.
C. An exception will be thrown in runtime.
D. 2
E. 3
F. 5
Ответ:D
Вопрос 2
-
class Ex1{
-
int a=10;
-
public static void main(String[] args) {
-
new Ex1().print(); -
}
-
public void print(){
-
int a = 8;
-
System.out.print(a + " ");
-
}
-
}
A. 10
B. Compilation fails.
C. 18
D. Output is unpredicatable.
E. 8
Ответ:E
Вопрос 3
-
class Ex1{
-
static int x = 10;
-
public static void main(String[] args) {
-
for(int x=0;x<5;x++){ -
} -
System.out.print(x); -
}
-
}
A. 4
B. 5
C. Compilation fails.
D. 10
E. A runtime exception will be thrown.
Ответ:D
Вопрос 4
-
class Person{
-
Person(String s,int i ){
-
++pid; -
name=s; -
age=i; -
} -
static int pid;
-
int age;
-
String name;
-
} -
class Test{
-
public static void main(String args[]){
-
Person p1 = new Person("John" , 22);
-
Test te = new Test();
-
Person p2 = te.change(p1);
-
System.out.println(p2.pid +" "+p2.name+ " "+p2.age);
-
System.out.print(p1.pid +" "+p1.name+" "+ p1.age);
-
}
-
private Person change(Object o){
-
Person p2 = (Person)o;
-
p2.age = 25;
-
return p2;
-
}
-
}
A:
1 John 25
1 John 25
B:
1 John 25
1 John 22
C:
1 John 22
1 John 22
D: ClassCastException is thrown at runtime.
E: Compilation fails.
Ответ:B
Вопрос 5
-
class Ex1{
-
public static void main(String args[]){
-
int x = 10;
-
int y = new Ex1().change(x);
-
System.out.print(x+y);
-
}
-
int change(int x){
-
x=12;
-
return x;
-
}
-
}
A. 20
B. 22
C. Compilation fails.
D. 24
E. An exception is thrown at runtime.
Ответ:B
Задачи на логику
1)Вопрос: Алиса и Боб играют в следующую игру. На столе выложены в ряд 50 монет, причем каждая из монет может быть любого достоинства. Алиса берет монету с одного из концов ряда, потом Боб берет опять с одного из концов, потом опять Алиса и так далее, пока монеты не закончились. Доказать, что Алиса всегда сможет набрать сумму, равную или больше той, что будет у Боба.
Ответ: Нумеруем монетки и делим их на два множества, с чётными номерами и нечётными. Понятно, что сумма денег в них будет либо равна, либо в одном будет больше. Алиса первым ходом выбирает множество, из которого она будет брать монетки и всё.
2)Вопрос: Почему канализационные люки круглые?
Ответ: Есть несколько вариантов. Так как диаметр круга одинаков, как его не крути, то круглый люк не может провалиться в колодец. У квадрата же, например, диагональ больше его сторон, поэтому крышка могла бы упасть. Также можно ответить, что круглые люки проще транспортировать и передвигать.
3)Вопрос: В закрытой комнате есть 3 лампочки, а в коридоре 3 выключателя. За какое минимальное открытие дверей можно определить какой выключатель к какой лампочке относится?
Ответ: За одно открытие. Включаем одновременно 2 выключателя, через некоторое время выключаем второй. Заходим в комнату: одна из лампочек осталась гореть — это первый выключатель, далее щупаем оставшиеся лампочки — теплая и будет вторым выключателем, а холодная соответственно третьим.
4)Вопрос: Как разделить торт на 8 равных частей тремя разрезами?
Ответ: Сперва нужно сделать 2 разреза крест на крест, поделив торт на 4 равных части. А затем разрезать торт горизонтально пополам. Ну и что, что куски стали невысокие, зато у вас 8 равных частей. Еще можно после первых двух разрезов сложить кусочки друг на друга и переполовинить одним разрезом.
5)Вопрос: Среди поля найден мертвый человек со спичкой в руках, следов нет. От чего он умер и при каких обстоятельствах?
Ответ: Человек умер от падения с самолета, который начал терять высоту, и авария была неизбежна. На всех пассажиров не хватило одного парашюта и они тянули жребий. Ему досталась короткая спичка, и он был вынужден прыгать без парашюта.
6)Вопрос: Сколько теннисных мячей поместится в автобус?
Ответ: Точного правильного ответа не знает и сам рекрутер, так как не уточняется, что за мячи и автобус — их размеры не известны, и никто досконально это не проверял. Поэтому тут важен ход ваших мыслей, вы можете только предположить. Назовите примерные длину, ширину и высоту автобуса, размеры одного мяча. Посчитайте объем автобуса и мяча — так вы узнаете сколько мячей поместится в пустой автобус. Уменьшите примерно это значение с учетом сидений и других деталей автобуса, сделайте поправку на то, что мячи не квадратные и дайте ответ. В этом случае процесс поиска ответа важнее самого ответа. Варианты вопроса могут быть разные: мячи — футбольные, вместо автобуса — комната и т. п.
7)Вопрос: Доктор выдал пациенту 4 таблетки двух видов — по 2 таблетки каждого, которые нельзя отличить по внешнему виду. Таблетки надо выпить за два приема: утром по одной таблетке каждого вида и так же вечером. Если нарушить дозировку или не принять таблетки, то пациент умрет. Так вышло, что таблетки перемешались. Как пройти курс лечения и выжить?
Ответ: Конечно, можно сказать, что лучше пойти к врачу и попросить еще, все таки вопрос жизни и смерти. Но это могут быть единственные таблетки на Земле, доктор может исчезнуть при загадочных обстоятельствах и т. д. Так что ответить все же придется. К тому же все достаточно просто: нужно разделить каждую таблетку на 2 части и выпить по половинке каждой таблетки утром и вечером.
Вопрос задал сотрудник компании Epam Оптимизируйте код: Write function that brings int array and calculate sum of number in odd positions public int sum(int [] a) { int s = 0; for (int i=0; i<a.length; i++) { if (i % 2 != 0) { s += a[i]; } } return s; }
Ответ: for (int i = 1; i < a.length; i+=2) { s += a[i]; }
ТЗ: Сделать war-приложение. Есть магазин и склад. И есть одежда, находящаяся либо в магазине, либо на складе. У каждого экземпляра одежды есть размер, стоимость, цвет, вид и краткое описание. Размер может быть от 42 до 54. Цвет может быть белый, синий, красный, зеленый, черный. Вид одежды может быть платье, брюки, юбка, жилетка, рубашка. В приложении должен быть EJB-сервис, который умеет добавлять данные, отдавать данные, сохранять данные, перемещать одежду из магазина на склад и со склада в магазин и удалять ее совсем. Базу не надо, сохранение идёт в память. Нужен REST-контроллер, который выдаёт/принимает данные как JSON и одна страничка html+jquery которая показывает и даёт редактировать поля: размер, стоимость, цвет, вид и краткое описание, а также кнопки для перемещения данных, сохранения и удаления. Web-приложение должно запускаться на jboss 7.x или на wildfly 10.x. Java8. Исходники и war файл скинуть на почту
ООО "ФФИН Банк"
Необходимо перечислить базовые интерфейсы Java Collection API. List, Set, Collection, Queue, SortedSet, SortedMap Перечислите по одной реализации базовых интерфейсов. ArrayList, HashSet, LinkedList, TreeSet, TreeMap
Дан следующий java-код
⦁ A a = new A(); ⦁ A b = a; ⦁ b = new A(); ⦁ b = new A(); ⦁ int i=0;
Сколько экземпляров класса A будет создано? 3 Сколько экземпляров будет доступно для сборщика мусора в момент выполнения строки 5? 2
Необходимо реализовать на Java метод, принимающий на вход коллекцию строк и выбрасывающий из переданной коллекции все элементы, начинающиеся на «aaa». Сигнатура метода должна иметь вид:
public static void filterTripleA(Collection strings);
public static void filterTripleA(Collection strings){
for(Object s : strings){
if(((String) s).startsWith("aaa"));
{
strings.remove(s);
}
}
}
java 8: public static void filterTripleA(Collection strings){ strings.removeIf(e -> ((String )e).startsWith("aaa")); }
Необходимо реализовать Java-метод, не использующий циклы, печатающий все неотрицательные чётные числа, небольшие указанного.
Сигнатура метода должна иметь следующий вид:
public static void printEvenNumbers(int number);
public static void printEvenNumbers(int number){
IntStream.range(0, number+1)
.filter(i -> (i%2)==0)
.forEach(System.out::println);
}
Дана схема БД
У клиента может не быть лицевых счетов. По лицевому счёту может не быть транзакций.
Необходимо написать два SQL-запроса:
- SQL-запрос, возвращающий идентификаторы клиентов, имена которых начинаются на букву А.
SELECT a.acc_number FROM customer c ,account a WHERE c.name like "A%" AND a.id = c.id
- SQL-запрос возвращающий имя клиента, описание его лицевого счёта и среднюю сумму транзакции по этому счёту.
SELECT c.name, a.acc_number, avg(ft.transaction_date_amount) FROM customer c ,account a ,fin_transaction ft WHERE a.id = c.id AND a.id = ft.id

