JavaRush /Blog Java /Random-ES /Nivel 30. Respuestas a las preguntas de la entrevista sob...
DefNeo
Nivel 36

Nivel 30. Respuestas a las preguntas de la entrevista sobre el tema del nivel.

Publicado en el grupo Random-ES
Nivel 30. Respuestas a las preguntas de la entrevista sobre el tema del nivel - 1
  1. ¿Qué es NaN?

    NaN (inglés Not-a-Number) es uno de los estados especiales de un número de coma flotante. Utilizado en muchas bibliotecas matemáticas y coprocesadores matemáticos. Esta condición puede ocurrir en varios casos, por ejemplo, cuando una operación matemática anterior se completó con un resultado indefinido, o si se ingresó en una celda de memoria un número que no cumple las condiciones.

    De acuerdo con IEEE 754, este estado se especifica estableciendo el exponente en el valor reservado 11...11 y la mantisa en cualquier valor distinto de 0 (el valor reservado para el infinito de la máquina). El signo y la mantisa pueden contener información adicional: muchas bibliotecas generan NaN "negativos" como -NaN.

    Las operaciones que dan como resultado NaN como respuesta incluyen:

    • todas las operaciones matemáticas que contienen NaN como uno de los operandos;
    • dividir cero por cero;
    • dividiendo infinito por infinito;
    • multiplicar cero por infinito;
    • suma de infinito con infinito de signo opuesto;
    • calcular la raíz cuadrada de un número negativo[1];
    • tomando el logaritmo de un número negativo.

    Algunos lenguajes de programación tienen NaN "silenciosos" y de "señal": el primero, cuando participa en cualquier operación, devuelve NaN, el segundo provoca una emergencia. Normalmente, "silencio" o "señal" está determinado por la parte más significativa de la mantisa.

    NaN no es igual a ningún otro valor (ni siquiera a sí mismo[2]); En consecuencia, el método más sencillo para comprobar un resultado de NaN es comparar el valor resultante consigo mismo.

    El comportamiento de otros operadores de comparación varía según el idioma. Algunos lenguajes producen false[3] (de modo que a < b y b > a se comportan de manera diferente con NaN), otros provocan un bloqueo incluso para NaN "silencioso".

    Cualquier operación no trivial que tome un NaN silencioso como argumento siempre devolverá NaN, independientemente del valor de los demás argumentos. Las únicas excepciones a esta regla son las funciones max y min, que devuelven el valor del "segundo" argumento (que no sea NaN). Las operaciones triviales que son identidades se tratan de manera especial: por ejemplo, 1NaN es igual a 1.

  2. ¿Cómo conseguir el infinito en Java?

    En Java, el tipo doubletiene significados especiales para más infinito y menos infinito. Un número positivo dividido por 0,0 da "más infinito" y un número negativo, "menos infinito". Estos conceptos corresponden a constantes especiales de tipo Double:

    Código Descripción
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; más infinito
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; menos infinito
    1. Convertimos la cadena en un número y contiene letras. La respuesta es NaN.
    2. Infinito menos infinito. La respuesta es NaN.
    3. Hay muchas otras situaciones en las que esperan un número en la respuesta, pero se desconoce el resultado.

    Cualquier operación que contenga NaN da como resultado NaN.

    Acciones con infinito:
    Expresión Resultado
    n ÷ ± Infinito 0
    ±Infinito × ±Infinito ±Infinito
    ±(no cero) ÷ ±Infinito
    Infinito + Infinito Infinidad
    ±0 ÷ ±0 Yaya
    Infinito - Infinito Yaya
    ±Infinity ÷ ±Infinity NaN
    ±Infinity × 0 NaN
  3. Как проверить, что в результате вычисления получилась бесконечность?

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

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

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

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

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

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

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

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

    Здесь использовал метод 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, так Cómo на нем более наглядно видно, куда устанавливается 0.

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

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

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

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

    Это ленивые вычисления (lazy evaluation). В ленивых вычислениях ни один параметр не вычисляется, пока в нем нет необходимости. Программы фактически начинаются с конца и работают от конца к началу. Программа вычисляет, что должно быть возвращено, и продолжает движение назад, чтобы определить, Cómoое significado для этого требуется. В сущности каждая функция вызывается с promise'ами для каждого параметра. Когда для вычисления необходимо significado, тогда выполняется promise. Поскольку código выполняется только тогда, когда необходимо significado, это называется вызов по необходимости (call-by-need). В традиционных языках программирования en lugar de promise'ов передаются значения, это называется вызов по значению(call-by-value).

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

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

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

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

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

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

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