השאלות מתוך ראיון ראשון שנעשה במשרדי החברה בהרצליה פיתוח. ידעתי לענות רק על סעיף אחד (כתבתי את תשובתי כאן). אשמח אם אחרים יכתבו את התשובות לשאר השאלות.
שאלות מתוך הראיון
1. יש קובץ
main
ושני קבצי
dll:
file1.dll
file2.dll
בקובץ main יש את הקוד הבא:
void main (A * a, B * b)
{
a->f();
b->g();
}
בקובץ file1.dll יש את הקוד הבא:
class A
{
void f();
}
class BB : B
{
virtual void g();
}
בקובץ file2.dll יש את הקוד הבא:
class B
{
virtual void g();
}
class AA : A
{
void f();
}
א. איך המחשב יודע לגשת אל
class A
בזמן הקומפילציה?
ב. איך המחשב יודע לגשת אל
class B
בזמן הקומפילציה?
2. יש שני תהליכים שכותבים הודעות לשרת, כאשר ההודעות שמורות ברשימה
std::list
ויש תהליך אחד שקורא את ההודעות מהשרת, וכל הודעה שהוא קורא הוא מוחק אותה אחרי שסיים לקרוא אותה.
א. אם אין מנעולים על התהליכים (אין סינכרון) איך המערכת יכולה לקרוס?
ב. כרגע יש שימוש ב
2n
מנעולים, כאשר
n
זה מספר ההודעות בשרת, ולכל הודעה יש מנעול לקריאה ומנעול לכתיבה. איך אפשר להפחית את מספר המנעולים?
תשובות
הוסף תשובה
|
לצפיה בתשובות
יולי 2019
תשובה לשאלה 2 סעיף א: כאשר התהליך שקורא יסיים לקרוא הודעה מסויימת, הוא ימחוק אותה מהרשימה, ויהיה נתק ברשימה, ואז כשתהליך כלשהו (גם תהליך הקריאה עצמו) ינסה לגשת להודעה שנמצאת אחרי הנתק, תהיה שגיאה קריאת זיכרון, כי התא ברשימה כבר NULL.