게임사 면접예시

주홍영·2022년 5월 1일
0

면접

목록 보기
4/4

[넥슨 면접질문 예시]

https://www.jobkorea.co.kr/Starter/review/view?FavorCo_Stat=0&OrderBy=0&Page=1&C_Idx=1599&Half_Year_Type_Code=0&Ctgr_Code=5&VPage=2

가상함수는 무엇인가?

가상함수는 부모 클래스에서 상속 받을 클래스에서 재정의 할 것으로 기대하고 정의해놓은 함수입니다.
virtual이라는 예약어를 함수 앞에 붙여서 생성할 수 있으며 이렇게 생성된 가상함수는 파생 클래스에서 재정의하면 이전에 정의되었던 내용들은 모두 새롭게 정의된 내용들로 교체됩니다.

주로 실행시간(runtime)에 함수의 다형성(polymorphism)을 구현하는데 사용된다.
가상함수는 실행시간(runtime)에 그 값이 결정된다.

friend keyword?

friend 키워드는 c++에서 지원하는 예외적인 기능의 키워드다. 접근 지정자 (access modifier)를 완벽히 무시할 수 있는 예외적인 기능을 가졌다.

내적, 외적이 무엇인가?

내적은 두 벡터의 방향이 일치하는 만큼만 곱한다. 스칼라 값으로 결과가 나온다 사잇각을 구할 수 있다.
코사인

외적은 두벡터를 곱해 또다른 벡터를 산출한다.
사인
토크, 평행사변형 면적만큼의 magnitude를 갖는다

동적할당이 무엇인지 설명해봐라

동적 메모리 할당은 컴퓨터 프로그래밍에서 runtime에 사용할 메모리 공간을 할당하는 것을 말한다.
이는 프로그램 실행시점에서 프로그램이 사용할 메모리 크기를 고려하여 메모리 할당이 이뤄지는 정적 메모리 할당과 대조적이다.

Map과 HashMap의 차이

둘의 가장 큰 차이는 특정 키에 대한 값을 찾는 과정에서, Hash_Map 은 이름 그대로 Hash Table 을 이용해서 키-값 관계를 유지하며, Map 은 red-black tree 알고리즘을 이용한다.

Hash란 무엇인가?

해시(hash)란 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값이다. 이를 이용해 특정한 배열의 인덱스나 위치나 위치를 입력하고자 하는 데이터의 값을 이용해 저장하거나 찾을 수 있다.

데이터를 검색할 때 사용할 키와 실제 데이터 값이 한쌍으로 존재하고 이를 통해서
O(1)의 복잡도로 데이터가 저장된 곳을 찾아낼 수 있다.

다만 이러한 해시값을 만드는 해시 함수가 언제나 완벽하게 1대1 대응의 key값을 만들어낼 수 있지 않다
이러한 경우 충돌이 발생했다고 하는데
이러한 충돌을 해결하기 위해 array에 Linked list를 만들어 해당 데이터와 일치하는 경우를 찾아갈 수 있다. 만약 이러한 linked list가 너무 편향되어 몰려있다면 설계를 다시 고려해봐야 한다

스택 2개로 큐 구현하기

업캐스팅과 다운캐스팅

캐스팅이란 타입을 변환하는 것을 말하며 형변환이라고도 한다.
업캐스팅 : 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것을 말한다.
다운캐스팅 : 반대로 부모클래스 객체를 자식 클래스 타입으로 형변환 하는 것이다.

스태틱 캐스트와 다이나믹 캐스트에 대해 설명해봐라

스태틱 캐스트은 컴파일 시점에 무결성을 검사하는데 만약 불가능한 캐스팅이라면 컴파일에러가 발생한다.
업캐스팅과 다운캐스팅을 모두 허용한다

다이나믹 캐스트는 runtime에 상속 계층 관계를 가로지르거나 다운캐스팅시 사용되는 캐스팅 연산자 입니다.

기본 클래스 객체에 대한 포인터(*)나 레퍼런스(&)의 타입을 자식 클래스, 혹은 형제 클래스의 타입으로 변환 할 수 있습니다. 캐스팅의 실패는 NULL(포인터)이거나 예외(참조자)를 보고 판별할 수 있습니다. 상속 관계에 있지만 virtual 멤버 함수가 하나도 없다면 다형성을 가진게 아니라 단형성이며, dynamic_cast는 다형성을 띄지 않은 객체간 변환은 불가능하며, 시도시 컴파일 에러가 발생합니다. 또한 RTTI에 의존적이므로 변환 비용이 비쌉니다.

상속관계 내에서 사용 가능
RTTI로 가능함, 변환이 가능한 경우가 아니라면 nullptr을 뱉어냄 안전

const_cast의 경우에는 const의 의미를 소멸시키는데 사용
reinterpret_cast는 어떠한 포인터 타입도 어떠한 포인터 타입으로 변환이 가능하다

static_cast VS. dynamic_cast (어떨때 써야 하나)
<static_cast> 정적으로 형변환을 해도 아무런 문제가 없다는 것은 이미 어떤 녀석인지 알고 있을 경우에 속할 것이고, <dynamic_cast> 동적으로 형변환을 시도해 본다는 것은 이 녀석의 타입을 반드시 질의해 봐야 된다는 것을 의미합니다. RTTI를 해야 하는 경우엔 dynamic_cast를 이용해 런타입의 해당 타입을 명확히 질의해야 하고, 그렇지 않은 경우엔 static_cast를 사용하여 변환 비용을 줄이는 것이 좋습니다.

profile
청룡동거주민

0개의 댓글