가장 좋은 C ++ 인터뷰 질문은 무엇입니까? [닫은]


28

C ++ 프로그래머에게 C ++ 기술을 측정하기 위해 한 가지 질문을 할 수 있다면 무엇이 될까요?

내가 생각하는 가장 좋은 질문은 : "삭제하기"라고 부를 수 있습니까? 멤버 함수 내부? (나는 이것을 생각할 수 있도록 링크로 넣은 다음 가장 좋은 C ++ 인터뷰 질문-절대! 로 이동하여 정답을 봅니다.)

나는 대부분의 사람들이 답을 알기를 기대하기 때문에 이것을 묻지 않습니다. 그들이 그렇게했다면 그것은 유용한 질문이 아닐 것입니다. 나는 그들이 정답을 향한 길을 찾을 수 있는지, 어떻게 그렇게 할 수 있는지 묻습니다.

답변:


8

C ++에서 가상 멤버 함수를 템플릿과 함께 사용할 수없는 이유를 물어볼 것입니다. 물론 실제로 질문에 즉시 대답 할 수있는 사람은 거의 없습니다. 그러나 인터뷰 대상자가 C ++의 핵심 메커니즘 (C ++에서 템플릿의 작동 방식, 가상 기능 구현 방법, 컴파일러 및 링커가 소스 코드에서 실행 파일을 생성하는 방법 등)을 제대로 이해하면 적절한 단계별 답변을 얻을 수 있습니다. 주요 질문.

추가 :이 답변의 템플릿 가상 멤버 함수는 템플릿 클래스의 일반 멤버 함수가 아닌 일부 클래스의 가상 멤버 함수 인 템플릿 함수를 의미합니다. 혼동해서 죄송합니다 :(


3
@ 썸머 라이트 : 가상 멤버 함수와 템플릿을 혼합하여 지금까지 아무런 문제가 발생하지 않았습니다. 나를 계몽 케어 :)?
Matthieu M.

2
이 답변은 거의 정확하지는 않습니다. 템플릿 가상 멤버 함수는 가질 수 없지만 템플릿 클래스의 가상 멤버 함수는 가질 수 있습니다.
catphive December

1
@ summerlight : 아 알 겠어! 재미있는 질문 예, 종종 나타납니다;)
Matthieu M.

2
@nikie : 템플릿 클래스의 가상 멤버 함수입니다. template <typename T> virtual void doSomethingWithGenericTypeT (T arg)와 같은 가상 템플릿 멤버 함수가 아닙니다.
summerlight

2
@summerlight : 게시물에 해당 예제를 포함시켜야합니다. 지금까지 무슨 의미인지 몰랐어요 그래도 좋은 질문입니다. 이제 이해합니다 ;-)
nikie

57

가장 좋은 C ++ 인터뷰 질문은 퀴즈 질문이 아닌 프로그래밍 문제입니다.


동의했다. Google에서 조회 할 수있는 구문에 대해 묻지 마십시오. 대신, 후보가 쉬운 (사소하지는 않지만) 기능, 바람직하게는 한 시점에서 자신의 코드로 작성한 기능을 작성하도록하십시오.
chrisaycock

4
당신에게 전문 프로그래머에 대해 많은 걸 알 수 있습니다 "문자열을 반대하는 함수를 쓰기"로 간단하게해도 뭔가 : 어떻게 그들이 사용 CString, char*, std::string, 등; 그들은 새로운 줄을 돌려 주거나 그 자리를 반대로합니까? 문자를 수동으로 반복하거나 라이브러리 함수를 호출합니까? 그리고 물론 그들이 문자열을 뒤집는 것과 같은 간단한 것을 할 수 없다면, 그것에 대해 많은 것을 알려줍니다! 유니 코드, UTF-8 등에서 작동하는 것과 같은 후속 질문도 많이 있습니다.
Gabe

16
@ 어니 엘 : C ++은 실제로 이륙하지 않았습니까? 진심이야?
Steven Evers

1
@ 가베-좋은 지적. 예를 들어, 정책 매개 변수를 사용하여 내부에서 템플리트를 반대로 수행하는 것은 문자 당 가변 바이트 문자열에 대해 매우 일반적이지 않거나 (아마도 기능보다는 정책 일 수 있음) 매우 복잡합니다. 나는 조기 최적화가 필요하지 않은지 (일반적으로 더 쉬워서 새로운 문자열을 만듭니다) 또는 민첩성 (발생할 때까지 그 경우에 대해 걱정하지 마십시오. 고정 폭 문자 문자열의 경우 더 쉽습니다).
Steve314

1
@Ernelli-wchar_t와 std :: wstring을 잊어 버리고 Windows / Unix에서 다른 것을 의미합니다
Martin Beckett

32

나는 그들이 C ++ 0x에 대해 그들이 무엇을 좋아하는지 물어볼 것이다. 이것으로부터 나는 그것들을 다양한 고정 관념으로 "버킷 화"할 수 있었다.

  • 오래된 학교, C ++ 컴파일러를 사용하여 C 코드 컴파일
  • 구식 학교, STL이 무서워 (혹은 아무 소용이 없다), 변화를 따라 가지 못하고있다
  • 람다를 좋아하고 STL이 rvalue 참조, 더 큰 RAII 팬, shared_ptr, unique_ptr 등을 사용하여 점점 빨라지는 것을 좋아합니다.
  • 지난 몇 년 동안 작성된 모든 부스트 코드는 C ++ 0x 등가물을 사용하도록 조정되어야하기 때문에 쓴 것입니다.
  • 상대적으로 짧은 질문에 대답하면서 내 머리를 폭발하게 만드는 미친 템플릿 메타 프로그래머

이 물통 중 일부는 당신에게 완벽하고 일부는 "들어 주셔서 감사합니다"일 가능성이 있습니다. 많은 정보를 빨리 얻는 질문으로, 이것이 내 승자입니다.


1
주제에 대해 많은 토론을 장려하는 좋은 질문에 +1하십시오.
Gary Rowe

8
C ++ 0x가 무엇인지 모르는 사람들의 범주를 잊어 버렸습니다. 나는 이것이 더 많은 답이 될 것이라고 생각하며 처음 두 가지 유형에 맞을 것입니다.
Fast Fish

1
@Fast Fish, 예, C ++ 0-whatnow를 좋아하는 사람들은? 일반적으로 처음 두 범주 중 하나가되며 일반적으로 답변에서이를 밝힙니다.
Kate Gregory

28

왜 "삭제할 수 있습니까?" 흥미로운 질문으로 간주됩니다. C ++로 COM 코드를 작성한 사람은 기본 COM 프로그래밍 중 첫 번째로 배우는 첫 번째 것은 "삭제"를 올바르게 사용하는 방법이라는 것을 알고 있습니다. 누군가가 COM 프로그램을 작성하는 것에 대해 이력서에 누워 있는지 여부를 결정하는 것이 유용 할 수 있다고 생각하지만 일반적인 지식 C ++ 질문으로 누군가가 즉시 대답 할 수 없다면 그들은 잘 맞지 않을 것입니다 우리 팀을 위해

어쨌든, 당신의 목표가 C ++ 기술을 측정하는 질문을하는 것이라면, 하나의 질문을 고르는 것은 잘못된 길입니다. 돌아서 올바른 질문은 다음과 같습니다.

1에서 10까지의 규모로 C ++ 프로그래머는 얼마나 능숙합니까?

이것은 당신이 원하는 답을 얻는 질문이 아닙니다. 모두가 "8"이라고 말합니다. 원하는 답변을 얻는 질문은 다음과 같습니다.

좋아요, 당신은 여덟입니다. 7 명이 다루기가 어려울 것으로 생각되는 문제 영역은 무엇입니까?

그리고 , 이제 당신은 그것들을 얻었습니다. 응시자가 "재귀와 관련이있는 것"또는 "가상 소멸자를 사용하는 경우"가 7 인이 어려움을 겪고 있다고 생각하는 경우, 재귀 나 소멸자 또는 기타에 대해 조금 알고 있다는 것을 알고 있습니다. 그리고 그들의 지식은 그것보다 훨씬 더 멀리 가지 않습니다.

