Apsara Clouder基础技能认证-阿里巴巴编程规范考试真题

发布时间:2023-08-03 08:00

        作为从事IT行业的编程开发者,我们必须要遵守IT行业编程开发的规范,俗话说:“无规则不成方圆”,大家都会约定俗成的遵守。下面是我的总结在考试中所遇到的题型,字体背景标记为黄色就是答案。

单选1.Lisl子类使用toArray方法实现集合向数组转换,下列哪些说法是正确的:

○ A.Vector无法使用toArray转换成数组

B.优先推荐:调用集合类的方法toArray(T[]a),传入的是类型完全一样的数组,大小就是集合的size()

○ C.集合的修改,会影响到数组元素的改变

○ D.数组的修改,会影响到集合元素的改变

单选2.单元测试代码写在Java工程的哪个地方最为合适?

○ A.写在业务代码体里边,方便调试

○ B.写在业务代码同一个包下,方便归类查找

C.写在src/test/java目录下

○ D.写在src/java目录下

单选3.KV结构的集合,在处理null值的存储上有细微的区别,下列哪些说法是正确的:

A.TreeMap的key不可以为null

○ B.TreeMap的key可以为null

○ C.ConcurrentHashMap的key可以为null

○ D.ConcurrentHashMap的Value可以为null

单选4.关于使用explain对数据库性能进行优化分析,下列哪些说法符合《阿里巴巴Java开发手册》:

A.SQL性能优化的目标:至少要达到range级别,要求是ref级别,如可以是consts最好。

○ B.index级别走的是扫描索引,所以速度会比ref快。

○ C.range级别是指对表进行范围索引。

○ D. ref级别是指使用主键或者唯一索引

单选5.集合在遍历过程中,有时需要对符合一定条件的元素进行删除,下列哪些说法是正确的:

○ A.在foreach循环里进行元素的remove操作。

B.使用Iterator方式,如果有并发,需要对Iterator对象枷锁。

○ C.Iterator进行元素的删除操作,绝对是线程安全的。

○ D.Java无法实现遍历时,进行元素删除操作。

单选6.关于类的序列化,下列说法哪些是正确的:

○ A.类的序列号与serialVersionUID毫无关系。

○ B.如果完全不兼容升级,不需要修改serialVersionUID值

○ C.POJO类的serialVersionUID不一致会编译错误。

D.POJO类的serialVersionUID不一致会抛出序列化运行时异常。

单选7.sort表示元素在存入集合时进行了排序,数据遍历的结果是按照某个排序规则输出的;而order表示每次遍历的序列都是一样的,元素前后关系每次遍历都是确定的,那么下列集合即是sort,又是order的:

○ A.HashSet

○ B.LinkedList

○ C.HashMap

D.TreeSet

多选8.关于异常处理的注意事项,下列哪些说法符合《阿里巴巴java开发手册》:

A.事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。

B.在finally块必须对文件流进行关闭。

□ C.推荐在finally块使用return语句。

□ D.在try块内,可以不用对可能为null的对象做非空判断,因为如果抛掷NPE,会被catch块捕获并处理。

多选9.关于try-catch的使用方式,下列哪些说法是正确的:

□ A.推荐用try-catch来做控制流程,条件控制。

B.捕获异常与抛出异常,必须是完全匹配,或者捕获异常是抛出异常的父类。

□ C.对大段代码进行try-catch,利用Throwable来捕获,万无一失。

D.对大段代码进行try-catch,这是不负责任的表现,分清稳定代码和非稳定代码,对非稳定的代码做对应的异常处理。

多选10.数组使用Arrays.asList转化为集合,下列哪些说法是正确的:

A.数组元素的修改,会影响到转化过来的集合。

□ B.数组元素的修改,不会影响到转化过来的集合。

C.对于转化过来的集合,它的add/remove/clear方法会抛出:UnsupportedOperationException。

D.Array.asList体现的是适配器模式,只是转换接口,后代的数组仍是数组。

多选11.关于使用iBATIS操作数据,下列哪些说法符合《阿里巴巴java开发手册》:

A.如果表中字段和DO中的字段名完全一致,可直接用DO作为resultClass。

□ B.iBATIS中自带了queryForList(String statementName, int start, int size)的分页接口,可以直接使用,无需再自行封装。

C.不要定义大而全的数据更新接口,对整个DO进行更新,必须按需要更新。

D.sqlmap中写update语句时,必须包含对记录中gmt_modified字段的更新。

多选12.关于索引的使用,下列哪些说法是正确的:

□ 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.索引字段使用时不能进行函数运算。

多选13.根据《阿里巴巴java开发手册》,数据库的表设计,允许适当冗余以提升SQL查询的性能,避免表的关联查询,下列哪些字段不允许冗余:

□ A.text类型的字段。

□ B.基本固定不变的类目名称。

C.varchar(2500)的字段。

D.需要频繁修改的字段。

多选14.关于代码书写格式,下列哪些说法符合《阿里巴巴java开发手册》:

□ A.换行时相对上一行缩进2个空格。

B.运算符与下文一起换行,方法调用的点符号与下文一起换行。

C.在多个参数超长,逗号后进行换行。

D.在括号前不要换行。

多选15.关于系统安全,下列哪些说法符合《阿里巴巴java开发手册》:

A.非SEO URL必须配置为禁止爬虫访问。

B.用户生成内容的场景,如发帖评论等,必须实现防刷。

C.使用平台资源,比如短信、邮件等功能,避免被滥刷资源,同时防止对用户造成骚扰。

D.文本内容必须进行违禁词过滤。

多选16.关于并发处理,下列哪些说法符合《阿里巴巴java开发手册》:

A.线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。

B.同步处理时,能锁部分代码区块的情况下不要锁整个方法;高并发时,同步调用应该考虑到性能损耗。

C.创建线程或线程池时,推荐给线程指定一个有意义的名称,方便出错时回溯。

□ D.推荐使用Executors.newFixedThreadPool(int x)生成指定大小的线程池。

多选17.对于索引(a, b, c),下列哪些说法是正确的:

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可以使用该索引。

多选18.在多线程并发读写的情况下,下列哪些处理方式能保证对象的线程安全:

□ A.使用volatile关键字。

B.使用synchronized关键字给对象的读写操作枷锁。

C.如果是基本类型,推荐使用java.util.concurrent.atomic包下面提供的线程安全的基本类型包装类,例如AtomicInteger。

□ D.如果是集合,推荐使用java.util.concurrent提供的并发集合类,例如:ConcurrentHashMap。

多选19.关于线程安全,下列哪些说法是正确的:

A.SimpleDateFormat是线程不安全的类。

□ B.SimpleDateFormat是线程安全的类。

C.一般不要定义SimpleDateFormat的static变量,如果定义为static,必须保证线程安全。

D.被推荐使用Apache封装好的DateUtils和DateFormatUtils工具类,来处理时间日期转换问题。

多选20.以下关于格式规约的说法,正确的有哪些:

A.左括号和后一个字符之间不出现空格;同样,右括号和前一个字符之间也不出现空格,例如:if(flag == 1) {System.out.println(“world”);}

B.if/for/while/switch/do等保留字与左右括号之间都必须加空格;

□ C.while这个保留字比较特殊,使用时左右括号之间可以不用加空格,例如:while(true){…}

D.任何运算符左右必须加一个空格,运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号、三目运算符等。

多选21.关于Integer值的比较,下列哪些说法是正确的:

A.Integer a = 3; Integer b = 3; 那么条件表达式(a == b)返回的结果是true。

□ B.Integer a = 3; Integer b = 3; 那么条件表达式(a == b)返回的结果是false。

□ C.Integer a = 273; Integer b = 273; 那么条件表达式(a == b)返回的结果是true。

D.Integer a = 273; Integer b =273; 那么条件表达式(a == b)返回的结果是false。

多选22.关于二方库GroupID和ArtifactID格式,下列哪些说法符合《阿里巴巴java开发手册》:

A.GroupID格式为:com.{公司/子公司}.业务线.[子业务线]。

□ B.GroupID格式为:com.{公司/子公司}.业务线.子业务线.子模块。

□ C.ArtifactID格式为:产品线名_模块名或者产品线.模块名。

D.ArtifactID格式为:产品线名-模块名。

多选23.关于异常处理,下列哪些说法是正确的:

A.try块放到了事务代码中,catch异常后,如果需要回滚事务,必须要手动回滚事务。

B.在finally块必须对文件流进行关闭。

C.不能在finally块使用return,finally块中的return返回方法结束执行,不会再执行try块中的return语句。

D.循环体中避免不必要的try-catch操作。

多选24.关于方法的返回值是否可以为null,下列哪些说法符合《阿里巴巴java开发手册》:

□ A.方法的返回值可以null,如果是集合,必须返回空集合。

B.方法的返回值可以null,不强制返回空集合,或者空对象等。

C.方法实现者必须添加注解,充分说明什么情况下会返回null值。

□ D.防止NPE是调用者的责任。

多选25.对于索引的基本原理,下列哪些说法是正确的:

A.索引的数据结构主要有B-Tree、Hash、R-Tree、Full-Text等。

B.从物理存储来看,主要分为聚集(clustered)和非聚集(non-clustered)索引。

C.MySQL的表是聚集索引组织表(index of table)。

D.聚集索引的叶子节点存放的是数据,非聚集索引的叶子节点存放的是非聚集索引的key和主键值。

多选26.关于线程池管理线程的好处,下列哪些说法是正确的:

