본문 바로가기

프로그래밍/IT면접

[기술면접] JAVA 개발자 기술면접 예상 질문

728x90
반응형

면접 유형

1. 결원이 생겨서 충원하려는 곳

- 이 사람이 와서 업무를 할 수 있는지 판단

- 업무 관련 기술 이야기 위주

2. 괜찮은 사람을 뽑으려는 곳

- 개발 마인드. 괜찮은 사람인지

- 해왔던 업무 위주

 

* 자기 소개

* 지원 동기

* 각종 프로젝트 질문

* 가장 기억에 남는(자신있는) 프로젝트

* 최근 관심(공부)있는 기술

* 장점과 단점

* 궁금한 점

최근에 읽은 기술책

Redis mongoDB 언제 사용했는지

 

GC 처리경험

 

 

Young Generation 영역 : 새롭게 생성된 객체의 대부분이 이곳에 위치

Old Generation 영역 : Minor GC이후에도 Young 영역에서 살아남은 객체가 여기로 복사

Perm(Permanenet Generation) : 클래스 로더에 의해 로드되는 클래스, 메소드 등에 대한 메타정보가 저장되는 영역

 

Spring Batch Chunk

Chunk란 데이터 덩어리로 작업할 때 각 커밋 사이에 처리되는 row 수


Spring Batch 동작원리

 

 

- JobLauncher : Job을 실행하는 책임. 

- Job : Batch에서 실행 가능한 실행 단위

- JobRepostiory : DB 또는 어딘가에 저장된 Job, Step 등을 조회 또는 생성, 수정

- Step : Job은 1개 이상의 Step을 포함

ㄴ ItemReader :  데이터를 조회

ㄴ ItemProcessor : ItemReader를 통해 조회한 데이터를 중간에서 가공

ㄴ ItemWriter : ItemProcessor를 통해 가공된 데이터를 Write하는 역할

 

Spring Batch Step간 데이터 공유

Job에서 Step을 정의할 때 ExecutionContextPromotionListener를 각각의 Step의 Listener로 등록

 

Zookeeper

- 클러스터에서 구성 서버들끼리 공유되는 데이터를 유지하거나 어떤 연산을 조율하기 위해 주로 사용

리더 채택 : 다중 어플리케이션 중에서 어떤 노드를 리더로 선출할지를 정하는 로직을 만드는데 사용

 

* 좋은 코드

- 일관성 있는 코드(팀원 간의 그라운드 롤)

ㄴ 변수명과 함수의 네이밍 규칙

ㄴ 디렉터리 구조

 

MSA 장단점

- 장점 : 새로 추가되거나 수정사항이 있는 마이크로서비스만 빠르게 빌드, 배포가 가능

- 단점 : 서비스 간의 장애가 발생하는 경우 장애 추적이 어렵다.

 

MSA에서 트랜잭션 문제 처리

- Saga 패턴 : 트랜잭션이 실패할 경우 에러 복구를 위한 보상 트랜잭션 처리 발생

 

 

쓰레드와 프로세스

- 프로세스 : 운영체제에서 실행 중인 하나의 프로그램(하나 이상의 쓰레드를 포함)

- 쓰레드 : 프로세스 내에서 동시에 실행되는 독립적인 실행 단위

 

* String, StringBuffer, StringBuilder 차이점

String : 불변 속성, 매번 새로운 String 인스턴스 생성. 힙 메모리에 많은 임시 가비지 생성

StringBuffer : 동기화 지원. 멀티쓰레드 환경에서 안정성 보장. (* 각 메소드 별로 Synchrozied Keyword가 존재)

StringBuilder : 동기화 지원 X. 단일쓰레드에서 성능이 StringBuffer보다 뛰어남.

 

* Interface와 Abstract 의 차이 및 존재 이유

Interface

- 일종의 추상 클래스. 다중 상속이 가능

- 해당 인터페이스를 구현한 객체들에 대해서 동일한 동작을 약속

Abstract

- 슈퍼클래스의 기능을 이용하거나 확장하기 위해서 사용

공통점 : 추상 메소드를 구현하도록 강제

차이점 : Abstract는 일반 메소드 사용 가능. Interface는 메서드 선언만 가능(java 8부터 default method 사용가능)

 

* 컬렉션 프레임워크

- List 인터페이스 : 순서가 있는 데이터들의 집합으로 데이터의 중복을 허용

Vector, ArrayList, LinkedList, Stack, Queue

 

- Set 인터페이스 : 순서가 없는 데이터 집합으로 데이터의 중복을 허용하지 않음

HashSet, TreeSet 

 

- Map 인터페이스 : 키와 값의 한 쌍으로 이루어지는 데이터의 집합으로 순서가 없음. 

HashMap, TreeMap, HashTable, Properties

 

List to Set

Set<foo> foo = new HashSet<>(myList);

 

Overloading vs Overriding (다형성)

Overloading

- 같은 이름의 메소드를 여러 개 정의

- 매개변수의 타입이 다르거나 개수가 다름

Overriding 

- 상속에서 나온 개념

- 상위 클래스의 메소드를 하위 클래스에서 재정의

 

Call by Refrence와 Call by Vaule의 차이

Call by Refrence : 인자로 받은 값의 주소를 참조하여 직접 값에 영향. ex) 클래스 객체

Call by Vaule : 인자로 받은 값을 복사해서 처리. 

 

Primitive type과 Reference type

Primitive type : 변수에 값 자체를 저장. ex) int, long

Reference type : 메모리상에 객체가 있는 주소를 저장 ex) Class, Interface, Array

 

Wrapper Class : Primitvite type 데이터를 객체로 변환

왜? Collection API에서는 primitive type을 지원하지 않기 때문에

ex) Integer(a); => Boxing

     Integer b = a; => autoBoxing

 

* Java 버전별 특징

- Java7(2011)

ㄴ Generic class 초기화시 Type Inference 지원(중복코드 삭제)

# JAVA 6
List<Integer> list = new ArrayList<Integer>();

# JAVA 7 ~
List<Integer> list = new ArrayList<>(); // Type Inference

ㄴ Switch 문에 String 조건 가능

- Java 8(2014) 

Stream : 컬렉션의 요소를 하나씩 참조하여 람다식으로 처리할 수 있게 하는 일종의 반복자

Lambda : 메소드명 없이 구현부만 선언하는 익명 메소드 생성 문법

* - interface에 default 메소드 추가. 정적 메소드 추가

- Java 10(2018)

ㄴ Deprecated된 API는 Java SE 10에서 모두 삭제

- Java 11(2018. 09)

ㄴ 새로운 String 메소드 추가(공백제거)

ㄴ HTTPClinent 표준화 기능 추가

 

JVM 구조

JVM : Java Byte Code를 OS에 맞게 해석해 주는 역활

- Class Loader : Runtime 시점에 클래스를 로딩

- Runtime Data Areas : JVM이 프로그램을 수행하기 위해 OS로부터 별도로 할당 받은 메모리 공간

- Execution Engine : Load된 Class의 ByteCode를 실행하는 Runtime Module

 

REST API : REST기반으로 서비스 API를 구현한 것

RESTful : REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위한 용어

- HTTP URL을 통해 자원을 명시

- HTTP Method(POST/GET/PUT/DELETE)를 통해 자원에 대해 CRUD Operation을 적용

 

MVC 구성요소

- Model : 논리적 데이터 기반 구조

- View : 사용자에게 보여지는 화면

- Controller : Model과 View 내의 클래스들 간 정보 교환하는데 사용

 

* MVC 구조의 처리 과정

dispatcherServlet -> handlerMapping -> Controller -> ModelAndView -> ViewResolver -> view

 

Spring 특징

- 경량 컨테이너로서 자바 객체를 직접 관리

- 확장성이 높음

 

생성자 주입과 필드 인젝션

생성자 주입 방식 장점

- 의존관계 설정이 되지 않으면 객체 생성 불가 -> 컴파일 타임에 인지 가능, NPE 방지

- 의존성 주입이 필요한 필드를 final 로 선언 가능 -> Immutable

- (스프링)에서 순환참조 감지 가능 -> 순환참조시 앱구동 실패 

- 테스트 코드 작성 용이

 

- 필드 인젝션

@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private CourseService courseService;

    @Override
    public void studentMethod() {
        courseService.courseMethod();
    }

}

- 생성자 기반 인젝션

@Service
public class StudentServiceImpl implements StudentService {

    private final CourseService courseService;

    @Autowired
    public StudentServiceImpl(CourseService courseService) {
        this.courseService = courseService;
    }

    @Override
    public void studentMethod() {
        courseService.courseMethod();
    }
}

 

AOP(관점지향프로그래밍) : 핵심 비즈니스 로직기능과 공통기능을 분리

ex) 트랜잭션, 로깅, 보안

 

* AOP 동작원리

- 가짜 Proxy 를 앞에 세운 후 가짜 Proxy가 끝나면 joinPoint.proceed()를 통해 진짜를 호출

 

 

* Filter, Interceptor, AOP 차이(어느 단계에서 동작하는지) 및 활용처

- Filter

ㄴ DispatcheServlet 이전에 실행. web.xml 에 등록

ㄴ 인증, 로깅

- Interceptor

ㄴ 요청에 대한 작업 전/후로 가로챈다.

ㄴ 로깅, 세션관리, 권한관리

- AOP

ㄴ 메소드 전후의 지점에 자유롭게 설정 가능

ㄴ 트랜잭션, 로깅

 

 

 

DI(Dependency Injection) : 각 클래스 사이에 필요로 하는 의존관계를 빈 설정정보를 바탕으로 컨테이너가 자동으로 연결

 

IoC(Inversion of Control) : 인스턴스의 생성에서부터 소멸까지 개발자가 아닌 컨테이너가 대신 관리

 

스프링에서 트랙잭션 처리 방법

클래스, 메서드 위에 @Transactional 이 추가되면, 이 클래스에 트랜잭션 기능이 적용된 프록시 객체가 생성된다. 이 프록시 객체는 @Transcational이 포함된 메소드가 호출될 경우, PlatformTranscationManager를 사용하여 트랙잰션을 시작하고, 정상 여부에 따라 Commit 또는 Rollback

 

Propagation(전파옵션)

@Transactional(propagation = Propagation.REQUIRED)
public void method () { ... }

@Transcational의 propagation 속성을 통해 피호출 트랜잭션의 입자에서는 호출한 쪽 트랜잭션을 그대로 사용할 수도 있고, 새롭게 트랜잭션을 생성할 수도 있다.

- REQUIRED : 디폴트 속성, 부모 트랜잭션 내에서 실행하며 부모 트랜잭션이 없을 경우 새로운 트랜잭션을 생성

- SUPPORTS : 이미 시작된 트랜잭션이 있으면 참여하고 그렇지 안으면 트랜잭션 없이 진행

- REQUIRES_NEW : 항상 새로운 트랜잭션을 시작

- MANDATORY : RQUIRES_NEW와 비슷하게 이미 시작된 트랜잭션이 있으면 참여

- NOT_SUPPORTED : 트랜잭션을 사용하지 않게 한다

- NEVER : 트랜잭션을 사용하지 않도록 강제

- NESTED : 이미 진행중인 트랜잭션이 있으면 중첩 트랜잭션을 시작

 

@Transcational 에서 예외를 try-catch로 예외 처리를 하였다면 롤백은 일어나지 않음

 

JPA(Java Persistence API) : 자바 ORM 기술에 대한 표준 명세

ORM : DB 테이블을 자바 객체로 매핑함으로써 객체간의 관계를 바탕으로 SQL을 자동으로 생성

 

 

JPA N+1 문제

- 하위 엔티티들을 첫 쿼리 실행시 한번에 가져오지 않고, Lazy Loding으로 필요한 곳에서 사용되어 쿼리가 실행될 때 발생하는 문제

-  일대다 필드의 타입을 Set으로 선언

 

String, StringBuffer, StringBuilder 차이점 : ifuwanna.tistory.com/221

 

Java Garbage Collection 요약 : bkim.tistory.com/16

JVM 구조 : medium.com/@lazysoul/jvm-%EC%9D%B4%EB%9E%80-c142b01571f2

Java 버전별 특징 : www.seoulit.or.kr/service/cumm_08_view.html?type=faq&category_chk=&num_per_page=15&page=1&code_seq=NjA2Ng==

 

Spring Batch - Chunk : jojoldu.tistory.com/331

 

Interface와 Abstract : brunch.co.kr/@kd4/6#:~:text=%EA%B2%B0%EB%A1%A0%EB%B6%80%ED%84%B0%20%EB%A7%90%EC%94%80%EB%93%9C%EB%A6%AC%EB%A9%B4%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4,%EC%9D%84%20%EA%B0%95%EC%A0%9C%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%EC%84%9C%20%EC%9E%85%EB%8B%88%EB%8B%A4.

 

컬렉션 프레임워크 : blog.naver.com/lbr71004/222181959635

 

RESTful : gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

Filter, Interceptor, AOP 차이 :  goddaehee.tistory.com/154

AOP 동작원리 : velog.io/@ha0kim/2020-12-28-AOP-%ED%8A%B9%EC%A7%95-%EB%B0%8F-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC

스프링 - 생성자 주입을 사용해야 하는 이유, 필드인젝션이 좋지 않은 이유 : yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/

 

Transctional 정리 및 예제 : goddaehee.tistory.com/167

 

JPA : velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa

JPA N+1 문제 : jojoldu.tistory.com/165

 

MSA 장단점 : buble2.tistory.com/14#:~:text=Monolithic%20Architecture%EC%99%80%20MSA%EC%9D%98%20%EC%9E%A5%EB%8B%A8%EC%A0%90&text=%EB%B6%84%EC%82%B0%EC%B2%98%EB%A6%AC%EA%B0%80%20%EC%96%B4%EB%A0%B5%EB%8B%A4.&text=%EC%86%8C%EC%88%98%EC%9D%98%20%EC%9D%B8%EC%9B%90%EC%97%90%EC%84%9C%20%EB%B9%A0%EB%A5%B4%EA%B2%8C,%EB%B0%B0%ED%8F%AC%EC%8B%9C%EA%B0%84%EC%9D%B4%20%EA%B8%B8%EC%96%B4%EC%A7%84%EB%8B%A4.&text=%ED%85%8C%EC%8A%A4%ED%8A%B8%20%ED%99%98%EA%B2%BD%EA%B5%AC%EC%84%B1%EC%9D%B4%20%EC%89%BD%EA%B3%A0%20%EC%9A%A9%EC%9D%B4%ED%95%98%EB%8B%A4. 

Saga 패턴을 활용한 트랜잭션 관리 : cla9.tistory.com/22

 

 

728x90
반응형

'프로그래밍 > IT면접' 카테고리의 다른 글

[IT면접] 티몬  (1) 2021.03.24
[IT면접] 우아한 형제들  (0) 2021.03.08
[IT면접] 현대오토에버  (0) 2021.03.08
[IT면접] 아모레퍼시픽  (0) 2021.03.05
[IT면접] 티맵모빌리티  (0) 2021.03.05
[기술면접] JAVA 개발자 기술면접 예상 질문 2부  (1) 2021.02.26