안드로이드 기술 면접 | 안드로이드 앱 개발자 면접 후기 (신입, 경력) 222 개의 자세한 답변

당신은 주제를 찾고 있습니까 “안드로이드 기술 면접 – 안드로이드 앱 개발자 면접 후기 (신입, 경력)“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: th.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 hongdroid홍드로이드 이(가) 작성한 기사에는 조회수 4,774회 및 좋아요 82개 개의 좋아요가 있습니다.

Table of Contents

안드로이드 기술 면접 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 안드로이드 앱 개발자 면접 후기 (신입, 경력) – 안드로이드 기술 면접 주제에 대한 세부정보를 참조하세요

이번영상은 제가 안드로이드 앱 개발자로서
면접을 봤었을 때의 후기를 여러분들과 간단히
공유해보면서 제 생각들을 말해보았습니다!
오늘도 좋은하루 보내세요❤️🙋‍♂️

#개발자 #개발자면접 #동기부여

안드로이드 기술 면접 주제에 대한 자세한 내용은 여기를 참조하세요.

Android – 테크 피드 – 프로그래머스 커리어

테마는 크게 네트워크, 코틀린, 안드로이드 스튜디오, git(VCS) 의 4가지로 나누어졌습니다. 프로필 이미지. 컴쏘공. blog.naver.com. 안드로이드 앱 기술면접대비 …

+ 여기에 자세히 보기

Source: career.programmers.co.kr

Date Published: 4/26/2022

View: 6972

안드로이드 앱개발자 기술면접 준비하기

… 면접이 잡혔는데 기술 면접이 1시간이라고 한다. 지금 공부한다고 답변을 술술 말하는 똑똑이 개발자가 되진 않겠지만 이참에 안드로이드 개발 …

+ 여기에 자세히 보기

Source: velog.io

Date Published: 2/16/2021

View: 2022

신입 안드로이드 개발자로 취업하기 – 면접 – GitHub

내가 생각한 기술면접의 두 가지 유형. 자바 기초, 알고리즘, 자료구조 등에 관련된 질문; 내 이력서, 포트폴리오에서 사용한 기술들에 관련된 질문.

+ 여기에 더 보기

Source: github.com

Date Published: 10/2/2021

View: 708

안드로이드 개발자 면접 질문 모음집 (cs, android)

안드로이드 개발자 면접 질문 모음집 (cs, andro). joong~ 2021. 3. 18. 00:25. 320×100. ==== 2021.02.23 업데이트 완료 ==== 개인적으로 준비한 내용들을 공유하고 …

+ 여기에 보기

Source: class-programming.tistory.com

Date Published: 12/10/2021

View: 3273

안드로이드 기술 면접에 좋을 자료

안드로이드 기술 면접에 좋을 자료. 림쌍월 2020. 11. 19. 15:04. 반응형. ​뭐 굳이 안드로이드만 쓰는게 아닌 전반적인 개발 관련도 몇가지가 있네요 .

+ 여기를 클릭

Source: bbul-jit.tistory.com

Date Published: 2/3/2022

View: 5583

[안드로이드]면접 편-안드로이드를 시작하는 모든 이에게. (3)

