본문 바로가기

개발이야기

JAVA 신입개발자 기술면접 질문 정리

신입 개발자로서 면접을 보러 갈 시 많이 받았던 질문들 정리해보았습니다.
아래의 문제들만 차분히 외우고가도 웬만하면 대답이 가능할 것이라고 생각됩니다.
개인 프로젝트가 있다면 프로젝트에 대한 설명은 충분히 가능해야 합니다.
그리고 모르면 모른다고 하는 게 제 개인적인 경험으로는 나은 것 같습니다.

 




1. OOP 란?  
    - 객체지향프로그램 (Object - oriented Programming)
    - 데이터를 객체로 취급하여 프로그램에 반영
    - 순차적으로 프로그램이 동작하는 기준과 다르게 객체의 상호작용을 통해 프로그램 작동
    - 캡슐화, 다형성, 상속

2. 객체 란?  
    - Object(객체)는 OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수). 즉 절차, 방법, 기능을 모두 포함한 개념
    - 클래스는 객체를 만들기 위한 설계도, 객체를 감싸는 큰 틀

3. 추상화, 캡슐화, 상속성, 다형성에 대해 설명
    - 상속성 : 부모클래스 상속가능  
    - 추상화 : Abstract,인터페이스 - 아직 두 개의 큰 차이점, 필요성을 못 느껴봄..  
    - 캡슐화 : 비슷한 속성, 메서드 하나의 클래스로 만든다. private, public, default, protected  
    - 다형성 : 오버로딩(같은 함수명, 다른 인자), 오버라이딩 (상속받은 함수를 자식클래스에서 다시 정의)  

4. 추상클래스와 인터페이스의 차이점은?
    - 추상클래스 : 한 개 이상의 추상메서드를 가지는 클래스 
        - 추상메서드 : 구현은 하지않고 선언만 한 메서드, 상속받은 자식에서 재정의해서 사용  
                      추상메서드를 재정의 하지 않을 경우 컴파일러는 에러를 발생
    - 인터페이스 : 추상클래스와 비슷한 기능을 가지나, 추상메서드와 상수로만 이루어짐(로직 설계 불가능)  
                  다중 상속 가능
    - 공통점 : 추상 클래스, 인터페이스 자체로 객체로 생성 불가능.  
               상속받은 자식이 구현하도록 함.
    - 차이점 

구현 객체의 같은 동작을 보장하기 위함 추상클래스를 상속받아 기능을 이용하고, 확장시키기 위함
다중 상속 가능 다중 상속 불가능
추상메서드만 가능 일반메서드+추상메서드 가능
상수+추상메서드 형태 일반변수(가능)+일반메서드(가능)+추상메서드 형태
생성자와 일반변수를 가질 수 없음 생성자와 일반변수 모두 가질 수 있음
implments extends
메서드 선언만 가능 메서드의 부분적인 구현이 가능


5.  오버로딩이란?  
    - 같은 이름의 메소드를 여러 개 정의하는 것
    - 매개변수의 타입이 다르거나 개수가 달라야 한다.
    * return type과 접근 제어자는 영향을 주지 않음.

6. 오버라이딩이란?  
    - 상속에서 나온 개념
    - 상위 클래스(부모 클래스)의 메소드를 하위 클래스(자식 클래스)에서 재정의
    - 오버라이딩을 할 때 개발자의 실수를 방지하기 위해 메서드 위에 @Override 를 관례적으로 적는다.
    
7. 오버로딩과 오버라이딩의 차이점은?
    - 위에 정리 
    
8. Array List란?  
    - 배열인데 메모리 위치가 쭉 이어짐

9. Linked List란?
    - 배열인데 메모리위치가 뒤죽박죽 

10. 어레이 리스트와 링크드 리스트의 차이점은?
    - ArrayList : 메모리 밀도가 1, 삭제 시 기능 고려 , 검색 빠름
    - LinkedList : 메모리 밀도 분포, 삭제 시 빠름, 검색 시 기능 고려



11. 스트링, 스트링 버퍼, 스트링 빌더의 특징은?
    - String : String은 immutable(불변) , new 연산을 통해 생성되면 그 인스턴스의 메모리 공간은 절대 변하지 않는다.  
               +,concat 시 메모리의 내용이 변하는게 아니라 새로운 String 인스턴스 생성  
               문자열 연산이 적고 조회가 많을 때 멀티쓰레드 환경에서 사용하면 좋음.  
    - StringBuffer, StringBuilder 공통점 :   
            mutable(변경가능)하다.  
            즉 문자열 연산에 있어서 클래스를 한 번만 만들고(new), 
             연산이 필요할 때 크기를 변경시켜서 문자열을 변경한다.  
            그러므로 문자열 연산이 자주 있을 때 사용하면 성능이 좋다!  
    - StringBuffer, StringBuilder 차이점 :   
            tringBuffer는 멀티스레드 환경에서 synchronized키워드가 가능하므로 동기화가 가능하다.   
            즉, thread-safe 하다.  
            문자열 연산이 많을 때 멀티스레드 환경에서는 StringBuffer,   
            싱글 스레드 또는 쓰레드를 신경 쓰지 않아도 되는 환경에서는 StringBuilder를 사용하는 것이 적절하다.  
    - Synchronized 란 : 
         동기화란 하나의 자원(데이터)에 대해서 여러 스레드가 사용하려고 할 때 한 시점에서 하나의 스레드만 사용할 수 있도록 하는 것이다.   

12. GC에 대해 설명해보라.
    - 불필요한 메모리를 정리해주는 프로그램
      OS에게 메모리를 요구할 때 실행된다.
      C에는 이게 없어서 되게 힘들다 한다.

13. primitive type과 reference type 설명
    - Primitive Type (기본형) : int, char, long, double.... 같은 자료형
    - Reference Type (참조형) : Class, Interface, Array.. 등등 

14. DI 란?
    - 의존성주입, 객체 내부에서 인스턴스를 생성하는 것이 아니라 외부 컨테이너에서 미리 생성 후 객체로 주입

15. json 이란?
    - JSON은 경량(Lightweight)의 DATA-교환 형식
    - Javascript에서 객체를 만들 때 사용하는 표현식을 의미한다.
    - JSON 표현식은 사람과 기계 모두 이해하기 쉬우며 용량이 적어서, 최근에는 JSON이 XML을 대체해서 데이터 전송 등에 많이 사용한다.
    - 특정 언어에 종속되지 않으며, 대부분의 프로그래밍 언어에서 JSON 포맷의 데이터를 핸들링할 수 있는 라이브러리를 제공한다.


16. xml 이란?
    - XML은 HTML과 매우 비슷한 문자 기반의 마크업 언어(text-based markup language)

17. RDBMS 란?
     - 관계형 데이터베이스 관리 시스템.
     - 테이블-칼럼 형태의 데이터 저장 방식
     - 테이블과 테이블 간의 연관관계(주로 외래 키 형태)를 이용해 필요한 정보를 구하는 방식

18. MVC 란?
    -  model-view-controller의 약자로 소프트웨어 공학에서 애플리케이션을 구성하는 패턴

19. 싱글톤 패턴이란?
    - 애플리케이션이 시작될 때 어떤 클래스가 최초 한 번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴.
    - 고정된 메모리 영역을 얻으면서 한 번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지
   


20. 팩토리 패턴이란?  
    - 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정
    - 팩토리 메서드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기게 된다.

21. HashCode 설명
    - 자바에서 동일한 이름의 객체가 여러 개 생성될 수 있는데 이 객체들은 이름만 같을 뿐 서로 다른 상태를 가진 가진 객체들이 되는 것이다.  
      이런 객체를 구별하기 위해, 고유한 정수값으로 출력시켜주는 메소드가 바로 hashCode()다

22. Call by Reference, Call by Value 의 차이점은?
    - Call by reference : 참조에 대한 호출
    - Call by Value : 값에 대한 호출

23. 링크드리스트와 배열의 차이?
    - 10번 참조 

24. Git, Github사용 여부
    - 사용 O

25. 오픈소스 사용여부
    - 사용 O

26. 프로젝트는 어떤 걸 해봤나?
    - 포트폴리오 참조

27. DB는 어떤걸 써봤나?
    - MYSQL

28. SQL은 어느 정도 할 줄 아나?
    - 적당히...

29. DDL, DML, DCL에 대해 설명해보세요.
    - DDL : Data Define Language 의 약자로, 스키마/도메인/테이블/뷰/인덱스를 정의/변경/제거할 때 사용하는 언어이다.  
            테이블을 생성하고, 테이블 내용을 변경하고, 테이블을 없애버리는 것.  
             흔히 CREATE, ALTER, DROP 을 떠올리면 된다.  

    - DML : Data Manipulation Language 의 약자로, Query(질의)를 통해서 저장된 데이터를 실질적으로 관리하는 데 사용한다.  
            테이블 안의 데이터 하나하나를 추가하고 삭제하고 수정하는 것.  
            흔히 INSERT, DELETE, UPDATE 를 떠올리면 된다.  

    - DCL : Data Control Language 의 약자로, 보안/무결성/회복/병행 제어 등을 정의하는데 사용한다. 데이터 관리 목적.  
            흔히 COMMIT, ROLLBACK, GRANT, REVOKE 를 떠올리면 된다.  

30. 자바스크립트와 제이쿼리의 차이점은?
    - javascript를 더 사용하기 쉽게 만든 것이 Jquery.

31. 게시판 만들 줄 아나?
    - 넵

32. 그럼 게시판에서 페이징의 로직 순서에 대해 설명해보라.
    - 따로 정리  

    - 또는 게시판 기능의 간단한 로직 설명해보라.
    - CURE

33. SPA의 장점 및 단점은?
    - Single Page Application 
    - 초기 구동 속도 느림
    - SEO 검색엔진 최적화 문제