انتقل إلى المحتوى الرئيسي

الفصل 8: "ما هو...؟" — أكثر 40 مفهومًا يُطلب في المقابلات

الهدف

يجمع هذا الفصل الأسئلة من نوع "ما هو DTO؟"، "ما هو MVC؟" — الأسئلة المتعلقة بالمفردات والمفاهيم التي يطرحها كل مُحاور أولاً. إذا لم تتمكن من مراجعة سوى فصل واحد، فهذا هو الفصل.


1. ما هو DTO (كائن نقل البيانات)؟​

DTO هو كائن بسيط يُستخدم لنقل البيانات بين طبقات التطبيق، بدون منطق الأعمال.

لماذا لا نستخدم الكيان مباشرة؟​

الكيانDTO
مرتبط بقاعدة البياناتمجرد حاوية بيانات
يحتوي على علاقات JPA (تحميل كسول)يحتوي فقط على الحقول الضرورية
يمكن أن يكشف عن بيانات حساسة (كلمة المرور، الدور)نختار بالضبط ما نكشفه
تغيير قاعدة البيانات = تغيير الـ APIAPI مستقل عن قاعدة البيانات

مثال عملي​

// الكيان (مرتبط بقاعدة البيانات)
@Entity
public class User {
@Id @GeneratedValue
private Long id;
private String name;
private String email;
private String password; // ← لا يجب أن يُكشف أبدًا!
private String role;

@OneToMany(mappedBy = "user")
private List<Order> orders; // ← تحميل كسول، قد يسبب N+1
}

// DTO (ما يستلمه العميل)
public record UserDTO(
Long id,
String name,
String email
// لا كلمة مرور، لا دور، لا طلبات
) {}

// التحويل في الخدمة
@Service
public class UserService {
public UserDTO toDto(User user) {
return new UserDTO(user.getId(), user.getName(), user.getEmail());
}
}
جملة المقابلة

"A DTO is a simple object used to transfer data between layers. I use DTOs to avoid exposing JPA entities in the API — this prevents leaking sensitive fields like passwords and avoids lazy-loading issues."


2. ما هو MVC (نموذج-عرض-تحكم)؟​

نمط معماري يفصل التطبيق إلى 3 مسؤوليات:

المكونالدورفي Spring Boot
النموذجالبيانات ومنطق الأعمالالكيان، الخدمة، المستودع
العرضالعرض (ما يراه المستخدم)JSON (API REST) أو Thymeleaf (HTML)
التحكمالقائد الذي يستقبل الطلبات وينسق@Controller أو @RestController

في Spring Boot REST، "العرض" هو JSON​

@RestController   // التحكم
@RequestMapping("/api/users")
public class UserController {

@GetMapping("/{id}")
public UserDTO getUser(@PathVariable Long id) {
return userService.findById(id); // النموذج → محول إلى JSON (العرض)
}
}
جملة المقابلة

"MVC separates the application into Model (data/logic), View (presentation), and Controller (request handling). In a REST API, the View is the JSON response automatically serialized by Jackson."


3. ما هي API REST؟​

API = واجهة برمجة التطبيقات (واجهة لتواصل برنامجين)

REST = نقل الحالة التمثيلية (نمط معماري لـ APIs الويب)

القواعد الستة لـ REST​

القاعدةالمعنى
عميل-خادمالعميل والخادم منفصلان
بدون حالة (Stateless)كل طلب يحتوي على كل المعلومات اللازمة
ذاكرة مؤقتةيمكن تخزين الاستجابات مؤقتًا
واجهة موحدةURLs متسقة، طرق HTTP قياسية
نظام متعدد الطبقاتالعميل لا يعرف إذا كان يتحدث إلى الخادم النهائي
كود عند الطلب (اختياري)يمكن للخادم إرسال كود قابل للتنفيذ

طرق HTTP​

الطريقةالعملمثالكود العودة
GETقراءةGET /api/users/1200 OK
POSTإنشاءPOST /api/users201 Created
PUTاستبدال بالكاملPUT /api/users/1200 OK
PATCHتعديل جزئيPATCH /api/users/1200 OK
DELETEحذفDELETE /api/users/1204 No Content
جملة المقابلة