오늘은 안드로이드 개발자 면접에 얘기하고자 합니다. (신입을 대상으로 한 글입니다. … 신입 개발자 전공 지식 & 기술 면접 백과사전.

+ 여기에 표시

Source: keelim.tistory.com

Date Published: 4/26/2021

View: 235

[android] 면접 질문

안드로이드를 구성하는 구성요소로 Activity , Service , Content Prover … HTTP 프로토콜에서 상태를 유지하기 위한 기술이 쿠키와세션이다.

+ 여기에 자세히 보기

Source: colinch4.github.io

Date Published: 2/27/2022

View: 5503

안드로이드 개발자 면접 후기 2탄 – Heavy Bros.

안드로이드에서 Context란 무엇인가요? 다른사람들 보다 자신있는 개발 영역이나 기술이 있다면 소개해주세요. 함수형 프로그래밍이란 무엇인지 소개 …

+ 자세한 내용은 여기를 클릭하십시오

Source: heavybros.dothome.co.kr

Date Published: 6/9/2022

View: 1563

안드로이드 앱 개발자 면접 후기 – 1차면접 (질문 & 답변 중심)

어제 국내 한 ‘대기업’ 의 안드로이드 어플리케이션 개발직무로 인턴십에 … 면접은 인성면접 없이 기술면접으로만 1:1 면접으로 2번 진행되었고, …

+ 자세한 내용은 여기를 클릭하십시오

Source: blog.naver.com

Date Published: 10/28/2022

View: 8769

안드로이드 면접 질문 1 – 컴퓨터랑 친해지기

1. 안드로이드 애플리케이션 클래스는 무엇인가요? > 안드로이드의 Application Class 는 액티비티 및 서비스와 같은 다른 모든 구성 요소(액티비티( …

+ 여기에 보기

Source: nanamare.tistory.com

Date Published: 8/27/2021

View: 6687

주제와 관련된 이미지 안드로이드 기술 면접

주제와 관련된 더 많은 사진을 참조하십시오 안드로이드 앱 개발자 면접 후기 (신입, 경력). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

안드로이드 앱 개발자 면접 후기 (신입, 경력)
안드로이드 앱 개발자 면접 후기 (신입, 경력)

주제에 대한 기사 평가 안드로이드 기술 면접

  • Author: hongdroid홍드로이드
  • Views: 조회수 4,774회
  • Likes: 좋아요 82개
  • Date Published: 2020. 7. 28.
  • Video Url link: https://www.youtube.com/watch?v=bHYDMzOU41A

Android-Study/신입 안드로이드 개발자로 취업하기 – 면접.md at master · taeiim/Android-Study

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

안드로이드 개발자 면접 질문 모음집 (cs, android)

728×90

==== 2021.02.23 업데이트 완료 ====

개인적으로 준비한 내용들을 공유하고 누군가에게 작게나마 도움이 되었으면 해서 공유하게 되었습니다.

이곳저곳에서 정리해둔 것이 많아서 다시 정리하는데 시간이 걸리고 업로드 되지 않은 리스트가 아직 많은데 계속 업뎃 중입니다.

혹시 틀린 부분이나 추가되었으면 좋겠다는 리스트가 있으면 댓글 남겨주시면 감사하겠습니다

www.notion.so/imwj/Android-Interview-3ce7ddf12ddb413a9d2213173654d52c

왕초보 스터디 & 질문방 운영중ㅇㅇㅇㅇㅇ

https://open.kakao.com/o/g5ULBlhc

언제까지 개발만 할 수 있을까?

반응형

​뭐 굳이 안드로이드만 쓰는게 아닌 전반적인 개발 관련도 몇가지가 있네요 ..

참고로 안드로이드는 쥬니어만큼도 못하는 정도라 자신이 없습니다.

라떼는 말이야 다 이클립스로만 해서 .. 알아야 했거든!

[안드로이드의 4대컴포넌트]

> 액티비티(Activity) : 사용자가 앱과 상호작용하는 단일 화면 , UI를 담당하는 컴포넌트, 안드로이드 어플리케이션은 반드시 하나 이상의 액티비티를 가지고 있어야 한다, 두 개의 액티비티를 동시에 Display할 수 없음

> 서비스(Service) : 화면이 없고 백그라운드에서 돌아가는 컴포넌트, 모든 서비스는 Service 클래스를 상속받아서 사용한다. 네트워크를 통해서 데이터를 가져올 수 있다.

> 콘텐트 제공자(Content Provider ) : 데이터를 관리하고 다른 어플리케이션 데이터를 제공해 주는 컴포넌트, 주로 DB의 데이터를 전달할 때 많이 사용하고 생명주기가 없다

> 방송 수신자(Broadcast Receiver ) : 안드로이드에서 다양한 이벤트와 정보를 받아서 반응하는 컴포넌트, UI가 존재하지 않고 디바이스에서 발생하는 일 중에서 어플리케이션이 알아야 하는 상황이 발생하면 알려준다

a. 액티비티 : 화면 관리, 사용자와 상호작용, 이벤트 처리

b. 서비스 : UI 없이 백그라운드에서 기능 처리

c. 브로드캐스트 리시버 : 안드로이드에서 글로벌 이벤트와, 그로 인한 브로드캐스트 메시지를 처리

d. 콘텐츠 프로바이더 : 서로 다른 앱 사이의 데이터 공유를 위한 인터페이스

[객체지향 언어의 뜻과 객체지향의 4대 특징]

> 작은 모듈인 객체들을 조립/생성하여 프로그램을 작성 구현한 것, 객체는 정의 된 클래스를 기반으로 생성된 실체

> 구성요소는 객체, 클래스, 메소드

> 특징 : 캡슐화/추상화/상속/다형성(오버라이딩, 오버로딩)

추상화란 복잡한 현실의 문제를 공통적인 특징을 뽑아서 그룹화 하는 것을 의미합니다. (클래스)

캡슐화란 사용 방법만을 알려주고 내부 구조는 숨겨서 데이터를 보호하는 것을 의미합니다. (추상 클래스, 인터페이스)

상속성은 부모의 기능을 자식이 물려받는 것을 의미합니다.

다형성은 하나의 메소드나 클래스가 이걸 이용하는 방법에 따라서 다양한 방법으로 동작하는 것을 의미합니다.

(인스턴스 생성 후 부모 메소드로 사용하는 경우와 자식 메소드로 사용하는 경우를 예를 듬)

[안드로이드의 테스크]

Task는 어플리케이션에서 실행되는 Activity를 관리하는 스택입니다. 선입 후출의 형태로 나중에 적제된 액티비티가 가장 먼저 사용됩니다. 최초적재된 엑티비티는 Root Activity라고 하고 마지막에 적재된 Activity는 Top Activity라고 합니다.

Flag를 이용하여 엑티비티의 흐름을 제어 할 수 있습니다.

[TDD]

Test Driven Development의 약자, 테스트 주도 개발 방법론

테스트 코드 작성을 시작으로 짧은 개발 사이클을 반복하면서 진행한다.

선 테스트 코드 작성, 후 구현

목표 : 잘 동작하는 깔끔한 코드를 생산하자. 코드의 품질을 높이고 유지보수에 이득을 취하자

[REST]

HTTP란 ?

– HyperText Transfer Protocol의 준말로 링크 기반으로 데이터를 요청하고 받겠다는 것

– 클라이언트와 서버가 요청을 하고 응답을 하기 위해 따르는 프로토콜

– HTML 문서를 주고 받을 수 있음, 뿐만 아니라 이미지, 동영상, 오디오, 텍스트 문서 등을 주고 받을 수 있음

URI와 HTTP Methond를 이용해서 객체화된 서비스에 접근하는 것

서비스에 존재하는 모든 자원(resource 미지, 포스팅, 유저 정보 등)에서 고유한 URI을 부여해서 활용하는 것

장점 : HTTP기반으로 통일하기 때문에 HTTP환경에서는 모든 플랫폼에서 사용 가능

클라이언트와 서버 구조를 명확하게 분리

보안, 로드밸런싱, 암호화 계층을 추가하여 사용 가능(성능향상, 캐싱)

URI를 보고 나타내는바가 무엇인지 쉽게 이해 가능

단점 : 표준이 아니다, HTTP Method의 한계

쓰는 이유 : 다양한 클라이언트(android, ios)들의 등장, 애플리케이션에서 사용하는 자원에 대한 통일성을 위해

*RESTful은 일반적으로 REST 아키텍처를 구현하는 웹서비스를 나타내기 위해 사용 / 웹상에 존재하는 모든 자원에 URI를 부여하여 사용하는 방법이다.

*REST API : HTTP 요청을 보낼 수 있는 환경이라면 어디에서든 이용 가능 한 것

[안드로이드의 메모리 구조]

안드로이드의 메모리구조를 보면 램, 내장메모리, 외장메모리로 구분됩니다.

렘 : 프로그램이 실행될때 상주되는 공간입니다. 평상시에 하드에 저장되어있다가 런타임시에 차지되는 공간을 말합니다.

내장메모리 : 간단하게 하드디스크라고 생각해도 됩니다.

외장메모리 : 메모리가 더 필요할때 추가 할 수 있는 메모리입니다.

[SDK]

SDK, Software Development Kit 소프트웨어 개발 도구 모음

SDK 안에는 개발에 도움이 될 개발 도구 프로그램, 디버깅 프로그램, 문서, API 등이 있다.

EX) Eclipse를 시작하기 전에 JDK를 설치했었다. JDK도 또한 Java용 SDK이다.

[API]

어떠한 응용프로그램에서 데이터를 주고 받기 위한 방법을 의미합니다. 어떤 특정 사이트에서 특정 데이터를 공유할 경우 어떠한 방식으로 정보를 요청해야 하는지, 그리고 어떠한 데이터를 제공 받을 수 있을지에 대한 규격들을 API라고 하는것

EX) 기상청 API

구글에 접속하여 기상청 API라고 검색하면 아래의 그림과 같이 첫번째 페이지에 바로 기상청 오픈 API 제공 사이트가 화면에 노출됩니다. 기상청 API 말 그대로, 기상청에서 수집하고 있는 정보를 사용자에게 쉽게 제공하기 위한 목적으로 만들어진 사이트입니다.

[안드로이드에서는 enum의 사용을 자제시켰는데 그 이유와 장점]

> ENUM의 각 값은 객체이며 각 선언은 객체를 참조하기 위해 런타임 메모리를 사용합니다. 따라서 ENUM 값은 Integer 또는 String 상수보다 많은 메모리를 사용합니다. 단일 ENUM을 추가하면 최종 DEX 파일의 크기 가 증가합니다. 또한 런타임 오버 헤드 문제가 발생하고 응용 프로그램에 더 많은 공간이 필요합니다.

Android에서 ENUM을 과도하게 사용하면 DEX 크기가 증가하고 런타임 메모리 할당 크기가 늘어납니다.

응용 프로그램이 더 많은 ENUM을 사용하는 경우 ENUM 대신 정수 또는 문자열 상수를 사용하는 것이 좋습니다.

[dp와 sp 차이 (px등 도 있음)]

크기 단위의 차이

dp : 물리적인 픽셀의 밀도로부터 독립적 크기

sp : 독립적 크기이지만 텍스트에 적용하기 위해 만들어진 단위

쉽게 위젯의 크기는 dp 텍스트는 sp

[대용량 bitmap을 불러올 경우에 메모리 문제가 있기 쉬운데 이럴 때는 어떻게 처리?]

inJustDecodeBounds 설정하기 – Scaled Down된 버전의 이미지 메모리에 로딩하기 – 이미지 전처리 메소드 생성하기 – ImageView에 출력하기

[ArrayList vs linkedlist]

ArrayList – 데이터 검색에 유리하며, 추가/삭제 시에는 성능을 고려해야함

LinkedList – ArrayList 에 비해 데이터의 추가/삭제에 유리하지만 검색 시에는 성능을 고려해야함

LinkedList는 ArrayList와 비교하여 여러가지 장점을 지니고 있습니다. LinkedList는 몇 개의 참조자만 바꿈으로써 새로운 자료의 삽입이나 기존 자료의 삭제를 위치에 관계없이 빠른 시간안에 수행 할 수 있습니다. ArrayList 같은 경우는 O(N)만큼의 연산 속도가 걸리기 때문에 자료의 최대 개수에 영향을 받지만, LinkedList는 그런 제약을 받지 않습니다. 또한 LinkedList는 무한 개수의 자료를 삽입할 수 있는 반면 (메모리의 용량이 무한정하다고 가정할 때), ArrayList는 크기가 한정되어 있기 때문에 결국 포화 상태에 이르게 됩니다. ArrayList의 크기를 재조정하는 연산을 수행하여 크기를 늘릴 수도 있지만, 상당한 연산량이 요구됩니다.

> ArrayList와 비교한 LinkedList의 장/단점

장점 단점 자료의 삽입과 삭제가 용이하다. 포인터의 사용으로 인해 저장 공간의 낭비가 있다. 리스트 내에서 자료의 이동이 필요하지 않다. 알고리즘이 복잡하다. 사용 후 기억 장소의 재사용이 가능하다. 특정 자료의 탐색 시간이 많이 소요된다. 연속적인 기억 장소의 할당이 필요하지 않다.

[프로세스와 스레드의 차이]

프로세스는 운영체제로 부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.

프로세스는 자신만의 고유 공간과 자원을 할당 받아 사용하지만 그에 반해 스레드는 다른 스레드와 공간과 자원을 공유하여 사용하는 차이가 있습니다.

[listview 와 recyclerview의 차이점]

둘 다 리스트를 나타내는 뷰라는 점은 동일하다. 데이터가 저장되어 있는 아이템들을 화면에서 리스트로 출력해주며 스크롤 기능을 통해 모든 데이터들을 보여준다. RecyclerVIew는 뷰를 재활용한다는 특징을 가지고 있다. ListView는 스크롤을 내려서 새로운 아이템이 화면에 출력될 때마다 새 객체를 생성해야하고 이로 인해 과부하가 온다는 단점이 있어 RecyclerView가 이 단점을 보완하고자 만들어진 뷰이다. 새로운 아이템이 화면에 등장하면 이전에 사용했던 ( 화면 밖으로 사라진) 객체를 재활용하는 방식으로 이 문제를 해결

[멀티스레드]

하나의 프로그램에 동시에 여러개의 일을 수행할 수 있도록 해주는 것

하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것

사용 이유

>메모리 공간과 시스템 자원 소모를 줄이기 위해

[onpause/onstop 함수의 차이점]

onPause()는 Activity위에 다른 Activity가 올라오거나 하여 focus를 잃었을 때

onStop()은 Activity가 완전히 화면을 벗어날 때 불린다. 예를 들어 홈키를 눌러 홈화면으로 이동하거나 전화가 와서 화면을 완전히 덮는 경우

[Handler, Thread, Looper]

>백그라운드 처리라는 공통점

Handler란 안드로이드에서 사용할 수 있는 스레드 통신 방법, 핸들러(Handler)는 스레드의 루퍼(Looper)와 연결된 메시지 큐로 메시지를 보내고 처리할 수 있게 만들어줍니다. 메인 스레드의 메시지 처리 흐름에서, 메시지 전달과 처리를 위해 개발자가 접근할 수 있는 창구 역할을 수행한다고 할 수 있죠. 스레드와 연관된 핸들러를 얻기 위해서는, 간단하게 new 키워드를 사용하여 Handler 클래스 인스턴스를 생성하기만 하면 됩니다. 그러면 새로운 Handler 인스턴스는 자동으로 해당 스레드와 메시지 큐에 연결(bound)되고, 그 시점부터 핸들러를 통해 메시지를 보내고 처리할 수 있게 됩니다.

Thread란 프로세스 내에서 “순차적으로 실행되는 실행 흐름”의 최소 단위를 말합니다. 프로그램의 main()함수로부터 시작되는 최초 실행 흐름 또한 하나의 스레드이며, 이를 메인 스레드라고 부릅니다.

Looper는 MessageQueue가 비어있는 동안은 아무 행동도 안하고 메시지가 들어오면 해당 메시지를 꺼내 적잘한 Handler로 전달합니다. 계속 반복적으로 수행하는 동작 때문에 Looper라는 이름이 붙여졌다고 합니다.

[Android APK 구조]

안드로이드 어플리케이션 패키지의 확장자.

lib, res, manifest 등이 존재한다

[

백키로 앱을 종료했을 때 프로세스는 종료되나요 ? 되지 않나요?

종료되면 왜 종료되는지? 종료되지 않으면 왜 종료되지 않는지?

]

종료된다.

[일반 뷰와 SurfaceView의 차이]

SurfaceView는 View를 상속받는 클래스이고 애니메이션이나 동영상같이 연산처리가 많이 필요한 뷰를 위해 사용된다.

[RxJava 간단한 개념]

RxJava란 Reactive Programming 을 하기 위한 라이브러리인 Rx(Reactive Extensions)의 JVM 판 입니다.

RxAndroid

기존 안드로이드 개발에서 큰 문제였던 복잡한 스레드의 사용을 해결하기 위해 사용하는 것

수많은 핸들러와 콜백 떄문에 발생하는 디버깅, 이벤트 중복, 2개의 비동기 처리 후 결과를 하나로 합성하는 작업 등등등… 이 문제점이였음. 하지만 RxJava를 사용하면 간단한 코드로 복잡한 병행 프로그래밍이 가능하며 비동기 구조에서 에러를 다루기가 쉽다.

[Runtime Permission]

마시멜로 이상 단말에서는 앱을 사용하기 전, 해당앱에서 사용 하는 기능들에 대한 사용자의 승인을 받아야 한다. 사용하는 기능이 여러가지가 있으나 그 중 한가지 이상의 사용자 승인을 받지 않거나 사용자가 승인을 거부 했을 경우 해당 기능을 사용하려 할 경우 오류 발생으로 인한 강제 종료 현상이 발생할 수도 있다. 물론, 승인 거부를 한 경우에 해당 기능을 앱 내부에서 사용하지 못하도록 막을 경우 오류로 인한 강제 종료 현상이 발생하지 않는다.

위험한 권한그룹에는 주소록 접근, 카메라 접근, 외부 저장소 접근 등이 있다.

[백그라운드 작업을 할 때, 안드로이드에서 사용할 수 있는 방법]

Handler, AsyncTask

[Activity Class를 이용해서 백그라운드 스레드를 돌릴 수 있는 방법]

runOnUIThread

[오버로딩/오버라이딩 차이점]

오버로딩은 같은 메소드 이름으로 둘 이상의 메소드를 만들어 다른 타입의 파라미터를 가지도록 하여 기능을 적재하는 기법.

예를 들어 우리가 쉽게 쓰는 System.out.println을 생각해보자. 우리는 파라미터로 String, int 등 다른 타입의 변수를 넣었을 떄도 모두 출력할 수 있다. 굳이 System.out.printlnString, System.out.printInt 이렇게 된 메소드를 사용해야하면 귀찮을 것이다. 따라서 System.out.println 이라는 하나의 메소드로 그 안에는 다양한 기능이 오버로딩 되어있고, 우리는 편하게 하나의 메소드 이름으로 쓸 수 있는 것이다.

오버라이딩은 상위 클래스를 상속받아 하위 클래스에서도 그 메서드를 재정의하여 쓸 수 있는 기법이다. 예를 들어 object에서 toString을 오버라이딩하여 사용하는 것!

쉽게 말해 오버로딩은 메소드 중복 선언, 오버라이딩은 상위 클래스에서 하위 클래스로 상속된 메소드의 재정의라고 볼 수 있다.

[github 사용하시나요 ? 사용하면 어떤 프로젝트를 진행했나요]

Yes

[액티비티를 실행했을 때 호출되는 생명주기]

온크리에잇 온스타트 온리쥼

onCreate(최초로 생성될 때1번 호출) -> onStart(뷰가 화면에 보이기 직전) -> onResume(사용자 상호작용을 하기 직전, 혹은 화면이 다시 포커스를 얻었을 때) -> Running -> onPause(일부 타 UI에 의해 화면이 가려져 해당 액티비티가 포커스를 잃었을 때) -> onStop(화면이 완전히 가려졌을 때) -> onDestory(액티비티의 종료 직전)

[ FrameLayout, LinearLayout, RelativeLayout, TableLayout, GridLayout, ConstraintLayout ]

FrameLayout : 무조건 좌측 상단에서 시작해서 레이아웃을 겹쳐서 보이게 하는 레이아웃

LinearLayout : 위젯의 배치의 자유도는 떨어지는 대신의 모바일 특유의 깔끔한 배치를 사용가능(orientation)

RelativeLayout : 특정 위젯과 위젯의 관계를 정하고 그 차이를 정해서 레이아웃을 배치한다.

TableLayout : Table을 만드는 레이아웃, 행만 자유도가 있다. 테이블 열을 넣어준 후 위젯을 넣어준다. (layout_column이용)

GridLayout : TableLayout 이랑 거의 흡사하다. 다르점은 행과 열 모두 자유도가 높다.

ConstraintLayout : RelativeLayout과 거의 흡사. 더 직관적이고 무조건 연결해야함.

가로축과 세로축을 한개씩은 연결해줘야만 오류가 안 난다.

[모바일 앱 개발시 데이터를 현재 Activity에서 이전 Activity로 값을 어떻게 보내야하는가?]

onActivityResult함수 생성해서 put.Extra로 보냅니다.

스트링을 파라미터로 받아서, 그것을 역순으로 리턴하는 함수를 코딩해보세요.

[만약 앱을 사용하는 도중에 카카오톡 메시지가 온다면 사용하던 앱의 TopActivity의 생명주기는 어떤 상태가 되나요?]

– onPause 상태가 됩니다.

[onRestart는 언제 호출이 되나요?]

Activity가 중지 상태에서 다시 화면에 표시되기 직전에 호출됩니다.

onRestart->onStart->onResume-> ActivityRunning..

[ 리스트뷰에서 사용되는 뷰홀더(ViewHolder Pattern) 패턴에 대해서 아시는 만큼 설명해주세요. ]

리스트뷰에서 리스트의 개수가 많은 상황에서 findViewById를 통한 XML 리소스 접근이 빈번할 경우 성능저하가 발생하기 때문에 View 객체를 ViewHolder에 홀드시켜 성능을 개선하기 위한 패턴입니다.

[인텐트(Intent)에 대해서 설명해주세요. ]

– 인텐트는 안드로이드 시스템에서 커뮤니케이션을 담당하는 역할로

컴포넌트간(Activity, ContentProvider, BroadcastReceiver, Service) 의

호출과 메시지 전달에 이용한다. 쉽게 말해서 값을 주고 받는

전달자 정도로 생각 하시면 됩니다.

[프로젝트 진행시 활용한 오픈소스나 라이브러리는 어떤 것들이 있나요?]

NEWS OPEN API

[REST API]

>REST 기반으로 서비스 API를 구현한 것

>최근 OpenAPI(누구나 사용할 수 있도록 공개된 API: 구글 맵, 공공 데이터 등), 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처) 등을 제공하는 업체 대부분은 REST API를 제공한다.

[OpenAPI]

OpenAPI는 주로 지도 앱, 로그인, 연락처 갱신 등 여러 유형으로 활용할 수 있기에 OpenAPI를 사용할 수 있냐 없냐에 다라서 개발을 진행하는 안드로이드 앱의 퀄리티가 달라진다.

[Call by Value와 Call by Reference란 무엇인지에 대해 설명해주시고 자바는 Call by Value인지 Call by Reference인지 설명해주세요.]

– 기본형을 넘겨줄 경우에는 Call by Value가 발생하며 배열이나 클래스객체 경우에는 Call by Reference가 발생합니다.

[Context의 의미]

안드로이드 시스템 상, 어플리케이션과 관련된 정보를 관리하는 주체는 ActivityManagerService라는 독립된 또 다른 어플리케이션인데, 이 어플리케이션은 특정 앱에 대한 정보를 key:value 쌍으로 구성한다. 이 때 ActivityManagerService에서 내 앱과 관련된 value값을 찾기 위한 key를 알아야 하는데, 이 값이 Context이다. 즉, 내가 어떤 어플리케이션을 나타내고 있는지 알려주는 ID 역할을 한다고 보면 된다.

[ListView와 RecyclerView의 차이점]

ListView의 경우 각각의 item이 스크롤을 통해 inflate될 때마다 view의 create가 발생, findViewById가 함께 호추되어, 메모리 및 성능에 악영향을 끼칠 수 있다. 반면 RecyclerView의 경우 viewHolder 패턴을 강제해 itemview가 root로 단 1번만 생성되어 view의 재사용을 가능하게 해주며, item의 Animator를 이용할 수 있도록 해준다.

[쓰레드간 통신]

a. Java IO에서 제공하는 파이프를 통한 방법 : 파이프는 정확히 말하면 ‘프로세스’간 통신 방법에 해당

b. 쓰레드는 프로세스 내부에서 data와 heap 메모리 영역을 공유하므로, 해당 영역에 할당된 변수를 활용해 통신.

c. Synchronized를 활용한 시그널링 : 동기화 문제를 해결하기 위한 lock(semaphore)과 같은 느낌.

d. BlockingQueue를 이용.

[Looper / Handler]

a. 멀티 쓰레드 환경에서, 쓰레드간 통신은 송신자가 송신처리를 하는 그 순간 처리될 수가 없다. 복수의 쓰레드로부터 동시다발적으로 생성되는 메시지의 동기화 문제가 발생하기 때문이다. 따라서 안드로이드에서는 송신자 쓰레드로부터 sendMessage()가 발생하면, 해당 메시지를 메시지 큐(Message Queue)에 넣고 처리한다.

b. Looper : 이 때 무한 루프를 돌면서 큐의 상태와, 현재 시스템 리소스의 점유 상태를 지속적으로 체크하고 조건이 맞을 때 마다 큐에서 pop하여 처리해주는 역할을 하는 주체가 필요한데, 이를 Looper라고 부른다.

c. handler : 쓰레드로부터 송신받은 Message, 혹은 Runnable 객체를 수신하고 관리하는 역할을 한다.

​[Manifest 파일]

a. manifest 태그 : 앱 패키지명, 버전 등

b. application : 앱 이름, 앱 아이콘 등

c. activity : 액티비티 명, 액티비티 이름, 하위 태그로는 intent-filter 태그로 액티비티 인텐트 작업에 대한 action과 category를 사전 정의 -> 묵시적 인텐트 호출 및 서비스에서 활용.

d. permission : 앱에서 필요로 하는 권한 정의

​[Fragment 생명 주기]

onAttach -> onCreate -> onCreateView(LayoutInflater가 xml파일을 찾아서 view들을 java.R파일에 주소로 맵핑시키고, 바인딩시켜줌) -> onPause -> onStop -> onDestoryView

[안드로이드 태스크(Task)란?]

액티비티의 묶음 이며 액티비티를 Stack형태로 관리

– 최초의 액티비티 RootActivity

– 마지막 액티비티 TopActivity(화면에 보여지는 액티비티)

– 서로다른 어플리케이션의 액티비티가 혼합될 수 있어 어플리케이션의 경계가 없음

– Flag를 사용하여 Task내의 액티비티 흐름을 제어

[플래그 (Flag)]

액티비티 중복과 같은 흐름을 제어 하기 위해서 사용

– Manifest 에서 사용

android:launchMode = [“standard” | “singleTop” | “singleTask” | “singleInstance”]

– 소스코드(Intent addflag)에서 사용

FLAG_ACTIVITY_SINGLE_TOP FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_MULTIPLE_TASK

– FLAG_ACTIVITY_NEW_TASK

새로운 태스크를 생성하여 그 태스크안의 액티비티를 추가

But 동일한 어피니티가 있다면 새로 생성하지 않고 존재하는 태스크안에 추가

– FLAG_ACTIVITY_MULTIPLE_TASK

FLAG_ACTIVITY_NEW_TASK와 함께 사용해야하며 무조건 새로운 TASK를 생성하며 그 안에 root 액티비티가 활성화

– FLAG_ACTIVITY_SINGLE_TOP & launchMode = “singleTop”

하나의 인스턴스만 사용 한다는 뜻 , 활성화될 task의 top에 같은 액티비티가 존재할경우 액티비를 탑으로 올리지 않고 기존의 탑을 재사용

1. 액티비티 생명주기에 대해 말씀해보시겠어요?

onCreate() -> onStart() -> onResume()

– (액티비티 미실행 상태) – 앱아이콘 클릭 – 액티비티 최초 실행

– (최근 앱 목록 표시 중, 액티비티는 미실행 상태) – 액티비티 선택 – 액티비티 실행

onRestart() -> onStart() -> onResume()

– (액티비티 foreground 상태에서 화면 잠김 상태) – 화면 잠금 해제(홈이나 전원 버튼, 필요하다면 비밀번호 입력

등) – 액티비티 실행

– (액티비티를 실행한 적이 있으며 숨겨져 있는 상태) – 액티비티 실행(앱 아이콘 클릭 등) – 액티비티 실행

onPause()만 호출되는 경우

– (액티비티 foreground 상태) – 다른 액티비티 실행

onPause() -> onStop()

(액티비티 foreground 상태) – 전원 버튼 누르기 – 화면 잠금

(액티비티 foreground 상태) – 홈 버튼 누르기 – 런쳐 홈으로 이동

onPause() -> onStop() -> onDestroy()

(액티비티 foreground 상태) – 뒤로가기 버튼 눌러 액티비티 나가기

onDestroy()만 호출되는 경우

(최근 앱 목록 표시 중) – 액티비티 제거하기(밀어내기나 ‘X’ 버튼)

액티비티를 실행한 적이 있다는 말의 의미는, 액티비티 컴포넌트가 소멸되지 않고 메모리에 상주하고 있어

재사용될 수 있다는 의미다.

하지만 많은 앱을 실행시켜 메모리에 과부하 위협이 있으면 OS 자체에서 오래된 앱 순서대로 강제 종료시킨다.

메소드 설명 다음 메소드 onCreate() 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨. onStart() onRestart() 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출됨. onStart() onStart() 액티비티가 사용자에게 보여지기 바로 직전에 호출됨. onResume() 또는 onStop() onResume() 액티비티가 사용자와 상호작용하기 바로 전에 호출됨. onPause() onPause() 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드. onResume() 또는 onStop() onStop() 액티비티가 더이상 사용자에게 보여지지 않을 때 호출됨. 메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수도 있음. onRestart() 또는 onDestroy() onDestroy() 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨. 없음

[프래그먼트와 액티비티의 차이점]

액티비티는 어플리케이션의 컴포넌트로 앱이 사용자에게 보이도록 구성되는 화면이고

프래그먼트는 동작 또는 액티비티 내에서 사용자 인터페이스의 일부로 분할된 화면들을 독립적으로 구성하거나 분할된 화면들의 상태를 관리하기 위해 사용한다. 프래그먼트는 항상 액티비티 위에 올라가있어야 한다.

프래그먼트는 동작 또는 액티비티 내에서 사용자 인터페이스의 일부를 나타낸다. 여러 개의 프래그먼트를 하나의 액티비티에 조합하여 창이 여러개인 UI를 구축할 수 있으며, 하나의 프래그먼트를 여러 액티비티에서 재사용할 수 있다. 자체 수명 주기를 가지고, 자체 입력 이벤트를 받으며, 쉽게 말하자면 액티비티 실행 중에 추가 및 제거가 가능한 액티비티의 모듈식 섹션이라고 생각하면된다.

하나의 액티비티에서 여러가지의 화면을 보여주고 싶을 때 사용되는게 프레그먼트로 태블릿화면 구현하거나 여러 프래그먼트를 혼합하여 페이지 하나를 구성, 액티비티를 분할하여 화면의 일정부분은 프래그먼트로 구현하는 등 재 사용성이 높다.

​[어댑터와 뷰홀더]

Adapter(어댑터) : 데이터의 원본을 받아서 관리하고, 뷰가 출력할 수 있는 형태로 데이터를 가공한 뒤 뷰에 제공하는 중간 객체

ViewHolder(뷰홀더) : 각 뷰들을 보관하는 홀더 객체, convertView를 처음 생성할 때, 미리 뷰를 전개하여 View의 태그에 참조객체를 저장

[스레드에 대해 설명해보시겠어요?(AsyncTask나 AsyncLoader에 대해 설명해보시겠어요?)]

스레드란?

하나의 프로세스(프로그램 실행 단위)에서 동작하는 여러 실행 흐름으로 하나의 프로세스에선 기본 한개의 스레드가 존재하고 그걸 메인스레드라 칭한다.

안드로이드의 메인 스레드는 ui 구성에만 사용되기 때문에 네트워킹(api호출), 이미지 다운로드 상황에선 메인스레드를 이용하면 anr이 발생되게 된다. 그러므로 별도의 쓰레드를 실행시켜서 사용해야한다.

AsyncTask는 그러한 백그라운드 스레드를 좀 더 쉽게 구현하기 위한 클래스로 AsyncTask를 상속받아

doinBackground()함수를 통해 execute()로 호출하여 스레드를 생성할 수 있다.

[퍼미션에 대해 설명해보세요]

안드로이드 6.0 마시멜로우 버전 이후부터 생긴 정책으로 사용자의 개인정보에 해당 될 수 있는

gps, 카메라, 핸드폰 내,외부 저장소 접근, 주소록 등에 앱이 접근하기 위해선 사용자로부터 권한을 획득 해야합니다.

1. contextCompat.checkSelfPermission() 함수를 통해 과거에 권한획득을 했었는지의 여부를 체크한 뒤

2. shouldShowRequestPermissionRationale() )를 통해 사용자로부터 권한 여부에 대한 ui를 제공하고 그로부터 획득하거나 거절된

정보를

3. requestPermissions()에서 처리합니다.

[서버와 통신할 때 POST나 GET 이라는 말을 들어보셨나요? 혹시 설명하실 수 있나요? (HTTP 통신에

대해 설명해보세요)]

get과 post는 http 프로토콜을 이용해서 서버에 전달할 때 사용되는 방식으로

get은 정보들을 요청 url에 붙여서 전송하는 방식,

post는 정보들을 요청 url의 body에 붙여서 전송하는 방식으로

post방식은 보통 로그인등과 같이 보안이 요구되는 상황에 사용된다.

get과 post가 url body에 정보를 입력하거나 안하거나 차이이기도 하지만

처음 생성목적은 get은 서버로부터 db정보를 select 처럼 가져오기만 하는 방식에 추천되는 방식이고,

post는 서버로부터 db 정보들을 변경하거나 삭제, 삽입 insert, delete, update를 하기 위해 추천되는 방식이다.

서로의 역할에 충실하면 좀 더 나은 퍼포먼스를 가질 수 있다.

[사용해본 라이브러리가 있다면 이야기하고 대략적으로 설명해보세요]

– Retrofit 2

REST API와의 인터페이스를 위한 자신만의 Type-Safe HTTP 라이브러리를 개발하는것은 정말 고통스러울 수 있습니다. Connection 만들기, 캐싱, 실패한 요청 다시 시도, 스레딩, Response 파싱, 에러 핸들링등과 같은 많은 기능을 처리해야합니다. 반면, Retrofit은 매우 좋은 설계가 되어있고 문서화, 테스트가 되어있어 귀중한 시간과 고통을 줄여주는 검증 된 라이브러리입니다.

출처: https://yoo-hyeok.tistory.com/79 [유혁의 엉터리 개발]

retrofit은 앱과 서버 간의 http 접근을 위해 사용되는 라이브러리로 안드로이드에선 외부 db에 접근이 불허되어 있어 retrofit을 사용해서 서버를 통해 db에 접근합니다.

retrofit을 활용하여 비동기, 동기로 서버에 접근하기 용이하며, retrofit의 enqueue함수를 통해 비동기처리가 편리하게 가능합니다. 또한 request, response방식은 json구조로 진행되며 retrofit에서 제공되는 gson을 활용하여 dto형태로 json정보들을 처리할 수 있습니다.

-Glide

안드로이드에서 url 이미지를 띄워주기 위해선 따로 url 이미지를 비트맵으로 변환해주는 과정이 필요하다

하지만 그 비트맵으로 변환해주는 과정도 백그라운드 스레드를 사용해야하며 만약 url주소가 변경되어 이미지의 위치를 알 수 없을 때는 에러를 발생시키기도 한다

이러한 복잡한 상황을 해결하기 위한 라이브러리로 자체 함수를 통해 백그라운드 실행해서 비트맵으로 변환해주고 메모리 초과를 방지해준다.

[SharedPreference에 대해 설명해보세요]

개발을 진행하다 보면, 앱의 데이터들을 저장하여 관리해야 할 상황에 직면하게 되는데요. 데이터의 양이 많거나 중요한 데이터라면 서버나 DB, 파일의 형태로 저장을 하면 되겠지만, 간단한 설정 값이나 문자열 같은 데이터들은 DB에 저장하기에는 부담스럽고 애매한 경우가 있습니다. 이런 경우 안드로이드에서 기본적으로 제공되는 SharedPreferences를 사용하여 데이터를 관리한다면 좀 더 편리하게 사용이 가능합니다.

SharedPreferences는 데이터를 파일로 저장을 하는데요, 파일이 앱 폴더 내에 저장되므로 앱을 삭제하시면 당연히 데이터도 삭제됩니다.

앱에 저장되는 것으로 앱을 삭제시엔 저장된 내용이 삭제되고 또한 보안에도 매우 취악하기 때문에 정말 간단한 정보만 담고 있는 게 좋습니다

저장 위치 :

data/data/(package_name)/shared_prefs/SharedPreference

[출처] Android 기술 면접 대비 FAQ 정리|작성자 디어

반응형

[안드로이드]면접 편-안드로이드를 시작하는 모든 이에게. (3)

반응형

이번 편을 마지막으로 회고글을 마무리하려고 합니다.

오늘은 안드로이드 개발자 면접에 얘기하고자 합니다. (신입을 대상으로 한 글입니다. 경력분들은 안녕~) 경험적인 부분이라 정석이 아닌 점을 다시 한번 말씀드립니다.

면접은 한마디로 암묵지를 명시지로 바꾸는 행위입니다. 이게 무슨 말이냐.

어느 정고 개발도 해보고, 학교 전공 공부도 해본 컴퓨터 공학과 학생 Http Code를 모를까요? 그건 아닐 겁니다. 400이 클라이언트 에러이고 500이 서버 에러인 건, 알겠죠. 하지만 면접에서는 왜 대답을 못할까요?

인터넷에 보니 여러 글들이 있더라구요

훈련이 안되어 있다.

공부가 안되어 있다.

자기 언어로 생각을 안 해봤다.

직접 안해봤다.

아마 맞는 말이겠죠. 하지만 저는 공감하지는 못했습니다. (저는 나름 공부도 했고, 개발도 했다고 생각을 했거든요)

그래서 제가 고민 끝에 생각한 결론은

면접 문제는 생각보다 본질적인 걸 물어본다는 것입니다.

* 다시 한번 말씀드리지만, 저의 생각들입니다.

아까의 문제로 돌아가서 Http 상태 코드에 대해서 설명을 해달라고 하면, 왜 대답을 못할까요?

그 지식을 몰라서?

그게 아닙니다. (예를 들면, + 가 왜 덧셈인가? 를 물어보는 거하고 같은 이치라고 생각합니다.)

처음 말하는 입장에서는 그냥 사용하던 것인데, 그것 자체가 뭐냐라고 물으니 당연히 당황하죠;;;;

말 그대로 암묵지 (머릿속에는 개념이 존재하나 말이나 문자로 표현하기 힘든) 지식 상태가 많은 것입니다.

면접에 과정에서는 이를 명시지로 바꿀 필요가 있습니다. (면접을 통과해야 하니까요?)

저도 준비를 하고 면접을 보면서 여러 방법을 준비를 했지만, 이 방법이 3단계가 제일 효과적이라고 생각합니다.

1. 일단 지식을 늘리자.

암묵지에서 명시지로 바꾸는 과정은 중요하지만, 그것보다 먼저 선행되어야 할 것은 일단 지식이 있어야 하는 것입니다. Github 에는 이런 지식들을 정리해놓은 레포들이 많으니 참고하세요

ex)

우아한 테크톡

2. 늘린 지식을 명시지로 바꾸는 과정

공부를 하면서 제일 힘든 건, 생각보다 CS 범위는 엄~청 넓다는 것이다. 기본적으로 (자료구조, 알고리즘, 네트워크, 데이터베이스, 운영체제)부터 분야마다(웹, 인프라, 모바일, 프론트, 백엔드, AI, 블록체인, 데이터~~) 정말 많은 스펙트럼이 있다.

본인은 안드로이드 개발자를 하고 싶어서 `기본적 + 안드로이드` 구조로 준비를 하였습니다.

https://github.com/jwasham/coding-interview-university

어떻게 보면, 기술면접을 준비하는 방법을 제일 현실적으로 보여주는 레포인 것 같습니다.

이 레포를 참고했을 때, 드는 생각은 절대 일반적인 방법으로 (외우듯이) 이런 지식을 알고 있는 것은 불가능하다.입니다. 구조적으로 외우고, 반복이 필요한 작업입니다. (저는 이를 위해서 프로젝트 겸, 플래시 카드 앱을 만들어서 외우곤 했습니다.)

여기 레포에서 제시하는 방법도 플래시 카드입니다. 플래시 카드를 사용하게 되면, 자신만의 언어로 설명할 수 있고 반복적으로 사용도 가능합니다.

직접 만들어도 좋고, 있는 것들을 사용하셔도 좋습니다. 명시지 단계로 만들 수 만 있다면.

3. 말을 잘해야 한다. (제일 중요한 단계)

우리는 말을 잘해야 합니다. 이게 무슨 말이냐. 공대생들은 특히나, 발표하거나 말을 하는 기회가 타과 학생과 비교했을 때, 적습니다. 저 또한 그랬고요, 그래서인지 면접 단계에서 자기가 했던 프로젝트를 설명할 때, 생각보다 제대로 설명하지 못하는 경우가 있습니다.

면접 상황에서 혹시 “~~ 이런 프로젝트를 했다고 쓰여있는데, 설명 부탁드려도 될까요?” 이렇게 물어본다면, 무슨 기술을 사용했고 이런 프로젝트입니다. 와 같이 기술적으로만 접근한다면 생각보다 아무리 대단한 기술이라도 생각보다 공감을 못할 수 있습니다.

면접관은 프론트 엔드 개발자인데, 최신 백엔드 프레임워크를 사용했다. 하면, 아 그렇구나;;; 로 받아들일 수 있습니다.

그래서 이것이 무슨 프로젝트고 무슨 문제를 해결하려고 했으며 이런 기술 이런 기술이 있었는데 왜 이 기술을 선택했는지 등, 프로젝트 메타 정보를 초기에 말해 주 신는 게 훨씬 공감대가 가지기 쉽습니다. (무작정 기술은 말고요)

취향에 따라서 한 번에 말씀을 해주셔도 되고 면접관님과 소통하면서 말씀을 하셔도 됩니다.

단, 거짓말은 하지 마세요. 생각보다 금방 들킵니다.

결론.

일단 지식이 있어야 한다.

암묵지 -> 명시지로 바꾸는 과정이 필요하다.

말을 잘해야 한다.

최근 글들은 넋두리를 많이 하는 글인 것 같네요.

가끔 들려 수정하면서 주시는 쪽지들, 메일들 답변을 달도록 하겠습니다.

마지막으로 취업을 준비하면서, 면접을 준비하면서 그리고 취업 후 들었던 생각은

“나는 취업 전 취업 후 바뀐 것이 없는데, 왜 그때는 떨어지고 지금은 붙었는가입니다. ”

결론은 사회 구조적 문제, 운이라고 생각합니다. 결코 나의 잘못은 아니고 그저 뽑는 인원이 없어서 내가 준비한 부분에서 문제가 나오지 않아서입니다. 다른 이유가 없습니다. (이런 마음가짐을 가지니 그냥 부담이 없더라고요)

면접에서 붙어야 선배고 팀장님이고 그러지만, 면접에서 떨어지면 그냥 아저씨, 아줌마 들입니다.

너무 긴장하지 마시고 준비한 만큼 말씀하시면 될 것 같아요.

반응형

안드로이드 개발자 면접 후기 2탄 – Heavy Bros.

Photo by Headway on Unsplash

📅 면접을 하기까지

사실 이전까지는 정말로 이직을 하려고 계획하기 보다는 연습삼아 준비했다면

이번에는 무슨일이 있어도 결판을 짓겠다는 마음으로 지원하였습니다.

잡코리아, 사람인, 원티드에 이력서 등록 후 회사를 물색하였더니…

헤드헌터로 부터 무수히 많은 포지션제안의 메일이…!!

최근 이력서일 수록 노출이 잘 되기 때문에

이력서를 매일매일 제목만 수정했는데 이 부분의 영향도 컸던 것 같습니다.

어떻게든 회사를 옮길 생각이었기 때문에 회사의 조건을 구체적으로 정했습니다. 옮길 회사의 조건은 아래와 같았습니다.

1. 📏 거리 : 집에서 1시간 내

2. 🤖 직군 : 안드로이드 개발

3. 📜 고용형태 : 정규직

4. 👥 회사규모 : 사원수 30명 이상

5. 🛎️ 업무환경 : 출장/파견만 없으면 OK

거리를 제외한 나머지 조건은 나름 관대하게 잡았다고 생각은 하지만

애초에 거리때문에 지원할 회사가 그리 많지도 않았습니다.😕

결론적으로 봤을 땐 가지도 않을 많은 회사에 지원하는건 의미 없었고,

정말로 가고 싶은 회사 몇개만 추려서 지원하는게 나은 것 같습니다.

(쓰고 보니 당연한 것 같네요…🥴)

🏦 A회사 : 금융 벤처

👨‍💼 면접 순서

서류 지원 -> 채용과제 -> 1차 실무면접 -> 2차 인성면접 -> 최종 결과 통보

잡코리아로 지원하였고 열흘쯤 지나서 연락을 받았습니다.

1차 실무면접 일정을 잡고 채용과제로 간단한 앱 개발 과제를 받았습니다.

📝 채용과제

요구사항은 아래와 같았습니다.

주어진 API 로 받아온 데이터를 무한 스크롤로 보여주는 앱을 개발한다. 리스트 각각의 아이템에는 각각 받아온 데이터로부터 텍스트2줄,

이미지 URL로부터 다운받은 이미지1개를 보여주어야 한다.

크게 어려운 과제도 아니었고 기한은 면접 전까지로 4~5일 정도 시간이 있었으나…

동시에 진행중인 구직활동과 회사 일정이 겹쳐서 굉장히 시간이 모자랐습니다.

결국 면접 전날 저녁에 시작해서 4~5시간 정도만에 끝냈습니다.

급하게 개발하여 완성도가 떨어졌지만

짧은 시간 중에 개발한 것을 감안해주셨습니다.

❓ 실무 면접

실무 면접은 코로나 사태를 감안하여 마스크를 쓰고 거리를 두고 진행하였고

면접관은 세분이 들어오셨고 지원자는 저 혼자서 면접 진행이 되었습니다.

제출한 과제에 대해 코드리뷰를 하고 그 이후 질문들을 받았습니다.

🔍 코드리뷰

코드리뷰는 전날 제출한 코드를 📽️노트북과 빔프로젝터에 연결하고

개발한 내용을 보면서 제가 개발한 내용에 대해 설명드리면

면접관들께서 중간중간 질문해주셨습니다.

제가 보기에도 부족한 부분에 대해 상당히 예리하게 지적해주셨습니다. 🕵️

답변으로는 이것이 왜 문제가 되는지, 그리고 어떻게 개선할 수 있는지

방향에 대해 설명드렸고 납득하는 분위기였습니다.

이후 질문은 주로 재직중인 회사에서 담당했던 업무에 대한 질문들과

포트폴리오에 관한 질문들이었습니다.

면접 분위기는 전반적으로 편안했고 매끄럽게 잘 진행되었습니다.

회사를 선택하는 기준이 무엇인가요? 현재 회사를 퇴사하려는 이유는 무엇인가요? 라이브러리와 보안솔루션 어떤걸 사용해보셨나요? 보안취약점 개선 사례에 대한 소개해주세요. MVVM과 MVP 차이를 설명해주세요. MVVM과 MVP 각각에서 View는 무엇을 의미하나요? RxJava 또는 Kotlin 코루틴을 써보셨나요? DI (Dagger, Coin) 써보셨나요? 클린아키텍쳐에 대해 이해한대로 설명해주세요.

마지막으로 저에게 하고 싶은 질문을 여쭤보셨습니다.

Q : 입사 전에 좀 더 공부해야할 부분이 있다면 무엇일까요? A: 클린아키텍쳐와 RxJava(코틀린)에 대해 공부해오시면 도움이 될 것 같습니다.

💌 결과

실무면접은 당일 합격 연락을 받았고

그 다음주에 2차 인성면접까지 통과하여 최종 합격 하였습니다. 🎉🎉🎉

🎮 B회사 : 게임 개발사

👨‍💼 면접 순서

서류 지원 -> 1차 실무면접(화상면접) -> 2차 인성면접(화상면접) -> 최종 결과 통보

원티드로 지원 후 열흘쯤 지나서 연락을 받았습니다.

전직원 재택근무 중 이었기 때문에 면접이 전부 화상면접💻으로 진행되었습니다.

집에서는 화상면접을 보기가 어려운 상황이어서

집 근처 스터티룸을 빌려서 면접을 진행하였습니다.

화상 면접을 위해 Google 행아웃 접속 링크를 전달받고

면접관은 총 4분이 들어오시고 지원자는 저 혼자였습니다.

❓ 실무 면접

💻화상면접 자체가 낯설고 어색한것도 있었지만

게임 업계이기 때문인지 이론적인 심도있는 질문이 많이 나와서

여러모로 힘들고 전체적으로 난이도가 높았습니다.😨

Stack 을 언제, 왜 사용할까요? Java에서 Collection의 종류는 무엇이 있나요? Set과 List 에서 검색 시 BigO는 어떻게 될까요? RESTful API 의 정의와 활용법에 대해 설명해주세요. Hash 알고리즘과 HashMap에서 Hash키값 중복에 따른 처리가 어떻게 되나요? 프로세스와 스레드의 차이를 설명해주세요. 멀티스레드를 사용할 때 주의할 점에 대해 설명해주세요. 앱이 동작중이지 않을 때 푸시 수신시 내부 동작은 어떤 식으로 이루어 질까요? 안드로이드 4대 컴포넌트 각각에 대해 소개해주세요. 액티비티와 프래그먼트가 굳이 나뉘어진 이유는 무엇일까요? 안드로이드 OS버전에 따른 UI 호환성 대응은 어떤식으로 하시나요? CI/CD 경험있으신가요? 안드로이드에서 테스트는 어떻게 자동화 할 수 있을까요? 회사 프로젝트에서 Java -> 코틀린 변환하신 이유가 무엇인가요?

마지막으로 저에게 하고 싶은 질문을 여쭤보셨습니다.

Q : 입사 전에 좀 더 공부해야할 부분이 있다면 무엇일까요? A : 업무특성 상 서드파티 라이브러리 없이 직접 개발해야 하는 경우가 많은데, 직접 개발할 수 있도록 공부를 해보시면 어떨까요?

💌 결과

실무면접 난이도가 꽤 있었고 대답 못한 질문도 있었기 때문에