그것은 약간의 사소한 질문을 제기하는 것보다 훨씬 나은 교정을 제공해야합니다. 만약 당신이 C ++에 관한 사실에 대해 좋은 단일 질문을하게된다면, 아마도 "가상 메소드를 다루는 C ++ 컴파일러 부분에 대한 의미 론적 분석기와 코드 생성기를 어떻게 설계하겠습니까?" 기본 클래스 소멸자에서 호출? " 실제 작업과 관련이 있고 후보자가 작업 할 가능성이있는 질문을해야합니다. 그것은 한 번 작업해야했던 문제이며, 사람이 의미 론적 분석기와 코드 생성기를 디자인하는 방법과 C ++에 대한 지식을 얻는 방법에 대해 꽤 좋은 통찰력을 줄 것이라고 생각합니다.


3
나는 이것을 사용하기 시작할 것입니다 : 좋아, 당신은 여덟입니다. 7 명이 다루기가 어려울 것으로 생각되는 문제 영역은 무엇입니까?
David Thielen

10
여기 또 다른 좋은 질문이 있습니다. 아홉 가지로 어려움을 겪을 수있는 것은 무엇입니까?
David Thornley

너무 훌륭해서 놀랍습니다.
UpAndAdam

14

재미로, 나는이 작은 아기와 함께 C + + 프로그래머가 왔습니다.

이것이 왜 무한 루프에 빠지는가?

int x=0;
while (x<3) {
  x = x++;
}

얼마나 많은 사람들이 넘어 졌는지 놀랍습니다. 물론 Stack Overflow에 나타난 후에는 더 이상 사용할 수 없습니다 . 머터 ... 머터 ...

(정답을 얻으려면 고백을 읽고 분명히 의견을 읽으십시오)

보너스 질문 추가

항상 고전적인 FizzBuzz가 있습니다 (현재 유명한 코딩 호러 기사에 실려 있음 ). 나는 실제로 인터뷰에서 그것을 사용한 적이 없지만 개발 팀 주변에서 점심을 먹은 후 결과는 ... 음 ... 놀랍도록 정확했습니다.

고백

표준 "x ++에서 원래 값을 반환합니다."응답을 따라 잡았습니다. 그러나 정답은 시퀀스 포인트로 인해 동작이 정의되지 않은 것입니다. 내가 여기에 게시 할 때까지 이것을 사용한 모든 시간에 시퀀스 포인트를 언급 한 사람은 없습니다.

나는 교육을 받았으며 시간을내어 의견을 보내 주신 모든 분들께 진심으로 감사드립니다.


1
게리 로우 (Gary Rowe) : 나는 그 예를 좋아하지만 (처음 본 적이 있습니다). 사람들이 모르는 것은 물론 그렇게 빨리 보지 못한다는 것이 슬프다.
Orbling

2
Microsoft에있을 때 지원자에게 링크 된 목록에 삽입을 요청했습니다. 왜? 약 80 %가 할 수 없었기 때문입니다. 놀라운 ...
David Thielen

43
이것은 반드시 무한 루프가 아닙니다. 여기서 정의되지 않은 동작을 호출하고 있습니다 (x는 중간 시퀀스 지점없이 두 번 수정 됨). 실제로 내 특정 아치 (x86)의 특정 컴파일러 gcc (Debian 4.3.2-1.1) 4.3.2 에서는 종료됩니다.
Logan Capaldo

2
시퀀스 포인트 언급에 대한 @Logan +1 ;-)
Gary Rowe

4
이것은 인터뷰에 다시 올만한 가치가 있는지 후보에게 알려주기 때문에 정말 좋은 인터뷰 질문입니다 ;-). 인터뷰에서 코드가 무한 루프를 초래한다고 생각하면 (면접자는 기술적으로 유능해야합니다) 응시자는 "기회"를 놓칠 수 있습니다.
CB Bailey

8

가장 먼저 물어볼 것은 포인터에 대한 간단한 질문입니다. C ++을 알고 있다고 주장하거나 더 나쁜 C에게 대답 할 수없는 사람들이 얼마나 많은지 알고 놀랐습니다. 그런 다음 가상 함수에 대한 간단한 질문을 할 것입니다. 이 조합은 사람이 실제로 C ++을 알고 있는지 여부를 매우 빠르게 알려줍니다.


4
자신의 배경, 정말 캡슐화 또는 다형성하지 않았다 포인터하지만 일부 이해하지 못했다 하드웨어 배경으로 결코 만난 사람에 따라 달라집니다
JK합니다.

7

그것은 회사에서 어떤 종류의 C ++가 작성되는지에 달려 있습니다. (C ++ 프로그래머를 고용해야 할 때 전혀 쓰지 않는 delete기술에 대해 질문했기 때문에 에 대해 묻지 않았습니다 delete.)

이상적으로는 팀을 훈련시켜 더 높은 수준으로 끌어 올리려는 경우가 아니라면 현재 팀이 작성하는 수준보다 높은 수준의 코드를 작성하는 사람을 고용하려고합니다.



6

나는 그들에게 그들이 무엇을 알고 있는지 물어 보거나, 아마도 다른 것에 대해 질문 할 가능성이 높다고 믿는다.

다른 언어에 대한 경험이 거의없는 사람에 대한 너무 많은 C ++ 코더. 좁은 경험은 일반적으로 제한적입니다.


6

좋은 C에 대한 가장 좋은 질문 ++ 개발자는 "우리가해야하는 이유를 나에게 이유를 말해입니다 NOT C ++를 사용할 수 있습니까?"


4

최고의 C ++ 질문이 있다고 생각하지 않습니다. C ++는 매우 큰 언어이며 C ++ 0X에서는 언어의 특정 하위 도메인에서 강할 수 있으며 언어의 다른 부분에 대해서는 거의 강하지 않습니다. '일회성'질문은 언어의 작은 부분에 대한 누군가의 지식 만 행사하고 언어의 다른 측면에 대한 지식을 간과 할 위험이 있습니다.



3

내가 가장 좋아하는 질문은 간단합니다.

a) C로 시작한 다음 C ++로 전환 했습니까?

b) 그렇다면, 다르게 배운 첫 번째 몇 가지는 무엇 이었습니까?

이 답변은 일반적으로 프로그래머가 C ++에 접근하는 방법과 OOP 및 C ++를 일반적으로 이해하는 방법에 대한 비드를 제공합니다.

여기에 "오른쪽"또는 "잘못된"대답은 없지만 일반적으로 응시자가 어디에서 왔는지 알 수있는 좋은 방법입니다.


1

나는 실제로 객체 지향적이며 선호하는 언어 목록이 아닌 다른 프로그래밍 언어의 코드를 제시합니다. 코드는 해당 언어로 수행 된 간단한 작업을 나타내야합니다.

이것의 핵심은 C ++에 대한 지식을 결정하는 것이 아니라 프로그래밍을 얼마나 잘 이해하는지 알아내는 것입니다. 프로그래밍의 기본 개념을 이해하면 문제를 해결할 수 있습니다.


1

C ++에서 가상 함수를 어떻게 구현하고 실제 시나리오를 설명하십시오.


1

현재 "컨테이너의 이동 생성자를 구현하는 방법은 무엇입니까?"라고 말합니다.

저의 이론적 근거는 이동 생성자가 현재 표준이 아닌 다음 표준의 기능이기 때문에 응시자의 답변은 문제의 개발자가 자신의 언어에 대한 지식을 적극적으로 추구하는지 또는 그들이 알고있는 트릭을 고수하는지 여부를 나타냅니다.


1

예를 들어의 디자인에 대한 의견을 물어볼 것 같습니다 std::string. 그들은 다른 디자인을 사용 (예를 들어, MFC / ATL 한 경우 나 또한 그들에게 것 CString, wxString등)과 그들이 가지고있는 가정, 비교하고 디자인을 대조하도록 요청합니다.

문자열은 C ++을 사용한 실제 경험이있는 사람이라면 누구나 위의 1-2 가지 중 하나 이상을 사용해야 했으므로 널리 사용됩니다. 거의 모든 디자인은 이론적 순도와 실제 사용 사이의 타협을 구현합니다. 일부는 실제로 잘 작동 할 수 있지만 의도 한대로 정확하게 사용하는 경우에만 가능하고 다른 일부는 가능한 어색함을 위해 다목적 성을 거래합니다. 즉, 실제 경험을 가지고 거의 사람이 해야 자신의 디자인의 의미있는 의견을 표현할 수 있어야하고 그 의견이 어떻게 당신에게 그들이 생각하는 방법에 대한 공정한 금액을 알려 주어야 그들이 코드를 설계, 정도 이론적 순도 대 그들이 가치의 실용주의, 등등.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.