Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 210новых вакансий за сутки·93 612вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 266
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии986
  • AI вакансии950
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

DevOps и инфраструктура

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

Аналитика и данные

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

Другие направления

  • Проджект-менеджер620
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 276
  • Вакансии в Европе23 819
  • Вакансии в Канаде4 471
  • Работа в России3 904

По формату

  • Удалённые вакансии74 928
  • Релокация в США44 273
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме BlazorВсе вопросы
BlazorMiddleОпыт

Расскажите о случае, когда вы улучшали performance, accessibility, testing или maintainability в проекте на Blazor.

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

В реальном Blazor-проекте улучшения достигаются через виртуализацию списков (Virtualize), aria-атрибуты доступности, bUnit-тесты компонентов и разделение логики через сервисы.

Performance: виртуализация списков

Компонент <Virtualize>, доступный с .NET 6, рендерит только видимые элементы. Мы заменили @foreach на виртуализацию и получили ускорение рендеринга с 1200 мс до 80 мс на списке из 5000 элементов:

<Virtualize Items="_jobs" Context="job" OverscanCount="5">
    <ItemContent>
        <JobCard Job="job" />
    </ItemContent>
    <Placeholder>
        <JobCardSkeleton />
    </Placeholder>
</Virtualize>

Для серверных данных использовали перегрузку с ItemsProvider, чтобы подгружать страницы по требованию:

private async ValueTask<ItemsProviderResult<Job>> LoadJobs(
    ItemsProviderRequest request)
{
    var page = await _jobService.GetPageAsync(request.StartIndex, request.Count);
    return new ItemsProviderResult<Job>(page.Items, page.TotalCount);
}

Улучшение качества Blazor-проекта: реальный опыт

В одном из проектов мы столкнулись с несколькими проблемами одновременно: медленная прокрутка списка из 10 000 элементов, отсутствие доступности для скринридеров, отсутствие тестового покрытия компонентов и монолитные компоненты на 500+ строк. Ниже — конкретные шаги, которые мы предприняли.

Accessibility: ARIA и навигация с клавиатуры

Аудит с Axe DevTools выявил: кнопки без aria-label, диалоговые окна без role="dialog", отсутствие focus trap в модальных окнах. Исправления:

<button @onclick="OpenModal"
        aria-haspopup="dialog"
        aria-expanded="@_isOpen"
        aria-controls="details-modal">
    Подробнее
</button>

<div id="details-modal"
     role="dialog"
     aria-modal="true"
     aria-labelledby="modal-title"
     tabindex="-1">
    <h2 id="modal-title">Детали вакансии</h2>
    <!-- контент -->
</div>

Testing: bUnit

Компонентные тесты писали с помощью библиотеки bUnit:

using Bunit;
using Xunit;

public class JobCardTests : TestContext
{
    [Fact]
    public void JobCard_ShowsSalary_WhenProvided()
    {
        var job = new Job { Title = "Dev", Salary = "$5000" };
        var cut = RenderComponent<JobCard>(
            parameters => parameters.Add(p => p.Job, job));

        cut.Find(".salary").MarkupMatches("<span class=\"salary\">$5000</span>");
    }

    [Fact]
    public void JobCard_HidesSalary_WhenNull()
    {
        var job = new Job { Title = "Dev", Salary = null };
        var cut = RenderComponent<JobCard>(
            parameters => parameters.Add(p => p.Job, job));

        Assert.Empty(cut.FindAll(".salary"));
    }
}

Maintainability: разделение компонентов

Монолитный компонент разбили по принципу «один компонент — одна ответственность», логику вынесли в сервисы с интерфейсами, чтобы заменять на моки в тестах. Использовали partial class для разделения разметки и логики:

// JobList.razor.cs
public partial class JobList
{
    [Inject] private IJobService JobService { get; set; } = default!;

    private List<Job> _jobs = [];

    protected override async Task OnInitializedAsync()
    {
        _jobs = await JobService.GetAsync();
    }
}

Подводные камни

  • Virtualize требует точного TotalItemCount при использовании ItemsProvider — ошибка на единицу приводит к пустым строкам в конце списка.
  • bUnit не тестирует JavaScript interop напрямую — нужно мокировать IJSRuntime через ctx.JSInterop.Setup.
  • ARIA-атрибуты на Blazor-компонентах передаются через AdditionalAttributes или явные параметры — не забудьте добавить [Parameter(CaptureUnmatchedValues = true)] в базовые компоненты.
  • Разбивка на partial class не разграничивает зависимости — без DI-интерфейсов тесты всё равно потребуют реальных зависимостей.
  • В Blazor Server Virtualize с большим OverscanCount увеличивает нагрузку на SignalR-канал — держите значение минимальным (2–5).

Частые вопросы на собеседовании

  • В чём разница между Blazor Server и Blazor WebAssembly?
  • Что такое Blazor и каковы его основные модели хостинга?
  • Как Blazor управляет повторным рендерингом компонентов и как его оптимизировать?
  • В каких типах frontend-проектов Blazor даёт реальный выигрыш, а где будет избыточен или неудачен?

Что портит ответ

  • Выдумывать опыт или говорить слишком общими фразами
  • Не объяснять свою личную роль в работе с Blazor
  • Не показывать результат, метрики или извлечённые уроки

Что слушает интервьюер

  • Может подготовить честный пример использования Blazor
  • Показывает свою роль, решения и результат
  • Умеет рефлексировать над trade-offs и уроками

Как вы знаете этот вопрос?

Проверить себя по теме Blazor →
←Предыдущий вопросВ чём разница между `InvokeAsync(StateHasChanged)` и `StateHasChanged()`?Следующий вопрос→Как использовать `RenderFragment` и `RenderFragment<T>` для шаблонных компонентов?

Связанные темы

Blazorexperience-storytellingtechnical-communicationtechnology-selectiontrade-off-analysis