매주 하나의 주제를 통해 모의 면접을 진행하는 스터디
- 1주차: JAVA
- 2주차: Kotlin
- 3주차: Android
- 미정: Android, OOP/Architecture, Coroutine/Flow, CS
그 주차 스터디 주제를 바탕으로 면접자 2명, 피면접자 1명, 관찰자 1명으로 모의 면접 진행한다.
- 20~30분 질문
- 10분 피드백
- 2명 끝나면 휴식
- 스터디 시간을 엄수한다.(지각 시 5000원 벌금)
- 질문 답변 최소 12개 이상 작성해온다.(못해오면 1개당 1000원 벌금)
규칙 불이행시 이 레포지토리에 박제된다.
- 접근 제어자의 차이점
- 인터페이스와 추상 클래스의 차이
- static과 non-static의 차이
- final 키워드에 대해 설명
- Java 파일이 실행되는 과정
- Optional에 대한 설명과 사용 시 주의사항
- try-with-resources에 대해 설명
- String 클래스는 어떻게 구현되나요? 왜 불변으로 만들었나요?
- String이 불변이라는 것은 무엇을 의미하나요?
- Integer vs int
- Call by Value vs Call by Reference
- 동등성과 동일성의 차이
- 깊은 복사(deep copy)와 얕은 복사(shallow copy)에 대해 설명
- 익명함수와 람다 표현식에 대해 설명
- 함수형 인터페이스(Functional Interface)란
- abstract class vs interface
- 제네릭이란
- Reflection에 대한 설명과 장단점
- Enum의 장단점
- Wrapper Class, Boxing, Unboxing 차이
- 오버로딩과 오버라이딩의 차이
- synchronized 키워드에 대해 설명
- Iterator & Collection & Stream
- Stack 대신 Deque를 사용하는 이유
- ArrayList와 LinkedList의 차이
- Set과 List의 차이
- Arrays Vs ArrayLists
- HashSet Vs TreeSet
- HashMap Vs Set
- List.distinct()를 사용하는 것과 Set 사용하는 것의 차이
- HashMap Vs HashSet
- 컬렉션 프레임워크란 (Kotlin Collection과 비교)
- for문 vs Stream vs Sequence
- Java Stream API란 (Kotlin Sequence와 차이)
- 코틀린의 장점
- 코틀린이 실행되는 과정 설명
- Property 란?
- Field vs Property
- Kotlin에서 const를 사용하는 이점은?
- Kotlin에서 lateinit vs by Lazy?
- lateinit 변수가 초기화되었는지 확인하는 방법
- Kotlin에서 init 블록이란?
- val과 var의 차이점은?
- Generic이란?
- Generic 타입 상한 제한(upper bound)이란?
- Generic 변성에 대해 설명하시오
- Star Projection 이란?
- Kotlin에서 inline 함수란?
- Kotlin에서 reified 키워드란?
- backing property 설명해주세요.
- noinline이란?
- crossinline이란?
- open 키워드란?
- Kotlin 접근 제어자
- infix 키워드란?
- Kotlin의 Lable이란?
- 일급 시민이란?
- 타입 변환(Type Conversion) vs 타입 캐스팅(Type Casting)
- data class를 사용하면 자동으로 오버라이드 되는 메서드들
- Enum class를 사용한 경험이 있는가?
- Enum class 대신 sealed class와 object를 사용할 수 있는데, 언제 Enum class를 사용해야 하는가?
- companion object란?
- object와 data object의 차이
- Kotlin에서 싱글톤 클래스를 생성하는 방법
- Kotlin에서 데이터 클래스란?
- Kotlin에서 Java의 정적 메서드에 해당하는 것은?
- Kotlin의 sealed class를 언제 사용하나요?
- Kotlin의 JvmStatic 어노테이션이란?
- Kotlin의 JvmField 어노테이션이란?
- Kotlin의 JvmOverloads 어노테이션이란?
- Kotlin의 inline/value 클래스 설명
- Kotlin에서 open과 public의 차이점은?
- Kotlin에서 고차 함수란?
- Kotlin에서 람다식이란?
- Kotlin에서 let, run, with, also, apply의 설명 및 사용 사례
- apply와 with를 선택하는 방법
- DIP(Dependency Inversion Principle)란?
- ConstraintLayout의 장점은?
- Activity 생명 주기는?
- WeakReference란?
- Parcelable이란?
- 고해상도 이미지의 로딩 방법은?
- 네트워크 에러 처리 관련 경험
- Android 앱이 왜 느려질 수 있는가?
- Context란 무엇이며, 어떻게 사용되는가?
- Android 애플리케이션의 구성 요소
- Android 애플리케이션의 프로젝트 구조
- AndroidManifest.xml이란 무엇인가?
- Application 클래스란 무엇이며, 역할은 무엇인가?
- Android 4대 컴포넌트는 무엇인가요
- 다국어 지원은 어떻게 하나요
- Fragment를 생성할 때 기본 생성자를 사용하는 것이 왜 권장되는가?
- Activity 생명주기
- onCreate()와 onStart()의 차이점
- onPause()와 onStop() 없이 onDestroy가 호출될 수 있는 경우
- setContentView()를 onCreate()에서 호출하는 이유
- onSaveInstanceState()와 onRestoreInstanceState()의 역할
- Fragment 생명주기
- launchMode란 무엇인가?
- Fragment와 Activity의 차이점 및 관계
- Fragment와 Activity 중 어느 경우에 Fragment를 사용하는가?
- FragmentPagerAdapter와 FragmentStatePagerAdapter의 차이점
- Backstack에서 Fragment를 추가 및 교체할 때 차이점
- Fragment 간의 통신 방법
- Retained Fragment란?
- Fragment 트랜잭션에서 addToBackStack()의 목적
- Fragment add와 replace 차이
- View란 무엇인가?
- View.GONE과 View.INVISIBLE의 차이점
- 커스텀 뷰 생성 방법
- ViewGroup이란 무엇이며, View와 어떻게 다른가?
- Canvas란?
- SurfaceView란?
- Relative Layout과 Linear Layout의 차이
- ConstraintLayout이란?
- View 트리란 무엇이며, 깊이를 최적화하는 방법
- inflate에 대해 설명해주세요
- ListView와 RecyclerView의 차이점
- RecyclerView의 내부 동작
- RecyclerView 성능 최적화 방법
- Nested RecyclerView 최적화 방법
- RecyclerView가 ListView보다 성능이 우수한 이유
- RecyclerView의 구성 요소
- RecyclerView.Adapter와 ListAdapter의 차이점
- convertView 재활용과 ViewHolder 패턴
- RecyclerView.Adapter 및 RecyclerView.ViewHolder의 역할
- LayoutManager란?
- 단일 RecyclerView에서 여러 뷰 유형을 처리하는 방법
- DiffUtil과 RecyclerView 성능 개선
- RecyclerView와 ListAdapter에서의 DiffUtil 차이점
- RecyclerView.setHasFixedSize(true)의 목적
- RecyclerView에서 특정 항목을 업데이트하는 방법
- SnapHelper란 무엇인가?
- Dialog란?
- Toast란?
- Dialog와 DialogFragment의 차이점
- Intent란?
- 암시적(Implicit) Intent란?
- 명시적(Explicit) Intent란?
- BroadcastReceiver란?
- Sticky Intent란?
- 브로드캐스트와 인텐트를 통해 앱에서 메시지를 전달하는 방법
- PendingIntent란?
- 브로드캐스트의 유형
- Intent 필터
- IntentFilter 란?
- Service란?
- Service와 IntentService의 차이점
- Foreground Service란?
- JobScheduler란?
- Background Service란?
- 두 개의 별도 Android 앱 간의 상호작용 방법
- Android 앱을 여러 프로세스에서 실행할 수 있는지 여부와 방법
- AIDL이란? 바운드 서비스 생성 시 AIDL 사용 단계
- Android에서 백그라운드 처리 방법
- ContentProvider의 역할과 일반적인 용도
- Android 메모리 누수와 가비지 컬렉션
- Bitmap 처리 방법
- Bitmap 풀 사용 방법
- Android에서 사이즈가 큰 이미지를 불러올려고 합니다. 어떻게 해야할까요?
- SharedPreferences의 commit()과 apply() 차이
- Android 앱에서 데이터 유지 방법
- ORM이란? 작동 원리
- 화면 회전 시 Activity 상태 보존 방법
- Android 앱의 데이터 저장 방식
- Scoped Storage 설명
- 데이터 암호화 방법
- SharedPreferences의 commit()과 apply() 차이
- Spannable이란?
- SpannableString이란?
- Android에서 텍스트 사용 시 모범 사례
- 다크 모드 구현 방법
- onTrimMemory() 메서드
- OutOfMemory 문제 해결 방법
- Android 애플리케이션의 메모리 누수 확인 방법
- 배터리 사용량을 줄이는 방법
- Doze 및 App Standby란?
- Overdraw란?
- 다양한 해상도를 지원하는 방법
- dp sp px 차이
- 권한 보호 수준과 종류
- Serializable과 Parcelable의 차이
- 데이터 전달 시 Bundle 클래스를 사용하는 이유
- 앱 충돌 문제 해결 방법
- Android 푸시 알림 시스템 설명
- FlatBuffers와 JSON 차이
- HashMap, ArrayMap, SparseArray의 차이점
- Annotation이란?
- 커스텀 Annotation 생성 방법
- 지원 라이브러리란? 도입 이유
- Android Data Binding 설명
- apk와 aab 차이 설명
- Android 배포 프로세스에 대해 설명해주세요
- Kapt에 대해 설명해주세요
- KAPT와 KSP의 차이점
- 의존성 순환 참조(Circular Dependency)가 발생하면 어떻게 해결하실 건가요?
- App Startup Library의 역할
- Android Jetpack이란? 사용 이유
- ViewModel이란? 유용성
- Android 아키텍처 구성 요소 설명
- LiveData란?
- LiveData와 ObservableField의 차이점
- setValue와 postValue의 차이점
- Fragment 간 ViewModel 공유 방법
- WorkManager와 사용 사례
- ViewModel의 내부 작동 방식
- MVVM viewModel과 AAC viewModel 차이
- Jetpack DataStore Preferences
- Room 데이터베이스 마이그레이션은 어떻게 처리하나요?
- 의존성 주입 프레임워크(Dagger)를 사용하는 이유
- Dagger의 작동 방식
- Dagger 2와 Dagger-Hilt의 선택 기준
- Dependency Injection이란 무엇이며, 안드로이드에서 이를 구현하는 방법은 무엇인가요?
- Hilt란?
- Dagger란?
- DIP(Dependency Inversion Principle)란?
- Qualifier란 무엇이며, 언제 사용하나요?
- Hilt 의존성 주입 프레임워크에서 @Bind와 @Provide의 차이점은 무엇인가요?
- Dagger에서 Component란?
- Dagger에서 Module이란?
- Koin과 Hilt의 차이점은 무엇이며, 어떤 상황에서 Koin을 선택하실 건가요?
- 네트워킹에서 Multipart 요청을 처리하는 방법
- OkHttp Interceptor 설명
- OkHttp HTTP 캐싱
- 직렬화 라이브러리 Kotlinx-Serialization, Gson, Moshi의 차이점
- MVC vs MVP vs MVVM vs MVI 아키텍처
- 클린 아키텍처란 무엇인가요?
- 소프트웨어 아키텍처와 소프트웨어 설계의 차이점
- Repository 패턴
- 구글 권장 아키텍처 vs 클린 아키텍처
- UDF
- ANR이란? ANR 방지 방법
-
코루틴 사용 시 예외 처리 방법
- RxJava란?
- RxJava에서의 에러 처리 방법
- FlatMap과 Map 연산자의 차이점
- RxJava의 Create와 fromCallable 연산자의 사용 시점
- RxJava의 defer 연산자의 사용 시점
- RxJava에서 Timer, Delay, Interval 연산자의 사용 방법
- RxJava에서 두 개의 네트워크 호출을 병렬로 수행하는 방법
- Concat과 Merge 연산자의 차이
- RxJava에서 Subject란?
- RxJava의 Observable 유형과 사용 시점
- RxJava를 사용한 검색 기능 구현 방법
- RxJava 연산자를 사용한 RecyclerView의 페이지네이션
- RxJava에서 Schedulers.io()와 Schedulers.computation()의 차이점
- RxJava에서 CompositeDisposable의 dispose와 clear 호출 시점
- Gradle이 무엇이며, 안드로이드 빌드 시스템에서 어떻게 활용되나요?
- Gradle에서 setting.gradle.kts 와 build.gradle.kts 차이
- Gradle 빌드 프로세스에 대해 설명하시오
- Gradle에서 Plugin 과 Dependency 차이
- compileSdkVersion vs targetSdkVersion vs minSdkVersion 에 대해 설명하시오
- targetSdkVersion 과 compileSdkVersion를 일치시키는게 좋은 이유는?
- 호환성 모드란?
- AGP가 무엇인가요?
- Dalvik, ART, JIT, AOT의 차이
- ART(Android Runtime)란?
- AAPT란?
- Proguard의 원리는?
- DEX란?/Multidex란?
- 가비지 수집을 강제 호출할 수 있는지 여부
- Android 앱이 APK(Android Package) 파일로 빌드되는 과정
- NDK란? 유용성
- Renderscript란?
- Dynamic Programming이란?
- 여러 스레드에서 공유 자원 접근 시 주의 사항
- 동시성 문제를 겪은 경험이 있는가?
- 동기화하는 방법?
- synchronized를 메소드 블록과 내부 블록에서 사용하는 것의 차이
- 싱글톤을 사용한 경험과 동시성 문제
- HDD, SSD, DRAM 각각의 성능은?
- Cache란?
- Garbage Collection이란?
- 비대칭 암호화란?