"REST is an architectural style for web APIs. It uses HTTP methods (GET, POST, PUT, DELETE) to perform CRUD operations on resources identified by URLs. It's stateless — each request is independent."


4. ما هو CRUD؟​

العمليات الأساسية الأربعة على البيانات:

الحرفالعمليةSQLHTTPSpring Data
CإنشاءINSERTPOSTsave()
RقراءةSELECTGETfindById(), findAll()
UتحديثUPDATEPUT/PATCHsave()
DحذفDELETEDELETEdeleteById()

5. ما هو POJO؟​

POJO = كائن جافا قديم بسيط

كائن جافا بسيط، بدون أي اعتماد على إطار عمل:

// هذا POJO — مجرد حقول، getters، setters
public class User {
private String name;
private String email;

public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}

Java Bean هو POJO يتبع الاتفاقيات: مُنشئ بدون معلمات، getters/setters، قابل للتسلسل.

Spring Bean هو كائن يُدار بواسطة حاوية Spring (يمكن أن يكون POJO معنون بـ @Component, @Service, إلخ).


6. ما هو Bean في Spring؟​

كائن يُنشأ ويُدار بواسطة حاوية Spring (ApplicationContext).

// هذا هو Bean في Spring — Spring ينشئه ويديره
@Service
public class UserService {
// Spring ينشئه تلقائيًا عند بدء التشغيل
// Spring يحقنه حيثما كان ضروريًا
// Spring يدير دورة حياته
}

// هذا ليس Bean — يُنشأ يدويًا
UserService service = new UserService();

كيف تُنشئ Bean؟​

الطريقةالمثال
تعليقات توضيحية نمطية@Component, @Service, @Repository, @Controller
@Bean في @Configurationطريقة تُعيد كائنًا
@Importاستيراد فئة تكوين
جملة المقابلة

"A Spring Bean is an object managed by the Spring IoC container. Spring creates it, injects its dependencies, and manages its lifecycle. By default, beans are singletons."


7. ما هو IoC (عكس التحكم)؟​

بدون IoC: الكود ينشئ اعتماده الخاص.

مع IoC: الحاوية تنشئ الاعتمادات وتوفرها للكود.

// بدون IoC — الكود يتحكم في الإنشاء
public class OrderService {
private UserRepository repo = new UserRepository(); // ينشئ بنفسه
private EmailService email = new EmailService(); // ينشئ بنفسه
}

// مع IoC — Spring يتحكم في الإنشاء
@Service
public class OrderService {
private final UserRepository repo; // يوفره Spring
private final EmailService email; // يوفره Spring

public OrderService(UserRepository repo, EmailService email) {
this.repo = repo; // يُحقن بواسطة Spring
this.email = email; // يُحقن بواسطة Spring
}
}

حقن الاعتمادات (DI) هو الآلية الملموسة التي تنفذ IoC.


8. ما هو ORM و JPA و Hibernate؟​

المصطلحالتعريفالتشبيه
ORMObject-Relational Mapping — تقنية تربط كائنات جافا بالجداول SQLالمترجم بين جافا و SQL
JPAJakarta Persistence API — المواصفة (الواجهة) لـ ORM في جافاالعقد / المعيار
Hibernateالتنفيذ الأكثر شيوعًا لـ JPAالبرنامج الذي يقوم بالعمل
JPA (المواصفة)    →  Hibernate (التنفيذ)
↓ ↓
"هكذا يجب أن يعمل" "هذا هو الكود الذي
يجعله يعمل"
// تعليقات JPA (المعيار)
@Entity // JPA يقول: "هذه الفئة هي كيان"
@Table(name = "users") // JPA يقول: "مرتبط بالجدول users"
public class User {
@Id // JPA يقول: "هذا هو المفتاح الأساسي"
@GeneratedValue // JPA يقول: "يزيد تلقائيًا"
private Long id;

@Column(name = "full_name") // JPA يقول: "مرتبط بهذا العمود"
private String name;
}

// Hibernate يقوم بالعمل خلف الكواليس: يولد استعلامات SQL,
// يدير الذاكرة المؤقتة، التحميل الكسول، المعاملات...
جملة المقابلة

"JPA is the specification that defines how Java objects map to database tables. Hibernate is the most popular implementation of JPA. I use JPA annotations so my code isn't tied to Hibernate specifically."