A.能够减少在创建和销毁线程上所花费的时间以及系统资源的开销。

□ B.使用线程池一定能避免OOM问题。

C.线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。

□ D.线程池能够根据资源等待情况,自动调整线程优先级并解决死锁问题。

多选27.关于join的描述,下列哪些说法符合《阿里巴巴java开发手册》:

A.join字段,数据类型须保持绝对一致。

B.join列必须有索引。

□ C.优先where过滤,其次再join关联。

□ D.只要满足业务需求和,join表的个数不受限制。

多选28.关于参数校验,下列哪些说法符合《阿里巴巴java开发手册》:

A.批量处理接口必须做好接口入参保护。

□ B.需要极高稳定性和可用性的方法需要对参数进行校验。

□ C.底层的方法,在上层调用中参数多半已经被校验过,可以考虑不校验。

D.对外提供的开发接口,都需要进行参数校验。

多选29.关于maven依赖、仲裁、规则,下列哪些说法是正确的:

A.<dependencies>的依赖会默认传递给子项目。

□ B.<dependencies>的依赖绝对不会传递给子项目。

C.在<dependenciesManagement>中指定版本号。

D.避免在不同的子项目,声明同一个二方库的不同版本号。

多选30.关于Java代码的设计和开发注意事项,下列哪些说法符合《集合开发规约》:

A.禁止将URL、文件名、系统参数、数据库连接地址、业务规则的可变参数,硬编码在工程中。

B.long或者Long初始赋值时,必须是大写的L,不能小写。

C.当一个类有多个构造方法,或是多个同名方法,这些方法应该按顺序放置在一起,便于阅读。

D.相同参数类型,同等业务含义,才可以使用Java的可变参数,参数的类型尽量避免使用Object。

多选31.关于代码注解,下列哪些说法符合《阿里巴巴java开发手册》:

A.所有的抽象方法(包含接口中的方法)必须要用javadoc注解。

□ B.所有的方法,包括私有方法,最好都增加注解,有总比没有强。

C.过多过滥的注解,代码的逻辑一旦修改,修改注解是相当大的负担。

D.我的命名和代码结构非常好,可以减少注解的内容。

多选32.关于常量的命名,下列哪些说法符合《阿里巴巴java开发手册》:

A.常量命名应该全部大写,单词间用下划线隔开。

B.常量的定义要力求语义表达完整清楚,让别人能从常量名称上大致了解含义,例如:MAX_STOCK_COUNT。

□ C.常量命名,可以使用拼音和英文的混合方式。

D.在使用缩写时要注意:杜绝不规范的缩写。

多选33.好的单元测试必须遵守AIR原则,那么AIR原则具体是指:

A.单元测试应该是全自动执行的,并且非交互式的。

□ B.单元测试必须在线上环境能够全部被正确地编译。

C.为了保证单元测试稳定可靠且便于维护,单元测试用例之间不能互相调用,也不能依赖执行的先后次序。

D.单元测试是可以重复执行的。

多选34.关于用日志记录异常信息,下列哪些说法符合《阿里巴巴java开发手册》:

A.日志尽量记录案发现场信息和异常堆栈信息。

B.如果日志中输出POJO类,POJO类需要重写toString方法,避免只输出hashCode。

□ C.不建议输出任何日志,因为日志记录消耗性能。

□ D.捕获异常后,一律抛给调用者去处理。

多选35.关于多线程并行处理定时任务的情况,下列哪些说法符合《阿里巴巴java开发手册》:

□ A.推荐使用Timer方式处理。

B.推荐使用ScheduledExecutorService方式处理。

C.Timer运行多个TimerTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行。

D.ScheduledExecutorService并发运行多个定时任务时,其中某线程抛出异常,不会影响到其它线程的继续运行。

多选36.关于ORM的规则,下列哪些说法符合《阿里巴巴java开发手册》:

A.数据库中,表达是与否概念的字段,必须使用is_xxx的方式命名。

□ B.推荐使用iBATIS自带的queryForList(String statement, int start, int size)进行分页查询。

□ C.为了避免写resultMap,可以直接拿HashMap与HashTable作为查询结果集的输出。

D.不要用resultClass当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义。

多选37.关于应用中可以直接依赖的日志框架,下列哪些说法符合《阿里巴巴java开发手册》:

□ A.Log4j。

B.SLF4J

C.JCL(Jakarta Commons Logging)

□ D.Logback。

多选38.关于二方库使用枚举类型,下列哪些说法符合《阿里巴巴java开发手册》:

A.二方库里可以定义枚举类型。

B.二方库里接口的入参可以使用枚举类型。

□ C.二方库里接口的返回值不可以使用枚举类型,但可以包含枚举类型。

D.二方库里接口的返回值是枚举类型或包含枚举类型时,当二方库的枚举值升级(增加枚举值)时,可能会导致接口调用时出现枚举对象序列化异常。

多选39.关于数据库中NULL的描述,下列哪些说法符合《阿里巴巴java开发手册》:

□ A.NULL = NULL的返回结果为true。

B.NULL与任何值比较结果都为NULL。

□ C.NULL<>1的返回结果为true。

D.当某一列的值全都是NULL时,sum(col)的返回结果为NULL。

多选40.关于枷锁,下列哪些说法符合《阿里巴巴java开发手册》:

A.可以只锁代码块的情况下,就不要锁整个方法体。

B.高并发的业务场景下,要考虑枷锁及同步处理带来的性能损耗,能用无锁数据结构,就不要用锁。

C.能用对象锁的情况下,就不要用类锁。

D.枷锁时需要保持一致的枷锁顺序,否则可能会造成死锁。

多选41.关于数据库是与否概念的列的命名方式,下列哪些说法符合《阿里巴巴java开发手册》:

□ A.对于是与否概念的列名,必须使用can_abc来表示。

B.对于是与否概念的列名,必须使用is_abc来表示。

□ C.数据类型是varchar(1)(Y表示是,N表示否)。

D.数据类型是unsigned tiny int,(1表示是,0表示否)。

多选42.使用CountDownLatch进行异步转同步操作时,下列哪些说法是正确的:

A.每个线程退出前必须调用countDown()方法。

B.线程执行代码注意catch异常,确保countDown()方法可以被执行。

C.子线程抛出异常堆栈,直接接可以在主线程catch到。

D.主线程必须在启动其它线程后调用await()方法,这样主线程的操作就会在这个方法上阻塞,直到其他线程完成各自的任务。

多选43.关于MySQL性能优化的描述,下列哪些说法是正确的:

A.主键查询优先于二级索引查询。

B.表连接有一定的代价,故连接数量越少越好。

C.一般情况下,二级索引扫描优先于全表扫描。

D.可以使用通过索引避免排序代价。

多选44.关于异常的处理方式,下列哪些说法是正确的:

□ A.为防止obj对象本身空指针异常,书写代码时应该注意加异常捕获处理,例如:try {obj.method()} catch (NullPointerException e){……}。

B.方法签名中,抛给调用者的关键字为throws。

□ C.方法内部,抛出异常实例对象为throws。

D.自定义异常要做到“认知对等“,即:抛出者和接收者要保持对自定义异常的认知统一,接收方需要知道这种异常的含义和对应的处理方案。

多选45.关于数据库索引的命名,下列哪些说法符合《阿里巴巴java开发手册》:

A.主键索引(primary key),字段类型为unsigned bigint、单表时推荐自增、步长为1。

□ B.主键索引(primary key),字段类型为unsigned bigint、单表时推荐自增、步长为2。

C.唯一索引(unique key),命名规则为uk_字段名(如果多个字段继续下划线)。

D.普通索引(normal key),标记成idx_字段名(如果多个继续下划线)。

多选46.在《阿里巴巴java开发手册》中,提到不要对单元测试存在哪些误解?

A.那是测试同学干的事。

B.单元测试代码是多余的。

C.单元测试代码不需要维护。

D单元测试与线上故障没有辩证关系。

多选47.关于Java代码设计和开发注意事项,下列哪些说法符合《阿里巴巴java开发手册》:

A.所有的覆写方法,必须是强制加@Override。

B.setter方法中,参数名称与类成员变量名称一致,this.成员名=参数名。

C.在getter方法中,尽量不要增加逻辑判断,因为添加了逻辑判断后,会曾加排查问题难道。

□ D.避免用BeanUtil进行属性的copy。

多选48.关于分页查询,下列哪些说法符合《阿里巴巴java开发手册》:

A.分页查询,当统计的count为0时,应该直接返回,不要在执行分页查询语句。

B.iBATIS自带的queryForList(String statementName, int start, int size)分页接口有性能隐患,不允许使用。

C.定义明确的sql查询语句,通过传入参数start和size来实现分页逻辑。

□ D.可以使用存储过程写分页逻辑,提高效率。

多选49.如何处理单元测试产生的数据,下列哪些说法是正确的?

A.测试数据入库时加特殊前缀标识。

B.测试数据使用独立的测试库

C.自动回滚单元测试产生的脏数据。

□ D.无须区别,统一在业务代码中进行判断和识别。

多选50.关于数据库命名规则,下列哪些说法符合《阿里巴巴java开发手册》:

□ A.数据库库名和表名没有规则,可以任意取,只要方便记忆即可。

B.库名应该尽量与应用名称保持一致,表的命名最好时业务名称_表名的方式。

C.无论是库名还是表名都禁用保留字,如desc、match、range等。

D.表名、字段名必须使用小写字母或数字。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号