Cracking the Coding Interview, 189 Programming Questions & Solutions, Grale Laakmann McDowell

행동 기반 질문은 면접자의 성격을 알아보고, 이력을 더 깊이 이해하며, 면접을 원활하게 진행하기 위해 사용됩니다. 이러한 질문은 중요하며, 준비할 수 있습니다.

Interview Preparation Grid

각 프로젝트 또는 이력서의 구성 요소를 자세히 이해하고 설명할 수 있도록 준비하는 것은 면접을 성공적으로 대비하는 중요한 단계입니다. 아래와 같은 그리드를 활용하여 각 프로젝트 또는 이력서 항목에 대한 세부 정보를 정리하고 이해할 수 있습니다:

Common Questions Project 1 Project 2 Project 3
Challenges      
Mistakes/Failures      
Enjoyed      
Leadership      
Confilicts      
What You’d Do Differently      

위에서 언급한 그리드를 활용하여 이력서의 핵심 측면과 각 프로젝트, 직무 또는 활동을 열과 행으로 나열하고 일반적인 행동 질문을 열과 행으로 나열하여 그리드를 작성하세요. 그리고 면접 이전에 이 그리드를 공부하십시오. 각 이야기를 간단한 키워드 몇 개로 줄이면 그리드를 쉽게 공부하고 기억하기 쉬울 수 있습니다. 또한 면접 중에 이 그리드를 참고하여 면접에 집중할 수 있게끔 준비해두면 좋습니다.

또한, 자세히 이야기할 수 있는 프로젝트를 1~3개 가지고 있어야 합니다. 이 프로젝트에 대한 기술적인 구성 요소를 심도 있게 논의할 수 있어야 합니다. 이러한 프로젝트는 당신이 중심 역할을 한 프로젝트여야 합니다. 이러한 준비를 통해 면접에서 기술적인 질문에 대한 자신감을 높일 수 있습니다.

What are your weaknesses?

“약점에 대한 질문”에 대답할 때 실제로 있는 약점을 언급하세요! “내 가장 큰 약점은 너무 열심히 일한다”와 같은 대답은 당신이 거만하다고 생각되거나 자신의 약점을 인정하지 않을 것으로 인식할 수 있습니다. 좋은 대답은 실제로 있는, 합법적인 약점을 전달하지만 어떻게 극복하려고 노력하는지 강조합니다.

For example:

“가끔, 나는 세부 사항에 대한 주의가 부족할 때가 있습니다. 이것은 빠르게 실행할 수 있게 해주는 좋은 점이지만 때로는 부주의한 실수를 comit하기도 합니다. 그래서 항상 누군가가 내 작업을 더블 체크하도록 해서 그런 실수를 줄이려고 노력하고 있습니다.”

What questions should you ask the interviewer?

대부분의 면접관들은 당신에게 질문할 기회를 제공할 것입니다. 당신의 질문 품질은 그들의 결정에 영향을 미칠 것이며, 이것은 그들이 무의식적이든 의식적이든 중요한 요소입니다. 면접 때 몇 가지 질문을 미리 생각해 가지고 가세요.

일반적으로 세 가지 유형의 질문을 생각해 볼 수 있습니다.

진정한 질문 이러한 질문은 실제로 당신이 답변을 알고 싶어하는 질문입니다. 많은 후보자에게 가치 있는 몇 가지 질문 아이디어입니다.

“테스터 대 개발자 대 프로그램 매니저의 비율은 어떻게 되나요? 상호 작용은 어떤가요? 프로젝트 계획은 팀에서 어떻게 이루어질까요?” “이 회사로 오게 된 동기는 무엇이었나요? 가장 어려웠던 부분은 무엇이었나요?” 이러한 질문은 회사의 일상 생활을 잘 이해하게 해줄 것입니다. 통찰력 있는 질문 이러한 질문들은 기술에 대한 지식이나 이해를 나타냅니다.

“기술 X를 사용하는 것을 알았습니다. 문제 Y를 어떻게 처리하시나요?” “제품이 문제 D 때문에 많은 회사가 선택하지 않는 것처럼, 왜 X 프로토콜 대신 Y 프로토콜을 선택했나요? A, B, C와 같은 혜택이 있지만 많은 회사들이 이를 사용하지 않습니다.” 이러한 질문들을 하려면 회사에 대한 사전 조사가 필요할 수 있습니다. 열정적인 질문 이러한 질문들은 당신의 기술에 대한 열정을 나타내기 위해 설계되었습니다. 당신이 학습에 관심이 있고 회사에 강력한 기여자가 될 것임을 보여줍니다.

“저는 확장성에 매우 관심이 있으며, 이에 대해 더 배우고 싶습니다. 이 회사에서는 이에 대해 더 많이 알아볼 기회가 어떻게 되나요?” “저는 기술 X에 익숙하지 않지만, 이것은 매우 흥미로운 솔루션인 것 같습니다. 이것이 어떻게 작동하는지 조금 더 설명해주실 수 있을까요?”

KnowYourTechnical Projects

준비과정 중에는 깊게 숙달해야 할 두 개 또는 세 개의 기술 프로젝트에 초점을 맞추어야 합니다. 이상적으로 다음과 같은 기준을 충족하는 프로젝트를 선택하십시오. • 프로젝트에는 어려운 구성 요소가 있었습니다 (“많은 것을 배울 뿐”이 아닌). • 당신은 중요한 역할을 했습니다 (이상적으로 어려운 부분에서). • 기술적인 심도로 이야기할 수 있습니다. 이러한 프로젝트와 모든 프로젝트에 대해 도전, 실수, 기술적인 결정, 기술 선택 (및 이러한 선택의 트레이드오프), 그리고 다르게 할 점에 대해 이야기할 수 있어야 합니다. 또한 응용 프로그램을 어떻게 확장할 것인지와 같은 후속 질문에 대해 생각할 수도 있습니다.

Responding to Behavioral Questions

행동 질문은 면접관이 당신과 이전 경험을 더 잘 알 수 있도록 하는 것입니다. 질문에 대답할 때 다음 조언을 기억하세요.

Be Specific, Not Arrogant

거만함은 경고 신호입니다. 그러나 여전히 자신을 인상적으로 만들고 싶습니다. 그러면 어떻게 거만하지 않고도 자신을 인상적으로 만들 수 있을까요? 구체적인 정보를 제공함으로써 가능합니다! 구체성은 사실만을 제공하고 면접관이 해석을 유도하게 하는 것을 의미합니다. 예를 들어, “모든 어려운 부분을 다 했다”고 말하는 대신에, 어려웠던 구체적인 부분을 설명할 수 있습니다.

Limit Details

지원자가 문제에 대해 지꺼리듯 얘기하면, 해당 주제나 프로젝트에 정통하지 않은 면접관이 이해하기 어렵습니다. 세부 정보를 정확하게 제시하고 주요 요점만 언급하세요. 가능하면 그 내용을 해석하거나 적어도 영향을 설명해보세요. 면접관에게 자세히 물어볼 기회를 제공할 수 있습니다.

“가장 일반적인 사용자 행동을 분석하고 Rabin-Karp 알고리즘을 적용하여 검색을 90%의 경우에 O(log n)으로 줄이는 새로운 알고리즘을 설계했습니다. 자세한 내용을 더 알려드릴 수 있습니다.”

이렇게 하면 주요 포인트를 보여주면서 인터뷰어가 더 자세한 정보를 원할 경우 요청할 수 있게 됩니다.

Focus on Yourself, Not Your Team

인터뷰는 본질적으로 개인적인 평가입니다. 그러나 많은 지원자들(특히 리더십 역할을 하는 지원자들)을 들을 때 그들의 대답은 “우리”, “우리들”, “팀”에 관한 것입니다. 인터뷰어는 후보자의 실제 영향을 거의 모르고 후보자가 별다른 일을 하지 않았을 것으로 결론짓을 수 있습니다.

대답에 주의를 기울이세요. “우리” 대신 “나”라고 말하는 정도를 듣세요. 모든 질문이 당신의 역할에 관한 것으로 생각하고 그에 맞게 말하세요.

Give Structured Answers

행동 기반 질문에 대한 대답 구조를 만드는 두 가지 일반적인 방법이 있습니다: “nugget first”와 S.A.R입니다. 이러한 기술은 따로 또는 함께 사용할 수 있습니다.

Nugget First

“Nugget First”는 대답을 시작할 때 대답 내용을 간결하게 설명하는 “nugget(조각)”으로 시작하는 방식입니다.

예를 들어:

인터뷰어: “대규모 변경을 위해 사람들을 설득해야 했던 경험을 알려주세요.” 지원자: “물론입니다. 저는 대학에서 학부생들에게 자신의 강의를 가르칠 수 있도록 설득한 경험을 공유해드릴게요. 처음에는 학교에서 규칙이 있었는데…” 이 방법은 대답을 시작할 때 주제를 명확하게 표현하여 인터뷰어에게 대답 내용을 미리 알려주는 데 도움이 됩니다.

S.A.R. (Situation, Action, Result)

S.A.R. 접근 방식은 대답을 시작할 때 상황을 개요로 설명한 다음, 취한 조치를 설명하고 마지막으로 결과를 설명하는 방식입니다.

예를 들어:

인터뷰어: “대규모 변경을 위해 사람들을 설득해야 했던 경험을 알려주세요.” 이에 대한 S.A.R. 접근은 다음과 같이 될 수 있습니다:

Situation (상황): “이 상황은 대학에서 학부생들에게 강의를 가르칠 수 있도록 설득해야 했던 것입니다. 처음에는 학교에서 규칙이 있었습니다…”

Action (조치): “그래서, 저는 학교 규칙을 변경하기 위한 적절한 단계를 취하기로 결심했습니다. 먼저, 학교 규정을 조사하고 학생들 간의 지지를 모으기 위해 미팅을 주선했습니다…”

Result (결과): “내가 취한 조치의 결과로 학교에서 학부생들에게 강의를 가르치는 기회가 확대되었습니다. 학교에서 새로운 규칙을 시행하고 강의 경험을 제공하는 학부생들의 수도 증가했습니다.”

S.A.R. 접근 방식은 상황을 명확하게 제시하고 행동 및 결과를 구조화하여 인터뷰어에게 이해하기 쉽게 전달할 수 있도록 도와줍니다.

상황과 결과는 간결하게 표현해야 합니다. 인터뷰어는 보통 많은 세부사항을 필요로 하지 않으며 사실 그것들로 혼란스러울 수 있습니다. 명확한 상황, 행동 및 결과를 가진 S.A.R. 모델을 사용하여 인터뷰어는 어떻게 영향을 미쳤는지와 그것이 왜 중요한지를 쉽게 파악할 수 있을 것입니다. 귀하의 경험을 다음과 같은 그리드에 정리하는 것을 고려해보세요:

  Nugget Situation Action(s) Result What is Says
Story 1     1. …
2. …
3. …
   
Story 2          

Explore the Action

대부분의 경우에 “행동”이 이야기에서 가장 중요한 부분입니다. 그러나 너무 많은 사람들이 상황에 대해 길게 이야기하고 나서 행동 부분을 간과하는 경우가 너무 많습니다.

대신 행동 부분에 깊이 들어가 보세요. 가능한 경우 행동을 여러 부분으로 나누어 설명하세요. 예를 들어, “저는 세 가지를 했습니다. 먼저, 제가…” 이렇게 하면 충분한 깊이를 유도할 수 있습니다.

Think About What It Says

“페이지 35의 이야기를 다시 읽어보십시오. 지원자는 어떤 성격 특성을 나타내었나요? • 주도성/리더십: 지원자는 문제를 직접 다루어 해결하려고 노력했습니다. • 공감: 지원자는 상황을 이해하려고 노력했습니다. 또한 동료의 불안을 해소할 수 있는 방법을 이해하고 있었습니다. • 연민: 동료가 팀에 해를 끼치고 있었지만, 지원자는 동료에게 분노하지 않았습니다. 그의 공감심은 연민으로 이어졌습니다. • 겸손: 지원자는 자신의 결점을 인정할 수 있었습니다(동료뿐만 아니라 면접관에게도). • 팀워크/도움: 지원자는 동료와 협력하여 프로젝트를 관리 가능한 부분으로 나눴습니다. 자신의 이야기를 이 관점에서 생각해 보아야 합니다. 어떤 행동을 취했고 어떻게 반응했는지 분석하십시오. 당신의 반응이 어떤 성격 특성을 나타내는지 고려하십시오. 대부분의 경우, 대답은 “없음”입니다. 그런 경우 대답을 명확하게 만들기 위해 이야기를 다시 표현해야 할 수 있습니다. 직접적으로 “공감이 있어서 X를 했다”라고 말하고 싶지는 않지만, 그로부터 한 걸음 더 나아갈 수 있습니다. 예를 들어: • 덜 명확한 속성: “나는 고객에게 전화를 걸어 일어난 일을 알렸다.” • 더 명확한 속성 (공감과 용기): “나는 고객에게 직접 전화를 걸어야 했습니다. 그는 나로부터 직접 듣는 것을 더 선호할 것을 알고 있었기 때문입니다.” 성격 특성을 명확하게 만들 수 없는 경우, 새로운 이야기를 만들어야 할 수도 있습니다.”

So, tell me about yourself…

대부분의 면접관들은 면접을 시작할 때 자신을 간단히 소개하거나 이력서를 훑어보라고 요청합니다. 이것은 본질적으로 “피치”입니다. 면접관에게 첫인상을 남기는 부분이므로 이 부분을 완벽하게 처리해야 합니다.

Structure

대부분의 사람들에게 잘 작동하는 일반적인 구조는 현재 직책을 소개하는 첫 문장으로 시작하여, 외부 취미와 관련된 흥미로운 내용 (있는 경우)을 언급하는 마무리 부분으로 구성되는 대략적인 연대기 구조입니다.

현재 직책 [제목만]: “나는 미크로웍스에서 소프트웨어 엔지니어로 근무하고 있으며, 지난 5년 동안 안드로이드 팀을 주도하고 있습니다.”

