Maison  >  Article  >  développement back-end  >  À combien de ces 19 questions d’entretien C/C+ pouvez-vous répondre correctement ? - Article personnel Sifu

À combien de ces 19 questions d’entretien C/C+ pouvez-vous répondre correctement ? - Article personnel Sifu

php是最好的语言
php是最好的语言original
2018-07-26 18:07:031715parcourir

Quelle est la différence entre C et C++ ? Réponse : C++ ajoute des classes sur la base de C. C est un langage structuré et il se concentre sur les algorithmes et les structures de données. Les routines d'entretien pour les ingénieurs logiciels sont toutes les mêmes. Vous pourriez rencontrer les mêmes questions que vous avez posées cette fois-ci, la prochaine fois.

Question 1 : S'il vous plaît, dites-moi ce qu'est le C++ en langage simple ?

Réponse : C++ est un langage de programmation orienté objet développé sur la base du langage C et largement utilisé. C++ prend en charge plusieurs paradigmes de programmation : programmation orientée objet, programmation générique et programmation procédurale. Il possède un large éventail de domaines de programmation et est souvent utilisé dans le développement de systèmes, le développement de moteurs et d'autres domaines d'application. C'est l'un des langages de programmation les plus puissants utilisés par les programmeurs. Il prend en charge les classes : classes, encapsulation, surcharge et. d'autres fonctionnalités !

Question 2 : Quelle est la différence entre C et C++ ?

Réponse : C++ ajoute des classes sur la base de C. C est un langage structuré et il se concentre sur les algorithmes et les structures de données. La principale considération dans la conception d'un programme C est de savoir comment traiter l'entrée (ou les conditions environnementales) via un processus pour obtenir la sortie (ou mettre en œuvre un contrôle de processus (transaction)). Pour C++, la principale considération est de savoir comment construire un objet). modèle afin que ce modèle puisse s'adapter au domaine de problème correspondant, de sorte que le contrôle de sortie ou de processus (transaction) puisse être obtenu en obtenant les informations d'état de l'objet. L'éditeur recommande une jupe d'apprentissage pour l'apprentissage du langage C/C++ [627, 012, 464]. Que vous soyez expert ou novice, que vous souhaitiez changer de carrière ou que vous souhaitiez rejoindre l'industrie, vous pouvez vous renseigner et apprendre ensemble ! Il y a des outils de développement à l'intérieur de la jupe, et de nombreuses informations utiles et techniques sont partagées !

Question 3 : Qu'est-ce que l'orientation objet (POO) ?

Réponse : L'orientation objet est une méthode et une idée permettant de comprendre et d'abstraire le monde réel. C'est une idée qui résout des problèmes en convertissant des éléments de demande en objets.

Question 4 : Qu'est-ce que le polymorphisme ?

Réponse : Le polymorphisme signifie que la même opération, fonction ou processus peut être appliqué à plusieurs types d'objets et obtenir des résultats différents. Différents objets peuvent produire des résultats différents lorsqu'ils reçoivent le même message. Ce phénomène est appelé polymorphisme.

Question 5 : Comprenez-vous les modèles de conception ? Pouvez-vous me donner un exemple simple ?

Réponse : Le modèle de conception est un ensemble de résumés classifiés et catalogués de l'expérience de conception de code qui est utilisé à plusieurs reprises, connu de la plupart des gens.

Par exemple, le modèle singleton garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global pour y accéder.

S'applique à : lorsque la classe ne peut avoir qu'une seule instance et que le client peut y accéder à partir d'un point d'accès bien connu ; lorsque cette instance unique doit être extensible via une sous-classe et que le client ne doit pas avoir besoin de modifier le code Lorsqu'une instance étendue peut être utilisée.

Par exemple, le modèle d'usine définit une interface pour créer des objets et permet aux sous-classes de décider quelle classe instancier. La méthode Factory entraîne le report de l’instanciation d’une classe vers ses sous-classes.

