brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Jun 04. 2016

안드로이드 개발자 이직 면접 #01

전화 면접 / 사전 과제

1. 이직 면접

  - 전화 면접 / 사전 과제


전화 면접


몇몇 회사에서 글로벌 IT 기업처럼 전화 면접을 하지요.

대면 면접을 진행하기 앞서 기본적인 기술 지식을 파악하는 목적인데,

기술적은 면은 PC 앞에서 소리 안 나게 검색하면서 어느 정도 답할 수 있는데 왜 하는지는 모르겠어요.



전화 면접은 회사마다 다르겠지만 보통 30분 정도 보는 거 같아요.

짧은 시간이고 전화라는 제한된 면접 환경이기에 어렵거나 복잡한 것들보다는 기초적인 질문들을 들었어요.




제가 듣거나 주변 지인이 들었던 문제들입니다.


자바

객체와 클래스에 대해 설명

사용하는 패턴에 대해 아는대로 설명

composite 패턴에 대해 설명

자바 기본형 정수와 wrapper 클래스에 대한 차이

자바에서 사용하는 자료구조에 대해 아는대로 설명

자바의 메모리 구조에 대해 설명


안드로이드

쓰레드간 통신방법에 대해 설명

메세지 핸들러에 대해서 설명

Looper에 대해서 설명

백그라운드에서 UI 업데이트 하는 방법

http 통신이나 리소스 관리 등 시간소요 시 구현방법

context 에 대해서 설명

activity 의 생명주기에 대해서 얘기하고 각 항목에 대해서 설명

ANR에 대해 설명

AsyncTask에 대해 설명

Parcel - Serializable 비교

명시적 인텐트, 암시적 인텐트 설명, 암시적 인텐트 사용 예

Intent Flag - FLAG_ACTIVITY_CLEAR_TOP, FLAG_ACTIVITY_SINGLE_TOP에 대해 설명

데이터 저장 방식 5가지에 대해 설명 (file, db, shared preference, property, network)

Data binding에 대해 설명

AIDL에 대해 설명


개발 방법론

TDD 에 대해서 아는대로 설명

ABTEST 에 대해서 설명

Dynamic 프로그래밍


Problem solving

서버에서 이미지를 내려주는데 memory overflow 난다. 어떻게 해결할것인가?

앱을 개발하는데 버튼 구현에 대해서 동그란 버튼과 네모난 버튼 개발에 대해서 의견이 나누어 졌다. 어떻게 대처할 것인가?

1부터 1억까지의 랜덤한 숫자가 있는데 한 숫자가 빠져있다면 어떻게 해결할 것인가?

숫자가 하나가 아니라면 어떻게 해결할것인가?      


Thread - Process 차이

Sort 알고리즘

Dead lock - 설명 / 방지법

사용했던 도구


지금 봐도 잘 모르는 질문들이 있네요.

저는 무슨 자신감이었는지 아무것도 안 보고 전화 면접을 했었어요.

모르는 건 모른다고 솔직하게 말하고,

아는 건 자세히 말했었는데,

몇 문제 이상 대답해야 한다 이런 건 면접관이 아니라 정확히는 모르지만 많이 대답하는 게 좋겠죠?


나중에 알고 보니 전화 면접을 진행하셨던 분이 1차 기술 면접에도 오셨었어요.

그래서 그런지 전화 면접 질문과 중복되는 질문이 없었어요.




사전 과제


앞서 전화 면접 질문들은 일반적인 기술 면접 질문들이라 이렇게 글로 썼지만,

사전 과제는 노출시키면 안 된다는 내용에 합의를 하고 진행했던 터라 여기에 쓸 수가 없네요.


단 2줄의 요구 사항만 있던 간단한 과제부터,

5장이 넘어가는 복잡한 과제까지 사실 큰 틀은 비슷했어요.



안드로이드 사전 과제


기한 : 2016.06.04 ~ 2016.06.XX

짧게는 24시간부터 길게는 면접 당일까지 다양했어요.

과제 수준도 기한에 맞게 나오니 걱정 안 하셔도 될 거 같아요.


개발환경

별다른 개발환경이 명시되지 않았던 적도 있고,

Android studio 버전까지 정해준 적도 있었어요.


요구사항

공개할 순 없지만 크게 보면 2가지입니다.

- 데이터 가져오기

- 가져온 데이터를 UI로 보여주기


데이터를 가져온다는 건 특정 파일에서 가져올 수도 있고 서버에서 받을 수도 있어요.

이 과정에서 생각해야 할 변수가 많은데,

직접 구현도 가능하지만 오픈소스를 써서 간단히 구현할 수도 있어요.

하지만 단순히 오픈소스를 쓰는데 그치지 않고,


왜 이 오픈 소스를 썼나?

이 오픈 소스의 장점은?

오픈 소스 내부 구조와 로직을 명확히 알고 있나?

오픈 소스를 쓰지 않고 구현을 할 수 있나?


다 이해하고 설명하실 수 있어야 합니다.


가져온 데이터를 UI로 보여주기에서 과제의 규모가 결정되는 거 같아요.

단순히 보여주기에 그치지 않고 별도의 기능도 추가해 완성도 높은 애플리케이션을 요구할 수도 있어요.


이 외에도 생각하셔야 할 점이 많아요.


기타

- 전체 구조를 어떻게 잡았는지 (MVC, MVP...)

- OOP에 맞게 작성했는지

- 예외처리를 어떻게 했는지 (Exception or error)

- 홈 버튼, 화면 회전 등과 같은 디바이스 이벤트 처리

- 로그 추가

- 단위 테스트 구현

- 기초적인 코드 작성법 (indent, class-method-variable 작명 등)

- 기타


사실 구조나 기본적인 코드 내용은 다 비슷하잖아요.

저런 사소하지만 정말 기초적인 부분에서 차이가 나는 거 같아요.


사전과제는 기술면접에서 코드리뷰까지 하는 경우가 많아요.

본인이 직접 만들었다면 코드리뷰도 문제 없지만 그냥 구글링해서 가져다 썼다면 왜 썼는지,

한번 정리할 필요가 있어요.




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari