مهم‌ترین سوالات مصاحبه جاوا با بهترین جواب‌ها برای برنامه‌نویسان در تمامی سطوح

نوشته شده توسط امیر ظاهری
زمان مطالعه: 13دقیقه
مهم‌ترین سوالات مصاحبه جاوا با بهترین جواب‌ها برای برنامه‌نویسان در تمامی سطوح

زبان برنامه‌نویسی جاوا یکی از پرکاربردترین زبان‌های برنامه‌نویسی در دنیا است. از این زبان برای توسعه اپلیکیشن‌های موبایل و دسکتاپ توسعه وب، توسعه فناوری‌های کلان‌داده‌ها و بسیاری از کاربردهای دیگر استفاده می‌شود و این روزها، نیاز بالایی به استخدام جاوا وجود دارد. به همین دلیل، در این مقاله می‌خواهیم رایج‌ترین سوالات مصاحبه جاوا را همراه با جواب‌های کامل، به شما برنامه‌نویسان گرامی ارائه دهیم.

با اینکه خود فرآیند دعوت شدن به مصاحبه، به نوعی یک موفقیت محسوب می‌شود، اما پایان راه استخدام نیست. از ده‌ها، صدها یا شاید هزاران نفری که در یک سایت استخدام برای هر فرصت شغلی رزومه ارسال می‌کنند، فقط تعداد معدودی به مصاحبه دعوت می‌شوند و احتمالا از آن تعداد معدود نیز تنها یک نفر برای آن فرصت شغلی، استخدام خواهد شد.

متأسفانه، همیشه فرد شایسته‌تر، مصاحبه موفق‌تری نخواهد داشت زیرا عملکرد خوب در مصاحبه نیازمند آشنایی با تکنیک‌های موفقیت در مصاحبه و مهارت‌هایی مثل کنترل کامل زبان بدن است. بنابراین، حتی اگر فکر می‌کنید که کاندیدای شایسته‌تری نسبت به شما وجود ندارد، باید خودتان را برای جلسه مصاحبه آماده کنید.

آماده شدن برای یک جلسه مصاحبه، مراحل خودش را دارد که اولین و شاید مهم‌ترین آن، تهیه فهرستی از سوالاتی است که احتمال می‌دهید مصاحبه‌کنندگان از شما بپرسند.

در این مقاله می‌توانید مهم‌ترین و رایج‌ترین سوالات مصاحبه جاوا را همراه با بهترین و کامل‌ترین جواب‌ها برای برنامه‌نویسان در تمامی سطوح جونیور، سطح متوسط و سنیور، ببینید. با جاب ویژن همراه باشید.

مطلب مرتبط: راهنمای استخدام برنامه نویس جاوا

سوالات مصاحبه جاوا برای برنامه‌نویسان تازه‌کار

سوالات مصاحبه جاوا جونیور

سوالاتی که از برنامه‌نویسان تازه‌کار یا جونیور پرسیده می‌شود، معمولا سوالات بسیار پایه‌ای است. با این حال، برنامه‌نویسان حرفه‌ای نیز باید برای پاسخ‌گویی به این سوالات، آماده باشند. در زیر، رایج‌ترین سوالاتی که در مصاحبه‌های استخدامی از برنامه‌نویسان جاوا در سطح مبتدی پرسیده می‌شوند، همراه با حواب‌هایی کامل، آورده شده‌اند.

۱- چرا جاوا یک زبان مستقل از پلتفرم است؟

زبان برنامه‌نویسی جاوا به گونه‌ای توسعه یافته است که به هیچ سخت‌افزار یا نرم‌افزاری وابسته نیست زیرا کامپایلر، کد را کامپایل کرده و آن را به بایت کد مستقل از پلتفرم تبدیل می‌کند که می‌تواند روی سیستم‌‌های متعددی اجرا شود.

  • تنها شرطی که سیستم برای اجرای این بایت‌کد باید داشته باشد، نصب بودن محیط زمان اجرا (JRE) روی آن است.

۲- چرا جاوا یک زبان شیء‌گرای خالص نیست؟

جاوا از دیتا تایپ‌های اصلی شامل بایت، boolean، char، short، int، float، long و double استفاده می‌کند و بنابراین، نمی‌توان آن را یک زبان شیء‌گرای خالص دانست.

