CodeGym /Java блог /Случаен /Топ 21 въпроса за интервю за Java
John Squirrels
Ниво
San Francisco

Топ 21 въпроса за интервю за Java

Публикувано в групата
Има безброй въпроси за интервю за Java и не можем да ги съберем всички в една статия. Тук обаче можете да намерите някои много често срещани въпроси за интервю за Java, според HR-мениджъри на ИТ компании. Топ 21 въпроса за интервю за Java - 1
  1. „Разглобяване“ public static void main(String args[]).

    Един от популярните въпроси за интервю за Java за първокурсници и много лесен.

    • publicе модификатор на достъп. Използваме го, за да посочим достъпа до този метод. Тук модификаторът е „публичен“, така че всеки клас има достъп до този метод.

    • static. Тази ключова дума на Java означава, че използваме този метод, без да създаваме нов обект от клас.

    • Voidе типът връщане на метода. Това означава, че методът не връща ниHowва стойност.

    • mainе името на метода. JVM го „познава“ като входна точка към приложение (трябва да има конкретен подпис). Mainе метод, при който се извършва основното изпълнение.

    • String args[]. Това е параметърът, предаван на главния метод. Тук имаме аргументите от тип String, които вашето Java приложение приема, когато го стартирате. Можете да ги въведете на терминала.

  2. Каква е разликата между equals()и ==?

    Първо, „ ==“ е оператор, докато equals()е метод. Ние използваме ==оператор за сравнение на справки (or сравнение на addressи) и equals()метод за сравнение на съдържание. Това означава, че ==проверява дали и двата обекта сочат към едно и също място в паметта, докато equals()сравнява стойностите в обектите.

  3. Можем ли да изпълним програма без main()метод?

    Много въпроси за основно интервю за Java са наистина лесни. Като този. Така че краткият отговор е: да, можем. Например можем да го направим с помощта на статичен блок.

    Можете да използвате статичен блок, за да инициализирате члена на статичните данни. Изпълнява се преди 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. Какво ще кажете за пълното отсъствие на главния метод? Ако се опитате да стартирате обикновен клас без основния метод изобщо, получавате следващата грешка: Главният метод не е намерен в класа Тест, моля, дефинирайте основния метод като: public static void main (String [] args) or JavaFX приложение класът трябва да разширява javafx.application.Application. Самата грешка казва, че ако това е JavaFX приложение и класът е наследен от javafx.application.Application, тогава е възможно.
  5. Какво е immutableобект? Можете ли да създадете immutableобект?

    Не можете да променяте обекти от immutableклас след създаването им. Така че след като ги създадете, не можете да ги промените. Ако се опитате да модифицирате Immutableобект, получавате нов обект (клонинг) и променяте този клонинг, докато създавате.

    Добър пример е String, той е immutableв Java. Това означава, че не можете да промените самия обект, но можете да промените препратката към обекта.

  6. Колко обекта са създадени в следния code?

    Един от въпросите за техническо интервю за Java, който замества #4.

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

    Отговорът е „само един“, защото Java има String Pool. Когато създаваме String обект с помощта на оператора new(), той създава нов обект в хийп паметта. Ако използваме синтаксис на String литерал, Howто в нашия пример, той може да върне съществуващ обект от String пула, ако вече съществува.

  7. Колко обекта са създадени в следния code?

    
    String s = new String("Hello");
    

    Има 2 обекта. Единият е в низов константен пул (ако вече не присъства), а другият е в купчината.

  8. Каква е разликата между и Stringкласове в Java?StringBuilderStringBuffer

    Има един от лидерите в най-добрите въпроси за интервю за Java.

    На първо място Stringе неизменен клас. Това означава, че не можете да променяте съдържанието му, след като бъде създадено. Докато StringBufferи StringBuilderса променливи класове, така че можете да ги промените по-късно. Ако променим съдържанието на Stringобекта, той създава нов низ, следователно не променя оригиналния. Ето защо представянето с StringBufferе по-добро, отколкото с String.

    Основната разлика между StringBufferи StringBuilderе, че StringBufferметодите са синхронизирани, докато StringBuilderметодите не са.

  9. Има ли няHowва разлика в Stringтова, че е създадено с помощта на литерал и с new()оператор?

    Има. Ако създадем низ с new()оператора, той се появява в купчината и в пула от низове (ако вече не присъства). Ако създадете Stringс помощта на литерал, той се създава в пула от низове (ако вече не присъства). Пулът от низове е зона за съхранение в купчината, която съхранява низови литерали.

  10. Можете ли да замените privateor staticметод в Java?

    Един от сложните въпроси за интервю за Java за новобранци. Наистина не можете да замените privateor staticметод в Java.

    Не можете да замените privateметодите, защото обхватът на спецификатора за частен достъп е само в рамките на класа. Когато ще замените нещо, трябва да имаме клас родител и дете. Ако методът на суперклас е private, дъщерният клас не може да го използва и методите в дъщерния клас ще се третират като нови методи (без да се отменят).

    Staticметодите също не могат да бъдат отменени, тъй като staticметодите са част от самия клас, а не част от който и да е обект на класа. Разбира се, можете да декларирате същия staticметод със същия подпис в дъщерни класове, но отново, те ще бъдат третирани като нови методи.

  11. Разлика между Abstract ClassиInterface

    Един от популярните въпроси за интервю за разработчици на Java, който се отнася за принципите на ООП. На първо място, в Java interfaceдефинира поведение и abstract classсъздава йерархия.

    Абстрактен клас Интерфейс
    Възможно е да има тяло на метод (неабстрактни методи) в абстрактен клас Интерфейсът може да има само абстрактни методи. В Java 8 or по-нова стана възможно да се дефинират методи по подразбиране и да се внедрят директно в интерфейса. Освен това интерфейсите в Java 8 могат да имат статични методи.
    Променливите на екземпляра могат да бъдат в абстрактен клас Един интерфейс не може да има променливи на екземпляр.
    Допускат се конструктори Интерфейсът не може да има конструктор.
    Статичните методи са разрешени Статичните методи не са разрешени
    Класът може да има само един абстрактен родител Един интерфейс може да реализира различни класове
    Абстрактният клас може да осигури реализацията на интерфейса. Интерфейсът не може да осигури имплементацията на абстрактния клас.
    На абстрактен клас е разрешено да разширява другия Java клас и да прилага множество Java интерфейси. На интерфейс е разрешено да разширява само другия Java интерфейс.
    Абстрактен клас на Java може да има частни и защитени членове на класа Членовете на Java интерфейс са публични по подразбиране
  12. Можем ли да декларираме staticпроменливи и методи в abstractклас?

    Да, възможно е да се декларират staticпроменливи и методи в abstractmethod. Няма изискване да се направи обект за достъп до статичния контекст. Така че ни е разрешен достъп до статичния контекст, деклариран вътре в abstractкласа, като използваме името на abstractкласа.

  13. Какви типове области на паметта се разпределят от JVM?

    Class Area съхранява структури за всеки клас, например пул от константи по време на изпълнение, полета, данни за методи и целия code за методи.

    Heap е област с данни по време на изпълнение, където паметта е разпределена за обектите.

    Стекът съхранява рамки. Той съдържа локални променливи и частични резултати и участва в извикването и връщането на метода. Всяка нишка има частен JVM стек, създаден по същото време като нишката. Нов кадър се създава всеки път, когато се извиква метод. Кадър се унищожава, когато извикването на метода му завърши.

    Регистърът на програмния брояч съдържа address на инструкцията за виртуална машина на Java, която се изпълнява в момента.

    Native Method Stack съдържа всички собствени методи, които се използват в приложението.

  14. Защо множественото наследяване не е разрешено в java?

    Би било наистина сложно. Представете си три класа A, Bи Cи Cнаследява Aи B. Сега Aи Bкласовете имат същия метод и го извиквате от обект на дъщерен клас... Кой? Aе or Bе? Тук имаме неяснота.

    ако се опитате да наследите два класа, Java изобразява грешка при компorране.

  15. Можем ли да претоварим main()метода?

    Разбира се, разрешено ни е да имаме много mainметоди в Java програма чрез използване на претоварване на методи. Опитай го!

  16. Можем ли да декларираме конструктор като final?

    не Конструкторът не може да бъде деклариран като, finalзащото не може да бъде наследен. Така че е безсмислено да се декларират конструктори като final. Ако обаче се опитате да го направите, Java компилаторът ви извежда грешка.

  17. Можем ли да декларираме интерфейс като final?

    Не, не можем да направим това. Интерфейс не може да бъде final, защото интерфейсът трябва да бъде имплементиран от няHowъв клас според неговата дефиниция. Следователно няма смисъл да се прави интерфейс final. Ако обаче се опитате да го направите, компилаторът ще покаже грешка.

  18. Каква е разликата между static bindingи dynamic binding?

    Което bindingможе да бъде разрешено по време на компorране от компилатора се извиква staticor ранно свързване. Bindingна всички static, privateи finalметоди се извършва по време на компorране.

    В Dynamic bindingкомпилатора не може да се избере метод, който да бъде извикан. Замяната е перфектен пример за dynamic binding. При замяна и родителските, и дъщерните класове имат един и същ метод.

    
    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. Как да създадете клас само за четене в Java?

    Можете да го направите, като направите всички полета на класа лични. Класът само за четене има само методи за получаване, които връщат частната собственост на класа на mainметода. Не можете да промените това свойство, причината е липсата на метод за настройки.

    
    public class HockeyPlayer{    
    private String team ="Maple leaf";    
    public String getTeam(){    
    return team;    
    }    
    }
    
  20. Как да създадете клас само за запис в Java?

    Отново трябва да направите всички полета на класа private. Сега вашият клас само за писане трябва да има само методи за настройка и ниHowви гетери. Следователно не можем да прочетем свойствата на класа.

    
    public class HockeyPlayer{       
    private String team;    
    public void setTeam(String college){    
    this.team = team;    
    }    
    }    
    
  21. Всеки tryблок трябва да бъде последван от catchблок, нали?

    не Не е необходимост. Всеки tryблок може да бъде без catchблок. Може да бъде последвано or от catchblock, or от finally block, or дори без тях.

    
    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: Преди Java 8 методите в интерфейсите можеха да бъдат само абстрактни. В Java 8 or по-нова стана възможно да се дефинират методи по подразбиране и да се внедрят директно в интерфейса.
  22. Каква е разликата между throwи throwsключови думи?

    Throwsсе използва за деклариране на изключение, така че работи подобно на try-catchблока. Throwключовата дума се използва за хвърляне на изключение изрично от метод or друг блок от code.

    Throwе последван от екземпляр на Exceptionклас и throws е последван от имена на класове на изключения.

    Throwсе използва в тялото на метода за хвърляне на изключение. Throwsсе използва в сигнатура на метод за деклариране на изключенията, които могат да възникнат в изразите, присъстващи в метода.

    Разрешено е да хвърляте едно изключение наведнъж, но можете да обработвате множество изключения, като ги декларирате с throwключова дума. Можете да декларирате множество изключения, напр., public void method()throws IOException, SQLException.

Тук имахме само няколко въпроса и отговора за интервю за Java. Тази статия е първата от поредицата интервюта. Следващият (очаквайте скоро) е относно въпроси относно структурата на данните.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION