JavaRush /Java блогу /Random-KY /30-деңгээл. Деңгээлдеги тема боюнча интервью суроолоруна ...
DefNeo
Деңгээл

30-деңгээл. Деңгээлдеги тема боюнча интервью суроолоруна жооптор

Группада жарыяланган
30-деңгээл. Деңгээлдин темасы боюнча интервью суроолоруна жооптор - 1
  1. NaN деген эмне?

    NaN (англисче Not-a-Number) — калкыма чекиттүү сандын өзгөчө абалынын бири. Көптөгөн математикалык китепканаларда жана математикалык сопроцессорлордо колдонулат. Бул шарт ар кандай учурларда пайда болушу мүмкүн, мисалы, мурунку математикалык операция аныкталбаган натыйжа менен аяктаганда же эс тутум клеткасына шарттарды канааттандырбаган сан киргизилгенде.

    IEEE 754 ылайык, бул абал көрсөткүчтү резервдик мааниге 11...11, ал эми мантиссаны 0дөн башка нерсеге коюу менен аныкталат (машинанын чексиздиги үчүн резервдик маани). Белги жана мантисса кошумча маалымат алып келиши мүмкүн: көптөгөн китепканалар "терс" NaNды -NaN катары чыгарышат.

    Жооп катары NaN алып келген операцияларга төмөнкүлөр кирет:

    • операнддардын бири катары NaN камтыган бардык математикалык операциялар;
    • нөлдү нөлгө бөлүү;
    • чексиздикти чексиздикке бөлүү;
    • нөлдү чексиздикке көбөйтүү;
    • карама-каршы белгинин чексиздиги менен чексиздикти кошуу;
    • терс сандын квадрат тамырын эсептөө[1];
    • терс сандын логарифмасын алуу.

    Кээ бир программалоо тилдеринде "унчукпаган" жана "сигнал" NaN бар: биринчиси, кандайдыр бир операцияга катышканда, NaN кайтарат, экинчиси өзгөчө кырдаалды жаратат. Адатта, "тынч" же "сигнал" мантиссанын эң маанилүү биттери менен аныкталат.

    NaN эч кандай башка мааниге барабар эмес (өзү да эмес[2]); Демек, NaN үчүн натыйжаны текшерүүнүн эң жөнөкөй ыкмасы - натыйжадагы маанини өзү менен салыштыруу.

    Башка салыштыруу операторлорунун жүрүм-туруму тилге жараша өзгөрөт. Кээ бир тилдер false [3] чыгарышат (а <b жана b> a NaN менен башкача мамиле кылышы үчүн), башкалары "тынч" NaN үчүн да ката кетиришет.

    Аргумент катары үнсүз NaN алган ар кандай тривиалдуу эмес операция, башка аргументтердин маанисине карабастан, ар дайым NaN кайтарып берет. Бул эрежеден бир гана өзгөчөлүктөр "экинчи" аргументтин (NaN башка) маанисин кайтаруучу max жана min функциялары болуп саналат. Идентификатор болуп саналган майда операциялар өзгөчө каралат: мисалы, 1NaN 1ге барабар.

  2. Java'да чексиздикти кантип алса болот?

    Java тorнде тип doubleплюс чексиздик жана минус чексиздик үчүн өзгөчө мааниге ээ. 0,0гө бөлүнгөн оң сан "плюс чексиздикти" берет, ал эми терс сан - "минус чексиздикти" берет. Бул түшүнүктөр типтеги өзгөчө константаларга туура келет Double:

    Code Description
    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
    ±Чексиздик × ±Чексиздик ±Чексиздик
    ±(нөл эмес) ÷ ±Чексиздик
    Infinity + Infinity Infinity
    ±0 ÷ ±0 НаН
    Infinity - Infinity НаН
    ±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