שאלות הזויות שנשאלתי לאחרונה

הסיבה לשמור אותו היא

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

zaske

New member
הסבר הגיוני, ואני מסכים איתו, אבל אני עושה

הפרדה (וסליחה על ההקבלה לעולם של תכנות בלינוקס, נניח) - יש application space (או user space ) שבו אכן, היחיד שבאמת משחרר זכרון הוא ה gc - כלומר, אתה , ברמת האפליקציה לא יכול לשחרר באמת זכרון. יש את ה internal space (נניח - סוג של מקביל את זה ל kernel space ) שבו גם ממש כתוב הקוד של מחיקת הזכרון - מי אמר שרק הקוד של gc ימחוק זכרון, ולא תהיה מחיקה במאורעות "חריגים" כמו הדוגמא הנ"ל? שוב, מקבל את ההסבר שלך, אני מנסה להסביר למה חשבתי על הכיוון האחר. בכל מקרה, שאלות מעניינות ודיון מאוד מעניין.
 

zaske

New member
אוקיי, עוד שאלה

אני עדיין לא מבין (עזוב איך המנגנון עובד, מבחינת התכנות שלו) - מה היתרון של JVM לשמור על אובייקט מקולקל? האם אני מפספס פה משהו מבחינת היתרון?
 
גם אני לא רואה יתרון

מעבר לעובדה ששחרור של כל אוביקט שהוא הוא תפקידו של GC בלבד. שחרור בכל דרך אחרת עלול לגרום ל"הפתעות" - נניח שבמהלך אתחול העצם לפני הכשל אותחלו מספר עצמים פנימיים נוספים שגם אותם יש לשחרר (והם אותחלו באורח תקין)? חייבים "לקרוא" לGC. ופעולה זו היא "יקרה" מבחינת משאבים, ומתבצעת לעתים רחוקות ולא על כל כשלון של הקצאה.
 

zaske

New member
כן, את זה הבנתי

שכנראה הוחלט מבחינה ארכיקטונית שרק gc משחרר זכרון, ויהי מה, ולא משנה שקוד שכתוב ב "jvm space" יכול לעשות תכל'ס מה שהוא רוצה - כולל לשחרר זכרון ב"אירועים חריגים במיוחד".
 

sgracie

New member
הבהרה קטנה, ועובדה די מוזרה

אומנם אני יודע שJAVA זה לא כוס התה שלך
אבל: לאחר חיפוש קצר בגוגל אפשר לגלות שהSPEC של JVM לא מחייב אותך בצורת מימוש הGC, מתי הוא ירוץ, ויתרה מכך: אם בכלל יהיה GC! מה שכן מתחייבים הוא שאם יש GC, בזמן קצירת זיכרון של אובייקט תקרא הפונקציה FINALIZE. מה שהוספת בסוף: "ואחכ בודק שוב את הREFERENCE COUNT... ואם הוא עדיין אפס..." לא נדרש כלל וכלל. מה שכן, במהלך הזמן רק מימושים מוצלחים לJVM "ישרדו" כך שמשתמע שJVM מסויימים אכן יעשו בדיקות שכאלו
 

zalomon

New member
השאלות מעניינות אבל לא טריויאליות

אני כותב בג'אווה למעלה מעשר שנים, ואני מעיד על עצמי שאני סקרן, וכן מכיר דבר או שניים ב-internals. בכל זאת אין לי תשובה חד משמעית לשתי השאלות. יש לי ניחושים סבירים: 1. האובייקט ייוצר בזכרון ללא רפרנס, ולכן ימחק ב-GC הבא. כשהקונסטרקטור רץ זה אומר שהזכרון כבר הוקצה ויש אובייקט. הוא רק לא יושם לאף אחד. 2. ניתן לקלקל את ההשמדה של האובייקט. סינטקטית ניתן לעשות זאת, ולכן זה צפוי לעבוד. אבל כאן זה יותר עניין של פירצה והאם סתמו אותה או לא. כלומר, האם בשלב שבו ה-GC מריץ את ה-finalize הוא כבר וויתר מבחינתו על האובייקט והשלב הבא הוא מחיקה שלו (זה סביר) -- אבל אז מה קורה למצביע אליו? או שמא הרסתי את הגרף שלפיו ה-GC רץ? זה מאוד תלוי במימוש של ה-GC. בקיצור לדעתי לא טריוויאלי. לדעתי לא לדעת את התשובות לזה לא מעיד על בינוניות מצד מתכנת JAVA, אפילו מומחה. ואלה בהחלט כן שאלות שאמורות להעיד על מומחיות של תוכניתן C במערכות RT. הן פשוט מאבדות מהרלוונטיות שלהן בעולם ה-JAVA.
 

עו9ר

New member
Finalizer attack!

המראיינים חיפשו ידע בכתיבת קוד מאובטח (Secure Coding) אם ה class הוא לא final וניתן לרשת אותו, מצב כמו שתיארת פותח פתח לתקיפה שנקראית Finalizer attack ע"י מה שנקרא resurrecting of an object. דרך אגב מצב זה תוקן ב אחד ה updates של java6.
 

user32

Well-known member
מנהל
חטאתי פה בכך שהשמטתי כמה פרטים על התפקיד

מדובר בתפקיד הכשרת מתכנתים. צוות הבוחנים הם מדריכי C/C++ שמכשירים בעיקר לRT ודברים דומים (נראה לי יש להם גם מסלול קרנל וכו'). היו שם כמה שידעו ג'אווה לא רע אבל כאמור הדגישו דברים שניכר בעליל שג'אוואיסט לא יתמודד איתם. זה לגיטימי לבדוק מידת סקרנות וכמה המועמד מתעניין בדברים under the hood וגם היה די מאתגר. יש עוד כמה שאלות מעניינות שאני אעלה פה בזמן הקרוב.
 

vinney

Well-known member
לתפקיד כזה זה באמת רלוונטי


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

user32

Well-known member
מנהל
רלוונטי אבל לא מהסיבות שהזכרת

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

the new L

New member
למה? הם לא יכולים לפתוח ספר?

באמת אני לא מבין את האובססיה לדעת כל פרט טכני במימוש השפה.... בסך הכל במקרה הצורך אפשר לפתוח ספר ולקרוא.
 

vinney

Well-known member
אז זהו...

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

עו9ר

New member
לא מדוייק לדעתי

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

zaske

New member
לגבי הציון אפס שנתתי לעצמי על התשובות :)

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

zaske

New member
בקשה לגבי הדיון הזה

אם יש למישהו יש לינקים טובים + ספר וכו' לגבי jvm internals - אני מאוד אשמח לקרוא. תודה!
 
אני אוהב את הסגנון הדתי שלך

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

zaske

New member
איך יש לך זמן לכתוב תגובות? אתה לא בלחץ?

יש שמועות שג'וליה הולכת בבית שלה.
 
למעלה