티스토리 뷰

26일차

 

선택 정렬과 버블 정렬에 대해 설명해봅시다.

선택 정렬은 정렬되지 않은 데이터들 중 가장 작은 데이터를 찾아

가장 앞의 데이터와 교환해나가는 방식으로 데이터를 정렬합니다.

O(n²)의 시간 복잡도를 가지며, 데이터 이동 횟수가 적단 특징이 있습니다.

 

버블 정렬은 인접한 두 요소를 비교하여 크기가 큰 요소를

앞으로 보내는 방식으로 데이터를 정렬합니다.

O(n²)의 시간 복잡도를 가지며, 성능이 좋지 않지만 구현이 쉽단 특징이 있습니다.

 

 

MVVM ,MVC, MVP 패턴이란 무엇인가?

해당 디자인 패턴들에서 M은 Model의 약자로 데이터와 관련된 요소이며,

V는 View의 약자로 사용자 인터페이스에 해당하는 요소입니다.

 

MVC 패턴은 사용자 입력을 받으면 Controller가 Model을 변경하고,

Model의 변경점을 View에서 반영하는 구조입니다.

해당 디자인 패턴은 View가 Model에 의존한다는 문제가 있습니다.

 

뷰와 모델간의 의존성 문제를 해결하기 위해 MVP 패턴이 등장하였습니다.

MVP는 View와 Model이 Presenter를 통해 서로 상호작용하는 구조입니다.

해당 디자인 패턴은 View와 Presenter가 1:1의 관계성을 가지기에

View가 Presenter에 강하게 의존성한다는 문제가 있습니다.

 

이러한 의존성 문제를 해결하기 위해 MVVM 패턴이 등장하였습니다.

MVVM은 사용자 입력을 ViewModel이 전달받으면, ViewModel에서 Model을 변경하고,

View는 ViewModel의 데이터를 구독하여 UI를 업데이트하는 구조입니다.

해당 디자인 패턴에선 UI와 비즈니스 로직이 분리되어 있으며,

뷰가 뷰모델의 세부 구현 사항을 몰라도 되기에 서로 간의 의존성이 줄어들었습니다.

 


 

27일차

 

코루틴(Coroutine)이 무엇이며, 어떤 상황에서 유용하게 사용될 수 있나요?

코루틴은 비동기 작업 및 동시성 작업을

편하게 처리할 수 있게 해주는 경량 스레드입니다.

 

시간이 오래 걸리는 비동기 작업을 처리할 때,

특정 시간 후나 일정한 간격으로 반복되는 작업을 처리할 때,

여러 비동기 작업을 병렬적으로 처리할 때 유용하게 사용됩니다.

 

 

Android의 Looper와 MessageQueue의 작동 원리와 사용 방법을 설명해 주세요.

메인 스레드는 내부적으로 루퍼를 가지며 그 안에는 메시지 큐가 포함됩니다.

메시지 큐는 전달받은 메시지를 선입선출 형식으로 보관하는 큐입니다.

 

루퍼는 메시지큐에서 메시지를 차례대로 꺼내 핸들러에 전달합니다.

핸들러는 루퍼로부터 받은 메시지를 처리하거나, 다른 스레드로부터

메시지를 받아 메시지에 큐에 넣는 역할을 하는 통신 장치입니다.

 

Looper.prepare를 호출해 스레드에 루퍼를 설정할 수 있는데 이 때 메시지큐는 자동으로 생성됩니다.

루퍼를 설정하였으면 핸들러를 생성하고 handleMessage를 호출해 메시지를 처리합니다.

그 다음 Looper.loop를 호출하여 메시지를 처리하기 위한 이벤트 루프를 시작합니다.

마지막으로 작업이 완료되었을 때 Looper.quitSafely를 호출하여 루퍼를 종료합니다.

 


28일차

 

접근제한자란 무엇이며, 각각 어떤 차이가 있는지 비교해서 설명해주세요.

접근 제한자는 클래스, 메서드, 필드 등에 대한 접근 권한을 설정하는 키워드입니다.

 

