본문 바로가기
Java 웹 프로그래밍

[면접 질문 복기] 2023/10/10 면접

by irerin07 2023. 10. 10.
728x90

1. DI란 무엇인가

- 의존관계 주입이란, 의존관계에 필요한 것들을 객체 스스로가 정해서 가져가는 것이 아닌 외부에서 결정하고 주입하는 것.

 

2. DI 주입 시점은 컴파일 단계인가 아니면 런타임 단계인가

- 내 답변 : 컴파일 단계이다. 컴파일 단계에서 빈 생성시 필요한 객체들을 찾아서 주입해준다.

- 정담 : 런타임 단계이다. 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나 있지 않고 런타임 시점에 컨테이너나 팩토리 같은 제 3의 존재가 결정해준다.

 

진짜 멍청이...스프링의 기본중의 기본인데 이걸 틀렸다. 이건 긴장해서 틀렸다고 변명도 못한다. 

 

3. DI의 장점은 무엇인가

-  객체간 결합도가 낮아진다.

- 테스트가 쉬워진다.

    - 어째서 테스트가 쉬워지나?

        - 원하셨을 것 같은 답변 : DI가 없다면 A라는 클래스를 테스트하려는 중 B라는 클래스와 연관관계가 있다면 A와 B를 테스트하게 될 것이다. 하지만 DI를 사용하면 B를 Mock 객체로 만들어 오롯이 A만 테스트하기 편해진다. 객체간 낮은 결합도가 쉬운 단위 테스팅을 가능하게 하는 것이다.

4. 쓰레드와 프로세스의 차이는 무엇인가

- 프로세스는 메모리 상에서 실행중인 프로그램을 뜻하고 쓰레드는 이 프로세스 안에서 실행되는 흐름 단위이다.

 

5. 각각의 메모리 영역을 설명할 수 있는가. 무슨 데이터를 저장하는가.

- Stack 영역에는 지역변수, 매개변수등의 데이터를 임시로 저장하는 공간이고, Heap 영역은 동적으로 생성된 객체가 저장되는 공간이다.

 

근데 제대로 답변을 못했다.

 

6. 쓰레드에는 공유하는 메모리 영역과 공유하지 않는 메모리 영역이 있다. 각각 무엇인가.

- 쓰레드는 stack 영역을 제외한 메모리 영역을 공유한다.

 

7. 레이스 컨디션이란 무엇인가?

- 둘 이상의 프로세스나 스레드가 공유하는 자원을 얻기 위해 경쟁하는 것

 

8. 레이스 컨디션을 해결하는 방법으로는 무엇이 있는가

- 답변하지 못했다. 굳이 변명을 하자면 Race Condition이란 단어가 생소해서 그랬다는 변명을 하고자 한다.

결국 동시성 이슈인데,  이를 해결하기 위해서는 서버가 여러대고 빠른 처리속도를 필요한다면 Redis에서 제공하는 Redisson을 활용하거나 
느려도 괜찮고 정확성을 요구한다면 DB Lock을 부분적으로 잡는 페시미스틱락

자주있는 일은 아닌데 확인은 해야한다면 낙관적락

 

등의 방법이 있을 것이다.

 

9. inner join와 outer join의 차이는 무엇인가.

- inner join : 두 테이블을 조인할 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.

- outer join : 두 테이블을 조인할 때 1개의 테이블에만 데이터가 있어도 결과가 나온다.

 

10. index의 사용 이유와 어떤식으로 DB에 indexing이 이루어 지는가.

- index의 사용 이유는 검색 성능의 향상이 주된 이유이다.

- 어떤식으로 DB에 indexing이 이루어 지는지는 답변하지 못했다. 어떤 답변을 원하신건지 사실 좀 헷갈린다. 
- 예상 답변 : 하나 이상의 컬럼에 생성할 수 있다. 

728x90