본문 바로가기

기술면접/내가 써보기

기술면접 2

1. OOP가 무엇인가?

: 독립적인 각각의 객체로 프로그램이나 시스템을 구성하는 객체지향을 의미합니다.

 

2. 객체지향 프로그래밍의 특징에는 어떤것들이 있는가? 

: 대상의 공통점만 다루어 목적에만 집중할 수 있도록 하는 추상화,

객체 스스로가 자신의 역할을 수행할 수 있게 자율성을 높여주는 캡슐화,

자식클래스가 부모클래스의 속성을 부여받아 동일하게 사용할 수 있게 하는 상속성,

동일한 요청을 다양한 방법으로 응답할 수 있도록 만드는 다형성이 있습니다.

 

3. 상속이란?

: 부모객체가 자식객체에게 자신의 특성을 물려주어 자식클래스가 부모클래스의 속성을 사용할 수 있게 해주는 것 입니다.

 

4. 접근 지정자란? 

: 상속을 할때 공개, 비공개 여부를 결정해주는 것입니다.

public으로 공개, private로 비공개가 가능하며 protected로는 같은 상속자끼리 까지만 가능합니다.

 

5. 디자인 패턴이란?

: 자주 사용하는 설계 형태를 정형화해서 형식을 만들어 두는 것 입니다. 

스트레티지, 싱글턴, 팩토리 패턴등 다양한 패턴들이 있습니다.

 

6. 디자인 패턴을 왜 써야 하는가?

: 정형화 되면 개발자 간에 구조파악이나 의사소통이 원활해지고 재사용을 통해 시간이 단축될 수 있어 사용합니다.

 

7. 코드를 짤때 어떤 스타일인가?

: Bool 변수 맨앞에는 is를 붙이기, Vector 변수 맨뒤에는 V 붙이기 등, 특정 변수가 어떤 변수인지 알 수 있게끔 만들며

함수명은 최대한 명시적으로 짓습니다.

 

8. 프로그래밍 단계 (코드 설계, 코드 구현, 디버깅) 별로 본인이 생각하는 비중을 준다면? (총 10)

: 3,5,2라고 생각합니다. 일단 구현되는게 없으면 아무런 결과를 보여주는 것이 없기 때문에 1번째로 두었습니다.

그 다음 설계가 없으면 팀과의 연계도, 큰 세계를 구현할때 스스로가 갈수록 미궁에 빠질 수 있기에 2번째로 점수를 주었습니다.

그냥 설계로도 구현해서 프로그래밍을 짤 수는 있습니다. 하지만 나 스스로가 아무리 자부심을 가진다해도 어떠한 부분에서 버그는 항상 있기 마련이기에 디버깅 또한 필합니다. 그렇기에 각각의의 점수에 순위만을 생각하고 점수에 차이는 적게 주었습니다.

 

9. STL 컨테이너란?

: STL이란 표준 라이브러리중 하나로 프로그램에 필요한 자료구조와 알고리즘을 템플릿으로 제공하는 라라이브러리입니다. 그중 컨테이너는 같은 타입을 저장, 관리할 목적으로 만들어짐 클래스로 Vector, List, Map등이 있습니다.

 

10. Vector와 List의 차이점과 구조

: Vector는 블록을 일렬로 붙여놓은 구조이고, List는 한 바구니에 종이들이 늘어져 있는 구조입니다.

Vector는 연속된 저장소에 있기에 연산속도가 빠르지지만 추가삭제할때 해당 부분을 넓히고 줄이는 것이 힘들다는 단점이 있고, List는 앞순서가 뒷순서를 가리키는 방식이라 추가삭제할때 해당 주소만 연결해 주면되지만 여러곳에 늘어져있는 부분이라 연산속도가 느리다는 단점이 있습니다.

 

11. Map은 어떤 구조로 되어있는가?

: 나무뿌리같이 갈래로 뻗어나가는 느낌의 이진트리로 되어있으며, 자료형 Key값을 가지고 Value(값)을 저장하여 사용할 수 있습니다.

 

12. 오브젝트 풀링이 무엇인가?

: 총알 오브젝트같이 자주 사용되면서 바로 사라지는 오브젝트의 경우, 잠깐 동안 할당 삭제가 계속 반복되면 자원소비가 너무 커지기 때문에 특정 오브젝트를 담아 계속 재사용하는 것을 오브젝트 풀링이라고 합니다.

 

13. 카비지 컬렉팅이란 무엇인가?

: 프로그램이 돌아가다보면 쓸데없는 값들이 발생하기도 하는데 이것을 가비지라고 하며, 이 가비지들을 모아주는 것을 가비지 컬렉팅이라고 합니다.

 

14. 정렬 알고리즘에는 어떤 것들이 있는가?

: 데이터 수집, 검색, 보관에 필요한 정렬 알고리즘에는 앞에서 부터 두개씩 비교해가며 큰값을 뒤로 보내는 방식의 버블 정렬, 앞에서부터 비교를 시작해 가장 작은 값을 앞으로 가져오는 선택정렬, 두번째 숫자부터 다른 숫자들을 비교해가며 자신의 자리를 찾는 삽입정렬이 있습니다.

하지만 이 정렬 알고리즘은 일반적인 상황에서 사용할 수는 없기에 퀵정렬을 대표적으로 많이 사용합니다.

퀵정렬은 정렬을 수행했을 때 마치 맵처럼 해당값을 기준으로 오른쪽 왼쪽으로 나누어진다는 특징이 있습니다.

'기술면접 > 내가 써보기' 카테고리의 다른 글

기술면접 4  (0) 2019.06.10
기술면접 3  (0) 2019.06.09
기술면접 1 - 2  (0) 2019.06.07
기술면접 1 - 1  (0) 2019.05.27