2019년 4월 19일 금요일

아마존 인터뷰 후기 (Seattle SDE)

기억이 더 가물가물해지기 전에 아마존 인터뷰 후기를 남겨보기로 한다. 
지금은 리로케이션 까지 해치우고 시애틀에 산지 2달이 조금 넘은 시점이다.

인터뷰 보기 전에 다른 분들이 웹사이트에 남겨둔 인터뷰 후기를 뒤지면서 이 회사는 인터뷰를 어떻게 진행하는지 짐작해보는 시간을 가졌었다. 그분들께 고마워하면서, 나도 후기를 남겨볼 생각을 하게 되었다. 혹시 준비하시는 분들.. 궁금한거 있음 댓글을 남겨주세요.

=======================
배경 설명
=======================
지난 해까지 호주 멜번에 살았고, 마지막에 다니던 회사는 보쉬 (Bosch Australia)라는 독일계 회사. 자동차 부문에서 임베디드 개발자로 일하고 있었다. 주로 사용하던 언어는 C. 

호주로 이사간건 2010년. 호주로 오기 직전에는 전산직 공무원으로, 중앙 부처 중 한곳(광화문)에서 일하고 있었다. 공뭔이 되기전 6년 정도는 소프트웨어 개발자로 한국 대기업, 외국계회사, 벤처기업 등에서 일했다. 호주로 와서는 공무원 재직 기간(6년이 넘는)동안 까먹었던 본업을 다시 되살려 취직해 임베디드 쪽에 주로 일하고 있었다.
(말로 쓰니 복잡: (한국)개발자 -> (한국)공무원 -> (호주)개발자  이렇다)

이전 글에 보면 보쉬에 들어간 인터뷰 후기가 있는데, 보쉬에서 일한건 2018년 7월부터다. 얼마뒤 2018년 9월인가 10월에 아마존 리쿠르터에게서 링크드인을 통해 메일을 받았다. 보쉬에는 들어온지 얼마 안되고, 프로베이션을 좀 넘은 시점이었다.

=======================
리쿠르터에게서 메일
=======================
다른 분들도 이런 경험을 하겠지만, 까먹을만 하면 여러 회사들의 리쿠르터에게서 연락이 온다. 호주는 물론 미국 여기 저기. 아마존, 우버, 구글 등등.  대부분은 쌩깐다. 그러고 보니 한국 삼성에서도 연락이 온적 있다. (왜 연락한겨)  아마존에서 연락 온것도 처음이 아니었다. 2017년 말쯤에 연락이 왔었다. 지원도 안했는데 링크드인 통해서 연락을 받았다. 암튼, 그때도 이메일 주고받고 셤보라고 해서 온라인 테스트 했는데, 다시 연락이 안왔다. 온라인 테스트를 망했나 보다 했다. (그럼 말이라도 해주든가.. 아무 피드백이 없다)

잊고 있다가 다시 1년 후, 또 연락이 왔다. 멜번에서 11월에 하이어링 이벤트 할건데 자기네의 온라인 테스트를 통과하면 불러준다고 한다. 단 조건은 호주 시민이어야 한다. (이건 비자 때문인거 같은데, 호주 시민은 E3 비자를 받아 미국으로 간다. 이거 나오는데 3주 걸림) 1주일동안 답장을 보내지 않다가, 예의 상 답장을 보냈다. 나 작년에 온라인테스트 하라고 해서 했는데, 너무 어려워서 떨어졌다. 시간도 안맞고 나 테스트 보기 싫다. 그리고 지금 들어간 회사에 얼마 안되서 옮기기 그렇다. 그리고 이 회사 되게 좋다. 나 만족한다. 정중히 거절하는 메일을 보냈다.

리쿠르터가 다시 메일을 보내서, 온라인이 싫으면 사람붙여서 전화로 코딩 테스트 보게 해주께.. 함 해바라. 설득했고.. 어쩔수 없이 보게 되었다.

전화 테스트는 합격했는지, 결국 현장 인터뷰에 초대되었다.
현장 인터뷰에 가겠다고 한 후, 전화통화에 또 참여해야 했다.
Prep call 인데, 인터뷰에 뭘 준비해야 하는지를 설명하는 1시간짜리 통화다.
준비 리스트를 주는데, 학부때 배운 Data Structure  책에 나오는 주제 전부 다라고 생각하면된다. 별로, 거의 도움 안되었다.  도움된 부분은,, 인터뷰 날에 대해 대략 어떻게 진행되는지를 설명해주는 부분이다.

=====================
현장 인터뷰
=====================
아마존 인터뷰: 2018 11 13
장소아마존 멜번 사무실 (Ernst & Young building / 8 Exhibition Street)

인터뷰는 2시부터 6시까지 예정되었다건물에 도착한 시간은 1 .

커피를 마시고, 11층으로 올라갔다올라가는 엘리베이터에서 아마존 인터뷰를 보려고  사람을 만났다. 서로 뻘쭘이 인사하고, 어제 있었던 소셜 미팅에서 나를 본거 같다고 그사람이 말했다. 나는 가지 않았는데 뭘 봤다는건지..  회사때메 못갔다고 말하고.. 이런저런 얘기를 했다.  같이 로비에서 기다리다가 각자의 인터뷰 룸으로 안내받을  서로 굿럭이라고 말해주었다.

((NOTE: 사실.. 나는 이사람과 같은 팀이 되어 같이 일하고 있다.. 세상일 정말 모르겠다.. ㅎㅎ))


온사이트 인터뷰 안내를 받을  개인 랩탑 가져오라고 하였다인터뷰 시에 랩탑으로 진행하기 위함이라고 한다인터뷰 룸에는 파워포인터화이트보트테이블이 있었다인터뷰 시작 전에 와이파이를 연결하라고 했다.

((NOTE: 다른 인터뷰 후기에는 화이트 보드에 손으로 쓴다고 했는데, 어느새 바뀌었는지, 개인 랩탑을 가져오라고 해서.. 인터뷰 시 랩탑을 사용했다.
나의 경우, 화이트보드로 일단 전체적인 알고리즘 설명했고 -> 이걸 랩탑으로 실제 코딩했다. 코딩은 아무 언어나 써도 된다고 해서 C로 했는데. 다들.. 아직도 C를 쓰다니? 라는 반응이었다. 지금은 팀에서 자바를 쓴다. 자바를 많이 쓰는거 같다))


=========================================
인터뷰 구성
=========================================
인터뷰는 총 네 세션(각 1시간: 총 네시간). 나의 경우, 세 세션이 알고리즘을 이용한 문제해결.
한 세션이 디자인 인터뷰였다.  매 세션마다 한명 또는 두명이 들어왔다.
각 세션마다, 약 20-30분을 behavioural question (아마존 리더십 프린시플 적용 문제) / 나머지 시간은 문제풀이

자세히는 기억도 안나고, NDA도 작성했으니, 대략 말하면 다음과 같다.


첫번째 인터뷰 (2-3)
30분은 behavioural question. 나머지 30분은 테크니컬 문제. (모든 세션 공통)
시드니 AWS  매니저라고 했다문제는 캐쉬를 쓰는 문제였는데나는 해쉬테이블 () 이용해서 푸는 방식으로 했다만일 어떤 래퍼 펑션이 있는데 이게 부르게 되는 매핑 펑션이 리스판스 타임이 느리면 어케 해결하겠냐는 .
내부 메모리에  같은 것으로 저장해둔다고 캐쉬 개념을 얘기했다.


두번째 인터뷰 (3-4)
인터뷰어가 처음에는 친절한  알았는데 사람을 어찌나 다그치던지 당황했다. 스트림을 인풋으로 받아서 가장 처음 나오는 unique char 찾는 문제.
처음에는 쉽다고 생각했는데 점점 뭔가 이상한 느낌나중에 겨우 힌트를 받아서 위기를 모면했지만 나중에 스트림에서 캐릭터 받는 부분을 고치라고 했는데 의도를 알아채지 못해서 헤메다가 결국  말인지 알아들었으나 시간 다 됐다고 에디터를 닫아버렸다매정하게.


