Skip to content

Вопросы на собеседовании: Salesforce-разработчик

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Младший разработчик.

Смотреть пример резюме: Salesforce-разработчик

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

salesforceorgs

Организация Salesforce представляет собой изолированную среду с данными, настройками, пользователями и кодом компании.

  • Production является рабочей организацией, которой пользуется бизнес.
  • Песочницы копируют выбранные настройки или данные Production для разработки и тестирования.
  • У каждой организации есть собственный ID и собственный контекст governor-лимитов.

Зачем это спрашивают: Интервьюер проверяет понимание основной границы среды Salesforce.

data-model

Стандартные объекты поставляются Salesforce, а пользовательские создаются под модель данных конкретной компании.

  • Account и Contact являются стандартными объектами.
  • API-имя пользовательского объекта заканчивается на __c, например Invoice__c.
  • У объектов обоих видов могут быть поля, связи, правила проверки и автоматизация.

Зачем это спрашивают: Интервьюер проверяет, различает ли кандидат две основные категории объектов и их API-имена.

Стандартное поле поставляется вместе с объектом, а пользовательское добавляет администратор или разработчик.

  • Name и CreatedDate являются распространёнными стандартными полями.
  • API-имя пользовательского поля заканчивается на __c, например Renewal_Date__c.
  • Тип поля определяет допустимые значения, хранение и доступные операции.

Зачем это спрашивают: Интервьюер проверяет, понимает ли кандидат происхождение, именование и поведение типов полей.

relationships

Связь lookup соединяет одну запись с другой, не делая дочернюю запись полностью зависимой от родительской.

  • Дочерняя запись обычно может существовать без родителя, если поле не обязательное.
  • Удаление родителя обычно не удаляет дочернюю запись.
  • Lookup подходит, например, для связи Contact с пользовательской записью Referral_Source__c.

Зачем это спрашивают: Интервьюер проверяет понимание слабой связи между записями Salesforce.

relationships

Master-detail делает дочернюю запись зависимой от главной и даёт главной записи больше контроля.

  • У дочерней записи обязательно должна быть главная запись.
  • Удаление главной записи удаляет связанные дочерние записи.
  • Поля roll-up summary в главной записи могут агрегировать значения дочерних.

Зачем это спрашивают: Интервьюер проверяет знание жизненного цикла и агрегации в связи master-detail.

salesforce

ID записи Salesforce однозначно определяет запись внутри Salesforce.

  • Формат из 15 символов чувствителен к регистру.
  • Формат из 18 символов не зависит от регистра и безопаснее для внешних инструментов.
  • Коду не следует определять объект по жёстко заданному префиксу, когда доступно определение через Schema.

Зачем это спрашивают: Интервьюер проверяет практическое понимание форматов ID и безопасной работы с ними.

apex

Apex предоставляет строго типизированные примитивы Integer, Decimal, Boolean, String, Date, Datetime и Id.

  • Объявленный тип ограничивает допустимые значения и операции.
  • Decimal подходит для денежных вычислений, где важна точность.
  • Id проверяет формат идентификаторов Salesforce и может быть ключом Map.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат выбирать базовые типы Apex для обычных значений.

apex

Класс Apex объединяет состояние и поведение в переиспользуемый тип.

  • Поля хранят данные класса или экземпляра.
  • Конструкторы инициализируют новые экземпляры.
  • Методы предоставляют операции, например расчёт скидки или загрузку Account.

Зачем это спрашивают: Интервьюер проверяет понимание базовой структуры и назначения класса.

apex

Параметры являются типизированными входными данными метода, а возвращаемый тип определяет результат.

  • Метод с типом Boolean должен возвращать Boolean на каждом достижимом пути.
  • Метод void выполняет работу и не возвращает значение.
  • Понятные имена параметров делают вызовы вроде calculateTotal(lines) читаемыми.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат читать и задавать простой контракт метода.

apex

Модификаторы доступа Apex определяют, откуда можно использовать класс или его член.

  • private ограничивает доступ классом, где член объявлен.
  • public разрешает доступ в том же пространстве имён, а protected также поддерживает подклассы.
  • global открывает API за пределами пространства имён и нужен только при таком требовании.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат выбирать минимально необходимую область видимости.

apex

Статический член принадлежит классу, а член экземпляра принадлежит конкретному созданному объекту.

  • Статический метод вызывается через имя класса без new.
  • Каждый экземпляр может хранить свои значения в полях экземпляра.
  • Обработчики триггеров часто используют статические методы, потому что состояние экземпляра не требуется.

Зачем это спрашивают: Интервьюер проверяет понимание принадлежности и вызова членов класса.

apex

List хранит упорядоченную коллекцию и допускает повторяющиеся значения.

  • Индексы начинаются с нуля.
  • List<Account> естественно подходит для записей, возвращённых SOQL-запросом.
  • Массовая DML принимает список, поэтому много записей можно сохранить одной инструкцией.

Зачем это спрашивают: Интервьюер проверяет знание упорядоченных коллекций и их обычного применения в Salesforce.

apex

Set хранит уникальные значения и подходит для удаления повторов.

  • Set<Id> не позволяет дважды собрать один ID записи.
  • contains проверяет наличие элемента без ручного перебора списка.
  • Набор ID можно передать в SOQL через bind-выражение с IN.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат использовать уникальность для упрощения массового кода.

salesforce

Map хранит пары ключ-значение и даёт прямой поиск по уникальному ключу.

  • Map<Id, Account> позволяет найти Account по ID.
  • Map избавляет от вложенного цикла при сопоставлении дочерних записей с родителями.
  • Результат SOQL-запроса можно использовать для создания Map с ID записи в качестве ключа.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат выбирать Map для эффективного сопоставления записей.

fundamentalsapex

Код Apex должен проверять потенциально отсутствующее значение перед обращением к нему.

  • Поле связи или результат запроса может быть null, даже если тип переменной известен.
  • Защитное условие может завершить метод раньше при отсутствии обязательных данных.
  • Безопасная навигация через ?. позволяет читать nullable-ссылку, если результат null допустим.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат предотвращать простые ошибки из-за null.

data-modelapex

sObject является представлением записи Salesforce в Apex.

  • Account является конкретным типом sObject с полями вроде Name.
  • Обобщённый тип sObject может хранить записи разных объектов.
  • Для обычного доступа доступны только выбранные SOQL-запросом или заданные в коде поля.

Зачем это спрашивают: Интервьюер проверяет, связывает ли кандидат объекты Apex с записями и полями Salesforce.

data-modelapex

insert создаёт записи, а update сохраняет изменения записей, у которых уже есть ID.

  • Успешный insert заполняет Id каждой новой записи.
  • Одна инструкция может обработать список записей.
  • При сбое DML в режиме all-or-none возникает DmlException.

Зачем это спрашивают: Интервьюер проверяет понимание двух самых распространённых операций сохранения данных.

data-modelapex

delete удаляет записи, а upsert создаёт или обновляет каждую запись по ключу сопоставления.

  • delete работает с уже существующими записями или их ID.
  • upsert по умолчанию использует Id либо выбранное поле external ID.
  • External ID позволяет сопоставить импортируемые данные с записями Salesforce без знания Salesforce ID.

Зачем это спрашивают: Интервьюер проверяет понимание удаления и поведения insert-or-update.

transactionsapex

Транзакция Apex является единицей работы, которая либо вместе фиксирует успешные изменения, либо откатывает их при необработанной ошибке.

  • Триггер и вызвавшая его DML обычно выполняются в одной транзакции.
  • Governor-лимиты измеряются для каждой транзакции.
  • Savepoint и rollback позволяют отменить часть работы, если код обрабатывает ошибку.

Зачем это спрашивают: Интервьюер проверяет понимание атомарной работы и её связи с лимитами.

apex

Apex использует исключения для сообщения о сбоях, которые код может перехватить и обработать.

  • В блоке try находится операция, которая может завершиться ошибкой.
  • Блок catch должен обрабатывать конкретное исключение или добавлять полезный контекст.
  • Блок finally выполняется и при успехе, и при ошибке и не должен скрывать исходный сбой.

Зачем это спрашивают: Интервьюер проверяет, может ли кандидат объяснить базовый поток обработки исключений без сокрытия ошибок.

Закрытые вопросы

  • 21

    Для чего используется SOQL?

    queries
  • 22

    Когда следует использовать SOSL вместо SOQL?

    queries
  • 23

    Что такое bind-переменная в статическом SOQL?

    queries
  • 24

    Как запросить поле родителя из дочернего объекта в SOQL?

    queries
  • 25

    Как запросить дочерние записи вместе с родителем в SOQL?

    queries
  • 26

    Что делают агрегатные функции в SOQL?

    aggregationqueries
  • 27

    Почему Salesforce устанавливает governor-лимиты?

    salesforcegovernor-limits
  • 28

    Назовите распространённые governor-лимиты синхронного Apex.

    governor-limitsapex
  • 29

    Что означает bulkification в Apex?

    bulkificationapex
  • 30

    Какие контексты триггера доступны для insert, update, delete и undelete?

    triggers
  • 31

    Нужно нормализовать поле текущей сохраняемой записи. Какое время выполнения триггера подходит?

    normalizationtriggers
  • 32

    Логике нужен ID, назначенный при insert, до создания связанных данных. Какое время выполнения триггера подходит?

    triggers
  • 33

    Что такое Trigger.new и Trigger.old?

    triggers
  • 34

    Почему команды обычно оставляют один триггер на объект и выносят логику в обработчик?

    triggers
  • 35

    Как триггер может отклонить недопустимую запись?

    triggers
  • 36

    Когда следует выбрать Salesforce Flow вместо Apex?

    salesforceautomationflow
  • 37

    Что такое Flow, запускаемый изменением записи?

    triggersautomationflow
  • 38

    Из каких файлов состоит базовый Lightning Web Component?

    componentslightninglwc
  • 39

    Как шаблон LWC отображает данные и условия?

    lightning
  • 40

    Как состояние JavaScript обновляет шаблон LWC?

    lightningjavascript
  • 41

    Чем управляет файл .js-meta.xml в LWC?

    lightning
  • 42

    Что означает @api в LWC?

    lightningapi
  • 43

    Как wire service загружает данные в LWC?

    lightningwire-service
  • 44

    Когда LWC должен вызывать Apex императивно?

    lightningapex
  • 45

    Как дочерний LWC сообщает событие родителю?

    lightning
  • 46

    Чем профили отличаются от permission sets?

    permissions
  • 47

    Чем роли и sharing отличаются от CRUD и безопасности на уровне полей?

    sharing
  • 48

    Как выглядит базовый тест Apex?

    apex-testingapex
  • 49

    Как связаны метаданные, Salesforce CLI, scratch org и развёртывание исходного кода?

    deploymentsalesforce-cliscratch-orgs
  • 50

    Каково базовое назначение Salesforce REST API и Bulk API?

    restbulk-apisalesforce
  • 51

    Метод Apex может оставить Account acc равным null, а затем читает acc.Name. Как это исправить?

    fundamentalsapex
  • 52

    Нужно собрать ID Contact, удалить повторы, а затем находить каждый Contact по ID. Какие коллекции использовать?

  • 53

    Запрос, напрямую присвоенный Account acc, выдаёт List has no rows for assignment to SObject. Что нужно изменить?

    queriesdata-model
  • 54

    Метод поиска соединяет пользовательский текст со строкой WHERE динамического SOQL. Как сделать его безопасным?

    queries
  • 55

    Опишите SOQL-запрос, который возвращает Contact вместе с именем каждого Account.

    queries
  • 56

    Нужны Account и только их открытые Opportunity. Как построить SOQL-запрос?

    queries
  • 57

    Вставка десяти записей завершается ошибкой из-за нарушения правила проверки одной записью. Как сохранить корректные строки?

    validation
  • 58

    Цикл по 200 Contact выполняет отдельный SOQL-запрос Account для каждого Contact. Как убрать риск превышения лимита?

    queries
  • 59

    Цикл обновляет каждую Opportunity отдельной инструкцией update. Как сделать массовую обработку?

  • 60

    Триггер Contact работает для одной записи, но ломается, когда Data Loader отправляет 200. Что проверить сначала?

    triggers
  • 61

    Before update-триггер меняет записи Trigger.new, а затем вызывает update Trigger.new. Почему это неверно?

    triggers
  • 62

    Триггер должен создать дочернюю запись с ID нового родителя. Он должен работать в before insert или after insert?

    triggers
  • 63

    After update-триггер обновляет тот же объект и выполняется дважды. Как остановить нежелательный повтор?

    triggers
  • 64

    Есть Opportunity и запрошенные Account, но код сопоставляет AccountId во вложенных циклах. Как это локально исправить?

  • 65

    Странице нужно только число открытых Case, но Apex запрашивает каждую запись Case. Что изменить?

    queriesapex
  • 66

    Flow, запускаемый изменением записи, создаёт связанную запись, но при ошибке пользователи видят необработанный сбой. Что добавить?

    triggersautomationflow
  • 67

    Flow, запускаемый изменением записи, обновляет запись после каждого изменения, даже если важные данные не менялись. Как сузить запуск?

    triggersautomationflow
  • 68

    Родительский LWC передаёт record-id, но recordId дочернего компонента остаётся undefined. Что проверить?

    lightningfundamentals
  • 69

    LWC добавляет строку в массив через push, но шаблон отображает её ненадёжно. Как обновлять безопаснее?

    lightning
  • 70

    Wired-метод Apex должен перезагружаться при изменении recordId, но выполнился только один раз. Чего не хватает?

    apex
  • 71

    При ошибке Apex wired-LWC показывает пустую панель. Как компонент должен показать проблему?

    componentslightningapex
  • 72

    Кнопка Save должна один раз вызвать Apex и показывать индикатор до завершения. Как построить код?

    apex
  • 73

    Дочерний LWC отправляет событие selected, но обработчик родителя не запускается. Что проверить?

    lightning
  • 74

    После сортировки списка LWC состояние оказывается у неправильной строки. Какая проблема в шаблоне вероятна?

    lightningalgorithms
  • 75

    Компонент императивно обновляет запись, но данные wired Lightning Data Service остаются устаревшими. Что сделать?

    componentslightning
  • 76

    Кажется, обработчик нажатия LWC не запускается. Какова короткая последовательность отладки в браузере?

    lightning
  • 77

    Метод Apex падает только у одного пользователя. Как использовать debug log без догадок?

    apex
  • 78

    Пользователь может открыть Account, но действие Apex раскрывает поле, скрытое безопасностью на уровне полей. В чём несоответствие?

    sharingapex
  • 79

    Класс Apex возвращает записи, которых пользователь не видит в интерфейсе. Какое объявление класса проверить?

    apex
  • 80

    Пользователь всё ещё видит Salary__c после удаления разрешения на поле из профиля. Что проверить?

  • 81

    Тест Apex проходит в песочнице, потому что запрашивает существующий Account, но падает в другой среде. Как исправить?

    queriesapexdeployment
  • 82

    Тест ставит Queueable-задание в очередь, но проверки выполняются до изменения данных заданием. Что изменить?

    async-apexdata-structures
  • 83

    Тест Apex для HTTP callout падает, потому что тесты не могут обращаться к реальному endpoint. Что добавить?

    apex-testinghttpendpoints
  • 84

    Как проверить тестом, что триггер обрабатывает 200 записей без запросов внутри цикла?

    queriestriggers
  • 85

    Развёртывание падает из-за недостаточного покрытия кода Apex. Что должен проверить джуниор?

    coveragedeploymentapex
  • 86

    Класс Apex со ссылкой на Invoice__c развёртывается, но компиляция сообщает, что объект недействителен в целевой организации. Чего, вероятно, не хватает?

    deploymentapex
  • 87

    Развёртывание permission set падает из-за ссылки на новое поле. Что включить и проверить?

    validationpermissionsdeployment
  • 88

    Развёртывание через Salesforce CLI ушло не в ту организацию. Как не повторить ошибку?

    deploymentsalesforce-clisalesforce
  • 89

    Как проверить небольшое развёртывание исходного кода до фактического применения?

    deployment
  • 90

    Scratch org не может создать компонент для функции, которая работает в Production. Какую настройку проверить?

    configscratch-orgscomponents
  • 91

    REST-клиент получает HTTP 400 при создании Account. Что проверить сначала?

    resthttp
  • 92

    Запрос Salesforce REST возвращает 401, а у другого пользователя возникает 403. В чём разница?

    salesforcerest
  • 93

    Что должен содержать успешный ответ REST на создание записи и как клиент должен его обработать?

    rest
  • 94

    Нужно загрузить 100 000 Contact и получить результаты по каждой строке. Как выглядит базовый процесс Bulk API?

    bulk-apiautomation
  • 95

    Apex HTTP callout получает ответ 500. Нужно ли разбирать его как успешное тело?

    httpapex
  • 96

    JSON-ответ содержит поля customerName и active. Как аккуратно разобрать его в Apex?

    apex
  • 97

    Метод вставляет Account, а затем некорректный Contact вызывает необработанную ошибку DML. Что произойдёт с Account?

    data-model
  • 98

    Триггер использует addError, но пользователи не понимают, какое поле исправить. Как улучшить обратную связь?

    feedbacktriggers
  • 99

    Страница Visualforce показывает apex:inputField для Contact, но нажатие Save не сохраняет изменение. Что проверить?

    visualforceapex
  • 100

    Транзакция пытается обновить User и Account и падает с ошибкой mixed DML. Каково решение начального уровня?

    transactionsdata-model