CodeGym /وبلاگ جاوا /Random-FA /21 سوال برتر مصاحبه جاوا
John Squirrels
مرحله
San Francisco

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

در گروه منتشر شد
هزاران سوال مصاحبه جاوا وجود دارد و ما نمی توانیم همه آنها را در یک مقاله جمع آوری کنیم. با این حال، به گفته مدیران منابع انسانی شرکت‌های فناوری اطلاعات، در اینجا می‌توانید سوالات بسیار رایج مصاحبه جاوا را بیابید. 21 سوال برتر مصاحبه جاوا - 1
  1. "پیاده کردن" public static void main(String args[]).

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

    • publicیک اصلاح کننده دسترسی است. ما از آن برای تعیین دسترسی به این روش استفاده می کنیم. در اینجا اصلاح کننده "public" است، بنابراین هر کلاسی به این متد دسترسی دارد.

    • static. این کلمه کلیدی جاوا به این معنی است که ما از این روش بدون ایجاد یک شیء جدید از یک کلاس استفاده می کنیم.

    • Voidنوع برگشتی روش است. یعنی متد هیچ مقداری را بر نمی گرداند.

    • mainنام روش است. JVM آن را به عنوان نقطه ورود به یک برنامه کاربردی می داند (این برنامه باید دارای امضای خاصی باشد). Mainروشی است که در آن اجرای اصلی اتفاق می افتد.

    • String args[]. این پارامتری است که به روش اصلی منتقل می شود. در اینجا ما آرگومان هایی از نوع String را داریم که برنامه جاوا شما هنگام اجرای آن می پذیرد. می توانید آنها را در ترمینال تایپ کنید.

  2. تفاوت بین equals()و چیست ==؟

    اول، " ==" یک عملگر است در حالی که equals()یک روش است. ما از ==عملگر برای مقایسه مرجع (یا مقایسه آدرس) و equals()روش برای مقایسه محتوا استفاده می کنیم. این بدان معنی است که ==بررسی می کند که آیا هر دو شی به یک مکان حافظه اشاره می کنند در حالی که equals()مقادیر موجود در اشیاء را مقایسه می کند.

  3. آیا می توانیم برنامه ای را بدون main()متد اجرا کنیم؟

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

    می توانید از بلوک استاتیک برای مقداردهی اولیه عضو داده ایستا استفاده کنید. mainقبل از متد، در زمان بارگذاری کلاس اجرا می شود .

    class Example{
     Static{
    System.out.println("static block is invoked");
    }
      public static void main(String args[]){
       System.out.println("Now main method");
      }
    }

    خروجی این است:

    static block is invoked
    Now main method
  4. در مورد غیبت کلی روش اصلی چطور؟ اگر می خواهید یک کلاس معمولی را بدون متد اصلی اجرا کنید، با خطای بعدی مواجه می شوید: متد اصلی در کلاس Test یافت نشد، لطفاً متد اصلی را به صورت: public static void main (String [] args) یا یک برنامه JavaFX تعریف کنید. کلاس باید javafx.application.Application را گسترش دهد. خود خطا می گوید که اگر این یک برنامه JavaFX است و کلاس از javafx.application.Application به ارث برده شده است، پس ممکن است.
  5. شی چیست immutable؟ آیا می توانید immutableشی ایجاد کنید؟

    شما نمی توانید اشیاء یک immutableکلاس را پس از ایجاد آنها تغییر دهید. بنابراین هنگامی که آنها را ایجاد می کنید، نمی توانید آنها را تغییر دهید. اگر بخواهید Immutableشی را تغییر دهید، یک شی جدید (کلون) دریافت می کنید و این کلون را در حین ایجاد تغییر می دهید.

    یک مثال خوب این است که در جاوا Stringاست . immutableاین بدان معنی است که شما نمی توانید خود شی را تغییر دهید، اما می توانید مرجع را به شی تغییر دهید.

  6. چند شی در کد زیر ایجاد شده است؟

    یکی از سوالات مصاحبه فنی جاوا که جایگزین شماره 4 می شود.

    String s1="Hello";
    String s2="Hello";
    String s3="Hello";

    پاسخ "تنها یک" است زیرا جاوا دارای یک String Pool است. وقتی یک شی String را با استفاده از عملگر new() ایجاد می کنیم، یک شی جدید در حافظه پشته ایجاد می کند. اگر از نحو تحت اللفظی String استفاده کنیم، مانند مثال ما، ممکن است یک شی موجود را از String Pool برگرداند، اگر از قبل وجود داشته باشد.

  7. چند شی در کد زیر ایجاد شده است؟

    String s = new String("Hello");

    2 شی وجود دارد. یکی در استخر ثابت رشته ای (اگر قبلاً وجود نداشته باشد) و دیگری در پشته است.

  8. Stringتفاوت بین و کلاس StringBuilderها StringBufferدر جاوا چیست ؟

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

    اول از همه Stringیک کلاس Immutable است. این بدان معنی است که شما نمی توانید محتوای آن را پس از ایجاد تغییر دهید. کلاس های while StringBufferو StringBuilderقابل تغییر هستند، بنابراین می توانید بعداً آنها را تغییر دهید. اگر محتوای شی را تغییر دهیم String، رشته جدیدی ایجاد می کند، بنابراین رشته اصلی را تغییر نمی دهد. به همین دلیل عملکرد با StringBufferبهتر از با است String.

    تفاوت اصلی بین StringBufferو StringBuilderاین StringBufferروش ها همگام هستند در حالی که StringBuilder'ها نیستند.

  9. آیا تفاوتی در آن وجود دارد Stringکه با استفاده از لفظ و با new()عملگر ایجاد شده است؟

    وجود دارد. اگر یک String با عملگر ایجاد کنیم new()، در پشته و در استخر رشته ظاهر می شود (اگر قبلاً وجود نداشته باشد). اگر یک Stringبا استفاده از یک کلمه واقعی ایجاد کنید، در استخر رشته ایجاد می شود (اگر قبلا وجود نداشته باشد). حوض رشته ای یک فضای ذخیره سازی در داخل پشته است که حروف الفاظ رشته را ذخیره می کند.

  10. آیا می توانید در جاوا override privateیا متد کنید؟static

    یکی از سوالات مصاحبه پیچیده جاوا برای تازه کارها. شما واقعا نمی توانید در جاوا override privateیا متد کنید.static

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

    Staticمتدها نیز نمی توانند نادیده گرفته شوند، زیرا staticمتدها بخشی از خود کلاس هستند و بخشی از هیچ شیء کلاس نیستند. مطمئناً می‌توانید همان staticروش را با امضای یکسان در کلاس‌های فرزند اعلام کنید، اما دوباره، آنها به عنوان روش‌های جدید تلقی خواهند شد.

  11. تفاوت بین Abstract ClassوInterface

    یکی از سوالات مصاحبه محبوب توسعه دهندگان جاوا که بر اصول OOP است. اول از همه، در جاوا interfaceیک رفتار تعریف می کند و abstract classسلسله مراتب ایجاد می کند.

    کلاس انتزاعی رابط
    امکان داشتن بدنه متد (روش های غیرانتزاعی) در کلاس انتزاعی وجود دارد رابط فقط می تواند متدهای انتزاعی داشته باشد. در جاوا 8 یا جدیدتر، امکان تعریف روش های پیش فرض و پیاده سازی مستقیم آنها در رابط فراهم شد. همچنین رابط ها در جاوا 8 می توانند متدهای ثابت داشته باشند.
    متغیرهای نمونه می توانند در کلاس انتزاعی باشند یک رابط نمی تواند متغیرهای نمونه داشته باشد.
    سازندگان مجاز هستند رابط نمی تواند سازنده داشته باشد.
    روش های استاتیک مجاز است روش های استاتیک مجاز نیستند
    کلاس فقط می تواند یک والد انتزاعی داشته باشد یک رابط ممکن است کلاس های مختلفی را پیاده سازی کند
    کلاس انتزاعی ممکن است اجرای اینترفیس را فراهم کند. رابط نمی تواند اجرای کلاس انتزاعی را ارائه دهد.
    یک کلاس انتزاعی مجاز است کلاس جاوا دیگر را گسترش دهد و چندین رابط جاوا را پیاده سازی کند. یک رابط مجاز است فقط رابط جاوا دیگر را گسترش دهد.
    یک کلاس انتزاعی جاوا می تواند اعضای کلاس خصوصی و محافظت شده داشته باشد اعضای یک رابط جاوا به طور پیش فرض عمومی هستند
  12. آیا می توانیم staticمتغیرها و متدها را در یک abstractکلاس تعریف کنیم؟

    بله، امکان تعریف staticمتغیرها و متدها در abstractمتد وجود دارد. هیچ الزامی برای ایجاد یک شی برای دسترسی به زمینه ایستا وجود ندارد. abstractبنابراین ما اجازه داریم با استفاده از نام کلاس به متن استاتیک اعلام شده در داخل کلاس دسترسی داشته باشیم abstract.

  13. چه نوع مناطق حافظه توسط JVM اختصاص داده می شود؟

    Class Area ساختارهای perclass را ذخیره می کند، به عنوان مثال، استخر ثابت زمان اجرا، فیلدها، داده های متد و همه کدهای متدها.

    Heap یک منطقه داده در زمان اجرا است که در آن حافظه به اشیاء تخصیص داده می شود.

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

    ثبت شمارنده برنامه حاوی آدرسی از دستورالعمل ماشین مجازی جاوا است که در حال حاضر اجرا می شود.

    Native Method Stack شامل تمام متدهای بومی است که در برنامه استفاده می شود.

  14. چرا ارث چندگانه در جاوا مجاز نیست؟

    واقعاً پیچیده خواهد بود. سه کلاس A, Bو Cو Cارث می برد Aو B. حالا Aو Bکلاسها هم همین متد را دارند و شما آن را از یک شی کلاس فرزند صدا میزنید... کدام یک؟ A's یا B's؟ اینجا ما ابهام داریم.

    اگر سعی کنید دو کلاس را به ارث ببرید، جاوا خطای زمان کامپایل را ارائه می دهد.

  15. آیا می توانیم main()روش را اضافه بار کنیم؟

    مطمئناً، mainبا استفاده از اضافه بار متد، به ما اجازه داده می شود تا روش های زیادی را در یک برنامه جاوا داشته باشیم. آن را امتحان کنید!

  16. آیا می توانیم یک سازنده را به عنوان اعلان کنیم final؟

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

  17. آیا می توانیم یک رابط را به عنوان اعلان کنیم final؟

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

  18. تفاوت بین static bindingو چیست dynamic binding؟

    مواردی bindingکه در زمان کامپایل توسط کامپایلر قابل حل است static، باند اولیه نامیده می شود. Bindingاز همه روش staticها privateو finalدر زمان کامپایل انجام می شود.

    در Dynamic bindingکامپایلر نمی توان متدی را برای فراخوانی انتخاب کرد. Overriding مثال کاملی از dynamic binding. در overriding هر دو کلاس والد و فرزند روش یکسانی دارند.

    Static Binding
    class Cat{
     private void talk()
    {System.out.println("cat is mewing...");
    }
    
     public static void main(String args[]){
      Cat cat=new Cat();
      cat.talk();
     }
    }
    Dynamic Binding
    class Animal{
     void talk(){
    System.out.println("animal is talking...");
    }
    }
    
    class Cat extends Animal{
     void talk(){
    System.out.println("cat is talking...");
    }
     public static void main(String args[]){
      Animal animal=new Cat();
      animal.talk();
     }
    }
  19. چگونه یک کلاس فقط خواندنی در جاوا ایجاد کنیم؟

    با خصوصی کردن تمام فیلدهای کلاس می توانید این کار را انجام دهید. کلاس فقط خواندنی فقط متدهای دریافت کننده دارد که ویژگی خصوصی کلاس را به mainمتد برمی گرداند. شما قادر به تغییر این ویژگی نیستید، دلیل آن عدم وجود روش تنظیم کننده است.

    public class HockeyPlayer{
    private String team ="Maple leaf";
    public String getTeam(){
    return team;
    }
    }
  20. چگونه یک کلاس فقط نوشتن در جاوا ایجاد کنیم؟

    دوباره، شما باید تمام فیلدهای کلاس را بسازید private. حال، کلاس فقط نوشتن شما باید فقط متدهای تنظیم کننده داشته باشد و هیچ گیرنده ای نداشته باشد. بنابراین، ما نمی توانیم ویژگی های کلاس را بخوانیم.

    public class HockeyPlayer{
    private String team;
    public void setTeam(String college){
    this.team = team;
    }
    }
  21. هر tryبلوک باید یک catchبلوک به دنبال داشته باشد، اینطور نیست؟

    جواب منفی. یک ضرورت نیست. هر tryبلوک می تواند بدون catchبلوک باشد. می‌تواند با یک catchblock یا یک بلوک نهایی یا حتی بدون آنها دنبال شود.

    public class Main{
         public static void main(String []args){
            try{
                int variable = 1;
                System.out.println(variable/0);
            }
            finally
            {
                System.out.println("the other part of the program...");
            }
         }
    }

    خروجی:

    Exception in thread main java.lang.ArithmeticException:/ by zero
    the other part of the program...

    یک مثال دیگر:
    class Main {
            public static void main(String[] args) throws IOException {
                try(InputStreamReader inputStreamReader = new InputStreamReader(System.in);
                    BufferedReader reader = new BufferedReader(inputStreamReader)){
                    System.out.println("test");
                }
            }
        }

    خروجی:

    test

    PS: قبل از جاوا 8 متدها در اینترفیس ها می توانستند فقط انتزاعی باشند. در جاوا 8 یا جدیدتر، امکان تعریف روش های پیش فرض و پیاده سازی مستقیم آنها در رابط فراهم شد.
  22. throwتفاوت بین و کلمات کلیدی چیست throws؟

    Throwsبرای اعلام یک استثنا استفاده می شود، بنابراین شبیه به try-catchبلوک کار می کند. Throwکلمه کلیدی برای پرتاب یک استثنا به صراحت از یک متد یا هر بلوک کد دیگری استفاده می شود.

    Throwبه دنبال نمونه ای از Exceptionکلاس و پرتاب ها با نام کلاس های استثنا دنبال می شود.

    Throwدر بدنه روش برای پرتاب یک استثنا استفاده می شود. Throwsدر امضای متد برای اعلام استثناهایی که ممکن است در عبارات موجود در متد رخ دهد استفاده می شود.

    امکان پرتاب یک استثنا در یک زمان وجود دارد، اما می‌توانید چندین استثنا را با استفاده از throwکلمه کلیدی اعلام کنید .public void method()throws IOExceptionSQLException

در اینجا ما فقط چند پرسش و پاسخ مصاحبه جاوا داشتیم. این مقاله اولین مجموعه مصاحبه است. مورد بعدی (به زودی) در مورد سوالات ساختار داده است.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION