🤝 Добро пожаловать в экосистему YeaHub!
YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников. Подпишитесь на наши каналы, чтобы не пропустить:
👩💻 C# 🤖 ML Engineer
👩💻 C/C++ 🖥 Data Science
👩💻 Java 👩💻 Python
🖥 PHP 👩💻 Frontend
👣 Rust 👣 Golang
🖥 Ruby 👩💻 Node.js
👩💻 QA 👩💻 Android
👩💻 iOS 👩💻 Game Dev
💻 DevOps 🖥 Общее IT
📆 Митапы 👨💻 Вакансии
Здесь вы найдете всё, что нужно для вашего направления — в одном месте, без необходимости подписываться на десятки каналов.
💬 YeaHub Community: Общение, обмен опытом и поддержка единомышленников
В наших каналах вы найдете:
🔹 Вакансии и карьерные рекомендации
🔹 Мероприятия и митапы
🔹 Вопросы и задачи с собеседований
🔹 Практику, теорию, курсы и полезные советы
👍 Обучайтесь, общайтесь, растите вместе с https://yeahub.ru
YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников. Подпишитесь на наши каналы, чтобы не пропустить:
📆 Митапы 👨💻 Вакансии
Здесь вы найдете всё, что нужно для вашего направления — в одном месте, без необходимости подписываться на десятки каналов.
В наших каналах вы найдете:
🔹 Вакансии и карьерные рекомендации
🔹 Мероприятия и митапы
🔹 Вопросы и задачи с собеседований
🔹 Практику, теорию, курсы и полезные советы
Миссия YeaHub — создать сообщество активных IT-специалистов, которые вместе развиваются, задают стандарты в индустрии, общаются и помогают друг другу. Мы стремимся к созданию саморегулирующегося сообщества, где каждый участник вносит вклад в развитие отрасли и поддерживает высокие профессиональные стандарты.
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Mobile | YeaHub pinned «🤝 Добро пожаловать в экосистему YeaHub! YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников. Подпишитесь на наши каналы, чтобы не пропустить: 👩💻 C# 🤖 ML Engineer 👩💻 …»
👨🏻💻 Мобильный разработчик (Kotlin) Junior+/ Middle
Локация: Удалённо в РФ
Компания: CODEX
ЗП: от 80 000 до 150 000 р.
Занятость: Полная/Частичная
Требуемый опыт работы: от 1,5 лет
Требования
▪️ Опыт коммерческой разработки на Kotlin 1,5+ года;
▪️ Уверенные знания работы с REST API и СУБД.
Условия
▪️ Конкурентная заработная плата и возможность карьерного роста;
▪️ Гибкий график работы и комфортные условия труда;
▪️ Возможность участия в интересных и амбициозных проектах, а также обучение новым технологиям;
▪️ Возможности для профессионального и личного роста;
▪️ Работа в команде профессионалов;
▪️ Дружелюбная атмосфера и поддержка коллег.
💬 Резюме отправлять: @nikita_recr
Локация: Удалённо в РФ
Компания: CODEX
ЗП: от 80 000 до 150 000 р.
Занятость: Полная/Частичная
Требуемый опыт работы: от 1,5 лет
Требования
▪️ Опыт коммерческой разработки на Kotlin 1,5+ года;
▪️ Уверенные знания работы с REST API и СУБД.
Условия
▪️ Конкурентная заработная плата и возможность карьерного роста;
▪️ Гибкий график работы и комфортные условия труда;
▪️ Возможность участия в интересных и амбициозных проектах, а также обучение новым технологиям;
▪️ Возможности для профессионального и личного роста;
▪️ Работа в команде профессионалов;
▪️ Дружелюбная атмосфера и поддержка коллег.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 До какого момента ViewModel гарантирует сохранение состояния?
ViewModel в Android гарантирует сохранение состояния до тех пор, пока соответствующее Activity или Fragment находится в памяти.
🟠 Поворот экрана
При изменении конфигурации, например, повороте экрана, Activity уничтожается и пересоздается. ViewModel выживает эти изменения конфигурации, обеспечивая сохранение состояния.
🟠 Навигация между фрагментами
Когда вы переходите между фрагментами в одном Activity, ViewModel фрагмента сохраняет свои данные.
🚩 Когда ViewModel уничтожается
🟠 Завершение процесса
Если операционная система решает завершить процесс приложения для освобождения ресурсов, ViewModel будет уничтожен.
🟠 Удаление Activity из памяти
Когда пользователь закрывает Activity или приложение завершает работу (например, при нажатии кнопки "назад" до закрытия Activity), ViewModel будет уничтожен вместе с Activity.
Пример использования ViewModel
👉 Новости 👉 Платформа
ViewModel в Android гарантирует сохранение состояния до тех пор, пока соответствующее Activity или Fragment находится в памяти.
При изменении конфигурации, например, повороте экрана, Activity уничтожается и пересоздается. ViewModel выживает эти изменения конфигурации, обеспечивая сохранение состояния.
Когда вы переходите между фрагментами в одном Activity, ViewModel фрагмента сохраняет свои данные.
Если операционная система решает завершить процесс приложения для освобождения ресурсов, ViewModel будет уничтожен.
Когда пользователь закрывает Activity или приложение завершает работу (например, при нажатии кнопки "назад" до закрытия Activity), ViewModel будет уничтожен вместе с Activity.
Пример использования ViewModel
// ViewModel
public class MyViewModel extends ViewModel {
private MutableLiveData<String> data;
public MyViewModel() {
data = new MutableLiveData<>();
}
public LiveData<String> getData() {
return data;
}
public void setData(String newData) {
data.setValue(newData);
}
}
// Activity
public class MyActivity extends AppCompatActivity {
private MyViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = new ViewModelProvider(this).get(MyViewModel.class);
// Подписка на изменения данных
viewModel.getData().observe(this, newData -> {
// Обновление UI
});
// Установка новых данных
viewModel.setData("Hello, World!");
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
используется для
выполнения НТТР- запросов в Kotlin с помощью библиотеки Ktor?
Anonymous Quiz
0%
httpClient.get()
0%
httpRequest.send()
75%
httpClient.request()
25%
httpRequest.execute()
#ЧеКак
🤔 Какой минус есть у виртуальных таблиц?
Виртуальные таблицы, такие как те, что используются в SQLite с помощью
🟠 Ограниченная поддержка стандартных функций SQL
Виртуальные таблицы могут не поддерживать все стандартные функции и возможности SQL, такие как ограничения (constraints), триггеры и определенные типы индексов. Это связано с тем, что их функциональность определяется модулем, который реализует виртуальную таблицу.
🟠 Производительность
Виртуальные таблицы могут иметь производительность ниже, чем обычные таблицы, особенно если они не оптимизированы должным образом. Производительность может пострадать из-за дополнительных накладных расходов, связанных с обработкой виртуальных таблиц на уровне приложения или расширений.
🟠 Сложность реализации и обслуживания
Использование виртуальных таблиц требует дополнительных знаний и опыта в разработке и обслуживании. Например, вам может потребоваться написать и поддерживать специализированные модули или расширения для реализации виртуальных таблиц, что увеличивает сложность кода и потенциальные затраты на поддержку.
👉 Новости 👉 Платформа
Виртуальные таблицы, такие как те, что используются в SQLite с помощью
CREATE VIRTUAL TABLE, предлагают мощные возможности для работы с данными. Однако они также имеют некоторые недостатки. Виртуальные таблицы могут не поддерживать все стандартные функции и возможности SQL, такие как ограничения (constraints), триггеры и определенные типы индексов. Это связано с тем, что их функциональность определяется модулем, который реализует виртуальную таблицу.
CREATE VIRTUAL TABLE my_virtual_table USING fts4(content TEXT);
Виртуальные таблицы могут иметь производительность ниже, чем обычные таблицы, особенно если они не оптимизированы должным образом. Производительность может пострадать из-за дополнительных накладных расходов, связанных с обработкой виртуальных таблиц на уровне приложения или расширений.
Использование виртуальных таблиц требует дополнительных знаний и опыта в разработке и обслуживании. Например, вам может потребоваться написать и поддерживать специализированные модули или расширения для реализации виртуальных таблиц, что увеличивает сложность кода и потенциальные затраты на поддержку.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Что такое мульти-декларации (destructuring declarations)?
Это способ извлечения значений из объекта и присвоения их сразу нескольким переменным. В Kotlin этот механизм поддерживается с помощью оператора распаковки (destructuring operator) — componentN(), где N — номер компонента.
При создании data класса Kotlin автоматически создает функции componentN() для каждого свойства класса, где N — номер позиции переменной в конструкторе. Функции componentN() возвращают значения свойств в порядке их объявления в конструкторе. Это позволяет использовать мульти-декларации для распаковки значений свойств и присваивания их отдельным переменным.
🚩 Пример
Если у нас есть data класс Person с двумя свойствами name и age, мы можем использовать мульти-декларации, чтобы извлечь эти свойства и присвоить их двум переменным:
Мульти-декларации также могут быть использованы с массивами и другими коллекциями:
👉 Новости 👉 Платформа
Это способ извлечения значений из объекта и присвоения их сразу нескольким переменным. В Kotlin этот механизм поддерживается с помощью оператора распаковки (destructuring operator) — componentN(), где N — номер компонента.
При создании data класса Kotlin автоматически создает функции componentN() для каждого свойства класса, где N — номер позиции переменной в конструкторе. Функции componentN() возвращают значения свойств в порядке их объявления в конструкторе. Это позволяет использовать мульти-декларации для распаковки значений свойств и присваивания их отдельным переменным.
Если у нас есть data класс Person с двумя свойствами name и age, мы можем использовать мульти-декларации, чтобы извлечь эти свойства и присвоить их двум переменным:
data class Person(val name: String, val age: Int)
val person = Person("Alice", 29)
val (name, age) = person
println(name) // Alice
println(age) // 29
Также можно использовать мульти-декларации в циклах, чтобы итерироваться по спискам объектов и распаковывать значения свойств:
val people = listOf(Person("Alice", 30), Person("Bob", 40))
for ((name, age) in people) {
println("$name is $age years old")
}
// Alice is 30 years old
// Bob is 40 years oldМульти-декларации также могут быть использованы с массивами и другими коллекциями:
val list = listOf("apple", "banana", "orange")
val (first, second, third) = list
println(first) // apple
println(second) // banana
println(third) // orangePlease open Telegram to view this post
VIEW IN TELEGRAM
#Вакансии
👨💻 Android Developer
Локация: Удалённо в РФ
Компания: Effective
ЗП: до 300 000 р. на руки
Занятость: Полная
Требуемый опыт работы: 3+ лет
Effective – IT компания, специализирующаяся на заказной mobile и web-разработке высококачественных цифровых сервисов и продуктов для Retail, Telecom и B2G бизнесов.
🚩 Мы ожидаем от тебя
▪️Глубокое понимание Kotlin и Android;
▪️Опыт разработки UI компонентов с Compose и/или View;
▪️Опыт работы в многомодульных проектах. Умение применять RxJava 2 и Flow;
▪️Применение принципов Dependency Injection (Dagger 2);
▪️Опыт работы с Coroutines.
🚩 Будет плюсом
▪️Написание unit-тестов и опыт написания автотестов для Android (Espresso/Kaspresso);
▪️Опыт написания автотестов с подменой ответов бэкенда (моки);
▪️Работа с инструментами для тестирования серверного API (Postman, SoapUI).
🚩 Предстоящие задачи
▪️Работа в команде над разработкой Android приложения;
▪️Подключение к покрытию мобильных приложений автотестами;
▪️Автоматизация и поддержка сценариев тестирования в Android приложении;
▪️Необходимо писать авто тесты, оптимизировать и ускорять сами автотесты, дорабатывать CI-пайплайны;
▪️Писать и дорабатывать PageObject-ы для экранов;
▪️Дорабатывать тестовую систему для поддержки новых элементов и взаимодействия с ними;
▪️Дорабатывать тестовую инфраструктуру.
🚩 От нас
▪️Работа в аккредитованной IT компании;
▪️Лояльные руководители и отсутствие бюрократии;
▪️Performance review: регулярный фидбек от тимлидов, понимание зон роста, помощь в развитии в интересном направлении;
▪️Work-life balance: поддержка и компенсация обучения и здорового образа жизни;
▪️Ежегодные путешествия с командой: расширяем географию и завоевываем новые вершины, разделяем прекрасные моменты вместе;
▪️Совместные времяпровождения: Happy Friday & Monthly Stand-up, участие во внутренних мероприятиях и инициативах. Разделим интерес каждого и найдем хобби по душе;
▪️Smart-мероприятия для сотрудников как внутри компании и города, так и за пределами: мы организовываем Student Labs, DevFest для Senior-разработчиков
💬 Резюме отправлять: @Vitaly_Researcher
👉 Новости 👉 Платформа
Локация: Удалённо в РФ
Компания: Effective
ЗП: до 300 000 р. на руки
Занятость: Полная
Требуемый опыт работы: 3+ лет
Effective – IT компания, специализирующаяся на заказной mobile и web-разработке высококачественных цифровых сервисов и продуктов для Retail, Telecom и B2G бизнесов.
▪️Глубокое понимание Kotlin и Android;
▪️Опыт разработки UI компонентов с Compose и/или View;
▪️Опыт работы в многомодульных проектах. Умение применять RxJava 2 и Flow;
▪️Применение принципов Dependency Injection (Dagger 2);
▪️Опыт работы с Coroutines.
▪️Написание unit-тестов и опыт написания автотестов для Android (Espresso/Kaspresso);
▪️Опыт написания автотестов с подменой ответов бэкенда (моки);
▪️Работа с инструментами для тестирования серверного API (Postman, SoapUI).
▪️Работа в команде над разработкой Android приложения;
▪️Подключение к покрытию мобильных приложений автотестами;
▪️Автоматизация и поддержка сценариев тестирования в Android приложении;
▪️Необходимо писать авто тесты, оптимизировать и ускорять сами автотесты, дорабатывать CI-пайплайны;
▪️Писать и дорабатывать PageObject-ы для экранов;
▪️Дорабатывать тестовую систему для поддержки новых элементов и взаимодействия с ними;
▪️Дорабатывать тестовую инфраструктуру.
▪️Работа в аккредитованной IT компании;
▪️Лояльные руководители и отсутствие бюрократии;
▪️Performance review: регулярный фидбек от тимлидов, понимание зон роста, помощь в развитии в интересном направлении;
▪️Work-life balance: поддержка и компенсация обучения и здорового образа жизни;
▪️Ежегодные путешествия с командой: расширяем географию и завоевываем новые вершины, разделяем прекрасные моменты вместе;
▪️Совместные времяпровождения: Happy Friday & Monthly Stand-up, участие во внутренних мероприятиях и инициативах. Разделим интерес каждого и найдем хобби по душе;
▪️Smart-мероприятия для сотрудников как внутри компании и города, так и за пределами: мы организовываем Student Labs, DevFest для Senior-разработчиков
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
11%
as
0%
is
89%
as?
0%
safeCast
#ЧеКак
🤔 В чём различия наследования, композиции, агрегации?
Наследование предполагает создание нового класса на основе существующего. Композиция включает один класс в качестве части другого для использования его функциональности. Агрегация — слабая форма композиции, где включённый объект может существовать независимо от владельца.
👉 Новости 👉 Платформа
Наследование предполагает создание нового класса на основе существующего. Композиция включает один класс в качестве части другого для использования его функциональности. Агрегация — слабая форма композиции, где включённый объект может существовать независимо от владельца.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Как бы реализовал приложение, которое может загружать большие файлы на сервер?
Для реализации приложения, которое загружает большие файлы на сервер, необходимо учитывать несколько аспектов, таких как асинхронная обработка, устойчивость к изменениям конфигурации, восстановление после неудачных попыток загрузки и отображение состояния загрузки пользователю.
1⃣ Настройка зависимостей
В файле
2⃣ Настройка Retrofit
Создайте интерфейс для API и настройте Retrofit.
3⃣ Создание Worker для загрузки файла
Используйте WorkManager для загрузки файла в фоновом режиме.
👉 Новости 👉 Платформа
Для реализации приложения, которое загружает большие файлы на сервер, необходимо учитывать несколько аспектов, таких как асинхронная обработка, устойчивость к изменениям конфигурации, восстановление после неудачных попыток загрузки и отображение состояния загрузки пользователю.
В файле
build.gradle вашего модуля добавьте следующие зависимости: dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'androidx.work:work-runtime-ktx:2.7.1'
}Создайте интерфейс для API и настройте Retrofit.
// UploadAPI.java
public interface UploadAPI {
@Multipart
@POST("/upload")
Call<ResponseBody> uploadFile(@Part MultipartBody.Part file);
}
// RetrofitClient.java
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl) {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
Используйте WorkManager для загрузки файла в фоновом режиме.
// FileUploadWorker.java
public class FileUploadWorker extends Worker {
public FileUploadWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
}
@NonNull
@Override
public Result doWork() {
String filePath = getInputData().getString("file_path");
if (filePath == null) {
return Result.failure();
}
File file = new File(filePath);
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
UploadAPI api = RetrofitClient.getClient("https://yourserver.com/").create(UploadAPI.class);
Call<ResponseBody> call = api.uploadFile(body);
try {
Response<ResponseBody> response = call.execute();
if (response.isSuccessful()) {
return Result.success();
} else {
return Result.retry();
}
} catch (IOException e) {
e.printStackTrace();
return Result.retry();
}
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM