שלחתי קוח דאך האתר, לאחר מכן היה לי ראיון טלפוני עם HR, ואלחר מכן ראיון מקצועי
שאלות מתוך הראיון
אתה נמצא בחדר חשוך שבו אתה לא רואה כלום.
ישנו שולחן בחדר שבו 100 מטבעות. מצד אחד המטבעות שחורים ומצד שני המטבעות לבנים.
90 מהם הפוכים על צידם השחור ו10 מהם הפוכים על צידם הלבן.
עליך להוציא שתי קבוצות של מטבעות שבכל קבוצה תהיה כמות שווה של מטבעות לבנים
שאלה שניה
אתה ביום הראשון שלך עולה בעלית עם הנמכל ויש לך 30 שניות להסביר למה הוא עשה בחירה נכונה
תשובות
הוסף תשובה
|
לצפיה בתשובות
יולי 2024
פתרון לשאלה עם המטבעות:
נוציא באקראיות 10 מטבעות מתוך 100 מטבעות , עכשיו יש לנו קבוצה של 10 מטבעות וקבוצה של 90 מטבעות כך שלא ידוע כמה מטבעות לבנים יש בכל קבוצה ניתן לדעת שבקבוצה של 10 מטבעות יש X מטבעות לבנים ובקבוצה של 90 מטבעות יש 10 פחות X מטבעות לבנים , השלב הבא הוא להפוך את 10 המטבעות שהוצאו עכשיו ניתן לדעת שבקבוצה של 10 מטבעות יש 10 פחות X מטבעות לבנים (כי הפכנו את המטבעות) ובקבוצה של 90 מטבעות נשארו 10 פחות X מטבעות לבנים ואם כן הוצאו שתי קבוצות של מטבעות שבכל קבוצה יש כמות שווה של מטבעת לבנים.
השאלה בפועל מחולקת לשלבים:
לפניך קטע הקוד הבא אשר ממומש בממשק בו קיימים פסיקות:
void myFunction()
{
Int time = clcTime();
while(time – clcTime() != 3600);
}
*הפונקציה clcTime() היא פונקציה אשר מונה מספר שניות החל מזמן ייחוס מסויים. (לצורך העניין 00:00 המונה מתחיל וכמו כן מתאפס בחזרה ב-00:00 יום למחרת)
שאלה 1: מה קטע הקוד הנ"ל מיועד לעשות?
שאלה 2: הקוד נשלח למחלקת QA ונמסר ממנה שבעת ביצוע הקוד התכנית נכשלת בפועל בעת מקרה מסויים. מהו אותו המקרה? תאר כיצד ניתן לפתור אותו קונקרטית?
שאלה 3: בודק QA מהמחלקה מסר שבשעות היום הקוד עבר בסדר אבל בעת שהלך לישון משהו השתבש. מה יכולה להיות הבעיה? כיצד ניתן לפתור אותה?
תשובות
הוסף תשובה
|
לצפיה בתשובות
יוני 2021
תשובה 1(עניתי ונאמר לי שהיא נכונה): לחכות שעה ולצאת.
תשובה 2(עניתי ונאמר לי שהיא נכונה): צריך לזכור שהקוד רץ במערכת שמקבלת פסיקות כל הזמן. המקרה הקונקרטי - כמה שניות לפני שהמונה מגיע לשניה פתאום יש פסיקה ממקור אחר שאורך ביחד עם המנייה בעת הקפיצה יותר מ3600 שניות (שעה), ולכן כשהמעבד יחזור לבצע אותה המנייה תיהיה מעל 3600 אבל הקוד ימשיך לרוץ ובעצם יפספס את הטיימינג של היציאה.
הדרך שבה ניתן יהיה לפתור היא תיקון של החלפה במקום =! נשים =>. (לא נורא שהקוד יתעכב בכמה שניות ויצא לאחר 3600 וקצת שניות לאחר שיחזור מהפסיקה של המקור החיצוני האחר. נאמר שזה בסדר).
תשובה 3: הדרך להתמודד היא לתת טיפול קונקרטי בקוד – נאמר שניתן להוסיף if למקרה הספציפי הזה (לא חשובה באמת היעילות). אז אם הקוד נמצא התחיל בטווח השעות של 23:00-00:00 (בגדול זה מונה שניות אז לא מדוייק להגדיר את זה ככה אלא ע"פ המודל שניות) אז ניקח את ארגומנט הדקות (לצורך העניין עבור 23:25 קח את 25 הדקות) ותצא במניה של אותו ארגומנט דקות מרגע האיפוס (בדוגמה שלנו המונה מתאפס באפס ולכן לפי התנאי יצא ב00:25 - בדיוק שעה כנרדש).
הביאו לי זיכרון עם 32 שדות ורגיסטר בגדול 32. ביקשו לממש גט ופרי לתאים בזיכרון.
אחרי זה הגדילו ל64 שדות וביקשו לעשות אותו דבר.
תשובות
הוסף תשובה
|
לצפיה בתשובות
יוני 2021
יש כמה אפשרויות אבל הטובה ביותר, הוא להשתמש באינדקסים ובשדות לא משומשים כרשימה מקושרת - כך שהרגיסטר מצביע לתא הקרוב והוא שומר את הכתובת "נקסט" אליה ניכנס בפעם הבא
ראיון טלפוני
ראיון פרונטי טכני
ראיון פונרטלי טכני נוסף
HR
שאלות מתוך הראיון
ספר על עצמך
תפנה תרשים מלבנים של פרויקט שעשית מהתחלה ועד הסוף
מצא בעיות בפונקציה הבאה:
void func()
{
int start=timeofday();
while(timeofday()-start!=3600);
}
תקן את הפונקציה עם הבעיות שמצאת
תשובות
הוסף תשובה
|
לצפיה בתשובות
יוני 2021
לפונקציה יש שני בעיות בWHILE המספר המוחזר לא מדוייק זאת אומרת אף פעם לא יהיה 3600 עגול
בעיה שניה בתחילת יום timeofday מתאפס
כדי לפתור את שני הבעיות
הפונקציה תיכתב ככה:
void func()
{
int timeout=3600;
int start=timeofday();
int lasttime=0;
while(TRUE)
{
lasttime=timeofday()-start;
if(lasttime<0)
{
timeout-=abs(lasttime);
start=timeofday();
}
if(timeofday()-start>=timeout)
{
break;
}
}
}
ראיון ראשון מול ראש צוות + מנהל התוכנה. אנשים מאוד נחמדים ונעימים. אווירה טובה.
שאלות מתוך הראיון
3 שאלות מקצועיות.
שאלה 1: יש מטריצה של מספרים. מכל נקודה ניתן להגיע ל-3 נקודות (למעלה/ אלכסון ימינה/ אלכסון שמאלה). צריך למצוא את הסכום הגדול ביותר של מסלול מנקודה כלשהי בשורה התחתונה.
שאלה 2: יש לנו איזור בזיכרון. נרצה לממש MALLOC וFREE לגדלים 1BYTE-8K. כיצד נעשה זאת?
שאלה 3:נתונה רשימה של ישרים במרחב דו מימדי (כל ישר מוגדר ע"י 2 נקודות X1,Y1 ו- X2,Y2). צריך למצוא נקודה על ציר X שהאנך שלה חותך הכי הרבה ישרים.
תשובות
הוסף תשובה
|
לצפיה בתשובות
יולי 2020
תשובה 1:
נשמור מטריצה נוספת באותו הגדול כך שכל נקודה תכיל את הסכום המקסימלי להגיע עד אליה. לאחר מכן נעבור על השורה התחתונה בלבד ונבחר את האיבר הגדול ביותר - זהו הסכום הגבוה ביותר.
תשובה 2: נשמור 2 רשימות: FREED וALLCOCATED. נשמור תמיד את האיבר בכתובת הראשונה להיות הPOINTER לרשימת הFREED. בהתחלה כל האיברים נמצאים בה (כיוון שכל הזיכרון משוחרר). כל איבר יצביע תמיד לאיבר הבא אחריו. חוץ מהאיבר האחרון שיכיל כתובת לא חוקית. כשנרצה לעשות MALLOC - נחזיר את מה שרשום בכתובת 0 (ראש רשימת הFREED) ונקדם אותו להצביע על האיבר הבא אחריו. כשנרצה לשחרר זיכרון - נשים אותו בראש הרשימה בכתובת 0 ונעדכן אותו להצביע על קודמו בתפקיד.
תשובה 3: תחילה נשים לב שנקודות על ציר הY לא מעניינות בשאלה הזאת. כעת נמיין את כל הנקודות X (גם שפותחות ישר וגם שסוגרות ישר). המיון נעשה בNLOGN. לאחר שקיבלנו מערך ממוין - נעבור על כל X ברשימה - אם שייך לפתיחת ישר - נוסיף 1 לאיבר הקודם. אם שייך לסגירת ישר - נוריד 1 מהאיבר הקודם. נעבור שוב על המערך ונחזיר את הנקודה X עם הערך הגבוה ביותר.