۳- منظور از instance variables و local variables چیست؟

متغیر نمونه و متغیر محلی

یکی از سوالات مصاحبه اندروید که به احتمال زیاد از یک برنامه‌نویس تازه‌کار پرسیده می‌شود، در رابطه با انواع متغیرها است.

instance variables، متغیر‌هایی هستند که در دسترسی تمامی روش‌های موجود در یک کلاس قرار دارند. آن‌ها خارج از روش‌ها و درون کلاس، اعلان می‌شوند. این متغیرها، ویژگی‌های یک شیء را توصیف می‌کنند و به هر قیمتی، به آن شیء وابسته باقی می‌مانند.

local variables، متغیرهایی هستند که درون یک بلاک، تابع یا کانستراکتور قرار دارند و تنها درون آن‌ها قابل دسترسی می‌باشند. استفاده از متغیر، محدود به اسکوپ بلاک است. هر زمان که یک متغیر درون یک روش اعلان می‌شود، دیگر روش‌های آن کلاس، هیچ اطلاعی در رابطه با آن متغیر محلی ندارند.

۴- منظور از کپسوله‌سازی داده چیست؟

کپسوله سازی داده در جاوا

یکی از سوالات مصاحبه شغلی جاوا که به فراوانی از برنامه‌نویسان جونیور پرسیده می‌شود، در رابطه با مفهوم کپسوله‌سازی است.

  • کپسوله‌سازی داده‌ها یک مفهوم برنامه‌نویسی شی‌ء‌گرا برای مخفی‌سازی ویژگی‌های داده‌ای و رفتار آن‌ها در یک واحد منفرد است.
  • این مفهوم به برنامه‌نویسان کمک می‌کند تا در هنگام توسعه نرم‌افزار، با اطمینان از اینکه هر شیء، به دلیل داشتن روش‌ها، مشخصات و عملکردهای خودش، مستقل از اشیاء دیگر باقی می‌ماند، از روش ماژوله‌سازی پیش بروند.
  • از مفهوم کپسوله‌سازی برای ایمنی مشخصات خصوصی یک شیء استفاده می‌شود و از این رو، برای مخفی‌سازی داده‌ها کاربرد دارد.

استخدام

۵- مفهوم constructor overloading را توضیح دهید

constructor overloading عبارت است از فرآیند ایجاد چندین constructor در یک کلاس شامل همان نام با یک تفاوت در پارامترهای constructor. بسته به تعداد پارامترها و انواع متناظر آن‌ها، تمایز انواع مختلف از constructorها به وسیله کامپایلر انجام می‌شود.

۶- نحوه استفاده از کلمه کلیدی final را در متغیر، روش و کلاس توضیح دهید

تعدادی از سوالات مصاحبه جاوا، چه در سطح تازه‌کار و چه در سطح متوسط یا سنیور، در رابطه با کاربرد کلمات کلیدی مختلف هستند.

در جاوا، کلمه کلیدی final برای تعریف چیزی به عنوان یک ثابت یا خاتمه استفاده می‌شود و نشان‌دهنده‌ یک مودیفایر از نوع non-access است.

  • متغیر final
    • وقتی یک متغیر به صورت final در جاوا اعلان می‌شود، نمی‌توان مقدار آن را پس از معین کردن، تغییر داد.
    • اگر هیچ مقداری به آن متغیر نسبت داده نشود، تنها می‌توان با کانستراکتور کلاس یک مقدار به متغیر نسبت داد.
  • روش final
    • یک روش را که به صوت final اعلان شود، نمی‌توان توسط کلاس‌های فرزند آن بازنویسی یا override کرد.
    • یک کانستراکتور را نمی‌توان به عنوان final مارک کرد زیرا هر زمانی که یک کلاس به ارث می‌رود، کانستراکتورها به ارث برده نمی‌شوند. بنابراین، مارک کردن کانستراکتور به عنوان final، بی‌معنی است و با خطای modifier final not allowed here، مواجه خواهید شد.
  • کلاس final
    • هیچ کلاسی نمی‌تواند از یک کلاس اعلان شده به عنوان final، به ارث برده شود اما کلاس final را می‌توان به کلاس‌های دیگری بسط داد.

۷- آیا می‌توان متد های استاتیک را overload کرد؟

بله. می‌توان دو یا تعداد بیشتری روش را در یک کلاس با یک نام داشت اما باید پارامترهای ورودی، متفاوت باشند.

رزومه ساز

۸- هدف اصلی garbage collection چیست؟

هدف اصلی این فرآیند، خالی کردن حافظه پر شده با object غیرضروری و غیرقابل دسترس در هنگام اجرای برنامه است.

این کار تضمین می‌کند که حافظه به طور بهینه مورد استفاده قرار گیرد اما هیچ تضمینی نمی‌دهد که حافظه کافی برای اجرای برنامه وجود داشته باشد.

۹- چه زمانی می‌توانیم از کلمه کلیدی super استفاده کنیم؟ از رایج‌ترین سوالات مصاحبه جاوا در سطح مبتدی

کلمه کلیدی super برای دسترسی به فیلدهای مخفی و override کردن متدها یا attributeهای کلاس والد، استفاده می‌شود.
در موارد زیر می‌توانیم از این کلمه کلیدی استفاده کنیم:

  • دسترسی به اعضای کلاس والد، زمانی که نام اعضای کلاس والد و کلاسی فرزند، مشابه باشد.
  • برای فراخوانی constructor کلاس والد درون کلاس فرزند.
  • دسترسی به متدهای کلاس والد در زمانی که کلاس‌های فرزند، آن‌ها را بازنویسی کرده‌اند.

۱۰- آیا می‌توان متدهای استاتیک را overload کرد؟

خیر. نمیتوان برای متد های استاتیک چندریختی (polymorphism) استفاده کرد.

عملیات override در زمان اجرا رخ می‌دهد اما متدهای استاتیک در زمان کامپایل بارگذاری و جستجو می‌شوند. از این رو، این متدها را نمی‌توان override کرد.

نمونه سوالات مصاحبه جاوا در سطح متوسط

سوالات مصاحبه سطح متوسط جاوا

برای مشاهده آگهی‌های استخدام برنامه نویس Java با سابقه کار بین ۲ تا ۵ سال، کلیک کنید.

۱- تفاوت HashSet با TreeSet چیست؟

با این که هم HashSet و هم TreeSet، همگام یا thread-safe نیستند و همچنین تضمین می‌کنند که داده تکراری وارد لیست نشود؛
خواص‌‌‌‌های زیر سبب تمایز HashSet از TreeSet می‌شوند.

پیاده سازی یا Implementation: برای یک HashSet، از hash table برای ذخیره‌سازی عناصر به شیوه‌ای غیرمرتب، استفاده می‌شود. با این حال، TreeSet از درخت سیاه-قرمز، برای ذخیره‌سازی عناصر به شیوه‌ای مرتب، استفاده می‌کند.

پیچیدگی/Performance: برای اضافه کردن، بازیابی و حذف عناصر، پیچیدگی زمانی، برای یک HashSet به صورت (1)O است. پیچیدگی زمانی برای اجرای همان عملیات برای TreeSet کمی بیشتر و مساوی با (log n)O است. در مجموع، عملکرد HashSet در مقایسه با TreeSet سریع‌تر است.

متدها: ()hashCode و ()equals روش‌هایی هستند که توسط HashSet برای مقایسه بین اشیاء استفاده می‌شوند. در مقابل، ()compareTo و ()compare روش‌هایی هستند که توسط TreeSet برای تسهیل مقایسه اشیاء به کار می‌روند.

نوع اشیاء: اشیاء ناهماهنگ و null را می‌توان با کمک HashSet، ذخیره کرد. در مورد TreeSet، در زمان اجرا خطا رخ خواهد داد

۲- تفاوت بین JVM، JRE و JDK در جاوا چیست؟

یکی از سوالات مصاحبه جاوا که به احتمال زیاد از هر برنامه‌نویس با تجربه‌ای پرسیده می‌شود، در رابطه با تفاوت بین سه واژه JDK، JRE و JVM است.