세번째 인터뷰 (4 – 5)
이거  최악이었다시스템 디자인 쪽인데.. 내가 읽은 자료에서 언제나 빼놓지 않고 나왔던 조언이 바로 문제로 점프하지 말라는 것이었는데완존 그렇게 해버렸다. 문제를 보고 당황하니까 조언이고 뭐고.. 머리가 텅 비어버렸다.
웹사이트를 디자인하라는 문제인데, 스케일도 생각해야하고, 유저 수, 디비 어쩌고.. 
솔직히 이 부분은 엉망진창이었는데, 내가 뭐 웹사이트 시스템 설계해본적이 있어야 말이지.
인터뷰어는 조금 답답해 하는거 같았고나는 경험이 없으니 아는 것도 없고 서로 답답한 상황그래도 최선을 다해서 참아주는  같았다.


네번째 인터뷰 (5 – 6)
마지막 인터뷰가 가장 괜찮았다 했다는 말도 들었다아마존에서 14년인가 있었다는 시니어 소프트웨어 엔지니어가 주도했고 조인한지 얼마안되는 신참이 같이 들어왔다알고보니 신참은 멜번에서 6개월 전에 그쪽으로 리로케이트 분이었다.
문제는 다행히도 해쉬테이블 문제였다문제가  재밌었다해쉬테이블이 어떻게 동작하는지를 알아야 풀수 있는 문제인데 그것도 아주 어렵지 않고 30분안에 풀수 있는 그런문제.
 나아가서 랜덤하게 값을 가져오되 O(1)으로 가져올  있도록 구조를 바꾸라고 하는 아주 재미난 문제였다. 
문제를  풀고 나서 멜번에서 시애틀로 이사가는 것에 관해 얘기하고 시애틀 스키타기는  좋다는 말을 했다마운트 불라보다 웨이 치퍼 할때는 웃음이 나왔다.

((주석: 나중에 찾아보니까, 2016년 우버에서 나왔다는 문제와 유사..))


<<아마존 리더십 프린시플 문제>>
이거는 사실 준비만 잘하면 상당히 잘 해낼 수 있는데, 나는 여기서 꽤 점수를 얻은것이 아닌가 함.  기억할 점은, 자기가 겪었던 프로젝트 중에 챌린징 했는데 상당히 잘 해냈다고 생각하는 프로젝틀 하나 혹은 두개 마음속에 준비한다.  뭐가 챌링징 했는지 일단 말로 설명할 정도로 준비하고. 어떤 상황에서 어찌할지 (what would you do or what did you do) 문제에 대비한다. 구체적으로 그 프로젝은 이러이러했는데, 내가 (항상 I가 주어다) 이런 식으로 상황을 대처했다. 뭐 이렇게 말하면 된다. 결과적으로 프로젝은 나의 행동/처리로 인해 어떻게 되었다. 이런정도 준비하면 될듯.  덧붙여,, 아마존은 이걸 리더십 프린시플과 살짝 연결하면 된다.



===============================
인터뷰 결과
===============================
인터뷰는 화요일이 었는데  목요일에 합격 통보를 받았으니 매우 빠르다. 합격 통보는 전화를 직접 받았다.  시애틀에서 개발자들(interviewers)과 리쿠르터가 멜번으로 와서 일주일 머물렀으니, 목요일에는 낮에 직접 리쿠르터에게 전화를 받았다. 잘 했고 축하한다고.  자기가 states (미국을 states라고 하나보다)로 돌아가서 다시 이멜을 주겠으며, 그 후에는 오퍼와 리로케이션 합의가 진행된다고 했다.


To be continued...

2018년 9월 27일 목요일

소프트웨어 엔지니어로 멜번에서 두번째 이직 - 2탄

seek.com.au에서 잡 서치를 하면 회사에서 직접 뽑는 형태잡에이전시가 뽑는 형태 두가지가 있다. 두가지 모두 구별하지 않고 둘다 지원하였으나, 나의 경우 중요한 것은 회사 위치이다.

아이가 있어서 아침에 아이들을 학교에 데려다 놓고 갈 수 있는 정도의 거리여야 한다. 원래 다니던 회사랑 그전에 다니던 회사 모두 집에서 10km 정도 였다. 이제 아이들이 좀 커서 반경을 20Km로 넓혔으나 시티(CBD)는 제외했다.  차로 출퇴근하는 것이 편하기 때문.

