Partage de technologie

Première expérience d'entretien (stagiaire en développement Java)

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Questions de l'intervieweur

  • Je voudrais vous demander si vous avez réalisé des projets ici ?
  • Pourriez-vous s'il vous plaît nous parler des projets sur lesquels vous avez travaillé, quelle pile technologique vous avez utilisée et quel contenu vous étiez chargé de développer ? (Expérience de projet)
  • Quels sont les huit types de données de base ? (Base)
  • Pouvez-vous me dire si le type long peut être exécuté directement ? La question devrait être de savoir si cela peut être calculé directement ? (Base)
  • Comprenez-vous le modèle singleton ? Pouvez-vous en parler (Design Patterns)
  • Quelle est la différence entre le mode homme paresseux et le mode homme affamé ?
  • Quelles sont les caractéristiques des transactions ? (transaction)
  • Parlez-moi des exceptions que vous avez rencontrées en travaillant sur des projets ? (anormal)
  • Parlons des trois catégories de temps couramment utilisées ? (Base)
  • Vous parlez de trois méthodes de calendrier ?
  • Parlons du cycle de vie de la session. (session)
  • Avez-vous déjà rencontré une perte de précision en virgule flottante lorsque vous travailliez sur un projet ? Comment l'avez-vous résolu ?
  • Ensuite, nous avons un calcul en virgule flottante. Quel type de données choisiriez-vous de calculer ?
  • Pouvez-vous me donner quelques annotations couramment utilisées ? Printemps? Ou autre chose?
  • Connaissez-vous les fils de discussion ?
    • Quelle est la différence entre thread et processus ?
  • Alors dites-moi ce qu'est la sécurité des threads ?
  • Dites-moi la différence entre == et égal ?
  • Alors, avez-vous déjà utilisé Linux ? Pouvez-vous parler brièvement de certaines commandes couramment utilisées ?

problème résolu

- 我想问一下你这边有做过什么项目吗?

Je pense que vous pouvez simplement choisir un ou deux projets relativement compétents dont vous pourrez parler.

- 你方便讲一下你做过的那些项目吗,用了什么技术栈,包括你负责开发的内容是什么?

Choisissez le projet le plus familier dont vous souhaitez parler.

- 八大基本数据类型是什么?

octet, court, int, long, flottant, double, char, booléen

- 你说一下long类型能直接运转吗(Je pense qu'il s'agit de demander si les données de type long peuvent être exploitées directement)

Les données de type long peuvent être directement exploitées lorsque vous mélangez des valeurs de type int et long dans une expression, la valeur de type int sera automatiquement promue en type long pour garantir que le résultat de l'expression entière est de type long.

- 你了解单例模式吗?你可以讲一下吗

Singleton Pattern est un modèle de conception logicielle couramment utilisé. Son objectif est de garantir qu'une classe ne dispose que d'une seule instance et de fournir un point d'accès global pour obtenir cette instance unique. Ce modèle est utile lorsque vous devez contrôler l'accès aux ressources, ou lorsque l'instanciation d'objets est gourmande en ressources ou prend du temps, et qu'une seule de ces ressources ou instances est nécessaire globalement. Les méthodes de mise en œuvre courantes du mode singleton incluent principalement : le mode paresseux et le mode affamé.

