发布时间: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.表名、字段名必须使用小写字母或数字。