9. ما هو Maven؟​

أداة إدارة البناء والاعتمادات لمشاريع جافا.

الوظيفةالوصف
الاعتماداتتحميل المكتبات تلقائيًا (من Maven Central)
البناءتجميع، اختبار، تعبئة التطبيق (.jar)
دورة الحياةmvn clean → mvn compile → mvn test → mvn package
pom.xmlملف تكوين المشروع
<!-- pom.xml — قلب Maven -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

Maven vs Gradle: يستخدم Maven XML (مطول ولكنه قياسي)، يستخدم Gradle Groovy/Kotlin (أكثر اختصارًا ولكن منحنى التعلم).


10. ما هو Tomcat؟​

خادم ويب / حاوية سيرفلتات يقوم بتشغيل التطبيقات جافا.

Spring Boot يدمج Tomcat مباشرة:

java -jar monapp.jar
↓
┌──────────────────────┐
│ Spring Boot │
│ ┌──────────────────┐ │
│ │ Tomcat مدمج │ │ ← يستمع على المنفذ 8080
│ │ (embedded) │ │
│ └──────────────────┘ │
│ ┌──────────────────┐ │
│ │ الكود الخاص بك │ │
│ │ Controllers │ │
│ │ Services │ │
│ └──────────────────┘ │
└──────────────────────┘

لا حاجة لتثبيت Tomcat بشكل منفصل — Spring Boot يدمجه في الـ .jar.


11. ما هو JSON؟​

JSON = ترميز كائن جافا سكريبت — تنسيق بيانات خفيف وقابل للقراءة.

{
"id": 1,
"name": "Jean Dupont",
"email": "jean@mail.com",
"active": true,
"roles": ["USER", "ADMIN"],
"address": {
"city": "Montréal",
"postalCode": "H2X 1Y4"
}
}

في Spring Boot، Jackson يحول تلقائيًا كائنات جافا إلى JSON والعكس:

// جافا → JSON (تسلسل)
@GetMapping("/users/1")
public UserDTO getUser() {
return new UserDTO(1L, "Jean", "jean@mail.com");
// Jackson يحول تلقائيًا إلى JSON
}

// JSON → جافا (إزالة التسلسل)
@PostMapping("/users")
public void create(@RequestBody UserDTO dto) {
// Jackson يحول JSON من الجسم إلى كائن UserDTO
}

12. ما هو Postman و Swagger؟​

الأداةالدور
Postmanعميل HTTP لـ اختبار APIs REST يدويًا (إرسال GET، POST، إلخ)
Swagger / OpenAPIيولد تلقائيًا وثائق تفاعلية لـ API

Swagger في Spring Boot:

<!-- إضافة في pom.xml -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.3.0</version>
</dependency>

ثم، قم بالوصول إلى http://localhost:8080/swagger-ui.html لاختبار نقاط النهاية مباشرة من المتصفح.


13. ما هو Docker؟​

Docker ينشئ حاويات: بيئات معزولة تحتوي على تطبيقك + جميع اعتماداته.

بدون Docker:                مع Docker:
"يعمل على جهازي" "يعمل في كل مكان"

جهازي: حاوية:
├── Java 17 ├── Java 17
├── Maven 3.9 ├── Maven 3.9
├── PostgreSQL 15 ├── App.jar
└── تطبيقي └── (كل شيء مشمول)
↕ صراعات محتملة ↕ معزول وقابل للنقل
# Dockerfile لـ Spring Boot
FROM eclipse-temurin:17-jre
COPY target/app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

14. ما هو CI/CD؟​

المصطلحالمعنىمتى
CI — التكامل المستمرتجميع + اختبار تلقائي عند كل git pushعند كل commit
CD — التسليم المستمرنشر تلقائي في الإنتاجبعد الاختبارات

الأدوات: GitHub Actions، Jenkins، GitLab CI، CircleCI.


15. ما هو Git و GitHub؟​

المصطلحالتعريف
Gitأداة إدارة الإصدارات — يتتبع تاريخ التعديلات على الكود
GitHubمنصة ويب تستضيف مستودعات Git + التعاون
git add .              # تحضير التغييرات
git commit -m "fix" # تسجيل في التاريخ المحلي
git push origin main # إرسال إلى GitHub
git pull # استرجاع تغييرات الآخرين
git branch feature-x # إنشاء فرع
git merge feature-x # دمج فرع