وجه تفاوت JDK JRE JVM
عبارت کامل Java Development Kit به معنی کیت توسعه جاوا Java RunTime Environment به معنی محیط زمان اجرا جاوا Java Virtual Machine به معنی ماشین مجازی جاوا
تعریف JDK یک کیت کامل برای توسعه نرم‌افزارهای جاوا است. این کیت شامل JRE، JavaDoc، کامپایلر، ابزارهای دیباگ و … است. JRE یک پکیج نرم‌افزاری فرآهم‌آورنده کتابخانه‌های کلاس جاوا، JVM و تمامی کامپوننت‌های مورد نیاز برای اجرای اپلیکیشن‌های جاوا است. ماشین مجازی جاوا در واقع چیزی است که ما با آن برنامه هایی که به زبان برنامه نویسی جاوا نوشته ایم را اجرا می کنیم. ما تنظیمات JVM را پیکربندی می کنیم و بعد به آن اطمینان می کنیم تا در زمان اجرای برنامه منابع نرم افزار را مدیریت کند.
کاربرد اصلی JDK عمدتا برای توسعه و اجرای کد استفاده می‌شود. JRE عمدتا به منظور ایجاد محیطی برای اجرای کد استفاده می‌شود. JVM مشخصات فنی برای پیاده سازی JRE را فراهم می آورد
ابزارها JDK ابزارهایی مثل کامپایلر، ابزارهای دیباگ و … برای توسعه کد، فرآهم می‌آورد JRE کتابخانه‌ها و کلاس‌های مورد نیاز JVM را برای اجرای برنامه، فرآهم می‌آورد. JVM دارای هیچ ابزاری نیست اما ویژگی‌های اجراء را فرآهم می‌آورد.
خلاصه  ابزارهای توسعه + (JRE)=JDK کتابخانه‌ها برای اجرای اپلیکیشن+ (JVM)=JRE محیط زمان اجرا برای اجرای بایت‌کد جاوا = JVM

۳- تفاوت بین String، StringBuffer و StringBuilder در جاوا چیست؟

حافظه ذخیره‌سازی: در String، یک String pool به عنوان ناحیه ذخیره‌سازی عمل می‌کند. این در حالی است که ناحیه ذحیره‌سازی برای StringBuffer و StringBuilder،heap memory است.

قابلیت تغییرپذیری: String، غیرقابل تغیر یا immutable است و با هر تغیر یه آبجکت جدید ساخته میشود و آبجکت قبلی از حافظه حذف میشود اما StringBuilder و StringBuffer تغیر پذیر یا mutable هستند.

کارایی: کار کردن با String بسیار کند است. در مقابل، StringBuilder در اجرای عملیات، از همه سریع‌تر است. سرعت StringBuffer، بیش از String و کمتر از StringBuilder است (برای مثال، اضافه کردن کردن یک کاراکتر در یک StringBuilder خیلی سریع‌تر از یک String انجام می‌شود زیرا String به دلیل immutable بودن، حافظه جدیدی برای String جدید، مورد نیاز است).

Thread-Safe: در یک عملیات پردازش multi thread، از StringBuffer و StringBuilder استفاده می‌شود اما از String استفاده نمی‌شود. با این حال، StringBuilder برای عملیات single thread و StringBuffer برای عملیات multi thread مناسب می‌باشد.

۴- اهمیت Reflection در جاوا چیست؟

واژه reflection برای توصیف قابلیت inspection یک کد روی یک کد دیگر یا روی خودش یا قابلیت بازرسی کد توسط سیستم و اصلاح آن در طول زمان اجرا، استفاده می‌شود.

فرض کنید که یک شیء از یک نوع ناشناخته و یک روش ()fooBar داریم که نیاز است آن را برای شیء، فراخوانی کنیم. سیستم تایپینگ استاتیک جاوا امکان استفاده از این روش را فرآهم نمی‌آورد؛ مگر اینکه پیش از این کار، نوع شیء مشخص باشد. برای این کار می‌توانیم از reflection استفاده کنیم که به کد امکان اسکن کردن شیء و تشخیصِ داشتن روشی به نام ()fooBar را می‌دهد و فقط در این صورت، در صورت نیاز روش را فرا می‌خواند.

۵- تفاوت کانستراکتور و روش در یک کلاس جاوا چیست؟ از رایج‌ترین سوالات جاوا در سطح متوسط

