[interview] 코드 스쿼드 인터뷰 후기
코드스쿼드 마스터즈 클래스 백앤드 과정의 인터뷰 후기입니다. 인터뷰가 끝난 후 기억에 의존해 작성했기에 조금 다른 부분이 있을 수 있습니다. 매우 주관적으로 작성했으니 참고로만 읽어주세요!! 기억나는대로 쓱쓱 적다보니 반말이 편해서 반말로 작성했습니다.
우선 이 과정은 java 과정이었다. java를 잘 모르기에 인터뷰 이전까지 인프런에서 새로운 java 강의를 찾아들었다. 이게 꽤 도움이 되었다고 생각함.
42명중 30명 안쪽으로 뽑는다고 들었다.
아이스 브레이킹
면접관님은 완벽한 아저씨였다. 쉴틈없이 몰아치는 아재개그는 분위기를 충분히 녹였으며 자연스러운 분위기를 만들었다. 안그래도 요즘 승우아빠와 에드워드 권 쉐프의 유튜브를 찾아보는데 면접관님의 모습이 승우아빠와 오버랩이 되는건 착각인가 ㅋㅋ
아무튼 덕분에 아이스 브레이킹 후 편하게 인터뷰를 시작할 수 있었다.
자기소개
각자 정해진 시간 없이 자유롭게 진행하였으며 회사면접처럼 포멧을 준비해온 사람은 없는 듯 보였다. 면접을 보는 분들의 나이대는 대충 대학교 3~4학년정도?
자기소개 후 면접관님은 여러가지 질문 중 하나를 랜덤하게 뽑은 후 그 질문을 이용해서 인터뷰를 진행했다. 그 질문은 바로…
Q1: 시작이 반인가??
콘솔창에 Hello, world! 를 출력할 수 있으면 java의 절반은 아는걸까? 이런 개발자를 100점 만점에 몇 점을 줄 수 있을까?
처음 들었을때 대체 무슨말인가 했다. 지금 생각해보면 조금 더 생각해볼껄 이라는 아쉬움이 남는다. 언제나 그렇듯 만족스럽지 않은 과거는 항상 아쉽게 느껴진다.
당시 처음의 내 대답은 “점수를 정하기 어렵다”였다. 좋은 개발자는 코딩 스킬뿐 아니라 다양한 능력이 필요하다고 생각하였고 하나의 점수만으로 평가하기 힘들다고 대답하였다. 적어도 커뮤니케이션 몇점 기술점수 몇점 두 가지 정도는 필요하지 않을까 싶었다.
면접관님은 좋은 개발자는 하나의 능력만 필요한 것이 아닌것은 맞다고 하였으며 이어서 엄청난 천재이지만 주위의 생산력을 떨어트리는 개발자와 스킬은 높지 않지만 주변 개발자의 생산성을 극대화시키는 두 유형의 개발자의 예시를 들어주었다.
이 예시를 듣고 내가 고른 대답은 25점.
아무리 그래도 콘솔에 글자좀 찍을 줄 안다고 절반이나 주기에는 java라는 언어에 너무 많은 것들이 있다는 생각이었다. Java 하면 연상되는 OOP를 사용할 줄 알아야 절반을 줄 수 있으리라 생각하며 대답하였다.
면접관님이 들어주신 예시는 바로 아래 질문에서 나에게 너무 관대한 평가를 하게 만들었다.
Q2: 본인의 실력에 점수를 준다면?
java 언어의 숙련도가 낮다 해도 js를 이용해 웹페이지를 만들어 본 적은 있기에 자신있게 70점은 줄 수 있을 것 같다고 대답하였다. java의 특성을 잘 몰라도 커뮤니케이션과 이전의 경험으로 충분한 점수를 줄 수 있으리라 생각하였고, 개인 능력이 낮아도 주변 개발자와의 커뮤니케이션으로 70점 만큼의 일은 할 수 있을 것 같다는 말도 안되는 점수를 답하였다.
왜 그랬을까 ㅎㅎ
Q3: Hello, world!
본격적으로 콘솔에 Hello, world! 를 출력해보는 시간이다. 면접관님의 화면을 이용해 집단지성으로 결과물을 완성하는 방식.
intellij 와 같은 툴을 사용할 경우 예약어를 외우지 않아도 알아서 작성해주기 때문에 이에 익숙해져있는 사람이 많았을것이다.
하지만..!
호눅스님께서 보여주신 화면은 빈 터미널이었고 이어서 파일 생성후 vim 에디터를 키셨다.
시작 화면이 너무나도 공허하다. 너 왜 이렇게 어색하니 증말
집단 지성의 힘으로 어찌어찌 아래와 같은 코드를 완성하였다.
class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
이 코드를 작성하면서 아래와 같은 질문들을 이어 받았다.
Q3-1: java 코드가 메모리에 올라가는 과정
작성한 Hello.java를 실행하기 위해서는 어떻게 해야하죠?
우리가 실행한 스크립트 명령어는 다음과 같다.
$ javac Hello.java
이 스크립트의 실행 결과로 Hello.class 파일 생성이 된다. 생성된 파일의 정체는 file 명령어를 통해 확인해볼 수 있다.
$ file Hello.java
test.java: C++ source, ASCII text
$ file Hello.class
Test.class: [architecture=6369132] [64-bit architecture=7618049] [architecture=786688] [64-bit architecture=65539] [architecture=6909556]
그리고 .class 파일을 실행하기 위해서는
$ java Hello
이러면 콘솔에 Hello, world! 출력이 된다. 끝
참고로 특정 lib import 필요한 java 파일을 컴파일 하는 경우에는 같은 디렉토리에 .jar 파일을 옮긴 후
$ javac -cp ".:./lib명.jar" 파일명.java
$ java -cp ".:./lib명.jar" 파일명
처럼 사용한 .jar 파일을 넘겨주면 실행되는 모양이다.
참고: https://mkil.tistory.com/481
java는 컴파일러에 의해 class 파일로 변경되며 이는 바이트코드다. 이 바이트 코드는 jvm 위에서 돌아간다. 여기서 java 의 큰 장점중 하나를 볼 수 있다. 어떤 환경에서도 jvm 을 통해 돌아가기 때문에 우리가 작성한 코드는 환경과 독립적으로 동작한다.
Q3-2: System.out.println
System, out, println 각각이 무엇인지를 아는대로 설명해보세요.
나는 IntelliJ 컴파일러를 사용하기에 System.out.println 을 사용할 때 마다 옆에 작은 아이콘으로 c, f, m 이 뜨는 것을 기억해냈다. c는 class 일 것이고 f는 field, m은 method임을 직감하였지만 6명이 동시에 진행하는 인터뷰였으므로 즉각적인 대답을 할 수 없었다.
어찌되었건간에 내가 생각했던것은 맞았으며 곧바로 다음 질문으로 넘어가게 되었다.
Q3-3: Singleton 패턴(아닐수도)
System이 클래스인가요? 그렇다면 객체는 어디서 생성되나요? 우리는 어디에도 “new System()” 과 같은 코드를 넣지 않았는데 객체화가 된건가요?
인터뷰하기 며칠 전 자바 온라인 강의를 인프런에서 찾아 들었다. 무료여서 부담없이 쭉쭉 들었다. Do it! 자바 프로그래밍 입문 그 강의들 중 싱글톤 패턴에 대한 내용이 있었다. 이 강의애서 강사님은 객체를 객체화하지 않고도 static 명령어가 사용된 필드 혹은 메소드는 객체이름을 통해 사용할 수 있다고 하였다.
이 말은 System을 객체화하지 않고 out 필드를 사용할 수 있는 말과 같은 맥락이라고 이해하였고 static 키워드를 언급하며 대답하였다.
마무리
어떤가요? 콘솔에 Hello, world! 를 찍을 수 있는 개발자는 몇 점짜리 개발자같나요? 본인에게 준 점수와 비슷한가요?
위의 모든것을 전부 안다면 정말 50점을 충분히 줄 수 있을 것 같다. 그리고 내 스스로에게 70점이나 준 사실도 많이 부끄러웠다.
면접관님은 한 시간동안 여섯 명의 인터뷰를 하고 선별하는게 정말 판별하기 힘들고 혹시 떨어지더라도 스스로의 탓을 하지 말고 너무 상심하지 말라는 말을 하셨다. 작년이었으면 전부 합격했을 것이다. 올해가 너무 치열해서 걱정이다. 와 같은 말을 이어서 하며 떨어질 불합격자들을 격려하였다.
결과
결과적으로 불합격 통지를 받았다. 설마 떨어지겠어 라는 생각이 컸기에 충격이 상당했다. 입사하는 것이 아닌 배우기 위한 학원에서부터 걸려졌다는 사실이 너무 쓰라렸다.