ראיון לתפקיד ראש צוות
פברואר 2023
12.02.2023
|
פרטים כלליים לגבי התהליך
|
ראיון כללי טלפוני, ראיון פרונטלי פלוס טכני, ראיון טכני של כמה שעות במשרד ועוד כמה ראיונות עם המנהלים.
|
שאלות מתוך הראיון
|
תאר מה קורה בזיכרון בהרצה של הקוד הנוכחי.
public class T{
public static void main(args…){
int x = 30;
execute(x);
}
public static execute(int x){
Person p = new Person(“Bob”, x);
}
}
א. בהינתן הCLASS הבא צור CLASS יורש שבקריאה לWORK יבצע פעולה ובקריאה לGETCOUNTER ייתן את מספר הקריאות הנכון.
ב. איך תשנה את BaseWorker לעבוד בצורה נכונה יותר
public abstract class BaseWoker{
private int counter = 0;
public void work(){
counter ++;
}
public final int getCounter(){
return counter;
}
}
|
תשובות
|
הוסף תשובה
|
לצפיה בתשובות
|
|
|
|
|
פברואר 2023
|
|
הJVM מנהל שני סוגי זכרונות HEAP ו-STACK
זכרון HEAP נועד לשמור אובייקטים וCLASSים של RUNTIME. יש אפשרות לפנות לזכרון הזה מכל מקום באפליקציה.( REFERENCE )
שני קונספטים לגבי הHEAP - ה-GARBAGE COLLECTOR וכן דור ישן/חדש - הדורות נועדו לתת קדימות לGC לניקוי של אובייקטים ישנים יותר
זכרון הSTACK בא לשמור על משתנים של פונקציות כשאלה רצות. ברגע שפונקציה מורצת היא מקבלת הקצאה של זכרון מהSTACK למשתנים וכן ערכי REFERENCE לאובייקטים. בסיום הפונקציה ההקצאה נמחקת.
public class Worker extends BaseWorker{
public void work(){
super.work();
System.out.print(“hello world”);
}
}
ב. הבעיה עם הקוד הוא שיש אפשרות שמישהו יירש את הCLASS וישנה את המתודה WORK אין ביטחון שהפעולה תתבצע כפי שנדרש ממנה. על מנת לפתור את הבעיה הזאת יש לשנות את קוד הבסיס לשנות את ()WORK כך:
public void final work(){
doSomething();
counter ++;
}
doSomething(){
}
בצורה הזאת הOVERRIDE יהיה על הDOSOMETHING ולא יוכל לשנות את הפעולה של הCLASS האב.
|
|
|
|
|
|
|