软件开发面试题总结整理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件开发面试题总结整理
一、java8 新特性
1、增加函数式接口,支持lambda表达式,使用lambda表达式和方法引用,可以使代
码更简洁。
缺点:在非并行计算中,很多计算未必有传统的for性能要高。
2、Stream 对集合、数组实现一系列的聚合操作,可以实现像sql一样操作数据。
一般和lamda配合使用。
int count = strings.stream().filter(string -> string.isEmpty()).count();
还有map、limit等方法。Map映射每个元素到对应的结果。
sorted 方法用于对流进行排序。
二、Java支持的数据类型有哪些?什么是拆装箱?
Java中有八种基本数据类型以及引用类型
基本数据类型:
byte(1字节),short(2字节),int(4字节),long(8字节),char(2字节),boolean(不确定,取值是true/false),float(4字节),double(8字节)引用数据类型:包括数组,集合,字符串,接口以及类等
自动装箱/自动拆箱:就是指基本数据类型可以和其对应包装类之间自动转换
三、值传递和引用传递的理解:
值传递是在方法调用的时候,实参复制一份给形参,方法体内对参数变量的修改不影响原来的那一份。引用传递指的是实参和形参指向同一个内存地址,在方法中修改了形参的值,原来的值也就改变了。
四、Array和ArrayList的区别。
Array是容量固定的,效率比较高。ArrayList可以实现自动扩容,但是效率比较低。
数组扩容是对ArrayList效率影响比较大的一个因素。每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。
五、数据库索引
目的是提高查询速度。一般在WHERE和JOIN中出现的列需要建立索引。
包括普通索引、唯一索引、主键索引、组合索引。
索引失效的情况:
1、使用<> not in、not exist、like”%_”
2、对索引列进行运算。
3、某个字段被定义为varchar2(20),但在查询时把该字段作为number类型以where条
件传给Oracle。
索引的缺点:
1、使用索引虽然会提高查询速度,但是会降低更新性能,在执行insert、update、delete
时,不仅要更新数据,还要更新索引文件。
2、建立索引会占用磁盘空间的索引文件。
使用索引的注意事项:
1、索引中不会包含有NULL值的列,如果某一列中有NULL值,那么这一列对索引是无
效的。在数据库设计时不要让字段的默认值为NULL。
2、尽量使用短索引,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
3、尽量避免在列上进行运算,尽量避免使用like操作。
索引的原理:平衡树,也就是B+树。查询次数为树的深度,所有的数据都在叶子节点上。缺点:更新索引之后需要判断是否还平衡,不平衡的话调整树结构,使他变得平衡。
不应该创建索引的列:
1、很少用这个列查询。
2、更新频率大于查询频率。
六、临时表
临时表的数据只是在会话或事务期间存在,对于会话类型的临时表,会话的数据对于当前会话私有,每个会话只能看到并修改自己的数据。对于使用同一张临时表的不同用户,Oracle都会分配一个独立的TEMP SEGMENT,这样就避免了多个用户在对同一张临时表操作时发生交叉,从而保证了多个用户操作的并发性和独立性。对于事务类型的临时表,当进行事务提交或者事务回滚的时候,临时表中的数据将自动被清空。
会话临时表的创建:CREATE GLOBAL TEMPORARY
事务级别临时表的创建:CREATE GLOBAL TEMPORARY
什么时候用临时表呢?
应用场景1:你在短期内有很多DML操作,比如京东淘宝亚马逊的购物车表,把东西放购物车(insert),变更数量(update),删除商品(delete),一旦结算金钱后,这些数据就要清掉,这时需要用临时表
应用场景2:在导出数据时,你可能不想导完整的数据库,或者表,你可能只想要导出符合某些条件的数据,那么你可以创建临时表,把select语句插入到临时表,接着导出这个临时表,导完以后通过结束session或者事务的方式,让这些没用的数据自动清理掉
应用场景3:你在写存储过程时,有很多的连接,比如你需要连接A,B,C,D,E,F,G,H那么多张表,才能得到你的结果表,同时做连接的消耗太大,你可以先A,B,C连接的结果,放在临时表,接着再把这张临时表,跟D,E,F连接,作为新的结果放在临时表,接着再把临时表与G,H连接,最后得到临时表数据,一次插入到结果表(永久表)。
七、存储过程。
存储过程是多条sql的组合。
存储过程优点:
1、存储过程在创建时进行编译,在以后执行的时候就不需要再编译了。而sql在每一
次执行的时候都需要重新编译一次,所以用存储过程会提高执行效率。
2、一般情况下,复杂的业务逻辑包含多条sql语句,这些语句需要从客户机发送到数
据库服务器,会加大网络传输负载。
3、存储过程写好之后可以多次复用。
4、避免对底层数据库对象的直接访问。
格式:
create or replace procedure p4
as