본문 바로가기

면접

코딩 면접 질문들 정리 - 제1편 OS, JVM

728x90

코딩 면접 질문들 정리

 

 

http://www.yes24.com/Product/Goods/106373453

 

파이썬으로 익히는 말랑말랑 알고리즘 - YES24

처음 코딩 테스트를 준비하는 초보자도 어려움없이 배우는 알고리즘 도서! 첫째, 이론과 예제 문제 모두, 초보자를 위해 차근차근! 탄탄하게 알고리즘 이론을 배우고, 제대로 이해했는지 확인할

www.yes24.com

코딩테스트를 준비하시기 막막 하시다면 '말랑말랑 알고리즘'책을 추천 드립니다.

 

자료구조

https://krksap.tistory.com/1706

 

 

서문

코딩테스트도 떨어질 수 있고 면접도 떨어질 수 있습니다. 경쟁이 치열한 IT업계에 살아가는 여러분들 함께 힘을 내보았으면 좋겠습니다. 우리는 이 길이 맞다고 생각해서 발을 들였습니다. 0과 1만 아는 계산기를 이해하고 우리가 만든 코드가 널리 세상을 이롭게 했으면 좋겠다는 생각을 가지고 알고리즘이던 자료구조던 네트웍이던 공부하다 보면 재미도 느끼고 우리의 일터가 좋아지는 것을 느낄 것입니다.

 

 

개발자가 취업을 하거나 이직을 하려면 코딩테스트 + 기술면접을 봅니다. 유형은 위 사진 처럼 화이트보드에 해보라는데도 있고, A4용지에 문제가 있는데 나눠주고 풀라고 하는 곳도 있고 말로 해보라는 곳도 있고 등등 여러가지 유형을 경험 해보았습니다. 왜그랬냐면 여러군데를 봤기 때문입니다.

 

처음 이직을 하려고 면접을 봤을 때는 그냥 갔다가 말이 안나와서 떨어졌던 것 같습니다.

 

백엔드 서버 개발자로 면접을 보면서 나왔던 질문들을 정리 해봅니다. 공부도 할겸이요.

 

아래 질문들은 전화면접, 코딩 테스트, 실제 면접 볼 때 나왔던 질문들입니다. 개발자라면 꾹 찌르면 나와주어야 하는 그런 내용들입니다만 저는 대답을 잘 못했습니다. 회사는 Naver, 쿠팡, KTH, 빗썸, ZUM 등 들어보면 알만한 회사들이었습니다.

 

Java

1.Overloading(오버로딩) Overriding(오버라이딩)

- 오버로딩은 parameter가 다른 여러개의 메소드를 만드는 것

public class Overloading {
    private String hostname;
    
    public Overloading() {
    }

    public Overloading(String hostname) {
        this.hostname = hostname;
    }
}

위 예제는 생성자를 오버로딩 한 예제 입니다. 파라메터가 없는 생성자가 있고 파라메터가 있는 생성자가 있습니다. 이렇게 메소드 이름은 같지만 파라메터가 다른 메소드를 여러개 만드는 것을 오버로딩이라고 합니다.

 

- 오버라이딩은 상속받은 클래스나 인터페이스의 메소드를 재정의 하는 것

 

2.JAVA에서 Single ton패턴을 쓰는 이유를 말해보세요.

1) 객체를 여러번 생성하지 않아도 되기 때문에 그에 따르는 비용이 적습니다.

2) 객체가 무조건 한번만 생성 되는 것을 보장 할 수 있습니다.

3) 한번 만들어서 여러곳에서 사용하면 수정하기가 힘들다.

4) test하기 어렵다.

 

3.Java에서 가비지 컬렉터가 너무 잘 작동 했을 때 이 문제를 진단하는 방법과 해결 하는 방법은?

 

 

4.JVM 구조

- Method(Static) Area

class의 구조 정보가 들어간다.

 

- Stack Area

Method정보, 메소드 호출 시 사용하는 지역변수 데이터 등을 저장한다. {}가 끝나는 동안 유지된다.

JVM시작시 생성되고 프로그램이 종료될 때까지 유지된다.

 

- Heap Area

new 를 한 class의 instance가 여기로 들어감 gc의 주요 대상이다

 

5.가비지 컬렉션

- gc를 하는 시점

- 주요 대상은 heap 영역이다.

 

6.Thread 가 3개 생성 되었을 때 t1, t2, t3의 순서가 보장 되는 코드를 짜 보세요.

 

7.Process와 Thread의 차이점

java로 따지면 process는 .jar를 실행 하는 것이고 thread는 .jar내에서 실행 하는 것.

 

Process대신 Thread를 쓰는 이유는 Process는 다시 띄워야 하는데 Thread는 프로그램 안에서 해결이 되기 때문.

 

 

Java8

1.Java8에서 Stream을 사용한 경우 발생 할 수 있는 문제점은?

- fail이 났을 때 어느 부분에서 났는지 명확한 에러처리가 어려운 경우가 있습니다. 서버나 DB 액세스 하는 로직은 Stream이 컨트롤 하기가 더 까다로울 때가 있습니다.

 

2.java8을 써보셨나요?

 

3.java7에서 8로 올라오면서 어떤게 달라졌나요?

- lambda추가됨

- stream() api추가됨

 

4.java lambda를 써보셨나요?

 

 

 

Algorithm

1.pivotal(대각선이 고정인 행렬) 3x3, 4x4를 뒤집는 로직을 짜보세요 (재귀를 써야함).

bcp0109.tistory.com/entry/2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-%ED%9A%8C%EC%A0%84-Rotate-Java?category=850495

 

