~ 2019 유물

기술 면접 답변(1~10)

수빈2 2019. 10. 31. 14:41

1. strcut와 class 차이점

2. 구조체 padding bit

3. 함수 오버로딩/ 오버라이딩

4. db트랜젝션

5. 스케쥴링

6. 재귀와 반복문 차이

7. hash와 tree차이, 쓰이는 곳

8. 코드가 실행 가능한 파일이 되기까지의 과정

9. thread와 process차이, 장단점

10. macro와 inline함수 각각 쓰이는 곳

 + c++의 특성 중 가장 중요하다 생각하는 것

 + SQ LITE 어떤 것인지

 

 

1. struct와 class 차이점

 - 기본 지시자가 struct는 public / class는 private

 - class에서 변수값 바꾸려면 set함수 정의해주고 함수 통해서 변경 가능

 - 공통점 : c++에서는 동작 방식 일치, 멤버 함수/생성자/소멸자/상속 모두 가능

 - c의 struct는 멤버 변수만 넣을 수 있음

 

2. 구조체 padding bit

 - 메모리를 읽을 때 접근하기 쉽게 하기 위한 목적

 - 32비트 CPU는 4 바이트/ 64비트는 8바이트씩 읽음

 - 32비트 일 때, char, int, char 순으로 정의했을 때 구조체 크기 : 12  =  (1+패딩3) + (4) + (1+패딩3) 

 - 32비트 일 때,char char int 순으로 정의했을 때 구조체 크기 : 8 = (1+1+패딩 2) + (4)

 

3. 함수 오버로딩/오버라이딩

 - 오버로딩 : 같은 이름의 함수를 파라미터를 다 다르게 정의해서 사용할 때 파라미터 값으로 구분하여 함수 호출

 - 오버라이딩 : 상속 관계의 상위 클래스의 함수를 이름과 인자 모두 같게 하여 재정의하는 것

 

4. DB 트랜잭션

 - 하나의 작업을 수행하기 위한 데이터베이스 연산들을 모아놓은 데이터베이스 에서의 논리적인 작업 단위

 - 즉 작업 수행에 필요한 여러 SQL문을 모아놓은 것

 - commit : 트랜잭션 수행

 - rollback : 수행 중 일부 명령어가 수행 안될 때 모든 명령어 취소

 - 원자성 : 트랜잭션은 모두 반영되거나 모두 안 되거나 해야 함

 - 일관성 : 트랜잭션 수행 후 모두 일관성 있는 데이터베이스 상태여야 함

 - 독립성 : 동시에 두 개의 트랜잭션 수행 중 다른 트랜잭션이 끼어들 수 없음. 수행 완료 전에 참조할 수 없음

 - 영속성 : 한번 반영된 결과는 영구적으로 반영되어야 함

 

5. 스케줄링

 - CPU가 각각 프로세스에게 시간 할당해주는 것

 - 비선점 스케줄링 : 하나의 프로세스 수행 완료 전에는 다른 프로세스가 선점할 수 없음

 - FCFS(선입선출) / SJF(대기 프로세스 중 가장 짧은 것 선택) / HRN(대기 프로세스 중 응답비율이 가장 큰 것)

     * 응답비율 : (대기시간+예상 실행시간)/예상 실행시간

 - 선점 스케줄링 : 하나의 프로세스가 완료되지 않아도 다른 프로세스가 뺏을 수 있음 

 - SRT(프로세스 수행 중에 더 짧은 프로세스가 생기면 짧은 프로세스 배치) / RR(큐에 도착 한순, 정해진 시간만큼 할당)

 - 다단계 피드백 큐 : 여러 개의 큐에 각각 필요한 알고리즘 적용, 위에 있는 큐가 우선순위가 높음, 할당된 시간 내에 수행 못하면 낮은 우선순위의 큐로 들어감)

 

6. 재귀와 반복문 차이

 - 재귀 : 자기 자신을 호출

 - 반복문 : 조건을 달성하는 동안 계속 반복해서 진행

 - 재귀는 함수를 호출하므로 스택에 쌓임. 스택오버플로우 발생 가능, 반복문보다 상대적으로 느릴 수 있음

 

7. hash와 tree 차이

 - hash : 시간 복잡도가 O(1), 키가 정렬되어 있지 않음

 - tree : 시간복잡도가 O(logN), 정렬된 키가 필요할 때 유용

 

8. 코드가 실행 가능한 파일이 되기 위한 과정

 - 소스파일 -> 전처리 -> 컴파일 -> 어셈블 -> 링크 -> 실행파일

 - 전처리 : 전처리기가 #include 에있는 헤더 파일을 소스코드에 붙인 뒤에 #define으로 작성된 부분에 매크로 치환 작업 수행

 - 컴파일 : 컴파일러가 소스코드를 어셈블리어로 변환

 - 어셈블 : 어셈블러가 어셈블리어를 기계어로 변환  -> 오브젝트 파일 생김

 - 링크 : 링커가 오브젝트 파일들과 라이브러리를 링킹 해서 실행파일로 만듦

 - 동적 링킹 : 실행할 때 프로그램 외부에 존재하는 소스파일(dll)과 연결  / 메모리 차지 적음 / 약간의 오버헤드

     * dll은 실행 시에 같이 로딩되고 프로그램 종료 시 메모리에서 해제됨

 - 정적 링킹 : 컴파일된 소스파일(. lib)을 연걸 / 이미 컴파일되어 시간 단축 /메모리 차지 큼

 - 빌드 : 컴파일 + 링크

   

9. 스레드(Thread)와 프로세스(Process) 차이

 - 스레드는 하나의 프로세스가 여러 작업을 동시에 할 때 각각의 작업을 스레드라고 함.

 - 프로세스는 컴퓨터에서 실행되고 있는 프로그램

 - 프로세스는 메모리 영역(code, data, stack, heap)을 할당 받음

 - 스레드는 프로세스의 stack만 따로 할당받고 code, data, heap영역은 공유함

 

10. macro와 inline함수 각각 쓰이는 곳

 - macro : #define, 전 처리과정에서 치환됨, 자료형 의존 x

 - inlie : 컴파일 러시 치환되어 사용됨, 자료형 o

 

 + c++의 특성 중 가장 중요한 것

 - 클래스

 - 상속

 - 추상화

 - 캡슐화

 

+ sq lite : 응용프로그램에 넣어 사용하는 가벼운 DBMS, 모바일 환경에 적합함

 

 

'~ 2019 유물' 카테고리의 다른 글

할일  (0) 2019.12.07
기술 면접 답변(31~40)  (0) 2019.11.12
기술 면접 답변(21~30)  (0) 2019.11.06
기술 면접 답변(11~20)  (0) 2019.11.04
기술 면접 질문 모음  (0) 2019.10.30