개발자 면접 as an Interviewer #Part 2 : 기술면접
# Part 2 : 기술 면접
전편에 이어 여기서부터 기술적인 질문을 본격적으로 합니다.
===============================
3. 기술 면접 질문
===============================
1) 모바일 질문
- android 개발 경험은? java or kotlin
- android 화면 전환 방법의 종류 & 차이점에 대해 간략히 말해주세요
1-1)Fragment
- 하나의 Activity에서 전환
- Activity에 종속적
- 가벼운 메모리
- 복잡한 layout 관계
- lifecycle 관리가 어려움(management 오류 위험)
1-2)Activity Intent
- 전체 view가 전환
- lifecycle 관리가 쉬움
- 잦은 호출은 메모리 부담 증가
- 독립적 구동
- 오류 가능성이 적음
--> 신입 지원자들은 대부분 모바일 개발 경험이 없기 때문에
위 질문은 주로 모바일 경험이 있는 경력자들에게 질문했던 내용입니다.
저도 모바일 경험이 별로 없으니 모바일 질문은 한 개로 끝...
ios 쪽(objective-c, swift)도 잘 모르니 pass ...
2) 프로그래밍 언어 & 웹 이해도 질문
2-1)Javascript
- 호이스트 개념?
- 프로토타입 개념?
- 스코프, 클로저 개념?
- 자바스크립트 디버깅 경험? debugger; 디버깅.로깅 찍기, 디버깅.중단점 찍기
- Ajax(Asynchronous JavaScript and XML) 는 왜 사용하게 되었나요?
- Javascript 는 싱글스레드 언어인데 브라우저에서 멀티스레딩 기능이 되는 이유는?
- JSON 이란 ?
(Javascripts object notation) : { key: '111', value: '홍길순' }
- 브라우저에서 F12를 누르면 나타나는 개발자 툴에서
perfomance 탭의 기능을 사용해 보셨나요?
- HTML DOM 구조
- javascript 함수리터럴 개념이 뭔가요?
- 함수형 프로그래밍이란 무엇인가요?
- 타입스크립트는 배워보셨나요?
--> javascript 도 깊이 들어가면 배워야 할 것들이 꽤 있습니다.
javascript에 대한 이해도가 어느 정도인지 가늠하기 위한 질문들
이 질문들에 대한 답을 어느 정도 하는지 스스로 체크해 보세요~
2-2)Java & WAS
- 객체란?
이름과 성질로 이루어진 클래스 파일
- 객체지향 프로그램이란?
- 캡슐화 & 추상화 & 상속 & 다형성 & Composition
- 인터페이스란? 추상클래스란?
- Map<String, Object> params = new Map<>(); 이 코드는 문제없이 작동하나요?
--> interface 객체가 클래스 처럼 new로 생성되는지 질문
- 오버라이딩? 오버로딩 개념은?
- 스레드의 개념?(stack)
- 가비지 콜렉터란?(heap)
- static키워드에 대해 설명해 주세요. 왜 static키워드를 쓰나요?
- 디버깅 해보았나?
- java 직렬화 개념은?
- 제너릭 프로그래밍 개념은?
- WAS & Web Server 차이
- jsp 코드같은 서블릿 쪽 코드는 F12 버튼을 눌러 브라우저에서 제공하는 개발자 툴로 볼 수 있을까요?
- Load Balancing 개념에 대해 알고 있는 만큼 설명해 주세요.
2-3)형상관리
- 형상관리란 개념을 아시나요?
형상관리는 어떻게 하시나요?
3. Database
3-1)지금까지 사용해 본 데이터베이스 종류는?
3-2)관계형 데이터베이스란?
3-3)SQL이란? SQL Join 개념
3-4)정규화란? 정규화는 왜 하는가? 역정규화란?
3-5)ER 다이어그램이란?
3-6)index 개념 및 활용정도
- heaps 테이블 개념을 알고 있나요?
- 클러스터드 & 넌 클러스터드 인덱스 각각의 구조와 차이점 (MS-SQL 기준)
비클러스터형 인덱스 중에서 전체 데이터의 1 ~ 3 % 이상을 스캔하는 경우
SQL Server가 인덱스를 사용하지 않고 테이블 검색을 실시. 이것은 대략적인 추정치 상황에 따라서 다르다.
즉 비클러스터형 인덱스가 있어도 인덱스를 사용하지 않는다는 것
만약 프로그램이 주로 전체 데이터의 1 ~ 3% 이상의 범위 데이터를 검색하는 경우에는
차라리 인덱스를 만들지 않는 것이 시스템 성능에 도움이 된다.
사용하지 않는 비클러스터형 인덱스는 데이터의 변경 작업(insert)이 발생했을 때,
시스템의 성능을 나쁘게 만들 소지가 있음
ex)1,000,000 줄 데이터에서 5% 를 검색할 경우 (50,000 줄)
어떤 인덱스 타입을 사용하는 것이 좋을까요?
3-7)view 를 사용할 때 얻을 수 있는 하드웨어적인 이점은?
view를 사용하면 메모리 자원을 활용하기 때문에
하드디스크를 거치는 것보다 속도면에서 더 빠름.
대략 이 정도의 질문을 해보면
기초가 튼튼한 사람인지 아닌지는
어느 정도 구분 가능해 진다.
그리고 만약 연봉을 높게 부르는 경력자의 경우
이런 질문들에 어느 정도 대답하지 못하면
아직 배워야 할 것이 많은데 여기서는
그렇게까지 높게 대우해 줄 수 없다고 말하며
연봉을 낮게 제시한다.
일반적으로 1~2명의 개발자가
대부분의 일을 맡아 하는 업체의 특성 상
개발자가 독박을 쓰는 경우가 종종 생긴다.
'내가 없으면 이 회사 돌아가지 않지~'라고
우쭐해하는 사람들도 있지만
그것이 결국 부메랑이 되어
준비된 체력을 모두 소진시켜 버리는
상황이 오기도 한다.
회사는 이가 없으면
잇몸으로라도 살아내기 마련이다.
회사의 owner 는 한 사람이 없어도
사업을 어떤 형태로든 계속 이어가기를 바라고
또 그렇게 이어간다.
몸 담은 회사 일에 지치거나
더 좋은 조건을 찾아서
그냥 퇴사하겠다고 통보하고 나가도
법적으로 아무 문제없지만
(헌법 제15조
모든 국민은 직업선택의 자유를 가진다
--> 참고로 이 법을 몰라서
협박하는 무식한 CEO 도 가끔 발견할 수 있다.)
가능하다면
자신을 대체할 수 있는
다음 사람들을 세우는
팀장 역할을 해 보기를 추천한다.
일도 하면서 사람을 세우는 일은
만만치 않고 더 피곤할 수도 있다.
하지만 후배들을 가르치려면
자신도 제대로 배워야하고
또 알려주기 위해 스스로 정리하면서
자신의 머릿속에 정리도 더 꼼꼼하게 할 수 있다.
잘 배워서 남을 주는 역할을 잘하면
자신의 실력도 함께 올라간다.
면접을 보고 사람을 뽑고
함께 일하면서 생각해 본 것은
다음 사람을 세우는 팀장 역할을
해 본 것이 나에게 도움이 되었다.
나의 실력 또한
함께 깊어지고
함께 넓어져 가는 것을 느꼈다.
글을 마무리 하면서
부족한 나와
함께 일해준 후배 동료들에게
감사한다.
다들 고생 많아요~!