- 懒汉模式跟饿汉模式有什么区别?

  1. Peut être obtenu auprès deCalendrier d'initialisation des objets, sécurité des threads et utilisation des ressourcesComparez sous d’autres aspects :

      1. Calendrier d'initialisation
      • mode paresseux: Le mode paresseux est un延迟加载 modèle singleton.Il se caractérise par第一次使用时创建实例对象 , plutôt que de le créer lorsque la classe est chargée.Ce modèle évite le besoin d'objets d'instance lorsque资源浪费, créé uniquement en cas de besoin.
      • Mode faim: Le mode Hungry Man est une sorte de在类加载时就创建实例 modèle singleton. Sa caractéristique est que l'objet instance est créé lors du chargement de la classe, qu'il soit utilisé ou non.Cette méthode garantit que le même objet d'instance peut être obtenu dans toutes les circonstances, mais elle peut entraîner des problèmes.性能和资源上的浪费, surtout dans certains cas, l'objet instance n'est pas utilisé.
      1. sécurité du fil
      • mode paresseux: Le mode paresseux lui-même est非线程安全的 , car il est possible que plusieurs threads appellent la méthode getInstance() en même temps et saisissent l'instruction de jugement en même temps, ce qui entraîne la création de plusieurs instances.Afin d'assurer la sécurité des threads, vous pouvez utiliser la méthode getInstance()添加synchronized关键字 , mais cela entraînera une surcharge de performances. De plus, vous pouvez également utiliser le verrouillage à double vérification (Double-Checked Locking) et d'autres méthodes pour réduire la surcharge de synchronisation.
      • Mode faim: Le mode faim est线程安全Oui, car l'objet instance a été créé lors du chargement de la classe, il n'y a pas de problème de concurrence dans un environnement multithread.
      1. Utilisation des ressources et performances
      • mode paresseux : Le mode paresseux peut économiser des ressources car il évite de gaspiller des ressources lorsque les objets d'instance ne sont pas nécessaires. Cependant, comme il doit être initialisé lors de la première utilisation, les performances peuvent être affectées si le processus d'initialisation est complexe ou prend beaucoup de temps.
      • Mode faim : Le mode affamé n'est peut-être pas aussi flexible que le mode paresseux en termes d'utilisation des ressources, car il crée des objets d'instance, qu'ils soient ou non utilisés. Cependant, comme l'objet instance est déjà créé lors du chargement de la classe, il est plus rapide au premier appel car aucune initialisation n'est requise.
  2. Scène applicable

    • mode paresseux: Applicable àScénario dans lequel l'objet est créé uniquement lorsqu'il est utilisé pour la première fois et où il n'existe aucune exigence complexe en matière de sécurité des threads pendant le processus d'initialisation de l'objet d'instance. . Par exemple,gestionnaire de fichiersIl s'agit d'un exemple typique, car vous n'aurez peut-être pas besoin de lire et d'écrire des fichiers immédiatement au démarrage de l'application, mais d'effectuer les opérations associées uniquement lorsque cela est nécessaire.
    • Mode faim : Convient aux ressources qui doivent être initialisées au démarrage du programme et qui sont utilisées tout au long du cycle de vie de l'application. Par exemple, un enregistreur est un bon candidat pour le modèle Hungry car la fonctionnalité de journalisation doit généralement être prête au début de l'application et enregistrer les messages tout au long de l'exécution de l'application.
    • En résumé, le mode paresseux et le mode affamé ont chacun leurs propres avantages et inconvénients, et dans les applications pratiques, ils doivent être examinés de manière globale et conçus en fonction de scénarios spécifiques.

- 说一下事务的几种特性?

  1. Les transactions présentent quatre caractéristiques fondamentales, également appeléesACIDELes fonctionnalités incluent spécifiquement :
    • Atomicité : L'atomicité signifie que toutes les opérations d'une transaction sont soit terminées, soit non exécutées. Elles constituent une unité de travail indivisible. Si des erreurs ou des échecs se produisent lors de l'exécution de la transaction, les opérations qui ont été effectuées seront annulées (annulées) et la transaction entière ressemblera à une opération qui n'a jamais eu lieu. Cette fonctionnalité garantit l’intégrité et la cohérence des transactions.
    • Cohérence : La cohérence signifie qu'une transaction doit transformer la base de données d'un état de cohérence à un autre état de cohérence. Avant le début et après la fin de la transaction, les contraintes d'intégrité de la base de données (telles que les contraintes de clé primaire, les contraintes de clé étrangère, etc.) ne sont pas détruites et toutes les données conservent une cohérence logique. Si l'intégrité de la base de données est compromise lors de l'exécution d'une transaction, la transaction sera annulée et les opérations effectuées seront annulées.
    • Isolement : L'isolement signifie que lorsque plusieurs transactions sont exécutées simultanément, chaque transaction est isolée les unes des autres et l'exécution d'une transaction ne peut pas être interférée par d'autres transactions. Le système de base de données offre un certain niveau d'isolation afin que les transactions exécutées simultanément n'interfèrent pas les unes avec les autres, garantissant ainsi l'exactitude et la cohérence des données. L'isolation est généralement obtenue grâce à des mécanismes tels que des verrous (tels que des verrous de ligne, des verrous de table, etc.) ou un contrôle d'accès concurrentiel multiversion (MVCC).
    • Durabilité : La durabilité, également appelée permanence, signifie qu'une fois qu'une transaction est validée, ses modifications dans la base de données sont permanentes et ne seront pas perdues même en cas de panne du système. Le système de base de données garantit la durabilité des transactions grâce aux journaux et aux mécanismes de récupération. Même en cas de panne du système, le système peut récupérer les modifications apportées à la base de données par des transactions validées via les journaux.

