几道常见的Salesforce开发者面试问题与解答

​1. 什么是Apex?

Apex是一种强类型,面向对象(object-oriented)的编程语言,允许开发人员通过将自己的业务逻辑编写到平台中来扩展Salesforce平台。Apex看起来类似于Java,可以通过各种用户启动的事件启动,例如记录更新,按钮单击,对象触发器或外部Web服务请求等。

官方参考链接:

https://trailhead.salesforce.com/en/content/learn/modules/apex_database

2. 您可以直接在生产组织Production中自定义Apex和Visualforce吗?

Apex无法在生产组织中进行自定义,必须通过沙盒环境进行更改和部署并满足测试覆盖率。另一方面,Visualforce可以直接在生产中定制(这不是最佳实践 )

3. Apex触发器可运行的两个选项是什么?

Apex触发器可以在保存记录之前或者之后运行。之前的操作通常用于验证将要插入的信息。之后的触发器操作用于处理其他数据而不是当前数据,如访问系统设置的当前对象的字段值(例如记录)ID 或者LastModifiedDate字段),并影响其他记录的更改。

官方参考链接:

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers.htm

4. Apex何时应该用于Flow或Process Builder?

您应该使用Apex而不是声明性自动化选项有多种原因:

1)Flow和Process Builder操作有时会有一些功能限制,需要用到Apex。例如,从外部系统中提取信息或者与外部系统进行交互。

  1. 在处理某些或大型数据集时,由于限制较少,Apex可以比声明性选项更有效。

5. Governor Limits是做什么的?

Salesforce在多multitenant环境中运行,这意味着Salesforce平台上的其他公司共享资源(存储,CPU,内存)。这也意味着必须有一定的限制以确保使用Salesforce体系结构的所有公司遵守某些规则,并且不要让他们的代码或流程独占共享资源。常见的Governor Limits限制的几个例子有如下一些:

  1. SOQL查询检索的记录总数 - 50,000

  2. 发出的SOQL查询总数(次数) - 100(同步)200(异步)

  3. 发布的DML报表总数 - 150

  4. 在一次transaction中可以用到的callouts次数(HTTP请求或Web服务调用) - 100

  5. Salesforce服务器上的最大CPU运行时间 - 10,000毫秒(同步)60,000毫秒(异步)

官方参考链接:

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm

6. 知道如何进行Apex测试吗?

该类问题的常见问法是:Apex测试覆盖范围是什么?部署所需的最低测试覆盖率是多少?

为了确保您的代码符合一定的标准,Apex Code覆盖率显示了您的类和触发器中的代码可执行行数,同时需要成功执行。代码覆盖百分比是覆盖的代码行数除以覆盖代码行数和未覆盖代码行数之和。部署到生产所需的最低测试覆盖率为75%。

官方参考链接:

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_code_coverage_intro.htm

7. Apex 最佳实践例子和我们分享一下?

参见的最佳实践有这些:

  • 整理您的代码

  • 避免FOR循环中的SOQL查询或DML语句

  • 避免使用硬编码ID

官方参考链接:

https://developer.salesforce.com/page/Apex_Code_Best_Practices

8. 如下代码有什么问题?****需要怎么改?

trigger accountTestTrggr on Account (before insert, before update) {
   for(Account a: Trigger.new) {          
      List contacts = [select id, salutation, firstname, lastname, email
                        from Contact where accountId = :a.Id];
          
      for(Contact c: contacts) {
         System.debug('Contact Id[' + c.Id + '], FirstName[' + c.firstname + '],
                                         LastName[' + c.lastname +']');
         c.Description=c.salutation + ' ' + c.firstName + ' ' + c.lastname;
         update c;
      }   
   }
}

主要问题是在for循环中使用了查询或DML语句。一次transaction可以执行最大SOQL查询次数是100,如果这操作放在for循环中时,每次迭代循环都会调用一次数据库操作,这使得很容易达到这些调控器限制。如果一批超过100个帐户记录调用此触发器,则调控器限制将引发运行时异常。

现在修改如下,把update的动作放到For循环外面,如果使用单个帐户记录或最多200个帐户记录调用此触发器,则只执行一个SOQL查询和一个更新语句。

trigger accountTestTrggr on Account (before insert, before update) {
  List accountsWithContacts = [select id, name, (select id, salutation, description,
                                                                firstname, lastname, email from Contacts)
                                                                from Account where Id IN :Trigger.newMap.keySet()];
      
  List contactsToUpdate = new List{};
  for(Account a: accountsWithContacts){
     for(Contact c: a.Contacts){
      System.debug('Contact Id[' + c.Id + '], FirstName[' + c.firstname + '], LastName[' + c.lastname +']');
      c.Description=c.salutation + ' ' + c.firstName + ' ' + c.lastname;
      contactsToUpdate.add(c);
     }    
   }
   update contactsToUpdate;
}

9. Apex Email Service是什么?

您可以使用Apex Email Service来处理入站电子邮件的内容,标题和附件。例如,您可以创建一个电子邮件服务,该服务根据邮件中的联系信息自动创建联系人记录。
参考链接:

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_email_inbound_what_is.htm

10. List, Set, Map在Apex中有什么区别?

List- 列表是按其索引区分的有序元素集合。列表元素可以是任何数据类型:基元类型,集合,对象,sObject,用户定义类型和内置Apex类型。
Set - 集合是不包含任何重复的元素的无序集合。集合元素可以是任何数据类型 - 基元类型,集合,sObject,用户定义类型和内置Apex类型。
Map - 地图是键值对的集合,其中每个唯一键映射到单个值。键和值可以是任何数据类型 - 基元类型,集合,sObject,用户定义类型和内置Apex类型。

参考链接:
https://www.salesforceben.com/30-salesforce-developer-interview-questions-answers/

11.Custom labels是什么?有什么限制?

Custom Labels是可从 Apex 类或 Visualforce 页访问的自定义文本值。此处的值可以转换为 Salesforce 支持的任何语言。它们的好处是使开发人员能够创建多语言应用程序, 这些应用程序以用户的母语自动显示信息。最多可以为组织创建 5, 000个Custom Labels, 它们的长度最多可以为 1000个字符。

12. 用Visualforce写一个分页的例子

13. 如何在JavaScript调用controller的方法?

利用actionfunction。相关参考代码如下:


                    
                    

你可能感兴趣的:(几道常见的Salesforce开发者面试问题与解答)