사실 크게 기대를 하지 않고 있었는데,

일주일 뒤 합격했다는 연락을 받을 수 있었습니다.

🏫 C회사 : 교육서비스 스타트업

👨‍💼 면접 순서

서류 지원 -> 코딩테스트 -> 1차 실무면접 -> 2차 인성면접 -> 최종 결과 통보

원티드로 지원하였고 열흘쯤 지나서 연락받았습니다.

1차 실무 면접에 앞서 코딩테스트를 통과해야 면접을 진행할 수 있었습니다.

📝 코딩테스트

코딩테스트는 원하는 시간에 볼 수 있었으나..

회사 업무일정과 다른 채용과제도 있었기 때문에

퇴근 후 7시부터 11시까지 4시간 동안 진행하였습니다.

아쉬운 점이라면 Kotlin 이 지원되지 않아서 Java로 풀어야 했습니다.

문제는 6문제로 난이도에 따라 배점이 다 달랐습니다.

체감상 난이도는 하, 중, 중, 상, 상, 상 정도였습니다.

(🤔 대략 카카오 블라인드 테스트보다 약간 쉬운정도?)

6문제 중 쉬운문제 3문제 + 배점 가장 높은 문제 1개 = 총 4문제를 풀었고

그 다음주에 코딩테스트 합격 통보와 함께 실무 면접 일정을 조율하였습니다.🎉

❓ 실무 면접

면접관은 안드로이드, 백엔드, 기획 파트에서 한분씩 총 3분이 들어오셨습니다.

재택근무중이어서 화상 면접이 계획되어 있었으나,

운이 좋게(?) 회사로 출근하시는 날이어서 대면 면접으로 진행할 수 있었습니다.

처음에 건물을 잘못찾아가서 헤맸던 해프닝이 있었지만

시간 여유 있게 찾아뵈었기 때문에 큰 문제는 되지 않았습니다.

친절하게 맞이해주셨고 면접 분위기는 차분하고 매끄럽게 진행되었습니다.

면접 질문은 주로 회사에서 진행한 업무와 경험 위주로 많이 여쭤보셨고

기본 개념에 대한 이해와 본인이 개발하는 서비스에 대해

충분히 잘 이해하고 개발하고 있는지를 보고 싶어하시는 것 같았습니다.

현재 회사를 퇴사하려는 이유는 무엇인가요? 그동안 담당하셨던 안드로이드 라이브러리 개발에 대해 소개해주세요. Git을 어떻게 사용하고 계신가요? GitFlow에 대해 설명해주세요. 대칭키 암호화 알고리즘에 대해 설명해주세요. 테스트코드는 어떻게 작성하시나요? TDD 경험이 있으신가요? CI/CD 경험이 있으신가요? MVP에 아키텍쳐패턴에 대해 설명해주세요. RESTful API 이용한 통신 에러 발생 시 retry 등은 어떻게 처리하셨나요? 리스트뷰와 리사이클러뷰의 차이를 설명해주세요. 학부생 시절에 가장 자신있는 과목이 무엇이었나요? 무거운형제들은 어떤 모임인가요? 코딩테스트는 어떠셨나요? 알고리즘에 대해서 따로 학습하고 계신가요? 저희 회사 앱은 써보셨나요? 어떠셨나요? 이 회사에서 개발하고 싶은 것이 있다면 무엇이 있나요? 안드로이드 10, 11 에서 새로 변경된 사항이 무엇이 있는지 소개해 주시겠어요?

마지막으로 저에게 하고 싶은 질문을 여쭤보셨습니다.

Q : 입사 전에 좀 더 공부해야할 부분이 있다면 무엇일까요? A : 새로운 서비스 개발을 앞두고 있기 때문에 SW아키텍쳐 설계에 대해 공부해보시면 좋을 것 같습니다.

💌 결과

중간중간 대답 못한 질문도 있었고

무거운형제들 블로그에서 예전에 작성한 개발자 면접 후기를 보시면서

이전에 받은 질문을 다시 질문하셨는데…

하필이면 이 질문을 대답을 매끄럽게 하지 못했습니다!!!😨😨😨

그래서 아쉬움이 좀 컸고 그런만큼 사실 큰 기대를 하지 않고 있었는데,

일주일 뒤 합격했다는 연락을 받았고 2차 인성면접까지 통과하여

최종 합격 하였습니다. 🎉🎉🎉

🏢 D회사 : O2O 솔루션, 소셜 서비스 개발사

👨‍💼 면접 순서

서류 지원 -> 1차 실무면접 -> 2차 인성면접 -> 최종 결과 통보

헤드헌터 통해서 포지션 제안을 받고 지원하였습니다.

일정은 굉장히 빠르게 조율되었습니다.

사측에서 많이 배려해주셔서 퇴근 후에 면접을 볼 수 있었습니다.

❓ 실무 면접

면접관은 세분이 들어오셨습니다.

면접 분위기는 편안했고 자연스럽게 진행되었습니다.

다른 면접에 비해 상대적으로 빨리 끝났습니다. (30~40분정도)

회사를 선택하는 기준이 무엇인가요? 현재 회사를 퇴사하려는 이유는 무엇인가요? 코틀린의 장점에 대해 소개해주세요. 안드로이드에서 Context란 무엇인가요? 다른사람들 보다 자신있는 개발 영역이나 기술이 있다면 소개해주세요. 함수형 프로그래밍이란 무엇인지 소개해주실 수 있나요? CI/CD 사용 경험이 있으신가요? Firebase 기능들 중 어떤것들을 사용해 보셨나요?

마지막으로 저에게 하고 싶은 질문을 여쭤보셨습니다.

Q : 입사 전에 좀 더 공부해야할 부분이 있다면 무엇일까요? A : Firebase Realtime database에 대해 학습해 오면 좋을 것 같습니다.

💌 결과

다음날 헤드헌터 통해서 1차 면접 합격 통보를 받았습니다.

하지만 면접 끝나고 집에 돌아가는길에 ⏱️한시간 이상 걸려서

미리 세워둔 회사 선택 기준에서 벗어나기 때문에 지원취소 하였습니다.❌

🔚 결론

여러가지로 배운 것이 많은 과정이었습니다.

채용과제와 코딩테스트 그리고 면접을 보고 피드백하는 과정에서

새로 배우는 것도 많았을 뿐 아니라

기술적 강점과 약점에 대해서 객관적인 분석이 가능했습니다.

결과적으로는 좋은 결과가 있었습니다.

4곳 모두 1차면접을 통과했고

결론적으로 C기업으로의 이직을 선택하게 되었습니다.

안드로이드 앱 개발자 면접 후기 – 1차면접 (질문 & 답변 중심)

어제 국내 한 ‘대기업’ 의 안드로이드 어플리케이션 개발직무로 인턴십에 지원하여 면접을 다녀왔습니다.

관련 직무에 지원하시는 분들에게 도움이 될 만한 참고자료를 남기려는 부분과 스스로 되짚어 보고 모르는 부분을 공부해보는 기회로 삼는 겸하여

질문 및 답변에 대한 포스팅을 남겨보려 합니다.

현직 개발자분들이 지원자들이 알아야한다고 생각하는 부분일 것이므로 다른 기업의 면접에 가시는 경우에도 참고하시면 도움이 될 것이라 생각합니다.

면접 후기라고는 하지만, 저의 답변이나 개인적인 생각들은 많이 줄이고 면접을 준비하시며 감을 잡기에 좋을 법한 정보들과 나름 모범답안 이라 생각하는 부분들을 포스팅하는데 집중하도록 하겠습니다. ( 면접을 준비할 당시 답안 중심의 포스팅이 별로 없고, 개인적인 답변들 중심의 포스팅이 많아 아쉬웠었습니다.)

답변자체는 저의 답변을 포함하고 있긴 하지만, 올바르게 대답하지 못하였지만 ‘이렇게 대답하는 것이 모범답변일 것 같다’ 고 생각하는 답변도 많이 포함되어 있습니다.

안드로이드 면접 질문 1

구글링과 주관적인 생각이 들어있어 틀린 답들이 있습니다 정중히 댓글, 수정 부탁드립니다

약 10개식 정리할 예정입니다.

1. 안드로이드 애플리케이션 클래스는 무엇인가요?

> 안드로이드의 Application Class 는 액티비티 및 서비스와 같은 다른 모든 구성 요소(액티비티(Activity), 서비스(Service), 방송수신자(Broadcast receiver), 콘텐츠 제공자(Content provider), 인텐트(Intent))에 접근 가능한 기본 클래스입니다. 또한 애플리케이션 프로세스가 생성될 때, 가장 먼저 초기화 됩니다. 그렇기 때문에, 보통 앱 전역에서 일관성있게, 사용하는 요소들을 등록하여 사용하곤 합니다.

2. 컨텍스트란 무엇인가요?

Context

> Context 는 리소스에 접근하거나, 데이터베이스나 프리퍼런스에 접근하는 등 기타 등등 역할들을 제공한다. 앞으로 비교할 다른 Context 와 다른 중요한 점은 애플리케이션에서 현재 실행되고 있는 환경을 가지고 있다는 것이다.

Application Context

> 애플리케이션 라이프 사이클에 종속되어 있다.(애플리케이션이 만들어지고 유지되다가, 종료될 때 없어진다) 애플리케이션 컨텍스트는 라이프사이클이 현재 컨텍스트와 상관없는 다른 컨텍스트가 필요하거나 액티비티 활동 범위를 벗어난 컨텍스트를 필요할 때 사용할 수 있습니다.

Ex) Dialog 는 액티비티 Context 가 필요하고, Toast 는 Application Context 로 사용할 수 있다. (Toast 는 액티비티와 별개로 Window 를 가지고 있다)

Activity Context

> 액티비티 안에서 사용할 수 있는 Context 로 액티비티 라이프 사이클에 종속되어 있다. 액티비티의 라이프사이클과 맞물리는 작업에서 필요할 때 사용한다. 제일 많이 사용하는 화면이동에서 A 에서 B 로 이동할 경우, 이때 A 의 액티비티 컨텍스트가 필요하다. 물론 Application Context 로도 화면을 실행시킬 수 있지만, 이때는 인텐트에 Intent.FLAG_ACTIVITY_NEW_TASK 플래그가 필요하다

3. ARM64-v8a(64), ARMv7, ARMx86 등.. ABI(Application binary interface)가 무엇인가요?

> 안드로이드 디바이스는 다양한 CPU 를 사용하여 만들고, CPU에서 제공하는 명령셋은 다양하다, 대표적인것이 ARMv7 이 있고, 우리가 작성한 코드가 javac에 의해 바이트 코드(.class)로 바뀌고, Dalvik VM(현재는 ART VM) 안에서 JIT 컴파일을 통해 기계어로 번역 되는데, 이때 이 기계어를 해석하고 명령하는데, 이때 CPU 마다 명령을 실행하는 방법이 다르고, 실행 가능한 바이너리 형식, 명령 집합 등이 정의되어 있는 것이 애플리케이션 바이너리 인터페이스(ABI) 이다.

4. 바이트 코드를 안드로이드에서 바로 실행할 수 있나요 ?

> 바로 실행할 수 없다. Java 바이트 코드를 실행하려면 JVM (Java Virtual Machine)이 필요하지만, 안드로이드는 JVM 대신 Dalvik VM 을 사용하여, 메모리, 배터리 수명 및 성능에 더 초점을 맞춰 개발이 되었기 때문에 실행할수 없다.(라이센스 문제도 있었다고 한다.) 또한 dx 라는 안드로이드 도구를 사용하여 Java 클래스 파일을 Dalvik 실행 파일(.dex 파일)로 바꿔 실행한다.

Dalvik VM : 32비트만 지원 (JIT 컴파일러 – 실행하면 만들어 놓고)

ART VM : 32비트, 64 비트 모두 지원 (AOT 컴파일러 – 미리 만들어 놓고)

5. 빌드타입이 무엇인가요?

> 빌드타입이란 현재 사용하고 있는 라이브러리, 모듈 등의 빌드 방법을 정의하는 것이다. 안드로이드 앱이 패키징 되고, 빌드 될 때 그래들을 사용하여 빌드 타입을 정의할 수있다. 빌드할 때 추가되어야하는 리소스를 분리하여 적용할 수 있다. 또한 build variant 와 다양하게 조합해서 제품의 flavours 나 build type 을 정의할 수 있다.

Ex) flavor = [local, dev, stage, real]

Ex) buildType = [debug, release]

localDebug, localRelease, devDebug, devRelease, stageDebug, stageRelease, realDebugm realRelease 등.

6. 안드로이드 빌드 프로세스에 대해 간략하게 설명해보세요.

> 첫째로 Android asset packaging tool (AAPT) 를 사용하여 리소스(/res 이하 파일들)를 컴파일한다. 이때 R.java 라고 불리는 하나의 클래스로 컴파일 되어진다.

두번째로 .java 파일들이 javac 로 부터 .class 파일로 컴파일 된다. 그리고 클래스 파일들은 dx 툴(Android SDK tools 아래 포함되어 있다)에 의해 달빅 바이트 코드(classes.dex)로 변환된다.

마지막으로 APKbuilder 에 의해 apk(android packagin key) file이 만들어 진다. 현재는 각 디바이스의 해상도, 언어, abi 타입등으로 나눠 들어가 있는 apks 로 제공되어 나중에 디바이스에 필요한 리소스만 가지고, 애플리케이션을 만드는 AAB(android app bundle) 로 사용되기도 한다

7. 액티비티가 무엇인지 한줄로 정의해보세요

액티비티는 기본적으로 컨테이너의 역할을 하고, 사용자 인터페이스 화면을 구성하는 컴포넌트이다.

8. 액티비티 라이프 사이클에 대해 말해주세요.

onCreate() : 뷰가 처음 만들어 질 때 호출된다. 보통 뷰를 만들고, 초기화 하거나 번들로부터 데이터를 받아오는 코드를 많이 작성한다.

onStart() : 액티비티가 유저에게 가시적일 때 호출된다. 더 나아가 액티비티가 포그라운드로 오면, onResume 이 호출되고, 내려가면 onStop 이 호출된다.

onRestart() : onStop() 이 호출되었던 액티비티가 포 그라운드로 돌아오면 호출되는 메서드 이후 onStart() 를 호출한다.

onResume() : 액티비티가 유저와 상호작용하고 있을 때 호출된다. 액티비티 스택에서 가장 위에 있는 액티비티는 유저의 입력을 받을 수 있다.

onPause() : 액티비티가 백그라운드로 가기전 상황으로 부분적으로 가려질 때 호출된다. 아직 Killed 되지 않은 상황이다.

onStop() : 액티비티가 보여지지 않게 되었을 때 (백그라운드로 갔을 때) 호출된다. 더 나아가 액티비티가 종료되면 OnDestroy 가 호출되고, 포 그라운드로 돌아오면 onRestart() 가 호출된다.

onDestroy() 액티비티가 종료될 때 호출된다.

9. onCreate() 와 onStart 는 어떤 점이 다른가요 ?

> onCreate() 메소드는 애플리케이션이 시작되거나, 액티비티가 삭제된후 재생성될 때, 액티비티 사이클에서 한번만 호출된다. (앱의 구성요소 (언어, Orientation, 등) 가 변경되어 액티비티가 부서지고 다시 생성될 때 등)

> onStart() 메소드는 언제든지 액티비티가 유저에게 보여줄 준비가 되었을 때(가시적일때) 호출될 수 있다. 전형적으로 onCreate() 이후나, onRestart() 이후에 호출된다.

10. 액티비티에서 onPause 나 onStop 이 호출되지 않고 onDestroy 가 호출되는 경우는 언제인가요 ?

onCreate() 함수 안에서, finish() 를 호출할 경우 시스템은 직접 onDestroy() 를 호출한다.

11. LMK 가 무엇인가요 ?

LMK(Low Memory Killer) 안드로이드에서 가용 메모리(available memory)가 부족할 때 프로세스들을 죽이는 동작이다.

LMK의 목적

LMK의 목적은 바로 가용 메모리를 확보하는 것이다. 이것이 부족하면, PC나 휴대폰 등과 같은 시스템들의 성능이 크게 떨어집니다. 무지무지 느려지는 거죠. 심하면 앱 하나 띄우는데 몇 초 이상의 시간이 걸릴 수도 있습니다. 이런 문제를 방지하기 위해서 안드로이드는 사용하지 않는 프로세스들을 메모리에서 지워야 합니다. 여러분들이 가지고 계시는 안드로이드 폰들에서 LMK가 바로 이러한 역할을 수행하고 있습니다.

LMK 의 Priority

LMK 는 우선순위를 가지며 우선순위가 낮은 경우 부터 메모리에서 해제된다. (아래로 갈수록 우선순위가 낮다)

foreground process(현재 포그라운드에 올라온 애플리케이션, 현재 동작하고 있는 서비스)

visible process(사용자가 화면에서 볼 수 있지만 포그라운드가 아닌 경우 ex. 다이얼로그 에 가려진 onPause 상황 )

service process (직접 화면에 보이지는 않지만, 백그라운드에서 동작하는 데이터 업로드 또는 다운로드 경우, 오랫동안 동작한 서비스)

cached process (현재 사용하지는 않지만, 메모리에 적재되어 있는 프로그램)

OOM Killer와 LMK

안드로이드는 먼저 LMK 로 진행하다가, 더 이상 내릴 프로그램이 없을 때 OOM 순서를 밟는다.

키워드에 대한 정보 안드로이드 기술 면접

다음은 Bing에서 안드로이드 기술 면접 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 안드로이드 앱 개발자 면접 후기 (신입, 경력)

  • 개발자
  • 개발자 면접
  • 안드로이드 개발자 면접
  • 앱 개발자
  • 앱 개발자 면접
  • 동기부여
  • motivation
  • 홍드로이드

안드로이드 #앱 #개발자 #면접 #후기 #(신입, #경력)


YouTube에서 안드로이드 기술 면접 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 안드로이드 앱 개발자 면접 후기 (신입, 경력) | 안드로이드 기술 면접, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  디아 3 나탈 악사 | 디아블로3 시즌24 악사 히드리그 나탈6셋 세팅\U0026운영법(D3.S24.Dh.Natalya.6Piece.Setting.Guide) 2578 투표 이 답변

Leave a Comment