동시성 면접 질문
iOS 면접 질문 50문항을 풉니다. 주제는 GCD, OperationQueue, async/await, Actor, Sendable, 데이터 레이스입니다.
- 동시성주관식
GCD 기본
GCD(Grand Central Dispatch)가 무엇이고, 스레드를 직접 만드는 것 대신 왜 큐에 작업을 넘기는 방식을 쓰나요?
#gcd #dispatch-queue #thread-pool #serial
- 동시성객관식
동기/비동기와 직렬/동시
sync/async와 serial/concurrent 큐에 대한 설명으로 맞는 것을 모두 고르세요.
#sync #async #serial #concurrent
- 동시성주관식
메인 스레드와 UI
UIKit 화면에서 네트워크 응답 콜백에 label.text = result를 했더니 가끔 화면이 늦게 바뀌거나 아예 안 바뀝니다. 원인이 무엇인가요?
#main-thread #ui #main-actor #runloop
- 동시성객관식
순차 await 와 async let
Swift Concurrency 에서 fetchProfile()과 fetchFeed()가 각각 1초 걸린다고 할 때, 다음 두 코드의 총 소요 시간에 대한 설명으로 옳은 것은? …
#async-await #async-let #parallel #sequential
- 동시성객관식
iOS 동시성 도구 종류
iOS에서 백그라운드 실행(동시성)을 구현하는 수단으로 적절한 것을 모두 고르세요.
#thread #gcd #operationqueue #async-await
- 동시성주관식Oracle출처 확인 안 됨
iOS 동시성 수단 선택
새 iOS 기능에서 네트워크 결과를 여러 화면이 공유하고 UI도 갱신해야 합니다. Swift Concurrency의 async/await, Task, actor를 각각 어떤 역할에 쓰겠습니까?
#swift-concurrency #async-await #actor #mainactor
- 동시성객관식
serial 큐 자기 sync
UIKit 뷰컨트롤러의 viewDidLoad(메인 스레드)에서 다음 GCD 코드를 실행하면? …
#deadlock #sync #main-queue #serial
- 동시성주관식
GCD vs OperationQueue
이미지 다운로드 → 리사이즈 → 디스크 캐시 저장 파이프라인을 만드는데, 사용자가 스크롤하면 진행 중인 작업을 취소해야 합니다. GCD와 OperationQueue 중 무엇을 고르겠습니까?
#operationqueue #operation #gcd #dependency
- 동시성객관식
QoS
사용자가 버튼을 눌러 결과를 기다리고 있는 상황에서 JSON 파싱을 GCD 백그라운드 큐로 보내려 합니다. 가장 적절한 QoS는?
#qos #quality-of-service #priority #global-queue
- 동시성주관식
레이스 컨디션
여러 스레드에서 호출되는 아래 코드는 count가 기대보다 작게 나옵니다. 왜 그런지 CPU 수준에서 설명해 주세요. …
#race-condition #data-race #lock #serial-queue
- 동시성객관식
배리어와 reader-writer
GCD 동시 큐로 만든 다음 캐시 구현에서 .barrier 플래그의 역할로 옳은 것은? …
#barrier #concurrent-queue #reader-writer #gcd
- 동시성주관식
여러 비동기 작업 조합
화면 진입 시 프로필·피드·알림 API 3개를 병렬로 호출하고 모두 끝났을 때 한 번에 UI를 그려야 합니다. GCD로 구현한다면 어떻게 하겠습니까?
#dispatchgroup #semaphore #async-let #taskgroup
- 동시성객관식
세마포어와 뮤텍스
DispatchSemaphore와 뮤텍스(NSLock, Mutex)에 대한 설명으로 맞는 것을 모두 고르세요.
#semaphore #mutex #lock #synchronization
- 동시성주관식
async/await 동작 원리
Swift Concurrency에서 await를 만나면 실제로 무슨 일이 일어나고, 스레드가 블로킹되는 것과는 어떻게 다른가요?
#async-await #suspension #continuation #cooperative-thread-pool
- 동시성주관식
Task의 동작
Swift Concurrency에서 Task { }를 만들면 그 코드는 언제, 어디서 실행되나요?
#task #unstructured #detached #inheritance
- 동시성객관식
Combine 연산자와 스케줄러
검색창 입력마다 API를 호출하지 않고 '입력이 멈춘 뒤 300ms'에 한 번만 호출하고, 결과는 메인 스레드에서 받으려 합니다. 올바른 Combine 파이프라인은?
#combine #debounce #throttle #scheduler
- 동시성주관식
RunLoop
스크롤하는 동안 화면의 카운트다운 Timer가 멈췄다가 스크롤이 끝나면 한꺼번에 따라잡습니다. RunLoop 관점에서 원인이 무엇인가요?
#runloop #timer #main-thread #runloop-mode
- 동시성주관식Walmart출처 확인 안 됨
class vs actor, @MainActor
Swift에서 class와 actor의 차이는 무엇인가요?
#actor #mainactor #isolation #class
- 동시성주관식Capital One
Combine zip vs combineLatest
서로 다른 두 네트워크 요청(사용자 프로필, 계좌 목록)을 Combine으로 동시에 보내고 둘 다 완료됐을 때만 결과를 한 번 내보내는 파이프라인을 작성해 보세요. zip과 combineLatest 중 무엇을 쓰고 왜인가요?
#combine #zip #combinelatest #network
- 동시성객관식Xiaohongshu
concurrent 큐 자기 sync와 스레드 생성
다음 GCD 코드의 출력 결과는? 그리고 queue.async가 호출될 때마다 새 스레드가 만들어지나요? …
#gcd #concurrent #sync #thread-pool
- 동시성주관식DiDi
의존 작업 조합
독립적인 작업 A, B, C가 있습니다. C는 반드시 A와 B가 모두 끝난 뒤 실행돼야 하고, A와 B의 순서는 상관없으며 서로 중첩하지 않습니다. 구현 방법을 장단점과 함께 아는 대로 말해 주세요.
#dispatchgroup #barrier #operationqueue #async-let
- 동시성주관식Flipkart
검색 디바운스 구현
검색창에 글자를 입력할 때마다 API를 호출하면 요청이 폭주합니다. 마지막 입력 후 300ms 동안 추가 입력이 없을 때만 호출되도록 디바운스를 GCD로 직접 구현해 보세요.
#debounce #dispatchworkitem #task #cancellation
- 동시성주관식CRED
느린 API와 화면 이탈
상세 화면에 들어가면 아래처럼 API를 호출해 데이터를 보여줍니다. … 면접관이 묻습니다. "응답이 오기 전에 사용자가 뒤로 가기를 누르면 어떻게 되죠?" 이 코드에서 생길 수 있는 문제와, 떠난 화면의 요청이 낭비되지 않게 하는 해결책을 설명하세요.
#cancellation #task #weak-self #timeout
- 동시성주관식Grindr출처 확인 안 됨
UI 스레드와 백그라운드 작업
이미지 변환과 API 응답 처리가 있는 UIKit 화면에서 스크롤이 멈춥니다. 어떤 작업을 main actor 밖으로 보내겠습니까?
#mainactor #background-work #uikit #threading
- 동시성주관식Zalando출처 확인 안 됨
공유 캐시의 data race
여러 이미지 요청이 같은 메모리 캐시 딕셔너리를 동시에 읽고 씁니다. 가끔 크래시가 나고, 로그를 보면 같은 URL을 두 번 내려받은 흔적도 있습니다. Lock 대신 actor로 고친다면 어떤 상태를 actor 안에 두겠습니까?
#actor #data-race #cache #inflight
- 동시성주관식Square
구조적 취소 전파
검색어가 바뀔 때 이전 검색의 네트워크, 디코딩, 이미지 작업이 모두 멈춰야 합니다. 부모 Task와 자식 Task의 취소 전파를 이용해 작업 트리를 어떻게 구성하겠습니까?
#cancellation #structured-concurrency #task-group #search
- 동시성주관식Intuit출처 확인 안 됨
동시 요청의 최신 상태만 적용
세금 요약 화면에서 필터를 빠르게 바꾸면 여러 API 요청이 거의 동시에 끝납니다. 마지막에 고른 필터의 결과만 화면에 남게 하려면 요청과 상태 변경을 어떻게 관리하겠습니까?
#stale-response #cancellation #state #concurrency
- 동시성주관식HSBC출처 확인 안 됨
async let과 TaskGroup
뱅킹 앱 홈에서 서로 독립적인 계좌, 카드, 알림 데이터를 동시에 가져와야 합니다. async let과 TaskGroup 중 무엇을 어떤 기준으로 고르겠습니까?
#async-let #taskgroup #fanout #error-handling
- 동시성주관식Razorpay
DispatchGroup fan-out 오류 처리
콜백 기반으로 짜인 결제 앱에서 독립 API 세 개가 모두 끝난 뒤 결제 요약을 만들어야 합니다. DispatchGroup의 enter와 leave를 어디에 두어 짝을 맞추겠습니까?
#dispatchgroup #callbacks #fanout #errors
- 동시성주관식Apple
데드락 진단
QA에서 "가끔 앱이 완전히 멈추는데 크래시 로그는 없다"는 리포트가 왔습니다. 데드락을 의심할 때 어떤 순서로 원인을 찾겠습니까?
#deadlock #debugging #lldb #lock-ordering
- 동시성객관식
구조화된 동시성
구조화된 동시성(async let, TaskGroup)에 대한 설명으로 맞는 것을 모두 고르세요.
#structured-concurrency #async-let #taskgroup #cancellation
- 동시성객관식
Sendable
Swift 6 strict concurrency에서 추가 조치 없이 Sendable로 취급되는(또는 자동 채택되는) 것을 모두 고르세요.
#sendable #swift-6 #strict-concurrency #value-type
- 동시성주관식
Swift 6 마이그레이션
completion handler와 GCD로 짜인 대형 앱을 Swift 6 strict concurrency로 옮기라는 과제를 받았습니다. 어떤 순서로 옮기겠습니까?
#swift-6 #strict-concurrency #migration #completion-handler
- 동시성주관식
MainActor 격리
Swift Concurrency에서 @MainActor를 뷰모델 클래스 전체에 붙이는 것과 특정 메서드에만 붙이는 것은 무엇이 다른가요?
#mainactor #global-actor #nonisolated #isolation
- 동시성주관식
Thread Sanitizer
Thread Sanitizer는 어떤 원리로 데이터 레이스를 잡나요?
#tsan #thread-sanitizer #data-race #debugging
- 동시성주관식Snap출처 확인 안 됨
비동기 네트워크 클라이언트 설계
Swift Concurrency(async/await, actor)로 여러 화면에서 동시에 쓰는 네트워크 클라이언트 API를 설계해 보세요. 메인 스레드를 절대 막지 않아야 하고, 같은 요청 중복 제거·취소·재시도가 필요합니다. 인터페이스와 내부 동시성 구조를 설명해 주세요.
#design #network-client #async #cancellation
- 동시성주관식
지연 작업 취소
DispatchQueue.main.asyncAfter(deadline: .now() + 2) { showTooltip() }로 예약한 작업을 사용자가 2초 안에 화면을 떠나면 취소해야 합니다. GCD로는 어떻게 구현하겠습니까?
#dispatchworkitem #asyncafter #cancellation #task-sleep
- 동시성주관식PayPal
completion handler → async/await 점진 이전
완료 핸들러(completion handler) 기반으로 짜인 오래된 네트워킹 계층이 있고 앱 전체에서 수백 곳이 호출합니다. 호출부를 한꺼번에 깨뜨리지 않고 async/await로 옮기려면 어떻게 하겠습니까?
#async-await #continuation #migration #cancellation
- 동시성주관식PhonePe
동시 다운로드, 순서 보장 표시
이미지 id 배열 [3, 1, 2]가 주어집니다. 각 이미지를 동시에 다운로드하되, 화면에는 id 순서(1, 2, 3)대로 표시해야 합니다. Swift Concurrency로 어떻게 구현하겠습니까?
#taskgroup #structured-concurrency #ordering #cancellation
- 동시성객관식Zomato
중첩 큐 출력 예측
다음 GCD 코드를 메인 스레드에서 실행합니다. 출력 결과는? …
#gcd #main-queue #sync #deadlock
- 동시성객관식Kuaishou
직렬/동시 큐의 sync 대기 시간
GCD 큐를 받는 다음 함수를 메인 스레드에서 호출하면 반환까지 약 몇 초가 걸릴까요? queue가 (1) 직렬 큐일 때와 (2) 동시(concurrent) 큐일 때를 각각 답하세요. …
#gcd #serial #concurrent #sync
- 동시성객관식NetEase
무락 증가 연산의 결과 범위
다섯 개의 스레드가 공유 변수 count(초기값 0)에 대해 각각 count += 1을 20번씩, 락 없이 실행합니다. 모두 끝났을 때 count가 가질 수 있는 값의 범위는? (증가는 읽기 → 더하기 → 쓰기 세 단계로 이뤄지고, 각 단계 사이에 다른 스레드가 끼어들 수 있다고 가정)
#race-condition #data-race #atomicity #lock
- 동시성주관식ByteDance
다중 읽기·단일 쓰기 큐
프로퍼티를 '여러 스레드가 동시에 읽되 쓰기는 한 번에 하나만' 되게 만들려고 합니다. Objective-C 시절엔 getter에서 dispatch_sync, setter에서 dispatch_barrier_async를 쓰는 패턴이 있었는데, 면접관이 묻습니다. "getter가…
#gcd #barrier #reader-writer #objective-c
- 동시성주관식Microsoft
딕셔너리 캐시의 스레드 안전
메시지 목록 화면에서 셀마다 프로필 이미지를 비동기로 내려받아 [String: UIImage] 딕셔너리에 캐시합니다. 여러 스레드가 동시에 읽고 쓰면서 가끔 크래시가 납니다. 왜 크래시가 나나요?
#thread-safety #dictionary #nscache #lock
- 동시성주관식Dropbox
동일 URL 다운로드 합치기
사진 그리드에서 여러 셀이 같은 사진 URL을 동시에 요청하지만 네트워크 다운로드는 한 번만 해야 합니다. actor 안에서 in-flight Task를 어떻게 보관해 요청을 합치겠습니까?
#actor #image-download #deduplication #task
- 동시성주관식
actor 재진입성
Swift Concurrency 로 만든 아래 이미지 캐시 actor는 같은 키에 대해 네트워크 요청이 두 번 나가는 경우가 있습니다. actor가 상태를 보호해 주는데도 왜 이런 일이 생기나요? …
#actor #reentrancy #isolation #await
- 동시성객관식
협력적 취소
Swift Concurrency 의 다음 코드에서 t.cancel() 직후 실제로 일어나는 일로 옳은 것은? …
#cancellation #task #checkcancellation #task-sleep
- 동시성주관식Amazon
디스패치 큐 직접 설계
GCD 없이 MyQueue를 직접 설계해 보세요. async(_:)로 클로저를 넣으면 백그라운드 스레드 풀이 실행하고, serial/concurrent 모드를 지원하며, sync(_:)도 제공해야 합니다. 핵심 자료구조와 동기화 원리를 설명해 주세요.
#design #queue #thread-pool #condition-variable
- 동시성주관식
실시간 처리 파이프라인
카메라 프리뷰에 실시간 필터를 적용하는 앱을 만듭니다. 60fps를 유지하면서 메모리 안전성(버퍼 누수·경합 없음)을 지켜야 합니다. 캡처 → 처리 → 렌더 파이프라인을 어떤 스레드/큐 구조로 설계하겠습니까?
#realtime #video #60fps #backpressure
- 동시성주관식
Swift 6 빌드와 싱글톤 경쟁 상태
과제로 제출한 앱은 static let shared로 만든 싱글톤 ImageCache(내부에 var storage: [URL: UIImage])를 여러 화면이 백그라운드 큐에서 읽고 씁니다. 면접관이 묻습니다. "이 프로젝트를 Swift 6 언어 모드로 빌드하면 어떤 일이 생길까요?"
#swift6 #strict-concurrency #sendable #singleton