Salesforce Interview Questions You Need to Know in 2024 : SF

Salesforce Interview Questions You Need to Know in 2024
by: SF
blow post content copied from  Forcetalks
click here to view original post


Here are some potential line-based Salesforce interview questions that you could include in a blog post:

Interview Questions to Crack your Next Interview

1. What Is the Difference between Flow and Trigger?

Flow Trigger
Visual workflow tool for designing declarative automation processes. Code is written in Apex that gets executed in response to specific events.
Declarative (no code) Programmatic (requires Apex code)
Point-and-click, no coding required Requires Apex code and development skills
Typically used for building UI-driven processes, such as wizards or guided interactions. No direct user interface; operates in the background.
Triggered by user interactions, record changes, platform events, or external systems. Triggered by specific events, such as record creation, update, or deletion.
Supports building complex multi-step processes with decision logic, loops, and screens. Typically used for specific record-level actions, often with complex business logic.
Can read, create, update, and delete records in a flow. Can perform complex data manipulations using Apex code.
Subject to governor limits, but generally easier to stay within them. Subject to governor limits; careful coding is required to avoid hitting limits.
Limited external integration capabilities. Can integrate with external systems using Apex code.
Easier to maintain and understand for admins and non-developers. Requires version control, testing, and deployment practices for code.
Well-suited for UI-driven processes, guided interviews, and simple automations. Suitable for complex business logic, data transformations, and integrations.

2. What are the Lifecycle Hooks in LWC?

In Lightning Web Components (LWC), the lifecycle hooks are:

  1. constructor(): Initializes the component.
  2. connectedCallback(): Invoked when the component is inserted into the DOM.
  3. renderedCallback(): Invoked after the component's elements are rendered.
  4. disconnectedCallback(): Invoked when the component is removed from the DOM.
  5. errorCallback(): Invoked when there is an error during rendering, connecting, or updating.

3. What is the Purpose of @AuraEnabled and Cachable = true in LWC?

  • @AuraEnabled:
    • It is used to expose Apex methods in Lightning components and is required for methods that are invoked by Lightning components.
    • Allows client-side JavaScript in Lightning components to call server-side Apex controller methods.
  • Cachable = true:
    • It is used to enable caching of the data returned by an Apex method in a Lightning web component.
    • Caching improves performance by allowing components to use the cached data instead of making additional server calls when the data is unchanged.

4. What is the Use of the @Wire Method? When are we using imperative call or @wire Method in LWC?

  • @Wire:
    • Used to wire an Apex method or a property to a component’s JavaScript file.
    • Automatically provisions data, making it available to the component and keeping it up-to-date.
    • Facilitates declarative data binding without the need for imperative Apex calls.

5. Create an LWC Component to show the List of 10 Opportunities.

<h3 class="wp-block-heading"><!-- opportunityList.html -->
<template> <lightning-card title="Opportunity List" icon-name="standard:opportunity"> <div class="slds-m-around_medium"> <ul> <template for:each={opportunities} for:item="opp"> <li key={opp.Id}>{opp.Name}</li> </template> </ul> </div> </lightning-card> </template> // opportunityList.js import { LightningElement, wire } from 'lwc'; import getOpportunities from '@salesforce/apex/OpportunityController.getOpportunities'; export default class OpportunityList extends LightningElement { @wire(getOpportunities) opportunities; }

6. What is the difference between Aura and LWC?

Aura Components Lightning Web Components (LWC)
Event-driven, component-based framework Component-based framework
No Yes
Proprietary Aura syntax Standard HTML and modern JavaScript syntax
Slower compared to LWC Faster performance due to native browser support
Supports a wider range of browsers Uses native Shadow DOM, more modern browsers
Limited debugging capabilities Improved debugging with standard browser tools
Steeper learning curve Easier for developers familiar with modern web standards
Two-way data binding One-way data binding (can use reactive properties for two-way)
Less support for the composition Strong support for component composition
Less emphasis on reusability Emphasizes component reusability
More challenging Easier integration with third-party libraries
Uses events, application events, and component events Uses standard DOM events and custom events
Supports both Lightning Experience and Salesforce Classic Focuses on Lightning Experience, with limited support for Classic
Follows Salesforce's security model Follows Salesforce's security model

dont miss out iconDon't forget to check out: Salesforce Interview Questions – Part 1

8: How to create a user on the save button click of the LWC Component?

Create an Apex Method

public with sharing class UserCreationController { 
     @AuraEnabled public static void createUser(String username, String email, String firstName, String lastName) { 
          // Your user creation logic here 
          // For example: User newUser = new User( Username = username, Email = email, FirstName = firstName, LastName = lastName 
          // Add additional fields as needed ); insert newUser; 
     } 
}

Call the Apex Method from LWC

