티스토리 뷰

728x90

 

 

[ 팀 스파르타 - 모의 면접 준비 2 ] 

 

모의 면접 Level 2

 

 

 

1. 멀티스레딩 무엇이며, 사용하는 이유는?

  • 멀티스레딩(Multithreading)이란 하나의 프로세스 내에서 여러개의 스래드를 동시에 실행하는 기술이다. 스레드는 프로세스 내에서 실행되는 단위로, 각각 독립적으로 실행될 수 있다.
  • 멀티스레딩을 사용하는 이유는 여러개의 스래드를 동시에 사용할 수 있기 때문에 동시에 여러작업을 할 수 있고, 프로세스 내에서의 자원공유가 효율적이며(이를 위한 적절한 동기화 매커니즘이 필요하다), 작업을 분할하고 사용자와의 상호작용이 용이(응답성 향상)하다.

 

 

2. 데드락은 무엇인가?

  • 데드락(Deadlock)은 멀티스레드 또는 멀티프로세스 환경에서 발생할 수 있다. 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리며 무한히 대기하는 상황!

 

 

3. 메모리 누수란 무엇이며, 왜 문제가 되는가?

  • 메모리 누수(Memory Leak)는 프로그램이 동적으로 할당한 메모리를 해제하지 않고 계속 사용하는 상황이다. 즉, 프로그램이 메모리를 사용한 뒤에는 해당 메모리를 반환하지 않고 계속 참조하고 있는 경우!
  • 왜 문제가 되는가?
    • 메모리 소진 : 메모리양이 계속 증가한다
    • 성능 저하 : 사용가능한 메모리양이 줄어들어 느려진다.
    • 안정성 문제 : 메모리 부족이 생기면 프로그램이 예기치 않게 종료되서 장기 실행되는 서비스의 안정성이 문제 될 수 있다.
    • 리소스 낭비 : 시스템의 해당 자원을 다른 목적으로 사용할 수 없기 때문에 리소스의 효율적인 사용을 방해한다.

 

 

 

4. 워터풀, 애자일 방법론에 대해 설명하시오

  • 워터풀(Waterfall) 방법론은 소프트웨어의 초기 방법론 중 하나로 일련의 선형 단계를 거쳐 소프트웨어를 개발하는 접근 방식이다. 한 단계가 완료되어야 다음 단계로 넘어갈 수 있다. 요구사항 변경이나 오류 수정 같은 상황에는 유연하게 대응하기 어렵다.
  • 애자일 방법론은 워터풀과 달리 반복적이고 점진적인 방식으로 소프트웨어를 개발하는 접근 방식이다. 프로젝트를 짧은 반복주기로 나누어 작업한다. 각 반복 주기 마다 요구사항의 변화에 유연하게 대응할 수 있고 팀원 간의 협력과 의사소통을 강화함.

 

 

5.소프트웨어 테스팅 종류에 대해 말하시오

  • 소프트웨어 테스팅은 소프트웨어의 품질과 안정성을 확인하는데 필수적이다.
  • 여러 종류가 있는데 유닛 테스트(개별 모듈 또는 코드 단위의 동작을 테스트), 통합 테스트(여러 모듈이나 컴포넌트의 상호작용을 테스트), 시스템 테스트(전체 시스템의 기능적 요구사항을 확인한다), 성능 테스트(시스템의 성능을 측정, 응답시간, 처리량, 안정성을 평가) 등이 있다.

 

 

6. 선형 탐색과 이진 탐색의 시간 복잡도는 각각 무엇이며, 어떤 상황에서 각각을 사용해야 하나요?

  • 선형탐색은 O(n), 이진 탐색은 O(log n) 의 시간복잡도를 가지며
  • 선형탐색은 리스트가 정렬되지 않거나 무작위로 배치되어 있어 검색을 해야할 위치가 불규칙할 때 유용하다. 대신 리스트의 크기가 작을 때 좋다.
  • 이진탐색은 리스트가 정렬되어있고 크기가 큰 경우에 사용한다.

 

 

7. 힙의 사용 사례는 무엇이 있나요?

  • 작은/ 큰값 찾기:최대힙, 최소힙을 사용해 배열에서 가장 크거나 가장 작은 값은 빠르게 찾는다.
  • 정렬 알고리즘 : 힙을 사용하여 정렬한다. 힙에 값을 다 넣은 뒤 힙이 빌 때까지 delete() 해서 나온 값들을 순서대로 저장하여 정렬.

 

 