- 说一下你在做项目的过程中都遇到过哪些异常吗?(Il suffit d'en citer quelques-uns)

  1. Exceptions aux codes
    • NullPointerException : lancé lors d'une tentative d'accès ou d'utilisation d'un objet non initialisé. Il est courant d'oublier de vérifier si l'objet est nul et de l'utiliser directement.
    • Exception de tableau hors limites (ArrayIndexOutOfBoundsException): Un index non valide a été utilisé lors de l'accès au tableau (l'index est inférieur à 0 ou supérieur ou égal à la taille du tableau).
    • Exception de conversion de type (ClassCastException): Lors du casting, l'objet en cours de conversion n'est pas une instance du type cible ou de sa sous-classe.
    • ArithmeticException // par zéro: Lors de l'exécution d'une opération de division, le diviseur est zéro.
  2. Exceptions de données
    • Erreur de format de données: Par exemple, lors de l'analyse de données JSON ou XML, le format des données ne répond pas aux attentes.
    • Exception d'intégrité des données: Si une contrainte de clé étrangère dans la base de données échoue, les règles d'intégrité des données sont violées lors de la tentative d'insertion ou de mise à jour des données.
    • Exception de données non trouvées: Si les données correspondantes ne sont pas trouvées selon les conditions données lors de l'interrogation de la base de données.
  3. Exceptions réseau
    • Délai d'expiration de la connexion (ConnectTimeoutException): Lors de la tentative d'établissement d'une connexion réseau, la demande de connexion a expiré en attendant une réponse.
    • Délai d'expiration de lecture (SocketTimeoutException): L'opération a expiré lors de la lecture des données de la connexion.
    • Le réseau est inaccessible (UnknownHostException):ne peut pas résoudre le nom d'hôte.
    • Connexion refusée (ConnectionRefusedError): La machine cible a refusé la demande de connexion.
  4. Exceptions de ressources système
    • Débordement de mémoire (OutOfMemoryError): La JVM ne disposait pas de suffisamment d'espace mémoire disponible lors de la tentative d'allocation de mémoire.
    • Le fichier n'existe pas (FileNotFoundException): Le fichier ou le répertoire auquel vous essayez d'accéder n'existe pas.
    • Autorisations insuffisantes (SecurityException/AccessDeniedException): autorisations insuffisantes pour effectuer une opération, telle que lire et écrire des fichiers, accéder aux ressources réseau, etc.
  5. Exceptions liées aux services tiers
    • Le service est indisponible (ServiceUnavailableException): Le service tiers dépendant est temporairement indisponible.
    • Limite de l'API (RateLimitException) : la requête adressée à l'API tierce dépasse sa limite (telle que la limite de fréquence des requêtes).
    • L'authentification a échoué (AuthenticationException): Lors de l'accès à des services tiers, les informations d'authentification sont invalides ou expirées.
  6. Exceptions logiques
    • Erreur de logique métier: Par exemple, le montant de la commande est mal calculé, le stock est insuffisant mais la commande est quand même traitée, etc.
    • Statut incohérent: Un certain état du système est incompatible avec les attentes, ce qui rend les opérations ultérieures impossibles.

- 说一下时间常用的三个类?