S'applique à : lorsqu'une classe ne connaît pas la classe de l'objet qu'elle doit créer ; lorsqu'une classe souhaite que sa sous-classe précise l'objet qu'elle crée ; lorsque la classe créera l'objet ; lorsque la responsabilité est déléguée à un ; de plusieurs sous-classes d'assistance et vous souhaitez localiser les informations sur la sous-classe d'assistance qui est le délégué.

Question 6 : Avez-vous déjà utilisé la bibliothèque STL ? Quels sont les conteneurs STL courants ? Quels algorithmes ont été utilisés ?

Réponse : STL comprend deux parties : le conteneur et l'algorithme. (Il est également important de combiner les deux itérateurs)

Conteneur, où les données sont stockées. Tels qu'un tableau, etc.

En STL, les conteneurs sont divisés en deux catégories : les conteneurs séquentiels et les conteneurs associatifs.

Conteneur séquentiel, les éléments qu'il contient ne sont pas forcément dans l'ordre, mais ils peuvent tous être triés. Par exemple : vecteur, liste, deque, pile, file d'attente, tas, priorité_queue, slist

Conteneur associatif, la structure interne est fondamentalement un arbre binaire équilibré. Ce qu'on appelle l'association signifie que chaque élément a une valeur clé et une valeur réelle, et que les éléments sont stockés selon certaines règles. Tels que : RB-tree, set, map, multiset, multimap, hashtable, hash_set, hash_map, hash_multiset, hash_multimap.

Choisissez-en un ci-dessous comme explication.

vecteur : C'est un conteneur qui alloue dynamiquement de l'espace de stockage. Différent du tableau en C++, l'espace alloué par le tableau est statique et ne peut pas être modifié après l'allocation, tandis que le vecteur réaffectera (étendra) automatiquement l'espace.

set : Ses éléments internes seront automatiquement triés en fonction de la valeur clé de l'élément. Différent de la carte, ses valeurs clés sont des valeurs réelles, et la carte peut avoir différentes valeurs clés et valeurs réelles en même temps.

Algorithmes tels que le tri, la copie... et algorithmes spécifiques aux conteneurs. Ce point n'a pas besoin d'être trop introduit, cela dépend principalement du contenu de l'itérateur ci-dessous.

Iterator est l'essence même de STL. Nous le décrivons ainsi : Iterator fournit un moyen d'accéder en séquence aux différents éléments contenus dans un conteneur sans exposer la structure interne du conteneur. Il sépare le conteneur et l'algorithme afin qu'ils puissent être conçus indépendamment.

Question 7 : La structure des données sera-t-elle connue ? Quels sont les principaux utilisés dans le processus de développement de projet ?

Réponse : Les tableaux, les listes chaînées et les arbres (moins souvent) sont principalement utilisés dans les structures de données, et les idées de piles et de files d'attente sont également utilisées.

Question 8 : Connaissez-vous const ? Expliquez sa fonction.

Réponse :

1.const modifie les variables membres de la classe, indiquant les constantes membres et ne peut pas être modifié.

2. La fonction const modifiée promet de ne pas modifier les données membres de la classe au sein de cette fonction, et de ne pas appeler d'autres fonctions non membres const.

3. Si const constitue une surcharge de fonctions, les objets const ne peuvent appeler que des fonctions const, et les objets non const appellent d'abord des fonctions non const.

4.les fonctions const ne peuvent appeler que des fonctions const. Les fonctions non const peuvent appeler des fonctions const.

5. Les fonctions membres Const définies en dehors de la classe nécessitent des modificateurs const à la fois au niveau de la définition et de la déclaration.

Question 9 : Quand les variables statiques de la classe sont-elles initialisées ? Quand les variables statiques d’une fonction sont-elles initialisées ?

Réponse : Les variables membres statiques de la classe existent déjà et la mémoire est allouée avant que la classe ne soit instanciée. Les variables statiques d'une fonction sont initialisées lors de l'exécution de cette fonction.

Question 10 : Quelle est la différence entre tas et pile ? Cycle de vie du tas et de la pile ?

Réponse :

1. Différences dans l'allocation de l'espace de pile :

