본문 바로가기

기술면접/내가 써보기

기술면접 1 - 2

14. 구조체와 클래스의 차이

: 구조체와 클래스는 큰 차이는 없지만, 기본적인 접근제어지시자가 클래스는 private, 구조체는 public이라는 다른점이 있습니다.

(클래스 내에서 데이터를 저장하는 멤버변수는 클래스의 속성을, 데이터를 처리하는 멤버함수는 클래스의 동작을 결정합니다.)

 

15. 가상함수

: 파생 클래스에서 재정의 할 것으로 기대하는 멤버 함수를 의미합니다.

 

-순수 가상함수 : 선언만 있고 정의가 없는 가상함수로서 파생 클래스에서 재정의 할 것으로 예상되는 함수에 대해 미리 호출계획을 세워두기 위해 정의합니다.

 

-차이 : 가상함수는 인터페이스+함수의 선언+내부 구현을 자식 클래스에게 전달하기 위해 사용하고, 순수 가상함수는 인터페이스를 자식 클래스에게 전달하기 위해 사용하는 함수입니다.

 

16. 가상소멸자

: 소멸자를 가상함수로 만들어 놓은 것으로, 가상소멸자를 설정하지 않으면 부모만 해제되고 자식은 해제되지 않기 때문에 부모클래스에 virtual을 선언해줍니다.

(소멸자는 메모리와 자원을 반환하기 위해 쓰인다.)

 

17. 포인터와 참조자의 차이

: 포인터는 주소를 가리키는 값으로 언제든 다른 주소들을 가리킬 수 있지만, 참조자는 참조대상 자체를 할당하여 건드릴 수 있습니다.

 

18. 포인터란 무엇인가? - 콜바이 밸류와 콜바이 레퍼런스

: 포인터는 주소값의 저장을 목적으로 선언되는 것이며, 단순히 함수의 값을 전달하는 형태의 함수호출을 Call-by-value라고하고 메모리의 접근에 사용되는 주소값을 전달하는 형태의 함수호출을 Call-by-reference라고 합니다.

 

19. 유니코드와 아스키코드의 차이점

: 둘다 파일에 글자를 표현하는 방식이지만 아스키코드는 1바이트로 문자를 표현해 256개의 문자의 표현이 가능합니다. 하지만 세계적으로 사용하는 컴퓨터에게 256개의 문자표현으로는 모든 문자표현이 불가능하기에 2바이트로 문자를 표현하여 약 66000의 문자의 표현이 가능한 유니코드를 탄생시켰습니다.

 

20. 비동기/동기

: 동기란 동시에 일어난다는 뜻으로, 요청과 그 결과가 동시에 일어난다는 약속입니다. 동기방식은 설계가 매우 간단하고 직관적이지만 결과가 주어질때까지 아무것도 못하고 대기해야한다는 단점이 있습니다.

비동기는 동시에 일어나지 않는다는 뜻으로, 요청한 그 결과가 바로 주어지지 않을거라는 약속입니다. 비동기 방식은 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간동안 다른 작업을 할 수 있어 자원을 효율적으로 사용할 수 있다는 장점이 있습니다.

 

21. 렌더링 파이프라인

 

22. A와 B의 앞 뒤 위치판별

 

23. 업캐스팅 다운캐스팅

: (캐스팅이란 좌변의 자료형에 맞게 우변의 형을 변형하는 것을 말합니다.)

업캐스팅은 클래스 상속구조에서 자식타입에서 부모타입으로의 타입변환을 말하고, 다운캐스팅은 부모타입에서 자식타입으로의 변환을 말합니다.

업캐스팅은 같은 부모클래스에서 파생된 클래스들을 한데 모아서 관리하기위해 사용하고, 다운캐스팅은 업캐스팅으로 객체를 한데모아 관리할때 각각 고유기능을 접근하기 불가능하여 잠시 접근하여 확인할때만 사용합니다.

 

24. 다익스트라 알고리즘

최단경로, 최소비용으로 가는 알고리즘으로, 시작점에서 목표점에 이를때까지 거치는 가중치의 합이 최소값일때가 최소경로입니다.

방향그래프, 무방향 그래프 모두 상관은 없으나, 가중치가 음수인 경우가 하나라도 존재하면 사용할수 없다는 단점이 있습니다.

 

25. getMessage/peekMessage 차이점

: 두 함수모두 WinMain()에서 메세지큐로부터 메세지를 추출하는 함수지만, GetMessage()함수는 메세지큐에 메세지가 없으면 반환값을 반환하지않고 대기상태로 있다가 메세지가 생길경우 메세지를 추출하고 WM_QUIT 메시지가 발생할때는 0을 리턴합니다.

그에반해 PeekMessage()함수는 매 프레임마다 함수가 실행되며 메세지큐를 검사하고 메세지가 있든 없든 항상 반환값으로 1을 반환합니다.

 

26. 동적바인딩(동적할당)

: 저장공간의 크기가 정해진 정적 할당과 달리 포인터를 이용하여 할당되어 저장공간의 크기가 변할 수 있기에, 데이터가 변경될 때 유동적으로 크기변경이 가능해 공간을 효율적으로 사용할 수 있습니다.

 

27. 컴파일 순서

: (컴파일이란 작성한 c파일을 컴퓨터는 알아보지 못하기에 기계어로 변환하는 과정을 말합니다.)

 

 

28. 객체지향 4대특징

: (객체지향이란 독립적인 각각의 객체로 로그램을 구성하는 것을 말합니다.)

대상의 특성 중 필요한 공통점만 다루어, 현실의 복잡성을 극복하고 목적에 집중할 수 있도록 하는 추상화, 

객체 스스로가 자신의 상태를 책임지게 하여 해당 객체의 역할 수행에 집중할 수 있도록 자율성을 높이는 캡슐화,

부모 클래스가 자식클래스에게 속성과 기능을 물려주어 부모 클래스의 속성을 기능을 동일하게 사용하는 상속성,

동일한 요청에 서로 다른 방식로 응답할 수 있도록 만드는 다형성이 있습니다.

 

29. 오버로딩/오버라이딩

: 오버라이딩은 부모 클래스에서 선언된 함수와 같은 (이름, 리턴타입, 매개변수의) 함수를 자식클래스에서 재정의 하는 것이고, 오버로딩은 함수의 이름만 같고 사용목적에 따라 매개변수를 르게 사용하는 것입니다.

 

30. C# 가비지컬렉터

: 프로그램을 실행하다보면 쓸데없는 메모리인 가비지가 발생하게 되는데 그것을 자동적으로 삭제시켜주는 것을 가비지컬렉터라고 합니다.

 

31. C# 클래스/구조체 다른점

: 클래스는 값 타입이고 구조체는 참조 타입이기에, 하나의 값 형식으로 취급되는 구조체는 상속이 불가능합니다. 구조체는 스택영역에 저장이되고 클래스는 힙영역에 저장이 되는데 구조체가 데이터에 접근하는 속도는 빠르지만 남용할 경우 메모리에 문제가 있어, 용량이 작고 임시적으로 쓰는 데이터에 구조체를 쓰는 것이 효율적입니다.

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

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