שלום יש לי השבוע ראיון בחברת CEVA
למשרת מהנדס video embedded software
מישהו התראין למשרה כזו בCEVA
או למשרה כזאת בכלל?
אילו סוגי שאלות יכולים לשאול שמה?
תודה
ע"י: 1_אורח_כללי
שלמה אני ממש מודה שענית לי אבל הראיון שלוש שעות ורק שאלה אחת
והאמת שהשאלה הזאת כבר כתובה בפורמים יש אולי עוד שאלות שידוע לך? אני מקווה שתענה לי עד מחר ואם לאהתודה מראש ובהצלחה לי
היי
יש לי ברקוב ראיון שם למשרה QA. איך היה לך בראיון,אילו שאלות היו?
תודה מראש.
ע"י: שלמה.ג
יש לך שתי משתנים a b בכל אחד יש ערך
ליצור שבמשתנה c יהיה c=a*b (אפשר להיעזר בכמה משתני עזר שאת רוצה)
את יכולה להשתמש רק בפקודות מיקרו שהם +1 -1 JNZ halt
JNZ בודק את השורה שלמעלה ויכול לקפוץ לאיזה לייבל שבא לך
תהני!!
ע"י: 1_אורח_כללי
היי
יש לי ראיון לתפקיד QA ואני בוגרת מדעי המחשב למישהו יש מושג מה שואלים
רוב השאלות שראיתי הם מתאימות יותר לחשמל
ע"י: 1_אורח_כללי
אם עדיין רלוונטי.
אז אפשר להשתמש במערך מעגלי. כלומר, לשמור int סטטי ובו המיקום שבו מתחיל המערך, ולעדכן אותו בהתאם, וכך אפשר לוותר על הלולאה הראשונה של ההזזה... פשוט מוחקים את האיבר האחרון ומעדכנים את האינדקס בו מתחיל המערך.
ע"י: 1_אורח_כללי
מקום מאוד מעניין, הטכנולוגיות נשמעות פיצוץ. אבל... באותו היום המזכירה מתקשרת ומודיעה ש"סליחה - חדשות לא טובות". למרות שהראיון הלך בסדר גמור לדעתי.
בהצלחה לכולם
ע"י: 1_אורח_כללי
הייתי החודש בראיון בחברה זו למשרת debugger engineer.
לא התקבלתי. שאלו 3 שאלות:
1. א - מהם שני סוגי החיפוש בעצים? - לאורך ולרוחב.
ב - נתון שבשביל לממש חיפושים אלה, משתמשים בתור ובמחסנית. באיזה סוג חיפוש משתמשים בתור, ובאיזה למחסנית?
2. השאלה על הכפל, תוך שימוש ב inc, dec, jnz, אשר מופיעה כאן בפוסטים קודמים.
3. נתון הקוד הבא:
extern short const_array[2000]
long fun(short x) {
static array[2000];
long res = 0;
for (int i=1999; i>0; i--) array[i] = array[i-1];
array[0] = x;
for (i=0; i<2000, i++) res += array[i]*const_array[i];
return res;
}
כאשר כתיבה למערך לוקחת 5 מחזורי שעון, קריאה והשמה למשתנה 5 מ"ש, וכל פעולה אחרת מ"ש אחד. ללולאת ה for עצמה איך בזבוז מ"ש.
לצורך העניין, סיבוכיות הפונקציה הנ"ל היא 23n+6 (כאשר n מייצג 2000).
המשימה: לצמצם את זמן הריצה.
אני הגעתי ל 18n, אבל המראיין אמר לי שאפשר בסדר גודל של חצי. לא הצלחתי .
בהצלחה למי שמתראיין, ואשמח לדעת אם למישהו יש תשובה לשאלה 3.
ע"י: איחטיאנדר
הייתי החודש בראיון בחברה זו למשרת debugger engineer.
לא התקבלתי. שאלו 3 שאלות:
1. א - מהם שני סוגי החיפוש בעצים? - לאורך ולרוחב.
ב - נתון שבשביל לממש חיפושים אלה, משתמשים בתור ובמחסנית. באיזה סוג חיפוש משתמשים בתור, ובאיזה למחסנית?
2. השאלה על הכפל, תוך שימוש ב inc, dec, jnz, אשר מופיעה כאן בפוסטים קודמים.
3. נתון הקוד הבא:
extern short const_array[2000]
long fun(short x) {
static array[2000];
long res = 0;
for (int i=1999; i>0; i--) array[i] = array[i-1];
array[0] = x;
for (i=0; i<2000, i++) res += array[i]*const_array[i];
return res;
}
כאשר כתיבה למערך לוקחת 5 מחזורי שעון, קריאה והשמה למשתנה 5 מ"ש, וכל פעולה אחרת מ"ש אחד. ללולאת ה for עצמה איך בזבוז מ"ש.
לצורך העניין, סיבוכיות הפונקציה הנ"ל היא 23n+6 (כאשר n מייצג 2000).
המשימה: לצמצם את זמן הריצה.
אני הגעתי ל 18n, אבל המראיין אמר לי שאפשר בסדר גודל של חצי. לא הצלחתי .
בהצלחה למי שמתראיין, ואשמח לדעת אם למישהו יש תשובה לשאלה 3.
נראה לי שעוד לא ענו על זה כאן, אז אשתדל לענות.
ל-traversing שהוא depth first (כלומר כל ה pre / post / in orders), צריך להשתמש במחסנית. הרעיון הוא שדוחפים ושולפים נתונים מהמחסנית בהתאם לסוג הסריקהץ
ל-traversing שהוא breadth first, משתמשים בתור (שהוא בעצם FIFO). למה זה היגיוני? תחשבו שהכנסתם לתור את האב, שני בניו, ואז 4 "נכדים". הסריקה צריך להתבצא מהאב -> בנים -> נכדים.
ע"י: ליז-למון
היי,
הייתי בראיון שם ושאלו אותי את השאלות הבאות:
1. מה הבעיה בקוד הבא:
char *p;
p = 0x10000;
*p = 0x600;
*p = 0x800;
2. נתונה תמונה עם 256X256 פיקסלים ועוד פריים עם 16X16 פיקסלים. צריך למצוא את הפריים הכי קרוב לפריים הנתון בתוך התמונה. ההגדרה של הפריים הכי קרוב הוא זה שסכום הפרשי הפיקסלים בערך מוחלט הוא הנמוך ביותר. צריך להתייחס לתמונה ולפריים כאיזורים רציפים בזיכרון כאשר הפונקציה מקבלת שני מצביעים לשניהם.
בהצלחה ואם למישהו יש שאלות על הפתרונות הוא מוזמן.
ע"י: 1_אורח_כללי
CEVA – צוות video codec (לא עברתי ובלי אחריות לפתרונות...)
1. כתוב תוכנית ב-C שתגיד האם המערכת שאתה עובד בה היא big endian או little endian.
פתרון:
int endian()
{
long int *buff;
short int i;
buff = (long*) malloc(sizeof(long));
*buff = 1;
(char) i = *buff;
if (i == 1)
{
return 1;//little
}
else
{
return 0; //big
}
}
2. ברשותך מעבד שתומך בפקודות הבאות:
mac(x,y,z) = x*y+z
H(Rx) = high bits of reg Rx
L(Rx) = low bits of Rx
המעבד יכול לבצע 2 פקודות במחזור.
לרשותך כמה רגיסטרים שתצטרך.
ממש את הפונקציה הבאה:
( ( (a – b)<<2 ) + c – d + 4)>>3
תוך שימוש בפקודות ובקבועי int.
פתרון:
פנים הסוגריים זה קל למימוש. הטריק של החלוקה ב-8 (3<<) הוא להזיז את ה-low bits של פיתרון פנים הסוגרים ב-13 (כלומר כפל ב-2^13) ולקחת את ה-high bits (אין גלישה כי מדובר על חיבור וכפל של int).
אם פותחים את הסוגריים בצורה הבאה למשל:
(a – b)*2^15 + (c – d + 4)*2^13
ניתן לממש ב-3 מחזורים:
R5 = mac(b, -1, a) || R6 = mac(d, -1, c)
R7 = mac(R5, 2^15, 0) || R8 = mac(R6, 1, 4)
R9 = mac(R8, 2^13, R7)
והתוצאה נמצאת ב-H(R9).
ע"י: 1_אורח_כללי
CEVA – צוות video codec (לא עברתי ובלי אחריות לפתרונות...)
1. כתוב תוכנית ב-C שתגיד האם המערכת שאתה עובד בה היא big endian או little endian.
פתרון:
int endian()
{
long int *buff;
short int i;
buff = (long*) malloc(sizeof(long));
*buff = 1;
(char) i = *buff;
if (i == 1)
{
return 1;//little
}
else
{
return 0; //big
}
}
2. ברשותך מעבד שתומך בפקודות הבאות:
mac(x,y,z) = x*y+z
H(Rx) = high bits of reg Rx
L(Rx) = low bits of Rx
המעבד יכול לבצע 2 פקודות במחזור.
לרשותך כמה רגיסטרים שתצטרך.
ממש את הפונקציה הבאה:
( ( (a – b)<<2 ) + c – d + 4)>>3
תוך שימוש בפקודות ובקבועי int.
פתרון:
פנים הסוגריים זה קל למימוש. הטריק של החלוקה ב-8 (3<<) הוא להזיז את ה-low bits של פיתרון פנים הסוגרים ב-13 (כלומר כפל ב-2^13) ולקחת את ה-high bits (אין גלישה כי מדובר על חיבור וכפל של int).
אם פותחים את הסוגריים בצורה הבאה למשל:
(a – b)*2^15 + (c – d + 4)*2^13
ניתן לממש ב-3 מחזורים:
R5 = mac(b, -1, a) || R6 = mac(d, -1, c)
R7 = mac(R5, 2^15, 0) || R8 = mac(R6, 1, 4)
R9 = mac(R8, 2^13, R7)
והתוצאה נמצאת ב-H(R9).
בכל הפתרונות (וכנראה בהצבת הבעיה יש באג) - אחרי הזזה ב-3 ימינה והזזה ב-2 שמאלה 2lsb של (a-b) שנחספים ב-2lsb של H(R) צריכים להיות 0. אבל הם ביטים של(a-b). לכן צריך 4,5 סייקלים.
R1 = MAC(b,-1,a) //a-b
R2 = MAC(d,-1,c) //c-d
R3 = MAC(R2,2^3,R1) //(a-b)+(c-d)*2^3
R4 = MAC(R3,2^13,0) //(a-b)*2^13+(c-d)*2^16
R5 = MAC(H(R4),2^2,0) //final result with 2lsb of (a-b) in H(R5)
R6 = MAC(L(R4),2^2,0) //2lsb of (a-b) in H(R6)
R7 = MAC(R6,-1,R5) // final result with 2lsb of (a-b) subtracted
ע"י: admin
CEVA Interview1 Summary
Attached reconstruction of full interview at CEVA-DSP
CEVA – Verification Engineer
Interview held on: 3.12.2010
Position:
Verification Engineer-Graduate
ע"י: 1_אורח_כללי
לא עברתי...
// r1,r2 the numbers, r3 temp, r4 the result
set_r3: inc r3
jnz set_r3
set_r4: inc r4
jnz set_r4
add_1: inc r3
inc r4
dec r1
jnz add_1
dec r2
jnz add_2
end
add_2: inc r1
inc r4
dec r3
jnz add_2
dec r2
jnz add_1
end
ע"י: יעקב83
לאחד שיודע.
אני שמח שעזרתי לך.
נראה שהלך לך ממש טוב בראיון.
המראיין שלי דוווקא לא היה נראה לי מתנשא.
אותי הוא שאל רק את שתי השאלות שרשמתי ונראה שממך הוא היה ממש מרוצה ושאל אותך הרבה שאלות.
האם הם חזרו אליך עם תשובה חיובית?
בשאלה של הכפל, יש שמה איזה טריק שצריך לפתור. כי אני למשל ממשתי פקודת
ADD X,Y
ובעזרתו ממשתי לולאה שסוכמת לתוך משתנה Z את X . והיא עושה את זה Y פעמים.
הבעייה היא ואני לא שמתי לב לזה שכל פעם שאני מבצע בלולאה ADD Z,X
המשתנה X מתאפס ולכן באיטרציה הבאה כשנבצע שוב ADD Z,X לא נבצע כלום כי X הוא בעצם 0.
איך אתה התמודדת עם זה?
ע"י: 1_אורח_כללי
מישהו היה בראיון שני למשרת מהנדס ורפיקציה במחלקת vlsi?
תוכל לפרט מה השאלות ששאלו אותך
ע"י: 1_אורח_כללי
קודם כל תודה יעקב,
הייתי בראיון בחברה הזאת, שאלוהרבה על הפרויקט שלי, הציג לי 4 שאלות אחת אחרי השניה,
השתיים הראשונות היו כמו שיעקב רשם עם רכיבי MIN ו-MAX הייתי צריך למצוא את המספר האמצעי מבין 3 מספרים (הפתרון שלי היה עם 4 ואני די בטוח שזה המינימום).
אח"כ הוא הציג את השאלה עם הכפל וגם כאן זה שאלה די פשוטה אני יכול לרשום את הקוד אם תהיה דרישה..
השאלה השלישית הייתה כזאת, נתונה הנוסחה הבאה וכל משתנה הוא רגיסטר בעל 8 ביט, צריך למצוא כמה ביטים צריך בשביל שבתוצאה לא יהיה OVERFLOW
(((a-b)>>3) + c-d+4)<<2
<< זה שיפט שמאלה ו- >> ימינה
התשובה היא 13 ביטים.
שאלה הבאה ממשיכה את דרכה של השאלה הזאת והפעם יש לנו פעולה שנקראת MAC והיא עושה את הדבר הבא ומחזירה מספר בעל 32 ביט בסופה. אפשר לגשת לרגיסטר או ל-16 ביטי LSB או ל- 16 ביטי MSB
r1=MAC(a,b,c)=a*b + c
אפשר לבצע 2 MAC בכל סייקל. המטרה לחשב את הביטוי מהשאלה הקודמת בעזרת MAC.
הדרישה פה בסופו של דבר שזה יתבצע ב2.5 סייקלים וזה הפתרון שנתתי (עומד במבחן הזה) כל 2 שורות זה סייקל בלתי תלוי.
r1=mac(b,-1,a)
r2=mac(d,-1,c)
r3=mac(r1,2^3,r2)
r4=mac(r3,1,4)
r5=mac(r4,2^13,0)
התוצאה תימצא ב16 ביטי MSB של R5
אחרי הוא דיבר על החברה בזריזות וכששאלתי אותו לגבי תשובות לראיון הוא אמר שהם "יגיעו מתישהו".
ע"י: אדם
קודם כל תודה יעקב,
הייתי בראיון בחברה הזאת, שאלוהרבה על הפרויקט שלי, הציג לי 4 שאלות אחת אחרי השניה,
השתיים הראשונות היו כמו שיעקב רשם עם רכיבי MIN ו-MAX הייתי צריך למצוא את המספר האמצעי מבין 3 מספרים (הפתרון שלי היה עם 4 ואני די בטוח שזה המינימום).
אח"כ הוא הציג את השאלה עם הכפל וגם כאן זה שאלה די פשוטה אני יכול לרשום את הקוד אם תהיה דרישה..
השאלה השלישית הייתה כזאת, נתונה הנוסחה הבאה וכל משתנה הוא רגיסטר בעל 8 ביט, צריך למצוא כמה ביטים צריך בשביל שבתוצאה לא יהיה OVERFLOW
(((a-b)>>3) + c-d+4)<<2
<< זה שיפט שמאלה ו- >> ימינה
התשובה היא 13 ביטים.
שאלה הבאה ממשיכה את דרכה של השאלה הזאת והפעם יש לנו פעולה שנקראת MAC והיא עושה את הדבר הבא ומחזירה מספר בעל 32 ביט בסופה. אפשר לגשת לרגיסטר או ל-16 ביטי LSB או ל- 16 ביטי MSB
r1=MAC(a,b,c)=a*b + c
אפשר לבצע 2 MAC בכל סייקל. המטרה לחשב את הביטוי מהשאלה הקודמת בעזרת MAC.
הדרישה פה בסופו של דבר שזה יתבצע ב2.5 סייקלים וזה הפתרון שנתתי (עומד במבחן הזה) כל 2 שורות זה סייקל בלתי תלוי.
r1=mac(b,-1,a)
r2=mac(d,-1,c)
r3=mac(r1,2^3,r2)
r4=mac(r3,1,4)
r5=mac(r4,2^13,0)
התוצאה תימצא ב16 ביטי MSB של R5
אחרי הוא דיבר על החברה בזריזות וכששאלתי אותו לגבי תשובות לראיון הוא אמר שהם "יגיעו מתישהו".
אתה יכול בבקשה לפתור את השאלה עם המקסימום מינימום ? לא מצליח לפתור ב4 קופסאות בלבד ! אולי התכוונת ל 4 קופסאות של מינימום ? ולא התיחסת למספר קופסאות המקסימום ?
ע"י: 1_אורח_כללי
בעקרון צריך להשתמש ב- 3 לולאות ולייבלים ועם משתנה עזר:
לולאה 1 - עובדת על X
לולאה 2 - עובדת על Y
לולאה 3 - עובדת על Z שמקבלת את הערך המקורי של X
ע"י: יעקב83
אוקי
אולי שכחתי לי להגיד
אבל אילו שני סוגי קופסאות אחד של מינימום ואחת של מקסימום.
אבל מותר להשתמש בכל קוספה כמה פעמים שרוצים.
סורי, חשבתי שזה ברור.
ע"י: 1_אורח_כללי
נראה לי שהוא התכוון עם 3 קופסאות למיין 3 מספרים זה אפשרי
ע"י: 1_אורח_כללי
איך באמת מממשים קופסה שממיינת 3 מספרים עם רק שתי קופסאות שממינות 2?
ע"י: 1_אורח_כללי
אלו שאלות שחוזרות על עצמן.
לא נורא בפעם הבאה תגיע יותר מוכן.
ע"י: יעקב83
היי
הייתי בראיון ב ceva
לא התקבלתי.
השאלות הם כלהלן.
נתונים 2 קופסאות 2->1 שמקבלות שתי מספרים ומוציאות את המינימום ואת המקסימום בהתאמה.
בעזרת שתי הקופסאות האילו צריך לממש קופסה של 3->3 שממינת 3 מספרים.
האמת זה שאלה לא קשה.
זה ממש לא בעייה למצוא את המינימום ואת המקסימום.
מה שהסתבכתי זה למצוא את המספר האמצעי. אבל אם חושבים על זה טוב פותרים גם את זה.
שאלה שנייה.
ממש קוד אסמבלי של פונקצייה שכופלת שני מספרים x,y
למשל foo(x,y)w (ה W זה כדי שיהיה כתב ברור )
כאשר נתונים רק 3 פקודות אסמבלי.
inc x
dec x
jnz label.
יש שמה קצת טריקים, הוא עזר לי בזה קצת.
אתם מוזמנים להציע פתרון. אם תסתבכו אני ארשום לכם את הפתרון.