המטרה של הראיון
לפי התיאור, זה נשמע כמו ראיון חצי טכני חצי אישי. כנראה לא רק רוצים לבדוק אם אתה יודע תחביר, אלא אם אתה מתאים לצוות תשתיות, יודע לעבוד בסביבה מורכבת, מתקשר ברור, לומד מהר, ולא נבהל ממערכות גדולות.
הצגה עצמית של דקה וחצי
נושאים טכניים שחובה לרענן
.NET / C#
- Dependency Injection
- async/await
- REST API
- Middleware
- Controllers מול Minimal APIs
- Configuration ו־Environment Variables
- Logging וטיפול בשגיאות
- LINQ ו־Entity Framework
- DTO מול Entity
- SOLID ושכבות בקוד
Angular
- Components
- Services
- Dependency Injection
- Routing
- Reactive Forms
- RxJS ו־Observables
- HttpClient
- Interceptors
- Guards
- Standalone Components ו־Signals
Docker / Kubernetes
- Image מול Container
- Dockerfile
- Multi-stage build
- Ports, volumes, env vars
- Pod, Deployment, Service
- ConfigMap ו־Secret
- Liveness ו־Readiness probes
- Rolling updates
SQL / Git / ענן
- JOINs
- Indexes
- Transactions
- N+1 problem
- Git branches ו־Pull Requests
- CI/CD
- Azure DevOps Pipelines
- GCP: GKE, Cloud Run, Cloud SQL, IAM
שאלות אישיות שסביר שישאלו
ספר על עצמך
למה אתה רוצה את המשרה?
מה החולשה שלך?
איך אתה מתמודד עם טכנולוגיה שלא עבדת איתה?
איך אתה עם נסיעות לדימונה/ירושלים?
אם אין ניסיון מלא בכל הטכנולוגיות
שאלות טובות לשאול אותם בסוף
- איך נראה יום עבודה טיפוסי בצוות?
- האם רוב העבודה היא פיתוח רכיבי תשתית חדשים או תחזוקה ושיפור של קיימים?
- כמה הצוות מעורב ב־Docker/Kubernetes ו־GCP בפועל, לעומת צוות DevOps נפרד?
- איך נראה תהליך ה־code review וה־deployment אצלכם?
- מה ייחשב הצלחה בתפקיד אחרי שלושה חודשים?
רשימת הכנה לערב לפני
- להסביר בעל פה מה זה Docker, Kubernetes ו־Microservices.
- להכין פרויקט אחד שאתה יכול להסביר: בעיה, פתרון, טכנולוגיות, אתגר ומה למדת.
- לרענן SQL: joins, indexes, transactions.
- לרענן async/await ו־Dependency Injection.
- להכין תשובה למה המשרה מעניינת אותך.
- להכין תשובה רגועה לגבי הנסיעות לדימונה וירושלים.
תוכן עניינים מהיר
1. .NET / ASP.NET Core
ב־ASP.NET Core בונים לרוב Web APIs. המבנה המקובל:
- Controller או Minimal API מקבל בקשה מהלקוח.
- Service מכיל לוגיקה עסקית.
- Repository או Data Access מדבר עם בסיס הנתונים.
- Data Transfer Object (DTO) משמשים להעברת מידע פנימה והחוצה.
- Dependency Injection מפחית coupling ומקל על בדיקות.
Dependency Injection
public UsersController(IUserService userService)
{
_userService = userService;
}
builder.Services.AddScoped<IUserService, UserService>();
| Lifetime | משמעות |
|---|---|
| Singleton | מופע אחד לכל חיי האפליקציה |
| Scoped | מופע אחד לכל request |
| Transient | מופע חדש בכל בקשה |
2. async / await
async/await משמש לפעולות שלא כדאי לחסום בהן thread, כמו DB, API, קבצים ורשת.
public async Task<UserDto> GetUserAsync(int id)
{
var user = await _db.Users.FindAsync(id);
return new UserDto(user.Id, user.Name);
}
.Result או .Wait() על פעולות async כי זה עלול לגרום לחסימות ובעיות.3. REST API
| פעולה | HTTP Verb |
|---|---|
| שליפה | GET |
| יצירה | POST |
| עדכון מלא | PUT |
| עדכון חלקי | PATCH |
| מחיקה | DELETE |
| Status Code | משמעות |
|---|---|
| 200 | הצלחה |
| 201 | נוצר בהצלחה |
| 400 | בקשה לא תקינה |
| 401 | לא מזוהה |
| 403 | אין הרשאה |
| 404 | לא נמצא |
| 500 | שגיאת שרת |
4. Middleware
Middleware הוא רכיב שיושב ב־pipeline של הבקשה. כל request עובר דרך שרשרת של רכיבים.
- Authentication
- Authorization
- Logging
- Exception handling
- CORS
- Routing
5. SOLID בקצרה
| עיקרון | הסבר פשוט |
|---|---|
| S | מחלקה צריכה אחריות אחת ברורה |
| O | להרחיב בלי לשבור קוד קיים |
| L | מחלקת בן צריכה להתאים לשימוש במקום האב |
| I | לא להכריח interface ענק |
| D | לעבוד מול abstraction ולא מול מימוש קשיח |
6. Angular
Angular הוא framework לבניית אפליקציות web. המבנה המרכזי:
- Component מציג UI.
- Template הוא ה־HTML של הקומפוננטה.
- Service מכיל לוגיקה משותפת או קריאות API.
- Router מנהל מעבר בין מסכים.
- HttpClient משמש לקריאות ל־backend.
- Interceptor משמש לדברים רוחביים כמו token או טיפול בשגיאות.
@Injectable({ providedIn: 'root' })
export class UsersService {
constructor(private http: HttpClient) {}
getUsers() {
return this.http.get<User[]>('/api/users');
}
}
7. RxJS / Observable
ב־Angular הרבה פעולות מחזירות Observable, במיוחד קריאות HTTP או streams של נתונים.
this.usersService.getUsers().subscribe(users => {
this.users = users;
});
| מושג | משמעות |
|---|---|
| subscribe | הרשמה לקבלת הערכים |
| pipe | שרשור פעולות |
| map | שינוי הערך |
| filter | סינון |
| switchMap | מעבר לקריאה חדשה וביטול הקודמת |
| catchError | טיפול בשגיאות |
8. Docker
| מושג | הסבר |
|---|---|
| Image | תבנית מוכנה להרצה |
| Container | מופע רץ של image |
| Dockerfile | הוראות לבניית image |
| Volume | אחסון חיצוני/קבוע |
| Port mapping | חיבור פורט פנימי לחיצוני |
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app
FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]
9. Kubernetes
Kubernetes מנהל containers בסביבה אמיתית: פריסה, scaling, health checks, networking ו־service discovery.
| מושג | הסבר |
|---|---|
| Pod | יחידת הריצה הקטנה ביותר |
| Deployment | מנהל Pods וגרסאות |
| Service | חושף Pods דרך endpoint יציב |
| ConfigMap | הגדרות לא סודיות |
| Secret | מידע רגיש כמו סיסמאות או tokens |
| Ingress | כניסה חיצונית לשירותים |
| Namespace | הפרדה לוגית בתוך cluster |
| Probe | למה משמש |
|---|---|
| Liveness | האם האפליקציה חיה או צריך להפעיל מחדש |
| Readiness | האם האפליקציה מוכנה לקבל traffic |
10. Microservices
במקום אפליקציה אחת ענקית, מחלקים למספר שירותים שכל אחד אחראי על תחום מוגדר.
יתרונות
- קל לעשות scale לשירות ספציפי.
- צוותים יכולים לעבוד עצמאית.
- Deployment נפרד.
- כשל בשירות אחד לא בהכרח מפיל הכול.
חסרונות
- תקשורת בין שירותים מסובכת יותר.
- Debugging קשה יותר.
- Latency ו־distributed failures.
- Versioning בין APIs.
- צריך logging ו־monitoring טובים.
11. GCP בקצרה
| מושג | שימוש |
|---|---|
| Compute Engine | מכונות וירטואליות |
| Cloud Run | הרצת containers בלי לנהל שרתים |
| GKE | Kubernetes מנוהל ב־Google |
| Cloud SQL | DB מנוהל |
| Cloud Storage | אחסון קבצים |
| IAM | הרשאות |
| Cloud Logging | לוגים |
| Secret Manager | ניהול secrets |
12. SQL Server / PostgreSQL
- SELECT, JOIN, GROUP BY
- Indexes
- Transactions
- Foreign keys
- Stored procedures
- Views
- Performance
- Migrations
SELECT u.Name, o.OrderDate
FROM Users u
INNER JOIN Orders o ON u.Id = o.UserId;
| JOIN | משמעות |
|---|---|
| INNER JOIN | רק רשומות שיש התאמה בשני הצדדים |
| LEFT JOIN | כל צד שמאל, גם אם אין התאמה |
| RIGHT JOIN | כל צד ימין |
| FULL JOIN | הכול משני הצדדים |
Index
Index עוזר ל־DB למצוא נתונים מהר יותר, כמו אינדקס בספר. מצד שני, הוא תופס מקום ומאט insert/update/delete כי צריך לעדכן גם את האינדקס.
Transaction
BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 100 WHERE Id = 1;
UPDATE Accounts SET Balance = Balance + 100 WHERE Id = 2;
COMMIT;
13. Entity Framework
ORM שמאפשר לעבוד עם DB דרך אובייקטים ב־C#.
var users = await _db.Users
.Where(u => u.IsActive)
.ToListAsync();
יתרונות
- פחות SQL ידני
- Productivity גבוה
- Migrations
- LINQ
חסרונות
- לפעמים יוצר שאילתות לא יעילות
- צריך להבין מה קורה מאחורי הקלעים
- סכנת N+1
14. Git / Azure DevOps
| מושג | הסבר |
|---|---|
| branch | ענף עבודה נפרד |
| commit | שמירת שינוי |
| pull request | בקשה למזג קוד |
| merge conflict | התנגשות בין שינויים |
| pipeline | תהליך אוטומטי של build/test/deploy |
| CI | בדיקה ובנייה אוטומטית |
| CD | פריסה אוטומטית |
שאלות קצרות ותשובות מוכנות
מה ההבדל בין interface ל־class?
מה ההבדל בין abstract class ל־interface?
מה זה DTO?
למה לא להחזיר Entity ישירות מה־API?
מה זה Repository Pattern?
מה ההבדל בין Authentication ל־Authorization?
מה זה CORS?(Cross-Origin Resource Sharing)
סיכום לשינון לפני הראיון
תשובה כללית על צורת העבודה שלי
ב־.NET אני משתדל לבנות API בשכבות: Controller דק שמקבל request ומחזיר response, Service ללוגיקה העסקית, ושכבת Data Access או Repository לגישה ל־DB. אני משתמש ב־DTOs כדי להגדיר חוזה נקי מול הלקוח, וב־Dependency Injection כדי להקטין coupling ולהפוך את הקוד לגמיש, בדיק וקל יותר לתחזוקה.
תשובה על Angular והפערים שלי
ב־Angular יש לי ניסיון לימודי ובסיסי. בניתי אתר פשוט והכרתי את המבנה של Components, Templates, TypeScript ו־Routing, אבל עדיין לא עבדתי לעומק עם Services ו־API בפרויקט אמיתי. אני מבין ש־Service נועד להוציא לוגיקה מהקומפוננטה, ו־HttpClient משמש לתקשורת מול Backend.
אם הייתי ממשיך את הפרויקט שבניתי, השלב הבא היה להוסיף Service באנגולר, להשתמש ב־HttpClient, ולחבר אותו ל־API ב־.NET ששומר נתונים במסד נתונים.
תשובה על Kubernetes ו־GCP
ב־Kubernetes ו־GCP אני כרגע ברמת היכרות והבנת מושגים, לא ניסיון עמוק בפרודקשן. אני מבין איך הם משתלבים עם אפליקציות .NET שרצות כ־containers, ואיך משתמשים במושגים כמו Pods, Deployments, Services, ConfigMaps, Secrets, לוגים והרשאות.
הצד החזק שלי הוא Backend/.NET, ואני יודע להשלים פערים מהר כשאני נכנס לטכנולוגיה חדשה, במיוחד כשאני עובד עם צוות קיים וסביבה מסודרת.
משפט קצר לזכור בעל פה
אני חזק יותר בצד ה־Backend/.NET. בחלק מהטכנולוגיות כמו Angular, Kubernetes ו־GCP אני מכיר את הבסיס והמושגים, אבל לא עבדתי בהן לעומק בפרודקשן. אני כן יודע ללמוד מהר, להבין סביבה קיימת, ולעבוד בצורה מסודרת עם צוות.