미국에서의 인터뷰

ddoman의 이미지

저는 한국에서 C/C++ 프로그래머로 일을 하다가
유학을 온 사람입니다.

이래저래 요즘 취업준비를 하려 이력서를 이곳 저곳 찔러놓고 있는데

얼마전, 뉴욕에 있는 S모 recruting 회사에서 ( 자칭, NYC에서 두번째로 큰 recruiting 회사라고 하는 )
전화 인터뷰가 왔습니다.

그 job position은 Senior C/C++ developer for UNIX/Linux systems 였고 프로젝트는
Real Time Protocol 을 사용하는 Multimedia streaming system이었습니다.

사실, 저는 미주 지역 job seeking experience도 전무하고,
전화로 하는 기술면접같은것도 한국에서도
받아본적이 없었습니다.

그래서 제가 긴장도 많이 하고, 실수도 많이 한 것 같네요.

그, 자칭 C/C++ executive recruiter 라고 자신을 소개하는, recruiter는
연봉 1억이상의 senior를 위한 기술면접이었는데도,

저에게 전혀 예상치 못한 질문들을 하였습니다.
가령

Q. How do you let the destructor of a child class be called 
when an instrance of the parent class is deleted?
 
>> virtual? (이때 까지만 해도 감을 못잡고 있었습니다. 내가 질문을 잘못이해했나?
>> senior C/C++ programmer한테 이런 질문을 하는 이유가 뭐지...;;; )

Q. How do you override a member function of a parent class?
 
>> Just....use the same method name with the same parameters..???? (이런걸 왜 물어보는거지??? 정말 내가 질문들을 잘 이해하고 있는건가?)
 
그 recruiter 왈:
No, the answer is "put a keyword, virtual"
 
( 지금 학부생 1,2학년 C++ 문법 시험 보는건가.. )

Q. If you create a socket on a client-side, then what would you do next?
 
>> ...........?? (밑도 끝도 없이 뭔소리야?)
 
Recruiter 왈: You don't understand what I am saying?
 
>>  ;;;; OK. It depends on the problem. Could you explain me about the problem a bit more?
 
Recruiter: Nah, just give me a general answer
 
>> (뭔소리여...) Well...It really depends on the protocol. For example, if it was an HTTP client, then
>> I would send a header message, like GET blabla or POST blabla.
 
Recruiter: You meant you would connect to the server?
 
>> OK........... (뭔가 잘못 흘러가고 있다는 생각이 들기시작했음)
 
Recruiter: OK..right. the answer is calling connect()
 
(이사람이 나를 놀리는건가...왜 senior C/C++ 프로그래머를 고용하는 기술면접에서 연결하기위해 사용하는 소켓 함수 이름이 뭐냐는 질문을...)
 
<code>
Recruiter: Which data structure would you use in a large-scale database system, if the key is a string? 
Hashing, Queue, or RedBlack Tree?
 
>> Well...I would use RedBlack tree to store a huge amount of data.
 
Requiter: No, the answer is Queue.  
>> (이 질문의 의도는 아직도 잘 이해못하고 있습니다.)

이미, 저는 많이 당황해있었고, 그 recruiter는 마지막으로 C++ syntax 질문을 했습니다.

Recruiter: Is it possible to declare a constant variable in the member variable declaration section and a constructor as well?

좀 부끄러운 실수지만, constructor 에서 constant variable을 선언할수있냐는 질문으로 오해했습니다.
- 참고로, C++에서는 static keyword없이 constant member variable을 선언하는것을 금지하고있습니다. -

결국 C++ programmer로 적합하지 않다는 인상을 주는 대화를 주고 받았고
저의 첫 techincal phone-interview 는 실패로 끝난것 같습니다.

사실 저 질문들은 senior에게 물어볼 것이라 전혀 생각치 못했었고,
저의 인터뷰 스킬이 부족한 탓이 컸다고 생각합니다.

한편으로 드는 생각은, 도대체 저런 질문을 잘 대답하면
과연 senior C/C++ programmer 연봉 1억이상의 senior C/C++ programmer 직업을 얻는것인가 하는 의구심이 들었습니다.

제가 준비했던 질문들은

가령 과거 만들어왔던 프로그램중에
복잡한 멀티쓰레드 모델들이나, 대용량 저료처리를 위한 디자인들에 대해서,
그리고 디버깅 테크닉들이나 프로젝트 관리를 위해 어떠한 방법을 써왔냐,
분산처리 시스템에서의 디자인등등

그런 질문들을 기대했었는데...........

아직도 저는 배워야할것이 많은것 같습니다.

사실 곧 모 유명회사에서 전화인터뷰가 또 있습니다.

KLDP에는 미주지역에서 일하시는 분들도 종종 보이는것 같습니다.
혹시, 미주 지역에서 관련 직종에서 일하시분들이 인터뷰 팁을 준다면, 도움이 많이 될것 같습니다.

kukyakya의 이미지

C++에서는 static keyword없이 constant member variable을 선언하는것을 금지하고 있다고 말씀하셨는데, static 없이도 const member variable 사용 가능하지 않은가요?

물론 assignable하지 않은 class가 되겠지만 문법상으로는 전혀 문제 없을 것 같습니다.

#include <iostream>
 