지원하는 포지션은 웹 개발 쪽하고, 임베디드 개발자 두 가지 종류로 나눠서 지원하였다.

인터뷰까지 간 것은 세회사였다. 다음과 같다.

1) 회사에서 직접 hiring process 진행:  링크드인 통해 지원. 전화 연락와서 확인 후 인터뷰 진행. 테크니컬 인터뷰 였는데 결과는 꽝.

2) 잡 에이전시가 연락.  리치몬드에 위치한 군수회사. 호주시민권 만 지원가능하므로 시민권자인지 확인.   전화 연락하여 시민권자인지, 이력 확인 후, 두 번의 테크니컬 인터뷰.  두 번째 인터뷰까지 마치고 내가 거절. (세번째 회사로 가기로 결정 후)

3) 잡 에이전시 연락. 클레이튼에 위치한 독일회사. 차량 관련 임베디드 시스템 개발. 전화 연락하여 확인 후, 온라인 테스트 실시 (IKM), 한번의 written test (1hr), 두번의 테크니컬 인터뷰 (1시간 반 + 1시간)  HR 인터뷰는 별도로 없었음.  인터뷰 마치고서 바로 verbal offer.  연봉협상은 에이전트가 그회사 HR과 진행 후 나에게 알려줌. 최종 오퍼 받기 전에 레퍼런스 체크 (로컬회사의 레퍼런스 두명 요구), 신체검사, Police Clearance Check 진행.


다음은 각 단계 별 설명이다.

== 전화 확인 ==
CV를 제출했으니 이걸 위주로 확인.  예전 이력확인, 현재 일하고 있냐.  그럼 왜 이직하려 하니? 현재 연봉은?  원하는 연봉은?  에이전시의 경우, 내가 지원하는 회사에 대해 설명해주고 진행해도 되지? 라고 한번더 확인.
이 단계에서 가장 어려운 질문은 왜 이직하려고 하니?  흔하면서도 무난한 답변 하나 준비하는 것이 좋다. (지금 회사도 좋은데 커리어 디벨럽먼트 차원에서 더 챌린징한 환경을 경험하고자 이직하려 한다 같은..)

== 온라인 테스트 ==
다른 곳에서 몇번 온라인 테스트를 보았는데 코딩 테스트였다.
이번에는 좀 달랐다. https://online.ikmnet.com 였고, 1시간 반 동안 50문제 정도 푸는 멀티플 셀렉션 문제. 토픽은 embedded c 였고, 테스트 전에 embedded c interview question으로 구글링하여 준비한게 도움이 되었다. 공부 반드시 해야 한다.
골때리는게, up to 세개까지 정답이라는 식으로 나온다. 이런 문제는 전부 잘 대답해야 하고, 만일 잘못된 것을 고르면 점수가 깎인다고 한다.

== 테크니컬 인터뷰 ==
지원하는 롤에 맞게, 객체지향, abstract class 등 물어보고, requirement 를 어떻게 잘 끌어낼지, embedded c 문제 (RTOS, interrupt, race condition ...) 등의 테크니컬한 질문. 그리고 프로젝트 경험에 비추어.. 어떤 상황에 어떻게 행동할지 질문 (what would you do~~~~ 로 시작하는 문제)
이걸 위해서는 내가 경험했던 프로젝트를 한번 상기하고 어떤 challenge가 있었고 어떻게 상황을 해결했는지 조목조목 준비하고 가면 도움이 된다.


이번에 일을 도와준 에이전트 중, 일이 성사된 에이전트는 정말 열심이었는데, 다른 에이전트들이 전화로 팁을 주고 회사 정보나 프로젝트 정보를 이메일로 전달하는 반면, 이 분은 직접 내 사무실 근처로 찾아와서 모의 인터뷰를 진행하고 조언을 해주는 등 열심을 보였다.  그 사람의 사무실은 시티이고 내 사무실은 Mount Waverley여서 상당히 먼 거리였음에도, 찾아와서 나를 만나주기까지 해서 참 고맙기도 하고 잘 해야 겠다는 생각이 들었다.

결국에 최종 오퍼 받을 때에도 내가 부른 연봉보다 더 많이 받아주는 등 네고까지 잘 챙겨주었다. 내가 잘 받아야 본인도 잘 받는 것이긴 하지만, 참 대단하다는 생각이 들었다.

2018년 9월 7일 금요일

소프트웨어 엔지니어로 멜번에서 두번째 이직

이번 포스트는 두번째 이직 경험에 관한 것이다.

멜번에 와서 소프트웨어 엔지니어로 제일 처음 잡을 잡았을 때는 회사에서 무슨일을 하게 되든 얼마를 받든 전부 상관없이 그냥 기뻤다.

그때는 처음에 컨트랙트로 잡을 시작했고, 프로젝트가 성공하고 안정적인 궤도에 올라서고서는 회사에서 permanent로 전환해주었다.  프로토타입으로 시작했던 것이, 제품으로 변환되고 실제로 회사의 수익이 높아지면서 매니저가 승진을 시켜주기도 했다.

모회사는 일본의 대기업이기는 하였지만, 실제로 내가 일한 곳은 벤처기업이나 다름없었다. 그러니까 정작 회사는 대기업인데 하는일은 정말 처음부터 끝까지 다 신경써야 하는 일이었다.  좀 힘들어지기도 하고, 프로젝트는 사이즈가 커지는데 어딘가가 무너질거 같은.. 뭔가 좀 체계없이 사이즈만 커지는 느낌이 들기도 하고.  아뭏든 너무 스트레스를 받다가 4년 반만에 그 좋던 직장을 그만두고 집에서 놀았다. 이게 2016년.

그렇게 집에서 좀 쉬다가 다시 집에서 가까운 곳에 취직을 하였으나.. 이 일은 먼저번에 하던 일과는 정말 딴판인 일이었다.  앞서 하던일은 임베디드 펌웨어 개발이었고 (주로 C언어), 두번째 잡은 웹개발 이었다. 주로 PHP, JavaScript 와 MySQL 로 DB Query쓰는..

두번째 일은 거의 아는것이 별로 없는데 운이 좋게 들어가게 되었지만, 경험이 많지 않아서 거의 주니어 급 잡이었다. 그래도 직장이 집하고 가까왔고, 무엇보다 일이 그리 많지 않아서 하루에 2-3시간만 집중해서 일하면 하루 일은 거의 끝낼수가 있었다. 나머지 시간은 눈치껏 영어 공부를 한다거나 다른 기술들 (Angular나 노드JS 같은)을 공부하는데 할애할 수 있었다.

이렇게 2년이 지나고.. 편하면 좋을 줄 알았으나, 이 직장은 또 나름.. 너무 따분하기도 해서..  또 직장을 한번 더 옮기기로 작정하고, 2018년 2월경부터 이력서(CV)를 다시 꺼내 업데이트 하기 시작했고, seek.com.au을 다시 뒤지기 시작했다.


이번 포스트는 이 두번째 이직과정을 좀 써보려고 했는데 서론이 너무 길어진듯..

두번째 이직은 사실 기존의 두번에 비하면 너무나 힘이 들어서, 진짜로 다시는 이직을 하지 못하겠구나.. 라는 생각이 들만큼 힘든 과정이었다.  이제 이 세번째 직장에서 퇴직할 때까지 일할 작정이다. 

왜이렇게 힘들었는지 이유는 이렇다.

(1) 내가 나이가 너무 많이 들어서가 가장 큰거 같고 (내 나이가 이렇게 많다는 사실을 자꾸 잊는 모양이다.) 나이가 많아서 회사에서 안뽑아준다는 말이 아니고.. 왜냐하면 호주는 사람을 뽑을 때 나이를 묻지 않는다. 근데 얘네도 짐작은 할수 있다. 졸업 년도가 있고 경력이 있으니 CV 보면 안다. 그치만 많은 나이가 결격사유가 되지는 않았다. 적어도 이 직종에서는 그런거 같다.  나이가 많아서 이직을 위한 공부를 하기가 너무 어려웠다는 말이다. 공부는 정말 이제 못하겠다.

(2) 두번째는 회사에서 사람뽑는 과정이 굉장히 복잡해진거 같다. (과거에 비해서)

첫번째 직장은 기존에 있던 엔지니어랑 몇마디 얘기하고 테크니컬한 부분은 인터뷰 끝이었고 HR과 약간의 대화 (strong point/weak point.. 왜 이전직장 그만두었니. 등등)를 하고 바로 다음날 verbal offer 받았다. 시험 이런거 없었다.

두번째 직장은 우선 written test 있었고 (PHP, JavaScript, JSON, Ajax 등등) 테크니컬 인터뷰 있었고 HR인터뷰 있었따. 하루에 다 봤고. 다해서 2시간 정도 끝났다.  그리고 바로 verbal offer 받았다.


그런데.. 이번에 잡을 이동해보면서 느낀건데 사람뽑는 hiring process가 너무 어렵고 복잡해졌다.  그런회사만 내가 지원한건가..  여기가 미국도 아닌데.. 너무 어렵게 사람 뽑는다.


아뭏든, 진짜로 이번에 겪었던 이직과정을 정리해보고자 한다.  다음번 포스트에서.

2018년 7월 9일 월요일

MySQL에서 IN에 있는 순서대로 답을 받고 싶을 때 query 방법


만일, IN에 있는 순서대로 답을 받고 싶다면.  이런방식으로 쿼리하라.

SELECT * FROM `comments`
WHERE `comments`.`id` IN ('12','5','3','17')
ORDER BY FIELD(`comments`.`id`,'12','5','3','17')



어디서 퍼온 것인데 어딘지 모르겠음.

2018년 1월 25일 목요일

9살 아들이 만든 유튜브 비디오

9살 아들이 요즘 유튜브에 빠져 산다.
그러더니 비디오를 제작하기 시작했다.


아들이 만든 비디오

이거 만든다고 마이크도 사달라고 해서 사주고.
참 유튜브가 세상을 바꾼거 같다.

2016년 11월 17일 목요일

TCPDF 에서 Unicode 기반으로 특수 기호 쓰기

앞에서 작성한 TCPDF 관련한 것에 계속 덧붙여서,
TCPDF를 이용해서 PDF를 만드는데, &#9746 이나 &#9744 같은 유니코드로 된 기호를 html content에 포함해야 하는 일이 생겼다. 이럴 경우, writeHTML()을 이용해 PDF를 생성하면 물음표로 깨져 나오는 현상이 있었다.
여기 저기 뒤져보다 보니, 폰트가 이 문자들을 가지고 있지 않다면, 깨져서 나오게 되는 것이다. 그래서 TCPDF에서 풀 셋으로 가지고 있는 폰트를 쓰면 문제가 해결되는데, 그것이 Dejavu Sans 라는 폰트이다. 이런 식으로 하면 유니코드 문자들이 잘 나온다.

Zend Framework에서 TCPDF를 이용하여 PDF 파일을 생성하는 방법

Zend Framework를 기반으로 하는 시스템에서 TCPDF 라이브러리를 이용하여 PDF를 생성하는 방법은 여러 가지가 있겠지만, 그 중 하나.

내가 보고 있는 울 회사 시스템에서는 이렇게 하는 방법을 썼다.

controller 밑에 놓인 파일에서, Action 함수 내에 이런 부분이 있다.


tcpdf 클라스를 이용해서 $pdf라는 오브젝트를 일단 만들고,
$this->ozView->render()로 html 파일을 만들어서 이걸 $htmlcontent에 저장하고.

tcpdf의 멤버함수 중 writeHTML()을 호출하여 html 컨텐츠를 PDF로 만들고서 output 한다.


아마존 7주년, 그리고 퇴사

밑에 보니 아마존 6주년 포스트가 있네. 그 포스트 후 다시 1년 반의 시간이 지남. 시간은 왜 이렇게 빨리 흐르는거야. 지금은 2026년 8월. 2026년 2월말이 아마존 근무 7주년이 되던 때이고, 4월달에 퇴사를 했다. 7년 1개월 정도만에 ...