מבחן קידוד: לכתוב מערכת messaging הכוללת ברוקר וendpoint handler
הברוקר אחראי לרישום האנדלרים לנושאים (many-to-many) וההאנדלרים אחראים להעביר את ההודעות ליעד (קובץ או stdout)
שתי הקומפוננטות צריכות להיות thread safe
תשובות
הוסף תשובה
|
לצפיה בתשובות
מרץ 2018
הברוקר צריך להשתמש ב ConcurrentHashMap (הבוחן ישאל למה בסוף התרגול)
ההאנדלר צריך להשתמש ב BlockingQueue (סדר ההודעות צריך להשמר) וצריך להשתמש ב CompleteableFuture לשליפה מהתור
צריך גם להשתמש ב AtomicLong לשמןר מונים כמה הודעות נשלחו בהצלחה וכמה נכשלו
הגעתי דרך פרסום באינטרנט, היה שיח אישי של ספר לי על עצמך ופרוייקט, ואלה שאלות שכן זכרתי מהראיון.
שאלות מתוך הראיון
1. יש מערך סופי שכל תא בו הוא בית (8 ביטים) . כתוב פונקציה המכריעה האם הביטים 0 5 או 7 דלוקים באחד מהמקומות במערך .
פתרון: נשמור את המספר 10100001 את הערך העשרוני של המספר הזה במשתנה. עבור כל איבר במערך נעשה & עם המשתנה עזר .
2. יש מרחב זיכרון שאני נותן ליוזר של 1MB שכל בלוק בגודל מסוים 16KB למשל . יש לך רגיסטר של 32 ביטים. נניח מישהו עושים מאלוק ואני נותן לו כתובת פנויה החל מתחילת הבלוק. ויש לך פריי שמוחק את הבלוק המסוים הזה .
תשובות
הוסף תשובה
|
לצפיה בתשובות
דצמבר 2018
תשובה עבור 2:
צריך לממש פונקציות בסיבוכיות 1.. המחיקה מהזכרון פשוטה כי מקבלים ID של תמונה למחוק
ההכנסה לזכרון בעייתית כי צריך לדעת מה המקום הבא שפנוי, לכן שומרים ברגיסטר את המקום הראשון שפנוי (מצביע לכתובת ב-RAM) ובעצם כל המקומות הפנויים מחוברים בינהים ברשימה מקושת (בסוף של השורה יושב מצביע לכתובת הבאה שפנויה)
...
היו שני מראיינים, היו די נחמדים, התחילו להסביר לי על החברה ומה הם עושים ואז בקשו ממני לסבר על עצמי ואז בקשו ממני להסביר על פרוייקט שעשיתי,ושאלו כל מיני שאלות הבנה ב C ו C++ שהייתי עונה להם מיד או מסביר להם על הלוח ובסוף בקשו ממני לממש פונקציה ובסוף שאלו כמה חידות ושחררו אותי
שאלות מתוך הראיון
שאלו לממש פונקצית void memCopy(void* dest, void* source) ll ב C
שמעתיקה אחד לשני, ואז אמרו שגישה לזכרון יקרה לנו ואיך אפשר לממש את זה בצורה יותר יעילה.
תשובות
הוסף תשובה
|
לצפיה בתשובות
מרץ 2018
הפתרון היה להמיר הפרמטרים לטיפוס char למשל כדי להעתיק בית בית, ומימוש יעיל יותר היה להשתמש בטיפוס המרה אחר כמו long long שמעתיק 8 בתים כל פעם וכך חוסכים בהעתקות וגישות זכרון
התנהגות של קבלים וסלילים במעגל מתח DC, קריאת, או שרטוט, גרף של מתח היציאה של המעגל. מתח יציאה של מעגלים עם מתח כניסה AC, נגדים דיודות או טרנסיסטור. שערים לוגיים (XOR).
איך לדעת כמה ביטים של 1 דולקים.
נתון זיכרון עם 64 שורות וכל שורה 64 ביט ובנוסף עוד רגיסטר של 32 ביט, צריך לנהל את הזיכרון כך שתמיד נדע איזה שורה פנויה כדי שנוכל להכניס אליה מידע חדש.
תשובות
הוסף תשובה
|
לצפיה בתשובות
פברואר 2018
מכניסים את מספר השורה הפנויה הראשונה אל הרגיסטר, ובשורה הזאת כל ביט מייצג שורה אם '1' שורה תפוסה אם '0' פנויה (יש 64 ביט בכל שורה אז יש ביט לכל שורה). אם אף שורה אינה פנויה מכניסים 0xFFFFFFFF לרגיסטר ואז יודעים שאין אף שורה פנויה. הערכים ברגיסטר יכולים להיות בין 0 ל 63 או הסימן שאין שורה פנויה כלומר 0xFFFFFFFF.
יולי 2018
הרגיסטר הוא 32ביט ולא 64,אז התשובה לעיל אינה מדויקת.
תשובה נכונה היא לממש רשימה מקושרת בתוך תאי הזיכרון הריקים, כאשר כל תא ריק מצביע על הבא, והרגיסטר הנוסף מצביע על ראש הרשימה.
בעת הקצאה: מוציאים מראש הרשימה
בעת שחרור: מחזירים לראש הרשימה
ינואר 2019
התשובה של פברואר 2018 כן מדוייקת. ולמעשה היה מספיק להשתמש ברגסיטר המכיל 6 ביטים בלבד, כי זה מספיק כדי לייצג את כל המספרים בין 0 ל-63.
פברואר 2019
התשובה הראשונה אינה יעילה, שכן הקצאת זיכרון משמעותה חיפוש ביט "פנוי", שזה O(n), ואילו התשובה השניה מאפשרת לעשות זאת בO(1).
חברה אמריקנית רב-לאומית, ממציאת תחום כרטיסי זיכרון הבזק, שמתכננת, מייצרת ומשווקת כרטיסים אלו למגוון רחב של התקנים. חברת אם סיסטמס ממציאת הדיסק און קי, התמזגה לתוכה בסוף 2006