LocalDate, LocalTime, LocalDateTime. (Il suffit d'en citer trois)

  • En Java, les classes couramment utilisées pour le temps de traitement sont les classes des trois packages java.util.Date, java.util.Calendar et java.time introduits dans Java 8 (tels queDate locale, heure locale, date et heure localesattendez)

- 说一下日历的三个方法?

Lorsqu'il s'agit d'opérations liées au calendrier, nous pensons généralement à la classe java.util.Calendar, car il s'agit d'une classe abstraite qui fournit des méthodes pour gérer les champs du calendrier (tels que l'année, le mois, le jour, l'heure, etc.).À partir de Java 8, une nouvelle API de date et d'heure (située sous le package java.time) a été introduite, offrant de meilleures capacités de traitement de date et d'heure.

  • Introduction aux méthodes courantes de LocalDateTime :
      1. Créer un objet LocalDateTime
      • now() : crée un objet LocalDateTime représentant la date et l'heure actuelles.
      • of() : crée un objet LocalDateTime avec l'année, le mois, le jour, l'heure, la minute, la seconde spécifiés (et les nanosecondes facultatives). Par exemple : LocalDateTime.of(2023, Month.JANUARY, 1, 12, 0, 0).
      1. Récupère les propriétés de l'objet LocalDateTime
      • getYear(), getMonth(), getDayOfMonth(), getHour(), getMinute(), getSecond(), etc. : utilisés pour obtenir respectivement les attributs année, mois, jour, heure, minute et seconde dans l'objet LocalDateTime.
      1. Modifier les propriétés de l'objet LocalDateTime
      • withYear(), withMonth(), withDayOfMonth(), withHour(), withMinute(), withSecond(), etc. : définissez une propriété de l'objet LocalDateTime sur la valeur spécifiée et renvoie un nouvel objet LocalDateTime. L'objet d'origine reste inchangé. . variable (car LocalDateTime est immuable).
      1. Addition et soustraction de date et d'heure
      • plusYears(), plusMonths(), plusDays(), plusHours(), plusMinutes(), plusSeconds(), etc. : ajoutez la période de temps spécifiée à l'objet LocalDateTime et renvoyez un nouvel objet LocalDateTime. minusYears(), minusMonths(), minusDays(), minusHours(), minusMinutes(), minusSeconds(), etc. : soustrayez la période de temps spécifiée de l'objet LocalDateTime et renvoyez un nouvel objet LocalDateTime.
      1. Comparer les objets LocalDateTime
      • isBefore (LocalDateTime other) : détermine si l'objet actuel est antérieur à l'objet LocalDateTime spécifié.
      • isAfter (LocalDateTime other) : détermine si l'objet actuel est postérieur à l'objet LocalDateTime spécifié.
      1. Formater l'objet LocalDateTime
      • format (Formateur DateTimeFormatter) : formatez l'objet LocalDateTime en une chaîne au format de date et d'heure spécifié. Par exemple : DateTimeFormatter formatter = DateTimeFormatter.ofPattern("aaaa-MM-jj HH:mm:ss"); String formattedDateTime = dateTime.format(formatter);.
      1. Calculer le décalage horaire
      • Bien que LocalDateTime lui-même ne fournisse pas de méthode pour calculer directement le décalage horaire, vous pouvez utiliser la classe Duration ou la classe ChronoUnit pour calculer le décalage horaire entre deux objets LocalDateTime.
      • Utilisez la classe Duration : Duration duration = Duration.between(start, end);, et vous pourrez ensuite obtenir la valeur spécifique de la différence de temps, telle que les secondes, les millisecondes, etc., via l'objet de durée.
      • Utilisation de la classe ChronoUnit : vous pouvez spécifier l'unité de calcul du décalage horaire, comme l'année, le mois, le jour, l'heure, etc. Par exemple : jours longs = ChronoUnit.DAYS.between(start, end);.

- 说一下session的生命周期吧。

  1. Création de séance
    • Temps de creation:Session est utilisé lorsque l'utilisateur accède pour la première fois au serveur et demande JSP, Servlet, etc.动态资源 créé quand.Accédez uniquement au HTML, aux images, etc.静态资源 Cela ne déclenchera pas la création de Session. Si nécessaire, vous pouvez forcer la génération de Session en appelant request.getSession(true).
    • emplacement de stockage: La session est stockée côté serveur, généralement dans la mémoire du serveur pour un accès rapide.
  2. Entretien des séances
    • Mettre à jour la dernière heure d'accès : tant que l'utilisateur continue d'accéder au serveur, le serveur mettra à jour la dernière heure d'accès de la session et maintiendra la session pour chaque demande, qu'il s'agisse de lire ou d'écrire la session. Cela indique que la session de l'utilisateur est dans un état « actif ».
    • caractère unique de la séance : Chaque utilisateur aura une session indépendante, identifiée de manière unique par l'ID de session. L'ID de session est généralement envoyé au client via un cookie (nommé JSESSIONID) afin que le serveur puisse identifier les différentes sessions utilisateur.
  3. Destruction de session
    • Détruit automatiquement : Lorsque le cycle de vie de la session expire (c'est-à-dire qu'il n'y a aucune activité pendant une longue période), le serveur l'efface automatiquement de la mémoire. Cette durée est généralement configurable et la valeur par défaut est de 30 minutes dans Tomcat.
    • Destruction manuelle : Les développeurs peuvent détruire manuellement la session en appelant la méthode invalidate() de la session. Ceci est généralement utilisé pour des scénarios tels que la déconnexion et l'expiration du délai.
  4. Paramètres du cycle de vie de la session
    • Définir dans le servlet : définissez le délai d'expiration de la session en secondes en appelant la méthode session.setMaxInactiveInterval(int interval).
    • Défini dans web.xml : Dans le fichier web.xml de l'application web,通过