אם אי פעם התכוננתם לראיון לתפקיד מתכנת ג'אווה או עברתם בחינת הסמכה כלשהי (לאו דווקא בנושא תכנות), אז בטח כבר שמתם לב שהשאלות שנשאלות שם מאוד ספציפיות. רבים מהם מאלצים אותך לחשוב על עיצוב השפה. חלקם נועדו לחקור את מעמקי הידע שלך. ישנן שאלות שנראות יותר כמו חידות מכל דבר אחר, בעוד שאחרות מתייחסות לניואנסים של השפה שקשה מאוד לתפוס ללא תרגול. במאמר זה, המפתח Sarans Sing מציג כמה שאלות כאלה על Java. עם תשובות כמובן.
1. מה קורה אם אני שם משפט return או System.exit() בבלוק try/catch? זוהי שאלת ג'אווה מאוד פופולרית ועדינה. החוכמה היא שמתכנתים רבים מאמינים שהחסימה

finally
תמיד מבוצעת. על ידי הצבת return
אמירה בבלוק try/catch
או קריאה System.exit()
מתוך try/catch
בלוק, השאלה מטילה ספק באמונה זו. התשובה לשאלה המסובכת הזו היא: הבלוק finally
יתבצע כאשר return
הצהרה ממוקמת בבלוק try/catch
, אך לא יתבצע כאשר System.exit()
נקרא מתוך try/catch
בלוק. 2. האם Java תומך בירושה מרובה? זו שאלה מאוד מסובכת. מראיינים שואלים לעתים קרובות, "אם C++ תומך בירושה ישירה מרובה, אז למה Java לא יכול?" התשובה קצת יותר מסובכת ממה שזה נראה, מכיוון ש-Java תומכת בירושה מסוגים מרובים . אחרי הכל, ממשק Java יכול להרחיב ממשקים אחרים. עם זאת, Java אינה תומכת בהורשה מרובה של יישומים. 3. אם מתודה במחלקת אב זורקת NullPointerException
s, האם ניתן לעקוף אותה על ידי מתודה שזורקת RuntimeException
s? זו עוד שאלה מסובכת הקשורה לעומס יתר ועקיפה. תשובה: שיטה שנדרסה יכולה לזרוק בבטחה NullPointerException
את מחלקת האב של RuntimeException, אך אינך יכול לעשות את אותו הדבר עם סוג חריג מסומן כמו Exception
. 4. איך אתה מבטיח ששרשורים N
יכולים לגשת N
למשאבים ללא מבוי סתום? אם כתיבת קוד עם ריבוי חוטים אינו הצד החזק שלך, אתה עלול להיתקל בשאלה זו. זה יכול להיות קשה אפילו למתכנת מנוסה שלא נתקל במבוי סתום ובתנאי מירוץ. כל הטריק כאן הוא לפי הסדר: אתה יכול למנוע מבוי סתום על ידי שחרור משאבים בסדר הפוך שבו הם נרכשו. 5. מה ההבדל בין המחלקות ל- StringBuffer
ו StringBuilder
ב-Java? זוהי שאלה קלאסית בשפת ג'אווה שחלק מהמפתחים מוצאים שהיא מסובכת ואחרים - פשוטה מאוד. הStringBuilder
הכיתה הופיעה ב-JDK 1.5. ההבדל היחיד בין המחלקות הללו הוא StringBuffer
שהשיטות של, כגון length()
, capacity()
, ו- append()
מסונכרנות, בעוד שהשיטות המתאימות ב- StringBuilder
לא. הבדל מהותי זה אומר ששרשור המחרוזות מהיר יותר עם StringBuilder
מאשר עם StringBuffer
. למעשה, השימוש StringBuffer
אינו מומלץ, מכיוון ששרשור מחרוזת מתבצע על אותו חוט 99% מהזמן. 6. מהי התוצאה של הערכת הביטוי 1.0/0.0? האם זה יפיק חריג או שגיאת קומפילציה? זו עוד שאלה מסובכת על הכיתה. מפתחי Java מודעים לקיומם של סוג נתונים כפול פרימיטיבי ומחלקה , אך בעת ביצוע פעולות נקודה צפה הם לא שמים לב מספיק ל- , , , ולכללים השולטים בחישובים אריתמטיים קשורים. התשובה לשאלה זו פשוטה: לא ייזרק; הביטוי מוערך ל . 7. מה קורה אם תנסה להכניס מפתח לתוך a שכבר מכיל את המפתח הזה? השאלה המסובכת הזו היא חלק משאלת נפוצה נוספת: איך עובד בג'אווה? הוא מקור פופולרי לשאלות מבלבלות ומסובכות על ג'אווה. הנה התשובה: אם תנסה להכניס מחדש מפתח ב- , המפתח הישן יוחלף, מכיוון שהמחלקה לא מאפשרת שכפול מפתחות. ואותו מפתח יקבל את אותו קוד חשיש, מה שאומר שהוא יגיע לאותו מקום בדלי ה-hash. מבוסס על חומרים של Quora

Double
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
Double.POSITIVE_INFINITY
HashMap
HashMap
HashMap
HashMap
HashMap
GO TO FULL VERSION