본문 바로가기

Til

Til 24.03.28 모의면접준비

  1. 멀티스레딩 무엇이며, 사용하는 이유는?
    • 멀티스레딩은 하나의 프로세스 내에서 여러 스레드가 동시에 실행되는 것을 의미
    • 각스레드는 프로세스의 자원공유 / 독립적으로 실행 
    • 멀티스레딩의 사용이유
      • 성능향상 :여러작업을 동시에 처리하여 전반적인 성능을 향상시킴
      • 반응성향상 : UI 와 같은 반응성이 중요한 어플리케이션에서는 멀티스레딩을 통해 사용사입력에 빠르게 대답할수 있음
      • 작업 분리 : 서로 다른 작업을 여러 스레드로 나누어 병렬로 처리함으로써 코드를 더 잘 구성할 수 있음
  2. 데드락은 무엇인가?
    • 멀티 스레딩이나 병렬 프로그래밍에서 발생할수 있는 상태로 각 스레드가 서로 상대방의 작업이 끝나기를 기다리면서 진행이 멈춘상태
  3. 메모리 누수란 무엇이며, 왜 문제가 되는가?
    • 프로그램이 동적으로 할당한 메모리를 해제하지 않고 계속 보유하는 현상
      • 프로그램 실행시 사용 가능 메모리 공간이 점점 감소 (시스템 리소스 낭비 뿐만 아니라 메모리 부족으로 인한 비정상종료 유발)
  4. 워터풀, 애자일 방법론에 대해 설명하시오
    • 워터풀 (Waterfall) : 소프트웨어 개발과정을 선형적으로 이해하고 단계별로 진행하는 전통적인 방법
      • 요구사상분석 , 설계, 구현, 테스트, 유지보수등의 단계를 순차적으로 진행
    • 애자일(Agile)
      •  변화에 빠르게 대응하고 적극적으로 수용하는 반복적이고 적응적인 개발 방법론 (스크럼Scrum, 익스트림프로그래밍XP, 칸반Kanban등이 대표적)
  5. 소프트웨어 테스팅 종류에 대해 말하시오
    1. 기능테스트 :기능을 테스트하여 요구사항충족 확인 
    2. 성능테스트 : 시스템의 성능및 부하테스트를 수행 - 성능적인 측면 평가
    3. 회기테스트 : 변경사항이나 수정사항으로 인해 기존의 기능이 영향을 받지 않았는지 확인 - 모듈단위로 테스트수행
    4. 유닛테스트 : 소프트웨어의 각 기능이 올바르게 동작하는지 확인하기 위해 모듈단위로 테스트 수행
    5. 통합테스트 : 각모듈이 올바르게 통합되어 예상대로 동작하는지 확인 하는 테스트
  6. 선형 탐색과 이진 탐색의 시간 복잡도는 각각 무엇이며, 어떤 상황에서 각각을 사용해야 하나요?
    • 선형 탐색 : O(n)
    • 이진 탐색 : O(log n)
    • 선형탐색은 리스트나 배열을 처음부터 끝까지 순회하면서 원하는 항목을 찾는 방법-데이터가 정렬되어 있지 않거나 리스트의 크기가 작을때 적합
    • 이진탐색은 정렬된 배열의 중간 값과 비교하여 탐색 범위를  반으로 줄여가는 방법 - 데이터가 정렬되어 있을때 
  7. 힙의 사용 사례는 무엇이 있나요?
    1. 우선순위 큐 : 요소들이 특정 우선순위에 따라 처리되어야 하는상황에 사용
    2. 힙정렬 (Heap Sort) : 시간복잡도가 평균, 최악의 경우에도 O(n log n)의 시간복잡도를 가짐
    3.  다익스트라 알고리즘 : 그래프에서 최단경로를 찾는 데 사용되는 다익스트라 알고리즘은 최소 우선순위 큐를 필요로함 - 이때 힙이 필요
  8. 힙(Heap)이 무엇이며 어떻게 작동하나요? 최대 힙과 최소 힙의 차이점은 무엇인가요?
    1. 힙은 완전 이진 트리로서 , 부모노드와 자식 노드간의 대소관계가 정해진 자료구조
    2. 힙은 보통 배열을 사용하여 구현되며 부모노드의 값이 자식노드의 값보다 크거나 작은경우
      1. 최대힙 Max Heap : 부모노드의 값이 자식노드의 값보다 항상 크거나 같은힙 
      2. 최소힙 Min Heap : 부모노드의 값이 자식노드의 값보다 항상 작거나 같은 힙 
  9. 이진 탐색 알고리즘에 대해 설명해보세요.
    • 정렬된 배열레서 특정한 값을 찾는 알고리즘
    • 탐색범위를 반으로 나누어 찾고자하는 값이 현재 중간값보다 작으면 왼쪽 부분 배열을 탐색하고 크면 오른쪽 부분 배열을 탐색
    • 시간복잡도 O(log n) 으로 매우 효율적
    • 이진탐색은 반드시 정렬된 배열에서만 사용할수 있음
  10. Primary Key와 Foreign Key의 차이는 무엇인가요?
    • Primary Key : 데이터베이스 테이블에서 각 행을 유일하게 식별하는 열 (column) - 각테이블은 하나의 Promary Key 만 있을수 있으며 중복된 값을 가질수 없다.
    • Foreign Key : 다른 테이블의 Primary Key를 참조하는 열 - Foreign Key 를 통해 두 테이블 간의 관계를 설정할수 있음  , Foreign key 값은 다른테이블 의 Primary Key 값이거나 NULL이여야함
  11. 해시 테이블이 무엇이며, 어떻게 작동하나요? 충돌(Collision)은 어떤 문제를 일으키며, 이를 해결하기 위한 방법은 무엇인가요?
    1. 해시테이블은 해시함수를 사용해서 키와값을 쌍으로 저장하는 자료 구조 - 해시함수는 키를 해시값으로 변환하여 해당값의 인덱스를 계산
    2. 충돌은 서로 다른 키들이 다른 해시값을 가지는 상황 - 해시테이블에서 성능저하르 일으키는 주요문제
    3. 해결방법으로는 체이닝(충돌발생시 해당버킷에 연결리스트등을 이용해 데이터를 추가로 저장하는 방법)과 개방주소법(추돌시 다른빈 버킷을 찾아 데이터를 저장)
  12. 해시 테이블 자료구조를 사용하면 충돌이 발생할 수 있음에도 불구하고, 왜 사용하나요?
    • 빠른 검색 속도 , 메모리 효율성 , 유연성 (다양한 용도로 활용), 자료구조의 간단성
  13. 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)의 차이와 각각의 구현 방법에 대해서 설명해주세요.
    1. 우선깊이 탐색 :
      • 트리나 그래프에서 한 노드의 자식등리 먼저 탐색하는 방식
      • 스텍 또는 재귀함수를 사용하여 구현
      • 한 방향으로 가능한 멀리까지 탐색하고 더 갈 곳이 없으면 이전단계로 돌아와 다른방향 탐색
    2. 너비 우선 탐색 :
      • 한 노드의 모든 형제노드를 먼저 탐색
      • 큐를 사용하여 구현
      • 한 단계씩 탐색 하며 각 단계에서  현대 노드와 인접한 모든 노드를 방문한 후 다음단계로 이동 
  14. SQL Injection이 무엇이며, 어떻게 방지할 수 있나요?
    1. 사용자 입력을 통해 악의 적인 SQL 쿼리를 실행 시키는 공격기법  - 데이터 베이스에 저장된 정보를 유출하거나 조작할수 있음
    2. 방지방법 : 
      1. Prepared Statememts 또는 Parameterized Queries 사용  - 사용자 입력값을 직접 쿼리에 포함시키지 않고 매개변수화된 쿼리를 사용하여 SQL Injection을방지
      2. 입력값 검증 - 사용자 입력값을 검증하여 허용되지 않는 문자나 패턴이 포함되어 있는지 확인 
      3. 권한 제한 - 사용자에개 최소한의 권한만 부여하여 데이터 베이스 접근을 제한- 공격 가능성을 줄임
  15. 완전이진트리는 무엇인지 왜 사용하는지 설명해주세요.
    • 모든 내부 노드가 두개의 자식을 가진 이진트리 - 이러한트리는 높이가 작은 경우에 효율적으로 데이터를 저장하고 검색하는데 사용 - 힙이나 트라이 등의 자료구조를 구현하는데도 사용
  16. 가장 좋아하는 탐색 알고리즘과 그 이유를 설명해주세요.
    1. 깊이우선 탐색 :
      1. 재귀적인 방식으로 구현 - 코드가 보다 간결하고 이해하기 쉽다
      2. 그래프의 모든 노드를 방문할 때 사용할수 있어서, 너비우선보다 유연하게 사용가능
      3. 스택 자료구조를 사용하여 메모리 사용량이 적고 , 보다 공간 효율성이 좋음
  17. 조작어에 대해서 설명해주세요.
    • 컴터 프로그램이나 시스템을 제어하기 위해 사용되는 명령어 나 키워드
    • 프로그램의 실행 흐름을 변경하거나 데이터를 조작하는데 사용
    • 조작어는 변수의 값을 변경하거나 제어 흐름을 분기하고 반복하는데 사용
  18. 제어어에 대해서 설명해주세요.
    • 프로그램의 실행 흐름을 제어하는데 사용되는 명령어나 키워드
    • 조건문(if, else) 반복문 (for, while), 분기문 (switch) 등의 형태로 사용
    • 프로그램의 흐름을 조작하거나 특정한 조건에 따라 실행경로를 변경하는데 사용
  19. 정의어에 대해서 설명해주세요.
    • 데이터를 정의하거나 선언 하는데 사용되는 명령어나 키워드 
    • 변수, 상수, 데이터 구조등을 정의하거나 선언 하여 프로그램에서 사용할수 있도록 함
      • ex ) 변수를 선언하고 초기값 할당하는작업
  20. 사용해본 SQL 언어와 그 언어의 특징을 설명해주세요.
    • SQL은 관계형 데이터베이스에서 데이터를 조작하고 쿼리하는데 사용되는 표준화된 언어
    • My SQL :
      1. 오픈소스 무료로 사용할수 있는 관계형 데이터베이스 관리 시스템
      2. 빠르고 안정적이면 다양한 플랫폼에서 사용
      3. 강력한 기능을 제공하며 대규모 웹 애플리케이션에서 사용
  21. 퀵 소트 알고리즘의 동작 방식과 시간복잡도에 대해서 설명해주세요
    1. 퀵소츠 알고리즘은 분할정복 방식으로 정렬을 수행하는 알고리즘
      • 배열에서 하나의 요소를 피벗으로 선택
      • 피벗을 기준으로 배열을 분할하려 피벗보다 작은 요소는 왼쪽 큰요소는 오른쪽으로 이동
      • 각부분 배열에 대해 재귀적으로 퀵소트를 적용
      • 모든 부분 배열이 정렬되면 합쳐진배열 반환
    2. 퀵소트의 시간복잡도 
      • 평균 : O (n log n)
      •  최악 : O(n^2)
      • 일반적으로 매우빠른 정렬알고리즘 , 불안정 정렬에 속함
  22. 트랜잭션이 무엇인지 설명해주세요
    1. 데이터 베이스에서 수행되는 작업의 논리적 단위 
    2. 트랜잭션의 특성
      1. 원자성 : 모든작업은 완전히 실행되거나 실행되지 않아야 한다
      2. 일관성  : 실행되기 전과 후 에 데이터 베이스는 일관된상태 유지
      3. 고립성 : 여러 트랜잭션이 동시에 실행될때 각각의 트랜잭션은 다른 트랜잭션의 작업에 영향을 받지 않아야 함
      4. 지속성 : 트랜잭션이 성공적으로 완료되면 그결과는 영구적으로 데이터베이스에 반영되어야함