import { LightningElement, api } from 'lwc'; 
import createUser from '@salesforce/apex/UserCreationController.createUser'; 
export default class MyComponent extends LightningElement {
     @api username; @api email; 
     @api firstName; 
     @api lastName; 
     handleSaveClick() { 
          createUser({ 
username: this.username,
email: this.email,
firstName: this.firstName,
lastName: this.lastName
})
.then(result => {
// Handle success
})
.catch(error => {
// Handle error
}); }
}

Add the Save Button to your LWC Component

<template>
    <lightning-button label="Save" onclick={handleSaveClick}></lightning-button>
</template>

9: What is the lifecycle of Aura Components?

The lifecycle of Aura Components involves several key phases:

  1. Initialization: Component creation and attribute initialization.
  2. Rendering: The component is rendered and inserted into the DOM.
  3. After Rendering: Custom logic after the component is rendered.
  4. Value Change Handlers: React to changes in attributes.
  5. Rerendering: Update the UI in response to state changes.
  6. Unrendering: Cleanup before the component is removed from the DOM.
  7. Destruction: Final cleanup and resource release when the component is destroyed.

10: What is the purpose of With Sharing & Without Sharing in Apex?

  1. With Sharing:
    • When a class is declared with sharing, the sharing rules of the current user are enforced. This means that the Apex code respects the record-level and field-level permissions defined by the organization's sharing settings, sharing rules, role hierarchy, and manual sharing.
    • The with sharing keyword is often used for classes that should respect the organization's security model, ensuring that users only have access to the records they are authorized to see.
    • For example, if a user does not have access to certain records due to their profile or sharing settings, attempting to query or update those records in a class declared with sharing will respect those restrictions.
  2. Without Sharing:
    • When a class is declared without sharing, the sharing rules of the current user are not enforced. This means that the Apex code ignores the organization's sharing settings and gives the code full access to all records in the system, regardless of the user's actual permissions.
    • The without sharing keyword is typically used for classes that require full access to records, such as data migration scripts, background processes, or reports where the user's permissions should not restrict data access.
    • It's important to use without sharing with caution, as it bypasses the organization's security model and can potentially expose sensitive data to users who should not have access to it.

11: What is the Purpose of ui-record-API in LWC?

The uiRecordApi in LWC is used to access and manipulate Salesforce records efficiently without writing Apex code, leveraging caching for performance, ensuring data consistency across components, and automatically enforcing Salesforce's security model.

12: What is the Invocable in Apex?

Invocable methods are called natively from Rest, Apex, Flow, or Einstein bot that interacts with the external API source. Invocable methods have dynamic input and output values and support describe calls.

13: What is the purpose of Lightning Navigation Mixin in Salesforce?

The purpose of the Lightning Navigation Mixin in Salesforce is to provide a standard way to navigate to different pages and resources within a Salesforce Lightning Experience or Salesforce Mobile application. It simplifies the process of programmatically navigating to standard Salesforce pages, custom Lightning Component pages, external URLs, and more, ensuring that developers can manage navigation logic efficiently within Lightning Web Components (LWC) or Aura Components.

14: What is the difference between SOQL and SOSL?

SOQL SOSL
Used for querying records from a single object or related objects Used for searching across multiple objects and fields
SELECT field1, field2 FROM Object WHERE condition FIND {search_query} RETURNING Object (fields)
Primarily used for querying records of a specific object Searches across multiple objects, looking for a match in any object
Supports querying related objects through relationships Does not explicitly support querying related objects
Not designed for free-text search Designed for free-text search
Specifies fields to retrieve in the SELECT clause Returns a predefined set of fields for matching records
Relies on a structured query language similar to SQL Employs a search language for unstructured queries
Generally more efficient for querying specific records More suitable for searching across multiple objects without knowing which object contains the required data
SELECT Name, Account.Name FROM Contact WHERE Account.Type = 'Customer' FIND {John Doe} RETURNING Contact, Account

15: On the Contact Object there is one field i.e. Contact Status and it is a picklist field and contains Approved and Rejected Fields Values. So whenever the status is Approved, store the current timestamp in the time field. How can we achieve this using a trigger?

trigger UpdateTimestampOnApproval on Contact (before update) { 
    // List to store contacts that need timestamp update 
    List<Contact> contactsToUpdate = new List<Contact>();      
    // Iterate over the contacts in the trigger context 
    for (Contact updatedContact : Trigger.new) { 
        // Check if the Contact Status has been changed to Approved 
        if (updatedContact.Contact_Status__c == 'Approved' &&  
            Trigger.oldMap.get(updatedContact.Id).Contact_Status__c != 'Approved') { 
            // If yes, update the timestamp field with the current date and time 
            updatedContact.Approval_Timestamp__c = DateTime.now(); 
            // Add the contact to the list for update 
            contactsToUpdate.add(updatedContact); 
        } 
    } 
    // Perform the update if there are contacts to update 
    if (!contactsToUpdate.isEmpty()) { 
        update contactsToUpdate; 
    } 
} 

16: How can you handle the Recursion in a trigger?

To prevent recursion in a Salesforce trigger, use a static Boolean variable in a helper class to track if the trigger has already executed. Before executing your logic, check if the variable is false (trigger has not run); proceed and set it to true. If it's true, skip the logic.

17: I want to update 500 contact Records at a time using a trigger.New(). at the same time, only a single record or multiple records came in the trigger.New()?

trigger Update500ContactsAtATime on Contact (before update) { 
     // List to store contacts that need update 
     List<Contact> contactsToUpdate = new List<Contact>(); 
// Iterate over the contacts in the trigger context for (Contact updatedContact : Trigger.new) { // Apply your update logic here // For example, updating a field on the contact updatedContact.Field_to_Update__c = 'New Value';
// Add the contact to the list for update contactsToUpdate.add(updatedContact); } // Perform the update for all contacts in bulk update contactsToUpdate; }

dont miss out iconDon't forget to check out: LWC Interview Questions - Part 1

18. how do we embed Visual Flow in the VisualForce page?

To embed a Visual Flow in a Visualforce page, you can use the <flow:interview> component. This component allows you to incorporate a Visual Flow into your Visualforce page. Here's an example of how you can do this:

<apex:page>
     <apex:includeLightning /> 
     <flow:interview name="Your_Flow_Name" buttonLocation="bottom"> 
          <!-- You can add additional attributes here if needed --> 
     </flow:interview> 
</apex:page>

19. What is the use of an Attribute tag?

The <aura:attribute> tag in Salesforce Lightning is used to define and store data specific to a component, allowing for data passing between components and controlling the component's behavior and appearance.

20. How to get the current User logged-in ID using Apex?

Ans. with the help of userinfo.getUserId();

21. How to call the Apex Method from the JavaScript?

In a Lightning Web Component (LWC), call an Apex method from JavaScript by:

  1. Importing the Apex method using import methodName from '@salesforce/apex/Namespace.ClassName.methodName';
  2. Invoking the method in JavaScript, handling promises with .then() for success and .catch() for errors.

22. What are the Different Methods of Batch Apex?

Batch Apex is a mechanism for processing large sets of records asynchronously, breaking them into smaller chunks to avoid hitting governor limits. Batch Apex classes must implement the Database.Batchable interface, which includes three key methods:

  • start: The start method is responsible for identifying the scope of records to be processed. It returns an iterable (query locator or iterable object) representing the records to be processed in the batch.
  • execute: The execute method is where the actual processing logic for each chunk of records occurs. It receives a set of records as input and performs the necessary operations on them.
  • finish: The finish method is called once all batches have been processed. It is useful for performing any cleanup or finalization logic.

23. Why we are using @Future Annotation?

In Apex, the @future annotation marks methods that should be executed asynchronously in the future. Salesforce operates in a multi-tenant environment, and there are certain governor limits in place to ensure fair resource allocation among different organizations using the platform. These limits can impact the execution of long-running or resource-intensive operations. To address this, Apex provides the @future annotation to allow for the execution of certain methods in a separate thread, independently of the main transaction.

24. What is the purpose of Getter and Setter Methods in Apex?

In Apex, which is a programming language used for building applications on the Salesforce platform, Getter and Setter methods are used to control access to the private variables of a class. These methods are part of the encapsulation mechanism and are crucial for maintaining the integrity of data within an object.

Here's a brief explanation of Getter and Setter methods:

  • Getter Method: The primary purpose of a Getter method is to retrieve the value of a private variable (or property) in a class.
public dataType getVariableName() { 
     // logic to retrieve the value return variableName; 
}
  • Setter Method: The primary purpose of a Setter method is to set the value of a private variable in a class. It allows controlled modification of the variable.
public void setVariableName(dataType newValue) { 
     // logic to validate and set the value variableName = newValue; 
}

25. What is the Purpose of Database.Stateful in Apex?

The Database.Stateful interface in Apex is used to declare a class as "stateful" within the context of a batch Apex job. In Apex, batch processing is a way to process a large number of records in chunks (batches) asynchronously. Normally, the state of variables in a class is not preserved between batches, as each batch is processed independently. However, by implementing the Database.Stateful interface, you indicate that certain variables in the class should retain their values across multiple batches in a single execution of the batch job.

26. Write a Function to return the list of Leads based on the State.

Apex method to return a list of Leads based on the State:

public with sharing class LeadController {
    @AuraEnabled(cacheable=true)
    public static List<Lead> getLeadsByState(String state) {
        return [SELECT Id, Name, Company, State FROM Lead WHERE State = :state];
    }
}

27. Write a trigger to find the duplicate account based on the phone number.

trigger DuplicateAccountTrigger on Account (before insert, before update) { 
     // Set to store phone numbers of Accounts being inserted or updated 
     Set<String> phoneNumbers = new Set<String>(); 

     // List to store duplicate Account records 
     List<Account> duplicateAccounts = new List<Account>(); 

    // Iterate through Accounts to gather phone numbers 
    for (Account acc : Trigger.new) { 
         // Check if the Account has a phone number 
         if (acc.Phone != null && acc.Phone != '') { 
              // If a phone number already exists in the set, add the Account to the duplicate list 
              if (phoneNumbers.contains(acc.Phone)) { 
                   duplicateAccounts.add(acc); 
              } 
              else { 
              // Otherwise, add the phone number to the set 
              phoneNumbers.add(acc.Phone); 
              } 
         } 
     } 

// Query for existing Accounts with the same phone numbers 
List<Account> existingAccounts = [SELECT Id, Name, Phone FROM Account WHERE Phone IN :phoneNumbers]; 

// Compare existing Accounts to Accounts being inserted or updated 
for (Account acc : existingAccounts) { 
     for (Account newAcc : Trigger.new) { 
          // Check if the Account being inserted or updated is different from the existing Account 
          if (acc.Id != newAcc.Id && acc.Phone == newAcc.Phone) { 
          duplicateAccounts.add(newAcc); 
          } 
      } 
} 

// If duplicate Accounts are found, add error messages 
for (Account dupAcc : duplicateAccounts) { 
     dupAcc.addError('Duplicate Account found with the same phone number.'); 
     } 
}

28. Write a Query to find the duplicate Account using the phone number.

SELECT Phone, COUNT(Id) 
FROM Account
WHERE Phone != null
GROUP BY Phone
HAVING COUNT(Id) > 1

29. Can we call Batch Class From Future Methods?

No, it's not possible to directly call a Batch class from a future method in Apex.

30. How we can call Apex Class from flow?

We can use the 'Apex' action element available in Flow Builder to call an Apex class from a flow in Salesforce. This class should be annotated with @InvocableMethod to make it available for use in flows.

31. I have one field on the Account object i.e. No of Employees. So Write a trigger to create a Contact associate with the particular account based on the given No of employees.

trigger CreateContactsOnAccount on Account (after insert, after update) { 
     // List to store contacts to be inserted 
     List<Contact> contactsToInsert = new List<Contact>(); 

     // Iterate through the triggered accounts for (Account acc : Trigger.new) { 
         // Check if the 'No of Employees' field has changed or if it's a new Account 
         if ((Trigger.isInsert || Trigger.oldMap.get(acc.Id).No_of_Employees__c != acc.No_of_Employees__c) && acc.No_of_Employees__c != null) { 
              // Determine the number of contacts to create based on the 'No of Employees' 
              field Integer numberOfContacts = acc.No_of_Employees__c; 

              // Create contacts and associate them with the account for (Integer i = 0; i < numberOfContacts; i++) { 
                   Contact newContact = new Contact( FirstName = 'ContactFirstName', 
                   // You may want to customize these values 
                   LastName = 'ContactLastName' + i, AccountId = acc.Id 
                   // Add more fields as needed ); 
                   contactsToInsert.add(newContact); 
                   } 
          } 
} 

// Insert the created contacts 
    if (!contactsToInsert.isEmpty()) { 
         insert contactsToInsert; 
    } 
}

32. Write a SOQL Query to fetch the no of accounts that contain more than 3 contacts.

SELECT COUNT(Id), AccountId 
FROM Contact 
GROUP BY AccountId 
HAVING COUNT(Id) > 3

dont miss out iconCheck out another amazing blog by SF here: What are Data Types in Apex in 2023?

33. What is the return type of the Start method in Batch Apex?

In Apex, the start method in a Batch Apex class returns either a Database.QueryLocator or an iterable (such as a List or Set).

34. Write an Apex Function to return the list of Leads based on the State.

public class LeadController { 
    public static List<Lead> 
    getLeadsByState(String targetState) { 
         List<Lead> leadsList = new List<Lead>(); 
         // Query for leads based on the specified state 
         leadsList = [SELECT Id, Name, Company, State FROM Lead WHERE State = :targetState]; 
         return leadsList; 
     } 
}

The post Salesforce Interview Questions You Need to Know in 2024 appeared first on Forcetalks.


April 11, 2024 at 04:33PM
Click here for more details...

=============================
The original post is available in Forcetalks by SF
this post has been published as it is through automation. Automation script brings all the top bloggers post under a single umbrella.
The purpose of this blog, Follow the top Salesforce bloggers and collect all blogs in a single place through automation.
============================

Salesforce