230518 TIL #88 Spring Q&A - 1

김춘복·2023년 5월 17일
0

TIL : Today I Learned

목록 보기
88/543
post-custom-banner

230518 Today I Learned

지원 주차 6일째. 목터뷰에서 면접대비 문항을 정리했다.


Spring 면접대비 - 1

1. 배열과 리스트를 비교해서 설명해주세요

배열은 데이터들이 메모리 공간에서 연속적으로 저장되어 있는 자료구조입니다. 인덱스를 사용해 특정 위치의 요소에 빠르게 엑세스할 수 있습니다.
반면 리스트는 연결된 노드로 구성되어 있습니다. 그래서 메모리에 불연속적으로 배치될 수 있습니다. 각 노드는 다음 노드의 주소를 가르키는 포인터를 포함하고 있으며 이를 통해 요소에 엑세스할 수 있습니다.
이러한 특징 때문에 리스트는 삽입/삭제에 유용할때, 배열은 빠른 접근(검색)이 필요하면서 수정이 적을 때 사용하면 좋습니다.
배열의 크기는 고정되어있으며, 리스트는 동적으로 크기를 조정할 수 있습니다.

  • 배열은 인덱스를 이용한 탐색에 O(1), 삽입, 삭제에 O(n) (맨끝에 삽입/삭제는 O(1))
    리스트는 특정 위치 삽입/삭제에 O(1), 탐색에 O(n)

1-1. 리스트, 어레이리스트, 링크드리스트

  • 리스트 : 가장 일반적인형태로 요소를 순서대로 저장
  • 어레이리스트 : 내부적으로 배열을 사용해 요소를 저장하며 인덱스를 사용할 수 있다.
    동적으로 크기 조정이 가능하다.
  • 링크드리스트 : 요소들을 연결된 노드 형태로 저장한다. 특정위치에 접근하려면 처음부터 순차적으로 탐색해야한다.

2. CORS가 무엇이고 어떻게 허용할 수 있나요?

웹어플리에키션 보안 정책 중 하나로, 웹페이지에서 리소스를 다른 도메인으로 요청할 때 브라우저에서 적용하는 규칙입니다. 기본적으로 브라우저는 SOP(동일출처정책)을 따르는데, CORS는 이를 완화해 다른 출처의 리소스 요청을 허용해줍니다.
CORS를 허용하려면 서버에서 적절한 CORS 해더를 response에 포함해야 합니다. 서버에서 Access-Control-Allow-Origin 헤더에 허용할 출처를 기재하면 됩니다.


3. 시간복잡도와 공간복잡도가 무엇인가요?

둘 다 알고리즘의 효율성을 분석하는 지표입니다.
시간복잡도는 알고리즘이 문제를 해결하기 위한 연산의 횟수를 말합니다. 주어진 입력 크기에 따라 알고리즘의 실행시간이 어떻게 증가하는 지를 분석합니다. 일반적으로 Big O 표기법을 사용하며 최악의 경우 걸리는 시간을 의미합니다.
공간복잡도는 알고리즘이 실행되는 동안 사용되는 메모리 공간의 양을 나타냅니다. 마찬가지로 최악의 경우를 고려해서 Big O 표기법으로 나타냅니다.
둘 다 복잡도가 낮을 수록 좋은 알고리즘입니다.

  • 알고리즘 : 문제를 해결하기 위해 거쳐야 하는 일련의 과정
  • 자료구조 시간 복잡도

4. 사용자 패스워드를 전송하고 보관하는 방법에 대해 말해보세요

유저가 패스워드를 입력하면 평문으로 서버에 전송되는데, 이를 서버에서 bcrypt 같은 단방향 해시 함수로 암호화해 저장합니다. 이를 통해 DB에 저장된 값으로는 유저의 암호를 알아낼 수 없습니다. 보안을 위해 추가적으로 랜덤 데이터를 더해 암호화를 하는 솔팅이나 여러번 해시를 적용해 암호화하는 키스트레칭을 적용할 수 있습니다.


5. 스택과 큐에 대해 설명해주세요

스택은 후입선출 LIFO 방식으로 동작합니다. 데이터를 push로 삽입해 가장 최근에 삽입된 데이터가 맨위에 위치하게 되고, pop으로 가장 최근에 삽입한 데이터를 반환하면서 삭제합니다. 웹브라우저의 뒤로가기 같은 기능에서 사용됩니다.
큐는 선입선출 FIFO 방식으로 동작합니다. enqueue로 삽입하고, dequeue로 가장 오래되고 뒤쪽에 있는 데이터를 반환하면서 삭제합니다. 대기열 같은 곳에서 사용됩니다.

profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글