ํฐ์คํ ๋ฆฌ ๋ทฐ
Android Interview ์ง๋ฌธ ๋ชจ์ - ์ค์ ๋ก ๋ฉด์ ์ ๋์จ ์ง๋ฌธ๋ค ์ ๋ฆฌ
pyorolong 2022. 7. 9. 16:51์ค์ ๋ก ๋ฉด์ ๊ณผ์ ์์ ๋ฐ์๋ ์ง๋ฌธ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
์ด์ค์์๋ ๋๋ตํ์ง ๋ชปํ๋ ๊ฒ๋ค๋ ์๋๋ฐ, ์ด๋ ๊ฒ ์ ๋ฆฌํ๋ฉฐ ๊ณต๋ถํ๋ฉฐ ๋ณด์ํ ์ ์๊ฒ ๋ค.
Computer Sience
ArrayList์ LinkedList์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ๊ณ ๊ฐ ์๋ฃ๊ตฌ์กฐ์ ์ฅ๋จ์ ์ ๋ฐ๋ฅธ ์ ์ ํ ์ฌ์ฉ ์์๋?
- ArrayList : ๋ฐ์ดํฐ๋ค์ด ์์๋๋ก ์ญ ๋์ด์ ๋ฐฐ์ด์ ํ์์ผ๋ก ์ฌ์ด์ฆ๊ฐ ๊ณ ์ ๋์ด ์๋ค
- LinkedList : ๋ฐ์ดํฐ๋ค์ด ์๋ฃ์ ์ฃผ์๊ฐ์ผ๋ก ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ํ์
LinkedList๋ ์์น์ ๊ด๊ณ ์์ด ๊ธฐ์กด์ ๋ฐ์ดํฐ์ ์ญ์ , ์ฝ์ ์ด ๋น ๋ฅด๊ฒ ๊ฐ๋ฅํ ๋ฐ๋ฉด ArrayList๋ O(N)๋งํผ์ ์๋๊ฐ ์์๋จ
๋น๋ฒํ ๋ฐ์ดํฐ์ ์ฝ์ /์ญ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ Linked ๋ฆฌ์คํธ๊ฐ ํจ์ฌ ๋ ์ข์ง๋ง ํน์ ์๋ฃ์ ํ์ํ๊ธฐ ์ํด์๋ ํจ์ฌ ๋ง์ ์๊ฐ์ด ์์๋๋ค.
HashTable์ ๋ฌด์์ธ๊ฐ?
(Key, Value)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋. ๋น ๋ฅธ ๊ฒ์ ์๋๋ฅผ ์ ๊ณตํ๋ค. ํ๊ท ์๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ค.
HashTable๊ณผ HashMap์ ์ฐจ์ด?
๋๊ธฐํ ์ง์ ์ฌ๋ถ์ ์ฐจ์ด. ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํตํด ์์์ ๋๊ธฐํ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด HashTable (put ํจ์์ synchronized), ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ํ์ง ์๊ฑฐ๋ ๋๊ธฐํ๋ฅผ ๊ณ ๋ คํ์ง ์๋ ์ํฉ์ด๋ผ๋ฉด HashMap.
Process Thread์์ critical section๊ณผ race condition์ ๋ํด ์ค๋ช ํด๋ผ
- Critical section(์๊ณ์์ญ) : ๋ณ๋ ฌํ๋ก๊ทธ๋๋ฐ์์ 2๊ฐ ์ด์์ thread๊ฐ ํ๋์ ์์์ ์ ๊ทผํ๋ ๋ช ๋ น๋ฌธ, ํน์ ์ฝ๋์ ์ผ๋ถ
- Race condition : 2๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋ณํ์ ์ผ๋ก(concurrently) ์ฝ๊ฑฐ๋ ์ฐ๋ ๋์์ ํ ๋ ์๋ก ๊ฒฝ์ํ๋ ์ํฉ
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ synchronized(๋๊ธฐํ)์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ค. ์๊ณ์์ญ์์ ์คํ๋๋ ์ค๋ ๋๋ lock์ ํ๋ํ๊ฒ๋๋๋ฐ, ์ด lock์ ์ค์ง ํ๋์ thread๋ง ๊ฐ์ ์ ์๋ค.
Semaphore, Mutex์ ๋ํด ์ค๋ช ํด๋ผ
๊ฒฝ์ํ๋ก์ธ์ค๊ฐ ์ง๋ฉดํ๋ Mutual exclusion, deadlock, starvation์ ์ํ๋ฅผ ์๋ฐฉํ ์ ์๋ ๋ฐฉ๋ฒ๋ค.
- Semaphore : ๊ณต์ ๋ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋ ๊ฒ
- Mutex : ์ฌ๋ฌ ์ค๋ ๋๋ค์ critical section์ ๋ํ ์ ๊ทผ์ด ๊ฒน์น์ง ์๋๋ก 1๊ฐ์ ์ค๋ ๋๋ง ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ
Semaphore์ Mutex์์ ์ฐจ์ด๋ก๋ Semaphore๋ 1๊ฐ์ ์ค๋ ๋๋ง ๋ค์ด๊ฐ๊ฒ ํ ์๋ ์๊ณ , ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๊ฐ ์ ๊ทผ ํ ์ ์๋ ๋ฐ๋ฉด Mutext๋ 1๊ฐ์ ์ค๋ ๋๋ง ์ ๊ทผ ํ ์ ์๋ค.
Concurrency๊ณผ Parallelism
- Concurrency(๋์์ฑ) : Interleaving(์๋ถํ ), ๋ค์์ task๋ฅผ ์กฐ๊ธ์ฉ ๋๋์ด ์คํ
-> 10๋ถ ์์ task 2๊ฐ ์ํ์ context switching ๋น์ฉ์ ์ ์ธํ๊ณ 20๋ถ ์์ - Parallelism(๋ณ๋ ฌ์ฑ) : Parallelizing(๋ณ๋ ฌ์ํ), ๋ค์์ task๊ฐ ๋์์ ์คํ
-> 10๋ถ ์์ task์ 12๋ถ ์์ task๋ฅผ ์ํ ์ 12๋ถ ์์ context switching ํ์ ์์)
Android
์๋๋ก์ด๋ 4๋ ์ปดํฌ๋ํธ์ ๋ํ ์ค๋ช
Activity LifeCycle
OS ๋ฒ์ ์ ๋ฐ๋ผ Braodcast๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ถํ์ด ์ถ์ ๋์๋๋ฐ ์ด๋ป๊ฒ ์ถ์๋์๋์ง, ์ด์ ๋ฐ๋ฅธ ๋์๋ฐฉ์์?
Doze๋ชจ๋์ ๋ํด ์ค๋ช ํ๊ณ ์ด์ ๋ฐ๋ฅธ ๋์๋ฐฉ์์?
PendingIntent๋ ๋ฌด์์ธ๊ฐ?
- Pending์ ์ฌ์ ์ ์๋ฏธ : ๋ณด๋ฅ, ์๋ฐ, ๊ณง ์์
- ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ๊ถํ์ ํ๊ฐํ์ฌ ๋น์ฅ ์ํํ์ง ์๊ณ ํน์ ์์ ์ ์ํํ๋๋ก ํจ
OnNewIntent()๋ ๋ฌด์์ธ๊ฐ?
DI ๋ผ์ด๋ธ๋ฌ๋ฆฌ Koin๊ณผ Hilt์ ์ฐจ์ด์ ์?
Thread์ Coroutine์ ๊ฐ๊ฐ ๋ฌด์์ด๊ณ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง?
Tread
- Task ๋จ์ : Thread
- Concurrency ๋ณด์ฅ ์๋จ : Context switching (blocking ํด๋น ๊ตฌ๋ฌธ์ด ๋๋ ๋ ๊น์ง ๋ค๋ฅธ Thread๋ฅผ blocking)
- ์์ฒด stack ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์
Coroutine
- Task ๋จ์ : Object
- Concurrency ๋ณด์ฅ ์๋จ : Suspend (non-blocking ํด๋น ๊ตฌ๋ฌธ์ด ๋๋ ๋ ๊น์ง awaits ํ์๋ค๊ฐ ๋๋๋ฉด ๋ค์ ์ด์ด ๋๊ฐ)
- task๋ง๋ค stack ์์ญ์ ๊ฐ์ง ์์๋ ๋จ
data class๋ ๋ฌด์์ธ๊ฐ?
Data ๋ณด๊ด ๋ชฉ์ ์ผ๋ก ๋ง๋ ํด๋์ค. getter(), setter(), toString(), hashCode(), equals(), copy() ๋ฑ์ ๋ฉ์๋๋ฅผ ๋ง๋ค์ง ์์๋ ๋์ด ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค.
sealed class๋ ๋ฌด์์ธ๊ฐ?
์์ ํด๋์ค๋ฅผ ์์ํ ํ์ ํด๋์ค ์ ์๋ฅผ ์ ํ ํ ์ ์๋ Enum ํด๋์ค์ ํ์ฅ ํํ. Enum ํด๋์ค์๋ ๋ค๋ฅด๊ฒ ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ์์ฑ ํ ์ ์๋ค.
suspend ํจ์๋ ๋ฌด์์ด๊ณ ์๋ ์๋ฆฌ
Coroutin Scope ๋ด์์๋ง ์ํ ํ ์ ์๋ ์ผ์์ค๋จ์ด ๊ฐ๋ฅํ ํจ์. ์ค๋ ๋๋ฅผ blockํ์ง ์๊ณ ํน์ ์์ ์ด suspend๋ ์ดํ resume ๋ ๋ ๊น์ง ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
์๋ ์๋ฆฌ?
Collection์ map, filter์ ๊ฐ์ ์ฐ์ฐ๋ค์ด ์๋๋ฐ ์ผ๋ฐ ์ฐ์ฐ๊ณผ ์ํ์ค ์ฐ์ฐ์ ์ฐจ์ด
Livedata์ value, post value์ ์ฌ์ฉ์ ์ฐจ์ด์ ๋ด๋ถ ๊ตฌํ์ ์ฐจ์ด
setValue()
Main ์ค๋ ๋์์ LiveData ๊ฐ์ ๋ณ๊ฒฝ. ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
postValue()
Backgroud ์ค๋ ๋์์ LiveData ๊ฐ์ ๋ณ๊ฒฝ ํ ๋ ์ฌ์ฉ. backgroud ์ค๋ ๋์์ ๋์ํ๋ค๊ฐ main ์ค๋ ๋์ ๊ฐ์ post ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ. ์๋๋ postValue()์ ๋ด๋ถ ์ฝ๋์ด๋ค.
new Handler(Looper.mainLooper()).post(() -> setValue())
CleanArchitecture์ UseCase๋ ๋ฌด์์ธ๊ฐ?
Coroutine Dispatcher์ ์ข ๋ฅ์ ๊ฐ๊ฐ์ ๋ํ ์ค๋ช
flow๋?
Mutable ๋ณ์๋ฅผ Imutable ๋ณ์๋ก ๋ณํํ์ฌ ์ฌ์ฉํ๋ ์ด์
Activity์ ์๋ช ์ฃผ๊ธฐ์ Fragment์ ์๋ช ์ฃผ๊ธฐ์ ์ฐจ์ด
LifeCycleOwner๋ ๋ฌด์์ธ๊ฐ?
Pacelable๊ณผ Serializable์ ์ฐจ์ด
Android ์ด๋ฏธ์ง ์บ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Lru์บ์ฌ์ ๋ํด ์ค๋ช ํด๋ผ
๋ช ์์ Intent์ ์์์ Intent์ ์ฐจ์ด
Jar๊ณผ AAR์ ์ฐจ์ด
Resํ์ผ์ ํฌํจ ์ฌ๋ถ์์ ์ฐจ์ด AAR์ ๋ฆฌ์์ค ํ์ผ๋ค๋ ํจ๊ป ๋ผ๋ฆฌ๋ธ๋ฌํ ๋จ
onSavedInstance ํธ์ถ ์์
Activity์์ Dialog๊ฐ ๋ณด์ฌ์ง ๋ LifeCycle ์ด๋ฒคํธ๊ฐ ํธ์ถ์ด ๋๋์ง?
Dalvik๊ณผ ART์ ์ฐจ์ด
Dalvik
- JIT(Just In Time) ์ปดํ์ผ ๋ฐฉ์: ์ฑ ๊ตฌ๋์ค ์ค์๊ฐ์ผ๋ก ์ปดํ์ผ -> ์ค์น์ ์๋๊ฐ ๋น ๋ฅด์ง๋ง ์คํ ์ ๋๋ฆผ
- Register based VM (JVM์ stack based)์ผ๋ก ์ฌ๋ฌ ๊ฐ VM ์ธ์คํด์ค๋ฅผ ์คํ ๊ฐ๋ฅ, ํ๋ก์ธ์ค ๋ ๋ฆฝ์ฑ
- .class ํ์ผ์ .dex๋ก ๋ณํ (VM์ .class๋ฅผ .jar๋ก ๋ณํ)
ART(Android Run TIme)
- AOT(Ahead Of Time) ์ปดํ์ผ ๋ฐฉ์ -> ์ค์น ์๋๊ฐ ๋๋ฆฌ์ง๋ง ์คํ ์ ๋น ๋ฆ
- ์ค์น ์ฉ๋์ด ๋ง์ด ํ์
- Nugat ๋ฒ์ ์ดํ์๋ AOT + JIT ์ปดํ์ผ๋ฌ๋ฅผ ํ์ฌํ์ฌ ์ ์ฐํ๊ฒ ์ ์ฉ
inner class๋ ์ static์ผ๋ก ์ ์ธ๋์ด์ผ ์ข์๊ฐ
Fragment parameter๋ฅผ onNewInstance๋ฅผ ํตํด ๋๊ฒจ์ค์ผ ํ๋ ์ด์
databinding๊ณผ viewBinding์ ์ฐจ์ด
์ compose๋ฅผ ์จ์ผํ๋
- Total
- Today
- Yesterday
- android launch mode in manifest
- viewmodel
- decomplie
- android databinding
- AAR
- Make onClick event in Android databinding
- Cannot create an instance
- The requested URL returned error
- custom setter
- android aar library
- custom getter
- com.android.build.api.transform.TransformException
- databinding onclick not working
- module-info is missing a super type
- android
- Please use a personal access token instead
- Support for password authentication was removed on August 13
- AndroidManifest
- android aar
- databinding onClick
- Effective Kotlin
- annotaion
- How to import android AAR file
- Kotlin
- Hilt
- import aar
- DexArchiveBuilderException
- GitHub
- launchemode
- aar import
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |