TIL 240328

hyeo71·2024년 3월 28일
0

2024 내배캠 AI 트랙

목록 보기
63/108

모의 면접

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

  • 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것
  • 각 스레드가 자신이 속한 프로세스의 메모리를 공유(code, data, heap 영역), stack 영역은 공유 안함 -> 시스템 자원의 낭비가 적다
  • 하나의 스레드가 작업중일 때 다른 스레드가 별도의 작업을 할 수 있어 응답성이 좋아짐

2. 데드락이란

  • 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있어 결과적으로 아무것도 완료하지 못하는 상태
  • 멀티 프로그래밍 환경에서 한정된 자원을 사용할 때 발생할 수 있음
  • 발생 조건 (
    상호 배제(자원은 한 번에 한 프로세스만 사용),
    점유 대기(최소 하나의 자원을 점유하면서 다른 프로세스에 할당된 자원을 추가로 점유하려는 프로세스가 있음),
    비선점(할당된 자원은 사용이 끝날 때가지 강제로 빼앗을 수 없음),
    순환 대기(프로세스 집합에서 P0은 P1점유한 자원을 대기 P1은 P2 ..... Pn은 P0의 자원을 요구하는 것)
    )

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

  • 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하는 현상
  • 메모를 사용한 뒤 할당을 헤제하지 않으면 메모리 사용량이 증가하고 결국 시스템의 메모리가 부족해져 운영체제가 프로그램을 강제로 종료하거나 메모리 할당에 실패할 수 있음

4. 워터폴, 에자일 방법론이란

  • 워터폴(폭포수 방법론): 요구사항 정의-디자인-개발-테스트-배포의 과정을 순차적으로 진행, 단계별로 업무를 분담해서 맡은 역할이 명확, 계획 단계의 문서화로 시간, 상황 파악, 병목 파악이 쉬움 / 속도가 느림, 유연성이 부족

  • 에자일: 일정한 주기를 가지고 제품을 출시해서 고객의 요구사항, 변화된 환경에 맞게 요구를 수정해나가는 방법론, 짧은 사이클(디자인, 개발, 테스트)로 제품을 제품을 개발, 테스트, 피드백을 받아 보완

5. 소프트웨어 테스팅 종류

큰 틀

  • 블랙 박스: 외부 사용자 관점에서 기능을 테스트하는 것, 소스 코드는 테스트 대상이 아니고 주고 QA(서비스의 기능과 품질을 검증)에서 사용

  • 화이트 박스: 프로그램 코드를 검증하면서 소프트웨어 기능을 테스트 하는 기법, 주로 개발자가 사용

테스트가 접근하는 레벨의 관점

  • 단위: 프로그램을 구성하는 기본 단위를 테스트, 기본 단위를 독립 실행한 결과값이 예상값과 일치하는지 확인

  • 통합: 시스템은 여러 컴포넌트 간의 상호 작용으로 이루어짐, 같은 시스템 또는 다른 시스템과의 컴포넌트 간 상화 작용을 테스트

  • 시스템: 완전하고 통합된 하나의 시스템에 대해 요구 스펙을 만족하는지 확인하는 테스트

6. 선형 탐색과 이진 탐색의 시간 복잡도, 어떤 상황에서 사용하는지

  • 선형 탐색: 순서대로 하나씩 원하는 결과가 나올 때까지 탐색, O(n)
  • 이진 탐색: 반씩 제외하면서 원하는 값이 나올 때까지 탐색, O(logn), 정렬된 리스트에서 특정한 값을 찾고 싶을 때 사용

7. 힙의 사용 사례

  • 우선순위 큐
  • 힙 정렬
  • 최댓값, 최솟값을 빠르게 찾고 싶을 때
  • 중간값을 찾을 때
  • 최단경로를 찾을 때 (다익스트라)

8. 힙이 무엇이며 어떻게 작동하는지, 최소 힙과 최대 힙의 차이점

  • 최댓값, 최솟값을 찾아내는 연산을 하기 위해 고안된 완전이진트리를 기본으로 한 자료구조
  • 배열, 리스트로 구현
  • 최소힙 기준 부모노드가 자식노드보다 값이 작아야 함
  • 루트노드가 최솟값을 갖도록 하는 힙을 최소힙, 반대 최대힙

9. 이진 탐색 알고리즘에 대해서

  • 배열, 리스트의 중간에 위치한 임의의 값과 찾고자하는 값을 비교하여 원하는 값이 더 작다면 임의의 값 왼쪽을 크다면 오른쪽을 탐색하는 것을원하는 값이 나올때까지 반복

10. PK와 FK의 차이점

  • PK: 테이블의 유일한 값을 가지는 필드, 중복, NULL, 공백 불가, NOT NULL + Unique 속성을 충족, 다른 테이블의 필드에서 참조당함

  • FK: 다른 테이블의 PK와 연결, 중복, null 가능, 참조하는 테이블에서 FK 선언, PK 타입과 동일하게 사용, PK 필드명과 동일하게 사용하는 것을 권장

11. 해시 테이블이 무엇이며, 어떻게 작동하는지, 충돌은 어떤 문제를 일으키고 이를 위한 해결 방법

  • 해시 함수를 사용하여 변환한 값을 index로 key, value를 저장하는 자료구조

  • key값을 해시 함수로 사용한 값을 index로 하여 해당 공간에 데이터를 저장

  • 결정론적이어야 하고 원하는 범위의 값이 고르게 리턴되도록 해야 하고 빨라야 함

  • 키 값이 다른데 같은 해시 결과값이 나오면 데이터의 충돌이 일어남, 이전의 데이터가 사라질 수 있음

  • chaining: 충돌이 일어날 경우 linked list를 사용하여 이전 데이터에 새로운 데이터를 연결하도록 설계

  • Open Addressing: 동일한 주소에 데이터가 존재하는 경우 데이터가 없는 비어있는 주소를 사용하여 데이터를 저장

  • 그 외에 선형 탐사, 제곱 탐사 등 방법이 있음

12. 해시 테이블을 사용하면 충돌이 발생할 수 있음에도 사용하는 이유

  • 효율적인 데이터 관리: 적은 리소스로 많은 데이터를 효율적으로 관리할 수 있음, 하드, 클라우드에 존재하는 무한에 가까운 데이터를 유한한 해시값으로 저장함으로써 작은 크기로도 관리가 가능함
  • 데이터 처리가 빠름, 모든 데이터를 살피지 않아도 원하는 데이터를 탐색 가능

13. DFS, BRS의 차이, 각각의 구현 방법에 대해서

  • DFS(깊이 우선 탐색):스택을 사용, 그래프를 깊이 우선적으로 탐색하는 방법

  • BFS(너비 우선 탐색):큐를 사용, 그래프를 너비 우선적으로 탐색

14. SQL Injection이 무엇이며, 이를 방지하는 방법

  • 악의적인 사용자가 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 주입하고 실행되게 하여 DB가 비정상적인 동작을 하도록 조작하는 행위
  • 입력값 검증: 사용자 입력을 받을 때 검증 로직을 추가
  • 저장 프로시저: 지정한 형식의 데이터가 아니면 쿼리가 실행하지 않도록
  • 서버 보안: 신뢰 가능한 네트워크와 서버에서만 접급 허용, 오류 발생시 에러 메세지를 볼 수 없도록 설정

15. 완전이진트리가 무엇인지 왜 사용하는지

  • 마지막 레벨을 제외한 모든 레벨에 노드가 꽉 차있는 트리의 종류
  • 노드가 순서대로 채워지기 때문에 순서가 보장되고 메모리 낭비가 최소화
  • 삽입, 탐색의 속도가 빠르다, O(logn)
  • 힙 자료구조를 구현하는데 사용

16. 가장 좋아하는 탐색 알고리즘과 그 이유

17. 조작어에 대해서 DML

  • DB에서 데이터를 조회, 삽입, 수정, 삭제하는 작업을 수행하는데 사용하는 언어, SELECT, INSERT, UPDATE, DELETE

18. 제어어에 대해서 DCL

  • DB에서 데이터의 접근 권한을 제어하기 위해 사용하는 언어, DBS의 보안 및 권한관리를 위해 사용, GRANT, REVOKE, COMMIT, ROLLBACK

19. 정의어에 대해서 DDL

  • DB에서 데이터를 생성, 수정, 삭제 등 데이터의 전체 골격을 결정
  • CREATE, ALTER, DROP, TRUNCATE

20. 사용해본 SQL 언어와 그 언어의 특징

  • MySQL: 오픈소스, 높은 성능과 확장성, 커뮤니티가 크다, 대부분의 웹 애플리케이션과 호환성이 좋다.

  • SQLite3: 오픈소스, 서버-클라이언트 구조가 아니라 파일 기반의 DB, 트랜잭션 안정성이 뛰어남, 서버가 아닌 인프라 내에 직접 빌드

21. 퀵 정렬 알고리즘의 동작 방식과 시간복잡도

  • 분할 정복을 기반으로 하는 정렬 알고리즘, 평균적으로 매우 빠른 속도를 가지고 여러 알고리즘 중에서 가장 효율적인 알고리즘 중 하나로 알려져 있음
  • 기준으로 삼을 배열의 하나의 원소를 피벗이라 함
  • 피벗을 기준으로 피벗보다 작은 값은 피벗의 왼쪽, 큰 값은 오른쪽으로 이동시키고 피벗을 중심으로 두 부분으로 분할
  • 나눠진 부분을 재귀적으로 위 과정을 반복
  • 부분 배열이 모두 정렬되면 이를 결합해서 결과를 도출
  • 평균적으로 O(nlogn), 최악의 경우 O(n^2)의 시간복잡도

22. 트랜잭션이 무엇인지

  • 더 이상 분할이 불가능한 업무처리의 단위
    -> 하나의 작업을 위해 더 이상 분할될 수 없는 명령들의 모음
    -> 수행되어야 할 일련의 연산모음

  • ACID의 특성을 가짐

  • 원자성(Atomicity)
    트랜잭션이 DB에 모두 반영되던가 아니면 전현 반영되지 않아야 한다

  • 일관성(Consistency)
    트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다.
    트랜잭션이 진행되는 동안 DB가 변경되어도 트랜잭션을 진행 하기 위해 참조한 DB로 진행

  • 독립성(Isolation)
    둘 이상의 트랜잭션이 동시에 실행되는 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연사에 끼어들 수 없다

  • 영구성(Durability)
    결과는 영구적으로 반영되어야 한다

0개의 댓글