Kotlin | Вопросы собесов
前往频道在 Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
显示更多2 481
订阅者
-224 小时
-87 天
-1630 天
数据加载中...
相似频道
标签云
进出提及
---
---
---
---
---
---
吸引订阅者
六月 '26
六月 '26
+22
在0个频道中
五月 '26
+20
在0个频道中
Get PRO
四月 '26
+30
在0个频道中
Get PRO
三月 '26
+32
在0个频道中
Get PRO
二月 '26
+46
在0个频道中
Get PRO
一月 '26
+54
在0个频道中
Get PRO
十二月 '25
+23
在0个频道中
Get PRO
十一月 '25
+42
在0个频道中
Get PRO
十月 '25
+38
在0个频道中
Get PRO
九月 '25
+44
在0个频道中
Get PRO
八月 '25
+47
在0个频道中
Get PRO
七月 '25
+35
在0个频道中
Get PRO
六月 '25
+46
在0个频道中
Get PRO
五月 '25
+55
在0个频道中
Get PRO
四月 '25
+57
在0个频道中
Get PRO
三月 '25
+110
在1个频道中
Get PRO
二月 '25
+105
在2个频道中
Get PRO
一月 '25
+159
在53个频道中
Get PRO
十二月 '24
+59
在0个频道中
Get PRO
十一月 '24
+70
在0个频道中
Get PRO
十月 '24
+210
在42个频道中
Get PRO
九月 '24
+608
在251个频道中
Get PRO
八月 '24
+147
在0个频道中
Get PRO
七月 '24
+203
在54个频道中
Get PRO
六月 '24
+492
在244个频道中
Get PRO
五月 '24
+563
在189个频道中
Get PRO
四月 '24
+461
在23个频道中
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 28 六月 | 0 | |||
| 27 六月 | 0 | |||
| 26 六月 | +1 | |||
| 25 六月 | +1 | |||
| 24 六月 | 0 | |||
| 23 六月 | 0 | |||
| 22 六月 | +3 | |||
| 21 六月 | +2 | |||
| 20 六月 | 0 | |||
| 19 六月 | 0 | |||
| 18 六月 | +1 | |||
| 17 六月 | 0 | |||
| 16 六月 | 0 | |||
| 15 六月 | +2 | |||
| 14 六月 | +1 | |||
| 13 六月 | +1 | |||
| 12 六月 | 0 | |||
| 11 六月 | +1 | |||
| 10 六月 | 0 | |||
| 09 六月 | 0 | |||
| 08 六月 | +2 | |||
| 07 六月 | 0 | |||
| 06 六月 | 0 | |||
| 05 六月 | +2 | |||
| 04 六月 | 0 | |||
| 03 六月 | +3 | |||
| 02 六月 | +2 | |||
| 01 六月 | 0 |
频道帖子
🤔 Что такое ключевое слово transient?
transient используется в Java, чтобы исключить поле из сериализации. То есть при записи объекта в поток (например, в файл), поля, помеченные как transient, не будут сохранены.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
| 2 | 🤔 Что известно про паттерны проектирования?
Паттерны решают часто встречающиеся архитектурные задачи. В Android популярны:
- MVVM, MVP, MVC — разделение логики и UI.
- Singleton — для глобального доступа к объекту.
- Factory — для создания объектов.
- Observer — для подписки на события (LiveData, Flow).
- Builder — для пошаговой конфигурации сложных объектов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 234 |
| 3 | 🤔 Что нужно сделать, чтобы описать GET-запрос?
Для описания GET-запроса нужно указать:
- метод запроса — GET;
- URL или эндпоинт;
- заголовки (например, авторизация, тип ответа);
- параметры запроса (в URL-строке);
- ожидаемый ответ — его структура, формат (например, JSON).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 262 |
| 4 | 🤔 Какие способы навигации знаешь?
В Android есть несколько способов навигации между экранами. Давай разберём основные.
🟠Activity-based навигация
Каждый экран – это отдельная Activity, переход осуществляется с помощью Intent.
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
🟠Fragment-based навигация
Один Activity содержит несколько Fragment, навигация через FragmentManager.
supportFragmentManager.beginTransaction()
.replace(R.id.container, SecondFragment())
.addToBackStack(null)
.commit()
🟠Navigation Component (Jetpack)
Google рекомендует Navigation Component для удобной работы с Fragment.
findNavController().navigate(R.id.action_firstFragment_to_secondFragment)
🟠Bottom Navigation / Tab Navigation
Используется BottomNavigationView или TabLayout для переключения между экранами.
bottomNavigationView.setOnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.home -> replaceFragment(HomeFragment())
R.id.profile -> replaceFragment(ProfileFragment())
}
true
}
🟠Drawer Navigation (Navigation Drawer)
Боковое меню (DrawerLayout) с пунктами навигации.
drawerLayout.openDrawer(GravityCompat.START)
🟠Deep Links и App Links
Навигация через ссылки (например, myapp://profile/123).
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="myapp" android:host="profile"/>
</intent-filter>
🟠Navigation в Jetpack Compose
Используется NavHost и NavController.
NavHost(navController, startDestination = "home") {
composable("home") { HomeScreen(navController) }
composable("profile") { ProfileScreen(navController) }
}
Ставь 👍 и забирай 📚 Базу знаний | 287 |
| 5 | 🤔 Что означает принцип Барбары Лисков?
Принцип подстановки Лисков (из SOLID): если класс B наследуется от класса A, то объекты класса A могут быть заменены на объекты класса B без нарушения корректности программы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 306 |
| 6 | 🤔 Что такое модификаторы доступа?
Модификаторы доступа (Access Modifiers) — это ключевые слова, которые определяют, кто может видеть и использовать класс, переменную или метод.
Они помогают инкапсулировать данные и защищать код от неправильного использования.
🚩Модификаторы доступа в Java
Пример Java
public class Example {
private int a = 10; // ❌ Только внутри класса
int b = 20; // ✅ Видно внутри пакета (package-private)
protected int c = 30; // ✅ Видно в пакете и наследниках
public int d = 40; // ✅ Доступно везде
}
🚩Модификаторы доступа в Kotlin
В Kotlin есть почти такие же модификаторы, но package-private заменён на internal.
Пример Kotlin
class Example {
private val a = 10 // ❌ Только в этом классе
internal val b = 20 // ✅ Видно в модуле
protected val c = 30 // ✅ Видно в наследниках
public val d = 40 // ✅ Видно везде (по умолчанию)
}
🚩Где используются модификаторы доступа?
Для полей (переменных класса)
public class User {
private String name; // ❌ Скрыто от других классов
public User(String name) {
this.name = name;
}
public String getName() { // ✅ Доступ через метод
return name;
}
}
Для методов
class Animal {
protected void makeSound() { // ✅ Доступен только в наследниках
System.out.println("Животное издаёт звук");
}
}
class Dog extends Animal {
public void bark() {
makeSound(); // ✅ Разрешено, потому что `protected`
System.out.println("Гав-гав!");
}
}
Для классов
public class Car { } // ✅ Доступен везде
class Engine { } // ❌ Только в этом пакете
В Kotlin можно делать private class, но только внутри другого класса.
class Car {
private class Engine // ❌ Только в этом классе
}
Ставь 👍 и забирай 📚 Базу знаний | 308 |
| 7 | 🤔 Все наследники какого класса unchecked?
Все unchecked исключения — это подклассы RuntimeException.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 331 |
| 8 | Осталось 3 часа до конца акции:
«Пожизненный PRO тариф — по цене 1 года»
Поиск работы отнимает силы, время и веру в себя, но не у тех кто использует easyoffer PRO. Успей сделать самую выгодную инвестицию в развитие своей карьеры.
Акция закончится уже сегодня 23 июня 23:59 по мск:
👉 https://easyoffer.ru/pro | 92 |
| 9 | 🤔 Разница PriorityQueue, Deque?
- PriorityQueue — структура, где элементы обрабатываются по приоритету, а не по порядку добавления.
- Deque (двусторонняя очередь) — позволяет добавлять/удалять элементы с обеих сторон. Поддерживает поведение как стека, так и очереди.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 363 |
| 10 | Последний день акции:
«Пожизненный PRO тариф — по цене 1 года»
🚀 PRO включает:
– Полный доступ ко всем грейдам и профессиям
– База live-coding задач и вопросов из технических собеседований с вероятностью их встречи
– Примеры лучших ответов от Senior разработчиков
– 1100+ записи реальных собеседований, в том числе в топовые компании (Сбер, Авито, Яндекс, WB, OZON, МТС и др.)
– База 400+ тестовых заданий от компаний.
– Автоотклики на вакансии в хедхантер
– Аналитика ТОП-требований из вакансий для лучшего написания резюме и прохождения ATS систем рекрутеров
– Генератор уникального резюме и CV под каждую вакансию
– Тренажеры подготовки к собеседованию: «Реальное собеседование» и «Проработка вопросов» по методике интервальных повторений (как Anki)
– (скоро) Агрегатор вакансий
– (скоро) Сообщество
Акция закончится уже сегодня 23 июня 23:59 по мск:
👉 https://easyoffer.ru/pro | 233 |
| 11 | 🤔 Как сохранять и применять настройки темы?
– Хранить выбранную тему в SharedPreferences,
– При старте приложения (или Activity) применять тему до setContentView,
– В случае использования DayNight — можно использовать AppCompatDelegate.setDefaultNightMode().
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 426 |
| 12 | Пожизненный PRO тариф — по цене 1 года.
Покупаешь один раз — пользуешься всю жизнь:
👉 https://easyoffer.ru/pro
🚀 PRO-доступ закроет 99% проблем на пути к офферу:
1. Полный доступ ко всем грейдам и профессиям. Не важно, Junior вы или Senior, Тестировщик, Разработчик, Проджект — вы получите материалы под ваш текущий уровень и цели, без ограничений.
2. База live-coding задач и вопросов с реальных собесов с уникальной системой вероятности их встречи. Вы будете готовиться не вслепую, а точечно по тем темам, которые спрашивают чаще всего.
3. Эталонные ответы от Senior-разработчиков. Никакой воды и догадок — только четкие, структурированные решения, за которые дают «зеленый свет» к офферу
4. 1100+ записей реальных собеседований (включая топы: Сбер, Авито, Яндекс, WB, OZON, МТС). Вы увидите всё изнутри: как спрашивают, как отвечают сильные кандидаты и на каких ошибках проваливаются 80% проходящих.
5. База 400+ тестовых заданий. Если вы еще студент, то практикуйтесь на решении задач, которые помогут попасть на собес
6. Автоотклики на Хедхантере — пока вы спите, ваше резюме летит к рекрутерам автоматически. Это экономия сотен часов ручного кликанья.
7. Аналитика ТОП-требований из вакансий. Мы парсим рынок и показываем, какие скиллы сейчас в цене. Это позволит вам точечно апгрейдить резюме и проходить суровые ATS-фильтры (которые отсеивают до 75% резюме еще до просмотра рекрутером).
8. Генератор уникального резюме и CV под каждую вакансию. Забудьте про «универсальное» резюме — нейросеть адаптирует ваш опыт под конкретную позицию за минуту, повышая шансы на приглашение в разы.
9. Тренажеры подготовки к собеседованию:
«Реальное собеседование» — сценарий вопросов из реальных интервью
«Проработка вопросов» — флеш карточки с вопросами/ответами по методике интервальных повторений (как Anki)
10. (Скоро) Агрегатор вакансий — все вакансии из HH, Telegram, LinkedIn и других площадок в одной ленте.
11. (Скоро) Закрытое комьюнити — нетворкинг и помощь в сложных вопросах от таких же целеустремленных айтишников.
Завтра последний день акции:
👉 https://easyoffer.ru/pro | 281 |
| 13 | 🤔 Что такое px, dp, sp?
- px (pixels) — абсолютные пиксели экрана.
- dp (density-independent pixels) — масштабируемые пиксели, зависят от плотности экрана.
- sp (scale-independent pixels) — как dp, но учитывают пользовательские настройки размера шрифта.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 479 |
| 14 | 🤔 Из каких основных элементов состоит Dagger?
Dagger – это фреймворк для внедрения зависимостей (DI), который помогает управлять созданием и передачей объектов в приложении. В основе Dagger лежат граф зависимостей, который состоит из следующих ключевых элементов:
🚩`@Module` и `@Provides` – создание зависимостей
@Module – это класс, который предоставляет зависимости.
@Provides – аннотация, указывающая, что метод создаёт объект для графа Dagger.
@Module
class NetworkModule {
@Provides
fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl("https://api.example.com")
.build()
}
}
🟠`@Inject` – внедрение зависимостей
@Inject в конструкторе – позволяет Dagger автоматически создавать объект без @Module.
class ApiService @Inject constructor(private val retrofit: Retrofit) {
fun fetchData() { /*...*/ }
}
🟠`@Component` – связывание модулей и мест внедрения
@Component – это интерфейс, который соединяет модули и классы, где нужны зависимости.
@Component(modules = [NetworkModule::class])
interface AppComponent {
fun inject(activity: MainActivity) // Указываем, куда внедрять зависимости
}
🟠`@Singleton` – область жизни объекта
Используется для создания одного экземпляра объекта на всё приложение.
@Singleton
@Component(modules = [NetworkModule::class])
interface AppComponent
🟠`@Binds` – привязка интерфейса к реализации
Если у нас есть интерфейс и его реализация, лучше использовать @Binds вместо @Provides.
interface Repository {
fun getData(): String
}
class RepositoryImpl @Inject constructor() : Repository {
override fun getData() = "Data from repository"
}
@Module
abstract class RepositoryModule {
@Binds
abstract fun bindRepository(repo: RepositoryImpl): Repository
}
🟠`Subcomponent` – вложенные компоненты
Если нужно создать зависимости с разными областями жизни (например, Activity, Fragment), используют @Subcomponent.
@Subcomponent
interface ActivityComponent {
fun inject(activity: MainActivity)
}
Ставь 👍 и забирай 📚 Базу знаний | 481 |
| 15 | 🤔 В чём различия между уровнями доступа: public, private, protected?
- public — доступен везде, из любого класса и пакета.
- private — доступен только внутри текущего класса или файла.
- protected — доступен внутри класса и его подклассах. В Kotlin — также в том же файле.
Они управляют инкапсуляцией, защищают данные от некорректного использования и определяют границы модулей.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 395 |
| 16 | Привет, ребята!
У нас для вас отличные новости — на easyoffer вышло сразу несколько крупных обновлений:
1. Автоотклики на HeadHunter
Снова работают в полную силу — можно смело возвращаться к активному поиску.
2. Новый раздел «Резюмейкер»
Теперь вы можете быстро создавать уникальные резюме, адаптированные под каждую вакансию, и сразу добавлять сопроводительное письмо. Это заметно повышает шансы получить приглашение на собеседование.
3. База вопросов стала чище
Мы навели порядок и удалили около 30% дубликатов.
Ориентироваться стало проще.
––––––––––––––––––
🔥 Акция в честь обновления
Пожизненный тариф easyoffer PRO — по цене одного года.
Успейте до 23 июня:
👉 https://easyoffer.ru/pro
––––––––––––––––––
Что дальше?
В ближайшие пару недель добавим ещё два раздела:
1. Сообщество с чатами по всем профессиональным направлениям.
2. Агрегатор вакансий, чтобы поиск работы стал ещё удобнее. | 277 |
| 17 | 🤔 Зачем нужен класс Nothing?
Класс `Nothing` в Kotlin представляет тип, который не имеет значения и используется для обозначения невозможного кода, например, в функциях, которые всегда выбрасывают исключение или никогда не завершаются. Это полезно для обозначения точек кода, которые не должны быть достигнуты. `Nothing` позволяет более точно описывать типы функций и улучшает читаемость и безопасность кода. Он используется как "конечный" тип, который не возвращает значений.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 399 |
| 18 | 🤔 Как запросить, чтобы система выделила больше ОЗУ на приложение?
Нельзя напрямую "попросить" больше памяти, но:
- Указать в manifest:
- Это увеличит лимит на heap, но злоупотреблять нельзя — система может завершить процесс.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 474 |
| 19 | 🤔 Откуда приходит и куда уходит Bundle?
Bundle передаётся через Intent или setArguments, и доступен при запуске Activity/Fragment или в методе onSaveInstanceState. Он используется как для передачи данных, так и для восстановления состояния.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний | 554 |
| 20 | 🤔 Как бороться с тем что из-за deeplink активити может открыться много раз?
Когда используется deeplink, может возникнуть проблема, что одно и то же Activity может быть открыто несколько раз в стеке задач. Это происходит, если приложение запускается из внешнего источника (например, из браузера или другого приложения), и Android создает новую задачу или новую копию Activity вместо использования уже существующей. Чтобы справиться с этим, нужно правильно настроить launchMode, интенты и флаги.
🚩Причина проблемы
При запуске приложения через deep link, система Android может:
1. Создать новый экземпляр вашего Activity (даже если оно уже существует в стеке задач).
2. Поместить новую задачу в стек задач.
Если это не контролировать, пользователь может увидеть много дубликатов одного и того же Activity, что плохо для UX и может вызвать утечку памяти.
🚩Решения
🟠Использование launchMode в манифесте
В файле AndroidManifest.xml можно настроить поведение Activity с помощью атрибута launchMode:
singleTop: Если Activity уже находится на вершине стека, система не будет создавать новый экземпляр.
singleTask: Убедитесь, что только один экземпляр Activity существует в задаче. Если Activity уже существует, система передаст интент в метод onNewIntent().
singleInstance: Подходит для случаев, когда Activity должно быть абсолютно уникальным (используется редко).
<activity
android:name=".MyActivity"
android:launchMode="singleTop" />
🟠Использование флагов в интенте
Если вы используете deep link или запускаете Activity вручную, можно добавить флаги, чтобы управлять созданием экземпляров:
val intent = Intent(this, MyActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
startActivity(intent)
🟠Обработка метода onNewIntent()
Если используется singleTop или singleTask, система вызывает метод onNewIntent(Intent intent) вместо создания нового экземпляра Activity. Этот метод можно переопределить для обработки новых данных из интента
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
// Обработка нового интента
val data = intent?.data
// Используйте данные deeplink
}
🟠Использование taskAffinity
Если требуется, чтобы разные deep link открывали одну и ту же задачу, можно настроить taskAffinity. Это нужно реже, но полезно, если нужно обрабатывать ссылки с разными контекстами.
🟠Проверка состояния Activity
Дополнительно можно вручную проверять, существует ли нужное Activity в текущем состоянии приложения, например, используя LiveData или ViewModel.
Файл AndroidManifest.xml
<activity
android:name=".MyActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="example.com"
android:path="/deeplink" />
</intent-filter>
</activity>
Файл MyActivity.kt
class MyActivity : AppCompatActivity() {
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
// Обработка данных из нового интента (deeplink)
val uri = intent?.data
uri?.let {
// Например, получить параметры из ссылки
val param = it.getQueryParameter("id")
Log.d("Deeplink", "Parameter id: $param")
}
}
}
Ставь 👍 и забирай 📚 Базу знаний | 539 |
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