8. 힙(Heap)이 무엇이며 어떻게 작동하나요? 최대 힙과 최소 힙의 차이점은 무엇인가요?

  • 힙은 이진트리의 일종으로 부모노드 값이 자식 노드의 값보다 항상 크거나 작은 조건을 만족하는 자료 구조로 완전이진트리의 형태를 가진다.
  • 작동방식은 초기화(힙조건 만족하도록 재배열)→ 요소추가→ 요소삭제 로 가장크거나 가작 작은 데이터를 찾는다.
  • 최대힙은 부모노드의 값이 자식노드의 값보다 크거나 같고, 최소힙은 부모노드의 값이 자식 노드의 값보다 작거나 같다.

 

 

9. 이진 탐색 알고리즘에 대해 설명해보세요.

  • 이진 탐색 알고리즘은 정렬된 배열에서 특정요소를 찾는 알고리즘. 시간 복잡도는 O(log n)으로 탐색범위를 만으로 나누어가기 때문에 배열의 크기에 비례하여 성능이 향상된다.

 

 

10. Primary Key와 Foreign Key의 차이는 무엇인가요?

  • Primary Key (기본 키) 는 테이블당 하나씩 존재하며 유일하게 값을 식별할 수 있게 해주는 역할 (NULL이 아니어야함)
  • Foreign Key (외래 키) 는 컬럼 중 다른 테이블의 기본키를 참조하는 것.
  • 차이점은 기본 키는 테이블 내 각 행을 고유하게 식별하는 것이고 외래키는 두 테이블 간의 관계를 정의하고 유지하는데 사용되는 키이다.

 

 

11. 해시 테이블이 무엇이며, 어떻게 작동하나요? 충돌(Collision)은 어떤 문제를 일으키며, 이를 해결하기 위한 방법은 무엇인가요?

  • 해시 테이블(Hash Table)은 키-값(key-value) 쌍을 저장하고 검색하는 데 사용되는 자료 구조.
  • 작동 방법은 해시함수 적용 (키에 대한 값을 생성) → 테이블 인덱스 결정 (해시값을 테이블의 크기로 나눈 인덱스를 사용하여 버킷에 접근) → 충돌 처리 (동일한 해시값의 키를 충돌처리함)
  • 충돌은 서로 다른 키를 같은 버킷에 저장하려고 할때 발생하는데 해결하기 위해선 다양한 해시 함수 사용, 체이닝(버킷에 연결 리스트를 사용해 키를 저장), 개방 주소법(다른 빈 버킷을 찾아 키를 저장) 하는 방식으로 해결한다.

 

 

12. 해시 테이블 자료구조를 사용하면 충돌이 발생할 수 있음에도 불구하고, 왜 사용하나요?

  • 해시 테이블은 빠른 검색 및 삽입, 메모리 효율성, 다양한 응용분야에서의 유연성 등의 장점이 있어 많이 사용되고 충돌을 해결하는 방법을 통해 효율적으로 관리할 수 있다.

 

 

13. 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)의 차이와 각각의 구현 방법에 대해서 설명해주세요.

  • 깊이 우선 탐색(DFS)은 한 지점에서 시작해 경로를 따라 끝까지 탐색한 후 다음경로로 이동하고, 너비 우선 탐색(BFS)은 한 지점에서 시작해 해당 지점과 인접한 모든 지점을 먼저 탐색한 후 다음 인접한 모든 지점을 탐색.
  • 구현 방식은 깊이는 재귀 또는 스택을 사용, 너비는 큐를 사용하여 구현한다.

 

 

14. SQL Injection이 무엇이며, 어떻게 방지할 수 있나요?

  • SQL Injection은 악의적인 사용자가 애플리케이션의 입력 폼 또는 매개변수에 SQL 쿼리를 삽입하여 데이터베이스에 대한 허가되지 않은 액세스를 시도하는 공격 기법이다.
  • 방지하는 방법은 여러가지가 있지만 그 중 사용자 입력 검증, 적절한 권한 설정, 정기적인 보안 검토를 하게 되면 공격을 예방하고 데이터 베이스를 안전하게 보호 할 수 있다.

 

 

15. 완전이진트리는 무엇인지 왜 사용하는지 설명해주세요.

  • 완전 이진트리는 모든 레벨에서 노드가 왼쪽에서 오른쪽으로 채워진 상태. 즉, 마지막 레벨을 제외한 모든 레벨에서 노드가 꽉 차 있는 이진 트리를 말한다.
  • 왜 사용하는가? 완전 이진트리는 메모리 사용의 효율성과 이진 힙 등의 자료 구조를 구현하는 데 유용하며, 탐색 및 정렬 알고리즘에서도 활용할 수 있는 중요한 자료 구조이다.

 

 

