J’ai un entretien demain en C++, posez vos questions
Le 10 janvier 2024 à 17:44:04 :
Le 10 janvier 2024 à 17:37:50 :
Le 10 janvier 2024 à 17:27:48 :
T’as farm Leetcode ?En tout depuis le début de mes révisions j'ai fait plus de 120 questions d'algo allant du ultra easy au hard que j'arrive pas trop. En moyenne je réussi du medium.
Tout ca pour gagner 2500 euros net
Le 10 janvier 2024 à 17:44:51 :
Le 10 janvier 2024 à 17:40:19 :
C'est quoi la différence entre std::shared_ptr, std::unique_ptr et std::weak_ptr ?Nouvelle façon de gérer la mémoire arrivée dans C++ 11. Ils gèrent l'allocation de ressource pour un objet.
shared_ptr : un ptr qui pointe vers une unique instance de l'objet. Il garde un compteur des références qui sont faite à cette objet. Lorsque le compteur tombe à zéro : delete l'objet et free la mémoire
unique_ptr : pareil qu'en haut mais s'assure que le compteur reste à 1. Il est utile pour std::move l'objet par exemple. (pas trop sur de cette def)
weak_ptr : pointe vers un obj mais n'augmente pas le compteur. Ca veut dire que dans la vie du prgm ca peut retourner un nullptr dans le cas ou l'objet referencé est delete.
Quelle est la différence principale d'usage entre les templates et l'héritage ? Dans quel cas utilises-tu l'un ou l'autre ?
Le 10 janvier 2024 à 17:52:20 :
Comment tu gères les erreurs générées par ton code ?
Question ouverte c'est fait exprès
Assumant qu'il n'y pas d'erreur au compile-time mais qu'on parle uniquement du run-time:
Je m'assure que les fonctions throw bien les exceptions qu elle doivent throw + que les wrapper try catch celle qu elles doivent try catch. Trivial.
Pour ce qui est de la gestion finale, il s'agit plus du projet en lui même. S'il existe une GUI pour un utilisateur non dev => Il faut une erreur user friendly qui s'affiche à l'utilisateur + des informations pour faciliter le support. Et qui soit bien catch dans la gui.
En outre j'imagine qu'il existe un logger. Donc je log tout ce qu'il me semble utile.
Aussi, eviter les erreurs silencieuses au maximum.
Le 10 janvier 2024 à 17:56:48 Neguev1 a écrit :
Le 10 janvier 2024 à 17:52:20 :
Comment tu gères les erreurs générées par ton code ?
Question ouverte c'est fait exprèsAssumant qu'il n'y pas d'erreur au compile-time mais qu'on parle uniquement du run-time:
Je m'assure que les fonctions throw bien les exceptions qu elle doivent throw + que les wrapper try catch celle qu elles doivent try catch. Trivial.
Pour ce qui est de la gestion finale, il s'agit plus du projet en lui même. S'il existe une GUI pour un utilisateur non dev => Il faut une erreur user friendly qui s'affiche à l'utilisateur + des informations pour faciliter le support. Et qui soit bien catch dans la gui.
En outre j'imagine qu'il existe un logger. Donc je log tout ce qu'il me semble utile.Aussi, eviter les erreurs silencieuses au maximum.
Le 10 janvier 2024 à 17:54:04 :
Le 10 janvier 2024 à 17:44:51 :
Le 10 janvier 2024 à 17:40:19 :
C'est quoi la différence entre std::shared_ptr, std::unique_ptr et std::weak_ptr ?Nouvelle façon de gérer la mémoire arrivée dans C++ 11. Ils gèrent l'allocation de ressource pour un objet.
shared_ptr : un ptr qui pointe vers une unique instance de l'objet. Il garde un compteur des références qui sont faite à cette objet. Lorsque le compteur tombe à zéro : delete l'objet et free la mémoire
unique_ptr : pareil qu'en haut mais s'assure que le compteur reste à 1. Il est utile pour std::move l'objet par exemple. (pas trop sur de cette def)
weak_ptr : pointe vers un obj mais n'augmente pas le compteur. Ca veut dire que dans la vie du prgm ca peut retourner un nullptr dans le cas ou l'objet referencé est delete.
Quelle est la différence principale d'usage entre les templates et l'héritage ? Dans quel cas utilises-tu l'un ou l'autre ?
C'est plutôt correct ce que j'ai répondu sur les smart ptr ?
Comme ça je ne sais pas mais je vais tenter d'y répondre.
Pour les templates, on crée une fonction/un object générique qui répond à un besoin pouvant être étendu sans se préoccuper du type. Par example un vector, qu'il s'agisse de string ou de int, la logique même de l'objet ne dépend pas du contenu mais du contenant. exemple : Ajouter ou retirer un string = ajouter ou retirer un int
Pour ce qui est de l'héritage je vois ca comme une abstraction et une factorisation de la logique :
Abstraction : J'utilise des interfaces qui seront utilisés par d'autres bouts de code sans se préoccuper des classes qu'il l'implémente
Ex : L'interface MAGASIN déclare une fonction vendre() => le client s'en fou comment vendre est implémenter et par quel type exactement de magasin
Héritage: POO aussi.. on factorise des fct et on les réimplémente si nécessaire pour les fonctions qui hérite d'une classe / classe abstraite
Le 10 janvier 2024 à 17:58:27 :
Le 10 janvier 2024 à 17:56:48 Neguev1 a écrit :
Le 10 janvier 2024 à 17:52:20 :
Comment tu gères les erreurs générées par ton code ?
Question ouverte c'est fait exprèsAssumant qu'il n'y pas d'erreur au compile-time mais qu'on parle uniquement du run-time:
Je m'assure que les fonctions throw bien les exceptions qu elle doivent throw + que les wrapper try catch celle qu elles doivent try catch. Trivial.
Pour ce qui est de la gestion finale, il s'agit plus du projet en lui même. S'il existe une GUI pour un utilisateur non dev => Il faut une erreur user friendly qui s'affiche à l'utilisateur + des informations pour faciliter le support. Et qui soit bien catch dans la gui.
En outre j'imagine qu'il existe un logger. Donc je log tout ce qu'il me semble utile.Aussi, eviter les erreurs silencieuses au maximum.
Le 10 janvier 2024 à 17:55:15 :
Tu saurais expliquer le fonctionnement d'un pointeur ?
J'avoue que ça a toujours été flou pour moi mais je le vois comme ca:
Un object quelconque, s'il existe ou s'il est instancié, possède un emplacement physique dans la mémoire. Le pointeur est une référence à cet objet dans la mémoire. L'objet possède une adresse dans la mémoire.
Le pointer * référence l'objet
L'adresse& est l'adresse mémoire de l'objet
On accède à l'objet ciblé par le pointer en utilisant **
Il est utile de manipuler les objets avec les pointeurs, pour plein de raisons. l'une d'entre elle est de ne pas créer de copie de l'objet. On peut modifier aisément l'objet sans créer de copie.
Pas sûr sûr de cette définition.
Des experts du C++ pour poser des questions de mémoire / threads / opti ?
La question template héritage j'ai bien aimé
Le 10 janvier 2024 à 18:16:51 :
Peux-tu nous expliquer la différence entre la pile et le tas ?
J'étais pas sûr des noms en français. Mais Pile = stack et tas = heap si c'est bien ça:
Stack : LIFO. O(1) pour ajouter/retirer/accéder à un élement. O(N) pour chercher un élément
Elements contigu dans la mémoire.
Head : pas sûr... je sais que les priority_queue sont des heaps. Donc je dirais pas les mêms complexite vu qu'il faut au faire des comparaison à chaque ajout/retrait.
Et je crois que dans la mémoire ce n'est pas contigu.
Je vais chercher sur google
Edit : beaucoup plus complexe niveau mémoire que je pensais. Mais yes c'est ajouté dans la mémoire un peu partout où ça peut l'être. Je vais creuser. Merci chef!
Le 10 janvier 2024 à 18:17:17 :
Quel architecture pour un jeu de blackjack ?
Je dois donner tout le design d'un jeu de black jack ?
Pour faire court.
j'aurai trois classes principales : Jeu, Carte, Joueur
Chaque Joueur à un stack d'argent (attribut) (La banque fait partie des joueurs, peut être une classe fille)
Chaque Jeu possède X Joueur(s). Comptabilisants les points de chacun
Le Jeu possède une fonction main() qui lance une partie.
Dans chaque partie on jette des cartes.
On calcule les points
Les joueurs ont des actions
Le Jeu s'occupe de calculer les résultats de chaque main par rapport à la banque.
En y réfléchissant, la classe Carte ne sert à rien. Je mettrais un ENUM ou un Struct au pire.
Le 10 janvier 2024 à 18:20:47 :
Le 10 janvier 2024 à 18:16:51 :
Peux-tu nous expliquer la différence entre la pile et le tas ?J'étais pas sûr des noms en français. Mais Pile = stack et tas = heap si c'est bien ça:
Stack : LIFO. O(1) pour ajouter/retirer/accéder à un élement. O(N) pour chercher un élément
Elements contigu dans la mémoire.Head : pas sûr... je sais que les priority_queue sont des heaps. Donc je dirais pas les mêms complexite vu qu'il faut au faire des comparaison à chaque ajout/retrait.
Et je crois que dans la mémoire ce n'est pas contigu.Je vais chercher sur google
Edit : beaucoup plus complexe niveau mémoire que je pensais. Mais yes c'est ajouté dans la mémoire un peu partout où ça peut l'être. Je vais creuser. Merci chef!
C'est très important de bien comprendre la gestion de la mémoire dans les langages système. La pile et le tas sont des notions élémentaires.
Le 10 janvier 2024 à 18:26:37 :
Pourrais tu nous expliquer ce qu'est un leak de mémoire et ce qu'elle produit ?
Un leak de mémoire, traduit littéralement est une fuite de mémoire. Certains objets instanciés restent present dans la mémoire malgré leur inutilité dans le cours actuel du programme. Par example :
Un objet temporaire créé dans une fonction, n'est pas détruit. Pour un "ça va" si c'est des milliers...
Sans mémoire le programme ne peut plus créer de nouveau objet, et va donc attendre que les précédents objets soient delete. Dans un langage avec un garbage collector (Java, Python) cela va utiliser du CPU et va freezeAll sur les threads pour investiguer les objets inutilisés. En C++ ce n'est pas le cas, donc petit à petit le programme va planter car la mémoire sera pleine.
pas sûr non plus. Je vais chercher pour le C++
Le 10 janvier 2024 à 18:18:55 :
ne te limite pas à la technique encore une fois ...
Tu as entièrement raison khey. Mais là c'est la technique qui me manque. J'ai jamais fait de C++ industriel et dans mes études c'était du C déguisé en C++...
Données du topic
- Auteur
- Neguev1
- Date de création
- 10 janvier 2024 à 17:26:23
- Nb. messages archivés
- 47
- Nb. messages JVC
- 47