מישהו היה לאחרונה בחברת רד למשרת פיתוח בשפת C?
אתם יודעים מה שואלים?
ע"י: 1_אורח_כללי
תודה !
ע"י: 1_אורח_כללי
כל הכבוד על ההשקעה - יישר כח !
ע"י: 1_אורח_כללי
הייתי שם, זה מה ששאלו אותי:
1. ניהול זכרון:
נתון איזור רצוף בזכרון של בלוקים בגודל של 1KB. יש להציע מימוש של פונקציות הקצאה ושחרור עבור הבלוקים האלו. ניתן להניח שהקלט תמיד חוקי(כלומר שמשתמש לא יבקש לשחרר איזור שלא באמת הוקצה לו)
פתרון שלי: רשימה מקושרת של כל הבלוקים המשוחררים.
איתחול: הכנסת כל הבלוקים לרשימה
הקצאה: הוצאת האיבר הראשון ברשימה והחזרתו למשתמש
שחרור: הכנסת הבלוק לראש הרשימה
המראיינת לא אהבה את הפתרון ואמרה שאמנם לוגית הוא נכון אבל יש בו תקורה מיותרת
פתרון של המראיינת: מחסנית של כתובות
אתחול: דחיפת כל כתובת של תחילת בלוק לתוך המחסנית
הקצאה: הוצאת הכתובת שבראש המחסנית והחזרתה למשתמש
שחרור: הכנסת הכתובת המשוחררת לראש המחסנית.
2. מימוש מניעה הדדית:
יש 2 CPU שמשתמשים באותו זכרון, ישנו קטע קריטי מסויים שבו אסור ששניהם יהיו בו בו-זמנית. מה צריך כל CPU לבצע לפני ואחרי כל גישה לקטע הקריטי.
את הפתרון שלי המראיינת לא ממש אהבה, אז אין טעם לרשום אותו.
3 אני לא לגמרי זוכרת אבל זה היה בערך כך:
יש 2 פונציות F1 ו-F2:
void f1()
{
stc_x *ptr
f2(????????)
}
void f2(?????????)
{
stc_x s
???????
}
1. צריך להשלים את הקטעים המסומנים ב-????? כך שבסיום הקריאה ל-F2 יצביע PTR ל-S.
2. מה הבעיה עם הצבעה כזו?
3. איך אפשר לפתור את הבעיה?
פתרון:
1. בהגדרה של F2 (ב-???? השניים) צריך לרשום stc_x **ptr (זה מה שהמראיינת אמרה), לגבי השאר אני לא בטוחה
2. הבעיה היא שבתוך F2 המשתנה S הוא מקומי ואחרי שיוצאים מהפונקציה הוא כבר לא מוכר וכתוצאה מכך המצביע מצביע על זבל
3. צריך להגדיר את המשתנה S כסטאטי
זהו, אני מקווה שעזרתי.
בהצלחה למי שהולך