本人在一家公司待了了两年 , 所做的工作 偏前端 但是偶尔也会涉及到后台 也有些无奈,工作中使用的工具不是开源的,最近面试了几家公司,将面试过程中出现频率很高的一些面试题进行一些个人总结 当然我是在巨人的肩膀上的 已经有很多有经验的大牛对此进行了总结,希望也能对某些童鞋提供帮助,有些问题答案是转载,如有错误 请联系18021915359@163.com , 谢谢!
面试一般包括口头面试,笔试,电话面试等,主要针对口述的常见java理论技术面试题。
分为java基础部分,java前端技术,javaweb , w数据库,java框架技术,服务器,linux 等.
java基础部分,基础中的基础
1 String 与Stringbuffer 和Stringbuilder 的主要区别?
1) 在运行速度方面表现为:
StringBuilder > StringBuffer > String
2)在线程安全方面:
StringBuilder是线程不安全的,而StringBuffer是线程安全的 如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
数据库优化方面
适当的索引
索引基本上是一个数据结构,有助于加快整个数据检索过程。唯一索引是一种索引,可以创建不重叠的数据列。正确的索引能够更快地访问数据库,但是过多的索引或无索引反而会造成不好的结果,如果没有索引,那么处理会非常慢。
2.仅检索相关数据
指定数据需要检索的精度。使用命令*和LIMIT来代替 SELECT *,调整数据库时,使用需要的数据集来代替整个数据集是非常有必要的,尤其是当你的数据源非常大的时候,指定所需要用的数据集将节省大部分时间。
*命令用于从列指定数据,LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。它们两的组合避免了未来系统出现问题,此外,数据集的限定也在一定程度上减少了对数据库的进一步优化。
3.摆脱相关的子查询
相关子查询基本上取决于父查询或外部查询。这种搜索是逐行完成的,这意味着它会降低整个过程的速度。通常如果WHERE来自于从外部查询的命令,应用子查询运行每一行,由父查询返回,从而减慢整个进程并降低数据库效率的话,更好的调整数据库的方式是INNER JOIN命令。当然在某些情况下,使用相关的子查询至关重要。
4.根据要求使用或避免临时表
如果代码可以以简单的方式写,绝对不要让临时表复杂化。当然,如果一个数据具有需要多次查询的具体程序,在这种情况下,建议使用临时表。临时表通常由子查询来交替。
5.避免编码循环
避免编码循环是非常需要的,因为它会拖慢整个序列。通过使用具有单个行的唯一UPDATE或INSERT命令来避免编码循环,并且通过WHERE命令确保不更新存储的数据,以便在找到匹配且预先存在的数据的情况下实现。
6.执行计划
优化器创建的执行计划工具在调优SQL数据库方面发挥主要作用。它们也有助于创建适当的索引。虽然它的主要功能是以图形方式显示检索数据的各种方法。但这反过来也有助于创建所需的索引并执行其他所需的步骤来优化数据库。
当然除此之外还有许多其他方法可以有效的方式来调整优化SQL数据库。