1. Pile (système d'exploitation) : automatiquement allouée et libérée par le système d'exploitation pour stocker les valeurs des paramètres de fonction ​et la valeur des variables locales, etc. Sa méthode de fonctionnement est similaire à la pile dans la structure des données ;

2. Heap (système d'exploitation) : Il est généralement alloué et libéré par le programmeur. Si le programmeur ne le libère pas, il peut être recyclé par. le système d'exploitation à la fin du programme. La méthode d'allocation est similaire dans la liste chaînée.

2. Différences dans les méthodes de mise en cache de la pile :

1. La pile utilise un cache de premier niveau. Elles se trouvent généralement dans l'espace de stockage lorsqu'elles sont appelées et sont libérées immédiatement après l'appel. terminé ;

2. Le tas est stocké dans le cache de deuxième niveau et son cycle de vie est déterminé par l'algorithme de récupération de place de la machine virtuelle (cela ne signifie pas qu'il peut être recyclé une fois qu'il devient un objet orphelin). Par conséquent, la vitesse d’appel de ces objets est relativement faible.

3. Différences dans les structures de données de pile :

Heap (structure de données) : Le tas peut être considéré comme un arbre, tel que :

Stack (données ; structure) ) : Une structure de données premier entré, dernier sorti.

Question 11 : Expliquer l'encapsulation, l'héritage et le polymorphisme ?

Réponse :

1. Encapsulation :

L'encapsulation est la première étape dans la réalisation d'une programmation orientée objet. L'encapsulation consiste à collecter des données ou des fonctions en unités. cours).

Le sens de l'encapsulation est de protéger ou d'empêcher que le code (les données) soit détruit par inadvertance par nos soins.

2. Héritage :

L'héritage permet principalement la réutilisation du code et permet de gagner du temps de développement.

Les sous-classes peuvent hériter de certaines choses de la classe parent.

3. Polymorphisme

Polymorphisme : La même opération agit sur différents objets et peut avoir des interprétations différentes et produire des résultats d'exécution différents. Au moment de l'exécution, vous pouvez appeler des méthodes dans une classe dérivée via un pointeur vers la classe de base.

Question 12 : Quelle est la différence entre les pointeurs et les références ?

Réponse :

  1. Un pointeur est une variable, mais cette variable stocke une adresse, pointant vers une unité de stockage en mémoire ; 🎜 >

  2. Les références n'ont pas besoin d'être déréférencées (*) lorsqu'elles sont utilisées, les pointeurs doivent être déréférencés

  3. Les références ne peuvent être initialisées qu'une seule fois lorsqu'elles sont définies ; , et sont immuables par la suite ; Les pointeurs sont variables

  4. Les références ne peuvent pas être nulles, les pointeurs ont const ; les pointeurs peuvent être nuls ;

  5. "sizeof reference" obtient la taille de la variable (objet) pointée, tandis que "sizeof pointer" obtient la taille du pointeur lui-même

  6. La signification de l'opération d'incrémentation (++) des pointeurs et des références est différente

  7. Les pointeurs peuvent avoir plusieurs niveaux, mais les références ne peuvent avoir qu'un seul niveau ; (int **p; légal et int &&a est illégal)

  8. 9 Du point de vue de l'allocation de mémoire : le programme alloue une zone mémoire pour les variables de pointeur, alors que les références n'ont pas besoin de le faire. allouer une zone mémoire.

    Question 13 : Qu'est-ce qu'une fuite mémoire ? De quelles méthodes disposez-vous face aux fuites de mémoire et aux dépassements de pointeur ? Quelles méthodes utilisez-vous habituellement pour éviter et réduire ce type d’erreurs ?
Réponse : L'espace ouvert dynamiquement à l'aide de la fonction d'allocation dynamique de stockage n'est pas libéré après utilisation. Par conséquent, l'unité mémoire est toujours occupée, ce qui constitue une fuite de mémoire.

N'oubliez pas la longueur du pointeur lorsque vous l'utilisez.

Vous devez vous assurer qu'il est libre lors de la mallocation.

Lors de l'attribution d'un pointeur, vous devez faire attention à savoir si le pointeur attribué doit être libéré.

Il est préférable ne pas utiliser de pointeurs de mémoire alloués dynamiquement.

Question 14 : Quels sont les algorithmes de tri couramment utilisés ? Décrivez brièvement les avantages et les inconvénients de plusieurs algorithmes de tri ?

Réponse : Sélectionner, bulle, rapide, **, Hill, fusionner, empiler, etc.

1. Tri rapide : C'est une amélioration du tri à bulles.

Avantages : rapide, moins de mouvements de données

Inconvénients : stabilité insuffisante

2. Fusion : tri diviser pour régner, un algorithme de tri stable, généralement utilisé pour l'ordre global. , mais une séquence ordonnée localement.

Avantages : Haute efficacité O(n), stable

Inconvénients : Cela prend plus de mémoire

Question 15 : Quelle est la différence entre new et malloc ?

Réponse :

1. malloc et free sont des fonctions de bibliothèque standard du langage C++/C, et new/delete sont des opérateurs de C++. Ils peuvent tous deux être utilisés pour demander de la mémoire dynamique et libérer de la mémoire.

2. Pour les objets de types de données non internes, maloc/free ne peut pas à lui seul répondre aux exigences des objets dynamiques. L'objet doit exécuter automatiquement le constructeur lors de sa création et l'objet doit exécuter automatiquement le destructeur avant sa mort.

3. Puisque malloc/free est une fonction de bibliothèque plutôt qu'un opérateur, elle ne relève pas de l'autorité de contrôle du compilateur. La tâche d'exécution des constructeurs et des destructeurs ne peut pas être imposée à malloc/free. Par conséquent, le langage C++ a besoin d'un opérateur new capable d'effectuer le travail d'allocation dynamique de mémoire et d'initialisation, ainsi que d'un opérateur delete capable d'effectuer le travail de nettoyage et de libération de mémoire. Notez que new/delete ne sont pas des fonctions de bibliothèque.

4. Les programmes C++ appellent souvent des fonctions C, mais les programmes C ne peuvent utiliser que malloc/free pour gérer la mémoire dynamique.

5. Nouveau peut être considéré comme l'exécution de malloc plus constructeur. Le pointeur de new transporte directement des informations de type. Malloc renvoie des pointeurs vides.

Question 16 : Quelle est la différence entre la communication TCP et UDP ? Qu’est-ce que l’IOCP ?

Réponse :

1.TCP est orienté connexion, UDP est sans connexion

2.TCP est garanti, la transmission UDP n'est pas garantie

3 . TCP est inefficace, UDP est très efficace

4.TCP est basé sur des flux, UDP est basé sur des paquets de données

5.TCP transmet des données importantes et UDP transmet des données sans importance

IOCP signifie I/O Completion Port, qui se traduit en chinois par port de terminaison d'E/S.

IOCP est une API d'E/S asynchrone qui peut notifier efficacement les applications des événements d'E/S.

Contrairement à l'utilisation de select() ou d'autres méthodes asynchrones, un socket [socket] est associé à un port d'achèvement, puis les opérations Winsock normales peuvent continuer. Cependant, lorsqu'un événement se produit, le port de terminaison sera ajouté à une file d'attente par le système d'exploitation. L'application peut ensuite interroger la couche principale pour ce port d'achèvement.

Question 17 : Quelle est la différence entre les IO synchrones et les IO asynchrones ?

Réponse :

A. Synchronisation

La soi-disant synchronisation signifie que lors de l'émission d'un appel de fonction, l'appel ne reviendra pas tant que le résultat n'est pas obtenu.

Selon cette définition, en fait, la plupart des fonctions sont appelées de manière synchrone (comme sin isdigit, etc.).

Mais de manière générale, lorsque nous parlons de synchrone et d'asynchrone, nous faisons spécifiquement référence à des tâches qui nécessitent la coopération d'autres composants ou prennent un certain temps à réaliser.

L'exemple le plus courant est SendMessage.

Cette fonction envoie un message à une certaine fenêtre. Cette fonction ne revient que lorsque l'autre partie a traité le message.

Une fois le traitement terminé par l'autre partie, cette fonction renvoie la valeur renvoyée par la fonction de traitement des messages à l'appelant.

B. Asynchrone

Le concept d'asynchrone est relatif à la synchronisation.

Lorsqu'un appel de procédure asynchrone est émis, l'appelant n'obtiendra pas le résultat immédiatement.

Le composant qui gère réellement cet appel consiste à informer l'appelant via l'état et la notification une fois l'appel émis, ou à traiter l'appel via une fonction de rappel.

Question 18 : Expliquer les fonctions statiques et les variables statiques en C++ ?

Réponse :

(1) Les données membres statiques de la classe sont créées et initialisées au moment de la compilation : elles existent avant la création d'un objet de la classe, elles n'appartiennent à aucun objet et elles ne sont pas des variables membres de classe statiques. Elles appartiennent à l'objet. Il n'existe qu'une seule copie des données statiques membres d'une classe, qui est partagée par tous les objets de cette classe.

(2) Les fonctions membres statiques de classe appartiennent à la classe entière, pas à un certain objet, et sont partagées par tous les objets de la classe.

1. Les variables membres statiques réalisent le partage d'informations entre des objets similaires.

2. Les membres statiques sont stockés en dehors de la classe. Recherchez la taille de la classe, qui n'est pas incluse.

3. Le membre statique est une variable globale appartenant à la classe dans l'espace de noms et est stockée dans le segment rw de la zone de données.

4. Les membres statiques ne peuvent être initialisés qu'en dehors de la classe.

5. Il est accessible via le nom de la classe (également lorsqu'aucun objet n'est généré), ou via l'objet.

1. L'importance des fonctions membres statiques n'est pas de partager des informations et de communiquer des données, mais de gérer les données membres statiques et de terminer l'encapsulation des données membres statiques.

2. Les fonctions membres statiques ne peuvent accéder qu'aux données membres statiques. Raison : pour les fonctions membres non statiques, le pointeur this est transmis en tant que paramètre lors de l'appel. Les fonctions membres statiques appartiennent à des classes, pas à des objets, et n'ont pas ces pointeurs.

Question 19 : Parlez-moi de votre compréhension de la mémoire ?

Réponse :

1. Stack - automatiquement alloué et libéré par le compilateur

2. Heap - généralement alloué et libéré par le programmeur si le programmeur ne le libère pas. , à la fin du programme Peut être recyclé par le système d'exploitation

3. Zone globale (zone statique), les variables globales et les variables statiques sont stockées ensemble, les variables globales initialisées et les variables statiques sont dans la même zone, les variables globales non initialisées et non initialisé Les variables statiques initialisées se trouvent dans une autre zone adjacente. - Libération à la fin du programme

4 Il y a aussi une place spéciale pour les constantes. - Libéré à la fin du programme

Zone de code 5 programmes, qui stocke les codes binaires.

Les variables définies dans le corps de la fonction sont généralement sur la pile, et celles allouées par des fonctions telles que malloc, calloc, realloc, etc. qui allouent de la mémoire sont sur le tas. Les variables globales sont définies en dehors du corps de toutes les fonctions. Après avoir ajouté le modificateur statique, elles sont stockées dans la zone globale (zone statique), peu importe où elles se trouvent. Les variables statiques définies en dehors du corps de toutes les fonctions sont valides dans le fichier et. ne peut pas être externe à d'autres fichiers. Utiliser, statique défini dans le corps d'une fonction signifie qu'il n'est valable que dans le corps de la fonction. De plus, les chaînes telles que « adgfdf » dans la fonction sont stockées dans la zone constante.

Articles connexes :

Partage de 125 questions et réponses d'entretien de base en C#

Vidéos connexes :

Tutoriel vidéo détaillé sur les questions d'entretien qui balayent le lieu de travail PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn