Questions auxquelles chaque bon développeur de firebase database / SQL doit pouvoir répondre

Je passais en revue les questions auxquelles chaque développeur .Net compétent devait pouvoir répondre et était très impressionné par le contenu et l’approche de cette question. Dans le même esprit, je pose cette question pour Database / SQL Developer.

Selon vous, à quelles questions un bon programmeur de firebase database / SQL devrait-il répondre?

Les différents types de JOIN:

  • JOINTURE INTERNE
  • GAUCHE ET DROITE EXTERIEUR
  • FULL JOIN
  • CROSS JOIN

Voir l’ explication visuelle des jointures par Jeff Atwood

  • Qu’est-ce qu’une clé? Une clé candidate? Une clé primaire? Une clé alternative? Une clé étrangère?
  • Qu’est-ce qu’un index et comment aide-t-il votre firebase database?

  • Quels sont les types de données disponibles et quand les utiliser?

Une réimpression de ma réponse ici , comme lignes direcsortingces générales pour les sujets.

Les bases


  1. SELECT colonnes d’une table
  2. Granulats Partie 1: COUNT , SUM , MAX / MIN
  3. Granulats Partie 2: DISTINCT , GROUP BY , HAVING

Intermédiaire


  1. JOIN s, syntaxe ANSI-89 et ANSI-92
  2. UNION vs UNION ALL
  3. Gestion NULL : traitement COALESCE & Native NULL
  4. Sous-requêtes: IN , EXISTS et vues intégrées
  5. Sous-requêtes: corrélées
  6. WITH syntaxe: factorisation de sous-requête / CTE
  7. Des vues

Sujets avancés


  • Fonctions, procédures stockées, packages
  • Données pivotantes: syntaxe CASE & PIVOT
  • Requêtes hiérarchiques
  • Curseurs: implicites et explicites
  • Déclencheurs
  • SQL dynamic
  • Vues matérialisées
  • Optimisation des requêtes: index
  • Optimisation des requêtes: expliquez les plans
  • Optimisation des requêtes: profilage
  • Modélisation des données: formes normales, 1 à 3
  • Modélisation des données: clés primaires et étrangères
  • Modélisation des données: contraintes de table
  • Modélisation des données: tables de liaison / corroll
  • Recherche en texte intégral
  • XML
  • Niveaux d’isolement
  • Diagrammes de relation d’entité (ERD), logique et physique
  • Transactions: COMMIT , ROLLBACK , Gestion des erreurs

Voici quelques-uns:

  • Qu’est-ce que la normalisation et pourquoi est-ce important?
  • Quelles sont les situations dans lesquelles vous dé-normaliser les données?
  • Qu’est-ce qu’une transaction et pourquoi est-ce important?
  • Qu’est-ce que l’intégrité référentielle et pourquoi est-ce important?
  • Quelles mesures prendre pour enquêter sur les rapports de performance de firebase database lente?

Qu’est-ce que l’injection SQL et comment l’empêchez-vous?

Qu’est-ce qu’un curseur et quand l’utiliseriez-vous (ou pas) et pourquoi?

J’ai placé cette réponse parce qu’Erwin Smout a posté une réponse qui était tellement fausse qu’elle a mis en évidence le besoin de le protéger spécifiquement.

Erwin a suggéré:

“Pourquoi chaque SELECT doit-il toujours inclure DISTINCT?”

Une question plus appropriée serait la suivante: si quelqu’un prétendait que: “chaque SELECT inclut toujours DISTINCT”; comment commenteriez-vous la réclamation?

Si un candidat est incapable de tirer parti de la réclamation, soit:

  • Ne comprends pas le problème avec la réclamation.
  • Manque de compétences en pensée critique.
  • Manque de capacité à communiquer des problèmes techniques.

Pour le compte rendu

  1. Supposons que votre requête soit correcte et ne renvoie aucun doublon, alors inclure DISTINCT oblige simplement le SGBDR à vérifier votre résultat (avantage nul et beaucoup de traitement supplémentaire).
  2. Supposons que votre requête est incorrecte et renvoie des doublons, alors inclure DISTINCT masque simplement le problème (là encore avec un traitement supplémentaire). Il serait préférable de détecter le problème et de corriger votre requête … cela fonctionnera plus rapidement.

Dans notre entreprise, au lieu de poser beaucoup de questions SQL auxquelles toute personne ayant une bonne mémoire peut répondre, nous avons créé un test SQL Developers. Le test est conçu pour que le candidat établisse un schéma solide avec des considérations de normalisation et d’intervention rapide, vérifie les contraintes, etc. Et que vous puissiez ensuite créer des requêtes pour produire des ensembles de résultats que nous recherchons. Ils créent tout cela contre une brève spécification de conception que nous leur donnons. Ils sont autorisés à le faire chez eux et prennent autant de temps qu’ils le souhaitent (dans des limites raisonnables).

Je donnerais une requête mal écrite et leur demanderais comment ils procéderaient pour l’optimiser.

Je voudrais poser des questions sur la théorie des ensembles. Si vous ne comprenez pas le fonctionnement en ensembles, vous ne pouvez pas interroger efficacement une firebase database relationnelle.

Je leur donnerais quelques exemples de curseurs et leur demanderais comment ils les réécriraient pour les rendre basés sur des ensembles.

