目前发现,在面试过程中,面试官很少会问及某个技术领域的深度问题,而更多的是关注实际项目中使用到了哪些技术,以及这些技术的优略势,或者说是那些巧妙的用法
一、如何判断一个线程是否在运行。
isAlive() 测试线程是否处于活动状态。
isInterrupted()测试线程是否已经中断。
二、mysql分页方式
物理分页
逻辑分页
三、单例模式怎么优化
考虑是否要取消单例采用其他方式实现
四、redis的内存分配
五、http请求网络异常解决方案
根据异常状况和请求状况进行分类。考虑是否需要异步请求,实时数据交互考虑循环请求2次,而且一般在进行网络通讯的过程中,对于一些比较重要的交互数据会采用日志记录的方式来记录本次通讯的状况。后期可以通过日志分析异常的主要原因,并针对性解决。
六、怎么检测某个接口是否可以使用
七、linux命令相关
《鸟哥的Linux私房菜》
八、maven相关
九、关于内存溢出问题的查找方式
原因分析:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小;
解决思路:
第一步,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数一定不要忘记加。)
第二步,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。
第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。
使用工具:
常用的有 BoundsCheaker、Deleaker、Visual Leak Detector等
十、事务的作用
保证数据的原子性一致性隔离性和永久性。一般说为了保证数据的原子性即可。
十一、java.lang包下的常用工具类,本次考到了Random和Math
java.lang:提供利用 Java 编程语言进行程序设计的基础类。
Buy & Sell Domain Names:通过数据流、序列化和文件系统提供系统输入和输出。
java.lang.ref:强引用,软引用,弱引用,虚引用。
java.math:提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。
java.concurrent:在并发编程中很常用的实用工具类(ThreadFactory)
十二、Mysql查询
索引:缺点是索引过多写操作性能低,而且占的空间大。优点是查询快。数据量较大的情况下索引一般加在变化量较大的字段上。
十三、MySQL事务
事物的隔离级别:脏读(读取未提交的记录),读取提交,重复读(幻读),序列化。
事物的特性:原子性,一致性,隔离性,永久性。
十四、MySQL行锁、表锁
悲观锁:select .... for update 行锁,执行时其他事物不可对此记录进行操作。
乐观锁:根据时间戳,版本号,update ..set version = version + 1. where version = #{version}