16. ما هي العمارة الطبقية (Layered Architecture)؟​

القاعدة الذهبية​

كل طبقة تتواصل فقط مع الطبقة التي تحتها مباشرة.

✅ التحكم → الخدمة → المستودع → قاعدة البيانات
❌ التحكم → المستودع (أبدًا مباشرة!)
❌ التحكم → قاعدة البيانات (أبدًا مباشرة!)
جملة المقابلة

"I follow a layered architecture: Controller handles HTTP, Service contains business logic, Repository handles data access. Each layer only talks to the layer directly below it. This separation makes the code testable and maintainable."


17. ما هو Spring IoC Container (ApplicationContext)؟​

الحاوية التي تنشئ، تُكوّن وتجمع جميع beans Spring عند بدء التشغيل:

بدء تشغيل التطبيق:

1. @SpringBootApplication → يبدأ المسح
2. يجد @Component, @Service, @Repository, @Controller
3. ينشئ الحالات (beans)
4. يحل الاعتمادات (@Autowired)
5. يحقن الاعتمادات
6. يستدعي @PostConstruct
7. ══════ التطبيق جاهز ══════

18. ما هو @Autowired؟ ما هي حقن الاعتمادات؟​

3 طرق للحقن في Spring:

// ✅ 1. الحقن بواسطة المُنشئ (موصى به)
@Service
public class OrderService {
private final UserRepository userRepo;
private final EmailService emailService;

public OrderService(UserRepository userRepo, EmailService emailService) {
this.userRepo = userRepo;
this.emailService = emailService;
}
}

// ⚠️ 2. الحقن بواسطة Setter
@Service
public class OrderService {
private UserRepository userRepo;

@Autowired
public void setUserRepo(UserRepository userRepo) {
this.userRepo = userRepo;
}
}

// ❌ 3. الحقن بواسطة الحقل (غير موصى به)
@Service
public class OrderService {
@Autowired
private UserRepository userRepo;
}

لماذا المُنشئ هو الأفضل؟​

المعيارالمُنشئSetterالحقل
الثبات (final)✅❌❌
قابل للاختبار بدون Spring✅⚠️❌
الاعتمادات الإلزامية✅❌❌
يكتشف الاعتمادات الدائرية✅❌❌
جملة المقابلة

"I prefer constructor injection because it allows final fields (immutability), makes dependencies explicit, and works without Spring for testing. Since Spring 4.3, @Autowired is optional on a single constructor."


19. ما هو Record في جافا؟​

Record (جافا 16+) هو نوع خاص للكائنات الثابتة التي تحتوي فقط على بيانات:

// قبل (POJO كلاسيكي — 30 سطرًا)
public class UserDTO {
private final Long id;
private final String name;
private final String email;

public UserDTO(Long id, String name, String email) {
this.id = id; this.name = name; this.email = email;
}
public Long getId() { return id; }
public String getName() { return name; }
public String getEmail() { return email; }
// + equals(), hashCode(), toString()...
}

// بعد (Record — سطر واحد!)
public record UserDTO(Long id, String name, String email) {}
// يولد تلقائيًا: المُنشئ، getters، equals، hashCode، toString

مثالي لـ: DTOs، الاستعلامات، الاستجابات، الأحداث.


20. ما هو Lombok؟​

مكتبة تولد تلقائيًا الكود المتكرر (boilerplate) عند التجميع:

// بدون Lombok — 50+ سطرًا
public class User {
private Long id;
private String name;
private String email;
// المُنشئ، getters، setters، equals، hashCode، toString...
}

// مع Lombok — 5 أسطر
@Data // getters، setters، equals، hashCode، toString
@NoArgsConstructor // مُنشئ بدون معلمات
@AllArgsConstructor // مُنشئ مع جميع المعلمات
@Builder // نمط Builder
public class User {
private Long id;
private String name;
private String email;
}
تعليق Lombokيولد
@Getter / @SetterGetters و/أو setters
@ToStringtoString()
@EqualsAndHashCodeequals() و hashCode()
@Dataكل ما سبق
@Builderنمط Builder
@NoArgsConstructorمُنشئ فارغ
@AllArgsConstructorمُنشئ كامل
@Slf4jLogger log