3.10칸짜리 배열로 스레드 세이프한 Queue를 만들어 보세요.

 

12.Call by value, Call by reference에 대해 설명 해보세요.

- call by value는 값을 넘기는 것이고 call by reference는 참조(메모리 주소, 포인터)를 넘기는 것입니다.

 

자바는 call by value이지만 method에 object를 넘기는 경우에는 call by reference처럼 보일때가 있습니다.

User user = new User();

public void processUser(User user);

이 경우 processUser 메소드에서 user.setName('kyeongrok')을 이용해 user의 값을 바꿀 수 있습니다.

 

class User {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

class UserTest {
    public static void processUser(User user, int v, Integer v2) {
        user.setName("bora");
        v += 1;
        v2 += 1;
    }
    public static void main(String[] args) {
        int v1 = 1;
        Integer v2 = 2;
        User user = new User();
        user.setName("kyeongrok");
        System.out.println(user.getName());
        processUser(user, v1, v2);
        System.out.println(user.getName());
        System.out.println(v1);
        System.out.println(v2);
    }
}

위 코드의 출력 값은

 

-------------

kyeongrok

bora

1

2

-------------

입니다.

 

processUser에 넘긴 것은 user Object입니다. user Object의 setName을 이용해 값이 바뀌는 것을 볼 수 있습니다.

 

 

개발을 할 때 이 부분을 조심해서 개발할 필요가 있습니다.

 

 

16.정렬, 재귀, 알고리즘의 시간 복잡도

- 재귀란?

자기 자신을 호출하는 것

 

- factorial을 재귀로 짜보세요

const factorial = (n) =>{

return (n -1) * factorial(n - 1)

}

 

 

4.동기, 비동기에 대해 설명하고 장단점을 각각 설명 해보세요.

- 동기 : call하고 응답이 올 때까지 기다렸다가 다음 로직을 실행한다.

 * 장점 : 안전성이 보장된다. 순서가 보장된다.

 * 단점 : 느리다.

 

- 비동기 : call하고 응답이 오지 않아도 다음 로직을 실행한다.

 * 장점 : 빠르다

 * 단점 : 처리 하기가 까다롭다. 순서가 보장이 되지 않는다.

 

비동기를 쓰는 이유는 빠르기 때문에 쓴다.

 

DB

1.DB 클러스터링과 리플리케이션의 차이점에 대해 설명해보세요.

- 클러스터링은  DB서버를 다중화 하는 것이고 리플리케이션은 서버와 데이터를 같이 다중화 하는 것

- replication은 master, slave로 구분

- clustering은 각각의 node가 동일한 정보를 사용하는데... 분배를...

 

2.DB클러스터링을 할 때 Master 2개를 설정하는 방법은?

 

 

Spring

1.Spring을 쓰는 이유

 

2.Spring에서 Single ton이란?

 

3.Spring DI, IoC에 대해 설명 해보세요.

- DI 의존성 주입 서비스를 통해 리소스를 제어하는데 서비스에 대한 인스턴스를...인서트 한다.

 

 

 

경험

1.지금까지 해본 프로젝트에 대해서 설명 해보세요.

- db에 데이터를 넣고 그것을 보내주는 기능을 만들었는데 서버는 뭘로 만들었고 클라이언트는 뭘로 만들었습니다.

사용자수는 어느정도 되었고 트래픽은 어느정도 였습니다.

 

2.협업을 할 때 일을 어떻게 나누었는지?

- 내가 설계를 하고 후임1 후임2에게 태스크로 어떤 작업을 할지 할당을 해주었다.

 

3.코드 리뷰는 어떻게 진행 했는지?

jira로 pull request를 내린다. 개발을 하기 전에 개발 방향을 먼저 회의 한다.

 

4.스트레스 테스트 해봤는지? 툴은 뭐 써봤는지? 결과는 어떻게 확인 하는지?

 

 

 

 

Elastic Search

1. Elastic Search가 빠른 이유?

- 데이터를 넣을 때 token 방식으로 인덱싱을 해서 넣기 때문에 검색 속도가 O(n)이 아니라 O(1)에 가깝기 때문에 빠르다

 

2. Elastic Search단점

- 데이터를 넣을 때 token 방식으로 인덱싱을 하기 때문에 추가, 변경이 다소 느리다.

 

3 Master Node와 Cluster Node의 차이점은?

 

면접 질문들

https://github.com/Mrchanghao/Interview_Question_for_Beginner

 

end.

 

 

기본적으로 물어보는건 지금까지 해봤던 프로젝트에서 직접 만들었던 시스템 아키텍쳐와 어려웠던점 문제를 어떻게 해결했는지 해결방법을 물어보았습니다.

 

단답형으로 두괄식으로 대답 해야 진행이 원활했습니다. 필요하다면 추가 질문이 옵니다.

 

그리고 백엔드는 기본적으로 안정성이 굉장히 중요하기 때문에 그리고 장애가 나면 다른 부분에도 영향을 미치기 때문에 너무 최신기술 등은 잘 안물어봤던 것 같습니다.

면접 들어오시는 분들도 나이대가 제법 있으신 분들이 들어오는 경향이 많았습니다.

 

기술면접은 시간이 1시간 정도 보는데 1시간을 꽉꽉 채워서 내가 이야기를 많이 하면 통과 하는 것 같습니다. 모른다고 얘기 많이 하면 떨어지는 것 같습니다. 저는 모른다는 얘기를 많이 했던 것 같아요.

 

 

 

다음 글

2018/01/29 - [면접] - 코딩 면접 질문들 - 사용자가 웹브라우저를 통해 서버에 이미지를 요청해서 사용자에게 보여주기까지 과정

 

 

 

728x90
블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.