Si le travail impliquait des importations et des exportations, je poserais des questions sur SSIS (ou sur d’autres outils impliqués dans cette opération par d’autres bases de données). Si cela impliquait d’écrire des rapports, je voudrais savoir qu’ils comprennent les agrégats et le regroupement (ainsi que Crystal Reports ou SSRS ou tout autre outil de rapport que vous utilisez).

Je voudrais demander la différence de résultats entre ces trois questions:

 select a.field1 , a.field2 , b.field3 from table1 a join table2 b on a.id = b.id where a.field5 = 'test' and b.field3 = 1 select a.field1 , a.field2 , b.field3 from table1 a left join table2 b on a.id = b.id where a.field5 = 'test' and b.field3 = 1 select a.field1 , a.field2 , b.field3 from table1 a left join table2 b on a.id = b.id and b.field3 = 1 where a.field5 = 'test' 

Quelle est la différence entre un index clusterisé et un index non clusterisé?

Une autre question que je poserais, non pour un serveur spécifique, serait:

Qu’est-ce qu’une impasse?

Savoir ne pas utiliser et POURQUOI ne pas utiliser:

 SELECT * 

Une question intéressante impliquerait la division relationnelle , ou comment exprimer une relation “pour tous”, qui exigerait des clauses not exists nestedes.

La question vient tout droit de ce lien .

Compte tenu des tableaux suivants, représentant les pilotes qui peuvent piloter des avions et des avions dans un hangar:

 create table PilotSkills ( pilot_name char(15) not null, plane_name char(15) not null ) create table Hangar ( plane_name char(15) not null ) 

Sélectionnez les noms des pilotes qui peuvent piloter chaque avion dans le hangar.

La réponse:

 select distinct pilot_name from PilotSkills as ps1 where not exists ( select * from hangar where not exists ( select * from PilotSkills as ps2 where ps1.pilot_name = ps2.pilot_name and ps2.plane_name = hangar.plane_name ) ) 

Ou …

Sélectionnez tous les utilisateurs de débordement de stack qui ont accepté les réponses aux questions marquées avec les 10 langages de programmation les plus populaires .

La réponse (possible) (en supposant une vue Accepted_Answers et une table Target_Language_Tags avec les balises souhaitées):

 select distinct u.user_name from Users as u join Accepted_Answers as a1 on u.user_id = a1.user_id where not exists ( select * from Target_Language_Tags t where not exists ( select * from Accepted_Answers as a2 join Questions as q on a2.question_id = q.question_id join Question_Tags as qt on qt.question_id = q.question_id where qt.tag_name = t.tag_name and a1.user_id = a2.user_id ) ) 

Pourquoi devrions-nous vous engager lorsque nous avons une application sophistiquée utilisant un ORM correctement optimisé et implémentant des systèmes de mise en cache tels que memcached ?

C’est une question sérieuse, ils devraient pouvoir justifier leur existence. Comme Jeff Atwood aime à dire “Le matériel est bon marché, les programmeurs sont chers ”

Comparez et opposez les différences entre une solution sql / rdbms et la solution nosql. Vous ne pouvez prétendre être un expert en technologie sans connaître ses forces et ses faiblesses par rapport à ses concurrents.

Donnez un exemple où la dénomralisation est préférable.

(J’aime celui-là parce que les gens sortent de l’université en cherchant à tout mettre en 3ème forme normale)

  • Quels types de bases de données vous ont causé, en tant que développeur, plus de difficultés à comprendre et à déboguer? Réponse attendue, à mon humble avis, expérience avec des problèmes utilisant différents types de date / heure et d’horodatage .

  • Quand est-il pratique d’utiliser des index bitmap?

Qu’est-ce que le explain plan fait et comment interpréter les résultats que vous en obtenez?

  • Comment détecter et résoudre les problèmes de concurrence dans la couche application?
  • Quels paradigmes de locking sont généralement disponibles et discutez de leurs avantages et inconvénients.
  • Discutez des valeurs NULL et des problèmes connexes.
  • Quel est le plus grand système de firebase database sur lequel vous avez travaillé en termes de: # tables, # rows, # users.

Également les questions spécifiques à la plate-forme (SQL Server) suivantes:

  • Discutez des colonnes IDENTITY.
  • Quel est le type de données d’horodatage utilisé?

L’application est utilisée 24 heures par jour. Votre fenêtre de maintenance / mise à jour est de 2 heures par mois, comment prévoyez-vous de minimiser les perturbations?

Presque tout est mentionné ici. J’aimerais partager une question qui m’a été posée par un cadre supérieur sur la firebase database. J’ai trouvé la question très intéressante et si vous y réfléchissez profondément, cela a beaucoup de sens.

La question était – Comment décririez-vous la firebase database à votre enfant de 5 ans?

  • Expliquez la différence entre une jointure interne et une jointure externe.
  • Qu’est-ce qu’un produit cartésien?
  • Expliquer la 3ème forme normale
  • Expliquer les contraintes possibles sur les tables
  • Expliquer les vues (et matérialisé)
  • Expliquer des séquences
  • Expliquer les déclencheurs
  • Quels sont les inconvénients de l’utilisation des instructions SQL adhoc / on-the-fly et que feriez-vous à la place?

Cette zone peut avoir un impact énorme sur les performances et la sécurité de la firebase database. Ne vous trompez pas et vous pourriez vous retrouver dans un monde de douleur.

  • Dans quelles situations utiliseriez-vous des instructions SQL adhoc / on-the-fly?

Parce qu’il y a toujours une exception à la règle 🙂

“Pourquoi chaque SELECT doit-il toujours inclure DISTINCT?”