21. ما هو ResponseEntity؟​

كائن Spring يمثل الاستجابة HTTP الكاملة (الحالة + الرؤوس + الجسم):

// بدون ResponseEntity — لا تحكم في الحالة
@GetMapping("/{id}")
public UserDTO getUser(@PathVariable Long id) {
return userService.findById(id); // دائمًا 200 OK
}

// مع ResponseEntity — تحكم كامل
@GetMapping("/{id}")
public ResponseEntity<UserDTO> getUser(@PathVariable Long id) {
return userService.findById(id)
.map(ResponseEntity::ok) // 200 OK
.orElse(ResponseEntity.notFound().build()); // 404 Not Found
}

@PostMapping
public ResponseEntity<UserDTO> create(@Valid @RequestBody CreateUserRequest req) {
UserDTO created = userService.create(req);
return ResponseEntity
.status(HttpStatus.CREATED) // 201 Created
.header("Location", "/api/users/" + created.id())
.body(created);
}

@DeleteMapping("/{id}")
public ResponseEntity<Void> delete(@PathVariable Long id) {
userService.delete(id);
return ResponseEntity.noContent().build(); // 204 No Content
}

22. ما هو @Valid وما هي التحقق من صحة Bean؟​

// DTO مع قيود التحقق
public record CreateUserRequest(
@NotBlank(message = "الاسم مطلوب")
String name,

@Email(message = "البريد الإلكتروني غير صالح")
@NotBlank
String email,

@Size(min = 8, message = "الحد الأدنى 8 أحرف")
String password,

@Min(value = 18, message = "الحد الأدنى 18 عامًا")
int age
) {}

// التحكم — @Valid يُفعّل التحقق
@PostMapping
public ResponseEntity<UserDTO> create(@Valid @RequestBody CreateUserRequest req) {
// إذا فشل التحقق → 400 Bad Request تلقائيًا
return ResponseEntity.status(HttpStatus.CREATED)
.body(userService.create(req));
}
التعليقيتحقق من
@NotNullليس null
@NotBlankليس null، ليس فارغًا، ليس مجرد مسافات
@NotEmptyليس null، ليس فارغًا
@Emailتنسيق بريد إلكتروني صالح
@Size(min, max)حجم بين min و max
@Min / @Maxقيمة رقمية min/max
@Pattern(regexp)يطابق تعبيرًا منتظمًا
@Past / @Futureتاريخ في الماضي/المستقبل

23. ما هو application.properties / application.yml؟​

ملف تكوين تطبيق Spring Boot:

# application.yml
server:
port: 8080

spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: admin
password: secret
jpa:
hibernate:
ddl-auto: update
show-sql: true

app:
jwt:
secret: mySecretKey
expiration: 86400000

نصل إلى القيم باستخدام @Value:

@Value("${app.jwt.secret}")
private String jwtSecret;

@Value("${server.port}")
private int port;

24. ما هو Spring Security؟​

إطار عمل الأمان في Spring للمصادقة والتفويض:

المفهومالسؤالالمثال
المصادقة"من أنت؟"تسجيل الدخول + كلمة المرور، JWT
التفويض"هل لديك الحق؟"دور USER، ADMIN

25. ما هو JWT (رمز ويب JSON)؟​

رمز يُرسل في كل طلب لإثبات هوية المستخدم:

JWT = HEADER.PAYLOAD.SIGNATURE

eyJhbGciOiJIUzI1NiJ9. ← الرأس (الخوارزمية)
eyJzdWIiOiJhbGljZSJ9. ← الحمولة (البيانات: المستخدم، الدور، الانتهاء)
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c ← التوقيع (التحقق)

التدفق​

1. POST /api/auth/login  { "email": "alice@mail.com", "password": "123" }
2. الخادم يتحقق → يولد JWT → يعيده إلى العميل
3. العميل يخزن JWT
4. GET /api/users Header: Authorization: Bearer eyJhbG...
5. الخادم يتحقق من JWT → يسمح بالطلب

26. ما هو CORS؟​

CORS = مشاركة الموارد عبر الأصل

