Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

программирование

.docx
Скачиваний:
16
Добавлен:
10.02.2015
Размер:
35.39 Кб
Скачать
  1. Структура компьютера по фон Нейману. Понятие алгоритма. JVM. Этапы компилирования и исполнения программ на Java. Комплирование и выполнение Java-программ с помощью командной строки.

  1. Примитивные типы данных Java (int, short, long, byte, double, float, boolean, char), различия между примитивными и ссылочными типами данных. Приведение типов. Арифметические и логические операции (+,-,*,/,%, &&, ||, !). Преобразование типов в при арифметических операциях. Сужение при преобразовании типов

  1. Условные и циклические операторы языка. Условные операторы if, switch case, (P ? v1 : v2 ). Циклические операторы while, do while, циклы for и for each, операторы break и continue.

  1. Массивы, действия с ними. Одномерные массивы объявление ссылки и выделение памяти. Обращение к элементу массива. Как пройти по всем элементам массива. Многомерные массивы - объявление, способ пройти по всем элементам. Ступенчатые массивы.

  1. Символы и строки. Тип char, номер символа в ASCII. Способ узнать номер. Класс String. Объявление, использование (ввод-вывод, конкатенация, характерные методы). Особенности хранения строковых констант в Java

  1. Методы в java. Объявление и вызов. Правила вызова метода. Возвращаемые значения, return. Параметры, передача по ссылке, по значению. Перегрузка.

  1. Классы и объекты в Java. Классы. Структура класса, члены класса. Объявление объекта класса. Объявление ссылки и выделение памяти. Конструктор класса,  оператор this.

  1. Инкапсуляция. Модификаторы доступа - private, protected, public, по умолчанию. Модификатор static.

  1. Наследование и полиморфизм в Java. Правила наследования методов и атрибутов.  Оператор super. Переопределение. Модификаторы abstract и final. Позднее связывание. Восходящее преобразование.

+ Пакеты в Java.

  1. Создание пакета. Иерархия. Директивы import и package. Classpath. Компиляция и выполнение классов в командной строке с учетом пакетов.

  1. Интерфейсы

  1. Объявление, структура. Что могут содержать интерфейсы? Наследование интерфейсов. Правила реализации интерфейса классом. Восходящее преобразование в случае интерфейса.

  1. Исключения

  1. Throwable, Exception, Error, RuntimeException. Оператор throw. Использование throws. Примеры известных исключений - ArithmeticException, NullPointerException.

  2. Блок try - catch, правила работы. Использование finally. Корректная последовательность обработки исключений

  1. Оболочки примитивных типов

  1. Integer, Real, Float, Double, Character, Boolean, Long, Short. Зачем нужны. Автоматическая упаковка. Абстрактный класс Number. Назвать по 3-4 характерных метода у каждого класса.

  1. Generics

  1. Цель использования. Параметризация класса. Пример. Параметризация метода.

  2. Объявление объекта параметризованного класса. Diamond-оператор.

  3. Механизм реализации параметризованных классов. Стирание типов. Последствия для программиста

  4. Неизвестный параметр (wildcard-type). Зачем он нужен?

  5. использование extends и super в параметрах.

  1. Классы-коллекции

  1. Интерфейсы Collection, Set, List, Queue, их основные особенности и классы коллекции, реализующие их.

  1. Ввод-вывод в java.

  1. Ввод с использованием Scanner и args. Вывод с использованием System.out

  2. java.io. Класс File. Классы InputStream, OutputStream, FileInputStream, FileOutputStream, BufferedInputStream, BufferedOutputStream, PipedInputStream, PipedOutputStream, FileReader, FileWriter, PrintWriter, InputStreamReader, OutputStreamWriter, DataInputStream, DataOutputStream, RandomAccessFile (принципиальная разница между ними). Надстройки.

  1. Threads. Реализация потоков с помощью Runnable и Thread. Методы start, stop, sleep, yield, join. Синхронизация. Deadlock. Методы wait, notify и notifyAll.0

+ Регулярные выражения. Синтаксис регулярных выражений. Классы Pattern, Matcher, методы compile, match, find, group. Жадные, ленивые и ревнивые регулярные выражения.

+ jdbc, работа с базами данных. Драйвер базы данных. Классы Connection, Statement, ResultSet.

+ java.net (TCP, UDP)

+ Основы работы http-протокола. Запрос, отклик, контекст. GET и POST запросы. Сессии. Куки. Реализация динамических серверных средств с помощью сервлетов.

10. Пакеты

Пакет (package) — это некий контейнер, ко­торый используется для того, чтобы изолиро­вать имена классов. Например, вы можете со­здать класс List, заключить его в пакет и не думать после этого о возможных конфликтах, которые могли бы возникнуть если бы кто-ни­будь еще создал класс с именем List.

Иерархия пакетов – например, если у вас пакет kfu.itis.proganie, то классы должны лежать в папке proganie, который в свою очередь лежит в itis, который в свою очередь лежит в kfu. Java рекурсивно не рассматривает, так что писать kfu.* будет ошибачно.

Имя пакета задается директивой package. Эта директива должна быть первой незакомментированной строкой в файле с описанием класса. Если файл содержит описания нескольких классов, директива package относится ко всем классам файла. Директива package прикрепляет имя пакета к имени класса.

Имена пакетов жестко связываются с именами каталогов, в которых они размещаются.

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

