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

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

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

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



답변

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

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


답변

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


답변

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

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

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


답변

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

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

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

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

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

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

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


답변

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

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

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

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

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

보너스 질문 추가

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

고백

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

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


답변

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


답변

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

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