JavaRush /Blog Jawa /Random-JV /Tingkat 30. Wangsulan pitakonan wawancara babagan topik t...
DefNeo
tingkat

Tingkat 30. Wangsulan pitakonan wawancara babagan topik tingkat

Diterbitake ing grup
Level 30. Wangsulan pitakonan wawancara babagan topik level - 1
  1. Apa NaN?

    NaN (English Not-a-Number) iku salah siji saka negara khusus saka nomer floating point. Digunakake ing akeh perpustakaan matematika lan coprocessors matematika. Kondisi iki bisa kedadeyan ing macem-macem kasus, contone, nalika operasi matematika sadurunge rampung kanthi asil sing ora mesthi, utawa yen nomer sing ora nyukupi kondisi kasebut dilebokake ing sel memori.

    Sesuai karo IEEE 754, negara iki ditemtokake dening nyetel exponent kanggo Nilai dilindhungi undhang-undhang 11 ... 11, lan mantissa apa liyane saka 0 (Nilai dilindhungi undhang-undhang kanggo mesin tanpa wates). Tandha lan mantissa bisa uga nggawa sawetara informasi tambahan: akeh perpustakaan ngasilake NaN "negatif" minangka -NaN.

    Operasi sing ngasilake NaN minangka respon kalebu:

    • kabeh operasi matematika sing ngemot NaN minangka salah sawijining operan;
    • dibagi nul karo nul;
    • mbagi tanpa wates karo tanpa wates;
    • multiplying nul tanpa wates;
    • tambahan tanpa wates karo tanpa wates tandha ngelawan;
    • ngitung oyod kuadrat saka nomer negatif [1];
    • njupuk logaritma saka nomer negatif.

    Sawetara basa pemrograman duwe "bisu" lan "sinyal" NaN: sing pisanan, nalika melu operasi apa wae, ngasilake NaN, sing nomer loro nyebabake darurat. Biasane, "sepi" utawa "sinyal" ditemtokake dening bit paling penting saka mantissa.

    NaN ora padha karo nilai liyane (malah ora dhewe [2]); Mulane, cara paling gampang kanggo mriksa asil NaN yaiku mbandhingake nilai sing diasilake karo dhewe.

    Prilaku operator perbandingan liyane beda-beda miturut basa. Sawetara basa ngasilake palsu [3] (supaya a <b lan b> a tumindak beda karo NaN), liyane mbuwang kacilakan sanajan NaN "sepi".

    Sembarang operasi non-trivial sing njupuk NaN bisu minangka argumen bakal tansah bali NaN, preduli saka Nilai saka bantahan liyane. Pengecualian mung kanggo aturan iki yaiku fungsi maksimal lan min, sing ngasilake nilai argumen "kapindho" (liyane saka NaN). Operasi sepele sing identitas dianggep khusus: contone, 1NaN padha karo 1.

  2. Carane njaluk infinity ing Jawa?

    Ing Jawa, jinis doublenduweni teges khusus kanggo plus tanpa wates lan minus tanpa wates. Nomer positif dibagi 0,0 menehi "plus tanpa wates", lan nomer negatif - "minus tanpa wates". Konsep iki cocog karo konstanta khusus saka jinis Double:

    Kode Katrangan
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; plus tanpa wates
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; minus tanpa wates
    1. Kita ngowahi senar dadi nomer, lan ngemot huruf. Jawabane yaiku NaN
    2. Tanpa wates minus tanpa wates. Jawabane yaiku NaN
    3. Ana akeh kahanan liyane sing padha nyana nomer ing jawaban, nanging asil ora dingerteni.

    Operasi apa wae sing ngemot NaN ngasilake NaN.

    Tumindak tanpa wates:
    Ekspresi asil
    n ÷ ± Tanpa wates 0
    ± Tanpa wates × ± Tanpa wates ± Tanpa wates
    ± (ora nol) ÷ ± Tanpa wates
    Tanpa wates + Tanpa wates tanpa wates
    ±0 ÷ ±0 NaN
    Tanpa wates - Tanpa wates NaN
    ±Infinity ÷ ±Infinity NaN
    ±Infinity × 0 NaN
  3. Как проверить, что в результате вычисления получилась бесконечность?

    Есть ответ на StackOverFlow.

    Все сводится к выводу System.out.println()

  4. What такое битовая маска?

    Битовая маска — это когда хранится много различных логических значений (true/false) в виде одного целого числа. При этом каждому boolean-значению соответствует определенный бит.

  5. Где применяют битовые маски?

    В основном там, где надо компактно хранить много информации об an objectх. Когда хранишь много информации об an objectе, всегда наберется пара десятков логических переменных. Вот их всех удобно хранить в одном числе. Именно хранить. Т.к. пользоваться им в работе не так уж удобно.

  6. Как установить бит в единицу в битовой маске?

    Опираясь на лекции можно ответить таким codeом:

    Здесь использовал метод Integer.toBinaryString(), дабы проверить себя, а вдруг)

    public class BitMask {
    
        public static void main(String[] args) {
            int a = 9;
    
           a |= (1<<2); // установить в 1 бит 2
    
    
            System.out.println(Integer.toBinaryString(a) + " "+ a);
        }
    }

    Вывод такой:

    1101 13

  7. Как установить бит в ноль в битовой маске?

    public class BitMask {
    
    public static void main(String[] args) {
    int a = 15;
    
    a &= ~(1<<2); // установить в 0 бит 2
    System.out.println(Integer.toBinaryString(a) + " "+ a);
    
        }
    }

    Вывод:

    1011 11

    Я взял число 15, так How на нем более наглядно видно, куда устанавливается 0.

  8. Как получить meaning определенного бита в битовой маске?

    public class BitMask {
    
    public static void main(String[] args) {
         int a = 15;
    
         a &= ~(1<<2); // установить в 0 бит 2
    
         int c = a & (1<<2); // узнаем про 2 бит
         int d = a & (1<<3); // узнаем про 3 бит
        System.out.println(Integer.toBinaryString(a) + " "+ a + " " + c +" "+ d);
    
        }
    }

    Вывод:

    1011 11 0 8

    C 0 все понятно, на том месте и вправду 0. А переменная d возвращает meaning запрашиваемого бита (в 10-ой системе).

  9. What такое ленивое вычисление выражения?

    Статья: Ленивое программирование и ленивые вычисления

    Это ленивые вычисления (lazy evaluation). В ленивых вычислениях ни один параметр не вычисляется, пока в нем нет необходимости. Программы фактически начинаются с конца и работают от конца к началу. Программа вычисляет, что должно быть возвращено, и продолжает движение назад, чтобы определить, Howое meaning для этого требуется. В сущности каждая функция вызывается с promise'ами для каждого параметра. Когда для вычисления необходимо meaning, тогда выполняется promise. Поскольку code выполняется только тогда, когда необходимо meaning, это называется вызов по необходимости (call-by-need). В традиционных языках программирования instead of promise'ов передаются значения, это называется вызов по значению(call-by-value).

    Технология программирования "вызов по необходимости" имеет ряд преимуществ. Потоки имплементируются автоматически. Ненужные значения никогда не вычисляются. Однако, поведение ленивых программ часто трудно предсказать. В программах типа "вызов по значению" порядок вычисления довольно предсказуем, поэтому любые time- or sequence-based вычисления относительно легко имплемнтировать. В ленивых языках, где специальные конструкции, например, monads, необходимы для описания явно упорядоченных событий, это намного труднее. Все это также делает связь с другими языками более трудной.

    Существуют языки программирования, например, Haskell и Clean, использующие ленивое программирование по умолчанию. Кроме того, для некоторых языков, таких How Scheme, ML и другие, существуют ленивые версии.

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

  10. Чем отличается использование && и & для типа boolean?

    && — это логическое «и». (В этом случае имеют место ленивые вычисления: некоторые вычисления опускаются, когда результат и так ясен)

    & — это побитовое «и» (Если применить этот оператор к переменным типа Boolean, то ленивых вычислений происходить не будет)

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION