기술 면접

이정연·2023년 6월 16일

자바기초

목록 보기
24/25

✨자바의 특징

  • JRE(Java Runtime Environment) 가 설치되어 모든 운영체제에서 독립적이다.
  • 객체지향 언어임, 유지보수가 쉽고 확장성이 놓다.
  • 함수형 프로그래밍을 지원하므로 컬렉션의 요소를 필터링, 매핑, 집계 처리하기 쉬워지고 코드가 간결해진다.
  • 가비지 컬렉터를 이용하여 자동으로 사용하지 않는 메모리를 관리한다.

✨자바 데이터 타입 중 기본형과 참조형의 차이

  • 기본타입은 데이터의 실제 값을 저장한다, 정수타입 , 실수 타입, 문자 타입, 논리 타입이 있다.
  • 참조타입은 값을 저장할 대 데이터가 저장된 곳을 나타내는 주소값이 저장된다. 예를들어 객체를 저장한다.

✨클래스와 객체에 대해 설명해주세요.

  • 클래스는 객체를 정의한 설계도 정도로 정의할 수 있습니다.
  • 클래스는 객체를 생성되는데 사용되며 객체는 클래스에 정의되고 설계된 내용 그대로 생성된다.
  • 클래스는 객체 그 자체가 아니라 객체를 생성하는데 사용되는 하나의 틀임
  • 또한, 클래스를 통해 생성된 객체들을 해당 클래스의 인스턴스라 한다.

✨생성자에 대해 설명해주세요.

  • 인스턴스 변수들을 초기화하는데 사용되는 특수한 메서드로써 메서드와 비슷한 구조를 가지지만 크게 두가지부분에서 차이가 있다.
  • 생성자의 이름은 반드시 클래스의 이름과 같아야하며, 리턴타입이 존재하지 않는다.
  • 기본 생성자와 매개변수가 있는 생성자로 구성되며, 기본생성자의 경우 따로 만들지 않아도 자바 컴파일러가 자동으로 추가해준다.

✨메서드 오버라이딩과 메서드 오버로딩의 차이는 무엇인가요?

  • 메서드 오버로딩은 하나의 클래스안에 같은이름의 메서드를 여러개 정의하는 것을 뜻하는데, 같은이름의 메서드명을 이용하면서 매개변수의 갯수나 타입이 다르게 정의된 경우에 사용할 수 있다.
  • 가장 큰 장점은 하나의 메서드로 여러 경우의 수를 해결 할 수 있다.
  • 메서드 오버라이딩의 경우 상속관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기술으로 써 상위 클래스에 정의 된 메서드를 하위 클래스에서 그에 맞게 변경하고자할 때 사용한다.
  • 이를 위해선 메소드 이름과 매개변수의 갯수, 타입이 같아야 하고 리턴 타입 또한 동일해야한다.
  • 두번째로 접근제어자의 범위가 상위클래스의 메서드보다 같거나 넓어야 하며
  • 세번째로 예외는 상위클래스의 메서드보다 많이 선언할 수 없다.

✨자바의 메모리 영역에 대해 설명해주세요.

  • 기본적으로 메모리는 클래스영역, 스택 영역, 힙영역으로 구성된다. Ref

클래스 영역

  • 클래스 영역의 경우 JVM이 동작해서 클래스가 로딩될 때 생성되는데, 클래스와 인터페이스에 대한 클래스변수, 생성자, 메서드 등을 저장하며 프로그램의 시작부터 종료될때까지 메모리에 남아있을 수 있다.

스택 영역

  • 메서드 내에서 정의하는 기본 자료형에 해당하는 지역변수, 매개변수 데이터 값이 저장되는 곳이다.
  • 메서드가 호출 될 때 메모리에 할당되고, 종료되면 메모리에서 사라진다.
  • 객체를 생성할 때 참조변수 또한 이곳에 저장된다.

힙 영역

  • 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역으로 참조형 데이터 타입을 갖는 객체, 배열등이 저장된다.
  • 스택과 다르게 호출이 끝나도 메모리가 삭제되지 않고 유지되며, 어떤 변수도 참조를 안하게 될 때 가비지 컬렉터에의해 삭제된다.
  • stack은 스레드 갯수마다 생성되고, heap은 단 하나의 영역만 갖는다.

스택메모리 사이즈는 힙 메모리와 비교했을 때 매우 적다 하지만 스택 메모리는 간단한 메모리 할당 방법(LIFO)를 사용하기 때문에 힙 메모리보다 빠르다

✨static 키워드에 대해 설명하고, static를 언제 사용해야 하는 지 설명해주세요.

  • static은 클래스의 멤버(필드, 메서드, 이너클래스)에 사용하는 키워드로써 static을 사용하는 멤버를 정적 멤버라 한다.
  • static 키워드를 사용하게되면, 클래스 내부의 저장공간을 이용하기 때문에 객체 생성 없이 곧바로 사용할 수 있게 된다.
  • 보통 객체간 꼭 필요한 공유성질이 있을때 이용하게 된다.

✨자바 객체지향 프로그래밍(OOP)에 대해 설명해주세요.

  • 여러 객체를 만든 뒤 조립하여 하나의 프로그램으로 실행하는 개념
  • 필요한 데이터를 한 데 모아 추상화 시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 협력과 유기적인 상호작용을 통해 특정 기능을 구성하는 것

✨자바 접근 제어자의 특징과 종류에 대해서 설명해주세요.

  • 자바 프로그래밍에서 제어자는 클래스 필드 메서드 생성자 등에 부가적인 의밀르 부여하는 키워드임, 접근제어자는 각 대상에 대해서 단 한번만 사용할 수 있으며, 외부로부터 불필요한 데이터 노출을 방지하고 데이터가 임의로 변경되지 않도록 막기위해 사용한다.
  • 접근제어자는 4가지로 구성된다.
  • private : 동일클래스에서만 접근 가능
  • default : 아무것도입력하지 않으면 자동으로 이것으로 설정되며, 동일 패키지 내에서만 접근가능
  • protected : 동일패키지와 다른 패키지의 하위클래스에서 접근 가능
  • public : 접근 제한 없음

✨추상 클래스와 인터페이스의 차이는 무엇인가요?

  • 추상클래스는 미완성 설계도에 비유한다면, 인터페이스는 그보다 더높은 추상성을 요구하는 밑그림에 비유할 수 있다.
  • 추상클래스의 경우 추상메서드를 하나 이상 포함한다는 점인데, 인터페이스의 경우 추상메서드와 상수만을 멤버로 가질 수 있다는 점에 차이가 있다.
  • 인터페이스의 경우 내부의 모든 필드가 public static final로 정의되어야하며, 모든 메서드는 public abstract로 정의되어야한다.
  • 추상클래스의 경우 extend로 상속하며, 인터페이스는 추상클래스와는 다르게 implements를 사용하고 다중 구현이 가능하다.

✨이너클래스의 장점에 대해 설명해주세요.

  • 클래스를 논리적으로 그룹화가 가능하다. 클래스가 하나의 특정 클래스와만 관계를 맺는다면, 내부 클래스로 설정하여 새로운 클래스를 설정하지 않아도 되므로 패키지를 간소화 할 수 있게된다.
  • 외부적으로 불필요한 데이터를 감춤으로 더욱 타이트한 캡슐화를 적용할 수 있는데, private 제어자를 적용함으로써 외부에서의 접근을 차단함과 동시에 내부클래스에서 외부 클래스의 멤버들을 제약없이 접근할 수 있게 한다.

✨OOP의 장점과 단점에 대해 설명해주세요.

  • 객체 자체적으로 완전하고 독립적인 기능을 가지기 때문에 손쉽게 재활용이 가능하다.
  • 프로그램 개발 및 유지 보스에 드는 비용과 시간을 획기적으로 줄 일 수 있다.
  • 객체를 통해 데이터를 관리하여 데이터를 손실 없이 관리하기에 용이하다.