대학: 나는 컴퓨터 과학 전공이며, 버클리 대학에서 학부 과정을 마쳤으며, 창업 기업에서 여름 동안 일한 경험도 포함하여 스타트업에서 내 비즈니스를 시작하려는 한 시도가 포함되어 있습니다.

대학 이후 및 그 이후: 대학을 졸업한 후에는 대기업에 대한 경험을 쌓고 싶어서 아마존에 개발자로 합류했습니다. 이것은 훌륭한 경험이었습니다. 대규모 시스템 설계에 대해 많은 것을 배웠으며, AWS의 중요한 부분을 출시하는 데 큰 역할을 했습니다. 실제로 그 경험을 통해 더 작은 환경에서 일하고 싶다는 것을 알게 되었습니다.

현재 직책 (세부사항): 아마존의 이전 매니저 중 한 명이 나를 모집하여 그녀의 스타트업에 합류하게 되었으며, 그것이 미크로웍스로 오게 된 계기였습니다. 여기서 초기 시스템 아키텍처를 구축했으며, 우리의 빠른 성장과 함께 꽤 잘 확장되었습니다. 그런 다음 안드로이드 팀을 이끌기로 기회를 잡았습니다. 3명의 팀을 관리하지만 주로 기술 리더십 (아키텍처, 코딩 등) 역할입니다.

업무 외: 업무 외에는 iOS 개발을 더 깊이 배우기 위해 주로 iOS 개발을 수행하는 하콘에 참여하고 있습니다. 또한 Android 개발 관련 온라인 포럼에서 모더레이터로 활동하고 있습니다.

마무리: 지금은 새로운 것을 찾고 있으며, 회사가 눈에 띄었습니다. 나는 항상 사용자와의 연결을 사랑하고 더 작은 환경으로 돌아가고 싶습니다.

이 구조는 대부분의 지원자에게 잘 작동합니다. 경력이 더 많은 지원자의 경우 일부 내용을 요약할 수 있습니다. 10년 후에는 후보자의 초기 진술이 다음과 같이 단순화될 수 있습니다. “버클리 대학에서 컴퓨터 과학 학위를 마치고, 아마존에서 몇 년 동안 근무한 후 안드로이드 팀을 주도하며 스타트업에 합류했습니다.”

Hobbies

취미에 대해 신중하게 생각하세요. 언급할 필요가 있는지 여부를 고려할 수 있습니다. 취미가 단순한 활동 (예: 스키 또는 강아지와 놀기와 같은)으로 제한된 경우, 무시해도 될 것입니다. 그러나 때로는 취미가 유용할 수 있습니다. 이런 일이 자주 발생하는 경우는 다음과 같습니다. • 취미가 매우 독특한 경우 (예: 불 뿜기). 이는 대화를 시작하고 인터뷰를 더 쾌적한 분위기로 시작할 수 있습니다. • 취미가 기술적인 경우. 이것은 실제 기술 세트를 향상시킬 뿐만 아니라 기술에 대한 열정을 보여줍니다. • 취미가 긍정적인 성격 특성을 나타내는 경우. “집을 스스로 리모델링”과 같은 취미는 새로운 것을 배우고 몇 가지 위험을 감수하며 손을 더럽히려는 의지를 보여줍니다 (문자 그대로와 은유적으로). 취미를 언급하는 것은 거의 상처를 입히지 않을 것이므로, 의심이 들 경우 언급하는 것이 좋을 수 있습니다. 그러나 취미를 어떻게 가장 잘 소개할 것인지 생각해보세요. 해당 취미에서 성과나 구체적인 작업이 있는지 (예: 연극에서 역할을 얻음) 알아보세요. 이 취미가 어떤 성격 특성을 나타내는지 고민해보세요.

Sprinkle in Shows of Successes

위의 소개에서 후보자는 자신의 배경의 몇 가지 하이라이트를 쉽게 언급했습니다. • 그는 특히 아마존에서 성공을 거뒀다는 것을 언급했으며, 이는 그가 아마존에서 성공적이었다는 것을 보여줍니다. • 그는 또한 더 작은 환경에서 일하고 싶다고 언급하며, 문화 적합성의 어느 정도 요소를 보여줍니다 (이것이 그가 지원하는 스타트업이라고 가정한다면). • 그는 AWS의 핵심 부분을 출시하고 확장 가능한 시스템을 설계하는 등 몇 가지 성과를 언급합니다. • 그는 자신의 취미를 언급하며, 이 두 가지 모두 학습 욕구를 나타냅니다. 자신의 소개를 생각할 때, 자신의 배경의 다양한 측면이 당신에 대해 무엇을 말하고 있는지 생각해보세요. 성과 (수상, 승진, 함께 일한 사람에게 스카웃되기, 제품 출시 등)를 언급할 수 있을까요? 자신에 대해 어떤 메시지를 전달하고 싶으신가요?