public으로 선언된 클래스는 모든 클래스에서 접근 가능합니다.

private로 선언된 클래스는 해당 클래스 내부에서만 접근 가능합니다.

protected로 선언된 클래스는 해당 클래스 및 이를 상속받은 자식 클래스에서만 접근 가능합니다.

internal로 선언된 클래스는 같은 모듈 내에서만 접근 가능합니다.

 

 

클린 아키텍처란 무엇이며 어떻게 구현할 수 있는가?

클린 아키텍쳐란 앱을 UI, 컨트롤러, 유즈 케이스, 엔티티 이렇게 4개의 계층으로

나누어 각 계층의 책임을 명확히 분리하는 디자인 패턴입니다.

클린 아키텍처는 레이어를 UI, Domain, Data로 나누어 구현합니다.

UI Layer에는 사용자 인터페이스와 뷰모델을, Domain Layer에는

비즈니스 로직에 해당하는 유즈케이스를, Data Layer에는

레파지토리의 구현체 및 데이터 관련 파일을 작성합니다.

 


 

29일차

 

람다식(Lambda Expression)이 무엇인지 설명해주세요.

람다식은 이름이 없는 익명함수를 간결하게 표현하는 방식으로,

함수를 하나의 표현식으로 나타낼 수 있습니다.

함수를 간결하게 작성할 때나 함수를 인자로 받거나 반환할 때 유용하게 쓰입니다.

 

 

Android 애플리케이션의 Activity 생명 주기에서
onSaveInstanceState와 onRestoreInstanceState의 역할을 설명해 주세요.

onSaveInstanceState는 Activity가 파괴될 때 현재 상태를 저장하는 역할을 하고,

onRestoreInstanceState는 Activity가 재성성 될 때 저장된 상태를 복원하는 역할을 합니다.

 


 

30일차

 

HashMap과 TreeMap의 차이점과 각 자료구조의 시간 복잡도에 대해 설명해 주세요.

HashMap은 테이블을 기반으로 한 자료구조입니다.

키의 순서가 보장되지 않아 데이터는 정렬되지 않은 상태입니다.

일반적으로 O(1)의 시간 복잡도를 가지며 서로 다른 키가 동일한 값을 가지는

해시 충돌이 발생하면 O(n)의 시간복잡도를 가지게 됩니다.

 

TreeMap은 이진 탐색 트리를 기반으로 한 자료구조입니다.

키는 저장과 동시에 자동으로 오름차순으로 정렬됩니다.

TreeMap은 레드 - 블랙 트리라는 이진 탐색 트리를 사용하며

해당 이진 탐색 트리는 부모 노드를 기준으로 작은 값의 노드는 왼쪽으로,

큰 값의 노드는 오른쪽으로 배치해 트리의 균형을 맞춥니다.

그렇기에 트리의 높이는 트리맵의 시간복잡도는 최악의 경우에도 O(log n)에 해당합니다.

 

 

프로젝트에서 특히 어려운 문제를 디버깅해야 했던 상황을 설명해 주세요.

회원가입 시 계정 생성이 제데로 안되는 문제를 디버깅하는 것이 어려웠습니다.

 

회원가입 성공 상태일 때 유저 객체를 받아서 해당 객체를 기반으로 유저 정보를

데이터베이스에 저장하도록 로직을 짰었는데 계정정보가 제데로 저장이 안되는 문제가 있었습니다.

 

그래서 회원가입을 수행하는데 필요한 파이어베이스 콜백 함수에 에러 발생시

로그를 찍도록 하는 구문을 추가하고 디버깅할 때 Log캣에서 에러 메시지를 확인해

어느 부분에서 문제가 발생하는지 파악해 문제를 해결할 수 있었습니다.

'내일배움캠프 > Android 모의면접' 카테고리의 다른 글

튜터님과 모의면접 #2  (3) 2024.10.27
면접카타 6주차 정리  (1) 2024.10.27
튜터님과의 모의면접 #1  (0) 2024.10.27
면접카타 5주차 정리  (2) 2024.10.27
면접카타 4주차 정리  (0) 2024.10.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함