تیم کدایت سوالات استخدامی اندروید را با مطالعه ، تحقیق و دقت نظر زیاد جمع آوری کرده و امیدواریم که ذره ای در فرایند استخدامی شما سهیم باشیم. اندروید یک سیستم عامل متنباز مبتنی بر لینوکس است که توسط گوگل توسعه یافته است به طور خلاصه یک سیستم عامل قدرتمند، انعطافپذیر و قابلاعتماد است که به انتخابی محبوب برای کاربران دستگاههای هوشمند تبدیل شده است.
ما در این بخش قصد داریم مجموعه ای از سوالات استخدامی اندروید که در جلسات مصاحبه استخدامی ، از متقاضیان در فیلد برنامه نویس اندروید پرسیده میشود در قالب یک مقاله کامل از سوالات استخدامی اندروید برای شما عزیزان انتشار دهیم.
چرا نمی توان bytecode استاندارد جاوا را در اندروید اجرا کرد؟
نمی توان bytecode استاندارد جاوا را به طور مستقیم در اندروید اجرا کرد زیرا اندروید از Dalvik Virtual Machine (DVM) به جای Java Virtual Machine (JVM) استاندارد استفاده می کند. DVM یک ماشین مجازی سفارشی است که برای دستگاه های تلفن همراه با منابع محدود بهینه شده است و از فرمت bytecode خاص خود به نام DEX (Dalvik Executable) استفاده می کند. bytecode جاوا باید قبل از اجرا در دستگاه اندروید به DEX تبدیل شود.
استفاده از DVM مزایای متعددی دارد، از جمله: 1-عملکرد و کارایی بهتر 2-سازگاری با پلتفرم اندروید 3-امنیت
آیا برنامههای اندروید فقط میتوانند با جاوا برنامهریزی شوند؟
خیر ُ در حالی که جاوا زمانی تنها زبان برای توسعه اندروید بود، Google با معرفی Kotlin به عنوان یک زبان برنامهنویسی رسمی دیگر در سال 2017، چشمانداز را گسترش داد. Kotlin به سرعت محبوبیت خود را به دست آورده است و به دلیل مختصر بودن، ایمن بودن و قابلیت تعامل بیشتر با جاوا، به عنوان رقیبی قدرتمند برای جاوا تبدیل شده است.
علاوه بر کاتلین ُ ++C نیز برای توسعه برنامههای عملکردی بالا مانند بازیها و موتورهای رندرینگ گرافیکی محبوب است. در حالی که ++C به طور مستقیم توسط Android SDK پشتیبانی نمیشود، میتوان از آن با استفاده از NDK (Native Development Kit) برای ایجاد کتابخانههای بومی استفاده کرد.
با ادامه سوالات تخصصی مصاحبه اندروید در خدمت شما هستیم
زبانهای دیگر مانند Python و JavaScript نیز میتوانند با استفاده از ابزارهای مناسب برای توسعه اندروید استفاده شوند. به عنوان مثال، Kivy یک چارچوب توسعه چند پلتفرمی است که به شما امکان میدهد برنامههای اندروید را با استفاده از Python بنویسید. React Native یک چارچوب دیگر است که به شما امکان میدهد برنامههای اندروید را با استفاده از JavaScript بسازید.
و یک نکته مهم دیگه هم این است که در طول پاسخ خودتان، حتماً از اصطلاحات فنی مرتبط با توسعه اندروید مانند Kotlin، C++، NDK، Kivy و React Native استفاده کنید.و اگر تجربه کار با هر کدوم را دارید در پاسخ خود حتما به آن اشاره کنید.
Component های برنامه اندروید شامل چه مواردی است ؟
یک برنامه اندروید از چندین جزء کلیدی تشکیل شده است که با هم کار می کنند تا یک تجربه کاربری روان و قدرتمند را برای کاربران به ارمغان بیاورند. درک این اجزا برای هر کسی که به توسعه برنامه های اندرویدی علاقه مند است، ضروری است.
کامپوننت های برنامه اندروید شامل 4 جزء اصلی هستند
-
فعالیت (Activity): اکتیویتی، بخش اساسی یک برنامه اندروید است که رابط کاربری (UI) یک صفحه خاص را کنترل می کند. به عبارت دیگر، هر صفحه ای که در برنامه اندروید می بینید، یک Activity است. یک Activity دارای یک طرح (layout) است که با استفاده از فایل های XML طراحی شده و شامل عناصر بصری مانند دکمه ها، متن ها، تصاویر و غیره می شود.
-
سرویس (Service): برخلاف Activity ها که با رابط کاربری کار می کنند، سرویس ها برای انجام وظایف طولانی مدت در پس زمینه طراحی شده اند. آن ها به طور مستقل از Activity ها عمل می کنند و کارهایی مانند پخش موسیقی در پس زمینه، همگام سازی داده ها با سرور یا حتی دانلود فایل ها را انجام می دهند.
-
پذیرنده پخش (Broadcast Receiver): این جزء به برنامه شما امکان می دهد رویدادهای سیستمی را که در سطح کل دستگاه رخ می دهند، دریافت کند. نمونه هایی از این رویدادها شامل دریافت تماس، پیام کوتاه (SMS)، تغییر اتصال شبکه یا حتی سطح پایین باتری می شود.
-
ارائه دهنده محتوا (Content Provider): این جزء به برنامه شما امکان می دهد داده ها را با برنامه های دیگر به اشتراک بگذارد. Content Provider یک واسط است که به برنامه های دیگر اجازه می دهد تا به طور ایمن به داده های برنامه شما دسترسی پیدا کنند.
تفاوت بین Service و Activity چیست ؟
نحوی کار هر دو Component در سوال بالا آورده شده است به طور خلاصه :
از اکتیویتی ها برای ساخت رابط کاربری و مدیریت تعامل کاربر استفاده کنید. از سرویس ها برای انجام وظایف در پس زمینه که نیازی به تعامل مستقیم کاربر ندارند استفاده میشود. به طور مثال :
فرض کنید در حال ساخت یک برنامه پخش موسیقی هستید.
- یک اکتیویتی برای نمایش لیست آهنگ ها و کنترل پخش ایجاد می کنید.
- از یک سرویس برای پخش موسیقی در پس زمینه در حالی که کاربر با برنامه تعامل دیگری دارد استفاده می کنید.
Intent را در اندروید توضیح دهید
Intent یک پیام رسان در اندروید هست که به اجزای مختلف برنامه (Activity ها، Service ها، Broadcast Receiver ها و …) اجازه میده تا با هم ارتباط برقرار کنند و داده ها رو به اشتراک بذارن.
تفاوت بین Explicit Intent و Implicit Intent چیست؟
Explicit Intent: برای راه اندازی یک Activity خاص یا اجرای یک Service خاص استفاده میشه. فرض کنید میخواهیم از Activity فعلی به Activity دیگری به نام “SecondActivity” برویم.
1 2 |
Intent intent = new Intent(this, SecondActivity.class); startActivity(intent) |
Implicit Intent: برای انجام یک اقدام خاص، مثل باز کردن یک URL یا به اشتراک گذاشتن متن، از یه برنامه خاص یا هر برنامه ای که قابلیت انجام اون کار رو داره استفاده میشه. فرض کنید میخواهیم متنی را با استفاده از هر برنامهای که میتواند این کار را انجام دهد (مانند پیامرسان، ایمیل و …) به اشتراک بگذاریم.
1 2 3 4 |
Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, "This is the text I want to share."); startActivity(intent); |
مقالات تکمیلی : Intent ها در اندروید چیست ؟
مفهوم Action در اندروید
در اندروید، “Action” یک عنصر کلیدی در سیستم Intent است که به عنوان یک رشته متنی عمل میکند و نوع عملیاتی را که یک Intent میتواند انجام دهد، مشخص میکند. Intentها به عنوان پیامرسانهای بین اجزای مختلف سیستم اندروید عمل میکنند و “Action” به عنوان نوع عملیاتی که Intent باید انجام دهد، عمل میکند.
با ادامه سوالات تخصصی مصاحبه اندروید در خدمت شما هستیم
به عنوان مثال در نظر بگیرید که برنامهای دارید که URLها را باز میکند. برای ارسال Intent برای باز کردن یک URL، میتوانید از کد زیر استفاده کنید
1 2 3 |
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("https://www.code-it.ir")); startActivity(intent); |
همانطور که در مثال بالا مشاهده میکنید اکشن ما “ACTION_VIEW ” است که نشان میدهد Intent باید یک URL را باز کند.
معماری اندروید شامل چه لایه های است؟
معماری اندروید از لایههای مختلفی تشکیل شده که هر کدام وظایف خاص خود را دارند.
به طور خلاصه، این لایهها عبارتند از:
1. هسته لینوکس: مدیریت منابع سختافزاری مانند پردازنده، حافظه و دستگاههای ورودی/خروجی را بر عهده دارد.
2. لایه Framework: ارائه APIها برای ساخت برنامههای اندرویدی مانند Activityها، Viewها، Servicesها، Broadcast Receiversها و Content Providersها میشود.
3. کتابخانههای اندروید: ارائه کدهای جاوا برای وظایف رایج مانند دسترسی به شبکه، کار با مکان، تجزیه و تحلیل JSON و نمایش تصاویر ارائه میدهند.
4. برنامههای اندرویدی: برنامههایی که توسط کاربر نصب و اجرا میشوند.
5. Runtime: Runtime محیطی را فراهم میکند که در آن برنامههای اندرویدی میتوانند اجرا شوند
این سوال یکی از سوالات مهم از مجموعه سوالات استخدامی اندروید است ، سعی کنید با مطالعه بیشتر از منابع دیگر تسلط بیشتری بر آن داشته باشید .
ADB چیست ؟
یکی از سوالات مهم از سوالات استخدامی اندروید میباشد. ADB مخفف Android Debug Bridge است که ابزاری قدرتمند برای تعامل با دستگاههای اندرویدی است. این ابزار به شما امکان میدهد:
- دستگاه خود را از طریق USB به رایانه خود متصل کنید
- فایلها را بین دستگاه و رایانه خود انتقال دهید
- دستورات ADB را اجرا کنید
- دستگاه خود را روت کنید
فرگمنت در اندروید چیست؟
فرگمنتها واحدهای ساختاری modulare هستند که به شما امکان میدهند رابط کاربری برنامه اندرویدی خود را به بخشهای مجزا و قابل استفاده مجدد تقسیم کنید. هر فرگمنت میتواند شامل طرحبندی، کد و منطق خاص خود باشد و میتوان آن را به صورت پویا به اکتیویتیها اضافه، حذف و جایگزین کرد. به تعریفی دیگر فرگمنت در واقع بخشی از اکتیویتی است (Sub Activity) و بخشی از رابط کاربری را تشکیل میدهد و دارای چرخه حیات و رفتار خاص خود است .
با ادامه سوالات تخصصی مصاحبه اندروید در خدمت شما هستیم
مزایای استفاده از فرگمنتها در اندروید:
- ماژولار بودن
- قابلیت استفاده مجدد
- انعطافپذیری
- مدیریت چرخه حیات
تفاوتهای Serializable و Parcelable در اندروید
وقتی صحبت از جابجایی اشیا بین اجزای برنامه (app components) می شود، Serializable و Parcelable دو گزینه هستند. با این حال، Parcelable انتخاب کارآمدتر است. در حالی که Serializable یک روش عمومی و کندتر است، Parcelable مختص اندروید است و انتقال سریعتر داده بین اجزا را تضمین می کند و عملکرد کلی را بهبود می بخشد.
انتخاب بین Serializable و Parcelable به نیازهای خاص شما بستگی دارد:
- اگر به سرعت و کارایی نیاز دارید، از Parcelable استفاده کنید.
- اگر به انعطافپذیری بیشتر نیاز دارید و میخواهید کنترل بیشتری بر فرآیند marshalling داشته باشید، از Serializable استفاده کنید.
SDK اندروید چیست و چه ابزارهایی در آن قرار دارند؟
SDK اندروید (Software Development Kit) مجموعهای از ابزارها و منابعی است که توسط گوگل برای توسعه برنامههای اندرویدی ارائه میشود. این ابزارها به توسعهدهندگان امکان میدهد تا برنامههایی را بسازند که با سیستم عامل اندروید کار کنند و به ویژگیها و قابلیتهای آن دسترسی داشته باشند.
با ادامه سوالات تخصصی مصاحبه برنامه نویس اندروید در خدمت شما هستیم
ابزارهای اصلی موجود در SDK اندروید عبارتند از:
- Android Studio: محیط توسعه یکپارچه (IDE) رسمی برای اندروید است که شامل ویرایشگر کد، ابزارهای اشکالزدایی، شبیهساز و موارد دیگر میشود.
- Android Debug Bridge (ADB): ابزاری برای اشکالزدایی و مدیریت دستگاههای اندرویدی است.
- Android Emulator: شبیهسازی از دستگاه اندرویدی را ارائه میدهد که میتوانید برای تست برنامه خود بدون نیاز به دستگاه فیزیکی از آن استفاده کنید.
- Android SDK Platform Tools: شامل ابزارهایی برای ساخت، کامپایل و اشکالزدایی برنامههای اندرویدی است.
- Android SDK Build Tools: شامل ابزارهایی برای ساخت و بستهبندی برنامههای اندرویدی است.
- Android NDK (Native Development Kit): به توسعهدهندگان اجازه میدهد تا با استفاده از زبانهای برنامهنویسی C و C++ برنامههای اندرویدی بسازند.
- Google APIs: به توسعهدهندگان امکان میدهد تا به خدمات گوگل مانند نقشه، مکانیابی و پرداخت در برنامههای خود دسترسی داشته باشند.
- Android SDK Libraries: شامل کتابخانههای جاوا و Kotlin است که برای توسعه برنامههای اندرویدی commonly used میشوند.
- Android SDK Resources: شامل تصاویر، نمادها و سایر منابعی است که میتوانید در برنامههای خود از آنها استفاده کنید.
- Android Documentation: شامل اسناد و آموزشهایی برای کمک به توسعهدهندگان در یادگیری نحوه استفاده از SDK اندروید است.
ابزارهای فرعی موجود در SDK اندروید عبارتند از:
- Gradle: یک سیستم ساخت است که به خودکارسازی فرآیند ساخت برنامههای اندرویدی کمک میکند.
- Jetpack: مجموعه ای از کتابخانههای Android است که توسط گوگل توسعه یافته و نگهداری میشود.
- Kotlin: یک زبان برنامهنویسی است که برای توسعه برنامههای اندرویدی به طور فزایندهای محبوب میشود.
شما با خواندن مطالب بالا ، که یکی از سوالات مهم از سوالات استخدامی اندروید است میتوانید جوابی کاملی در مورد این سوال به فرد مصاحبه کننده بدهید .
مقالات تکمیلی : SDK چیست ؟
خطای ANR Notification چیست ؟
ANR مخفف “Application Not Responding” به معنای “برنامه پاسخگو نیست” است. این یک پیام خطا در سیستم عامل اندروید است که زمانی رخ می دهد که رابط کاربری (UI) یک برنامه برای مدت زمان قابل توجهی (معمولاً 5 ثانیه یا بیشتر) مسدود شده باشد و به ورودی کاربر پاسخ ندهد.
هنگامی که ANR رخ می دهد، سیستم عامل اندروید یک پیام خطا به کاربر نشان می دهد و به کاربر اجازه می دهد تا برنامه را ببندد یا منتظر بماند تا برنامه پاسخگو شود.
برای جلوگیری از ANR، توسعه دهندگان باید:
- از انجام وظایف طولانی در thread اصلی خودداری کنند.
- از عملیات I/O در thread های جداگانه انجام شود.
- از نشت حافظه جلوگیری کنند.
- از ابزارهای مختلف برای عیب یابی و شناسایی علل ANR استفاده کنند.
Context در اندروید چیست ؟
Context یک رابط انتزاعی در اندروید است که اطلاعاتی در مورد محیط برنامه ارائه میدهد. این اطلاعات شامل منابع برنامه، کامپوننتهای برنامه و اطلاعات محیط برنامه است. Context برای انجام وظایف مختلفی مانند بارگذاری منابع، شروع فعالیتها، ارسال و دریافت پیامهای پخش و دسترسی به تنظیمات برنامه استفاده میشود.
سه نوع Context اصلی در اندروید وجود دارد:
- Context فعالیت: این Context به اطلاعات مربوط به Activity فعلی دسترسی میدهد.
- Context برنامه: این Context به اطلاعات مربوط به کل برنامه دسترسی میدهد.
- Context Wrapper: این کلاس برای ایجاد Contextهای سفارشی استفاده میشود.
در اندروید از چه Dialog Boxes هایی استفاده میشود ؟
- AlertDialog
- برای نمایش پیامهای ساده یا پیچیده به کاربر استفاده میشود.
- میتواند شامل دکمههای تأیید، لغو و خنثی باشد.
- میتوان از آن برای دریافت ورودی متن از کاربر استفاده کرد.
- ProgressDialog
- برای نشان دادن پیشرفت یک فرآیند به کاربر استفاده میشود.
- میتوان از آن در عملیاتهای زمانبر مانند بارگیری فایل یا دانلود داده استفاده کرد.
- DatePickerDialog
- به کاربر اجازه میدهد تا تاریخ را انتخاب کند.
- میتوان از آن در فرمها یا تنظیمات برنامه استفاده کرد.
- TimePickerDialog
- به کاربر اجازه میدهد تا زمان را انتخاب کند.
- میتوان از آن در فرمها یا تنظیمات برنامه استفاده کرد.
انواع روشهای ذخیرهسازی در اندروید
- ذخیرهسازی داخلی : برای ذخیرهسازی دادههای حساس مانند اطلاعات برنامهها و تنظیمات سیستم استفاده میشود.
- ذخیرهسازی خارجی:برای ذخیرهسازی عکسها، فیلمها، موسیقی و سایر فایلهای حجیم مناسب است.
- ذخیرهسازی ابری : برای ذخیرهسازی پشتیبان از دادهها و همچنین اشتراکگذاری فایلها با دیگران مفید است.(مانند Google Drive، Dropbox و OneDrive)
- پایگاه داده SQLite :برای ذخیرهسازی دادههای ساختاریافته مانند لیست مخاطبین، تاریخچه تماسها و پیامها استفاده میشود.
-
Shared Preferences:برای ذخیرهسازی تنظیمات برنامه و اطلاعات ترجیحی کاربر استفاده میشود. و برای مقادیر کم مناسب است .
- فایلها :برای ذخیرهسازی هر نوع دادهای میتوان از آنها استفاده کرد. (این روش نسبت به روش های قبلی انعطافپذیری بیشتری دارد ولی ممکن است کندتر و پیچیده تر باشد)
Multidex در اندروید چیست؟
یکی از سوالات استخدامی اندروید که زیاد پرسیده میشود در مورد فایل dex , multidex و زمان های استفاده از آن است Multidex یک راه حل برای محدودیت تعداد روشها (Method) در یک فایل DEX در پلتفرم اندروید است. در نسخههای قدیمیتر اندروید (قبل از Android 5.0 Lollipop) از ماشین مجازی Dalvik برای اجرای برنامههای اندرویدی استفاده میشد. Dalvik حداکثر 65,536 روش را در یک فایل DEX پشتیبانی میکرد. اگر برنامهای از این حد فراتر میرفت، با خطا مواجه میشد.
با ادامه سوالات استخدامی اندروید در خدمت شما هستیم
Multidex این مشکل را با اجازه دادن به برنامهها برای استفاده از چندین فایل DEX برای ذخیره روشهای خود حل میکند. این کار به طور موثر محدودیت تعداد روشها را در هر برنامه حذف میکند.
چه زمانی به Multidex نیاز دارید؟
به طور کلی، اگر برنامه شما از Android 5.0 Lollipop (API level 21) یا بالاتر استفاده میکند، نیازی به Multidex ندارید، زیرا این نسخه از اندروید از ART (Android Runtime) به عنوان ماشین مجازی پیشفرض استفاده میکند. ART محدودیت تعداد روشها را ندارد.
با این حال، اگر برنامه شما از نسخههای قدیمیتر اندروید (API level 20 یا پایینتر) استفاده میکند و یا از کتابخانههای شخص ثالثی که از تعداد زیادی روش استفاده میکنند، استفاده میکنید، به Multidex نیاز خواهید داشت.
سوالات استخدامی اندروید (کاتلین)
companion object در کاتلین چیست ؟
companion object در کاتلین را میتوان به عنوان یک “همراه” برای کلاس در نظر گرفت که به آن اجازه میدهد متدها و ویژگیهایی داشته باشد که به همه نمونههای آن کلاس تعلق دارند و نیازی به ایجاد یک شیء از آن کلاس نیست. برای هر کلاس، صرف نظر از اینکه چند نمونه از آن کلاس ایجاد شود، تنها یک نمونه از companion object وجود خواهد داشت.
با ادامه سوالات استخدامی اندروید در خدمت شما هستیم
برای درک بهتر یک مثال برای شما میزنم ، فرض کنید یک کلاس به نام Car داریم. این کلاس ویژگیهایی مثل color
، model
و متدهایی مثل start()
و stop()
دارد. حالا تصور کنید میخواهیم یک متد داشته باشیم که تعداد کل ماشینهای تولید شده را بشمارد. این متد نیازی به یک ماشین خاص ندارد، بلکه به کل کلاس Car
مربوط میشود. در اینجا است که companion object به کار میآید. ما این متد شمارش را درون companion object کلاس Car
قرار میدهیم و سپس میتوانیم بدون ایجاد یک شیء از نوع Car
، مستقیماً با استفاده از نام کلاس به آن دسترسی داشته باشیم.
در این مثال:
totalCars
یک متغیر درون companion object است که تعداد کل ماشینها را نگه میدارد.create
یک متد درون companion object است که برای ایجاد یک ماشین جدید استفاده میشود و در هر بار فراخوانی، مقدارtotalCars
را یک واحد افزایش میدهد.
چرا از companion object استفاده میکنیم؟
- متدهای کمکی: برای تعریف متدهایی که به یک نمونه خاص از کلاس نیاز ندارند، مثل متدهای کارخانهای (factory methods) یا متدهای کمکی برای تبدیل دادهها.
- متغیرهای ثابت: برای تعریف متغیرهایی که مقدارشان در طول برنامه ثابت است و به همه نمونههای کلاس قابل دسترسی است.
- توابع گسترش (extension functions): برای تعریف توابعی که بر روی نوع کلاس عمل میکنند، اما به عنوان عضو کلاس تعریف نمیشوند.
توابع درون خطی (Inline Functions) در Kotlin چیست ؟
در Kotlin، توابع درون خطی به شما این امکان را میدهند که کد یک تابع را مستقیماً در محل فراخوانی آن جایگزین کنید. این امر باعث میشود تا از سربار ایجاد اشیاء تابع و انجام تماسهای تابع جلوگیری شود، که میتواند منجر به بهبود عملکرد، به خصوص برای توابع کوچک و پرکاربرد شود.
برای علامتگذاری یک تابع به عنوان تابع درون خطی، از کلمه کلیدی inline قبل از تعریف تابع استفاده میکنید.
1 2 3 |
inline fun isEven(number: Int): Boolean { return number % 2 == 0 } |
به طور کلی، توابع درون خطی برای توابع کوچک و پرکاربرد که وظایف سادهای را انجام میدهند، مانند بررسیهای null، تبدیل نوع، یا فرمتبندی رشتهها، مفید هستند.
مزایای استفاده از const در کاتلین چیست
1. خوانایی کد را افزایش میدهد:
استفاده از const
به وضوح نشان میدهد که مقدار متغیر در طول اجرای برنامه تغییر نخواهد کرد. این امر خوانایی کد را به طور قابل توجهی افزایش میدهد.
2. خطاها را در زمان کامپایل شناسایی میکند:
برخلاف متغیرهای val
، مقادیر متغیرهای const
باید در زمان کامپایل مشخص شوند. این امر به شناسایی زودهنگام خطاها، مانند تلاش برای تغییر مقدار یک متغیر ثابت، کمک میکند و از بروز مشکلات در زمان اجرا جلوگیری میکند.
3. بهینهسازی کد را تسهیل میکند:
کامپایلر کاتلین میتواند کد را برای متغیرهای const
به طور موثرتری بهینهسازی کند، زیرا میداند که مقادیر آنها ثابت هستند. این امر میتواند منجر به افزایش عملکرد برنامه، به خصوص در حلقهها و سایر قسمتهای حساس به عملکرد شود.
4. امنیت کد را افزایش میدهد:
از آنجا که مقادیر متغیرهای const
قابل تغییر نیستند، در برابر تغییرات ناخواسته یا مخرب محافظت میشوند. این امر میتواند امنیت کد را به خصوص در برنامههای حساس مانند برنامههای بانکی یا پزشکی افزایش دهد.
5. استفاده از آن آسان است:
استفاده از const
بسیار ساده است و فقط نیاز به اضافه کردن کلمه کلیدی const
قبل از تعریف متغیر دارد. این امر یادگیری و استفاده از آن را برای برنامهنویسان آسان میکند.
در کاتلین تفاوت دو عملگر == و === چیست ؟
در زبان Kotlin دو نوع برابری وجود دارد:
- برابری ساختاری (==): این نوع برابری بررسی می کند که آیا مقادیر دو شیء یکسان هستند یا خیر. به طور پیش فرض، برابری ساختاری برای انواع داده های اولیه مانند
Int
،String
وBoolean
به درستی کار می کند. - برابری ارجاعی (===): این نوع برابری بررسی می کند که آیا دو شیء به همان شیء در حافظه اشاره می کنند یا خیر. به عبارت دیگر، این نوع برابری بررسی می کند که آیا دو متغیر به یک شیء واحد اشاره می کنند یا خیر.
1234567891011val a = 10val b = 10println(a == b) // trueprintln(a === b) // trueval c = Int(10)val d = Int(10)println(c == d) // trueprintln(c === d) // false
در مثال بالا، a و b به دو متغیر جداگانه با مقدار 10 اشاره می کنند، بنابراین a == b و a === b هر دو true را برمی گردانند.با این حال، c و d به دو شیء Int جداگانه با مقدار 10 اشاره می کنند، بنابراین c == d true را برمی گرداند، اما c === d false را برمی گرداند.
بلوک init در Kotlin چیست ؟
بلوک init
در کاتلین یک بخش کد است که برای ایجاد و تنظیم اولیه یک شیء استفاده میشود. این بلوک درست بعد از اجرا شدن سازنده اصلی فراخوانی میشود و به شما این امکان را میدهد تا کارهای بیشتری را برای آمادهسازی شیء انجام دهید. این قابلیت باعث میشود تا کد شما خواناتر و نگهداری آن راحتتر شود.
1 2 3 4 5 6 7 8 9 |
class MyClass(val name: String) { val greeting: String init { // تنظیم مقدار اولیه greeting greeting = "سلام، $name!" } } |
در این مثال، بلوک init مقدار متغیر greeting
را تنظیم میکند.
کلمه کلیدی Open در Kotlin چیست ؟
در Kotlin، کلمه کلیدی Open دو کاربرد اصلی دارد:
وراثت : برای اینکه یک کلاس قابل ارثبری باشد، باید آن را با کلمه کلیدی زعلامتگذاری کنید. و کلاسهای open به عنوان کلاسهای پایه عمل میکنند و میتوان از آنها برای ایجاد کلاسهای فرعی استفاده کرد.
1 2 3 4 5 6 7 8 9 10 11 |
open class Shape { open fun draw() { println("شکل رسم شد") } } class Circle : Shape() { override fun draw() { println("دایره رسم شد") } } |
extensible کردن توابع: برای اینکه یک تابع قابل توسعه باشد، باید آن را با کلمه کلیدی open علامتگذاری کنید. توابع open میتوانند با استفاده از توابع الحاقی توسعه داده شوند.
1 2 3 4 5 6 7 |
open fun String.appendFooter(footer: String): String { return this + footer } fun String.appendCopyright(): String { return appendFooter("(c) 2024") } |
lateinit و lazy در Kotlin چیست و چه تفاوت ها و چه شباهت هایی باهم دارند؟
lateinit و lazy دو روش برای تأخیر در مقداردهی اولیه متغیرها در Kotlin هستند. هر دو روش مزایا و معایب خاص خود را دارند و انتخاب بین آنها به مورد استفاده خاص بستگی دارد.
شباهت ها:
- تأخیر در مقداردهی اولیه: هم lateinit و هم lazy مقداردهی اولیه متغیر را تا زمانی که به آن دسترسی پیدا نشود، به تأخیر می اندازند. این می تواند به بهبود عملکرد برنامه کمک کند، به خصوص برای متغیرهایی که به ندرت استفاده می شوند.
- امنیت: هر دو lateinit و lazy دارای ویژگی های امنیتی هستند که از دسترسی به متغیر قبل از مقداردهی اولیه آن جلوگیری می کنند.
تفاوت ها:
- نوع متغیر: lateinit فقط می تواند برای متغیرهای var (قابل تغییر) استفاده شود، در حالی که lazy می تواند برای متغیرهای var و val (فقط خواندنی) استفاده شود.
- قابلیت تهی بودن: lateinit فقط می تواند برای متغیرهای غیر تهی استفاده شود، در حالی که lazy می تواند برای متغیرهای تهی و غیر تهی استفاده شود.
- زمان مقداردهی اولیه: lateinit متغیر را در اولین بار دسترسی به آن مقداردهی اولیه می کند، در حالی که lazy متغیر را در اولین بار خواندن آن مقداردهی اولیه می کند
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// lateinit lateinit var database: Database fun loadData() { database = Database() // مقداردهی اولیه متغیر در اینجا انجام می شود } fun useDatabase() { // در اینجا می توان از database استفاده کرد } // lazy val logger by lazy { Logger() // مقداردهی اولیه متغیر در اولین بار خواندن آن انجام می شود } fun logMessage(message: String) { logger.log(message) } |
در این مثال، database با lateinit مشخص شده است زیرا قبل از استفاده از آن در تابع useDatabase
باید مقداردهی اولیه شود. logger با lazy مشخص شده است زیرا فقط برای خواندن استفاده می شود و ممکن است همیشه به آن نیاز نباشد.
در نهایت، به یاد داشته باشید که اعتماد به نفس و داشتن نگرش مثبت در طول مصاحبه بسیار مهم است. با آمادگی و تمرین مناسب، میتوانید تسلط بیشتری به سوالات استخدامی اندروید که از شما پرسیده میشود، داشته باشید و شانس خود را برای موفقیت در مصاحبه استخدامی اندروید افزایش دهید
مطلب بسیار مفید و کمیابی بود
سلام
خیلی ممنون
خداروشکر که مفید بوده براتون