שאלון קצר על כמה עקרונות יסודיים בc# ואח"כ ראיון אישי הכולל שאלות קוד בלי קשר לשפה ספציפית
שאלות מתוך הראיון
1. איך תממש cache ב-browser? באיזה מבנה תשתמש ומדוע? ואיך תתמודד עם הזיכרון המוגבל של הcache
2. נתונה מחלקה שלכאורה אנחנו כתבנו שמכילה מערך בגודל n עם ערכים כלשהם, יש פונקציות set ו-get שמעדכנות את האיבר ה-i/מחזירות את האיבר ה-i, עליך לממש פונקציה הנקראת setAll שמקבלת ערך ומעדכנת את כל האיברים במערך (בזמן ריצה יותר טוב מ-O(n)
3. נתון מערך ממויין של מספרים (ייתכנו גם שליליים) עליך להחזיר true אם המערך מכיל זוג אחד לפחות של איברים שהסכום הכולל שלהם הוא נניח 15 (סתם דוגמא), יש לבצע בזמן ריצה של n
תשובות
הוסף תשובה
|
לצפיה בתשובות
יולי 2018
1. אני מימשתי את זה ע"י hashTable כך שבכל קריאה נוכל לבדוק בO(1) האם כבר יש לנו את הנתונים ב-cache ואם לא, להביא אותם מהשרת. במקרה שנגמר לי הזיכרון אני אמור למחוק את הרשומה הכי ישנה שהבאתי זאת ע"י שאני שומר את כל הקריאות שלי במבנה נתונים של תור, רק שלפני המחיקה אני בודק ע"י שימוש ב-timestamp שלא השתמשתי מאז באותם נתונים מהcache
2. ניצור משנה שמכיל את הערך האחיד של כולם ונעדכן אותו בO(1) וגם נשאיר את המערך המקורי וע"י שימוש בts נדע איזה מהנתונים נכון לגבי הערך.
3. נחפש את החצי של הסכום במערך או את הערך הכי קרוב לו, נניח בדוגמא נחפש את 7 או את מה שהכי קרוב אליו מלמעלה או למטה ולבדוק אותו מול האיבר הבא אחרי במערך, אם עברנו את הסכום של 15 נבדוק את האיבר הקודם מול האיבר שגרם לעקיפת ה-15 ונמשיך משם ולמעלה עד ששוב נעבור את ה-15 ושוב נזוז לעבור הקודם, נקבל זמן ריצה של log(n)+n = n
לדוגמא מערך של 2,3,4,7 נרצה למצוא סכום של 9, נחפש את מה שהכי קרוב ל-4 שזה 3, 3+4 זה 7, נמשיך ל3+7 זה 10 כלומר עקפנו את ה-9 אז כעת נשווה את 2 שקודם ל-3 עם 7 שגרם לנו לעקוף את 9 וקיבלנו סכום של 9, זה פחות או יותר