عندما يستدعي الواجهة الأمامية الخاصة بك (localhost:3000) الخلفية الخاصة بك (localhost:8080)، المتصفح يحظر الطلب لأسباب أمنية. CORS يسمح بهذه الطلبات عبر الأصل.

@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST", "PUT", "DELETE");
}
};
}
}

27. ما هو Singleton في Spring؟​

افتراضيًا، كل bean في Spring هو Singleton — مثيل واحد مشترك في جميع أنحاء التطبيق:

@Service
public class UserService { ... } // مثيل واحد فقط، مشترك في كل مكان

// في كل مكان في التطبيق، هو نفس الكائن UserService
@RestController
class UserController {
private final UserService userService; // نفس المثيل
}

@RestController
class AdminController {
private final UserService userService; // نفس المثيل!
}

28. ما الفرق بين PUT و PATCH؟​

الطريقةالعملالمثال
PUTيستبدل كل الكائنإرسال جميع الحقول
PATCHيعدل جزئيًاإرسال فقط الحقول المراد تعديلها
// PUT — يستبدل كل شيء
@PutMapping("/{id}")
public UserDTO update(@PathVariable Long id, @RequestBody UserDTO dto) {
// جميع الحقول تُستبدل
}

// PATCH — يعدل جزئيًا
@PatchMapping("/{id}")
public UserDTO patch(@PathVariable Long id, @RequestBody Map<String, Object> updates) {
// فقط الحقول المرسلة تُعدل
}

29. ما هي Exception Custom؟​

// استثناء مخصص
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}

// الاستخدام
public User findById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("User not found: " + id));
}

// إدارة عامة
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException ex) {
return ResponseEntity.status(404)
.body(new ErrorResponse(404, ex.getMessage()));
}
}

public record ErrorResponse(int status, String message) {}

30. ما هو Spring Actuator؟​

نقاط نهاية مراقبة جاهزة للاستخدام:

# application.yml
management:
endpoints:
web:
exposure:
include: health, info, metrics
نقطة النهايةما تعرضه
/actuator/healthالتطبيق UP أو DOWN
/actuator/infoمعلومات عن التطبيق
/actuator/metricsمقاييس (الذاكرة، CPU، الطلبات)
/actuator/envمتغيرات البيئة

ملخص — 30 مفهومًا في جملة واحدة​

المفهومفي جملة واحدة
DTOكائن لنقل البيانات بدون كشف الكيان
MVCنموذج (بيانات)، عرض (عرض)، تحكم (طلبات)
API RESTواجهة ويب تستخدم GET/POST/PUT/DELETE على URLs
CRUDإنشاء، قراءة، تحديث، حذف
POJOكائن جافا بسيط بدون اعتماد إطار عمل
Beanكائن يُنشأ ويُدار بواسطة Spring
IoCSpring ينشئ الاعتمادات بدلاً من الكود
ORM/JPAربط كائنات جافا بالجداول SQL
Mavenإدارة الاعتمادات والبناء
Tomcatخادم ويب مدمج في Spring Boot
JSONتنسيق بيانات خفيف (مفتاح-قيمة)
Postmanعميل لاختبار APIs
Swaggerوثائق تلقائية لـ API
Dockerحاوية معزولة للتطبيق
CI/CDبناء + اختبار + نشر تلقائي
Gitإدارة إصدارات الكود المصدري
الطبقاتالتحكم → الخدمة → المستودع → قاعدة البيانات
@Autowiredحقن تلقائي للاعتمادات
Recordفئة ثابتة تُنشأ تلقائيًا (جافا 16+)
Lombokيولد getters/setters/equals تلقائيًا
ResponseEntityاستجابة HTTP كاملة (حالة + جسم)
@Validيُفعّل التحقق من المدخلات
application.ymlملف تكوين Spring Boot
Spring Securityمصادقة + تفويض
JWTرمز لتحديد هوية المستخدم
CORSالسماح بالطلبات عبر الأصل
Singletonمثيل واحد للـ bean في كل التطبيق
PUT vs PATCHPUT يستبدل كل شيء، PATCH يعدل جزئيًا
Exception Customاستثناء مخصص مع كود HTTP
Actuatorمراقبة ومقاييس التطبيق

⬅️ الفصل 7: مجموعات جافا | ⬅️ العودة إلى الوحدة 18