35 سوالی که ممکن است مصاحبهکنندگان موقع استخدام برنامهنویس جاوا از آنها بپرسند
جاوا یکی از پرکاربردترین زبانهای برنامهنویسی است که بازار کار بسیار خوبی دارد. تسلط بر جاوا و پایتون و آشنایی و انتخاب یک گرایش پرتقاضا در دنیای فناوی اطلاعات به توسعهدهندگان اجازه میدهد برای موقعیتهای شغلی جذاب و سودآوری رزومه ارسال کنند. جاوا از جمله زبانهای برنامهنویسیای است که قابلیت ساخت طیف گستردهای از برنامههای کاربردی دارد. توسعهدهندگان میتوانند از جاوا برای ساخت برنامههای اندرویدی، یادگیری ماشین، برنامههای سازمانی، برنامههای وب، نرمافزارهای توکار، برنامههای تجاری، دسکتاپ و نمونههای مشابه استفاده کنند. نکتهای که برخی برنامهنویسان نسبت به آن بیتوجه هستند این است که شما ممکن است بهترین برنامهنویس باشید و با انواع مختلفی از پارادایمهای برنامهنویسی آشنا باشید، اما یک مصاحبهکننده تنها بر مبنای پاسخهای جلسه مصاحبه تصمیم میگیرد که شما فرد مناسبی برای احراز شغل هستید یا خیر. از اینرو، باید از این نکته مطلع باشید که مصاحبهکنندگان در جلسات استخدامی چه پرسشهایی را مطرح میکنند. در این مقاله پرسشها و پاسخهای رایجی که یک برنامهنویس جاوا در جلسه مصاحبه با آنها روبهرو میشود را گردآوری کردهایم تا برای حضور در جلسات استخدامی آمادگی لازم را داشته باشید.
اگر یک برنامهنویس تازهکار هستید که خود را برای حضور در یک مصاحبه استخدامی آماده میکند یا برنامهنویس جویای کار هستید که دوست دارد برای پیشرفت شغلی در تیمهای برنامهنویسی بزرگ مشغول به کار شود، همواره استرسی قبل از حضور در جلسه مصاحبه دارید. این موضوع کاملا طبیعی است، زیرا قرار است با افراد جدیدی صحبت کنید که هیچ شناختی در مورد شما یا مهارتهای فنیتان ندارند و تنها بر مبنای پاسخهای تخصصی و رفتارتان شما را قضاوت میکنند. برای آنکه با آمادگی کامل در جلسه مصاحبه حاضر شوید باید شناخت کلی در مورد پرسشهای فنی که ممکن است در جلسه مصاحبه مطرح شوند، داشته باشید.
1. JVM سرنام چه واژههایی است و چه معنایی دارد؟
ماشین مجازی جاوا (JVM) سرنام Java Virtual Machine برای اجرای برنامههای جاوا روی سامانهها نیاز است. معماری مذکور از مولفههای زیر ساخته شده است:
- Classloader: زیرسیستم JVM است و وظیفه اصلی آن بارگذاری فایلهای کلاس در زمان اجرای برنامه جاوا است.
- Heap: میزبان دادههای زمان اجرا است که برای تخصیص به اشیاء استفاده میشود.
- Class area: مسئول نگهداری مولفههای مرتبط با هر کلاس و مواردی مثل متغیرهای ایستا، فرادادهها و ثابتها است.
- Stack: برای ذخیره متغیرهای موقت استفاده میشود.
- Register: حاوی آدرس دستور JVM در حال اجرا است.
- Execution engine: موتور اجرا متشکل از یک پردازنده مجازی، مفسری که دستورالعملها را پس از خواندن بایتکد اجرا میکند و یک کامپایلر JIT است که هر زمان سرعت اجرای کدها افت کند با انجام برخی بهینهسازیها در حافظه این فرآیند را بهبود میبخشد.
- Java Native Interface : بهعنوان رسانه ارتباطی برای تعامل با برنامههای دیگری استفاده میشود که با زبانهای دیگری مثل سی، سیپلاسپلاس و غیره توسعه یافتهاند.
2. برنامهنویسی شیءگرا چیست، آیا جاوا یک زبان شیءگرا است؟
برنامهنویسی شیءگرا یک پارادایم برنامهنویسی است و سعی دارد الگویی از مفاهیم دنیای واقعی را به دنیای برنامهنویسی وارد کند. به بیان دیگر، اشیاء محفظههایی هستند که دادهها را بهشکل فیلدها و کدها را بهشکل رویه نگهداری میکنند. بر اساس این منطق، پارادایم شیءگرایی، سبکی خاص از برنامهنویسی است که روی اشیاء و رویهها کار میکند. جاوا همانند زبانهای برنامهنویسی دیگری مثل سیپلاسپلاس، سیشارپ و نمونههای دیگر، از برنامهنویسی شیءگرایی پشتیبانی میکند.
3. تجمیع در برنامهنویسی جاوا به چه معنا است؟
- تجمیع به این معنا است که هر شیء به چرخه حیات خود اختصاص دارد، اما مبحث مالکیت نیز مطرح است، بهطوری که شیء فرزند تنها به یک شیء والد تعلق دارد و نمیتواند به هیچ شیء والد دیگری تعلق داشته باشد.
4. سوپرکلاس در جاوا چیست؟
- پاسخ Java.lang است. تمامی نوعهای غیرابتدایی بهطور مستقیم یا غیرمستقیم از این کلاس ارثبری میکنند.
5. تفاوت بین finally و finalize در جاوا را توضیح دهید.
- بلوک finally همراه با بلوک try-catch استفاده میشود؛ برای اطمینان از اینکه قطعه کدی خاص همیشه اجرا خواهد شد، حتا اگر استثنایی بهوجود آید که بلوک try-catch آنرا مدیریت میکند. finalize یک متد خاص در کلاس شیء است. متد مذکور به این دلیل ساخته شده که هر زمان فرآیند Garbage Collection اجرا شد و تشخیص داد هیچ ارجاعی به یک شیء وجود ندارد و از آن استفاده نمیشود، قبل از آزاد شدن حافظه این متد را یکبار اجرا کند.
6. کلاس درونی ناشناس (Anonymous Inner Class) چیست چه تفاوتی با کلاس داخلی دارد؟
- هر کلاس داخلی محلی بدون نام را «کلاس داخلی ناشناس» میگوییم. از آنجایی کلاس مذکور هیچ نامی ندارد، ایجاد سازنده برای آن غیرممکن است. کلاس فوق همواره یا یک کلاس را گسترش میدهد یا یک رابط را پیادهسازی میکند و در یک دستور واحد تعریف و نمونهسازی میشود. یک کلاس تودرتو غیرایستا یک کلاس داخلی نامیده میشود. کلاسهای داخلی با اشیاء کلاس مرتبط هستند و میتوانند به تمام متدها و متغیرهای کلاس خارجی دسترسی داشته باشند.
7. کلاس سیستم چیست؟
- یک کلاس اصلی در جاوا است. از آنجایی که کلاس نهایی است، نمیتوانیم رفتار آنرا از طریق وراثت تغییر دهیم. همچنین نمیتوانیم این کلاس را نمونهسازی کنیم، زیرا هیچ سازنده عمومیای ارائه نمیدهد. از اینرو، تمام متدهای آن ایستا هستند.
8. چگونه رشته daemon را در جاوا ایجاد کنیم؟
ما از کلاس setDaemon(true) برای ایجاد این رشته استفاده میکنیم. البته باید دقت کنیم که متد فوق را باید قبل از متد Start فراخوانی کنیم، در غیر اینصورت استثنا IllegalThreadStateException را دریافت میکنیم.
9. آیا جاوا از متغیرهای سراسری پشتیبانی میکند؟
- پاسخ منفی است. جاوا از متغیرهای سراسری پشتیبانی نمیکند، زیرا در فضای نام تصادم ایجاد میشود و شفافیت ارجاعی از میان میرود.
10. یک شیء RMI چگونه توسعه مییابد؟
مراحل زیر را میتوان برای توسعه یک شیء RMI انجام داد:
- رابط را تعریف کنید.
- رابط را پیادهسازی کنید.
- رابط و پیادهسازیهای آنها را با کامپایلر جاوا کامپایل کنید.
- پیادهسازی سرور را با کامپایلر RMI کامپایل کنید.
- RMI registry را اجرا کنید.
- برنامه را اجرا کنید.
11. تفاوت بین زمانبندی و زمانبندی پیشگیرانه را توضیح دهید.
- در صورت برش زمانی، یک کار برای یک بازه زمانی مشخص اجرا میشود که بهعنوان یک برش (Slice) شناخته میشود. پس از آن وارد صف آماده، مجموعهای از وظایف آماده، میشود. سپس مولفه برنامهریز وظیفه بعدی را بر اساس اولویت و دیگر عوامل انتخاب میکند. در رویکرد زمانبندی پیشگیرانه، وظیفهای که بالاترین اولویت را دارد به شرطی که به حالت انتظار وارد نشود یا وظیفهای با اولویت بالاتر وارد نشود، اجرا میشود.
12. Garbage collector thread چه نوع نخ (ریسمانی) است؟
- یک daemon thread است.
13. چرخه حیات یک ریسمان در جاوا را شرح دهید.
هر ریسمان در جاوا مراحل زیر را در چرخه حیات خود سپری میکند:
- New
- Runnable
- Running
- Non-runnable (blocked)
- Terminated
14. روشهای مورد استفاده در فرآیند سریالسازی و از سریال خارج کردن را بیان کنید
- ObjectInputStream.readObject فایل را میخواند و شیء را از حالت سریال خارج میکند.
- ObjectOuputStream.writeObject شیء را سریال کنید و شیء سریالشده را در یک فایل بنویسید.
15. متغیرهای Volatile چیستند و چه هدفی را دنبال میکنند؟
- متغیرهای Volatile، متغیرهایی هستند که همیشه از حافظه اصلی و نه از حافظه نهان Thread خوانده میشوند. بهطور معمول، این متغیرها هنگام همگامسازی استفاده میشوند.
16. کلاسهای wrapper در جاوا چیستند؟
- تمامی نوعهای دادههای اولیه در جاوا دارای یک کلاس مرتبط هستند که به کلاس wrapper معروف است که نوع داده اولیه را در یک شیء برای کلاس سفارشی میکند. بهطور خلاصه، آنها جاواهای اولیه را به اشیاء تبدیل میکنند.
17. چگونه میتوانیم کلاس Singleton ایجاد کنیم؟
- اینکار از طریق خصوصی کردن سازنده آن انجام میشود.
18. متدهای مهم Exception Class در جاوا را نام ببرید.
- string getMessage()
- string toString()
- void printStackTrace()
- synchronized Throwable getCause()
- public StackTraceElement[] getStackTrace()
19. چگونه می توانیم در جاوا ریسمان بسازیم؟
برای ساخت یک ریسمان در جاوا میتوانیم از دو روش زیر استفاده کنیم:
- با گسترش کلاسThread (نقطه ضعف این روش این است که نمیتوانیم هیچ کلاس دیگری را گسترش دهیم، زیرا کلاس thread قبلا توسعه یافته است).
- پیادهسازی رابط Runnable.
20. تفاوت بین متدهای get و load را توضیح دهید.
- get اگر شیء پیدا نشود مقدار null برمیگرداند، در حالی که load استثنای ObjectNotFound را تولید میکند.
- get همیشه یک شیء واقعی را برمیگرداند، در حالی که load یک شیء پراکسی را بر میگرداند.
- اگر از وجود یک نمونه مطمئن نیستید، باید از get استفاده کنید، در غیر این صورت باید از load استفاده کنید.
21. مقدار پیشفرض متغیرهای محلی چیست؟
- مقدار پیشفرضی وجود ندارد! آنها با هیچ مقدار پیشفرض اولیهای مقداردهی نمیشوند، زیرا مبتنی بر ارجاعات Object یا Primitives نیستند.
22. Singleton در جاوا چیست؟
- یک کلاس با یک نمونه در کل برنامه جاوا است. برای مثال java.lang.Runtime یک کلاس Singleton است. هدف اصلی کلاس Singleton کنترل ایجاد شیء با نگهداری سازنده خصوصی است.
23. متد ایستا چیست؟
- یک متد ایستا را میتوان بدون نیاز به ایجاد نمونهای از یک کلاس فراخوانی کرد. یک متد ایستا بهجای آنکه متعلق به یک شیء از کلاس باشد به کلاس تعلق دارد. یک متد ایستا میتواند به عضو داده ایستا دسترسی داشته باشد و میتواند مقدار آنرا تغییر دهد.
24. استثنا چیست؟
- استثناها شرایط غیرمعمول در طول برنامه هستند. این شرایط به دلایل مختلفی ایجاد میشوند. کمدقتی در نحوه پردازش دادههای دریافتی از کاربر، عدم پیشبینی دادههایی که ممکن است خارج از چارچوب استاندارد در دستوری استفاده شوند (دریافت مقادیر رشتهای و انجام محاسبات ریاضی روی آنها).
25. به زبان ساده، جاوا را چگونه تعریف میکنید؟
جاوا یک پورتال شیءگرا و سطح بالا و مستقل از پلتفرم است. برنامههای ساختهشده توسط این زبان عملکرد زیادی دارند و برای ساخت انواع مختلفی از برنامهها مثل برنامههای دسکتاپی، برنامههای موبایل و وبسایتهای پیچیده قابل استفاده است. جاوا یک زبان برنامهنویسی همهمنظوره است که به توسعهدهندگان امکان میدهد تا برنامههای کاربردی قابل اجرا در هر محیطی را ایجاد کنند. جیمز آرتور گاسلینگ، دانشمند علوم کامپیوتر اهل کشور کانادا، جاوا را در سال 1991 توسعه داد و آنرا Dr Java نامید. امروزه جاوا پایه توسعه برنامههای سازمانی است و نقش مهمی در صنعت فناوری اطلاعات دارد.
26. Java String Pool چیست؟
- String Pool در جاوا مکانی خاص است که مجموعهای از رشتههای Java Heap Memory را نگهداری میکند. String یک کلاس جاوا است که اجازه میدهد اشیاء رشتهای را با استفاده از یک عملگر جدید یا با استفاده از مقادیر در دو گیومه ایجاد کرد. نکته مهمی که باید در مورد String در جاوا به آن دقت کنید تغییرناپذیری آن است.
27. کلاس مجموعه در جاوا چیست، متدها و رابطهای آنرا نام ببرید.
- کلاسهای مجموعه جاوا، کلاسهای خاصی هستند که منحصراً با متدهای ایستا استفاده میشوند که بهطور خاص روی مجموعههای برگشتی کار میکنند. Java Collection بهطور پیشفرض از یک کلاس ارثبری میکند و سه ویژگی اساسی زیر را دارد:
- از الگوریتمهای چندشکلی پشتیبانی میکند و با آنها کار میکند و مجموعههای جدید را برای هر مجموعه خاص برمیگرداند.
- متدها در مجموعه جاوا یک NullPointerException را در صورتیکه اشیاء یا مجموعههای کلاس دارای مقدار Null باشند، تولید میکنند.
- بهعنوان Java.util.Collectionclass نشان داده و تعریف میشود.
متدها و اصلاحکنندههای زیادی در Java Collection وجود دارد. در جدول زیر مهمترین متدهای Java Collection را مشاهده میکنید.
مثالی از Java Collection بهشرح زیر است:
خروجی قطعه کد فوق بهشرح زیر است:
Minimum Value element in the collection: 12
مثالی از متد Max در Java Collection :
خروجی بهشرح زیر است:
Maximum Value element in the collection: 90
28. servlet چیستند؟
Servlets مولفههای نرمافزاری جاوا هستند که قابلیتهای کاربردی را از طریق API، رابط، کلاس یا هرگونه استقرار وب به سرور جاوا اضافه میکنند. Servletها بهطور خاص روی سرورهای برنامه کاربردی تحت وب با جاوا اجرا میشوند و قادر به رسیدگی به درخواستهای پیچیده از وبسرور هستند. Servlet مزایای عملکردی بالاتر، استحکام، مقیاسپذیری، قابلیت جابهجایی و اطمینان از ایمنی را به برنامههای جاوا اضافه میکند. فرآیند اجرای Servlet بهشرح زیر است:
- کاربر درخواستی از یک مرورگر وب ارسال میکند.
- وبسرور این درخواست را دریافت میکند و به servlet تحویل میدهد.
- Servlet این درخواست را پردازش میکند تا یک پاسخ خاص با خروجی ایجاد کند.
- Servlet این پاسخ را به وبسرور ارسال میکند.
- وبسرور اطلاعات موردنیاز را برای مرورگر ارسال میکند تا روی صفحهنمایش نشان دهد.
Java Servlets دارای کلاسها و رابطهای مختلفی مثل GenericServlet، ServletRequest، Servlet API، HttpServlet، ServeResponse و غیره است.
29. Request Dispatcher چیست؟
در Servlet، RequestDispatcher بهعنوان یک رابط برای تعریف یک شیء برای دریافت درخواستهای کلاینتها از یک سو و ارسال آنها به منابع خاص در سویی دیگر (که ممکن است یک servlet، HTML، JSP باشد) استفاده میشود. در حالت کلی، RequestDispatcher دو متد زیر را دارد:
- void forward(ServletRequest request, ServletResponse response): درخواستها را از هر servlet به منابع سرور در قالب یک Servlet، فایل HTML یا یک فایل JSP ارسال میکند.
- void include(ServletRequest request, ServletResponse response): محتوایی برای یک منبع خاص در قالب یک پاسخ مانند فایل HTML، صفحه JSP یا یک servlet ایجاد میکند.
30. چرخه عمر Servlet را شرح دهید.
Servlet یک مولفه نرمافزاری در جاوا است که وظیفه اصلی آن دریافت درخواست، پردازش آن و ارائه نتیجه در قالب یک صفحه HTML به کاربر است. در اینجا Servlet Container چرخه حیات یک servlet را مدیریت میکند و شامل مراحل اصلی زیر است:
- بارگذاری Servlet.
- مقداردهی اولیه Servlet.
- رسیدگی به درخواست.
- حذف Servlet.
چرخه حیات یک Java Servlet در شکل ۱ نشان داده شده است.
شکل 1
Loading Servlet: چرخه حیات Servlet با مرحله بارگذاری در کانتینر Servlet آغاز میشود. Servlet به یکی از دو روش زیر بارگذاری میشود:
- تنظیم servlet بهعنوان یک مقدار انتگرال مثبت یا صفر. این فرآیند ممکن است با تاخیر زمانی انجام شود، زیرا کانتینر سعی میکند سرولت مناسب را برای رسیدگی به درخواست انتخاب کند.
- کانتینرها ابتدا کلاس Servlet را بارگذاری میکنند و سپس یک نمونه از طریق سازنده بدون آرگومان میسازند.
Initialising Servlet: گام بعدی فراخوانی متد Servlet.init(ServletConfig) برای مقداردهی اولیه Servlet از طریق منبعی مثل JDBC است.
Handling the Request: Servlet درخواستهای کلاینت را دریافت میکند و با استفاده از متد service عملیات مورد نیاز را انجام میدهد.
Destroying the Servlet: کانتینر Servlet با انجام و تکمیل وظایف خاص و فراخوانی متد death حافظه اختصاصیافته به اشیاء را آزاد میکند.
31. روشهای مختلف مدیریت نشست در Servlet ها را نام ببرید.
نشستها (Sessions) فعالیت کاربر را پس از ورود به سایت پیگیری میکنند. مدیریت نشست مکانیزمی برای تهیه اطلاعات برای هر کاربر منفرد انتخاب میکند. چهار متد مختلف برای مدیریت نشست در Servletها بهشرح زیر وجود دارد:
- HttpSession
- Cookies
- URL Rewriting
- HTML Hidden field
32. درایور JDBC چیست؟
JDBC سرنام Java Database Connectivity یک مولفه نرمافزاری است که به برنامههای جاوا اجازه میدهد با پایگاه داده ارتباط برقرار کنند. درایورهای JDBC دارای چهار نوع زیر هستند:
- JDBC-ODBC bridge driver
- Network Protocol driver
- Database Protocol driver
- Native-API driver
33. رابط JDBC Connection چیست؟
ارتباطات نشستها بین پایگاه داده و برنامههای جاوا را تعریف میکند. رابط JDBC Connection بخشی از بسته java.sql است و اطلاعات نشست را برای یک پایگاه داده خاص ارائه میدهد. متدهای اصلی در دسترس برای رابط اتصالات بهشرح زیر است:
- createStatement: برای ایجاد یک شیء دستوری خاص برای افزودن دستورات SQL به پایگاه داده خاص استفاده میشود.
- setAutoCommit: برای تعریف اتصال یک حالت commit به یک دستورالعمل اشتباه یا درست استفاده میشود.
- commit: تمام تغییرات مربوط به آخرین commit را مدیریت میکند و هر پایگاه داده ای را که در حال حاضر توسط شیء Connection نگهداری میشود آزاد میکند.
- rollback: تمام تغییرات انجامشده در تراکنش گذشته یا فعلی را خنثا یا برمیگرداند و پایگاه داده فعلی مرتبط با شیء اتصال را آزاد میکند.
- close: اتصال فعلی را خاتمه میدهد و منابع JDBC را آزاد میکند.
34. ماژولهای مختلف چارچوب Spring را نام ببرید؟
از ماژولهای مهم چارچوب Spring به موارد زیر باید اشاره کرد:
- ماژول Web
- ماژول Struts
- ماژول Servlet
- ماژول کانتیر مرکزی (Core Container)
- برنامهنویسیجنبهگرا (AOP)
- ماژول زمینه برنامه (Application Context)
- ماژول چارچوب MVC
- ماژول انتزاع JDBC و DAO
- ماژول OXM
- ماژول Expression Language
- ماژول Transaction
- ماژول سرویس پیامرسانی جاوا (JMS)
- ماژول یکپارچهسازی ORM
این ماژولها در قالب گروههایی طبقهبندی میشوند. شکل ۲ این موضوع را نشان میدهد.
شکل 2
35. Bean in Spring را توضیح دهید و محدودههای مختلف Spring bean را نام ببرید.
Beans یکی از مفاهیم اساسی چارچوب Spring در مدیریت کارآمد ساختارها است. Spring Bean نشاندهنده کانتینرهای IoC است که شیء تشکیلدهنده ستون فقرات برنامهها را مدیریت میکنند. محدوده دامنهها نقش مهمی در استفاده موثر از Spring Bean در یک برنامه کاربردی دارند. محدوده به ما کمک میکند تا چرخه حیات Spring Bean را درک کنیم. انواع مختلف محدودهها بهشرح زیر است:
- Singleton: بهطور پیشفرض، Spring bean یک محدوده دارد که تنها یک نمونه برای کانتینر Spring IOC را نشان میدهد. بهطوری که شیء یکسانی برای هر درخواست بهاشتراک گذاشته میشود.
- Prototype: هر بار که درخواستی برای یک bean خاص ارائه میشود، یک نمونه جدید برای هر تعریف bean فراخوانی و ایجاد میشود.
- Request: در این محدوده، یک Bean برای هر درخواست HTTP برای آن Bean خاص فراخوانی و ایجاد میشود.
- Session: این محدوده یک Bean منفرد برای یک چرخه عمر در یک نشست سراسری HTTP خاص تعریف میکند.
- Global-session: امکان پیادهسازی یک Bean واحد برای یک چرخه عمر در نشست سراسری HTTP را بهوجود میآورد.