שני ראיונות מקצועיים עם מנהל צוות ומנהל מחלקה וראיון HR
שאלות מתוך הראיון
1. להפוך רשימה מקושרת (אפשר לכתוב ב-C++ או ב- C#)
2. לכתוב שאילתות אגרגטיביות לאיזשהי מערכת של טיקטים בהינתן טבלאות שקיימות.
3. שאלות כלליות לגבי ייצוג של עצים בטבלאות. לאחר מכן שואלים איך ניתן לקבל את כל הבנים (derived) בהינתן רשומה מסוימת, לאחר מכן שואלים איך ניתן לייעל את השליפה של כל הבנים.
4. בהינתן טבלה המכילה מספרים עוקבים 1 עד 10 כאשר אחד המספרים חסר,לכתוב שאילתא שמגלה מה המספר החסר (ללא שימוש בטבלאות עזר או לולאת while).
תשובות
הוסף תשובה
|
לצפיה בתשובות
יוני 2017
2. אין לי תשובה, אני לא זוכרת במדויק את השאלה, אך ניתן פשוט לחזור טוב על פונקציות אגרגטיביות כמו sum/group by/count וכו.
3. ניתן לייצג עץ בטבלה באמצעות שדה נוסף parentID שזה בעצם ההורה הישיר של אותה הרשומה. על מנת לקבל את כל הבנים בהינתן id מסוים - אפשר להשתמש ב- recursive CTE, נדרשים לכתוב את השאילתא. ועל מנת לייעל את השליפה - התשובה היא לבנות טבלת derived relations ב- offline כאשר העמודות הם (id + parentId + derivedLevel), כשאר כאן השדה parentId הוא הורה derived ולו דווקא הישיר.
4. השאילא היא:
select num1.num + 1 as missingNumber
from numbers num1
left join numbers num2 on num1.num + 1 = num2.num
where num2.num is null and num1.num <> 10
״יום בוגרים״ - מבחן ארוך מאוד שעושים באיזור ה10 אנשים
שאלות מתוך הראיון
1. להפוך רשימה מקושרת, העדיפו בc++
2. לבנות מבנה נתונים שמכיל תלויות של פקודות. מקבל רשימה של tuples, בהן parent, child. צריך ליצור את ״עץ״ התלויות. צריך לתמוך בפעולות הבאות:
load - טעינת כל התלויות למבנה. נעשה פעם אחת
markSuccess(long id) סימון שהפעולה בעלת הid הצליחה, וכך כל מי שתלוי בה יכול לרוץ
markFail(long id) סימון שהפעולה בעלת הid נכשלה, וכך מי שתלוי בה לא ירוץ לעולם
getIndependantNodes - מחזיר רשימה של פקודות שאין להם תלויות כלל - ועל כן הן עצמאיות. זה היה צריך להיות בo(1
3. מה ההבדל בין גישה של ת׳רד למחסנית אל מול גישה של ת׳רד לheap? מה ההבדל בין mutex לסמפור ובאילו פעולות כל אחד תומך (לא צריך לדעת את הapi).
4. לתכנן מערכת שמקבלת tuple שמכילות שלשה - src ip, dst ip, timestamp ומזהה scanner.
בתכלס זה אומר שמחפשים טווח של דקה, שבו הsrcID פנה ליותר ממאה dstIP שונים. הדקה היא לפי הידיעה שהגיעה.
ראיון קצר ,מקצועי נטו, בין 30-60 דקות, מול מנהל הצוות ומנהל מנהלי הצווים.
שאלות מתוך הראיון
כיצד ניתן לממש cache כך שכל הפעולות עליו יהיו בזמן של O(1) , וכן שמבנה הנתונים שנתאר יכלול מנגנון של ״זיכרון״ , למשל אם קיימים 4 מקומות ב cache שלנו, ואיבר חמישי צריך להכנס, מבנה הנתונים ״יזכור״ מיהו האיבר הישן ביותר שנכנס למבנה - ויוציא אותו.
תשובות
הוסף תשובה
|
לצפיה בתשובות
פברואר 2017
doubly linked list , ו- hash table .
על ידי hashing נגיע לאיבר ב O(1) ,
בביצוע get - אם האיבר במבנה, נעביר אותו ל head.
אם האיבר לא במבנה, נוציא את ה- tail מהמבנה ונכניס את האיבר החדש בתור head
פונקציה שהופכת רשימה מקושרת.
כתוב את הפונקציות הבאות:
void Load(List dependencies)
List getRoots //O(1) runtime
void MarkSuccess(int id)
void MarkFailure(int id)
the input is a tree of dependencies, the getRoots returns all the nodes that have no parent.
each node can have more than one parent.