class test_class
{
public:
  test_class(int __a) : a(__a) {
  }
 
  int get_a() const { return a; }
 
private:
  const int a;
};
 
int main()
{
  test_class a(3), b(4);
  std::cout << a.get_a() << std::endl;
  std::cout << b.get_a() << std::endl;
}

위와 같은 코드를 컴파일한 후 실행하면 예상한 대로 아래와 같이 출력됩니다.

3
4

혹시 제가 말씀하신 의도를 잘못 파악한 것이라면 알려주세요.

ddoman의 이미지

C++ 에서 static keyword없이 const variable을 허용하지 않는 이유는
선언되는 each instance마다

불필요하게 같은 값의 constant variable을 가지게 할 필요가 없기때문이라고 생각합니다. 즉 공간 낭비이죠

가령

class A
{
    int aa = 1;
    const int bb = 3;
};
 
void create()
{
    A n1, n2, n3;
}

A의 객체 n1, n2, n3는
프로그램 running time 에서 계속, 앞으로도 값이 변하지 않을 const int bb라는 이름의
단지 값 3을 각각 가지게 됩니다. aa의 경우, 프로그램 상황에 따라 각 객체마다 다른 값을 가질 수도 있기에
별도로 할당해줄 이유가 생기는것이지만, bb의 경우 단지 공간 낭비일 뿐이죠.

그런데 올려주신 저 코드

class test_class
{
public:
  test_class(int __a) : a(__a) {
  }
  ...
 
private:
  const int a;
};
 
int main()
{
  test_class a(3), b(4);

저기에서는 constructor를 통해 각 객체가 다른 값의 const variable을 갖을 수 있기에
그 문제를 회피하는 트릭같은 겁니다.

하지만 저 코드의 경우 역시

class test_class
{
public:
  test_class() {}
  test_class(int __a) : a(__a) {
  }
  ...
 
private:
  const int a;
};
 
int main()
{
  test_class a(3), b(4);

위와 같이 저 const int a를 initialize 해주지 않는 constructor가 하나라도 존재한다면
컴파일러는 에러를 내놓습니다.

 uninitialized member 'test_class::a' with 'const' type 'const int'

왜냐면, 새로 추가된 생성자를 통해 객체가 생성될 경우, const int a가 uninitialized 될 상황이 발생하기 때문이죠.

그래서 const int a = 3 과 같이 initial value를 준다면,
다시 처음의 문제에 봉착하게 됩니다.

winner의 이미지

초기화목록은 const, 참조자가 있는 경우 반드시 사용해야 하는 문법이며,
base가 기본생성자가 없으면 역시 써야 합니다.

저는 kukyakya님의 의견이 옳다고 생각합니다.

기초는 중요하다고 생각하는데 server socket 만드는데 정답을 말하셨다면
계속해서 이런 질문을 하는 것은 interviewer가 좀 미숙한 듯...

그런데 Queue는 도저히 납득이 안되는군요.

chriskr7의 이미지

const란 의미가 바로 변하지 않는다는 말인데,

매 class 생성시 assign해주는 건 말이 안 됩니다.

static const로 해줘야 되는 것이지요. 물론 value도 assign해주어야 하고요

eyeda99의 이미지

일본에 있는지라 별로 도움은 안되겠습니다만... 저도 일본내 US계열 회사에 면접을 몇번 본적이 있어서 한말씀 드리면...
>> You don't understand what I am saying?
↑요거 한방에 님 언어 실력이 많이 부족하다는걸 면접관이 알아챈거 갔습니다.(ㅡㅡ;) 저도 한번 들어본적이 있어서...
사실, 어느 언어든지 전화면접이 정말 어렵습니다. 저의 경우도 처음에 왔을땐 일어가 부족해서 힘들었고, 오래살고 일어가
능통하게 되니, 이제는 영어를 거진 잊어먹어서 면접때 너무 부족한 걸 알게되더군요.. 너무 기죽지 마시고, 친구분이 있으면
전화 연습을 해보는 것도 한방법이 되지 않을까 합니다. 그리고, 모르겠다 싶으시면 대충대답하지 마시고, 파동한번 때려
주시고요. (^^;) 힘내세요. 그나저나, 100K나 주는 회사가 아직도 있군요.. 으미...

If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut.
- Albert Einstein -

madman93의 이미지

red-black은 A red-black tree is a special type of binary tree

이니깐 if the key is a string? 이걸 가정한다면
Queue 가 아닐까 합니다.

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

ddoman의 이미지

STL의 map은 balanced binary tree로 구현되어있습니다.

truecolor의 이미지

삭제

익명 사용자의 이미지


추락하는 미국에서 일하던 9년차 C++ 프로그래머의 이야기

글쓴이: chicago 작성 일시: 금, 2009/08/14 - 11:12오후

http://kldp.org/node/107953

익명 사용자의 이미지


"blkstorm" wrote : 금, 2009/12/18 - 4:38오전 http://kldp.org/node/111143#comment-513969

"drinkme" wrote : 금, 2009/12/18 - 5:59오전 http://kldp.org/node/111143#comment-513973

익명 사용자의 이미지


미국에선 아이 키우는 데 돈이 거의 들지 않았건만….

솔개 엄마의 저공비행 2011/03/08 16:01 이프

http://kldp.org/node/129320