Java — Ошибка в тесте на Java средний уровень или нет


Содержание

Программирование на Java

Какие утверждения относительно класса java.lang.Object верны

  • нельзя явно наследовать этот класс
  • нельзя явно переопределять методы этого класса
  • (Правильный ответ) у этого класса нет полей
  • (Правильный ответ) у этого класса нет суперкласса
  • (Правильный ответ) любой класс напрямую, или через своих родителей, является наследником Object

Какие утверждения относительно модуля компиляции верны?

  • в модуле компиляции может быть больше одного объявления пакета
  • (Правильный ответ) если объявление пакета отсутствует, то модуль компиляции будет принадлежать безымянному пакету
  • объявления верхнего уровня позволяют обращаться к типам из других пакетов по их простым именам
  • хранится в текстовом .class -файле
  • (Правильный ответ) import -выражения необязательны

Какие из следующих адресов относятся к подсети класса B ?

  • 194.80.20.1
  • 224.0.0.10
  • (Правильный ответ) 172.16.0.1
  • (Правильный ответ) 140.150.160.1

Какие варианты кода не вызовут ошибку компиляции?

  • class Parent <> interface FirstChild <> interface SecondChild implements FirstChild <>
  • (Правильный ответ)
    class Parent <> interface FirstChild <> interface SecondChild extends FirstChild <>
  • (Правильный ответ)
    >java.util.ResourceBundle корректны?
  • (Правильный ответ) позволяет манипулировать наборами ресурсов, зависящих от локалей
  • загрузка объекта для нужной локали производится с помощью статического метода getResource()

  • (Правильный ответ) класс ресурсов может иметь модификатор protected
  • предназначен для хранения объектов, общих для всех локалей
  • класс ресурсов может иметь модификатор private

Какой из следующих вариантов кода будет скомпилирован без ошибок

  • (Правильный ответ)
    public > public > public >Java можно указать модификатор доступа?
  • (Правильный ответ) для конструкторов класса
  • (Правильный ответ) для типов (классов и интерфейсов) объявления верхнего уровня
  • (Правильный ответ) для элементов ссылочных типов
  • для пакетов

Какие утверждения относительно java.util.Random корректны?

  • последовательный запуск приложения, генерирующего последовательность псевдослучайных чисел, никогда не вернет одинаковых последовательностей
  • void nextBytes(byte[] arr) — заполняет массив arr нулями
  • (Правильный ответ) используется для получения последовательности псевдослучайных чисел
  • (Правильный ответ) double nextGaussian() — возвращает случайное число в диапазоне от 0.0 до 1.0 распределенное по нормальному закону

Отметьте ключевые слова языка Java :

  • (Правильный ответ) boolean
  • null
  • false
  • (Правильный ответ) default
  • (Правильный ответ) protected

Какие из следующих адресов относятся к подсети класса c ?

  • 14.80.22.5

  • (Правильный ответ) 219.40.80.33
  • (Правильный ответ) 194.15.40.6
  • 184.80.20.1

Какой из следующих вариантов кода выведет на экран «perform» ?

  • public > public class SomeClass < static void perform() < System.out.println(«»perform»»); >private static SomeClass c; public static void main(String[] args) < SomeClass.c.perform(); >>
  • (Правильный ответ)
    public >
    char c = (byte)5 + ‘a’;
  • byte b2 = 200;
  • byte c = (int)150 + ‘a’;
  • (Правильный ответ)
    byte c = (char)5 + ‘a’;
  • (Правильный ответ)
    short s = (short)(2 + 3);

Сколько объектов порождается при инициализации массива
new int[3][] ?

  • ни одного, так как код не будет скомпилирован
  • 4
  • 2
  • 3
  • (Правильный ответ) 1

Каким будет результат работы следующего кода?

public abstract >

  • 12
  • программа не завершит работу, на консоли появится 1
  • программа не завершит работу, на консоли ничего не появится
  • (Правильный ответ) программа не завершит работу, на консоли появится 2
  • результат трудно предугадать
  • 21

Каким будет результат работы следующего кода?

public abstract >

  • (Правильный ответ) программа завершит работу, на консоли появится 21
  • программа завершит работу, на консоли появится 12
  • программа не завершит работу, на консоли ничего не появится
  • результат трудно предугадать
  • программа не завершит работу, на консоли появится 1

Какие утверждения относительно класса String верны?

  • содержит только статические методы
  • является абстрактным
  • (Правильный ответ) обладает свойством неизменяемости

  • от этого класса можно унаследоваться

Какие значения может принимать переменная булева типа?

  • (Правильный ответ) true
  • null
  • (Правильный ответ) false
  • 1

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

