Вопросы на собеседовании: Salesforce-разработчик
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Младший разработчик.
Смотреть пример резюме: Salesforce-разработчик →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Организация Salesforce представляет собой изолированную среду с данными, настройками, пользователями и кодом компании.
- Production является рабочей организацией, которой пользуется бизнес.
- Песочницы копируют выбранные настройки или данные Production для разработки и тестирования.
- У каждой организации есть собственный ID и собственный контекст governor-лимитов.
Зачем это спрашивают: Интервьюер проверяет понимание основной границы среды Salesforce.
Стандартные объекты поставляются Salesforce, а пользовательские создаются под модель данных конкретной компании.
- Account и Contact являются стандартными объектами.
- API-имя пользовательского объекта заканчивается на __c, например Invoice__c.
- У объектов обоих видов могут быть поля, связи, правила проверки и автоматизация.
Зачем это спрашивают: Интервьюер проверяет, различает ли кандидат две основные категории объектов и их API-имена.
Стандартное поле поставляется вместе с объектом, а пользовательское добавляет администратор или разработчик.
- Name и CreatedDate являются распространёнными стандартными полями.
- API-имя пользовательского поля заканчивается на __c, например Renewal_Date__c.
- Тип поля определяет допустимые значения, хранение и доступные операции.
Зачем это спрашивают: Интервьюер проверяет, понимает ли кандидат происхождение, именование и поведение типов полей.
Связь lookup соединяет одну запись с другой, не делая дочернюю запись полностью зависимой от родительской.
- Дочерняя запись обычно может существовать без родителя, если поле не обязательное.
- Удаление родителя обычно не удаляет дочернюю запись.
- Lookup подходит, например, для связи Contact с пользовательской записью Referral_Source__c.
Зачем это спрашивают: Интервьюер проверяет понимание слабой связи между записями Salesforce.
Master-detail делает дочернюю запись зависимой от главной и даёт главной записи больше контроля.
- У дочерней записи обязательно должна быть главная запись.
- Удаление главной записи удаляет связанные дочерние записи.
- Поля roll-up summary в главной записи могут агрегировать значения дочерних.
Зачем это спрашивают: Интервьюер проверяет знание жизненного цикла и агрегации в связи master-detail.
ID записи Salesforce однозначно определяет запись внутри Salesforce.
- Формат из 15 символов чувствителен к регистру.
- Формат из 18 символов не зависит от регистра и безопаснее для внешних инструментов.
- Коду не следует определять объект по жёстко заданному префиксу, когда доступно определение через Schema.
Зачем это спрашивают: Интервьюер проверяет практическое понимание форматов ID и безопасной работы с ними.
Apex предоставляет строго типизированные примитивы Integer, Decimal, Boolean, String, Date, Datetime и Id.
- Объявленный тип ограничивает допустимые значения и операции.
- Decimal подходит для денежных вычислений, где важна точность.
- Id проверяет формат идентификаторов Salesforce и может быть ключом Map.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат выбирать базовые типы Apex для обычных значений.
Класс Apex объединяет состояние и поведение в переиспользуемый тип.
- Поля хранят данные класса или экземпляра.
- Конструкторы инициализируют новые экземпляры.
- Методы предоставляют операции, например расчёт скидки или загрузку Account.
Зачем это спрашивают: Интервьюер проверяет понимание базовой структуры и назначения класса.
Параметры являются типизированными входными данными метода, а возвращаемый тип определяет результат.
- Метод с типом Boolean должен возвращать Boolean на каждом достижимом пути.
- Метод void выполняет работу и не возвращает значение.
- Понятные имена параметров делают вызовы вроде calculateTotal(lines) читаемыми.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат читать и задавать простой контракт метода.
Модификаторы доступа Apex определяют, откуда можно использовать класс или его член.
- private ограничивает доступ классом, где член объявлен.
- public разрешает доступ в том же пространстве имён, а protected также поддерживает подклассы.
- global открывает API за пределами пространства имён и нужен только при таком требовании.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат выбирать минимально необходимую область видимости.
Статический член принадлежит классу, а член экземпляра принадлежит конкретному созданному объекту.
- Статический метод вызывается через имя класса без new.
- Каждый экземпляр может хранить свои значения в полях экземпляра.
- Обработчики триггеров часто используют статические методы, потому что состояние экземпляра не требуется.
Зачем это спрашивают: Интервьюер проверяет понимание принадлежности и вызова членов класса.
List хранит упорядоченную коллекцию и допускает повторяющиеся значения.
- Индексы начинаются с нуля.
- List<Account> естественно подходит для записей, возвращённых SOQL-запросом.
- Массовая DML принимает список, поэтому много записей можно сохранить одной инструкцией.
Зачем это спрашивают: Интервьюер проверяет знание упорядоченных коллекций и их обычного применения в Salesforce.
Set хранит уникальные значения и подходит для удаления повторов.
- Set<Id> не позволяет дважды собрать один ID записи.
- contains проверяет наличие элемента без ручного перебора списка.
- Набор ID можно передать в SOQL через bind-выражение с IN.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат использовать уникальность для упрощения массового кода.
Map хранит пары ключ-значение и даёт прямой поиск по уникальному ключу.
- Map<Id, Account> позволяет найти Account по ID.
- Map избавляет от вложенного цикла при сопоставлении дочерних записей с родителями.
- Результат SOQL-запроса можно использовать для создания Map с ID записи в качестве ключа.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат выбирать Map для эффективного сопоставления записей.
Код Apex должен проверять потенциально отсутствующее значение перед обращением к нему.
- Поле связи или результат запроса может быть null, даже если тип переменной известен.
- Защитное условие может завершить метод раньше при отсутствии обязательных данных.
- Безопасная навигация через ?. позволяет читать nullable-ссылку, если результат null допустим.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат предотвращать простые ошибки из-за null.
sObject является представлением записи Salesforce в Apex.
- Account является конкретным типом sObject с полями вроде Name.
- Обобщённый тип sObject может хранить записи разных объектов.
- Для обычного доступа доступны только выбранные SOQL-запросом или заданные в коде поля.
Зачем это спрашивают: Интервьюер проверяет, связывает ли кандидат объекты Apex с записями и полями Salesforce.
insert создаёт записи, а update сохраняет изменения записей, у которых уже есть ID.
- Успешный insert заполняет Id каждой новой записи.
- Одна инструкция может обработать список записей.
- При сбое DML в режиме all-or-none возникает DmlException.
Зачем это спрашивают: Интервьюер проверяет понимание двух самых распространённых операций сохранения данных.
delete удаляет записи, а upsert создаёт или обновляет каждую запись по ключу сопоставления.
- delete работает с уже существующими записями или их ID.
- upsert по умолчанию использует Id либо выбранное поле external ID.
- External ID позволяет сопоставить импортируемые данные с записями Salesforce без знания Salesforce ID.
Зачем это спрашивают: Интервьюер проверяет понимание удаления и поведения insert-or-update.
Транзакция Apex является единицей работы, которая либо вместе фиксирует успешные изменения, либо откатывает их при необработанной ошибке.
- Триггер и вызвавшая его DML обычно выполняются в одной транзакции.
- Governor-лимиты измеряются для каждой транзакции.
- Savepoint и rollback позволяют отменить часть работы, если код обрабатывает ошибку.
Зачем это спрашивают: Интервьюер проверяет понимание атомарной работы и её связи с лимитами.
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