При вызове на исполнение программы, заключенной в классе из определенного пакета, имя класса должно указываться полностью. При размещении класса HelloWorld в пакете com.java.road вызов интерпретатора должен выглядеть так:

java com.java.road.HelloWorld

причем имя класса обязано соответствовать относительному путевому имени файла HelloWorld.class.

18. Регулярные выражения

  • Pattern - класс шаблона, т.е. содержит описание регулярного выражения;

  • Matcher - класс, реализующий движок разбора строки по указанному шаблону.

Pattern p = Pattern.compile("(\\+7)(\\d{10})");

Matcher m = p.matcher(str1);

m.matches()

Методы класса:

  • compile(String regex) - статический метод, возвращающий объект типа Pattern с указанным шаблоном регулярного выражения;

  • compile(String regex, int flags) - в дополнение предыдущему методы, позволяет указать флаги;

  • flags() - возвращает значения флагов;

  • matcher(CharSequence input) - возвращает объект типа Matcher, для разбора указанной строки;

  • matches(String regex, CharSequence input) - статический метод определяющий, соответствует ли строка input шаблону regex;

  • String pattern() - возвращает шаблон регулярного выражения в виде строки;

  • split(CharSequence input) - разбивает указанную строку на массив строк, в качестве разделителя используется шаблон;

  • split(CharSequence input, int limit) - аналогично предыдущему, но с указанием максимального размера массива.

  • group() - возвращает значение соответствия последней операции поиска соответствия (т.е. вызовов методов lookingAt, matches, find);

  • find() - проверяет, есть ли дальше последовательность символов соответствующая шаблону. Таким образом, чтобы найти третье вхождение шаблона в строке, надо вызвать метод три раза;

В некоторых реализациях квантификаторам в регулярных выражениях соответствует максимально длинная строка из возможных (квантификаторы являются жадными, англ. greedy). Это может оказаться значительной проблемой. Например, часто ожидают, что выражение (<.*>) найдёт в тексте теги HTML. Однако, если в тексте есть более одного HTML-тега, то этому выражению соответствует целиком строка, содержащая множество тегов.

Эту проблему можно решить двумя способами.

  1. Учитывать символы, не соответствующие желаемому образцу (<[^>]*>) для вышеописанного случая).

  2. Определить квантификатор как нежадный (ленивый, англ. lazy) — большинство реализаций позволяют это сделать, добавив после него знак вопроса.

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

В отличие от обычной (жадной) квантификации, ревнивая квантификация не только старается найти максимально длинный вариант, но ещё и не позволяет алгоритму возвращаться к предыдущим шагам поиска для того, чтобы найти возможные соответствия для оставшейся части регулярного выражения

19. JDBC Driver - (Java DataBase Connectivity — соединение с базами данных на Java) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE.

Параметры метода getConnection:

  1. Строка подключения:

  • jdbc:mysql - имя протокола подключения,

  • localhost - имя хоста,

  • mycross - имя базы данных.

  • Логин для подключения к базе данных.

  • Пароль для подключения к базе данных.

    После успешного подключения создаем объект Statement, который будет использоваться для выполнения запросов к базе данных (здесь тоже не используем new):

    Statement s = c.createStatement() ;

    Объявляем переменную ResultSet для получения результата запроса:

    ResultSet rs = null;

    Выполняем запрос:

    rs = s.executeQuery("SELECT * FROM personal");

    Заметим, что для выполнения различных запросов, связанных с изменением данных (INSERTUPDATEDELETE и пр.), следует применять метод executeUpdate

    20. С точки зрения процессов взаимодействие по протоколу TCP выполняется через канал, который существует до тех пор, пока один из процессов не закроет его. Передача процессом информации сводится к тому, что процесс «сбрасывает» байты непосредственно в канал, при этом нет необходимости снабжать байты адресом назначения, поскольку канал логически связан с адресатом. Кроме того, передача по каналу является надежной, то есть принимаемая последовательность байтов в точности соответствует передаваемой последовательности.

    Протокол UDP, как и TCP, реализует взаимодействие между двумя процессами, выполняющимися на разных хостах; тем не менее UDP-взаимодействие принципиально отличается от TCP-взаимодействия. Во-первых, логическое соединение между хостами отсутствует, поскольку не существует процедуры рукопожатия, в ходе которой устанавливался бы канал. Во-вторых, любая передаваемая последовательность байтов должна снабжаться адресом назначения, представляющим собой совокупность IP-адреса хоста и номера порта процесса.

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

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

    Сервер:

    1) создаем сокет (ServerSocket ss = new ServerSocket(4444);)

    2) ждем, пока кто-нибудь подключится (Socket s = ss.accept();)

    3) «общаемся»

    клиент:

    1) создаем сокет (Socket s = new Socket("localhost", 4444);)

    2) «общаемся»

    21. HTTP-протокол

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

    клиент делает запрос, сервер обрабатывает его и возвращает ответ.

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

    GET – при помощи него происходит запрос браузером любого файла веб-сервера, с помощью него можно передавать параметры (/vk/login?log=ramis&pass=1234)

    POST – если необходимо передать на веб-сервер большой объем данных, в урл параметры не видны(vk/login)

    Сookies — файлы, хранящиеся на клиентской стороне. Session — файлы, хранящиеся на сервере. Кукисы можно подделать, украсть, а сессию только украсть.