הראיון התחלק לשאלות ידע ולשאלה על אלגוריתם.
שאלות הידע היו רבות והן היו עיקר הראיון, שאל על threads שאל על hash map, hash table, מה זה set, מה זה equals (לא מספיק להגיד שזה נועד להשוואת סטרינג אלא בהקשר של hash map) אחר כך שאלת האלגוריתם הייתה קלה איך לרוץ על מערך ענק ולמצוא מתוכו את המספר הk הגדול. אחר כך ניסה להקשות ושאל איך לייעל את התהליך והתשובה הייתה לפצל את הריצה ל4 מחשבים
פרטים על התהליך בחברת ubimo לתפקיד מפתח Java Backend Developer :
1. השלב הראשון היה ראיון טלפוני ען מיכל מפתחת בכירה, והוא כלל שאלות על java ו spring והיתה גם שאלה של איך למצוא בקובץ שמכיל מליארד מספרי טלפון, אם יש מספר שמופיע פעמיים, כאשר יש לנו רק 10M זיכרון.
2. השלב השני היה תרגיל בית ברמת קושי דיי גבוהה.
להלן לינק לפרוייקט github שמכיל את התרגיל והפתרון שלי. למייטב הבנתי וידעתי, הפתרון שלי הוא אופטימלי:
https://github.com/mytask1234/ubimo-home-task
בהתחלה רציתי תפקיד ב-Frontend, אז דיברו איתי בטלפון לראות מי אני פחות או יותר, ושלחו לי מבחן בית, שזה תרגיל ב-Angular. (נאמר לי מאוחר יותר שיש גם מבחני בית לתפקידים האחרים)
אחרי זה דיברתי ראיון כללי (לא טכני) עם אחד המנהלים שם בטלפון
אחכ היה לי ראיון טכני על מבני נתונים ומדעי המחשב כדי לבדוק אם אני אולי מתאים לתפקיד backend ב-Java. (ואת זה אני הולך לפרט פה)
שאלות מתוך הראיון
1. קבוצה של שלמים תקרא "צפופה" אם היא מכילה רצף של מספרים שלמים על ציר המספרים בלי "חורים". קיבלת איטרטור על קבוצה כזאת, מצא דרך יעילה לקבוע אם היא צפופה או לא.
2. הסבר איך hashtable עובד (מבנה פשוט לא דינאמי), איך הכנסה, חיפוש והוצאה עובדים.
3. האם אתה מכיר Multithreading ב-Java?... אמרתי לו שאני לא כל כך מנוסה בזה פרקטית ומכיר את הנושא רק תאורטית. אז הוא דילג על השאלה.
4. קיבלת איטקטור על קבוצה גדולה של מספרים (n) ומספר k, מצא את k המספרים הכי גדולים ביעילות
תשובות
הוסף תשובה
|
לצפיה בתשובות
נובמבר 2018
1. ברור כי תנאי הכרחי ומספיק זה ש- max - min + 1 = גודל הקבוצה. ניתן למצוא אותם במעבר אחד O(n) ובזכרון קבוע O(1)
2. זה אתם יכולים לבדוק באינטרנט. היה קטע שלא כל כך הבנתי שהוא רצה שאני אגיד שגם בהוספה צריך קודם כל לעבור על כל האיברים בתא מסויים כדי לוודא שאין כבר איבר עם אותו מפתח.
4. שמור ערימת מינימום של k איברים וכל פעם שתמצא איבר יותר גדול מהמינימום תוציא את המינימום ותכניס אותו במקום. קל לראות שמקבלים אתה תוצאה הנכונה בזמן nlogk
בהינתן set של מספרים, צריך לומר האם ה set רציץ או לא.
רוצים לעשות key מאויביקט חדש כדאי להשתמש בו בmap. מה צריך להוסיף לו?
תשובות
הוסף תשובה
|
לצפיה בתשובות
יוני 2018
האובייקט צריך לדרוס את הפונקציות getHashCode() וequals(). בנוסף, שווה לחשוב על להפוך את האובייקט ל immutable ולשמור hashCode כמשתנה וכך לחסוך חישובי hashCode לאותו הדבר.
תייצר ממשק שממליץ למשתמש באיזה יום הכי כדי לו למכור את הסחורה שלו , כי הוא רוצה לשלוח את אנשי המכירות שלו (תעזר בנתונים דמוגרפים , גאוגרפים)
PRD, MVP , WIREFRAME