✨List, Set, Map의 차이에 대해서 설명해주세요 .

  • 셋다 컬렉션 프레임워크로써 객체들을 효율적으로 추가, 삭제, 검색 할 수 있다.
  • List의 경우 데이터의 순서가 유지되며, 중복저장이가능하다, 주로 ArrayList와 LinkedList를 이용하는데, ArrayList는 컬렉션 프레임워크에서 가장 많이 사용되며, 기본 배열과 달리 객체가 저장될 때 자동으로 저장용량이 늘어나게 된다. ArrayList는 검색에 있어서 매우 유리하다. LinkedList는 말 그대로 데이터들이 앞뒤로 링크가 되어있어서 데이터를 효율적으로 추가, 삭제에 용이하다.
  • Set은 순서가 중요하지 않고, 중복저장이 불가할 때 이용한다. 가장 대표적인 컬렉션 클래스로 HashSet을 이용하는데, 데이터를 관리할 때 해시코드로 관리한다.
  • 그 외에 Set에는 TreeSet이 있는데, 데이터를 이진탐색트리 형태로 저장하여 정렬과 검색에 특화된 자료구조를 가진다.
  • Map의 경우는 키와 값의 쌍으로 데이터를 저장하는 특징을 가지고 있는데, 이 두개를 Enrty객체로써 저장한다. 또한 해싱을 사용하여 많은양의 데이터를 검색하는데 있어서 뛰어난 성능을 보이는 특징이있다. 대표적으로 HashMap이 있다.

✨컬렉션과 스트림의 차이에 대해서 설명해주세요.

✨제네릭에 대해서 설명하고, 컬렉션 클래스에서 왜 제네릭을 사용하는 지 설명해주세요.

  • 제네릭이란 하나의 클래스만으로 모든 타입의 데이터를 저장하기 위해 만들어졌다.
  • 클래스를 인스턴스화 할 때 원하는 데이터 타입을 넣어주면서 인스턴스화해서 이용할 수 있다.
  • 컬렉션 클래스에서는 이미 정의되어있는 프레임워크를 이용한다. 따라서 인스턴스할때 앞으로 저장될 객체들의 타입을 알지 못하기 때문에 정의를 제네릭으로 해놓는 것이다.
  • 그렇게하면 앞으로 컬렉션 프레임워크를 인스턴스로 생성할때 객체들의 타입을 정의하면서 생성하면된다.

✨재귀 함수와 반복문의 차이점에 대해 설명해주세요.

✨Stack과 Queue의 차이점에 대해 설명해주세요.

✨인접 행렬과 인접 리스트의 차이점은 무엇인가요?

✨탐욕(Greedy) 알고리즘을 사용하기 위해 성립해야 하는 조건에 대해 설명해주세요.

✨이진 탐색 알고리즘(BST)이 데이터를 효율적으로 찾기 위해 탐색하는 과정을 설명해주세요.

✨웹 브라우저에서 CORS 이슈가 발생하는 원인은 무엇이며, 서버에서 어떻게 해결할 수 있나요?

✨URL과 URI의 차이점이 무엇인가요?

✨DNS의 정의와 DNS가 필요한 이유에 대해 설명해주세요.

✨REST API란 무엇인가요?

✨Client Side Rendering 과 Server Side Rendering 의 차이점에 대해서 설명해주세요.

✨트랜잭션에 대해 설명해주세요.

✨Foreign Key와 Primary Key에 대해 설명해주세요.

✨IOC에 대해 설명해주세요.

✨Spring에서 AOP가 필요한 이유에 대해 설명해주세요.

✨스프링 컨테이너(Spring Container)에 대해 설명해주세요.

✨DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요.


✨Spring MVC 프레임워크의 요청처리 과정에 대해서 설명해 주세요.

✨Spring MVC에서 제공하는 CSR(Client Side Rendering)과 SSR(Server Side Rendering) 방식에 대해서 설명해 주세요.

✨Spring MVC에서 REST API 엔드포인트를 구현하기 위해 사용되는 애너테이션들에 대해서 설명해 주세요.

  • @Controller, @RestController, @RequestMapping, @GetMapping, @PostMapping, @PatchMapping, @DeleteMapping 등

✨Controller에서 응답 객체로 사용하는 ResponseEntity에 대해서 설명해 주세요.

✨Rest Client가 무엇인지 설명해 주세요.

✨Spring 에서 사용하는 Rest Client에 대해서 설명해 주세요.

✨DTO가 무엇인지 설명해 주세요.

✨DTO의 장단점에 대해서 설명해 주세요.

✨DTO 클래스의 Request Body에 대한 유효성 검증 방법에 대해서 설명해 주세요.

✨Spring MVC에서의 예외 처리 기법에 대해서 설명해주세요.

  • Controller내에서의 @ExceptionHandler 사용
  • 글로벌 Exception 처리
  • 비즈니스 로직 Exception 처리