کانستراکتور روش
کانستراکتور برای شروع حالت شیء استفاده می‌شود. روش برای بروز رفتار شیء استفاده می‌شود.
کانستراکتور نوع بازگشت ندارد. روش باید یک نوع بازگشت داشته باشد؛ حتی اگر روش هیچ چیزی را باز نگرداند، باید یک نوع return خالی داشته باشد.
کانستراکتور به صورت ضمنی فراخوانده می‌شود. روش باید در شیء به صورت ضمنی فراخوانده شود.
اگر کانستراکتور تعریف نشده باشد، یک کانستراکتور پیش‌فرض توسط کامپایلر جاوا ایجاد می‌شود.‍ اگر روش تعریف نشده باشد، کامپایلر آن را ایجاد می‌کند.
نام کانستراکتور باید با نام کلاس یکی باشد. نام روش می‌تواند هر چیزی، حتی نام کلاس باشد.
کانستراکتور نمی‌تواند به عنوان final مارک شود (در بالا توضیح داده شد) روش می‌تواند به عنوان final مارک شود.
دستورالعمل‌های متغیر final درون یک کانستراکتور ممکن هستند و اسکوپ این کانستراکتور، کل کلاس و اشیاء آن را شامل می‌شود. یک متغیر final اگر در یک روش شروع شود، تضمین می‌کند که روش تنها می تواند در اسکوپ خودش تغییر کند.

۶- جاوا به صورت پدیده «pass by value» کار می‌کند یا به صورت پدیده «pass by reference»؟

جاوا همیشه به صورت pass by value کار می‌کند. هیچ چیزی تحت عنوان pass by reference در جاوا وجود ندارد. با این حال، وقتی که در هر روشی، شیء پاس داده می‌شود، آدرس مقدار به دلیل ماهیت object handling در جاوا، پاس داده می‌شود.

وقتی یک شیء پاس داده می‌شود، یک کپی از مرجع توسط جاوا ایجاد می‌شود و به روش، پاس داده می‌شود. اشیاء، موقعیت مشابهی در حافظه را هدف می‌گیرند. دو مورد ممکن است درون یک روش اتفاق بیافتد:

مورد اول: وقتی که شیء، موقعیت دیگری را هدف می‌گیرد، تغییر ایجاد شده روی آن شیء، پیش از پاس داده شدن آن به روش در شیء اصلی منعکس نمی‌شود زیرا مرجع، موقعیت دیگری را هدف می‌گیرد.

مورد دوم: وقتی که منابع شیء تغییری نکرده باشند، از آن‌جایی که یک نسخه از منبع شیء اصلی داریم که موقعیت مشابهی روی حافظه را هدف گرفته است، هر تغییر در محتوای شیء در شیء اصلی منعکس می‌شود.

۷- وقتی باید آپدیت‌های زیادی روی داده‌ها انجام شود، String بهتر است یا StringBuffer؟

از دیگر نمونه سوالات مصاحبه جاوا که معمولا از برنامه‌نویسان سطح متوسط پرسیده می‌شود، می‌توان به این مورد اشاره داشت.

StringBuffer، جهش‌پذیر است و ماهیتی داینامیک دارد اما String، غیر قابل جهش است. هر به روز‌ رسانی یا تغییر در String سبب ایجاد یک String جدید می‌شود و از این رو، مخزن String را با اشیاء غیرضروری، پر می‌کند. بنابراین، در مواردی که به روز رسانی‌های زیادی باید روی داده‌ها انجام شود، همیشه، اولویت با StringBuffer است زیرا اشیاء String اضافی تولید نمی‌کند.

۸- چگونه امکان سریالی شدن ویژگی‌های یک کلاس را در جاوا فراهم بیاوریم؟

برای انجام این کار، می‌توان ویژگی را همراه با کاربرد کلمه کلیدی transient، اعلان کرد.

۹- یک exception چگونه در کد، تکثیر می‌شود؟

تکثیر استثنا

