본문 바로가기
기타 CS

기술 면접 준비 - 기타 기출 질문들

by 밝지 2023. 2. 27.
728x90
반응형

Class 와 Object 의 차이점

객체 지향 프로그래밍 관련 개념으로, 클래스는 오브젝트를 만드는 틀이고, 오브젝트는 그 클래스로 만든 실체입니다. 객체가 메모리에 할당되어 실제 사용될 때는 인스턴스라고 부릅니다. 즉, 클래스는 오브젝트를 만드는 틀, 오브젝트는 클래스로 만든 객체, 인스턴스는 오브젝트를 메모리에 올린 것입니다. 

 

 

Override 와 Overload 의 차이점

오버라이딩은 부모로부터 상속 받은 메소드의 로직을 변경하는 것으로 객체 지향 언어의 특징인 다형성 중 하나이다. 오버로딩은 한 클래스 내에 파라미터 수나 타입 등이 다른 여러 개의 같은 이름의 메소드를 정의하는 것을 말한다. 

 

 

정렬 알고리즘

  • 버블 정렬 - 첫 번째 원소부터 인접한 원소끼리 계속 자리를 바꾸며 정렬하는 방식이다.
  • 선택 정렬 - 앞에서부터 차례대로 정렬하는 방법이다. 최소값을 찾고 그 값을 맨 앞에 위치한 것과 교체한다.
  • 삽입 정렬 - 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 부분과 비교하여 위치에 맞게 삽입한다.
  • 합병 정렬(빅데이터) - 작은 단위로 쪼개서 정렬하고, 정렬된 단위를 계속 병합하는 방식이다.
  • 퀵 정렬 - 하나의 축을 정하고 이 축 보다 작은 값을 왼쪽에 큰 값을 오른쪽에 위치시킨 뒤, 왼쪽과 오른쪽 수들을 각각 축으로 나눠서 축 값이 1이 될 때까지 정렬한다.
  • 힙 정렬 - 모든 노드가 힙 속성을 만족하도록 재귀적으로 트리 구조를 만들어 정렬한다.

 

 

스택(Stack) 

  • 스택은 후입선출 방식의 자료 구조이다. 
  • 스택 내부의 데이터는 top을 통해서만 접근할 수 있다. (push, pop)
  • 가장 마지막에 삽입한 데이터가 가장 먼저 삭제된다.
  • 사용 예) 웹 브라우저 방문기록, 실행 취소, 역순 문자열 만들기

 

 

 

큐(Queue)

  • 먼저 들어온게 먼저 나가는 선입 선출 방식의 자료구조이다.
  • 삽입 삭제가 서로 다른 방향에서 이루어진다.
  • 프론트에서는 삭제(디큐) 연산만, 리어에서는 삽입(인큐) 연산만 이루어진다.
  • 가장 먼저 삽입된 데이터가 가장 먼저 삭제 된다.
  • 사용 예) 은행 업무, 고객 대기 시간, 프로 세스 관리, 캐시

 

 

 

완전 이진 트리의 일종으로 우선순위 큐를 위해 만들어진 자료 구조입니다. 여러 개의 값들 중에서 최소값이나 최대값을 빠르게 찾아내도록 만들어진 자료구조입니다. 큰 값이 상위 레벨에 있고 작은 값이 하위 레벨에 있다는 정도의 반 정렬 상태를 유지합니다. 즉, 부모 노드의 키 값이 자식 노드의 키 값보다 항상 크거나 작은 이진트리 상태입니다. 힙 트리는 중복 값을 허용합니다. 힙을 구현하는 표준 자료구조는 배열입니다. 

 

 

 

트리

트리는 노드들이 나무 가지처럼 연결된 계층적 자료구조 입니다. 컴퓨터의 directory 구조가 대표적인 트리 구조입니다. 또한 트리 내에 또 다른 트리가 있는 재귀적 자료구조입니다. 

  • 노드 - 트리를 구성하는 기본 요소입니다. 키, 값, 포인터를 가집니다.
  • 간선 - 노드와 노드의 연결선
  • 루트 노드 - 부모가 없는 최상위 노드
  • 부모 노드 - 자식 노드를 가지는 노드
  • 자식 노드 - 부모 노드의 하위 노드
  • 형제 노드 - 같은 부모를 가지는 노드
  • 외부 노드 / 단말 노드 / 리프 노드 - 자식 노드가 없는 노드
  • 내부 노드 / 비 단말 노드 / 가지 노드 - 자식 노드를 하나 이상 가지는 노드
  • 깊이 - 루트에서 어떤 노드까지의 간선 수
  • 높이 - 어떤 노드에서 리프 노드까지 가장 긴 경로의 간선 수
  • 디그리 - 노드의 자식 수 
  • 패스 - 한 노드에서 다른 노드에 이르는 길 사이에 높여있는 노드의 순서
  • 사이즈 - 자신을 포함한 자손 노드의 수
  • 위드스 - 레벨에 있는 노드 수 
  • 브리드 - 리프 노드 수 

 

 

 

가비지 콜렉터

가비지 콜렉션은 줄여서 GC라고도 부른다. 메모리 관리 방법의 하나로 시스템에서 더이상 사용하지 않는 동적 할당 메모리 블럭을 찾고, 다시 사용 가능한 자원으로 회수하는 것이다. 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터라고 부른다. 

자바를 기준으로 JVM은 프로그램을 실행하다가 메모리가 부족해지는 순간이 오면 추가적으로 메모리를 더 요청한다. 요청할 때 가비지 컬렉터가 실행된다. 

  • stop the world - GC 실행을 위해 JVM이 애플리케이션 실행을 멈추는 것이다. (GC 튜닝이란 이 시간을 줄이는 것이다.)
  • Mark and Sweap - GC 과정을 부르는 말이다. Mark는 가비지 컬렉터가 닿을 수 있는 모든 변수나 객체를 스캔하면서 사용중인지 점검하는 것인데 이 과정에서 stop the world가 발생한다. 이후 Mark 되어 있지 않은 객체를 힙에서 제거하는 것이 Sweap이다.

JVM의 메모리는 클래스 영역, 자바 스택, 힙, 네이티브 메소드 스택 4영역으로 나뉜다. 가비지 콜렉터는 힙 메모리를 다룬다. 

힙은 Yong, Old, Perm 으로 나뉘는데 Young 영역에서 발생하는 GC를 Minor GC, Old&Perm 영역에서 발생한 GC를 Major GC(=Full GC)라고 한다. 

 

 

 

데이터베이스 - 인덱스

인덱스는 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료구조이다. 특정 컬럼에 인덱스를 생성하면 핻앙 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 쿼리문에 인덱스 생성 컬럼을 WHERE 조건으로 걸어 조회하면, 옵티마이저에서 판단하여 생성한 인덱스를 탈 수 있다. 인덱스를 타게되면 인덱스를 타고 먼저 인덱스에 저장되어 있는 물리적 주소로 가서 데이터를 가져오는 식으로 동작하여 속도가 향상된다. (책의 목차 처럼)

 

[인덱스의 장점]

  • 검색 시 테이블 풀 스캔을 막아 효율을 높인다. (목차가 있으면 책 전체를 안봐도 됨)
  • order by 에 의한 정렬을 피할 수 있다. 이미 정렬되어 있으니깐.
  • MIN, MAX 작업 시 테이블 풀 스캔할 필요가 없다.

 

[인덱스의 단점]

  • 인덱스는 DML에 취약하다. 값이 바뀌거나 추가되면 다시 정렬하고 두 군데 데이터 수정 필요
  • 테이블 전체 데이터의 15% 이상의 데이터를 다루는 경우 인덱스를 안 쓰는게 더 낫다. 
  • 인덱스 관리를 위해서는 데이터 베이스의 10%에 해당하는 저장공간이 필요하다. 전체적인 데이터베이스의 성능 부하를 초래할 수 있다. 때문에 인덱스 생성보다는 SQL문을 효율적으로 짜는 것을 먼저 해야한다. (인덱스 생성은 마지막 수단)

 

[인덱스 생성 전략]

  • 조건절에 자주 등장하는 컬럼
  • 항상 = 으로 비교되는 컬럼
  • 중복 데이터가 최소한인 컬럼
  • order by 절에서 자주 사용되는 컬럼
  • join 조건으로 자주 사용되는 컬럼

 

 

 

 

 

call by value, call by reference

함수 호출 방법이다. 자바에서는 기본적으로 매개변수가 call by value 이지만 배열과 클래스는 참조변수로 작동한다.

[call by value]

  • 인자로 받은 값을 복사하여 처리한다. (직접 영향 X)
  • (장점) 원래의 값이 보존된다.
  • (단점) 메모리 사용량이 늘어난다.

 

[call by reference]

  • 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다.
  • (장점) 복사하지 않고 직접 참조하여 빠르다.
  • (단점) 원래 값이 영향 받는다.

 

 

 

 

 

 

728x90
반응형