JavaRush /Java Blog /Random-KO /레벨 30. 레벨 주제에 대한 인터뷰 질문에 대한 답변
DefNeo
레벨 36

레벨 30. 레벨 주제에 대한 인터뷰 질문에 대한 답변

Random-KO 그룹에 게시되었습니다
레벨 30. 레벨-1 주제에 관한 인터뷰 질문에 대한 답변
  1. NaN이란 무엇입니까?

    NaN (English Not-a-Number)은 부동 소수점 숫자의 특수 상태 중 하나입니다. 많은 수학 라이브러리와 수학 보조 프로세서에서 사용됩니다. 이러한 상황은 이전 수학 연산이 불확실한 결과로 완료되었거나 조건을 만족하지 않는 숫자가 메모리 셀에 입력되는 등 다양한 경우에 발생할 수 있습니다.

    IEEE 754에 따라 이 상태는 지수를 예약된 값 11...11로 설정하고 가수를 0(기계 무한대에 대해 예약된 값) 이외의 값으로 설정하여 지정됩니다. 부호와 가수에는 몇 가지 추가 정보가 포함될 수 있습니다. 많은 라이브러리는 "음수" NaN을 -NaN으로 출력합니다.

    응답으로 NaN을 생성하는 작업은 다음과 같습니다.

    • 피연산자 중 하나로 NaN을 포함하는 모든 수학 연산;
    • 0을 0으로 나누기;
    • 무한대를 무한대로 나누는 것;
    • 0에 무한대를 곱함;
    • 반대 기호의 무한대에 무한대 추가;
    • 음수의 제곱근을 계산합니다[1];
    • 음수의 로그를 취합니다.

    일부 프로그래밍 언어에는 "자동" 및 "신호" NaN이 있습니다. 첫 번째는 작업에 참여할 때 NaN을 반환하고 두 번째는 긴급 상황을 발생시킵니다. 일반적으로 "조용함" 또는 "신호"는 가수의 최상위 비트에 의해 결정됩니다.

    NaN은 다른 값(심지어 자체[2]도 아님)과 동일하지 않습니다. 따라서 NaN에 대한 결과를 확인하는 가장 간단한 방법은 결과 값을 자신과 비교하는 것입니다.

    다른 비교 연산자의 동작은 언어에 따라 다릅니다. 일부 언어는 false[3](a < b 및 b > a가 NaN과 다르게 동작하도록)를 생성하고 다른 언어는 "조용한" NaN에 대해서도 충돌을 발생시킵니다.

    자동 NaN을 인수로 사용하는 모든 중요한 작업은 다른 인수의 값에 관계없이 항상 NaN을 반환합니다. 이 규칙의 유일한 예외는 "두 번째" 인수(NaN 제외)의 값을 반환하는 max 및 min 함수입니다. ID인 사소한 연산은 특별히 처리됩니다. 예를 들어 1NaN은 1과 같습니다.

  2. Java에서 무한대를 얻는 방법은 무엇입니까?

    Java에서 유형은 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. 문자열을 숫자로 변환하면 문자가 포함됩니다. 답은 NaN이다
    2. 무한대 마이너스 무한대. 답은 NaN이다
    3. 그 밖에도 답에 숫자가 나올 것으로 예상하지만 결과를 알 수 없는 상황이 많이 있습니다.

    NaN을 포함하는 모든 작업은 NaN이 됩니다.

    무한대의 작업:
    표현 결과
    n ¼ ±무한대 0
    ±무한대 × ±무한대 ±무한대
    ±(0이 아님) ¼ ±무한대
    무한대 + 무한대 무한대
    ±0 ¼ ±0 NaN
    무한 - 무한 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