אינטל – הנדסת תוכנה

מאת JobHunt

בראיון ראשון שאלו אותי:

1. נתונה רשימת קבצים ובכל אחד מהם #include לקבצים אחרים. יש לך פונקציה שבאמצעותה אתה יכול לטעון את כל קבצי ה-include מקובץ נתון. צריך לכתוב פונקציה שטוענת את כל קבצי ה-include בהינתן קובץ source מסויים. יש למנוע כניסה ללואה אינסופית הנגרמת מקריאת מעגלית של include.

פתרון: ע"י רקורסיה

בראיון שני:

1. לממש cashe בגודל n, המבוסס LRU. כל כניסה ל- cashe מורכבת מכתובת ותוכן.

פתרון: hash table: ה-key הוא הכתובת. המיפוי נעשה ע"י פונקציית גיבוב של mod. בכל תא מחזיקים את התוכן שמופה לשם ברשימה משורשרת. חוצמזה מחזיקים רשימה דו-כוונית הממוינת לפי הזמן (ואז בטבלת הגיבוב יש הצבעות גם בין הרשימות השונות שבכל תא).

2. יש מגבלת זכרון של 12 ביט. כל פקודה מורכבת מכתובת ומהוראה.האם אפשר לתמוך בכל הדרישות הבאות:

(פה נותנו לי 4 דרישות שאני לא זוכרת את כולן. דרישה היא מהסגנון: כתובת מורכבת מ-3 ביט והוראה מ-4 ביט).

פתרון: אפשר לתמוך בכולן ובאחרונה רק בחצי מהדרישה (כדי להגיע לזה פשוט צריך להראות להם חישוב של כל האופציות השונות. יש מצב בו שבעקבות 2 דרישות אתם תצטרכו להשתמש ב-11 ביט, אז תשתמשו בביט הנותר כביט מציין, 0- פקודה ראשונה, 1- פקודה שנייה). אח"כ ביקשו ממני להוכיח את זה שא"א לתמוך בכל הדרישות, אז פשוט צריך לחשב את גודל הזיכרון הנדרש כדי לתמוך בכול הדרישות, ומקבלים שזה 12^2 + 8, ובפועל יש רק 12^2 זכרון, ולכן א"א לתמוך בכל הדרישות.