顺便问一下大家,有什么是目前比较适合Java后端开发考试的证书可以推荐一下,最近想考一些技术方向的证书,从而巩固一下自己的能力。单选1.KV结构的集合,在处理null值的存储上有细微的区别,下列哪些说法是正确的:
A .TreeMap的key不可以为null
B .TreeMap的key可以为null
C .ConcurrentHashMap的key可以为null
D .ConcurrentHashMap的value可以为null
注释:HashMap的key/value均可以为null,但是TreeMap的key不能为空,value可以为空
多选 2.数组使用Arrays.asList转化为集合,下列说法哪些正确的:
A .数组元素的修改,会影响到转化过来的集合。
B .数组元素的修改,不会影响到转化过来的集合。
C .对于转换过来的集合,它的 add/remove/clear 方法会抛出: UnsupportedOperationException。
D .Arrays.asList 体现的是适配器模式,只是转换接口,后台的数据仍是数组。
多选 3.关于ORM的规则,下列哪些说法符合《阿里巴巴Java开发手册》:
A .数据库中,表达是与否概念的字段,必须使用is_xxx的方式命名。
B .推荐使用iBATIS自带的queryForList(String statementName,int start,int size)进行分页查询。(不推荐)
C .为避免写resultMap,可以直接拿HashMap与HashTable作为查询结果集的输出。
D .不要用resultClass当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义。
多选 4.关于多线程并行处理定时任务的情况,下列哪些说法符合《阿里巴巴Java开发手册》
A .推荐使用Timer方式处理。
B .推荐使用ScheduledExecutorService方式处理。
C .Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行。
D .ScheduledExecutorService并发运行多个定时任务时,其中某线程抛出异常,不会影响到其它线程的继续运行。 多选 5.关于异常的处理方式,下列哪些说法是正确的:
A .为防止obj对象本身空指针异常,书写代码时应该注意加异常捕获处理,例如:try { obj.method() } catch(NullPointerException e){……} 。
B .方法签名中,抛给调用者的关键字为throws
C .方法内部,抛出异常实例对象为throws
D .自定义异常要做到“认知对等”,即:抛出者和接收者要保持对自定义异常的认知统一,接收方需要知道这种异常的含义和对应的处理方案。
多选 6.关于注释,下列哪些说法符合《阿里巴巴Java开发手册》:
A .方法头定义签名上的注释可以使用//(双划线)简单说明,不必要遵守javadoc规范。(/** */)
B .类定义开始部分,一般都用Javadoc注释 程序的总体描述以及作者信息。
C .方法头定义签名上的注释必须遵守javadoc规范,使用/**回车来生成,不得在方法定义上方使用//(双划线)简单说明。
D .方法头定义签名上的注释,可以使用// xxx 的形式
多选 7.关于用日志记录异常信息,下列哪些说法符合《阿里巴巴Java开发手册》:
A .日志尽量记录案发现场信息和异常堆栈信息。
B .如果日志中输出POJO类,POJO类需要重写toString方法,避免只输出hashCode。
C .不建议输出任何日志,因为日志记录消耗性能。
D .捕获异常后,一律抛给调用者去处理。
多选 8.关于常量的命名,下列哪些说法符合《阿里巴巴Java开发手册》:
A .常量命名应该全部大写,单词间用下划线隔开。
B .常量的定义要力求语义表达完整清楚,让别人能从常量名称上大致了解含义,例如:MAX_STOCK_COUNT。
C .常量命名,可以使用拼音与英文的混合方式。
D .在使用缩写时要注意:杜绝不规范的缩写。
单选 9.关于类的序列化,下列说法哪些是正确的:
A .类的序列化与serialVersionUID毫无关系。
B .如果完全不兼容升级,不需要修改serialVersionUID值。
C .POJO类的serialVersionUID不一致会编译出错。
D .POJO类的serialVersionUID不一致会抛出序列化运行时异常。
多选 10.关于二方库使用枚举类型,下列哪些说法符合《阿里巴巴Java开发手册》:
A .二方库里可以定义。
B .二方库里接口的入参可以使用枚举类型。
C .二方库里接口的返回值不能使用枚举类型,但可以包含枚举类型。
D .二方库里接口的返回值是枚举类型或包含枚举类型时,当二方库的枚举值升级(增加枚举值)时,可能会导致接口调用时出现枚举对象序列化异常。
多选 11.关于索引的设计,下列哪些说法符合《阿里巴巴Java开发手册》:
A .对varchar类型的字段建立索引,必须指定索引长度。
B .对varchar类型的字段建立索引,不需要指定索引长度,这样索引区分度最好。
C .业务上具有唯一特性的字段(含组合字段),必须指定唯一索引。
D .建复合索引时,一般选择区分度高的字段放在最左列。
多选 12.关于hashcode和equals,下列哪些说法是正确的:
A .hashcode是Class的方法,equals是Object的方法。
B .hashcode决定(如:HashMap)存储位置;equals决定是否需要覆盖(同一hash下)集合元素。
C .类重写hashcode,必须重写equals。
D .两者是否需要重写,没有必然联系。 备注:equals 为true,hashcode值相同 但是hashcode值相同,equals可能为false
多选 13.关于常量定义,下列哪些说法符合《阿里巴巴Java开发手册》:
A .跨应用共享常量:放置在二方库中,通常是client.jar中的const目录下。
B .应用内共享常量:通常放置在一方库的子模块中的const目录下。
C .子工程内部共享常量:即在当前子工程的const目录下。
D .类内常量:直接在类内部private static final定义。
多选 14.针对tcp协议,下列哪些说法是正确的:
A .tcp链接主动关闭的一方,在完成四次挥手协议后,即会立即关闭并释放socket。
B .处于time_wait状态的socket,其实是已经关闭状态,当需要新建连接时,可以被马上复用。
C .当大量socket处于time_wait状态时,会导致可用socket资源稀缺,从而导致服务器并发能力下降。
D .通过修改/etc/sysctl.conf配置文件,减小time_wait的超时时间,可以降低time_wait状态的socket数量,从而提升服务器并发能力。
多选 15.关于二方库依赖的解析命令,下列哪些说法是正确的:
A .mvn dependency:resolve 打印出已仲裁依赖的列表。
B .mvn dependency:tree 打印工程整个的依赖树结构。
C .mvn dependency:tree -Dverbose -Dincludes=commons-lang 打印出与commons-lang相关的详细依赖。
D .mvn clean install 打印工程整个的依赖树结构,并部署到本地仓库中。
多选 16.关于Java代码的设计和开发注意事项,下列哪些说法符合《阿里巴巴Java开发手册》:
A .所有的覆写方法,必须是强制加 @Override。
B .setter方法中,参数名称与类成员变量名称一致,this.成员名=参数名。
C .在getter方法中,尽量不要增加逻辑判断,因为添加了逻辑判断后,会增加排查问题难度。
D .避免用BeanUtil进行属性的copy。
多选 17.关于变量和常量定义,下列哪些符合《阿里巴巴Java开发手册》:
A .Long a=2L;//大写的L
B .Long a=2l; //小写的l
C .常量只定义一次,不再赋值,所以不需要命名规范。
D .不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。
多选 18.关于线程安全,下列哪些说法是正确的:
A .SimpleDateFormat 是线程不安全的类。
B .SimpleDateFormat 是线程安全的类。
C .一般不要定义SimpleDateFormat的static变量,如果定义为static,必须保证线程安全。
D .推荐使用Apache封装好的DateUtils和DateFormatUtils工具类,来处理时间日期转换问题。
多选 19.关于try-catch的使用方式,下列哪些说法是正确的:
A .推荐用try-catch来做流程控制、条件控制。
B .捕获异常与抛异常,必须是完全匹配,或者捕获异常是抛异常的父类。
C .对大段代码进行try-catch,利用Throwable来捕捉,万无一失。
D .对大段代码进行try-catch,这是不负责任的表现,分清稳定代码和非稳定代码,对非稳定的代码做对应的异常处理。
多选 20.关于加锁,下列哪些说法符合《阿里巴巴Java开发手册》:
A .可以只锁代码区块的情况下,就不要锁整个方法体。
B .高并发的业务场景下,要考虑加锁及同步处理带来的性能损耗,能用无锁数据结构,就不要用锁。
C .能用对象锁的情况下,就不要用类锁。
D .加锁时需要保持一致的加锁顺序,否则可能会造成死锁。
多选 21.在多线程并发读写的情况下,下列哪些处理方式能保证对象的线程安全:
A .使用volatile关键字。(volatile 解决多线程内存不可见问题。对于一写多读,是可以解决变量同步问题,但是如果多写,同样无法解决线程安全问题。)
B .使用synchronized关键字给对象的读写操作加锁。
C .如果是基本类型,推荐使用java.util.concurrent.atomic包下面提供的线程安全的基本类型包装类,例如AtomicInteger。
D .如果是集合,推荐使用java.util.concurrent提供的并发集合类,例如:ConcurrentHashMap。
多选 22.关于生产环境的日志文件,下列哪些说法符合《阿里巴巴Java开发手册》:
A .异常信息应该包括两类信息:案发现场信息和异常堆栈信息。
B .日志文件推荐至少保存15天,因为有些异常具备以“周”为频次发生的特点。
C .避免重复打印日志,浪费磁盘空间,务必在log4j.xml中设置additivity=false。
D .错误日志和业务日志尽量分开存放。
多选 23.关于系统安全,下列哪些说法符合《阿里巴巴Java开发手册》:
A .表单、AJAX提交不需要进行CSRF安全过滤。
B .表单、AJAX提交必须执行CSRF安全过滤。
C .URL外部重定向传入的目标地址必须执行白名单过滤。
D .用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL注入,禁止字符串拼接SQL访问数据库。
多选 24.关于checked/unchecked exception,下列哪些说法是正确的:
A .继承java.lang.Error的类属于checked exception。
B .checked异常继承java.lang.Exception类。
C .unchecked异常继承java.lang.RuntimeException类。
D .NullPointerException , IllegalArgumentException属于unchecked exception。
多选 25.Hashtable,HashMap, ConcurrentHashMap都是Map的实现类,它们在处理null值的存储上有细微的区别,下列哪些说法是正确的:
A .Hashtable的KV都不可以为null。
B .HashMap的KV都可以为null。
C .HashMap的K不可以为null,V可以为null。
D .ConcurrentHashMap的KV都不可以为null。
多选 26.关于应用与数据库之间的操作,下列哪些说法符合《阿里巴巴Java开发手册》:
A .对外提供一个大而全的接口进行POJO的update更新,这样比较省事,省代码。
B .使用事务回滚的地方需要考虑各方面的回滚方案,包括缓存回滚、搜索引擎回滚、消息补偿、统计修正等。
C .应用服务器与数据库之间是短连接。
D .应用服务器与数据库之间是长连接。
多选 27.关于索引的使用,下列哪些说法是正确的:
A .查询语句 WHERE a+1 = 5 可以利用a索引。
B .查询语句WHERE date_format(gmt_create, ‘%Y-%m-%d’) = '2016-11-11’无法利用gmt_create索引。
C .当 c 列类型为 char 时,查询语句 WHERE c = 5 无法利用c索引。
D .索引字段使用时不能进行函数运算。
多选 28.关于代码书写格式,下列哪些说法符合《阿里巴巴Java开发手册》:
A .换行时相对上一行缩进2个空格。
B .运算符与下文一起换行,方法调用的点符号与下文一起换行。
C .在多个参数超长,逗号后进行换行。
D .在括号前不要换行。
多选 29.关于MySQL性能优化的描述,下列哪些说法是正确的:
A .主键查询优先于二级索引查询。
B .表连接有一定的代价,故表连接数量越少越好。
C .一般情况下,二级索引扫描优先于全表扫描。
D .可以使用通过索引避免排序代价。
多选 30.关于Java的接口描述,下列哪些说法符合《阿里巴巴Java开发手册》:
A .在接口类中的方法和属性使用public修饰符。
B .对于Service类,内部的实现类加Impl的后缀与接口区别。例如:ProductServiceImpl实现ProductService接口。
C .对于Service类,基于SOA的理念,是以接口方式暴露服务。
D .尽量不在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,而且是整个应用的基础常量。
多选 31.关于二方库的依赖处理,下列哪些说法符合《阿里巴巴Java开发手册》:
A .依赖于一个二方库群时,必须定义一个统一版本变量,避免各子二方库版本号不一致。
B .可以允许子项目的pom依赖中出现相同的GroupId,相同的ArtifactId,但是不同的Version。
C .所有pom文件中的依赖声明放在语句块中,所有版本仲裁放在语句块中。
D .线上应用不要依赖SNAPSHOT版本(安全包除外)。
单选 32.sort表示元素在存入集合时进行了排序,数据遍历的结果是按某个排序规则输出的; 而order表示每次遍历的序列都是一样的,元素前后关系每次遍历都是确定的,那么下列哪些集合既是sort,又是order的:
A .HashSet
B .LinkedList
C .HashMap
D .TreeSet
多选 33.关于工具类二方库已经提供的,尽量不要在本应用中编程实现,下列哪些说法符合《阿里巴巴Java开发手册》:
A .json操作使用fastjson。
B .md5操作使用commons-codec。
C .ArrayUtils、NumberUtils、DateFormatUtils、DateUtils等优先使用org.apache.commons.lang包。
D .CollectionUtils优先使用org.apache.commons.collections4包。
备注:(org.apache.commons.lang3.time.DateFormatUtils)
多选 34.关于接口使用抛异常还是返回错误码,下列哪些说法符合《阿里巴巴Java开发手册》:
A .向公司外部提供的http/api接口,推荐使用“错误码”方式返回异常或者错误信息。
B .对于应用内部的方法调用,推荐使用“抛出异常”的方式处理异常或者错误信息。
C .跨应用的RPC调用,推荐使用将“错误码”和“错误简短信息”封装成Result的方式进行返回。
D .对外提供的接口,一定要保证逻辑健壮性:尽量避免空指针等技术类异常;对于业务类异常要做好错误码或者异常信息的封装。
单选 35.关于测试代码的覆盖率,下列哪些说法是正确的?:
A .路径覆盖是最强覆盖,符合路径覆盖且测试全部通过,程序绝对没有问题。
B .语句覆盖度是最弱的覆盖度量方式。
C .分支覆盖与条件覆盖其实是一回事。
D .判定条件覆盖与路径覆盖其实是一回事。
多选 36.关于类和方法的命名,下列哪些说法符合《阿里巴巴Java开发手册》:
A .类名使用UpperCamelCase命名法,但是领域模型命名除外,如:ProductDO的命名是规范的。
B .方法名命名应该使用lowerCamelCase命名法,如方法名:getHttpMessage() 是符合命名规范的。
C .为了方便理解,方法名或参数名可以使用拼音与英文混合的方式。
D .所有编程相关的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
多选 *37.对于索引(a, b, c),下列哪些说法是正确的:ABC
A .查询语句 where a between 5 and 10 可以使用该索引。
B .查询语句 where a = 5 and b between 5 and 10 可以使用该索引。
C .查询语句 where a in (5, 6, 7, 8, 9) and b = 5 可以使用该索引。
D .查询语句 where b = 5 and c = 10 可以使用该索引。
多选 38.以下关于命名规约内容说明,正确的是:
A .【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词,并且使用复数形式,例如:应用工具类包名为com.alibaba.mpp.utils
B .【强制】类名使用UpperCamelCase,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / DTO / VO / DAO等。
C .【强制】抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。
D .【强制】枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。
多选 39.关于数据库中表相关的命名,下列哪些说法符合《阿里巴巴Java开发手册》:
A .表名、字段名禁止出现数字开头,禁止两个下划线中间只出现数字。
B .表名不使用复数名词。
C .表必备三字段命名:id, gmt_create, gmt_modify。
D .表必备三字段命名:id, gmt_create, gmt_modified。
单选 40.关于使用explain对数据库性能进行优化分析,下列哪些说法符合《阿里巴巴Java开发手册》:
A .SQL性能优化的目标:至少要达到 range 级别,要求是ref级别,如果可以是consts最好。
B .index级别走的是扫描索引,所以速度会比ref快。
C .range级别是指对表进行范围索引。
D .ref级别是指使用主键或者唯一索引。
多选 41.关于分页查询,下列哪些说法符合《阿里巴巴Java开发手册》:
A .分页查询,当统计的count为0时,应该直接返回,不要再执行分页查询语句。
B .iBATIS自带的queryForList(String statementName,int start,int size)分页接口有性能隐患,不允许使用。
C .定义明确的sql查询语句,通过传入参数start和size来实现分页逻辑。
D .可使用存储过程写分页逻辑,提高效率。
多选 42.根据《阿里巴巴Java开发手册》,以下哪些字段属于表的必备字段:
A .id
B .gmt_modified
C .parent_id
D .gmt_create 单选
43.单元测试代码写在Java工程的哪个地方最为合适?
A .写在业务代码体里边,方便调试。
B .写在业务代码同一个包下,方便归类查找。
C .写在src/test/java目录下。
D .写在src/java目录下。
多选 44.关于索引效率,下列哪些说法符合《阿里巴巴Java开发手册》:
A .使用索引的效率一定高于全表扫描的效率。
B .关于explain的结果,type=index的索引效率好于type=ref。
C .sql查询条件 where a like ‘%阿里%’ ,不会走索引。
D .sql查询条件 where a like ‘阿里%’ ,a列创建了索引,一般会使用索引进行检索。
多选 45.关于线程池管理线程的好处,下列哪些说法是正确的:
A .能够减少在创建和销毁线程上所花的时间以及系统资源的开销。
B .使用线程池一定能避免OOM问题。
C .线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
D .线程池能够根据资源等待情况,自动调整线程优先级并解决死锁问题。
多选 46.编写单元测试代码遵守BCDE原则,以保证被测试模块的交付质量,那么下列说法正确的是:
A .Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。
B .Correct,正确的输入,并得到预期的结果。
C .Design,与设计文档相结合,来编写单元测试。
D .Equal, 单元测试环境必须与线上生产环境一致。
(Error) 多选 47.关于领域模型命名,下列哪些说法符合《阿里巴巴Java开发手册》:
A .数据对象命名:xxxDO,xxx即为数据表名,例如:ResellerAccountDO。
B .数据传输对象:xxxDTO,xxx为业务领域相关的名称,例如ProductDTO。
C .展示层对象:xxxVO,xxx一般为网页名称,例如RecommendProductVO。
D .POJO是DO/DTO/BO/VO的统称,命名成xxxPOJO。
多选 48.以下关于格式规约的说法,正确的有哪些:
A .代码块缩进4个空格,如果使用tab缩进,请设置成1个tab为4个空格;
B .代码块缩进5个空格,如果使用tab缩进,请设置成1个tab为5个空格。
C .为了保持代码美观,《手册》强烈推荐增加若干空格,使某一行的变量与相邻对应位置的变量对齐。
D .方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间推荐插入一个空行;相同业务逻辑和语义之间不需要插入空行。
多选 49.根据《阿里巴巴Java开发手册》,以下功能必须进行水平权限控制校验的有:
A .订单详情页面。
B .类目管理后台。
C .店铺装修后台。
D .订单付款页面。
多选 50.关于客户数据展示,下列哪些说法符合《阿里巴巴Java开发手册》:
A .客户的密码,密钥及密保问题答案等信息禁止展示。
B .客户的银行卡号只显示后四位。
C .客户的证件号码只显示第一位和最后一位,在必要业务场景下,经多因子强验证后可完整展示。
D .涉及有完整展示客户信息的页面均需要接入防爬系统
答案:
1.A
2.ACD
4.BCD
6.BC
7.AB
8.ABD
9.D
10.ABD
11.ACD
12.BC
13.ABCD
15.ABC
16.ABC
18.ACD
19.BD
20.ABCD
21.BCD
22.ABCD
23.BCD
24.BCD
25.ABD
26.BC
27.BCD
28.BCD
29.ABCD
30.BCD
31.ACD
32.D
33.ABD
34.ABCD
35.B
36.ABD
37.ABC
38.BCD
39.ABD
40.A
41.ABC
42.ABD
43.C
44.CD
45.AC
46.ABC
47.ABC
48.AD
49.ABCD
50.ABCD
















