إتقان جولة البرمجة
كتابة كود نظيف في المقابلات
4 دقيقة للقراءة
الكود النظيف في المقابلات ليس عن الكمال -- إنه عن إظهار أنك تكتب كودًا احترافيًا وقابلاً للقراءة حتى تحت الضغط.
اختيار اللغة
| اللغة | مزايا المقابلات | العيوب |
|---|---|---|
| Python | مختصرة، قابلة للقراءة، سريعة الكتابة، هياكل بيانات مدمجة | أبطأ في التنفيذ (نادرًا ما يهم في المقابلات) |
| Java | أنواع صارمة، صريحة، شائعة في شركات التقنية الكبرى | مُسهبة، كود نمطي أكثر |
| JavaScript | عالمية، جيدة لأدوار الواجهة الأمامية | لا يوجد heap مدمج، غير شائعة في بعض الشركات |
| C++ | سريعة، تُظهر معرفة بالأنظمة | الأكثر إسهابًا، أخطاء صياغة سهلة |
توصية: استخدم Python ما لم يتطلب الدور لغة أخرى بشكل محدد. تتيح لك كتابة أكثر كود في أقل وقت.
قواعد تنظيم الكود
1. أسماء متغيرات ذات معنى
# سيئ
def f(a, t):
d = {}
for i, v in enumerate(a):
c = t - v
if c in d:
return [d[c], i]
d[v] = i
# جيد
def two_sum(nums, target):
seen = {}
for index, num in enumerate(nums):
complement = target - num
if complement in seen:
return [seen[complement], index]
seen[num] = index
2. دوال مساعدة
قسّم المنطق المعقد إلى دوال مسمّاة:
# بدون مساعدين (صعب المتابعة)
def solve(board):
for i in range(9):
for j in range(9):
if board[i][j] == '.':
for c in '123456789':
if all(board[i][k] != c for k in range(9)) and \
all(board[k][j] != c for k in range(9)) and \
all(board[3*(i//3)+di][3*(j//3)+dj] != c
for di in range(3) for dj in range(3)):
board[i][j] = c
if solve(board): return True
board[i][j] = '.'
return False
return True
# مع مساعدين (النية واضحة)
def solve(board):
def is_valid(row, col, num):
# فحص الصف
if num in board[row]: return False
# فحص العمود
if any(board[r][col] == num for r in range(9)): return False
# فحص صندوق 3x3
box_r, box_c = 3 * (row // 3), 3 * (col // 3)
for r in range(box_r, box_r + 3):
for c in range(box_c, box_c + 3):
if board[r][c] == num: return False
return True
def backtrack():
for r in range(9):
for c in range(9):
if board[r][c] == '.':
for num in '123456789':
if is_valid(r, c, num):
board[r][c] = num
if backtrack(): return True
board[r][c] = '.'
return False
return True
return backtrack()
3. الإرجاع المبكر
قلل التداخل بالإرجاع المبكر:
# متداخل بعمق (صعب القراءة)
def process(node):
if node:
if node.val > 0:
if node.left:
return process(node.left)
else:
return node.val
else:
return 0
else:
return -1
# إرجاع مبكر (أنظف بكثير)
def process(node):
if not node:
return -1
if node.val <= 0:
return 0
if not node.left:
return node.val
return process(node.left)
الأخطاء الشائعة
| الخطأ | الحل |
|---|---|
| أخطاء الواحد بالزائد/الناقص | استخدم range(n) لـ 0 إلى n-1؛ range(1, n+1) لـ 1 إلى n |
| فيضان الأعداد الصحيحة | Python تتعامل مع الأرقام الكبيرة؛ في Java/C++ استخدم long |
| فحوصات Null/None | افحص قبل الوصول لـ .val، .next، .left |
| تعديل القائمة أثناء التكرار | كرر على نسخة أو استخدم حلقة قائمة على الفهرس |
| نسيان معالجة المدخلات الفارغة | أضف شرط حماية في الأعلى |
اختبار الكود
بعد البرمجة، تتبع حلك:
# حلك
def max_profit(prices):
min_price = float('inf')
max_profit = 0
for price in prices:
min_price = min(min_price, price)
max_profit = max(max_profit, price - min_price)
return max_profit
# تتبع: prices = [7, 1, 5, 3, 6, 4]
# price=7: min=7, profit=0
# price=1: min=1, profit=0
# price=5: min=1, profit=4
# price=3: min=1, profit=4
# price=6: min=1, profit=5 ✓
# price=4: min=1, profit=5
# النتيجة: 5 ✓
نصيحة للمقابلات: بعد إنهاء الكود، قل: "دعني أتتبع هذا مع مثالنا للتحقق." هذا يُظهر الدقة ويكتشف الأخطاء قبل أن يكتشفها المقابل.
التالي: لنغطي مهارات عصر الذكاء الاصطناعي الجديدة التي تختبرها الشركات في 2026. :::