وقتی یک exception رخ می دهد، ابتدا برای تعیین موقعیت کش بلاک منطبق، شروع به جستجو می‌کند. در صورتی که موقعیت کش بلاک منطبق، شناسایی شود، بلاک، اجرا خواهد شد. در غیر این صورت، exception در سرتاسر call stack تکثیر می‌شود و به درون روش caller وارد می‌شود که در آن جا، فرآیند انطباق کش بلاک انجام می‌شود. این تکثیر تا زمانی که کش بلاک منطبق پیدا شود، ادامه پیدا می‌کند. اگر کش بلاک منطبق پیدا نشود، propagation در روش اصلی خاتمه میابد.

۱۰- اگر چندین روش اصلی درون یک کلاس در جاوا وجود داشته باشد چه اتفاقی خواهد افتاد؟

برنامه نمی‌تواند کامپایل شود زیرا کامپایلر می‌گوید که روش قبلا درون کلاس، تعریف شده است.

سوالات مصاحبه جاوا پیشرفته

از آن‌جایی که تعداد برنامه‌نویسان جاوا نسبتا زیاد است، برای اینکه بتوانید به عنوان یک برنامه‌نویس جاوا، حقوق بالایی داشته باشید، باید به سطح حرفه‌ای برسید و برای رسیدن به این سطح، بیش از ۵ سال سابقه کار مورد نیاز است.
برای مشاهده آگهی‌های استخدام جاواکار حرفه‌ای، کلیک کنید.

۱- چرا با اینکه وراثت یک مفهوم OOPs محبوب است، نسبت به کامپوزیشن، کارایی کمتری دارد؟

در سناریوهای زیر، کامپوزیشن نسبت به وراثت برتری دارد:

  • وراثت چندگانه در جاوا امکان‌پذیر نیست. کلاس‌ها را می‌توان تنها از یک سوپرکلاس، به دست آورد. در مواردی که عملکردهای چندگانه مورد نیاز باشد، کامپوزیشن، در اولویت است. برای مثال، در مورد اطلاعات خواندن و نوشتن درون یک فایل، عملکردهای خواننده و نویسنده را می‌توان از طریق در نظر گرفتن آن‌ها به عنوان اعضای خصوصی، انجام داد.
  • کامپوزیشن به حصول انعطاف‌پذیری بالا کمک می‌کند و مانع از شکستن کپسوله‌ها می‌شود.
  • امکان تست کردن یونیت در کامپوزیشن وجود دارد اما در وراثت، خیر. وقتی یک برنامه‌نویس می‌خواهد یک کلاس ایجاد کننده یک کلاس دیگر را تست کند، می‌توان شیء Mock را برای مشخص کردن کلاس ایجاد شده، خلق کرد تا تست کردن، راحت‌تر شود. این تکنیک، بدون کمک وراثت امکان‌پذیر نیست زیرا کلاس مشتق شده را نمی‌توان بدون کمک سوپرکلاس در وراثت، تست کرد.
  • ماهیت جفت شده‌ی شل در کامپوزیشن، نسبت به ماهیت جفت شده‌ی صفت در وراثت، ترجیح داده می‌شود.

۲- ایجاد یک String در برنامه‌نویسی با استفاده از ()new چه تفاوتی با ایجاد string از طریق لیترال دارد؟

وقتی یک string با کمک یک assignment operator ایجاد می‌شود، سبب می‌شود که string وارد string constant pool شود؛ به طوری که ممکن است String Interning رخ دهد. این شیء یکسان در reference heap یک سفقشهدل متفاوت خواهد بود؛ اگر محتوای هر دوی آن‌ها، یکی باشد.

در مقابل، وقتی که ایجاد string از طریق عملگر ()new انجام می‌شود، Interning رخ نمی‌دهد. شیء در heap memory ایجاد می‌شود؛ حتی اگر content object مشابهی، موجود باشد.

۴- آیا محدودیت حافظه در یک برنامه، حتی با وجود داشتن garbage collector، امکان‌پذیر است؟

بله. حافظه یک برنامه می‌تواند حتی با وجود داشتن یک garbage collector، پر شود. garbage collection، به شناسایی و حذف اشیائی که دیگر برای برنامه لازم نیستند، کمک می‌کند تا حافظه پر شده توسط آن‌ها را خالی کند.

