Concours de recrutement d'un technicien de troisième grade - FSJES Oujda (Université Mohammed Premier) - Spécialité développement informatique - Épreuve d'informatique - Session du 15 octobre 2023
المباريات والتوظيف
تقني من الدرجة الثالثة - تطوير المعلوميات دورة 2023
نص الموضوع
### Université Mohammed Premier — Oujda — Faculté des Sciences Juridiques, Économiques et Sociales
## Concours de recrutement d'un technicien de troisième grade
**Spécialité :** Développement informatique — **Épreuve :** Informatique — **Session :** 15 octobre 2023 — **Durée :** 3h
---
## Exercice 1
1. Quelle est la différence entre un langage de programmation compilé et un langage interprété ? Donnez deux exemples pour chaque type de langage.
2. Quelle est la différence entre PHP et JavaScript ?
3. Quelle est la différence entre HTML, CSS et JavaScript ?
4. Quelle est la différence entre un serveur web et un serveur d'applications ? Donnez deux exemples pour chaque serveur.
5. Quelle est la différence entre HTTP et HTTPS ?
6. Citez trois risques de sécurité informatique et précisez les mesures à prendre.
## Exercice 2
Quel sera le résultat du code Java suivant :
```java
public class Test {
public static void main(String[] data) {
int x = 10;
int y = x++;
System.out.println("y = " + y);
System.out.println("x = " + x);
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 2; ++j)
System.out.print(i + "" + j);
}
}
```
## Exercice 3
Écrivez un programme Java ou C qui calcule la somme des nombres impairs de 1 à n, où n est un nombre entier saisi par l'utilisateur. L'entier saisi doit être supérieur à 1, sinon l'utilisateur doit saisir un nouvel entier.
## Exercice 4
Créez deux classes Java **Etudiant** et **GestionEtudiant** :
1. La classe Etudiant doit avoir les attributs nom, âge et moyenne.
2. La classe GestionEtudiant doit avoir des méthodes pour ajouter, afficher et rechercher des étudiants par le nom.
3. Testez les deux classes dans une méthode main().
## Exercice 5
Dans un serveur MySQL d'adresse IP 192.168.1.1, les informations concernant les étudiants de la faculté sont stockées dans la base de données **bdetudes**. Soit la table Etudiant :
```sql
-- Structure de la table `Etudiant`
CREATE TABLE `Etudiant` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(20) NOT NULL,
`prenom` varchar(20) NOT NULL,
`cne` varchar(20) NOT NULL,
`mot_de_passe` varchar(56) NOT NULL,
`date_inscription` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `cne` (`cne`)
);
```
1. Expliquez les lignes 1 à 11.
2. Donnez le code PHP qui permet de se connecter à la base de données.
3. Donnez la requête en PHP qui permet de récupérer les étudiants par ordre croissant.
4. Donnez le code PHP qui permet d'afficher les données récupérées de la question précédente.
5. Donnez le code PHP qui permet d'insérer des données dans la table Etudiant.
6. Donnez le code PHP qui permet de fermer la connexion à la base de données bdetudes.
7. C'est quoi l'injection SQL et décrivez comment l'éviter.
## Exercice 6
1. Parmi les adresses IP suivantes, donnez celles qui peuvent être affectées à des machines et qui soient routables (justifiez vos réponses) :
(a) 196.12.25.13 — (b) 127.0.0.1 — (c) 10.10.0.1 — (d) 15.10.20.23 — (e) 192.168.1.1 — (f) 192.168.1.256
2. Donnez la classe et le masque par défaut des adresses (a), (b) et (c).
3. Donnez la notation binaire de 127.0.0.1.
الحل المقترح والتعليل
⚠️ تنبيه: هذا الحل مولَّد بالذكاء الاصطناعي. قد يحتوي على أخطاء في الحساب أو الاستدلال. في حالة الشك، تحقّق من الدروس والمراجع المقترحة أدناه أو من أستاذك. لا تتحمل المنصة أي مسؤولية عن الأخطاء المحتملة، والحل مقترح للمراجعة والتعلّم فقط وليس تصحيحاً رسمياً.
ننصحك بمحاولة الحل بنفسك أولاً قبل قراءة الحل.
> Corrigé proposé pour la révision.
## Exercice 1
1. **Compilé :** le code source est traduit une fois pour toutes en code machine par un compilateur, puis exécuté (rapide) — C, C++, Go. **Interprété :** le code est lu et exécuté instruction par instruction par un interpréteur au moment de l'exécution (portable, plus lent) — PHP, Python, JavaScript. *(Java est hybride : compilé en bytecode puis exécuté par la JVM.)*
2. **PHP** : langage côté **serveur** (génère la page, accède aux bases de données). **JavaScript** : langage principalement côté **client** (exécuté par le navigateur, interactivité), aussi côté serveur avec Node.js.
3. **HTML** : structure et contenu de la page ; **CSS** : présentation (mise en forme, couleurs, mise en page) ; **JavaScript** : comportement dynamique (événements, manipulation du DOM, requêtes asynchrones).
4. **Serveur web** : sert des ressources HTTP (pages statiques, transmission au moteur PHP) — Apache, Nginx, IIS. **Serveur d'applications** : exécute la logique métier d'applications (transactions, composants, connexions aux bases) — Apache Tomcat, WildFly/JBoss, GlassFish, WebLogic.
5. **HTTP** transmet les données en clair (port 80) ; **HTTPS** = HTTP sécurisé par TLS (port 443) : chiffrement, intégrité et authentification du serveur par certificat.
6. Risques et mesures : **logiciels malveillants/rançongiciels** → antivirus, mises à jour, sauvegardes hors ligne ; **hameçonnage (phishing)** → sensibilisation, filtrage des mails, authentification à deux facteurs ; **injection SQL / XSS** → requêtes préparées, validation et échappement ; **accès non autorisés** → mots de passe forts, gestion des droits, pare-feu.
## Exercice 2
- `y = x++` affecte d'abord 10 à y puis incrémente x.
- Les boucles affichent i et j sans retour à la ligne : 00, 01, 10, 11, 20, 21.
Sortie :
```
y = 10
x = 11
000110112021
```
## Exercice 3 (Java)
```java
import java.util.Scanner;
public class SommeImpairs {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n;
do {
System.out.print("Entrez un entier n > 1 : ");
n = sc.nextInt();
} while (n <= 1);
int somme = 0;
for (int i = 1; i <= n; i += 2) {
somme += i;
}
System.out.println("Somme des impairs de 1 à " + n + " = " + somme);
sc.close();
}
}
```
## Exercice 4
```java
import java.util.ArrayList;
import java.util.List;
class Etudiant {
private String nom;
private int age;
private double moyenne;
public Etudiant(String nom, int age, double moyenne) {
this.nom = nom; this.age = age; this.moyenne = moyenne;
}
public String getNom() { return nom; }
@Override
public String toString() {
return nom + " (" + age + " ans) - moyenne : " + moyenne;
}
}
class GestionEtudiant {
private final List<Etudiant> etudiants = new ArrayList<>();
public void ajouter(Etudiant e) { etudiants.add(e); }
public void afficher() {
for (Etudiant e : etudiants) System.out.println(e);
}
public Etudiant rechercher(String nom) {
for (Etudiant e : etudiants)
if (e.getNom().equalsIgnoreCase(nom)) return e;
return null;
}
}
public class Main {
public static void main(String[] args) {
GestionEtudiant g = new GestionEtudiant();
g.ajouter(new Etudiant("Alami", 21, 14.5));
g.ajouter(new Etudiant("Bennani", 22, 12.75));
g.afficher();
Etudiant e = g.rechercher("Bennani");
System.out.println(e != null ? "Trouvé : " + e : "Introuvable");
}
}
```
## Exercice 5
1. **Explication :** ligne 1 commentaire ; ligne 2 création de la table `Etudiant` ; ligne 3 `id` entier auto-incrémenté obligatoire ; lignes 4-6 nom, prénom et CNE en chaînes de 20 caractères maximum, obligatoires ; ligne 7 mot de passe (56 caractères, prévu pour une empreinte/hachage) ; ligne 8 date et heure d'inscription ; ligne 9 `id` clé primaire ; ligne 10 contrainte d'unicité sur le CNE (deux étudiants ne peuvent avoir le même CNE) ; ligne 11 fin de l'instruction.
2. **Connexion (PDO) :**
```php
<?php
try {
$pdo = new PDO('mysql:host=192.168.1.1;dbname=bdetudes;charset=utf8mb4',
'utilisateur', 'motdepasse',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
} catch (PDOException $e) {
die('Erreur de connexion : ' . $e->getMessage());
}
```
3. **Requête :**
```php
$stmt = $pdo->query('SELECT id, nom, prenom, cne, date_inscription FROM Etudiant ORDER BY nom ASC, prenom ASC');
```
4. **Affichage :**
```php
echo '<table border="1"><tr><th>Nom</th><th>Prénom</th><th>CNE</th></tr>';
foreach ($stmt as $row) {
echo '<tr><td>' . htmlspecialchars($row['nom']) . '</td><td>'
. htmlspecialchars($row['prenom']) . '</td><td>'
. htmlspecialchars($row['cne']) . '</td></tr>';
}
echo '</table>';
```
5. **Insertion (requête préparée) :**
```php
$sql = 'INSERT INTO Etudiant (nom, prenom, cne, mot_de_passe, date_inscription)
VALUES (:nom, :prenom, :cne, :mdp, NOW())';
$ins = $pdo->prepare($sql);
$ins->execute([
':nom' => $_POST['nom'], ':prenom' => $_POST['prenom'], ':cne' => $_POST['cne'],
':mdp' => password_hash($_POST['mdp'], PASSWORD_DEFAULT),
]);
```
*(Avec `password_hash`, prévoir une colonne de 255 caractères.)*
6. **Fermeture :** `$pdo = null;` (avec MySQLi : `mysqli_close($conn);`).
7. **Injection SQL :** technique d'attaque consistant à insérer du code SQL dans une donnée saisie (ex. `' OR '1'='1`) pour modifier la requête (contourner une authentification, lire ou supprimer des données). **Prévention :** requêtes préparées avec paramètres liés, validation et typage des entrées, comptes de base de données à privilèges minimaux, gestion des erreurs sans affichage technique, pare-feu applicatif (WAF).
## Exercice 6
1. **Routables et affectables :** **(a) 196.12.25.13** (adresse publique de classe C) et **(d) 15.10.20.23** (publique de classe A).
- (b) 127.0.0.1 : adresse de bouclage (loopback), non affectable à une machine sur le réseau.
- (c) 10.10.0.1 et (e) 192.168.1.1 : adresses **privées** (RFC 1918), affectables en réseau local mais non routables sur Internet.
- (f) 192.168.1.256 : invalide (un octet ne dépasse pas 255).
2. (a) classe C, masque 255.255.255.0 ; (b) classe A (plage réservée au loopback), masque 255.0.0.0 ; (c) classe A, masque 255.0.0.0.
3. 127.0.0.1 = **01111111.00000000.00000000.00000001**.
🚩 وجدت خطأ؟ أبلغنا
الدروس اللازمة للإجابة والمراجع للتحقق
الدروس المقررة التي يجب مراجعتها للإجابة
- Langages de programmation et technologies du web
- Programmation Java (structures de contrôle, POO, collections)
- Bases de données MySQL et PHP (PDO)
- Sécurité des applications web
- Adressage IPv4
المفاهيم والقوانين الأساسية
- Compilation vs interprétation
- Post-incrémentation
- Classes, encapsulation, ArrayList
- Clé primaire, clé unique, AUTO_INCREMENT
- Requêtes préparées et injection SQL
- Adresses privées, loopback, classes A/B/C
المراجع الرسمية للتحقق من الحل
- Documentation Oracle Java (docs.oracle.com)
- Documentation PHP – PDO (php.net)
- OWASP Top 10 (owasp.org)
- RFC 1918 (adressage privé)
مصادر رسمية: men.gov.ma • enssup.gov.ma • emploi-public.ma
امتحانات مشابهة
- مباراة توظيف متصرفي المالية من الدرجة الثانية - وزارة الاقتصاد والمالية - 05 يوليوز 2026 - العلوم الاقتصادية والتدبيرية (ECO2) - أسئلة متعددة الاختيارات
- مباراة توظيف متصرفين من الدرجة الثانية - وزارة الأوقاف والشؤون الإسلامية - دورة شتنبر 2026 - المالية والمراقبة والتدقيق / المحاسبة والمراقبة والتدقيق
- مباراة توظيف التقنيين من الدرجة الثالثة - كلية الطب والصيدلة وطب الأسنان بفاس (جامعة سيدي محمد بن عبد الله) - دورة 12/07/2026 - الموضوع العام: التغيرات المناخية والجفاف
- مباراة توظيف تقني من الدرجة الثالثة - دورة 4 أكتوبر 2026 - الاختبار الكتابي الأول (موضوع عام: أزمة المياه / الجامعة والعدالة المجالية)
- Concours de recrutement des officiers de police et officiers de paix 2025 - DGSN - Sujet de dissertation (société civile et droits de l'homme / médias sociaux)
- Concours de recrutement d'un technicien 3e grade - Gestion des entreprises - Faculté de Médecine, de Pharmacie et de Médecine Dentaire de Fès (USMBA) - Session du 29/06/2025 - Épreuve de spécialité