데이터 액세스 계층

✨ORM이 무엇인지 설명해 주세요.

✨Spring JDBC, Spring Data JDBC, Spring Data JPA의 차이점을 설명해 주세요.

✨Spring Data JDBC에서의 애그리거트와 애그리거트 루트에 대해서 설명해 주세요.

✨JPA에서 의미하는 Persist에 대한 의미를 설명해 주세요.

✨JPA의 영속성 컨텍스트에 대해서 설명해 주세요.

✨JPA의 단일 엔티티 매핑 방법에 대해서 설명해 주세요.

  • @Entity, @Table, @Id, @GeneratedValue, @Column 등

✨JPA의 엔티티 간 연관 관계 매핑에 대해서 설명해 주세요.

  • @OneToOne, @ManyToOne, @OneToMany 등
  • mappedBy 속성에 대한 설명

트랜잭션

✨트랜잭션이 무엇인지 설명해 주세요.

✨트랜잭션 경계가 무엇인지 설명해 주세요.

✨Spring에서 트랜잭션을 설정하는 방법에 대해서 설명해 주세요.

  • @Transactional 애너테이션 방식
  • AOP 방식

✨분산 트랜잭션이 무엇인지 설명해주세요.

✨트랜잭션 전파(Transaction Propagation)가 무엇인지 설명해 주세요.

✨트랜잭션 격리 레벨(Transaction Isolation Level)이 무엇인지 설명해 주세요.


테스팅

✨기능 테스트, 통합 테스트, 슬라이스 테스트, 단위 테스트에 대해서 설명해 주세요.

✨JUnit의 Assertion이 무엇을 의미하는지 설명해 주세요.

✨Given - When - Then 패턴에 대해서 설명해 주세요.

✨MockMvc를 이용해 Spring MVC의 API 엔드포인트인 Controller를 테스트하는 방법을 설명해 주세요.

✨Mock이 무엇인지 설명해 주세요.

✨Stub과 Stubbing이 무엇인지 설명해 주세요.

✨Mockito가 무엇인지, Mockito의 역할에 대해서 설명해 주세요.

✨@SpringBootTest와 @WebMvcTest의 차이점을 설명해 주세요.


API문서화

✨Swagger와 Spring Rest Docs의 장단점을 설명해 주세요.

✨Spring Rest Docs의 API 문서화 동작 방식에 대해서 설명해 주세요.

✨Spring Boot 기반 애플리케이션을 빌드하는 방법에 대해서 설명해 주세요.

✨Spring Boot 기반 애플리케이션 빌드 시, 주로 사용하는 프로파일(Profile)에 대해서 설명해 주세요.

✨Spring Boot 애플리케이션 실행 파일을 배포하는 방법에 대해서 설명해 주세요.

  • 전통적인 방식, 클라우드 서비스에 배포하는 방식

인증/보안

✨인증과 인가의 차이에 대해 설명해 주세요.

✨세션에 대해서 모르는 사람한테 설명하듯 간단하게 설명해 주세요.

✨세션과 쿠키 그리고 토큰 인증 방식에 대해 설명해 주세요.

✨세션과 토큰 인증 방식 중 각각의 장단점을 말씀해 주세요.

✨HTTP와 HTTPS 각각에 대해 설명하고, 둘의 차이점을 말씀해 주세요.

✨HTTPS의 동작 방식을 설명해 주세요.

✨OAuth 2.0의 워크플로우에 대해서 설명해 주세요.

✨Spring Security의 인증 처리 흐름에 대해 설명해 주세요.

✨Spring Security의 인가 처리 흐름에 대해 설명해 주세요.

✨Filter가 무엇인지 설명하고 Filter Chain의 동작에 대해 설명해 주세요.


Cloud

✨사용해 본 클라우드 인프라 서비스에 대해 소개해 주세요.

✨vmware와 같은 가상머신이랑 Docker가 무슨 차이가 있는지 설명해 주세요.

✨CI/CD가 무엇이라고 생각하시나요? CI와 CD의 차이점이 무엇인지 설명해 주세요.

✨본인이 구현해 본 CI/CD 배포 자동화 과정을 설명해 주세요.

profile
반갑습니다.

0개의 댓글