16. 가장 좋아하는 탐색 알고리즘과 그 이유를 설명해주세요.

  • 탐색 알고리즘은 데이터 구조 내에서 원하는 항목을 찾는 데 사용됩니다. 다양한 탐색 알고리즘이 있지만, 그 중에서도 가장 널리 사용되는 몇 가지를 소개하겠습니다:
    1. 선형 탐색(Linear Search):
      • 리스트나 배열과 같은 자료 구조에서 원하는 항목을 처음부터 끝까지 차례대로 확인하여 탐색하는 방법입니다.
      • 시간 복잡도: O(n)
    2. 이진 탐색(Binary Search):
      • 정렬된 배열에서 원하는 항목을 찾는 방법으로, 중간 값과 비교하여 탐색 범위를 반으로 줄여가는 방식입니다.
      • 시간 복잡도: O(log n)
    3. 깊이 우선 탐색(DFS, Depth-First Search):
      • 그래프나 트리 구조에서 한 지점에서 시작하여 가능한 한 끝까지 탐색하는 방법으로, 한 경로를 따라 탐색한 후 다음 경로로 이동합니다.
      • 재귀나 스택을 사용하여 구현할 수 있습니다.
    4. 너비 우선 탐색(BFS, Breadth-First Search):
      • 그래프나 트리 구조에서 한 지점에서 시작하여 해당 지점과 인접한 모든 지점을 먼저 탐색한 후, 그 다음 인접한 모든 지점을 탐색하는 방법입니다.
      • 큐를 사용하여 구현할 수 있습니다.
    5. 이진 탐색 트리 탐색(Binary Search Tree Search):
      • 이진 탐색 트리라는 특별한 형태의 트리에서 원하는 항목을 찾는 방법으로, 트리의 루트에서 시작하여 해당 값을 찾을 때까지 왼쪽 또는 오른쪽 자식으로 이동합니다.
      • 시간 복잡도: 평균적으로 O(log n), 최악의 경우 O(n)
    6. 그래프 탐색(그래프 탐색 알고리즘):
      • 그래프의 모든 정점을 방문하는 방법으로, DFS와 BFS가 가장 일반적인 그래프 탐색 알고리즘입니다.
      • 다양한 그래프 탐색 알고리즘이 있지만, 대표적으로 DFS와 BFS가 있습니다.
    이러한 탐색 알고리즘은 다양한 문제 해결에 사용되며, 각각의 특성에 따라 적합한 상황이나 데이터 구조에 적용됩니다.

 

 

17. 조작어에 대해서 설명해주세요.

  • 조작어란 컴퓨터 시스템이나 프로그램에게 원하는 행동을 하도록 유도하는 명령어나 문구

 

18. 제어어에 대해서 설명해주세요.

  • 제어어란 데이터를 검색하거나 조작하는 과정에서 프로그램의 실행 흐름을 제어하는 명령어

 

19. 정의어에 대해서 설명해주세요.

  • 정의어란 데이터베이스 객체를 생성하는 사용자를 가리키는 개념. 정의어는 해당 객체의 소유자이며, 해당 객체의 권한과 보안 설정에 영향을 준다.

 

20. 사용해본 DBMS가 무엇인지, 간단하게 설명해주세요.

  • MySQL 을 썻고 가장 널리 사용되는 관계형 데이터베이스 관리 시스템이다. 사용이 쉽고 다양한 환경에 널리 사용할 수 있다.

 

 

21. 퀵 소트 알고리즘의 동작 방식과 시간복잡도에 대해서 설명해주세요 

  • 퀵 소트 알고리즘의 시간복잡도는 O(n log n) 이고 동작 방식은 분할 정복 알고리즘으로 피벗을 기준으로 피벗보다 작은 원소의 피벗으로 분할하고 분할이 완료될 때 까지 반복 후 정복( 재귀적으로 퀵 정렬) 배열이 독립적으로 정렬된다. → 결합 과정을 거치지 않아도 정렬이 완료된다.

 

 

22. 트랜잭션이 무엇인지 설명해주세요

  • 트랜잭션은 DB에서 수행되는 작업의 논리적인 단위를 말한다. ACID 특징을 가진다. 원자성(Atomicity)(0,1로 전부 실행 or 전혀 실행 안됨), 일관성(Consistency)(모순이 없음), 독립성(Isolation)(다른 트랜잭션 접근 안됨), 지속성(Durability)(영구적 저장)

 

 

 

 

 

 

반응형
반응형
TAG
more
최근에 올라온 글