עידכונים מ - jungo

ראיונות עבודה של כל חברות ההייטק בארץ ! מה שואלים בכל חברה ובכל תפקיד - הכנה מעולה לפני כל ראיון עבודה - חפשו את שם החברה או התחום ותמצאו דיונים על כל הראיונות בחברות השונות. כיתבו על הראיונות שלכם היו-מה שאלו אתכם, מה עצבן אתכם בראיון שהייתם בו וכו'.

מנהל: no2

עידכונים מ - jungo

הודעהעל ידי בוגר26 » 19 נובמבר 2008, 14:18

אתמול כשלתי חזק ב JUNGO ,
בכל מקרה הנוסח של שאלת הMALLOC התעדכן קצת ממה שמתואר פה אז חשבתי לעדכן -
הומצאה מערכת הפעלה ובה 4 פונקציות סיפרייה חדשות -
mallocbig
mallocsmall
freebig
freesmall
ה BIG נועדו להקצות ולשחרר בלוקים של מעל 512K והSMALL נועדו להקצות ולשחרר כל מה שמתחת ל 512K .
שתי פונק' ההקצאה הנ"ל לא מסוגלות לקבל מספרים שהם לא כפולה של 16 , כלומר מקצות רק בלוקים של כפולות של 16 .
עכשיו בשימוש ב 4 הנ"ל - צריך לממש שתי פונ' - MALLOC הרגילה - שיכולה לקבל כל גודל של בלוק , ובעיקר של בלוקים שלא מתחלקים ב 16 . ו FREE הרגילה - כאשר יש לשים לב שכל בלוק משוחרר בהתאמה לפונ' שהקצתה אותו .
בהצלחה !
בוגר26
 
הודעות: 2
הצטרף: 03 נובמבר 2008, 11:23

Share On

Share on Facebook Facebook Share on Twitter Twitter

Re: עידכונים מ - jungo

הודעהעל ידי אבג » 21 נובמבר 2008, 09:38

זה שלב א'.מישהו היה בשלב ב'
אבג
 
הודעות: 3
הצטרף: 18 נובמבר 2008, 16:40

Re: עידכונים מ - jungo

הודעהעל ידי מועמד » 23 נובמבר 2008, 01:05

לישהו יש פתרון לשאלה הזו?

תודה מראש!
מועמד
 

Re: עידכונים מ - jungo

הודעהעל ידי אורח » 07 דצמבר 2008, 14:13

void * my_malloc(int sz)
{
extern void *OS_malloc_big(int sz);
extern void *OS_malloc_small(int sz);

int *tmp, div;

if(sz<0)
return NULL;

sz += sizeof(int);

if(sz <= 512)
{
if(sz%16)
{
div = sz/16+1;
tmp = (int*)OS_malloc_small(div*16);
*tmp = div*16;
tmp++;
return (void*)tmp;
}
tmp = (int*)OS_malloc_small(sz);
*tmp = sz;
tmp++;
return (void*)tmp;
}
if(sz%16)
{
div = sz/16+1;
tmp = (int*)OS_malloc_big(div*16);
*tmp = div*16;
tmp++;
return (void*)tmp;
}
tmp = (int*)OS_malloc_big(sz);
*tmp = sz;
tmp++;
return (void*)tmp;
}

void my_free(void *p)
{
extern void OS_free_big(void *p);
extern void OS_free_small(void *p);

int *tmp = (int*)(p);

tmp--;

if(*tmp<=512)
{
OS_free_small(tmp);
}
else
{
OS_free_big(tmp);
}
}
אורח
 

Re: עידכונים מ - jungo

הודעהעל ידי id2008 » 19 ינואר 2009, 23:00

ניתן לפשט את my_malloc , להוסיף מקרה קצה בו size==0 , ולמנוע
שכפול קוד - את החישוב הכפול של div = sz/16+1 :


קוד: בחר הכל
void* my_malloc(int size)
{
   int new_size;
   int *tmp;

   if(size<=0)
      return NULL;

   size+=sizeof(int);
   new_size=((size/16)+1)*16;

   if(new_size<=512)
      tmp=(int*)malloc_small(new_size);
   else
      tmp=(int*)malloc_big(new_size);

   *tmp=new_size;
   tmp+=sizeof(int);

   return (void*)tmp;
}
id2008
 
הודעות: 12
הצטרף: 13 אפריל 2008, 17:13

Re: עידכונים מ - jungo

הודעהעל ידי אורח_פורח » 02 פברואר 2009, 15:00

מישהו יודע מה שואלים בראיון השני בג'נגו?
אורח_פורח
 
הודעות: 7
הצטרף: 28 ינואר 2009, 22:59

Re: עידכונים מ - jungo

הודעהעל ידי חבר » 25 מרץ 2009, 11:56

חבר'ה מי היה לאחרונה ויכול לעדכן לגבי הראיון השני?
חבר
 

Re: עידכונים מ - jungo

הודעהעל ידי איציק » 05 אפריל 2009, 10:00

אני הייתי ממליץ לכולם להיכנס רגע לאתר הבא http://smartkitchens.wordpress.com

מקסים ויפה...
איציק
 

Re: עידכונים מ - jungo

הודעהעל ידי 12novice » 13 אפריל 2009, 19:04

מישהו יכול להסביר לי למה בפתרון מופיע (size+=sizeof(int ?
12novice
 
הודעות: 1
הצטרף: 13 אפריל 2009, 18:58

Re: עידכונים מ - jungo

הודעהעל ידי סתם אחד » 30 יוני 2009, 18:33

void* my_malloc(int size)
{
int new_size, div;
void* ptr = NULL;

if(size<=0) return NULL;

/*
//the usage og sizeof(int) is for knowing the actual size we allocate, we need this information
//later on my_free function
*/

size = size + sizeof(int) + 16;
div = size % 16;
new_size = div * 16;

if(new_size <= 512) ptr = small_malloc(new_size);
else ptr = big_malloc(new_size);

*((int*)ptr) = new_size;
((int*)ptr++);

return ((void*)ptr);
}

void my_free(void* ptr)
{
int size;

size = *((int*)--ptr);

if (size <= 512) small_free(ptr);
else big_free(ptr);
}
סתם אחד
 

Re: עידכונים מ - jungo

הודעהעל ידי אורח » 16 יולי 2009, 22:31

בשני הפתרונות האחרונים יש טעות קטנה . האחרון מחשב div*16 שזה בעצם השארית מהחלוקה ב16 וזה שכתב לפניו רשם new_size=((size/16)+1)*16; מבלי לבדוק האם הגודל מתחלק ב 16 ואז למשל אם size==16 אנחנו נקצה 32 בתים ( 2 בלוקים) במקום 16 בלבד.
בהצלחה
אורח
 

Re: עידכונים מ - jungo

הודעהעל ידי רון » 25 אוגוסט 2009, 15:06

הי,

הייתי בראיון ב JUNGO.

"הסיפורים" עליהם "בערך" נכונים.

זאת אומרת, אתה נפגש עם נציגת כ"א והיא מתשאלת אותך קצת לגבי הנסיון שלך, אח"כ היא משאירה אותך לבד עם דף שבו בעיה שעליך לפתור.

מאחר וראיתי את כל השאלות שהיו בפורום לגבי חבר'ה שהתנסו ב JUNGO – הכנתי לי (מבעוד מועד) תוכניות ב C (ע"ג Linux – יכול להיות שב- Windows צריך לעשות includeים קצת אחרים) שפותרות את הבעיות האלה – כדי שלא יהיה מצב שאני כותב משהו שלא מתקמפל/רץ נכון.



צירפתי ת'קבצי C,H הרלוונטים כדי שכ"א יוכל להתרשם ולהבין:

1. בקבצי ה- aligned_malloc.* יש פתרון לבעיית ה- aligned malloc הידועה:

a. יש להם טוויסט חדש – לפחות בשבילי זה היה חדש – הם רוצים שהבלוק שמוקצה יהיה מאותחל לאפס – אז הוספתי לולאת for שמאפסת אותו – לא ידעתי אם מותר להשתמש ב- memset(…).

b. העיקרון המנחה כאן הוא לשמור את ה- offset לתחילת הבלוק המוחזר (מתחילת הבלוק שהוקצה) ע"י unsigned char (כדי שזה "יכנס" ב- byte 1) ולזכור בדיוק את המיקום שלו...

c. נ.ב. – בגלל שזה unsigned char – זה (ה- offset) לא יכול להיות > 255...

2. בקבצי ה- multiple_malloc.* יש פתרון לבעיית ה aligned malloc "ההפוכה":

a. נתונות 2 פונ' malloc: big_malloc (עבור בלוקים > 512), small_malloc (עבור בלוקים שאינם > 512). 2 פונ' אלו מקצות בלוקים בגדלים של כפולות שלמות של 16.

b. נתונות 2 פונ' free: big_free (עבור בלוקים > 512), small_free (עבור בלוקים שאינם > 512).

c. כעת צריך לממש פונ' malloc & free סטנדרטיות שיכולות להקצות/לשחרר כל גודל.

d. המוטיבציה ל"המציא" שאלה כזאת כנראה מגיעה מ- embedded – שם יכול להיות מצב שבו בלוקים "גדולים" "לוקחים" ממקום אחד ובלוקים "קטנים" ממקום אחר...

e. העיקרון המנחה כאן מתחלק לכמה חלקים:

i. כאשר מקצים בלוק – צריך "לזכור" האם הוא גדול/קטן (כי אח"כ אנחנו צריכים להשתמש בפונ' free המתאימה).

ii. אם רוצים להקצות בלוק בגודל X כלשהו – צריך למעשה למשתמש בפונ' malloc הרלוונטית עבור בלוק שגודלו = הכפולה השלמה של 16 הקטנה ביותר שהיא עדיין > X (יעני בקיצור: הכפולה השלמה של 16 "הראשונה" אחרי X).

3. בקבצי ה- my_timer.* יש פתרון לבעיית "בניית ספריית scheduler":

a. צריך לממש 2 פונ': add_timer (מוסיפה אלמנט ל database שמכיל פוינטר לפונ' וזמן שבו צריך להריץ ת'פונ' הזאת), run_timers (פונ' שעוברת על ה- database הזה מריצה את הפונ' לפי סדר הזמנים).

b. יעני מובטח לך שאחרי שמריצים את run_timers, יותר לא קוראים ל add_timer.

c. יכול להיות מעין טוויסט לשאלה הזאת לפיו יתכנו קריאות נוספות גם אחרי תחילת ההרצה...

d. העיקרון המנחה כאן הוא database של רשימה מקושרת ממויינת לפי הזמן (ואז אפשר להריץ כל פונ' מבלי "לקפוץ" קדימה/אחורה...).



השאלות האלה יכולות לעזור גם לחבר'ה שלא "הולכים" ל- JUNGO – יש כאן אלמנטים בסיסיים חשובים שכדאי לזכור אותם לפני שניגשים לראיון אצל חברה עם מוצר embedded...
קבצים מצורפים
my_timer.h
(368 Bytes) הורד 558 פעמים
my_timer.c
(1.55 KiB) הורד 545 פעמים
multiple_malloc.h
(668 Bytes) הורד 432 פעמים
multiple_malloc.c
(2.86 KiB) הורד 493 פעמים
aligned_malloc.h
(497 Bytes) הורד 489 פעמים
aligned_malloc.c
(1.35 KiB) הורד 589 פעמים
רון
 

Re: עידכונים מ - jungo

הודעהעל ידי אופירס » 15 פברואר 2010, 16:20

שלום,

אני עברתי ראיון ראשון בג'אנגו ויש לי ראיון שני עוד מספר ימים. אם מישהו היה בראיון שני ויש לו טיפים כלשהם... גישה של המראיין, שאלות ששואלים, אני אשמח לעזרה.

תודה, אופיר.
אופירס
 

Re: עידכונים מ - jungo

הודעהעל ידי יעקוב » 18 פברואר 2010, 15:52

אופיר, אתה יכול בבקשה להגיד מה שאלו אותך בראיון הראשון ?

תודה.
יעקוב
 

Re: עידכונים מ - jungo

הודעהעל ידי ממליץ1 » 18 פברואר 2010, 19:28

לבחור שעבר ראיון ראשון - חבל לך על הנסיעות לנתניה ... ביזבוז זמן !

ממליץ לך לוותר על התענוג ולא ללכת לראיון - הם בכלל לא מגייסים, סתם מראיינים אנשים !
ממליץ1
 

הבא

חזור אל שחזורי ראיונות עבודה

מי מחובר

משתמשים הגולשים בפורום זה: Yahoo [Bot] ו 2 אורחים

cron
Designed by Gy Design