در یک برنامه، اگر یک شیء، غیرقابل دسترسی باشد، garbage collection برای حذف آن شیء اجرا خواهد شد. اگر میزان حافظه مورد نیاز برای ایجاد یک شیء جدید کافی نباشد، حافظه اشغال شده توسط اشیاء غیرضروری در اسکوپ با کمک garbage collector، آزاد می‌شود. زمانی یک برنامه با محدودیت حافظه مواجه می‌شود که حافظه آزاد شده برای ایجاد اشیاء جدید، کافی نباشد.

به علاوه، اگر اشیاء به صورتی ایجاد شوند که در اسکوپ باقی بمانند و حافظه را اشغال کنند، پر شدن کامل heap memory، رخ خواهد داد. برنامه‌نویس باید از dereference شدن شیء بعد از تکمیل کارش، مطمئن شود. با اینکه garbage collector، نهایت تلاش خود را برای بازیابی حافظه تا جای ممکن انجام می‌دهد، باز هم امکان محدودیت حافظه وجود دارد.

۵- چرا synchronization ضروری است؟

اجرای همزمان فرآیندهای مختلف، از طریق synchronization امکان‌پذیر است. وقتی threadهای مختلف، یک منبع مشترک دارند، ممکن است وضعیت‌هایی ایجاد شود که در آن‌ها، چندین thread، به یک منبع مشترک نیاز داشته باشند.

synchronization به حل این مشکل کمک می‌کند و منبع، در یک زمان توسط یک single thread، به اشتراک گذاشته می‌شود. برای مثال، تصور کنید که یک URL دارید و باید تعداد درخواست‌های ایجاد شده برای دسترسی به آن را بدانید. دو درخواست همزمان می‌توانند سبب خطا در شمارش شوند.

اگر یک thread، تحت عنوان Thread1، تعداد درخواست‌ها را ۱۰ تا برآورد کند، از یک تا ۱۱ افزایش خواهد یافت. اگر thread دیگری، به عنوان مثال، Thread2، تعداد درخواست‌ها را ۱۰ تا برآورد کند، از یک تا ۱۱ افزایش خواهد یافت. بنابراین، عدم انطباق در مقادیر شمارش شده رخ می‌دهد، زیرا مقدار نهایی قابل انتظار، ۱۲ می‌باشد اما مقدار نهایی واقعی، باید ۱۱ باشد.

حالا، تابع ()increase همگام‌سازی می‌شود؛ به طوری که امکان دسترسی همزمان وجود نخواهد داشت.
اگر Thread1، تعداد درخواست‌ها را ۱۰ عدد شمارش کند، از ۱ به ۱۱ افزایش خواهد یافت. سپس، Thread2، تعداد درخواست‌ها را ۱۱ تا شمارش خواهد کرد و از یک تا ۱۲ افزایش خواهد یافت. بنابراین، انطباق و در نتایج شمارش ایجاد خواهد شد.

۶- آیا می‌توانید چرخه حیات thread جاوا را توضیح دهید؟

از دیگر سوالات مصاحبه جاوا می‌توان به سوال در رابطه با چرخه حیات جاوا اشاره کرد. چرخه حیات thread جاوا (Java Thread Life Cycle) به شرح زیر است:

  • جدید: وقتی نمونه‌ی thread ایجاد می‌شود و روش ()start فراخوانده نشده است، thread، زنده و بنابراین، در یک حالت جدید در نظر گرفته می‌شود.
  • قابل اجرا: با فراخوانی روش ()start، پیش از فراخوانی ()run به وسیله JVM، اصطلاحا گفته می‌شود که thread در حالت قابل اجرا (Runnable) است. همچنین، یک thread می‌تواند از حالت انتظار یا حالت sleep نیز وارد این حالت شود.
  • در حال اجرا: وقتی روش ()run، فراخوانده و و اجرای thread شروع می‌شود، اصطلاحا گفته می‌شود که thread در حال اجرا (running) است.
    غیرقابل اجرا (بلاک شده/در حال انتظار): وقتی که حتی با وجود زنده بودن thread، امکان اجرای آن وجود ندارد، thread باید به یک وضعیت قابل اجرا برود.

    • اگر یک thread بخواهد تا وارد کد synchronization شود اما به دلیل باز بودن یک thread دیگر در آن بلاگ synchronize شده در همان شیء، نتواند synchronization شود، اصطلاحا گفته می‌شود که thread، بلاک شده است. thread اول باید صبر کند تا thread دیگر، از بلاک synchronize شده خارج شود.
    • اگر thread در حالت انتظار برای سیگنال اجرا از طرف یک thread دیگر باشد، به این معنی که در انتظار دریافت پیام برای شروع کار باشد، اصطلاحا گفته می‌شود که thread در حالت انتظار قرار دارد.
  • خاتمه یافته: با تکمیل اجرای روش ()run، اصطلاحا گفته می‌شود که thread وارد گام خاتمه شده و زنده در نظر گرفته نمی‌شود.

