JavaRush /จาวาบล็อก /Random-TH /ระดับ 30 คำตอบสำหรับคำถามสัมภาษณ์ในหัวข้อระดับ
DefNeo
ระดับ

ระดับ 30 คำตอบสำหรับคำถามสัมภาษณ์ในหัวข้อระดับ

เผยแพร่ในกลุ่ม
ระดับ 30 คำตอบสำหรับคำถามสัมภาษณ์ในหัวข้อระดับ - 1
  1. น่านคืออะไร?

    NaN (ภาษาอังกฤษไม่ใช่ตัวเลข) เป็นหนึ่งในสถานะพิเศษของจำนวนจุดลอยตัว ใช้ในไลบรารีทางคณิตศาสตร์และตัวประมวลผลร่วมทางคณิตศาสตร์จำนวนมาก เงื่อนไขนี้อาจเกิดขึ้นได้ในหลายกรณี เช่น เมื่อการดำเนินการทางคณิตศาสตร์ก่อนหน้านี้เสร็จสมบูรณ์ด้วยผลลัพธ์ที่ไม่แน่นอน หรือหากป้อนตัวเลขที่ไม่ตรงตามเงื่อนไขลงในเซลล์หน่วยความจำ

    ตามมาตรฐาน IEEE 754 สถานะนี้ถูกระบุโดยการตั้งค่าเลขชี้กำลังเป็นค่าที่สงวนไว้ 11...11 และแมนทิสซาเป็นค่าอื่นที่ไม่ใช่ 0 (ค่าที่สงวนไว้สำหรับค่าอนันต์ของเครื่องจักร) เครื่องหมายและแมนทิสซาอาจมีข้อมูลเพิ่มเติม: ไลบรารีหลายแห่งเอาต์พุต NaN เป็น "ลบ" เป็น -NaN

    การดำเนินการที่ส่งผลให้ NaN เป็นการตอบสนอง ได้แก่:

    • การดำเนินการทางคณิตศาสตร์ทั้งหมดที่มี NaN เป็นหนึ่งในตัวถูกดำเนินการ
    • หารศูนย์ด้วยศูนย์
    • การหารอนันต์ด้วยอนันต์
    • คูณศูนย์ด้วยอนันต์
    • การบวกอนันต์กับอนันต์ของเครื่องหมายตรงข้าม
    • การคำนวณรากที่สองของจำนวนลบ[1];
    • รับลอการิทึมของจำนวนลบ

    ภาษาการเขียนโปรแกรมบางภาษามี NaN แบบ "เงียบ" และ "ส่งสัญญาณ": อันแรกเมื่อเกี่ยวข้องกับการดำเนินการใด ๆ จะส่งกลับ NaN ส่วนอันที่สองทำให้เกิดเหตุฉุกเฉิน โดยทั่วไปแล้ว "เงียบ" หรือ "สัญญาณ" จะถูกกำหนดโดยบิตที่สำคัญที่สุดของแมนทิสซา

    NaN ไม่เท่ากับค่าอื่นใด (ไม่ใช่แม้แต่ตัวมันเอง[2]) ดังนั้น วิธีที่ง่ายที่สุดในการตรวจสอบผลลัพธ์ของ NaN คือการเปรียบเทียบค่าผลลัพธ์กับตัวมันเอง

    ลักษณะการทำงานของตัวดำเนินการเปรียบเทียบอื่นๆ จะแตกต่างกันไปตามภาษา บางภาษาสร้างเท็จ[3] (เพื่อให้ <b และ b> a มีพฤติกรรมที่แตกต่างกับ NaN) ภาษาอื่น ๆ ทำให้เกิดความผิดพลาดแม้กระทั่งสำหรับ NaN ที่ "เงียบ"

    การดำเนินการที่ไม่สำคัญใดๆ ที่ใช้ NaN แบบเงียบเป็นอาร์กิวเมนต์จะส่งกลับ NaN เสมอ โดยไม่คำนึงถึงค่าของอาร์กิวเมนต์อื่นๆ ข้อยกเว้นเพียงอย่างเดียวสำหรับกฎนี้คือฟังก์ชันสูงสุดและต่ำสุด ซึ่งส่งคืนค่าของอาร์กิวเมนต์ "วินาที" (นอกเหนือจาก NaN) การดำเนินการเล็กๆ น้อยๆ ที่เป็นตัวตนจะได้รับการปฏิบัติเป็นพิเศษ เช่น 1NaN เท่ากับ 1

  2. วิธีรับอินฟินิตี้ใน Java?

    ในภาษา Java type doubleมีความหมายพิเศษสำหรับบวกอนันต์และลบอนันต์ จำนวนบวกหารด้วย 0.0 จะได้ "บวกอนันต์" และจำนวนลบ - "ลบอนันต์" แนวคิดเหล่านี้สอดคล้องกับค่าคงที่ชนิดพิเศษDouble:

    รหัส คำอธิบาย
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; บวกกับอนันต์
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; ลบอนันต์
    1. เราแปลงสตริงเป็นตัวเลขและประกอบด้วยตัวอักษร คำตอบคือน่าน
    2. อนันต์ลบอนันต์ คำตอบคือน่าน
    3. มีสถานการณ์อื่นๆ อีกมากมายที่พวกเขาคาดหวังตัวเลขในคำตอบ แต่ไม่ทราบผลลัพธ์

    การดำเนินการใดๆ ที่มี NaN จะให้ผลลัพธ์เป็น NaN

    การกระทำที่มีอนันต์:
    การแสดงออก ผลลัพธ์
    n ۞ ±อนันต์ 0
    ±อนันต์ × ±อนันต์ ±อินฟินิตี้
    ±(ไม่ใช่ศูนย์) ۞ ±อินฟินิตี้
    อินฟินิตี้ + อินฟินิตี้ อินฟินิตี้
    ±0 ۞ ±0 NaN
    Infinity - Infinity 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, то ленивых вычислений происходить не будет)

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION