상세 컨텐츠

본문 제목

[안드로이드 개발자 면접] 경험 정리

Android

by choiDev 2020. 10. 28. 15:49

본문

질문에 대한 답변은 직접 답변한 것을 토대로 적었으니
혹시 틀린 부분이 있다면 댓글로 말씀해주시면 감사드리겠습니다~!


[질문]
1. JVM과 Dalvik의 차이
   Dalvik는 JVM과 달리 모바일 디바이스환경에 맞게 제작되었으며, JVM의 스택기반 가상머신이 아닌
   레지스터 방식의 가상머신을 사용하여 메모리를 적게 사용하고 빠른 처리가 가능합니다.
  
  1.1 Dalvik과 ART의 차이
      Dalvik은 JIT(Just In Time)방식으로 앱 실행시 코드를 바이트 코드로 변환하여 실행하며
      단점으로 JIT컴파일된 코드를 메모리에 계속 들고있어, 성능 저하 및 배터리 과소모등의 악영향이 있습니다.
    
      ART는 Dalvik의 JIT방식이 아닌 AOT(Ahead Of Time)방식으로 변경되었으며
      차이점으로 앱 실행시가 아닌, 앱 설치시 바이트코드를 변환하며 앱 실행 및 화면전환 속도가 크게 개선되었습니다.
      단점으로는 
      앱 설치시 바이트코드로 변환하기에 앱설치가 느린점,
      바이트코드를 파일형태로 저장하기에 앱크기가 커지는 점이 있습니다.

 1.2 ART의 단점은 개선이 되었는가?
      네 앱 크기가 커지는 이슈는 여전하지만 android 7.0(N) 부터 JIT컴파일러도 함께 도입하여
     앱 (설치 및 업데이트)시에는 JIT컴파일 방식으로
설치속도가 개선되었으며,
     디바이스가 유휴상태이거나 충전중일때 앱의 컴파일을 조금씩 진행하여 AOT 컴파일 방식으로 전환합니다.

2. Java의 Primitive 타입을 나열하고 각각 어떤 형인지 (정수형, 실수형 등)와 각각의 바이트를 대답하시오
 

Type Byte
char 문자형 2
byte 정수형 1
short 2
int 4
long 8
float 실수형 4
double 8
boolean 논리형 1


3. Static변수는 Runtime Data Area중 어디에 저장될까요?
  Method area

4. OS의 본래 목적은?
  - 자원 관리 (메모리 할당, 해제, 스레드, 프로세스 관리 등등)

5. Handler, Looper, Message의 동작 구조에 대해 설명하시오
 - Message(전송하려는 데이터)를 포장에 Looper를 통해 Handler로 전달합니다. Looper는 큐 형태의 자료구조로
   들어온 이벤트들을 순차적으로 Work 스레드(실제 동작할)에서 실행합니다.

6. MVVM에 대해서 알고있는지?
 - Model View ViewModel 구조로 View에서 이벤트를 수신 ->
   ViewModel에서 비즈니스 로직을 처리 후 적절한 Model을 선택해->
   Model에 데이터를 담아 View로 전달해 사용자에게 표시함

7. Map과 Set에 대해 설명하시오
 - Map은 Key와 Value를 사용하여 데이터를 저장하는 자료구조
 - Set은 중복없이 자료를 저장하는 자료구조 이며 순서가 정렬되지 않고 저장됩니다.

8. LinkedSet에 대해 설명하시오
 - 다른 Set과 다르게 순서를 정렬하며 저장이 가능합니다.

9. HashMap과 ArrayList를 사용 시 어떤쪽이 원하는 값을 가져오는게 빠른지 설명하시오
 - HashMap은 Hash키를 사용 해 원하는 값을 바로 가져옵니다.
 - ArrayList는 원하는 값을 찾기위해 전체 리스트를 순회해야하며 그 값을 발견할 때까지
   순회해야하기 때문에 순회 횟수만큼 시간이 걸립니다.
 - 정답은 HashMap

10. 디자인 패턴을 알고있는게 있나요? 사용해봤다면 어떤것을 사용해 보았는지? 
 - 스트레티지, 빌더, 옵저버 패턴 등을 알고있으며
   빌더는 실제로 많이 사용했습니다.
   또한 디자인 패턴에 힘을 쏟는것 보단 객체지향을 중점을 두어 클래스간의 의존도를 최소화하고
   코드를 재사용을 할수 있는것을 중점을 두어 공부하였습니다.
  (경력 1년차 기점에 본 면접입니다.)

[코딩 테스트]
1. 문자열이 주어졌을때 주어진 문자열과 그것을 거꾸로 뒤집은 문자열을 비교하여
   거꾸로 뒤집어도 기존 문자열과 동일하면 true, 동일하지 않으면 false를 반환하시오
   (문제 자체는 쉬우나 시간 복잡도를 최소한으로 하는 전제 조건이 있었습니다.)
  
   입력 1: aa
   출력 1: true
   입력 2: abb
   출력 2: false

답 : 각자 풀어보시는 것을 추천드립니다.

2. 재귀함수로 숫자를 더해라
   재귀함수를 사용할 수 있는지에 대한 판단 문제였습니다.
          

관련글 더보기