public >

  • ошибка времени выполнения
  • 3
  • (Правильный ответ) 1
  • 2
  • Unknown

Отметьте верное утверждение относительно языков Java и JavaScript :

  • (Правильный ответ) оба языка кроссплатформенны
  • JavaScript является синонимом Java
  • их спецификации являются закрытыми

Если вызвать write(0x02468101) у экземпляра OutputStream , то в каком порядке и какие байты будут записаны в выходной поток?

  • 0x01 , 0x81 , 0x46 , 0x02
  • 0x02 , 0x46
  • 0x81 , 0x01
  • 0x02 , 0x46 , 0x81 , 0x01
  • (Правильный ответ) только 0x01

Вы создали класс Animal в пакете ru.animal . Где будет хранится исходный код класса в файловой системе?

  • ru\animal\Animal.class
  • ru\Animal.class
  • ru\Animal.java

  • ru\animal\Animal
  • (Правильный ответ) ru\animal\Animal.java

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

public >

  • сообщение об ошибке компиляции
  • (Правильный ответ) 50
  • 510
  • 55
  • 05

Какое из перечисленных ниже имен является составным?

Object java.lang lang java.lang.Object

  • Object
  • (Правильный ответ) java.lang
  • lang
  • (Правильный ответ) java.lang.Object

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

public > 5) i—; if (i 1234

  • 3457
  • ошибка времени выполнения
  • (Правильный ответ) 2457
  • 245
  • Может ли массив основываться на абстрактных классах? Интерфейсах?

    • (Правильный ответ) да, да
    • да, нет
    • нет, нет
    • нет, да

    Отметьте строковые литералы языка Java :

    • »
    • ‘\101’
    • (Правильный ответ) «»
    • ‘\u0041’
    • (Правильный ответ) «\»»

    Укажите порядок поиска локали fr_CH , если текущая локаль — en_US (название базового класса ResourceBundle — MyResources )

    • MyResources_fr_CH MyResources_fr MyResources
    • MyResources_fr MyResources_fr_CH MyResources_en MyResources_en_US MyResources
    • (Правильный ответ)
      MyResources_fr_CH MyResources_fr MyResources_en_US MyResources_en MyResources
    • ни один из перечисленных
    • MyResources_en_US MyResources_en MyResources MyResources_fr MyResources_fr_CH

    Какие утверждения относительно сериализации в Java верны?

    • (Правильный ответ) для исключения поля объекта из сериализации его необходимо объявить с модификатором transient
    • (Правильный ответ) если класс впервые реализует Serializable в своей ветке наследования, то его класс-родитель должен иметь доступный конструктор без параметров
    • для исключения поля объекта из сериализации его необходимо объявить с модификатором volatile

    Что такое приоритет потока?

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

    Даны следующие классы:

    class SomeClass <> class SomeClass2 extends SomeClass <>

    Что будет выведено на экран в следующем фрагменте кода:

    Some >

    • true true
    • false false
    • (Правильный ответ) false true
    • true false

    Укажите результат выполнения следующего кода?

    long a = 111111111111L; double f = a; long b = 11111L; double d = b; System.out.println( a == (long) f); System.out.println( b == (long) d);

    • false false
    • false true
    • (Правильный ответ)
      true true
    • будет выведено сообщение об ошибке
    • true false

    Дан следующий класс:


    Укажите результат выполнения следующего фрагмента кода:

    abcPoint p = new abcPoint(5,3), p1 = p;p.x = 4;System.out.println(p1.x);

    • ничего из перечисленного
    • 3
    • будет выдано сообщение об ошибке
    • (Правильный ответ) 4
    • 5

    Какое преимущество предоставляет интерфейс Runnable
    по сравнению с классом Thread ?

    • позволяет обойтись без класса Thread
    • никакого преимущества нет
    • (Правильный ответ) позволяет классу, содержащему логику работы, наследоваться от других классов
    • позволяет более гибко работать с приоритетами потоков

    Какая кодировка используется классом OutputStreamWriter по умолчанию?

    • UTF-8 независимо от системы, где запущена Java -машина
    • (Правильный ответ) используемая кодировка зависит от системы, где запущена Java -машина
    • спецификацией Java не оговаривается кодировка, используемая по умолчанию,
      но точно известно, что jdk , поставляемая Sun , использует KOI-8
    • UTF-16 независимо от системы, где запущена Java -машина

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

    public >

    • 55
    • будет выведено сообщение об ошибке компиляции
    • 00
    • (Правильный ответ) 50
    • 05

    Какие утверждения относительно методов класса верны?

    • к методу, объявленному с модификаторами public final , нельзя обратиться из класса-наследника
    • (Правильный ответ) метод, объявленный с модификатором native , должен быть написан на другом языке программирования
    • (Правильный ответ) метод, объявленный с модификатором final , не может быть переопределен в классе-наследнике
    • методы не могут иметь модификатор доступа default
    • идентификатор метода при объявлении становится составным именем метода

    Сколько ошибок компиляции и ошибок времени выполнения в следующем примере?

    int b[] = new int[5]; for (int i = 0; i Vector ?


    • LinkedList
    • (Правильный ответ) ArrayList
    • AbstractCollection.
    • TreeSet
    • Hashtable

    Какой класс соответствует классу CharArrayReader , но работает только с байтовыми данными?

    • (Правильный ответ) ByteArrayInputStream
    • BufferedInputStream
    • нет аналога
    • FilterInputStream
    • ByteInputStream

    Какой метод нужно переопределить, чтобы реализовать отрисовку внешнего вида компонента?

    • show
    • repaint
    • (Правильный ответ) paint
    • update

    Какое из перечисленных ниже имен является простым?

    MyClass MyClass.name MyClass.name.toString() MyClass.name.toString().hashCode()

    • ни один из перечисленных
    • MyClass.name.toString().hashCode()
    • MyClass.name
    • MyClass.name.toString()
    • (Правильный ответ) MyClass

    От какого класса наследуются InputStream и OutputStream ?

    • (Правильный ответ) Object
    • IOWriter
    • AbstractStream
    • IOStream

    На какие направления разделяется платформа Java 2 ?

    • (Правильный ответ) Standard Edition
    • (Правильный ответ) Micro Edition
    • (Правильный ответ) Enterprise Edition
    • Minimal Edition
    • Extended Edition

    Какие классы предоставляют методы для записи в поток двоичного представления значений примитивных типов Java?

    • (Правильный ответ) ObjectOutputStream
    • (Правильный ответ) DataOutputStream
    • SimpleOutputStream
    • OutputStream

    Какие классы из пакета java.util предназначены для работы с датами?

    • java.util.Time
    • (Правильный ответ) java.util.Date
    • (Правильный ответ) java.util.GregorianCalendar
    • (Правильный ответ) java.util.Calendar
    • java.util.DateTime

    Укажите возможный результат выполнения следующего кода:

    public abstract >

    • программа не завершит работу, на консоли появится 2
    • программа не завершит работу, на консоли появится 12
    • программа не завершит работу, на консоли появится 1
    • (Правильный ответ) программа завершит работу, на консоли появится 12

    Java, unit-test. проверка на правильность программы

    29.08.2020, 05:54

    Unit test-ы — с чего начать и как их писать
    собственно вопрос — как писать юниттесты?

    Что такое unit test и regression test
    Что такое unit test и regression test?

    Unit Test
    Как пишутся модульные тесты?прочитал несколько книг, но не в одной не встречал глав/заголовков о.

    Unit Test кнопки
    Здравствуйте, есть простой алгоритм по изменению цвета фона окна при нажатие кнопки. Хотел.

    Unit test библиотеки
    Всем привет, ситуация такая. Использую для сетевых запросов Retrofit. Собственно эта библиотека.

    29.08.2020, 08:11 2 29.08.2020, 11:57 3 29.08.2020, 14:48 [ТС] 4
    29.08.2020, 14:48
    29.08.2020, 15:13 5

    на форуме не обучают, а в лучшем случае высказывают свое мнение по тому, или иному вопросу))

    Добавлено через 3 минуты
    А вот это, при наличии терпения, заменит литературу https://docs.oracle.com/javase/specs/

    29.08.2020, 15:53 [ТС] 6
    29.08.2020, 18:33 7
    29.08.2020, 19:21 8

    Одного unit-теста будет недостаточно, чтобы подтвердить правильность выполнения кода. Кстати, код нужно вынести в отдельный метод из main, так как сейчас он нетестируемый.

    Если хотите поизучать именно unit-тестирование, то нужно набрать в поисковике что-то типа: junit туториал. Лучше сначала поискать на youtube, повыпонять туторы, ставя на паузу и переписывая код.

    Java основы

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

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

    Хитрые задачи по Java

    Совсем недавно я сдал OCA Java SE 7 Programmer I. За время подготовки успел решить огромное количество задач и извлечь из них много тонких моментов языка. Самые интересные и ловкие — сохранял на будущее. И вот у меня накопилась небольшая личная коллекция, лучшую часть которой я здесь и опишу.

    В замечательной статье Знаешь ли ты JAVA, %username% и её второй части автор тоже поделился опытом после подготовки. Однако я пришёл к выводу, что могу добавить что-то своё. Так и зародилась эта статья.

    Задачи

    Итак, начнём. Я разбил все хитрости на маленькие задачки, которые составил специально для вас. Тонкости языка выделяются в чистом виде — без лишних наворотов и заблуждений, как это было в тестах. Также я рекомендую вам сначала ответить на вопрос с точностью до символа и записать куда-нибудь, а потом уже смотреть правильный ответ. Интересно, сколько пользователей, решивших этот тест, ответит больше чем на половину? И не забывайте, что все эти примеры ориентированы на Java 7.

    1)Скомпилируется ли данный код и если да — то каким будет вывод?

    Я специально выключил подсветку — чтобы не было заметно подвоха. Иначе последняя буква визуально выделялась бы — а в ней вся соль вопроса.

    В английском языке строчная буква l очень похожа на цифру 1. И этим примером я хочу вас предостеречь — никогда не используйте l маленькую для обозначения long-литералов, хотя Java это позволяет. И вообще не используете её там, где потенциально может быть единица. Просто возьмите за правило использовать прописную L, как это и делает большинство программистов.

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

    Вывод будет — 201, а не 2011, как может показаться на первый взгляд.

    Заблуждение обычно вызывают две «лишних» запятых в конце.

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

    А вывод будет простой — [[1, 2, 3], [0, 0, 0]]. Получается, что компилятор просто игнорирует одну лишнюю запятую в конце массива. Причём именно одну — две подряд уже вызовут ошибку компиляции.

    Описание этой ситуации я без проблем нашёл в спецификации языка — A trailing comma may appear after the last expression in an array initializer and is ignored.

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

    Вы наверно будете уверены в том, что этот код не скомпилируется. А вот и нет! он вполне рабочий.

    Когда я изучал Java, я сразу взял на заметку, что из подчёркиваний и экспоненциальной формы для HEX можно сделать что-то дикое. Этот пример, конечно же, не для использования в реальных проектах — а для тренировки ваших знаний. Я думаю, это самый сложный пример и изюминка статьи. Первые два были лёгкой разминкой. Кто-нибудь ответил правильно с первого раза?

    В этом примере заключены два интересных момента. Первое — это название переменной. Называть переменную долларом весьма забавно. Но никогда, никогда так не делайте в реальных проектах. Хотя компилятор не запрещает такой подход — он не рекомендован, так как доллар используется в технических целях. Например, для наименования анонимных и вложенных классов. MyClass$MyInnerClass, или же MyClass$1. И можно без труда устроить коллапс имён — один класс назвать просто MyClass$MyInnerClass, а другой — MyClass с вложенным MyInnerClass — и они будут иметь одинаковое имя. Так что включать в свои переменные доллар — не рекомендуется.

    Также вполне корректен такой код
    А теперь давайте разберём второй момент — непосредственно сам литерал. Я наворотил его, как только мог. Для начала легко заметить, что это число записано в шестнадцатеричной форме. Но ведь она допускает только A,B,C,D,E,F в качестве букв — кажете вы. Откуда тогда P? И причём тут знак подчёркивания?

    Обо всём по-порядку. F в конце означает, что этот литерал — типа float. И у нас он автоматически приводится к типу double. Далее очень интересный момент — P2. Если мы хотим записать шестнадцатеричное число в экспоненциальной форме — мы не сможем использовать E+N, потому что E у нас может использоваться в самом числе и может возникнуть неоднозначность. Зато никто не мешает нам использовать BinaryExponentIndicator — указываем p и степень. Число будет умножено на 2 в указанной степени. В данном случае — на 4.

    А вот символ подчёркивания — очень удобное нововведение Java 7. Мы просто можем вставлять его в число и разделять им, например, разряды, или группировать цифры. Компилятор его просто вырежет — он нужен для более удобного чтения, не более.

    Итак, чтобы точно ответить на вопрос, нам нужно вспомнить, что System.out.print выводит переменную типа double в обычной, десятичной форме. Следственно, нам нужно перевести из шестнадцатеричного вида в десятичный. Это уже совсем тривиальная задача. DE16 = 22210. Далее, умножаем 222 на 2 2 и получаем 888. Наконец не забываем, что для типа double при отсутствии дробной части дописывается точка и ноль. Вот и ответ — 888.0.

    Первое, что бросается в глаза — это использование точек с запятой там, где их можно не использовать. Например после объявления класса (как в С++). Или же между членами класса. Зачем компилятор дал возможность ставить их там — я так и не выяснил. Но это вполне допустимо.

    Имя метода — вполне допустимый идентификатор. А вот возвращаемый тип здесь не short а массив из short. Компилятор разрешает 2 формы объявления массива — квадратные скобки до идентификатора и после. Причём первый случай предназначен как-раз для метода. А что если попробовать второй случай для метода? Он тоже корректен, но выглядит ужасно, поэтому никогда не используйте его в реальных проектах. Но такая возможность есть.

    Далее — внутри метода просто два вложенных блока кода, которые можно безболезненно убрать. И в итоге — метод просто возвращает массив из short длинной в 7 элементов, который инициализируется нулями и элемент с индексом 2 равен 0. Ах да, 007 — это восьмеричный литерал. Но это тоже ни на что не влияет.

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

    Важный момент, который я хотел донести до вас — можно случайно напечатать не тот символ из другого языка и потом долго и мучительно искать ошибку. Например, английская a и русская а визуально неотличимы (по крайней мере, в этом шрифте). Если единицу можно отличить от l хоть как-то, то тут всё значительно хуже. Представьте себе ситуацию — вы по каким-либо причинам случайно в конце в названии класса или метода набрали русскую букву вместо английской. Или что более вероятно — редактировали уже существующее латинское название с русской раскладкой. Похожих букв между этими языками довольно много, так что шанс ошибиться вполне есть. Автозаполнение будет вставлять интернациональный идентификатор и всё будет отлично работать. Но вот если вы попробуете вызвать метод или получить класс через рефлексию — получите ошибку, которую будет не так просто обнаружить. Скорее, вы будете искать её в другом, так как названия будут визуально совпадать — потеряете время и силы.

    Я хотел добавить ещё один пример, в котором два на внешний вид одинаковых идентификатора будут содержать внешне идентичные буквы из разных алфавитов, но по коду разные и посему идентификаторы будут также разные. И заставить объяснить, почему код вызывает ошибку компиляции. Но это было бы слишком жестоко — на вид подвох никак не заметить.

    Далее — мы вызываем статический метод довольно оригинально — приводим null к типу Main. И это не вызовет ошибки времени выполнения! Дело в том, что вызов статических методов разрешается на этапе компиляции и зависит только от типа объекта.

    В комментариях к данной статье пользователь Yurevich1 привёл пример из реального проекта:

    Как-то в проекте поставил в классе переменную «с» по-русски. Где-то час убил, чтобы понять, в чём ошибка и проект в другой части кода ругается на как бы ту же самую переменную c, которая уже на английском.

    Итак, вот вам ещё один пример кода, который на первый взгляд вводит в заблуждение. Для начала вас должно смутить казалось бы следующее два раза друг за другом объявление массива из оболочек для байтов. Однако если вы внимательно изучали язык, вы должны знать, что есть два способа объявления массива — с квадратными скобками до имени и после. Более того, никто не мешает нам использовать эти два способа одновременно — перед вами просто двумерный массив.

    Далее вас должно смутить имя массива, которое полностью совпадает с именем класса. Java позволяет называть локальные переменные классами стандартной библиотеки, при этом они будут перекрывать классы. Однако компилятор у Джавы умный. Очень умный. Он сообразит, что после оператора new может следовать только класс, да и перед .class — тоже. И в том контексте будет подразумеваться именно класс Byte, хотя имя экземпляра должно его перекрывать.

    Итоги

    Мне нравится Java за её жёсткую стандартизованность. Спецификация определяет практически все тонкости с очень большой точностью. А значит — изучив эти тонкости один раз — вы сможете работать с ними везде.

    Хочу добавить, что скрин кода над катом взят из IDEA. Схему подсветки я сам разработал и использую её преимущества по максимуму. Если кому понравилась — могу скинуть.

    Я готовился по нескольким разным системам тестирования. Для начала, хорошим сайтом будет Quizful. Тесты «Java-Основы» и «Java-средний уровень» содержат очень большое количество полезных задач. Далее — очень хороши тесты от ExamLab — гонял по ним SCJP 6. И наконец — для самого экзамена — Enthuware.

    После прохождения многочисленных тестов и решения задач «в уме» я стал приятно удивлён, каким комфортным и эффективным стало написание кода. Тесты очень хорошо систематизируют и организуют знания. Я стал предвидеть в уме многие ошибки, а также выбирать лучшие решения. И не пожалел, что выучил некоторую часть API, хотя сначала считал что не следует помнить названия методов и классов наизусть. Я считаю Java одним из лучших языков в мире и рекомендую тесты для его углублённого изучения. А Java SE 7 Programmer I был совсем не сложным — без труда набрал 96 из 100 баллов. Кто собирается сдавать — могу дать пару советов — напишите в личку.

    EasyJava

    Java в примерах для начинающих

    Тестирование исключений

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

    Подготовка

    Возьмём код из примера основной функциональности JUnit и создадим новый класс с тестами в StringUtilsExceptionsTest .

    Простая проверка исключений

    Один из методов в StringUtils, toDouble(String), бросает NumberFormatException, если передать в него неправильную строку. Это поведение можно и нужно протестировать:

    Параметер expected говорит JUnit что метод должен кинуть исключение указанного типа и это не будет ошибкой теста. А вот если исключение не будет брошено, это будет ошибкой теста.

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

    Matchers, Rules, Exceptions

    В JUnit предусмотрен более сложный подход, основаный на гибкой и расширяемой системе Rules(правил), которой будет посвящена отдельная статься. Однако воспользоваться одним из Rule, для подробной проверки исключений, достаточно несложно:

    10 наиболее распространённых ошибок Java-программистов

    Какие ошибки чаще других встречаются у новичков в программировании? Возможно, они всегда путают равенство ( == ) с присвоением ( = ), или & с && ? Или же, возможно, они используют неправильные разделители в цикле for ( for (int i = 0, i )?

    Чтобы ответить на этот вопрос, исследователи рассмотрели ошибки более чем 250 000 Java-новичков со всего мира. Используя большое количество данных (исходный код более чем 37 миллионов компиляций, если быть точнее), они выявили наиболее распространенные ошибки студентов, впервые изучавших Java. Также они выяснили, как много времени занимала учёба на собственных ошибках. Результаты оказались поразительными.

    The Blackbox data collection project

    Изучение нового языка программирования — это всегда вызов, поскольку вы должны научиться выражать свои сложные мысли, используя ограниченную, формальную грамматику. Естественно, многие новички делают ошибки при программировании. Чтобы пролить немного света на то, какие ошибки чаще всего делают новички, исследователи из университета Кента (Великобритания) рассмотрели код, который был собран почти у 265 000 студентов по всему миру.

    Проект под названием Blackbox data collection построен на основе BlueJ, бесплатной Java IDE, спроектированной специально для новичков. BlueJ пытается устранить барьеры на пути к успеху для новичков, например, выделяя начало и конец блока кода. Это облегчает студентам процесс визуального сканирования кода на наличие лишних фигурных скобок. Ещё одна особенность данной IDE — это возможность проверки объектов прямо во время работы программы. Таким образом, это помогает пониманию принципов работы программы, а также отладке.

    Blackbox также работает как расширение для BlueJ, которое собирает различную анонимную информацию о том, как используется программное обеспечение. К примеру, оно собирает информацию о том, какие функции выполняются и когда, а также с какими ошибками и как часто. Количество данных огромно. Только за один учебный год (2013—2014) было обработано 37 158 094 компиляций, 19 476 087 из которых были успешными, остальные же 17 682 007 — неудачными.

    В то время как большинство людей и помыслить не может об обработке такого большого количества данных, Амджад АльТадмри (Amjad Altadmri) и Нейл Браун (Neil Brown) рассмотрели каждый из 46 448 212 файлов, участвовавших в 37 миллионах компиляций, рассмотренных выше. Они также отслеживали изменения в файлах в течение длительного периода времени. При каждой компиляции учёные проверяли исходный код для того, чтобы присвоить ему одну из 18 возможных категорий ошибок (которые они обозначили буквами от А до R). Они также подсчитали количество времени, которое потребовалось студенту для того, чтобы исправить свою ошибку (путём проверки файла, в котором ошибка уже отсутствовала).

    10 наиболее распространённых ошибок начинающих Java-программистов

    АльТадмри и Браун были удивлены, обнаружив, что те ошибки, которые эксперты и преподаватели считали наиболее распространёнными, таковыми на самом деле не являются.

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

    «Росбанк», Москва, до 60 000 ₽ (до налогов)

    Однако, если обратиться к собранным данным, возникает чёткий рейтинг из 10 наиболее часто встречающихся ошибок (буквами от А до R обозначены 18 категорий ошибок, принимавших участие в исследовании):

    С. Несбалансированные скобки, фигурные скобки или кавычки, а также использование этих символов попеременно, например: while (a == 0].

    I. Вызов методов с неправильными аргументами или типами аргументов, например: list.get(«abc») .

    O. Контрольный поток может достигнуть конец non-void метода без возвращения, например:

    А. Путаница с операторами присвоения ( = ) и сравнения ( == ), например: if (a = b) .

    N. Игнорирование или отбрасывание возвращаемого значения метода с non-void типом возвращения, например: myObject.toString(); .

    B. Использование == вместо .equals для сравнения строк.

    M. Попытка вызвать non-static метод так, если бы это был static метод, например: MyClass.toString(); .

    R. Попытка класса реализовать интерфейс, но отсутствие реализации всех необходимых методов, например: class Y implements ActionListener < >.

    P. Вызов типов параметров при вызове метода, например: myObject.foo(int x, String s); .

    E. Неправильная расстановка запятых в условиях if , а также циклах for и while , например: if (a == b); return 6; .

    Наиболее частая ошибка — это C (забытые скобки, ошибки в их расстановке) — как раз то, чему пытается противостоять BlueJ, используя подсветку. Данный вывод может быть признаком того, что ошибки типа С будут ещё чаще встречаться в IDE, которые не предоставляют никаких средств для отладки.

    Удивительно, но следующие ошибки не попали в ТОП-10:

    D. Путаница с использованием операторов «короткого замыкания» ( && и || ) и обычных операторов логики ( & и | ).

    J. Отсутствие скобок после вызова метода, например: myObject.toString; .

    Q. Присваивание переменной значения с типом, несовместимым с типом переменной, например: int x = myObject.toString(); .

    F. Неправильные разделители цикла for (использование запятой вместо точки с запятой), например: for (int i=0, i .

    H. Использование ключевых слов в качестве имён переменных или методов, например: int new; .

    Сколько времени занимает учёба на своих ошибках

    Кроме того, когда Браун и АльТадмри изучили, сколько времени требуется, чтобы студенты исправили ошибку, стало ясно, что наиболее распространённая ошибка (ошибка С) была также одной из самых быстронаходимых. Другие ошибки было найти труднее. Среди таких ошибок была путаница между операторами & и | или && и || (ошибка D), использование == вместо .equals для сравнения строк (ошибка B) и игнорирование или отбрасывание возвращаемого значения метода с non-void типом возвращения (ошибка N). Они оставались незамеченными более чем 1 000 секунд (после чего отслеживание не продолжалось) или не были найдены вообще никогда.

    Медиана, показывающая соотношение время-исправление (time-to fix), показана на рисунке ниже.

    Тест для Java-программистов, или Не слишком ли я строг к претендентам?

    В поисках тестовых задач для java-программистов наткнулся на любопытный сайт (пользователям Avast не ходить, определяется скриптовый троян, остальным видимо можно) — http://www.betterprogrammer.com. Он проверяет квалификацию ява-программистов самым простым, но зато автоматическим способом: предлагая написать несколько функций (методов) повышающейся сложности и скопировать код в TextArea. Далее движок сайта что-то делает с заданиями (не иначе как юнит-тестит), вычисляет по критериям «скорость-качество» некий индекс квалификации и выдает конечную оценку в таком виде:

    Далее начинаются вопросы. Сам я на Java программировал второй раз в жизни (а потому сложные задачи просто поскипал), так что 82% по этому тесту соответствуют уровню не-java программист. Сколько же тогда должны набирать Java Junior, Java Programmer и уж тем более Java Senior?! Какой результат ожидать от настоящего java-программиста — 90, 95, 99? И наконец, как быть, если «программист» набирает меньше чем 82, но тем не менее претендует на какую-то работу?!

    Так что программы разрабатывать — это Вам не лобио кушать (с) :)

    Java основы

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

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

    Java для белок

    12 января 2012 г.

    Подготовка к собеседованию на java-программиста (уровень M >

    Продолжим тему собеседований. В этот раз рассмотрим что вы обязаны знать, если претендуете на должность middle (staff) java developer (описание для уровня junior смотри тут).
    Отдельные части текста нагло взяты из википедии, необъятных просторов интернета и, что самое страшное, головы.

    Что такое ORM
    ORM (англ. Object-relational mapping, рус. Объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».

    Что такое JPA?
    JPA – это технология, обеспечивающая объектно-реляционное отображение простых JAVA объектов и предоставляющая API для сохранения, получения и управления такими объектами.

    JPA – это спецификация (документ, утвержденный как стандарт, описывающий все аспекты технологии), часть EJB3 спецификации.

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

    • Hibernate
    • Oracle TopLink
    • Apache OpenJPA

    JPA состоит из трех основных пунктов:

    1. API – интерфейсы в пакете javax.persistance. Набор интерфейсов, которые позволяют организовать взаимодействие с ORM провайдером.
    2. JPQL – объектный язык запросов. Очень похож на SQL, но запросы выполняются к объектам.
    3. Metadata – аннотации над объектами. Набор аннотаций, которыми мы описываем метаданные отображения. Тогда уже JPA знает какой объект в какую таблицу нужно сохранить. Метаданные можно описывать двумя способами: XML-файлом или через аннотации.

    Паттерны GoF
    За абревиатурой GoF кроются паттерны «банды четырех». Рассказать о них вкраце едва ли возможно, хотя и повторить на скорую руку тоже очень сложно. Могу разве что порекомендовать найти какой-либо cheat sheet, распечатать и периодически пробегаться глазами по основным паттернам.

    Различие unit и integration тестинга
    Модульное тестирование, или юнит-тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы.
    Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.

    Интеграционное тестирование (англ. Integration testing, иногда называется англ. Integration and Testing, аббревиатура англ. I&T) — одна из фаз тестирования программного обеспечения, при котором отдельные программные модули объединяются и тестируются в группе. Обычно интеграционное тестирование проводится после модульного тестирования и предшествует системному тестированию.
    Интеграционное тестирование в качестве входных данных использует модули, над которыми было проведено модульное тестирование, группирует их в более крупные множества, выполняет тесты, определённые в плане тестирования для этих множеств, и представляет их в качестве выходных данных и входных для последующего системного тестирования.
    Целью интеграционного тестирования является проверка соответствия проектируемых единиц функциональным, приёмным и требованиям надежности. Тестирование этих проектируемых единиц — объединения, множества или группа модулей — выполняются через их интерфейс, используя тестирование «чёрного ящика».

    TDD
    Разработка через тестирование (test-driven development, TDD) — техника разработки программного обеспечения, которая основывается на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест и под конец проводится рефакторинг нового кода к соответствующим стандартам.

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

    SQL
    Повторите SQL! Например хороший мануал по основам лежит тут

    Связанность и связность
    Связанность модулей (coupling), часто называемую зацеплением, характеризует степень независимости модулей. При проектировании систем необходимо стремиться, чтобы модули имели минимальную зависимость друг от друга, т.е. были минимально «сцеплены» между собой (отсюда и термин «сцепление» или связанность). Это требование вытекает из одного из основных принципов системного подхода, требующего минимизации информационных потоков между подсистемами.

    Связность (cohesion) характеризует целостность, «плотность» модуля, т.е. насколько модуль является простым с точки зрения его использования. В идеале модуль должен выполнять одну единственную функцию и иметь минимальное число «ручек управления». Примером модуля имеющего максимальную связность является модуль проверки орфографии. Если связанность является характеристикой системы, то связность характеризует отдельно взятый модуль.

    SOLID
    Вы должны знать что такое SOLID. Вкраце об этом тут.

    SVN
    Надеюсь что такое svn вы знаете. Не лишним было бы помнить такие основные комманды как:
    svn checkout — создать рабочую копию, получив текущую ревизию с сервера.
    svn update — обновить рабочую копию с сервера (получить изменения). Помним про автоматический мердж и конфликты.
    svn diff — посмотреть внесённые изменения в вашу рабочую копию.
    svn commit — отправить изменения на сервер, при этом будет создана новая ревизия.

    svn add — добавить файл в рабочую копию. При commit файл будет отправлен на сервер.
    svn rm — удалить файл из рабочей копии. При commit файл будет удалён из текущей ревизии на сервере.
    svn mv — переместить файл внутри репозитория.
    svn revert — откатить изменения в файле из рабочей копии.

    Maven
    Вы должны знать стандартные настройки мавена, основные плагины и принцип работы как таковой. Так же следует помнить про жизненный цикл сборки:
    1. Валидация — проверяет корректность проекта
    2. Компиляция — компилирует исходный код
    3. Тест — тестирует полученый код используя доступный unit testing фреймворк. Эти тесты не должны требовать упаковки или деплоя.
    4. Упаковка — создается архив (например, JAR или EAR)
    5. Интеграционные тесты — если это необходимо приложение деплоится в окружение, где могут быть выполнено интеграционное тестирование
    6. Верификация — выполняет проверки пакета на валидность и соответствие указаным требованиям
    7. Инсталяция — копирует пакет с приложением в локальный репозиторий
    8. Деплой — собственно деплой.

    Serialization
    Сериализация это процесс сохранения состояния объекта в последовательность байт; десериализация это процесс восстановления объекта, из этих байт. Java Serialization API предоставляет стандартный механизм для создания сериализуемых объектов.
    Сохранение объекта:
    Восстановление объекта:

    Dated, Numbers and Currency
    Едва ли можно рассказать лучше, чем тут.

    Java — Ошибка в тесте на Java средний уровень или нет?

    private static boolean notAWinner;

    public static void main(String[] args) <
    Game aGame = new Game();

    aGame.add(«Chet»);
    aGame.add(«Pat»);
    aGame.add(«Sue»);

    Random rand = new Random();

    if (rand.nextInt(9) == 7) <
    notAWinner = aGame.wrongAnswer();
    > else <
    notAWinner = aGame.wasCorrectlyAnswered();
    >

    1) private static boolean notAWinner — may be a local

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