JavaRush /Blog Java /Random-FR /Niveau 30. Réponses aux questions d'entretien sur le suje...
DefNeo
Niveau 36

Niveau 30. Réponses aux questions d'entretien sur le sujet du niveau

Publié dans le groupe Random-FR
Niveau 30. Réponses aux questions d'entretien sur le thème du niveau - 1
  1. Qu’est-ce que NaN ?

    NaN (anglais Not-a-Number) est l'un des états spéciaux d'un nombre à virgule flottante. Utilisé dans de nombreuses bibliothèques mathématiques et coprocesseurs mathématiques. Cette condition peut se produire dans divers cas, par exemple lorsqu'une opération mathématique précédente s'est terminée avec un résultat indéfini, ou si un nombre qui ne satisfait pas aux conditions a été entré dans une cellule mémoire.

    Conformément à la norme IEEE 754, cet état est spécifié en définissant l'exposant sur la valeur réservée 11...11 et la mantisse sur une valeur autre que 0 (la valeur réservée pour l'infini de la machine). Le signe et la mantisse peuvent contenir des informations supplémentaires : de nombreuses bibliothèques génèrent un NaN « négatif » sous la forme -NaN.

    Les opérations qui aboutissent à NaN comme réponse incluent :

    • toutes les opérations mathématiques contenant NaN comme l'un des opérandes ;
    • diviser zéro par zéro ;
    • diviser l'infini par l'infini ;
    • multiplier zéro par l'infini ;
    • addition de l'infini avec l'infini du signe opposé ;
    • calculer la racine carrée d'un nombre négatif[1] ;
    • prendre le logarithme d'un nombre négatif.

    Certains langages de programmation ont un NaN « silencieux » et « signal » : le premier, lorsqu'il est impliqué dans une opération, renvoie NaN, le second provoque une urgence. Généralement, « silencieux » ou « signal » est déterminé par le bit le plus significatif de la mantisse.

    NaN n'est égal à aucune autre valeur (pas même à elle-même[2]) ; En conséquence, la méthode la plus simple pour vérifier un résultat pour NaN consiste à comparer la valeur résultante avec elle-même.

    Le comportement des autres opérateurs de comparaison varie selon la langue. Certaines langues produisent false[3] (de sorte que a < b et b > a se comportent différemment avec NaN), d'autres lancent un crash même pour NaN « silencieux ».

    Toute opération non triviale qui prend un NaN silencieux comme argument renverra toujours NaN, quelle que soit la valeur des autres arguments. Les seules exceptions à cette règle sont les fonctions max et min, qui renvoient la valeur du « deuxième » argument (autre que NaN). Les opérations triviales qui sont des identités sont traitées spécialement : par exemple, 1NaN est égal à 1.

  2. Comment obtenir l’infini en Java ?

    En Java, le type doublea des significations particulières pour plus l'infini et moins l'infini. Un nombre positif divisé par 0,0 donne "plus l'infini" et un nombre négatif - "moins l'infini". Ces concepts correspondent à des constantes particulières de type Double:

    Code Description
    public static final double POSITIVE_INFINITY = 1.0 / 0.0; plus l'infini
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0; moins l'infini
    1. Nous convertissons la chaîne en nombre et elle contient des lettres. La réponse est NaN
    2. L'infini moins l'infini. La réponse est NaN
    3. Il existe de nombreuses autres situations dans lesquelles ils attendent un chiffre dans la réponse, mais le résultat est inconnu.

    Toute opération contenant NaN donne NaN.

    Actions avec l'infini :
    Expression Résultat
    n ÷ ±Infini 0
    ±Infini × ±Infini ±Infini
    ±(non nul) ÷ ±Infini
    Infini + Infini Infini
    ±0 ÷ ±0 NaN
    Infini - Infini NaN
    ±Infini ÷ ±Infini NaN
    ±Infini × 0 NaN
  3. Comment vérifier que le résultat du calcul est l’infini ?

    Il y a une réponse sur StackOverFlow .

    Tout se résume à la conclusionSystem.out.println()

  4. Qu'est-ce qu'un masque de bits ?

    Un masque de bits , c'est lorsque de nombreuses valeurs booléennes différentes (vrai/faux) sont stockées sous la forme d'un seul entier. Dans ce cas, chaque valeur booléenne correspond à un bit spécifique.

  5. Où sont utilisés les masques à embouts ?

    Principalement là où vous devez stocker de manière compacte de nombreuses informations sur les objets. Lorsque vous stockez de nombreuses informations sur un objet, il y aura toujours quelques dizaines de variables logiques. Il est pratique de tous les stocker sous un seul numéro. Rangez-le simplement. Parce que Ce n'est pas très pratique à utiliser au travail.

  6. Comment définir un bit sur un dans un masque de bits ?

    Sur la base des cours, vous pouvez répondre avec le code suivant :

    Ici j'ai utilisé la méthode Integer.toBinaryString()pour me tester, et si)

    public class BitMask {
    
        public static void main(String[] args) {
            int a = 9;
    
           a |= (1<<2); // установить в 1 бит 2
    
    
            System.out.println(Integer.toBinaryString(a) + " "+ a);
        }
    }

    La conclusion est la suivante :

    1101 13

  7. Comment mettre un bit à zéro dans un bitmask ?

    public class BitMask {
    
    public static void main(String[] args) {
    int a = 15;
    
    a &= ~(1<<2); // установить в 0 бит 2
    System.out.println(Integer.toBinaryString(a) + " "+ a);
    
        }
    }

    Conclusion:

    1011 11

    J'ai pris le chiffre 15, car il montre plus clairement où est réglé 0.

  8. Comment obtenir la valeur d'un bit spécifique dans un masque de bits ?

    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);
    
        }
    }

    Conclusion:

    1011 11 0 8

    C 0 tout est clair, à cet endroit il y a bien 0. Et la variable d renvoie la valeur du bit demandé (dans le 10ème système).

  9. Qu’est-ce que l’évaluation d’expression paresseuse ?

    Article : Programmation paresseuse et évaluation paresseuse

    Это ленивые вычисления (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, то ленивых вычислений происходить не будет)

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