JavaRush /مدونة جافا /Random-AR /المستوى 30. إجابات لأسئلة المقابلة حول موضوع المستوى
DefNeo
مستوى

المستوى 30. إجابات لأسئلة المقابلة حول موضوع المستوى

نشرت في المجموعة
المستوى 30. إجابات أسئلة المقابلة حول موضوع المستوى - 1
  1. ما هو نان؟

    NaN (الإنجليزية Not-a-Number) هي إحدى الحالات الخاصة لرقم الفاصلة العائمة. تستخدم في العديد من المكتبات الرياضية والمعالجات الرياضية المساعدة. يمكن أن يحدث هذا الشرط في حالات مختلفة، على سبيل المثال، عند اكتمال عملية حسابية سابقة بنتيجة غير محددة، أو إذا تم إدخال رقم لا يستوفي الشروط في خلية ذاكرة.

    وفقًا لـ IEEE 754، يتم تحديد هذه الحالة عن طريق تعيين الأس على القيمة المحجوزة 11...11، والأجزاء العشرية على أي شيء آخر غير 0 (القيمة المحجوزة لما لا نهاية الآلة). قد تحمل العلامة والجزء العشري بعض المعلومات الإضافية: تقوم العديد من المكتبات بإخراج NaN "سلبي" كـ -NaN.

    تشمل العمليات التي تؤدي إلى NaN كاستجابة ما يلي:

    • جميع العمليات الرياضية التي تحتوي على NaN كأحد المعاملات؛
    • قسمة الصفر على صفر؛
    • قسمة اللانهاية على اللانهاية؛
    • ضرب الصفر في اللانهاية؛
    • إضافة ما لا نهاية مع ما لا نهاية من الإشارة المقابلة؛
    • حساب الجذر التربيعي لعدد سالب[1]؛
    • أخذ لوغاريتم الرقم السالب.

    تحتوي بعض لغات البرمجة على NaN "صامت" و"إشارة": الأول، عند المشاركة في أي عملية، يُرجع NaN، والثاني يسبب حالة طوارئ. عادة، يتم تحديد "الهدوء" أو "الإشارة" من خلال الجزء الأكثر أهمية في الجزء العشري.

    NaN لا يساوي أي قيمة أخرى (ولا حتى نفسه[2])؛ وبناءً على ذلك، فإن أبسط طريقة للتحقق من نتيجة NaN هي مقارنة القيمة الناتجة بنفسها.

    يختلف سلوك عوامل المقارنة الأخرى حسب اللغة. تنتج بعض اللغات خطأ[3] (بحيث يتصرف < b و b > a بشكل مختلف مع NaN)، والبعض الآخر يتعطل حتى مع NaN "الهادئ".

    أي عملية غير تافهة تأخذ NaN صامتًا كوسيطة ستعيد دائمًا NaN، بغض النظر عن قيمة الوسائط الأخرى. الاستثناءات الوحيدة لهذه القاعدة هي الدالتان max وmin، اللتان ترجعان قيمة الوسيطة "الثانية" (بخلاف NaN). يتم التعامل مع العمليات التافهة التي تمثل هويات بشكل خاص: على سبيل المثال، 1NaN يساوي 1.

  2. كيفية الحصول على اللانهاية في جافا؟

    في Java، النوع doubleله معاني خاصة لـ plus infinity وناقص infinity. الرقم الموجب مقسومًا على 0.0 يعطي "زائد اللانهاية"، والرقم السالب - "ناقص اللانهاية". تتوافق هذه المفاهيم مع ثوابت خاصة من النوع Double:

    شفرة وصف
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; بالإضافة إلى اللانهاية
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; ناقص اللانهاية
    1. نقوم بتحويل السلسلة إلى رقم، وهي تحتوي على أحرف. الجواب هو نان
    2. ما لا نهاية ناقص ما لا نهاية. الجواب هو نان
    3. وهناك العديد من المواقف الأخرى التي يتوقعون فيها رقمًا في الإجابة، لكن النتيجة غير معروفة.

    أي عملية تحتوي على NaN تؤدي إلى NaN.

    الإجراءات مع ما لا نهاية:
    تعبير نتيجة
    ن ÷ ±اللانهاية 0
    ±إنفينيتي × ±إنفينيتي ± إنفينيتي
    ± (ليس صفر) ÷ ± إنفينيتي
    إنفينيتي + إنفينيتي ما لا نهاية
    ±0 ÷ ±0 نان
    إنفينيتي - إنفينيتي نان
    ±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