Токен в SharedPreferences открытым текстом
Читается из бэкапа и на рутованном устройстве. Перенесите в EncryptedSharedPreferences.
prefs.edit() .putString("token", token)
принимаемлист ожидания — без оплаты
Опытный разработчик проверит ваше тестовое задание или pet-проект и пришлёт письменный отчёт: что исправить в первую очередь, а что можно оставить.Опытный разработчик проверит тестовое или pet-проект и пришлёт письменный отчёт: что исправить в первую очередь.
Тестовое съедает выходные, а причину отказа почти никогда не объясняют. Дальше обычно три пути — и все так себе.Тестовое съедает выходные, а причину отказа почти никогда не объясняют.
Компания не скажет, что не так. Вы исправляете наугад или не исправляете вовсе.
Какие из них заметит проверяющий, а какие — шум? Ассистент не знает вакансию и не отвечает за совет.Какие из них заметит проверяющий, а какие — шум? Ассистент не знает вакансию.
Коллеги заняты, ментор — это созвоны и почасовая оплата, курс — месяцы и десятки тысяч рублей.Коллеги заняты, ментор — это созвоны, курс — месяцы и десятки тысяч рублей.
Не список из 40 замечаний, а план: что исправить обязательно, что можно позже и что уже сделано хорошо.Не 40 замечаний, а план: что исправить обязательно, что позже и что уже хорошо.
Фрагменты отчёта по учебному Android-проекту. Каждое замечание — с местом в коде, объяснением и примером исправления.Фрагменты отчёта по учебному Android-проекту.
Читается из бэкапа и на рутованном устройстве. Перенесите в EncryptedSharedPreferences.
prefs.edit() .putString("token", token)
Исключение из корутины не перехвачено: без интернета приложение падает. Добавьте состояние ошибки загрузки.Исключение из корутины не перехвачено — без интернета приложение падает. Добавьте состояние ошибки загрузки.
viewModelScope.launch {
_state.value = Data(api.search(q))
}
android:exported="true" без intent-filter позволяет запускать вашу Activity извне. Уберите экспорт, если он не нужен.
android:exported="true"
Фрагменты отчёта по учебному проекту на React и TypeScript. Каждое замечание — с местом в коде, объяснением и примером исправления.Фрагменты отчёта по учебному проекту на React.
Старый запрос может ответить позже нового и показать не те товары. Отменяйте прошлый запрос при новом вводе.Старый ответ может затереть новый. Отменяйте прошлый запрос.
useEffect(() => { fetch(`/api/products?q=${query}`) .then((r) => r.json()) .then(setItems); }, [query]);
dangerouslySetInnerHTML с текстом из API открывает дорогу XSS. Выводите описание как текст.dangerouslySetInnerHTML с текстом из API — путь для XSS. Выводите как текст.
<p className="card__text"
dangerouslySetInnerHTML={{
__html: product.description,
}} />
После удаления товара введённое количество «переезжает» к соседней строке. Используйте id.
{items.map((item, index) => (
<CartRow key={index} item={item} />
))}
Фрагменты отчёта по учебному сервису на Java и Spring Boot. Каждое замечание — с местом в коде, объяснением и примером исправления.Фрагменты отчёта по учебному сервису на Spring Boot.
Параметр запроса склеивается со строкой SQL — классическая инъекция. Передавайте значение параметром.Параметр склеивается со строкой SQL — это инъекция. Передавайте параметром.
jdbc.query("SELECT * FROM orders" + " WHERE status = '" + status + "'", mapper);
Резерв товара и сохранение заказа — две отдельные операции. При ошибке на второй остаётся резерв без заказа.При ошибке остаётся резерв товара без заказа.
public Order create(NewOrder order) { stock.reserve(order.items()); return orders.save(order.toEntity()); }stock.reserve(order.items()); return orders.save(order.toEntity());
findAll() без пагинации: на тысячах заказов ответ станет огромным и медленным. Добавьте Pageable.
@GetMapping public List<OrderDto> list() { return service.list().stream() .map(OrderDto::from).toList(); }
Фрагменты отчёта по учебному приложению на Swift и SwiftUI. Каждое замечание — с местом в коде, объяснением и примером исправления.Фрагменты отчёта по учебному приложению на SwiftUI.
try! превращает любую ошибку сети в падение. Покажите ошибку и кнопку «Повторить».
api.fetchNotes { result in
self.notes = try! result.get()
}
UserDefaults — обычный plist, он попадает в бэкап устройства. Для токена есть Keychain.UserDefaults попадает в бэкап. Для токена есть Keychain.
UserDefaults.standard .set(token, forKey: "authToken")
@ObservedObject не владеет моделью: экран создаёт её заново. Для своей модели нужен @StateObject.
@ObservedObject var model = NotesViewModel()
Всё в переписке. Ни одного созвона.
Ссылка на репозиторий и пара слов о вакансии. 3 минуты, оплата не нужна.Ссылка на репозиторий и пара слов о вакансии. Оплата не нужна.
За 1 дня смотрим проект и пишем, на чём сфокусируемся. Бесплатно.За 1 дня смотрим проект и пишем, на чём сфокусируемся.
Присылаем ссылку: карта или СБП. После оплаты присылаем чек.Ссылка на оплату картой или СБП, после оплаты — чек.
Через 1–5 дней — отчёт и ответы на вопросы в переписке.Через 1–5 дней — отчёт и ответы на вопросы.
Быстро, но замечания никто не проверяет, и ассистент не знает вашу вакансию.
Разбор голосом, письменного отчёта обычно не остаётся.
Месяцы обучения, когда нужно проверить одно тестовое.
| Критерий | CodeCheckup | ИИ-ассистент | Ментор на созвоне | Курс с ревью |
|---|---|---|---|---|
| Письменный отчёт, который остаётся у вас | нет— | Частично | ||
| Приоритеты: что исправить обязательно | Частично | Частично | ||
| Сверка с требованиями тестового | Если попросить | нет— | ||
| Каждое замечание проверено человеком | нет— | |||
| Без созвонов | нет— | Частично | ||
| Цена | от 1 000 ₽ разово | Оплата за токены | Оплата за час | Десятки тысяч рублей |
Кто проверяет код, что с ним происходит и как устроена оплата — говорим заранее.
От трёх лет опыта коммерческой разработки. Работают по общему чек-листу, оплата только после назначения ревьюера.
Для анализа временно скачиваем код в локальное рабочее окружение. Все скачанные копии, включая временные и резервные, удаляем не позднее 24 часов после завершения работ. Код и отчёт не публикуем; другого ревьюера привлекаем только по предварительному согласованию. Доступ можно отозвать сразу после отчёта.
Сначала проверяем заявку, потом присылаем ссылку на оплату. После оплаты присылаем чек.
Отчёт не помог — вернём 100% за первый заказ. Опоздали со сроком или отчёт не по стандарту — вернём за любой.
Платите только за результат — отчёт по вашему проекту. Тариф зависит от объёма кода: не уверены — выберите примерно, до оплаты посчитаем и подтвердим.Платите только за результат — отчёт по вашему проекту. Тариф зависит от объёма кода: выберите примерно, до оплаты подтвердим.
принимаемлист ожидания — без оплаты
По Android, Frontend, Backend и iOS — заявка без оплаты: напишем, когда подтвердим ревьюера.
В любой тариф входит:
Не нашли ответ? Напишите нам в Telegram @codecheckup или на help@codecheckup.app — ответим в течение рабочего дня.
Только ревьюер вашего стека. Код не публикуем и не используем в примерах без вашего письменного согласия.Только ревьюер вашего стека. Код не публикуем и не используем в примерах без вашего согласия.
Добавьте наш аккаунт CodeCheckup с правами на чтение (в GitLab — роль Reporter). Для анализа временно скачиваем код; все скачанные копии, включая временные и резервные, удаляем не позднее 24 часов после завершения работ. Изменения в репозиторий не вносим. После отчёта доступ можно сразу отозвать; если для ответа на вопрос понадобится код, отдельно согласуем временный доступ или другой способ передать нужные сведения.
Человек. Каждый отчёт ревьюер пишет сам, ваш код не передаётся в сервисы искусственного интеллекта.
Ответ на заявку — за 1 дня, отчёт — за 1–5 дней после оплаты и получения доступа к коду.
Ориентируйтесь на строки своего кода без сгенерированных файлов и библиотек: до ~1 000 — Экспресс, до ~2 000 — Стандарт, до ~3 000 — Глубокий. Не уверены — выберите примерно: при проверке заявки посчитаем и подтвердим тариф до оплаты. Если в проекте больше 3 000 строк, предложим, на чём сфокусироваться.
Нет. Мы только ревьюим и объясняем, что и как исправить.
Напишите в течение 7 дней и одной фразой — чего не хватило. Доработаем или сразу вернём 100%, как скажете. Спорить не будем. Гарантия — на первый заказ. А если мы опоздали или отчёт не по стандарту — вернём деньги за любой заказ.
Оплата сейчас не нужна. За 1 дня посмотрим проект и ответим, берём ли его и на чём сфокусируемся.Оплата сейчас не нужна. За 1 дня ответим, берём ли проект.
Токен хранится открытым текстом
SharedPreferences попадает в бэкап и читается на рутованном устройстве. Проверяющий заметит это за минуту.Попадает в бэкап и читается на рутованном устройстве. Перенесите в EncryptedSharedPreferences.