JavaRush /Java-Blog /Random-DE /Level 30. Antworten auf Interviewfragen zum Levelthema
DefNeo
Level 36

Level 30. Antworten auf Interviewfragen zum Levelthema

Veröffentlicht in der Gruppe Random-DE
Level 30. Antworten auf Interviewfragen zum Thema Level - 1
  1. Was ist NaN?

    NaN (englisch Not-a-Number) ist einer der Sonderzustände einer Gleitkommazahl. Wird in vielen mathematischen Bibliotheken und mathematischen Coprozessoren verwendet. Diese Bedingung kann in verschiedenen Fällen auftreten, beispielsweise wenn eine vorherige mathematische Operation mit einem unsicheren Ergebnis abgeschlossen wurde oder wenn eine Zahl, die die Bedingungen nicht erfüllt, in eine Speicherzelle eingegeben wurde.

    Gemäß IEEE 754 wird dieser Zustand spezifiziert, indem der Exponent auf den reservierten Wert 11...11 und die Mantisse auf einen anderen Wert als 0 (der reservierte Wert für die Unendlichkeit der Maschine) gesetzt wird. Das Vorzeichen und die Mantisse können einige zusätzliche Informationen enthalten: Viele Bibliotheken geben „negatives“ NaN als -NaN aus.

    Zu den Vorgängen, die als Antwort zu NaN führen, gehören:

    • alle mathematischen Operationen, die NaN als einen der Operanden enthalten;
    • Null durch Null dividieren;
    • Unendlichkeit durch Unendlichkeit teilen;
    • Null mit Unendlich multiplizieren;
    • Addition der Unendlichkeit mit der Unendlichkeit des entgegengesetzten Vorzeichens;
    • Berechnen der Quadratwurzel einer negativen Zahl[1];
    • Logarithmieren einer negativen Zahl.

    Einige Programmiersprachen verfügen über „stilles“ und „signalisiertes“ NaN: Die erste gibt, wenn sie an einer Operation beteiligt ist, NaN zurück, die zweite verursacht einen Notfall. Typischerweise wird „Ruhe“ oder „Signal“ durch das höchstwertige Bit der Mantisse bestimmt.

    NaN ist keinem anderen Wert gleich (nicht einmal sich selbst[2]); Dementsprechend besteht die einfachste Methode, ein Ergebnis auf NaN zu überprüfen, darin, den resultierenden Wert mit sich selbst zu vergleichen.

    Das Verhalten anderer Vergleichsoperatoren variiert je nach Sprache. Einige Sprachen erzeugen false[3] (so dass sich a < b und b > a bei NaN unterschiedlich verhalten), andere lösen selbst bei „ruhigem“ NaN einen Absturz aus.

    Jede nicht triviale Operation, die ein stilles NaN als Argument verwendet, gibt immer NaN zurück, unabhängig vom Wert der anderen Argumente. Die einzigen Ausnahmen von dieser Regel sind die Funktionen max und min, die den Wert des „zweiten“ Arguments (außer NaN) zurückgeben. Triviale Operationen, bei denen es sich um Identitäten handelt, werden besonders behandelt: Beispielsweise ist 1NaN gleich 1.

  2. Wie bekomme ich Unendlichkeit in Java?

    In Java hat Typ doubleeine besondere Bedeutung für Plus-Unendlich und Minus-Unendlich. Eine positive Zahl geteilt durch 0,0 ergibt „plus Unendlich“ und eine negative Zahl – „minus Unendlich“. Diese Konzepte entsprechen speziellen Konstanten vom Typ Double:

    Code Beschreibung
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; plus unendlich
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; minus unendlich
    1. Wir wandeln die Zeichenfolge in eine Zahl um und sie enthält Buchstaben. Die Antwort ist NaN
    2. Unendlichkeit minus Unendlichkeit. Die Antwort ist NaN
    3. Es gibt viele andere Situationen, in denen eine Zahl als Antwort erwartet wird, das Ergebnis jedoch unbekannt ist.

    Jede Operation, die NaN enthält, führt zu NaN.

    Aktionen mit Unendlichkeit:
    Ausdruck Ergebnis
    n ÷ ±Unendlich 0
    ±Unendlich × ±Unendlich ±Unendlich
    ±(nicht Null) ÷ ±Unendlich
    Unendlichkeit + Unendlichkeit Unendlichkeit
    ±0 ÷ ±0 NaN
    Unendlichkeit – Unendlichkeit NaN
    ±Infinity ÷ ±Infinity NaN
    ±Infinity × 0 NaN
  3. Как проверить, что в результате вычисления получилась бесконечность?

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

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

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

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

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

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

  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, так Wie на нем более наглядно видно, куда устанавливается 0.

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

    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 возвращает Bedeutung запрашиваемого бита (в 10-ой системе).

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

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

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

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

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

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

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

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

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

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