상세 컨텐츠

본문 제목

[BACKEND] 매일매일 준비하는 백엔드 기술면접 1/26-1/28

취준/1. 기술면접

by ranlan 2022. 2. 3. 00:12

본문

728x90

구글링하며 알게된 블로그가 있다. 검색하면서 자주 들어가기도하고 팔로우한 상태이기도해서 새 글이 올라오면 열심히 챙겨본다.

바로바로 망나니 개발자님 블로그(MangKyu's Diary) 인데 기술면접 관련해서 찾아보다가 기술면접 관련 구독 서비스를 구현하신걸 봤다.

공부할겸 나도 나만의 서비스를 만들어보고싶다 생각했었는데 실제로 구현하셔서 서비스 제공중이라니.. 그 실천력과 실력이 부러울 따름이다..

 

👉🏻 [망나니 개발자 Mangkyu's Diary] CS 기술 면접 준비를 위한 문제 구독 서비스 https://mangkyu.tistory.com/200

 

[기술면접] CS 기술 면접 준비를 위한 문제 구독 서비스(신청하세요!)

1. 기술 면접 준비를 위한 문제 구독 서비스(신청하세요!) [ 서비스 소개 ] 개발자가 되기 위해 또는 새로운 회사로 이직하기 위해 기술 면접 준비는 필수입니다. 많은 분들이 기술 면접을 준

mangkyu.tistory.com

암튼 나도 신청을 해서 매일 새벽에 메일로 질문 3개씩 받고 있다. 설 연휴와 그간 일정들 땜시 완벽히 보진 못했지만 누워서 자기 전 문제들을 한번씩 훑고 생각해보고있다. 역시나 기록을 안남겨두면 계속 까먹기에 망나니 개발자님 허락을 받고 메일로 받은 질문들과 새로 배운 내용들을 정리해보려구 한당

기술면접을 준비중인 누군가가 내 블로그를 본다면 꼭 신청하세용 추천추천

 

 

 

 

2022/01/26

1. [JAVA] Java의 Optional API에 대해 설명하라

  • Optional 클래스란
    자바는 Optional 이라는 래퍼 클래스를 제공한다. 해당 클래스는 NullPointerException을 대응하기 위한 클래스로 널값이 될 수 있는 값을 감싸는 클래스이다. 따라서 값이 널이더라도 NPE(NullPointerException)이 발생하지 않는다.

  • 사용 시 장점
    NullPointerException을 방지하고 애플리케이션이 안정적으로 운영된다.

  • 사용 시 주의사항
    Optional은 널 또는 실제 값을 래퍼로 감싸는 래퍼 클래스이다. 따라서 Optional을 반환하는 메서드는 절대 널을 갖는 value를 반환해서는 안된다. 또한 Optional은 값을 래핑하고 다시 풀고, 널일 경우 대체하는 함수를 호출하는 등 추가 작업으로 인해 성능이 저하될 수 있음으로 반환값이 널이 절대 아니라면 Optional을 사용하지 않는 것이 좋다.
    즉, Optional은 메서드의 결과가 널이 될 수 있으며 클라이언트가 이 상황을 처리해야할 때 사용하는 것이 좋다.

  • Optional 남발의 위험성
    • Optional의 값의 존재 여부를 확인하지 않으면 NullPointerException 대신 NoSuchElementException이 발생한다.
    • 직렬화 시 문제가 발생한다. 기본적으로 Optional은 직렬화를 제공하지 않기 때문에 캐시나 메시지큐등 연동 시 문제가 발생할 수 있다.
    • 객체 자체의 NPE와 값의 NoSuchElementException 방지를 위해 코드가 더 복잡해지고 가독성이 떨어진다.
    • Optional은 객체를 감싸는 컨테이너이므로 기존의 값을 저장하기 위한 메모리보다 더 많은 메모리가 할당된다. 또한 컨테이너안의 값에 접근해야함으로 접근 비용도 증가한다.

  • 올바른 사용법
    • Optional 변수에 Null을 할당하지 않는다. 필요할 시 Optional.empty()로 초기화한다.
    • isPresent() 확인 후 get()을 통해 값을 얻기 보다는 orElseX()를 활용해 처리한다.
    • 단순히 값을 얻으려는 목적에 Optional을 남발하지 않는다.
    • 메서드 파라미터로 Optional을 넘기지 않는다.
    • Collection의 경우 Optional을 사용하지 말고 빈 Collection으로 처리한다.
    • Optional의 설계 목적에 맞게 반환 타입으로만 사용한다.

  • 참고
    https://gre-eny.tistory.com/194
    https://velog.io/@dnstlr2933/Optional-API
    https://mangkyu.tistory.com/70

 

2. [DATABASE] 인덱스(Index)를 사용할 때 주의할 점

  • 인덱스란
    인덱스란 책의 목차처럼 추가적인 저장공간에 위치(주소) 정보를 저장하여 데이터베이스의 성능을 높히는 방법이다.
    인덱스를 생성하면 데이터 정렬 후 별도의 메모리 공간에 데이터의 물리적인 주소 정보를 <키, 포인터> 형태로 저장한다. 해당 컬럼이 조회 조건에 포함되면 full-scan 전 인덱스를 먼저 탐색하기 때문에 검색속도를 향상시킬 수 있다.

  • 인덱스 생성 전략
    • 조건절(where)에 많이 사용되는 컬럼
    • 중복 데이터가 최소한인(분포도가 좋은) 컬럼
    • order by나 join으로 자주 사용되는 컬럼
    • 여러 컬럼으로 생성 가능하다.

  • 인덱스 사용 시 주의사항
    • 인덱스 컬럼은 함수를 사용하는 등 가공해서는 안된다.
    • 인덱스 컬럼은 자료형 변환이 발생하면 안된다(암시적 형변환 대신 명시적 형변환을 사용한다).
    • 부정 비교 연산을 사용해선 안된다.
    • 조건절에 Null 비교나 OR 사용을 자제한다. 
    • 인덱스를 잘못 관리할 시 성능 저하로 이어진다.

 

3. [SERVER] REST API 사용 전과 후의 느낀점
REST란 웹에 존재하는 모든 자원에 고유한 URI를 부여하여 활용하는 방법론으로 이러한 특징을 기반으로 API를 제공하는 것이 REST API이다. 

 

 

 

2022/01/27

1. [OS] 데드락(DeadLock)에 대해 설명하세요.
데드락(교착상태)은 두 작업이 서로 상대방의 수행이 끝나는 것을 기다리다 결과적으로 두 작업 모두 종료되지 못한채 무한히 대기하는 상태를 말한다.
교착상태가 발생하기 위해서는 4가지 조건이 충족되어야하며 예방하기 위해서는 네 조건 중 어느 하나라도 발생하지 못하게하며 된다.

  • 상호배제
    자원은 한번에 한 프로세스만 사용할 수 있다.
  • 점유대기
    최소 하나의 자원을 점유하고 있으면서 다른 프로세스가 사용중인 다른 자원을 점유하기 위해 대기한다.
  • 비선점
    사용중인 자원은 작업이 끝날 때까지 다른 프로세스에게 넘겨줄 수 없다.
  • 환형대기
    공유 자원과 공유 자원을 대기하는 프로세스들이 원형으로 구성되어있다.

 

2. [DATABASE] 인덱스(Index) 구현에 사용되는 대표적인 자료구조에 대해 설명하세요.

 

3. [SPRING] 스프링의 스코프 프로토 타입 빈에 대해 설명하세요.

  • 빈 스코프(Bean Scope)
    빈(스프링에서 관리하는 자바 객체)이 존재할 수 있는 범위. 스프링은 기본적으로 싱글톤 타입의 스코프를 제공한다.

  • 싱글톤(Singltetone)
    기본 스코프로 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.
    싱글톤은 실제로 생성되는 객체는 하나이고 최초 생성 이후 호출된 생성자는 최초의 생성자가 생성한 객체만 반환하는 스코프 패턴이다.
    스프링 컨테이너가 빈의 초기화부터 종료까지 관여하기 때문에 빈의 종료 메서드가 알아서 실행된다.
    멀티스레드 환경에서 문제가 발생한다.

  • 프로토타입(Prototype)
    @Component @Scope("prototype")
    빈의 생성과 의존관계 주입까지 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.
    항상 같은 인스턴스를 반환하는 싱글톤과 달리 호출 시 항상 새로운 인스턴스를 생성해 반환한다.

    스프링 컨테이너가 생성과 의존관계 주입까지만 관여하기 때문에 컨테이너가 종료되어도 @PreDestroy가 실행되지 않는다. 따라서 빈을 받은 클라이언트에서 빈의 사용 종료를 처리해주어야 한다.

  • 웹 관련 스코프
    • Request 웹 요청이 들어오고 나갈 때까지 유지되는 스코프
    • Session 웹 세션이 생성, 종료될 때까지 유지되는 스코프
    • Application 웹 서블릿 컨텍스트와 같은 범위로 유지하는 스코프

  • 싱글톤 빈과 프로토타입 빈
    • 프로토타입 빈에서 싱글톤 타입 빈 참조
      문제가 발생하지 않는다.
    • 싱글톤 타입 빈에서 프로토타입 빈 참조
      싱글톤 타입 빈을 사용할 때 처음 주입받은 프로토타입 빈이 갱신(변경)되지 않는다.

  • 참고
    https://velog.io/@kir3i/%EC%84%B9%EC%85%98-9.-%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85-%EC%8A%A4%EC%BD%94%ED%94%84-%EC%8B%B1%EA%B8%80%ED%86%A4-%EB%B9%88%EA%B3%BC-%ED%95%A8%EA%BB%98-%EC%82%AC%EC%9A%A9-%EC%8B%9C-%EB%AC%B8%EC%A0%9C%EC%A0%90
    https://atoz-develop.tistory.com/entry/Spring-%EB%B9%88%EC%9D%98-Scope-%EC%8B%B1%EA%B8%80%ED%86%A4%EA%B3%BC-%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85

 

 

2022/01/28

1. [DATABASE] 대표적인 RDBMSNoSQL에는 어떤 것들이 있고 두 데이터베이스 시스템 사이 차이점에 대해 설명하세요.

  • RDBMS
    행과 열의 2차원 형태로 구성된 데이터를 다루는 데이터베이스 시스템이다.
    정해진 스키마에 따라 데이터를 관리하기 때문에 데이터 정합성 유지와 관리가 편하지만 시스템이 커질수록 쿼리가 복잡해지고 성능이 저하되며 수평확장이 어렵다.
    예로 MySQL, MS SQL, PostgreSQL 등이 있다.
  • NoSQL
    정해진 스키마 없이 키: 값 형태로 데이터를 저장하는 시스템이다.
    데이터베이스 모델 종류로는 Key-Value, Document, Column-Family, Graph 네가지로 나눌 수 있다.
    유연한 데이터 관리와 새로운 필드 지정 등 수평 확장이 용이하다. 하지만 중복 데이터에 대한 관리가 필요하다. 정확한 데이터 구조를 알 수 없는 경우 사용하기 좋다.
    예로 MongoDB, Redis, 카산드라(Cassandra), 파이어베이스의 파이어스토어와 실시간 데이터베이스 등이 있다.

 

2. [SERVER] Restful API에 대해 설명하세요.

REST란 웹에 존재하는 모든 자원에 고유한 URI를 부여하여 활용하는 방법론이다. Rest의 이러한 특징을 기반으로 Rest 아키텍처 규칙을 지켜 API를 제공하는 것이 Restful API이다. 누구나 이해하기 쉽고 사용하기 쉬운 Rest API 설계를 목적이다.

  • 소문자를 사용한다.
  • 밑줄(_) 대신 하이픈(-)을 사용한다. 가급적 하이픈 사용도 최소화한다.
  • 슬래시(/)는 계층 관계를 나타낼 때 사용한다.
    URL의 마지막에 슬래시(/)를 포함하지 않는다.
  • URI는 정보의 자원을 표현해야한다. 리소스명은 동사가 아닌 명사를 사용한다.
  • 자원의 행위는 URL 대신 HTTP 메서드에 포함시켜야 한다.
    URL는 자원을 표현하는데 중점을 두어야하기 때문에 정보의 자원을 표현해야하며 동사보다는 명사를 사용해야한다.
    컨트롤 자원을 의미하는 경우 예외적으로 동사를 허용한다.
  • 확장자를 사용하지 않는다.

 

3. [DATABASE] 이상현상이 무엇인가요.

이상현상이란 데이터 중복으로 인해 발생하는 데이터 불일치 현상이다. 데이터 중복 문제는 정규화를 통해 해결할 수 있다.

  • 삽입이상
    원치 않는 정보가 삽입되거나 정보가 부족하여 삽입이 발생하지 않는다.
  • 삭제이상
    정보 삭제 시 원치 않는 정보가 함께 삭제된다.
  • 갱신이상
    반복된 데이터 중 일부를 갱신할 때 데이터 불일치 현상이 발생한다.

 

728x90

관련글 더보기

댓글 영역