در فلوچارت زیر می‌توانید چرخه حیات نخ جاوا را به طور کامل مشاهده کنید:

چرخه حیات جاوا

۷- آیا می‌توان یک کلاس یا پکیج مشابه را دوبار در جاوا ایمپورت کرد و در این صورت چه اتفاقی در طول زمان اجرا رخ خواهد داد؟

این امکان وجود دارد که یک کلاس یا پکیج را بیش از یک بار در جاوا ایمپورت کرد. با این حال، از آن‌جایی که JVM به صورت درونی، پکیج یا کلاس را تنها یک بار بارگذاری می‌کند، این کار هجو است.

۸- منظور از marker interfaceها در جاوا چیست؟

یکی از سوالات مصاحبه جاوا پیشرفته در رابطه با marker interfaceها در جاوا است. marker interfaceها که tagging interfaces هم نامیده می‌شود، رابط‌هایی هستند که هیچ روش و ثابتی در آن‌ها تعریف نشده است. آن‌ها برای کمک کردن به کامپایلر و JVM ساخته شده‌اند تا بتوانند اطلاعات مرتبط با زمان اجرا را با در نظر گرفتن اشیاء، به دست بیاورند.

۹- آیا اگر کد (0)System.exit در پایان یک try block نوشته شود، بلاک finally اجرا خواهد شد؟

خیر. کنترل پست برنامه (0)System.exit بلافاصله از بین می‌رود و برنامه خاتمه پیدا می‌کند و بنابراین، بلاک finally هرگز اجرا نمی‌شود.

۱۰- آیا می‌توان یک کانستراکتور از یک کلاس را درون کانستراکتور دیگری فراخواند؟ از رایج‌ترین سوالات مصاحبه شغلی جاوا

بله، این مفهوم، زنجیره کانستراکتور نام دارد و می‌توان با استفاده از ()this این کار را انجام داد.

چگونه آگهی‌های استخدام جاوا را پیدا کنیم و برای آن‌ها رزومه بفرستیم؟

شما می‌توانید با مراجعه به سایت استخدام جاب ویژن، تعداد زیادی فرضت شغلی برای برنامه‌نویسی جاوا در شرکت‌های معتبر را مشاهده کرده و پس از ساخت رزومه با کمک سرویس رزومه ساز رایگان جاب ویژن، برای این فرصت‌های شغلی، رزومه ارسال کنید.

جمع‌بندی

زبان برنامه‌نویسی جاوا در حال حاضر یکی از محبوب‌ترین زبان‌های برنامه‌نویسی است. این زبان کاربردهای متعددی دارد و بنابراین، شرکت‌های زیادی، روزانه، آگهی‌‌های شغلی متعددی برای جذب برنامه‌نویسان جاوا منتشر می‌کنند. با این حال، برنامه‌نویسان جاوا نیز کم نیستند و اگر می‌خواهید در رقابت برای تصاحب بهترین فرصت‌های شغلی برنامه‌نویسی جاوا موفق باشید، باید با آمادگی کامل در جلسات مصاحبه شرکت کنید.

شما می‌توانید با مراجعه به سایت کاریابی جاب ویژن برای جدیدترین آگهی‌های استخدام برنامه‌نویس جاوا رزومه بفرستید.

ممکن است پس از از ارسال رزومه برای آگهی استخدام برنامه نویس Java به مصاحبه شغلی دعوت شوید و باید بتوانید با آمادگی کامل به سوالات مصاحبه جاوا که مهم‌ترین‌های آن‌ها را در بالا برای شما آوردیم، جواب دهید تا شانس استخدام شما افزایش یابد.

منبع: InterviewBit

بدون دیدگاه