JavaRush /Java блогы /Random-KK /Деңгей 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 үшін нәтижені тексерудің ең қарапайым әдісі нәтиже мәнін өзімен салыстыру болып табылады.

    Басқа салыстыру операторларының әрекеті тілге байланысты өзгереді. Кейбір тілдер жалған[3] шығарады (a <b және b> a NaN-мен басқаша әрекет ету үшін), басқалары тіпті «тыныш» NaN үшін де апатқа ұшырайды.

    Аргумент ретінде үнсіз NaN қабылдайтын кез келген тривиальды емес операция басқа аргументтердің мәніне қарамастан әрқашан NaN қайтарады. Бұл ережеден жалғыз ерекшеліктер "екінші" аргументтің мәнін қайтаратын (NaN-тан басқа) max және min функциялары болып табылады. Сәйкестік болып табылатын тривиальды операциялар арнайы қарастырылады: мысалы, 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 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