JavaRush /Java Blog /Random-ID /Level 30. Jawaban pertanyaan wawancara pada topik level
DefNeo
Level 36

Level 30. Jawaban pertanyaan wawancara pada topik level

Dipublikasikan di grup Random-ID
Level 30. Jawaban pertanyaan wawancara tentang topik level - 1
  1. Apa itu NaN?

    NaN (Bahasa Inggris Not-a-Number) adalah salah satu keadaan khusus dari bilangan floating point. Digunakan di banyak perpustakaan matematika dan koprosesor matematika. Kondisi ini dapat terjadi dalam berbagai kasus, misalnya ketika operasi matematika sebelumnya diselesaikan dengan hasil yang tidak ditentukan, atau jika suatu bilangan yang tidak memenuhi syarat dimasukkan ke dalam sel memori.

    Sesuai dengan IEEE 754, keadaan ini ditentukan dengan mengatur eksponen ke nilai yang dicadangkan 11...11, dan mantissa ke selain 0 (nilai yang dicadangkan untuk mesin tak terhingga). Tanda dan mantissa mungkin membawa beberapa informasi tambahan: banyak perpustakaan menampilkan NaN “negatif” sebagai -NaN.

    Operasi yang menghasilkan NaN sebagai respons meliputi:

    • semua operasi matematika yang mengandung NaN sebagai salah satu operannya;
    • membagi nol dengan nol;
    • membagi tak terhingga dengan tak terhingga;
    • mengalikan nol dengan tak terhingga;
    • penjumlahan tak terhingga dengan tak terhingga yang berlawanan tanda;
    • menghitung akar kuadrat dari bilangan negatif[1];
    • mengambil logaritma dari bilangan negatif.

    Beberapa bahasa pemrograman memiliki NaN "diam" dan "sinyal": yang pertama, ketika terlibat dalam operasi apa pun, mengembalikan NaN, yang kedua menyebabkan keadaan darurat. Biasanya, "tenang" atau "sinyal" ditentukan oleh bagian paling signifikan dari mantissa.

    NaN tidak sama dengan nilai lainnya (bahkan tidak sama dengan nilai itu sendiri[2]); Oleh karena itu, metode paling sederhana untuk memeriksa hasil NaN adalah dengan membandingkan nilai yang dihasilkan dengan nilai itu sendiri.

    Perilaku operator perbandingan lainnya berbeda-beda menurut bahasa. Beberapa bahasa menghasilkan false[3] (sehingga a < b dan b > a berperilaku berbeda dengan NaN), bahasa lain menyebabkan crash bahkan untuk NaN yang “tenang”.

    Operasi non-sepele apa pun yang menggunakan NaN senyap sebagai argumen akan selalu mengembalikan NaN, berapa pun nilai argumen lainnya. Satu-satunya pengecualian terhadap aturan ini adalah fungsi max dan min, yang mengembalikan nilai argumen "kedua" (selain NaN). Operasi sepele yang merupakan identitas diperlakukan secara khusus: misalnya, 1NaN sama dengan 1.

  2. Bagaimana cara mendapatkan ketidakterbatasan di Jawa?

    Di Jawa, tipe doublememiliki arti khusus untuk plus tak terhingga dan minus tak terhingga. Bilangan positif dibagi 0,0 menghasilkan "plus tak terhingga", dan bilangan negatif - "minus tak terhingga". Konsep-konsep ini sesuai dengan konstanta khusus bertipe Double:

    Kode Keterangan
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; ditambah tak terhingga
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; dikurangi tak terhingga
    1. Kami mengubah string menjadi angka, dan itu berisi huruf. Jawabannya adalah NaN
    2. Tak terhingga dikurangi tak terhingga. Jawabannya adalah NaN
    3. Ada banyak situasi lain di mana mereka mengharapkan angka dalam jawabannya, namun hasilnya tidak diketahui.

    Operasi apa pun yang berisi NaN menghasilkan NaN.

    Tindakan dengan tak terhingga:
    Ekspresi Hasil
    n ± ± Tak terhingga 0
    ±Tak terhingga × ±Tak terhingga ±Tak terhingga
    ±(bukan nol) ±Tak terhingga
    Tak terhingga + Tak terhingga Ketakterbatasan
    ±0 ± ±0 Tidak
    Tak terhingga - Tak terhingga Tidak
    ±Tak terhingga ±±Tak terhingga Tidak
    ±tak terhingga × 0 Tidak
  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