مصاحبه فنی — فرآیند ارزیابی مهارتهای توسعهدهنده از طریق یک سری مصاحبه و وظایف عملی. در توسعه موبایل شامل بررسی دانش پلتفرم (Android SDK, UIKit, SwiftUI)، الگوریتمها و ساختمان دادهها، الگوهای معماری (MVVM, Clean Architecture, MVI) و طراحی سیستم اپلیکیشن موبایل است. شرکتهای بزرگ از ۳ تا ۵ راند برگزار میکنند، میانگین زمان استخدام ۴-۶ هفته است. به گزارش LinkedIn Talent Report 2025، تقاضا برای مهندسان iOS و Android در دو سال ۳۴٪ افزایش یافته است.
نکات اصلی
مصاحبه فنی — فرآیند ساختاریافته ارزیابی شایستگیهای حرفهای توسعهدهنده، شامل بررسی hard skills (دانش فنی) و soft skills (ارتباط، کار تیمی). چرخه استاندارد مصاحبه توسعهدهنده موبایل ۳-۵ راند با مجموع مدت ۴-۶ ساعت است. درصد قبولی موفق از تعداد پاسخهای اولیه ۲-۵٪ در شرکتهای بزرگ فناوری است.
فرآیند استخدام در توسعه موبایل با توسعه وب متفاوت است: سوالاتی درباره ویژگیهای پلتفرم اضافه میشود — چرخه حیات Activity/Fragment، ARC و مدیریت حافظه در Swift، مدلهای threading (Main Thread, Dispatch Queue, Coroutines)، کار با درخواستهای شبکه و ذخیرهسازی دادهها. توسعهدهنده Android باید Jetpack Compose, Room, WorkManager, Dagger/Hilt را بداند. توسعهدهنده iOS — SwiftUI, Core Data, Combine, URLSession. تفاوت در الزامات با تجربه افزایش مییابد: برای موقعیتهای Senior طراحی سیستم و معماری کل اپلیکیشن اضافه میشود.
ساختار مصاحبه به گرید بستگی دارد. برای موقعیتهای Junior دانش پایه زبان و پلتفرم کافی است (۱-۲ راند). توسعهدهنده Middle ۲-۳ راند با بلوک الگوریتمها میگذراند. مصاحبه Senior شامل ۴-۵ راند است: الگوریتمها، معماری اپلیکیشن موبایل، طراحی سیستم، مصاحبه رفتاری و مصاحبه نهایی با VPE (Vice President of Engineering) یا CTO.
غربالگری HR — اولین مرحله به مدت ۲۰-۳۰ دقیقه. استخدامکننده مطابقت تجربه با الزامات شغل را بررسی میکند، شرایط کار، انتظارات حقوقی و انگیزه کاندیدا را بحث میکند. در این مرحله مهم است که تجربه خود را به وضوح فرموله کنید: پروژهها، استک فناوری، دستاوردها در معیارها (کاهش زمان بارگذاری، کاهش نرخ کرش، تسریع کامپایل). غربالگری HR دانش فنی را بررسی نمیکند، اما تا ۴۰٪ کاندیداها را به دلیل عدم مطابقت با الزامات رسمی حذف میکند.
پس از غربالگری، مصاحبه الگوریتمی — مرحله کلیدی برای اکثر شرکتها. مدت — ۴۵-۹۰ دقیقه. به کاندیدا ۱-۲ وظیفه روی الگوریتمها و ساختمان دادهها داده میشود. راهحل روی تخته آنلاین (Codility, HackerRank, CoderPad) یا روی کاغذ نوشته میشود. نه تنها صحت، بلکه سرعت تفکر، توانایی پرسیدن سوالات روشنکننده و بهینهسازی راهحل ارزیابی میشود. به گزارش interviewing.io (۲۰۲۵)، ۷۳٪ کاندیداها دقیقاً در مرحله الگوریتمی رد میشوند.
راند معماری توانایی طراحی اپلیکیشنهای موبایل را بررسی میکند. به کاندیدا پیشنهاد طراحی یک اپلیکیشن (لیست TODO، پیامرسان، تجمیعکننده اخبار، سرویس استریم) داده میشود. انتخاب الگوی معماری (MVP, MVVM, MVI, VIPER)، سازماندهی لایهها (Presentation, Domain, Data)، کار با DI (Dagger, Hilt, Swinject) و ناوبری ارزیابی میشود. برای Android — آشنایی با Jetpack Navigation، برای iOS — الگوی Coordinator و SwiftUI NavigationStack.
در مصاحبه رفتاری مهارتهای نرم ارزیابی میشود: توانایی کار در تیم، حل تعارضات، استدلال تصمیمات. از روش STAR (Situation, Task, Action, Result) استفاده میشود — کاندیدا یک موقعیت خاص از تجربه را توصیف میکند. نمونه سوال: «درباره سختترین باگی که پیدا کردید و رفع کردید بگویید». راند نهایی با تیملیڈ یا VPE تفکر استراتژیک و تطابق فرهنگی با شرکت را بررسی میکند.
وظایف الگوریتمی — جزء اجباری مصاحبهها در شرکتهای بزرگ فناوری (Google, Meta, Yandex, Tinkoff, Avito). هدف اصلی ارزیابی ability to solve (توانایی حل مسائل) است، نه دانش زبان. کاندیدا میتواند از هر زبان برنامهنویسی استفاده کند — اولویت به Kotlin برای Android و Swift برای iOS داده میشود. موضوعات معمول: آرایهها، جداول درهمسازی، گرافها، برنامهنویسی پویا، درختها (Binary Tree, Trie, Segment Tree).
به گزارش LeetCode (۲۰۲۵)، برای عبور مطمئن از مصاحبه الگوریتمی باید ۲۵۰-۴۰۰ وظیفه حل کرد. موضوعات کلیدی بر اساس فراوانی ظاهر: Two Pointers (۱۲٪), Sliding Window (۱۰٪), DFS/BFS روی گرافها (۱۴٪), Binary Search (۸٪), Dynamic Programming (۱۸٪), Hash Map / Set (۱۵٪). نماد Big O — عنصر اجباری: کاندیدا باید پیچیدگی زمانی و فضایی راهحل خود را توضیح دهد و بهینهسازی پیشنهاد کند.
// LeetCode 1: Two Sum — مسئله کلاسیک HashMap
fun twoSum(nums: IntArray, target: Int): IntArray {
// complement = target - nums[i] و ایندکس آن را ذخیره کن
val map = mutableMapOf<Int, Int>()
for (i in nums.indices) {
val complement = target - nums[i]
// اگر complement پیدا شد — جفت پیدا شد
if (complement in map) {
return intArrayOf(map[complement]!!, i)
}
map[nums[i]] = i
}
throw IllegalArgumentException("No two sum solution")
}
// زمان: O(n), فضا: O(n)وظیفه Two Sum — محبوبترین وظیفه در مصاحبهها (به گزارش LeetCode، بیش از ۲۰ میلیون ارسال). راهحل با O(n) از HashMap استفاده میکند: برای هر عنصر بررسی میکنیم که آیا تفاوت target - nums[i] قبلاً دیده شده است. اگر بله — ایندکسها را برمیگردانیم. اگر نه — عنصر جاری را در HashMap ذخیره میکنیم. راهحل ساده با O(n²) با دو حلقه تو در تو برای موقعیتهای Senior غیرقابل قبول در نظر گرفته میشود.
سوالات پلتفرمی در مصاحبه توسعهدهنده موبایل به سه بلوک تقسیم میشوند: دانش بنیادی پلتفرم، کار با UI و چندنخی، درخواستهای شبکه و ذخیرهسازی دادهها. برای Android اجباری: چرخه حیات Activity و Fragment، تفاوتهای Fragment v1 vs Fragment v2، ActivityResult API (جایگزین onActivityResult)، ViewModel + StateFlow, Compose lifecycle. برای iOS: چرخه حیات UIViewController، ARC (Automatic Reference Counting)، DispatchQueue و OperationQueue، SwiftUI lifecycle (View — @State — @Binding — @ObservedObject).
سوال معمول: «چه callbackهای چرخه حیات Activity هنگام چرخش صفحه فراخوانی میشوند؟». پاسخ صحیح: onPause → onStop → onDestroy → onCreate → onStart → onResume. سوال اضافی: «چگونه حالت را هنگام چرخش حفظ کنیم؟» — از طریق SavedStateHandle در ViewModel، onSaveInstanceState Bundle یا rememberSaveable در Jetpack Compose. برای iOS: «چه اتفاقی برای UIViewController هنگام رفتن به پسزمینه میافتد؟» — viewWillDisappear → viewDidDisappear → didEnterBackground (AppDelegate).
| کامپوننت | Android | iOS |
|---|---|---|
| چرخه حیات | Activity: onCreate → onStart → onResume → onPause → onStop → onDestroy | UIViewController: viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear |
| ذخیره حالت | SavedStateHandle, onSaveInstanceState, rememberSaveable | Codable + UserDefaults, Core Data, @SceneStorage |
| چندنخی | Coroutines (Dispatchers.Main, IO, Default) | GCD (DispatchQueue.main, .global, .background) |
| ساخت UI | Jetpack Compose (Modifier, @Composable) | SwiftUI (View, @ViewBuilder, Modifier) |
| ناوبری | Jetpack Navigation Component, Cicerone, Decompose | NavigationStack, Coordinator, Router (RIBs) |
System Design Interview برای توسعهدهنده موبایل توانایی طراحی معماری اپلیکیشن کلاینت و تعامل آن با سرور را بررسی میکند. وظایف استاندارد: طراحی فید خبری (مانند Instagram/TikTok)، چت (مانند Telegram)، پخشکننده ویدیو (مانند YouTube)، حافظه نهان سطح اول (L1 — in-memory, L2 — دیسک). مدت — ۶۰ دقیقه. ساختاری بودن تفکر ارزیابی میشود، نه تعداد جزئیات.
الگوی پاسخ System Design: ۱) Clarify requirements — شفافسازی نیازمندیهای عملکردی (فید، لایک، کامنت، آپلود عکس) و غیرعملکردی (آفلاین، سرعت بارگذاری، مصرف باتری). ۲) High-level design — رسم نمودار لایهها: UI Layer → ViewModel → Repository → Network / Cache / DB. ۳) Deep dive — جزئیسازی اجزای کلیدی، مثلاً مکانیسم صفحهبندی (Paging 3 برای Android، Offset-based vs Cursor-based برای iOS). ۴) Trade-offs — بحث درباره مصالحهها: کش vs تازگی دادهها، offline-first vs online-only.
موضوعات کلیدی System Design برای موبایل: ذخیرهسازی (LRU Cache, Disk Cache با محدودیت)، کار با تصاویر (Coil, Glide, SDWebImage — بارگذاری، کش، placeholder, پیشرفت)، بهینهسازی ترافیک (protobuf به جای JSON, فشردهسازی, Differ/GraphQL)، کار آفلاین (Room + Sync Adapter, Core Data + iCloud, WorkManager برای همگامسازی پسزمینه). Offline-first — یکی از رایجترین موضوعات برای موقعیتهای Senior.
برای iOS سوالاتی درباره App Thinning, Slicing, On-Demand Resources و بهینهسازی بیلد اضافه میشود. برای Android — درباره R8/ProGuard, App Bundles (AAB vs APK), Dynamic Delivery و Minification. سوال معماری «چگونه حافظه نهان تصاویر با محدودیت حافظه پیادهسازی کنیم؟» درک LRU Cache (LinkedHashMap با access order), Disk LRU Cache (DiskLruCache جیک وارتون) و لایه کش حافظه Coil/Glide را بررسی میکند.
آمادگی برای مصاحبه نیازمند رویکرد سیستماتیک ۴-۸ هفته قبل از مصاحبه برنامهریزی شده است. استراتژی پایه: ۲ هفته برای مرور تئوری (زبان، پلتفرم، الگوریتمها)، ۲-۴ هفته برای حل وظایف الگوریتمی (۱۰۰-۳۰۰ وظیفه در LeetCode)، ۱-۲ هفته برای مصاحبههای تمرینی (Pramp, interview.io, با دوستان). برای موقعیتهای Senior آمادگی System Design اضافه میشود (۲-۳ هفته). این طرح ۷۰-۸۰٪ عبور موفق در سطح هدف را فراهم میکند.
برای توسعهدهندگان موبایل آمادگی خاص شامل: خواندن Android Developers Guide / iOS Developer Library، تحلیل کد منبع کتابخانههای محبوب (Retrofit, OkHttp, Coil, Koin, Alamofire, Kingfisher)، نوشتن پروژه شخصی با Clean Architecture و CI/CD (GitHub Actions, Fastlane). یک اپلیکیشن نمونه روی GitHub با معماری ماژولار، DI، تستها (Unit + UI + Snapshot) بنویسید — این درک عمیق را نشان میدهد و در مصاحبه به عنوان استدلال عمل میکند.
| هفته | چه کاری انجام دهیم | نتیجه |
|---|---|---|
| ۱-۲ | مرور تئوری: زبان (Kotlin/Swift)، پلتفرم (Android/iOS)، الگوریتمها (big O, ساختارهای پایه) | یادداشت موضوعات کلیدی |
| ۳-۴ | LeetCode: ۱۰۰-۱۵۰ وظیفه، موضوعات: Arrays, Hash Maps, Trees, DFS/BFS, DP | حل مطمئن وظایف Medium |
| ۵-۶ | System Design: خواندن «Designing Data-Intensive Applications», تمرین ۵-۷ طراحی | الگوی پاسخ آماده System Design |
| ۷-۸ | مصاحبههای تمرینی (۵-۱۰ مصاحبه)، مرور سوالات پلتفرمی، سوالات رفتاری | آمادگی کامل برای مصاحبه واقعی |
اشتباه ۱: حل ساکت. کاندیدا کد را ساکت مینویسد، جریان فکری را توضیح نمیدهد. مصاحبهکننده نمیتواند فرآیند حل را ارزیابی کند. درست: هر مرحله را با صدای بلند گفتن — «میبینم که وظیفه به جستجوی گراف ختم میشود. پیشنهاد استفاده از BFS را میدهم چون باید کوتاهترین مسیر را پیدا کنیم». چنین ارتباطی به مصاحبهکننده امکان هدایت کاندیدا در صورت اشتباه را میدهد که مثبت ارزیابی میشود.
اشتباه ۲: بلافاصله کدنویسی. شروع کدنویسی بدون شفافسازی نیازمندیها و بحث درباره رویکردها — یکی از دلایل اصلی شکست. قبل از نوشتن کد باید: دادههای ورودی/خروجی را شفافسازی کرد، موارد لبه را بحث کرد، ۲-۳ رویکرد را با ارزیابی Big O مقایسه کرد و تنها پس از توافق با مصاحبهکننده راهحل بهینه را نوشت. الگوی درست: Clarify → High-level approach → Big O → Write code → Test with examples → Discuss trade-offs.
اشتباه ۳: ندانستن پلتفرم. کاندیدا الگوریتمها را عالی حل میکند اما نمیتواند تفاوت بین Activity و Fragment یا بین weak/unowned در Swift را توضیح دهد. برای موقعیتهای موبایل دانش پلتفرم در کنار الگوریتمها ارزیابی میشود. مطالعه کنید: تفاوتهای نسخه SDK (compileSdk vs minSdk vs targetSdk)، قوانین ProGuard/R8 برای کتابخانههای محبوب، Swift Concurrency (async/await, actors) و MainActor. هر سومین کاندیدا برای موقعیت iOS در سوالات درباره ARC رد میشود.
سوالات متداول
تعداد استاندارد راندها ۳-۵ است: غربالگری HR (۳۰ دقیقه)، الگوریتمها (۶۰ دقیقه)، معماری/طراحی سیستم (۶۰ دقیقه)، مصاحبه رفتاری (۴۵ دقیقه)، راند نهایی با تیملیڈ (۶۰ دقیقه). در استارتاپها ممکن است ۲-۳ راند باشد، در شرکتهای بزرگ (Google, Meta) — تا ۶ راند. مدت کل چرخه مصاحبه — از ۲ تا ۶ هفته بسته به شرکت.
۵ موضوع برتر برای مصاحبه الگوریتمی: برنامهنویسی پویا (۱۸٪ وظایف)، DFS/BFS روی گرافها (۱۴٪)، Two Pointers (۱۲٪)، Sliding Window (۱۰٪)، Binary Search (۸٪). برای عبور از مصاحبه در FAANG توصیه میشود ۲۵۰-۴۰۰ وظیفه در LeetCode حل کنید. سطح Medium — حداقل اجباری. برای موقعیتهای Senior وظایف روی درختها و صفهای اولویت اضافه میشود.
برنامه یک ماهه: هفته ۱ — مرور زبان و پلتفرم (زبان Kotlin/Swift، کتابخانههای پایه، چرخههای حیات). هفته ۲ — LeetCode Medium (۱۰۰ وظیفه، موضوعات: Arrays, Hash Maps, Trees). هفته ۳ — System Design برای موبایل (کش، صفحهبندی، offline-first). هفته ۴ — مصاحبههای تمرینی (حداقل ۳ تا در Pramp یا با همکار). توصیه کلیدی: مصاحبههای تمرینی را در شرایط نزدیک به واقعی انجام دهید — ددلاین، مصاحبهکننده ناآشنا، تخته آنلاین.
Junior: ۱-۲ راند، الگوریتمهای پایه (reverse string, fizzbuzz, basic tree traversal)، سوالات درباره زبان و اصول پلتفرم. Middle: ۲-۳ راند، الگوریتمهای Medium، سوالات معماری (MVP/MVVM)، کار با شبکه و کش. Senior: ۴-۵ راند، الگوریتمهای Hard، System Design، معماری کل اپلیکیشن، CI/CD، مرور کد، سوالات رفتاری درباره رهبری و منتورینگ. انتظار میرود Senior خودش سوال بپرسد و بحث را هدایت کند.
نمونه سوالات: «درباره تعارضی در تیم و چگونگی حل آن بگویید»، «کدام ویژگی سختترین بود و چرا»، «چرا میخواهید دقیقاً در شرکت ما کار کنید»، «برای بهبود فرآیندها در تیم چه کردید». برای پاسخ ساختاریافته از روش STAR (Situation, Task, Action, Result) استفاده کنید. ۳-۴ داستان از تجربه خود را از قبل آماده کنید — این ۸۰٪ سوالات رفتاری را پوشش میدهد.
نتایج
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.