당신은 주제를 찾고 있습니까 “안드로이드 기술 면접 – 배민, 스타트업 기술면접 공개! – 대표 질문 3가지!“? 다음 카테고리의 웹사이트 https://you.experience-porthcawl.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.experience-porthcawl.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 개발바닥 이(가) 작성한 기사에는 조회수 66,367회 및 좋아요 1,359개 개의 좋아요가 있습니다.
안드로이드 기술 면접 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 배민, 스타트업 기술면접 공개! – 대표 질문 3가지! – 안드로이드 기술 면접 주제에 대한 세부정보를 참조하세요
– 한재엽님이 운영하시는 인터뷰 저장소
https://github.com/JaeYeopHan/Interview_Question_for_Beginner
배민 전체의 의견은 아니고 저와 호돌맨의 면접 경험 기반입니다!!
안드로이드 기술 면접 주제에 대한 자세한 내용은 여기를 참조하세요.
안드로이드 앱개발자 기술면접 준비하기
… 면접이 잡혔는데 기술 면접이 1시간이라고 한다. 지금 공부한다고 답변을 술술 말하는 똑똑이 개발자가 되진 않겠지만 이참에 안드로이드 개발 …
Source: velog.io
Date Published: 2/3/2022
View: 3731
Android – 테크 피드 – 프로그래머스 커리어
테마는 크게 네트워크, 코틀린, 안드로이드 스튜디오, git(VCS) 의 4가지로 나누어졌습니다. 프로필 이미지. 컴쏘공. blog.naver.com. 안드로이드 앱 기술면접대비 …
Source: career.programmers.co.kr
Date Published: 12/8/2022
View: 4883
안드로이드 개발자 면접 질문 모음집 (cs, android)
안드로이드 개발자 면접 질문 모음집 (cs, andro). joong~ 2021. 3. 18. 00:25. 320×100. ==== 2021.02.23 업데이트 완료 ==== 개인적으로 준비한 내용들을 공유하고 …
Source: class-programming.tistory.com
Date Published: 5/19/2021
View: 7137
안드로이드 기술 면접에 좋을 자료
> 서비스(Service) : 화면이 없고 백그라운드에서 돌아가는 컴포넌트, 모든 서비스는 Service 클래스를 상속받아서 사용한다. 네트워크를 통해서 데이터를 …
Source: bbul-jit.tistory.com
Date Published: 3/15/2021
View: 9941
신입 안드로이드 개발자로 취업하기 – 면접 – GitHub
내가 생각한 기술면접의 두 가지 유형. 자바 기초, 알고리즘, 자료구조 등에 관련된 질문; 내 이력서, 포트폴리오에서 사용한 기술들에 관련된 질문.
Source: github.com
Date Published: 12/21/2021
View: 8856
[android] 면접 질문
안드로이드를 구성하는 구성요소로 Activity , Service , Content Prover … HTTP 프로토콜에서 상태를 유지하기 위한 기술이 쿠키와세션이다.
Source: colinch4.github.io
Date Published: 5/18/2022
View: 7641
안드로이드 개발자 이직 면접 #03 – 브런치
기술 면접 / 인성 면접 | 3. 이직 면접 – 기술 면접 / 인성 면접 기술 면접 K사 1시간 30분 (경력 기술서 30분 + 사전 과제 30분 + 기술 면접 30분) …
Source: brunch.co.kr
Date Published: 9/3/2021
View: 7066
[안드로이드]면접 편-안드로이드를 시작하는 모든 이에게. (3)
오늘은 안드로이드 개발자 면접에 얘기하고자 합니다. (신입을 대상으로 한 글입니다. … 신입 개발자 전공 지식 & 기술 면접 백과사전.
Source: keelim.tistory.com
Date Published: 4/24/2021
View: 6206
안드로이드 대기업 기술 면접 정리 – 1 – 개발 기록
1차시 면접. 1. 지금까지 개발해왔던 경험들을 바탕으로, 기술적인부분에서의 간략한 자기소개 부탁드립니다. . 지금까지 해왔던 Andro Studio …
Source: wsx2792.tistory.com
Date Published: 8/24/2022
View: 170
안드로이드 앱 개발자 면접 후기 – 1차면접 (질문 & 답변 중심)
어제 국내 한 ‘대기업’ 의 안드로이드 어플리케이션 개발직무로 인턴십에 … 면접은 인성면접 없이 기술면접으로만 1:1 면접으로 2번 진행되었고, …
Source: blog.naver.com
Date Published: 4/15/2022
View: 2627
주제와 관련된 이미지 안드로이드 기술 면접
주제와 관련된 더 많은 사진을 참조하십시오 배민, 스타트업 기술면접 공개! – 대표 질문 3가지!. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 안드로이드 기술 면접
- Author: 개발바닥
- Views: 조회수 66,367회
- Likes: 좋아요 1,359개
- Date Published: 2021. 4. 5.
- Video Url link: https://www.youtube.com/watch?v=3ArYMq5AomI
안드로이드 개발자 면접 질문 모음집 (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 정리|작성자 디어반응형
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.
안드로이드 개발자 이직 면접 #03
3. 이직 면접
– 기술 면접 / 인성 면접
기술 면접
K사
1시간 30분 (경력 기술서 30분 + 사전 과제 30분 + 기술 면접 30분) / 3 대 1 면접 (면접관, 면접자)
경력 위주로 자기 소개 간단히
프로젝트 별 담당했던 일
팀 인원, 구성원, 안드로이드 인원
구현했던 기술 질문
사전 과제 코드 리뷰
오픈 소스 선정 기준
오픈 소스 안쓰고 개발 하는 법
에러 처리
Java Collection Framework에 대해 설명 (List, Set)
AsyncTask를 직접 구현 한다면? (Thread – Handler)
Android Service와 Intent Service 차이
Content Provider와 Content Resolver 차이
Fragment에 대해 설명
Android 3.0 미만에서의 Fragment 구현 설명 (support library, activity, fragmentManager 차이)
개발하며 가장 어려웠던 점은? 해결 방법은?
어떤 개발자가 되고 싶나?
N사
2시간 (전산 기초 1시간, 안드로이드 1시간) / 3 대 1 면접 (면접관, 면접자)
Thread, Process 설명
DeadLock, Mutex, Semaphore 설명
피보나치 수열 손코딩 (재귀, for문, 동적 계획법)
SingleTon 손코딩
Android TextView에서 특정 부분만 Color 바꾸기 직접 코딩 (Spannable)
Android BroadCast Receiver – Activity 간 연동 직접 코딩
안드로이드에 대한 모든 질문 1시간 (쉬지 않고 물어봤었네요)
어떤 개발자가 되고 싶나?
4시간 (안드로이드 1대 1 면접 1시간씩 4번) / 1 대 1 면접 (면접관, 면접자)
Handler에 대해 설명
Rest API란
Java Collection Framework에 대해 설명
Activity 생명주기
Vedio application을 개발할때 Actvitiy 생명주기
Android Application – Process에 대해 설명
Layout XML 손코딩
Service – Activity 연동 손코딩
개발하며 가장 어려웠던 점은? 해결 방법은?
어떤 개발자가 되고 싶나?
2시간 (안드로이드 1대 1 면접 1시간씩 2번) / 1 대 1 면접 (면접관, 면접자)
Intent filter에 대해 설명
암시적, 명시적 Intent 설명
Doze 모드 설명
관심있는 Android 기술 설명
자사 서비스를 이용해 개발하고 싶은 프로그램
Handler 설명
Google Develop 사이트에서 특정 API 찾기
해당 API를 지원하는 Android min version은?
개발하며 가장 어려웠던 점은? 해결 방법은?
어떤 개발자가 되고 싶나?
B사
30분 (인성 20분, 기술 면접 10분) / 2 대 1 면접 (면접관, 면접자)
1~10 범위의 값을 가진 배열 int[9]에서 빠진 숫자 찾기 알고리즘
1~10 범위의 값을 가진 배열 int[10] A, int [10] B를 비교해 서로 다른 값 찾기
자바, Android 레벨은?
Java NIO란?
Java Concurrency란?
서울에 좋은 대학교 많은데 왜 여기 갔나? (질문 수준이 참…)
자취? 통학?
일본 기업이면 돈 많이 주지 않나?
자신을 뽑아야 하는 이유 어필
C사
2시간 (기술 면접 1시간, 필기시험 1시간) / 2 대 1 면접 (면접관, 면접자)
이직 사유
NIO란?
Doze 모드
Activity, Fragment 설명
SingleTon 손코딩
Stack, List, Queue 손코딩
Handler 설명
정렬해서 최대값, 최소값 찾기 필기
SingleTon 필기
String reverse 필기
안드로이드 메신저 어플리케이션을 개발할 때, 메세지가 10000개 이상인 화면을 구성함에 있어 고려할 점필기
I사
30분 (인성 면접 30분) / 2 대 1 면접 (면접관, 면접자)
이직 사유
최근에 읽은 개발 책은? 저자는? 발행년도는? (이걸 왜 묻죠??)
개발자로서 목표?
개발자로서 5년뒤 10년뒤의 모습
C사
3시간 30분 (코딩 3시간, 인성 면접 30분) / 3 대 1 면접 (면접관, 면접자)
특정 API에서 데이터를 받아 List 형태로 보여주기 안드로이드 어플리케이션 코딩
코드 리뷰
이직 사유
개발하면서 힘들었던 점, 해결 법
개발자로서 목표
인성 면접
K사
1시간 (기술 면접 40분 + 인성 면접 20분) / 4 대 1 면접 (면접관, 면접자)
자신의 장/단점
뽑아야 하는 이유
자신있는 Android 기술
Android MAT 설명
GCM 설명
개발하면서 힘들었던 점, 해결 법
N사
10분 (인성 면접 10분) / 1 대 1 면접 (면접관, 면접자)
자신의 장/단점
개발자로서 목표
Skill up을 하는 방법
기술 면접에서 대답 못했던 것 있냐
C사
5분 (인성 면접 5분) / 2 대 1 면접 (면접관, 면접자)
이직 사유
목표
C사
1시간 (기술 면접 30분, 인성 면접 30분) / 1 대 1 면접 (면접관, 면접자)
경력위주로 간단한 자기소개
프로젝트 별 했던 일
자신의 장/단점
이직 사유
이 회사를 선택한 이유
Activity에 대해 설명
StartService, BindService 설명
Content Provider 설명
기억이 다 안 나네요…
기분 나빴던 면접부터 불합격했지만 많이 배웠던 면접까지 다양했어요.
[안드로이드]면접 편-안드로이드를 시작하는 모든 이에게. (3)
반응형
이번 편을 마지막으로 회고글을 마무리하려고 합니다.
오늘은 안드로이드 개발자 면접에 얘기하고자 합니다. (신입을 대상으로 한 글입니다. 경력분들은 안녕~) 경험적인 부분이라 정석이 아닌 점을 다시 한번 말씀드립니다.
면접은 한마디로 암묵지를 명시지로 바꾸는 행위입니다. 이게 무슨 말이냐.
어느 정고 개발도 해보고, 학교 전공 공부도 해본 컴퓨터 공학과 학생 Http Code를 모를까요? 그건 아닐 겁니다. 400이 클라이언트 에러이고 500이 서버 에러인 건, 알겠죠. 하지만 면접에서는 왜 대답을 못할까요?
인터넷에 보니 여러 글들이 있더라구요
훈련이 안되어 있다.
공부가 안되어 있다.
자기 언어로 생각을 안 해봤다.
직접 안해봤다.
아마 맞는 말이겠죠. 하지만 저는 공감하지는 못했습니다. (저는 나름 공부도 했고, 개발도 했다고 생각을 했거든요)
그래서 제가 고민 끝에 생각한 결론은
면접 문제는 생각보다 본질적인 걸 물어본다는 것입니다.
* 다시 한번 말씀드리지만, 저의 생각들입니다.
아까의 문제로 돌아가서 Http 상태 코드에 대해서 설명을 해달라고 하면, 왜 대답을 못할까요?
그 지식을 몰라서?
그게 아닙니다. (예를 들면, + 가 왜 덧셈인가? 를 물어보는 거하고 같은 이치라고 생각합니다.)
처음 말하는 입장에서는 그냥 사용하던 것인데, 그것 자체가 뭐냐라고 물으니 당연히 당황하죠;;;;
말 그대로 암묵지 (머릿속에는 개념이 존재하나 말이나 문자로 표현하기 힘든) 지식 상태가 많은 것입니다.
면접에 과정에서는 이를 명시지로 바꿀 필요가 있습니다. (면접을 통과해야 하니까요?)
저도 준비를 하고 면접을 보면서 여러 방법을 준비를 했지만, 이 방법이 3단계가 제일 효과적이라고 생각합니다.
1. 일단 지식을 늘리자.
암묵지에서 명시지로 바꾸는 과정은 중요하지만, 그것보다 먼저 선행되어야 할 것은 일단 지식이 있어야 하는 것입니다. Github 에는 이런 지식들을 정리해놓은 레포들이 많으니 참고하세요
ex)
우아한 테크톡
2. 늘린 지식을 명시지로 바꾸는 과정
공부를 하면서 제일 힘든 건, 생각보다 CS 범위는 엄~청 넓다는 것이다. 기본적으로 (자료구조, 알고리즘, 네트워크, 데이터베이스, 운영체제)부터 분야마다(웹, 인프라, 모바일, 프론트, 백엔드, AI, 블록체인, 데이터~~) 정말 많은 스펙트럼이 있다.
본인은 안드로이드 개발자를 하고 싶어서 `기본적 + 안드로이드` 구조로 준비를 하였습니다.
https://github.com/jwasham/coding-interview-university
어떻게 보면, 기술면접을 준비하는 방법을 제일 현실적으로 보여주는 레포인 것 같습니다.
이 레포를 참고했을 때, 드는 생각은 절대 일반적인 방법으로 (외우듯이) 이런 지식을 알고 있는 것은 불가능하다.입니다. 구조적으로 외우고, 반복이 필요한 작업입니다. (저는 이를 위해서 프로젝트 겸, 플래시 카드 앱을 만들어서 외우곤 했습니다.)
여기 레포에서 제시하는 방법도 플래시 카드입니다. 플래시 카드를 사용하게 되면, 자신만의 언어로 설명할 수 있고 반복적으로 사용도 가능합니다.
직접 만들어도 좋고, 있는 것들을 사용하셔도 좋습니다. 명시지 단계로 만들 수 만 있다면.
3. 말을 잘해야 한다. (제일 중요한 단계)
우리는 말을 잘해야 합니다. 이게 무슨 말이냐. 공대생들은 특히나, 발표하거나 말을 하는 기회가 타과 학생과 비교했을 때, 적습니다. 저 또한 그랬고요, 그래서인지 면접 단계에서 자기가 했던 프로젝트를 설명할 때, 생각보다 제대로 설명하지 못하는 경우가 있습니다.
면접 상황에서 혹시 “~~ 이런 프로젝트를 했다고 쓰여있는데, 설명 부탁드려도 될까요?” 이렇게 물어본다면, 무슨 기술을 사용했고 이런 프로젝트입니다. 와 같이 기술적으로만 접근한다면 생각보다 아무리 대단한 기술이라도 생각보다 공감을 못할 수 있습니다.
면접관은 프론트 엔드 개발자인데, 최신 백엔드 프레임워크를 사용했다. 하면, 아 그렇구나;;; 로 받아들일 수 있습니다.
그래서 이것이 무슨 프로젝트고 무슨 문제를 해결하려고 했으며 이런 기술 이런 기술이 있었는데 왜 이 기술을 선택했는지 등, 프로젝트 메타 정보를 초기에 말해 주 신는 게 훨씬 공감대가 가지기 쉽습니다. (무작정 기술은 말고요)
취향에 따라서 한 번에 말씀을 해주셔도 되고 면접관가 소통하면서 말씀을 하셔도 됩니다.
단, 거짓말은 하지 마세요. 생각보다 금방 들킵니다.
결론.
일단 지식이 있어야 한다.
암묵지 -> 명시지로 바꾸는 과정이 필요하다.
말을 잘해야 한다.
최근 글들은 넋두리를 많이 하는 글인 것 같네요.
가끔 들려 수정하면서 주시는 쪽지들, 메일들 답변을 달도록 하겠습니다.
마지막으로 취업을 준비하면서, 면접을 준비하면서 그리고 취업 후 들었던 생각은
“나는 취업 전 취업 후 바뀐 것이 없는데, 왜 그때는 떨어지고 지금은 붙었는가입니다. ”
결론은 사회 구조적 문제, 운이라고 생각합니다. 결코 나의 잘못은 아니고 그저 뽑는 인원이 없어서 내가 준비한 부분에서 문제가 나오지 않아서입니다. 다른 이유가 없습니다. (이런 마음가짐을 가지니 그냥 부담이 없더라고요)
면접에서 붙어야 선배고 팀장님이고 그러지만, 면접에서 떨어지면 그냥 아저씨, 아줌마 들입니다.
너무 긴장하지 마시고 준비한 만큼 말씀하시면 될 것 같아요.
반응형
안드로이드 대기업 기술 면접 정리
참고 자료
https://blog.naver.com/PostView.nhn?blogId=csi468_&logNo=221465784013&from=search&redirect=Log&widgetTypeCall=true&directAccess=false
1차시 면접
1. 지금까지 개발해왔던 경험들을 바탕으로, 기술적인부분에서의 간략한 자기소개 부탁드립니다.
지금까지 해왔던 Android Studio 관련 프로젝트나 동아리활동, 최근 Kotlin 을 공부중이라는 부분에 대해 설명했습니다.
2. Thread 와 Process 의 차이점을 설명해주세요
모두 프로그램의 실행과 관련된 단어들 입니다. 차이점은 Process는 실행의 단위, Thread는 Process 내에서 실행되는 흐름의 단위로
Process는 독립적으로 실행되지만 Thread는 Process 내의 Thread 들끼리는 Heap,Data 등(Stack은 개별할당)을 공유합니다.
자세한 내용은 https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html 을 참고해주세요.
[OS] 프로세스와 스레드의 차이 – Heee’s Development BlogStep by step goes a long way.
gmlwjd9405.github.io
3. Network 부분 질문.
3-1. Http Request Code 에 대해 아는대로 설명해 보세요.
큰 맥락에서 설명하였으면 되었을 것 같습니다. Http Request Status Code는 크게 앞자리숫자를 기준으로 5가지 그룹으로 나누어집니다.
1xx : 정보(조건부) 응답
2xx : 성공
3xx :Ridirection Message Client는 요청을 마무리하기 위해 추가동작을 해야합니다.
4xx : Client 요청 오류. Client가 전송한 코드에 오류가 있음
5xx : 서버 오류.
https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
HTTP 상태 코드 – 위키백과, 우리 모두의 백과사전
HTTP 상태 코드 아래는 HTTP (하이퍼텍스트 전송 프로토콜) 응답 상태 코드의 목록이다. IANA 가 현재 공식 HTTP 상태 코드 레지스트리 를 관리하고 있다. 1xx (조건부 응답) [ 편집 ] 요청을 받았으며 작업을 계속한다. [1] 이 상태의 상태 코드는 상태-라인과 선택적 헤더(컴퓨터에서 출력될 때 각 페이지 맨 윗부분에 자동으로 붙는 부분)만을 포함하는 임시의 응답을 나타내고 빈 라인에 의해서 종결된다. HTTP/1.0이래로 어떤 1XX 상태 코드들도 정의 되지 않았다. 서버들은 1XX 응답을 실험적인 상태를 제외하…
ko.wikipedia.org
4. Lambda Function 과 High Order Function 에 대해 설명해보세요.
Kotlin에서는 함수형 프로그래밍을 지원합니다.
High Order Function(고차함수) 란 , 함수를 인수로 취하거나 함수를 결과로 반환할 수 있는 함수를 말합니다. Android Studio 에서 자주 사용하는 Call-Back Method 등이 고차함수 입니다.
이러한 고차함수에서 매개변수로 주어지는 식을 Lambda Expression ( 람다 표현식 ) 이라고 부릅니다.
Android Studio 같은 경우에 Java8 을 지원하지 않았기 때문에, Lambda Expression을 사용하지 못하고 비슷한 기능을 익명클래스를 만들어 사용하였으며 현재는 Kotlin 의 함수형 프로그래밍을 이용하여 Code를 간결하게 바꾸고 코딩의 자유도를 높일 수 있었습니다.
자세한 내용은 다음을 참고하세요
https://thdev.tech/kotlin/2018/03/17/Kotlin-Lambdas/
Kotlin Lambdas
Kotlin Lambdas March 17, 2018 by Taehwan Udemy : 안드로이드 공식 언어 : 코틀린(Kotlin) 시작하기 by Tae-hwan 2019 드로이드나이츠 발표자 절찬리 모집중!! Kotlin을 활용하여 개발을 하면 무조건 만나는 Lambdas 식. 기존 Android 개발에서는 Java 7을 주로 사용하다 보니 Lambda 식을 사용할 일은 없었다. 하지만 Backport 활용으로 Lambda을 적용할 수 있었는데 retrolambda 이다. 현재는 Android Studio 3.0 이상에서 구글이…
thdev.tech
5. 안드로이드 스튜디오의 Thread 에 대해 설명해보세요. Main Thread와 Worker Thread 등을 구분하는 이유와 Main Thread에서 반드시 동작해야하는 함수가 있는지도 설명해보세요
안드로이드 스튜디오는 크게 2가지 Thread로 분류됩니다. Main Thread(UI Thread ) 와 Worker Thread.
Main Thread는 액티비티와 컴포넌트들의 사용을 담당하고 연동하는 역할을 합니다. UI 컴포넌트들과 밀접한 연관이 있는 Thread 이다보니 UI
Thread라고도 부릅니다. 즉, System Call-Back Method , LifeCycle 에 관련된 Method 등은 반드시 Main Thead에서 관리되어야 합니다.
그런데 다른 작업들에 의해 Main Thread가 UI와 동기화되지 못하고 지연되는 경우에는 문제가 발생합니다. 이러한 오류를 ANR(Application Not Responding, UI 관련 작업이 일정기간 이상 반응되지 못하면 발생) 이라 부릅니다. (ANR이 무엇인지 또한 면접중에 물어보셨습니다.)
이러한 문제점을 막기위해 불안정한 UI관련 작업이나 비동기 작업(애니메이션 등) , High Cost의 연산작업 (Database 처리등) 등은 Worker Thread를 따로 만들어 처리하도록 합니다.
하지만 View 등의 UI 관련 컴포넌트를 업데이트 하는 작업은 UI Thread에서 진행되어야 하는데 애니메이션등의 비동기작업을 진행하며 UI를 수정해야 한다면, Async Task등을 이용하는 것이 바람직합니다.
관련 내용은 https://apphappy.tistory.com/63 를 참고하였습니다.
<안드로이드/Android> 안드로이드에서 스레드란?
안드로이드(Android)에서 메인 스레드(Main Thread)란 무엇인가? 어플리케이션이 실행됐을 때, 시스템에서는 “Main”이라 불리는 어플리케이션을 실행하는 스레드를 생성한다. “Main” 스레드는 안드로이드 이벤트..
apphappy.tistory.com
6. View Model을 사용하는 이유는 무엇인가요? Counter Animation을 사용하는 어플리케이션에서 실행 중에 화면을 돌려 Activity가 회전한다면 Counter 의 값이 Reset 될까요?
A : View Model은 Activity 나 Fragment에 자료가 제한되는 것을 방지하고, UI 관련 데이터를 수명주기에 관계없이 보존하기 위해 만들어졌습니다. 위의 예시에서 View Model을 사용하지 않는다면 런타임중에 Call-Back Method에 의해 Activity가 재시작되고, Activity 내에서 저장되던 Counter 관련 변수 또한 초기화됩니다. 하지만 View Model 은 Activity 나 Fragment의 수명주기에 영향을 받지 않고, Live Data를 통해 UI에 Data를 업데이트하기에 유용하게 사용될 수 있습니다.
관련 내용을 너무도 잘 설명한 포스팅이 있어 링크를 남깁니다.
https://medium.com/@jungil.han/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-viewmodel-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-2e4d136d28d2
안드로이드 아키텍처 컴포넌트, ViewModel 이해하기 – 한로니 – Medium
안드로이드 앱 개발 시 한 번쯤 겪어봤을 어려움 하나를 꼽자면 단연 안드로이드 컴포넌트의 수명주기가 아닐까 싶습니다. 그중에서도 액티비티와 프래그먼트의 수명주기는 많은 상태와 여러 진입 케이스에 따른 복잡함으로 오랫동안 개발자들을 괴롭혀 왔습니다…
medium.com
7. Android Activity Life Cycle 에 대해 설명해보세요.
(이 부분의 설명 및 사진자료는 android developer site를 참조하였습니다.)
https://developer.android.com/guide/components/activities?hl=ko
액티비티 | Android Developers
An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map. Each activity is given a window in which to draw its user interface…
developer.android.com
Activity는 3가지 상태를 가집니다. Resumed , Paused , Stopped .
Resumed (Active)- Focus 를 가지고 있으며 화면에 보이는 상태입니다. (Dialog 에 의해 가려진 Activity 또한 Active상태입니다 – dialog 또한 Activity의 일부이기 때문)
Paused – 화면에는 보이지만 Focus를 받지 못하고 있는 상태입니다. ( 투명한 Activity 에 의해 가려진 경우에도 Paused 상태에 해당합니다.)
Stopped – 화면에 보이지 않는 상태입니다. 다른 Activity에 의해 가려지거나 전화가 오거나 홈버튼을 누르는 등의 작업에 의해 Activity는 Stopped 상태로 전환됩니다.
아래는 이러한 상태를 변경하는 Call-Back Method 들과 생명주기에 관련된 설명 입니다.
Activity의 생명주기
Activity의 생명주기와 관련된 Call-Back Method
추가적으로 언급한 부분 :
onCreate() 에서 컴포넌트들의 초기화과정 – binding 이 일어나고,
onStop() 에서는 메모리관리등을 위해 Activity의 상태를 Bundle에 저장하는 작업등을 진행합니다.
이 경우 onSavedInstanceState() Call-Back Method가 실행됩니다.
7-1. onStart() 와 onResume() 함수가 구분되어 있는데 둘의 차이점은 무엇인가요?
A : onStart() 는 액티비티가 사용자에서 보여지기 직전에 호출되고, onResume() 은 사용자에게 보이지만 사용자와 상호작용하기 직전상태일때 실행됩니다.
8. Android 의 Component 관련 질문입니다.
(Android 4대 컴포넌트는 Activity, Service, Broadcast Receiver, Component Provider 입니다)
8-1 . Broadcast Receiver 를 사용할 때, Broadcast를 수신하는 기능 말고 Broadcast 를 송신할 수는 없을까요?
Broadcast Receiver를 이용하여 앱간의 데이터 전달이나 Broadcast 를 송신할 수 있습니다.
상호작용할 앱 모두에 Broadcast Receiver를 등록하고, sendBroadcast() 를 이용하여 Intent 를 주고 받는 방식으로 동작시켜줍니다.
8-2. Content Provider를 이용해 구현해 본 앱이나 기능이 있으신가요?
Content Provider는 앱간의 정보공유를 가능해게 해주는 컴포넌트입니다.
무엇인지는 알고 있었지만 실제로 사용해 본 적은 없어, 없다고 답했습니다.
이후 찾아본 정보에 의하면 Content Provider를 구현하기 위해서는 우선 Content Uri 를 디자인 해야합니다. 이후 query , insert , update , delete 를 구현한 뒤 intent를 교환하여 앱간의 정보교환이 이루어지게 됩니다.
자세한 내용은 developer site를 참조하세요.
https://developer.android.com/guide/topics/providers/content-provider-basics
콘텐츠 제공자 기본 사항 | Android Developers
A content provider manages access to a central repository of data. A provider is part of an Android application, which often provides its own UI for working with the data. However, content providers are primarily intended to be used by other applications…
developer.android.com
9. Jetpack 에서 사용해본 기능은?
A : Room, Navigation – Fragment , View Model 등 사용해 보았습니다.
10. Firebase 중 사용해 본 기능은?
A : 답변당시 Firebase 에 대해 충분히 이해를 하지 못하고 있었습니다. 이 부분은 추후에 업데이트 하도록 하겠습니다.
11. Custom View 를 사용해 본 적이 있는지?
A : 이전의 앱개발에서 ListView 를 커스터마이징 한 Custom ListView를 사용해 본 적이 있어 그 내용을 답변드렸는데, 원하는 대답이 아니셨던 것 같습니다.
정확한 이 부분의 질문은, View를 커스터마이징 하여 모양이 둥근 뷰를 만들거나 특정위치에 고정시키는 등의 작업을 해 본 적이 있냐는 것이였습니다. 만드는 방법은 아래 링크에서 잘 설명되어 있으니 참고하세요.
https://blog.burt.pe.kr/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%BB%A4%EC%8A%A4%ED%85%80%EB%B7%B0-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/
안드로이드 커스텀뷰 이해하기 : Burt.K
Burt.K 코코아를 좋아하는 프로그래머입니다 😉 소개 아카이브 오픈소스 책모음 안드로이드 커스텀뷰 이해하기 안드로이드 뷰는 화면에 그려지기 전에 아래 그림과 같은 몇 단계의 과정을 거친다. 커스텀뷰를 만들기 위해서는 뷰의 드로잉 과정을 이해해야 한다. 위 단계를 3개의 과정으로 나눌 수 있다. 하나의 과정이 실행되면 항상 Draws 단계에서 마무리 된다. Animate 과정 Layout 과정 Draw 과정 각 과정의 시작점은 아래와 같다. Animate 과정은 View의 animate() 메서드에 의해서 시작된다. Layout …
blog.burt.pe.kr
[출처] 안드로이드 앱 개발자 면접 후기 – 1차면접 (질문 & 답변 중심)|작성자 컴쏘공
안드로이드 앱 개발자 면접 후기 – 1차면접 (질문 & 답변 중심)
어제 국내 한 ‘대기업’ 의 안드로이드 어플리케이션 개발직무로 인턴십에 지원하여 면접을 다녀왔습니다.
관련 직무에 지원하시는 분들에게 도움이 될 만한 참고자료를 남기려는 부분과 스스로 되짚어 보고 모르는 부분을 공부해보는 기회로 삼는 겸하여
질문 및 답변에 대한 포스팅을 남겨보려 합니다.
현직 개발자분들이 지원자들이 알아야한다고 생각하는 부분일 것이므로 다른 기업의 면접에 가시는 경우에도 참고하시면 도움이 될 것이라 생각합니다.
면접 후기라고는 하지만, 저의 답변이나 개인적인 생각들은 많이 줄이고 면접을 준비하시며 감을 잡기에 좋을 법한 정보들과 나름 모범답안 이라 생각하는 부분들을 포스팅하는데 집중하도록 하겠습니다. ( 면접을 준비할 당시 답안 중심의 포스팅이 별로 없고, 개인적인 답변들 중심의 포스팅이 많아 아쉬웠었습니다.)
답변자체는 저의 답변을 포함하고 있긴 하지만, 올바르게 대답하지 못하였지만 ‘이렇게 대답하는 것이 모범답변일 것 같다’ 고 생각하는 답변도 많이 포함되어 있습니다.
키워드에 대한 정보 안드로이드 기술 면접
다음은 Bing에서 안드로이드 기술 면접 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 배민, 스타트업 기술면접 공개! – 대표 질문 3가지!
- jojoldu
- 배민
- 면접
배민, #스타트업 #기술면접 #공개! #- #대표 #질문 #3가지!
YouTube에서 안드로이드 기술 면접 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 배민, 스타트업 기술면접 공개! – 대표 질문 3가지! | 안드로이드 기술 면접, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.