20180511-面试感悟-要知其然还要知其所以然
工作两年多,每次面试前我都会特别紧张,还是自己平时不注意总结,学习太少的缘故。
面试的这家公司就不说名字了,问题比较偏向原理。
这里的回答是网上复制的,加上自己的理解,如果有理解不对的地方,欢迎大家指正。
面试题:
1、为什么使用序列化,PO层需要实现序列化吗?
答:我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。
java类通过实现 java.io.Serializable 接口以启用其序列化功能。
序列化的使用场景:
- 需要通过网络来发送对象,或将对象的状态需要被持久化保存到数据库或文件中。(所以PO都要实现序列化)
- 序列化能实现深复制,即复制引用的对象。
2、项目中用到了mq,有没有用mq做过并发测试?
3、mq怎么保证messagge一定发送个对方。
4、list如何删除元素的?
list本身提供了remove()方法,一般不用。原因是因为list删除元素后,长度为变化,如果继续使用romove,可能会抛异常。(这里应该用代码验证一下的,下次验证一下,总结出来)
一般使用Iterator接口中的hasNext()方法判断是否还有下一个,然后调用next()方法获取下一个元素,使用Iterator接口中的remove方法删除元素。
5、mysql优化有没有做过
网上搜索的结果:
6、JVM内存结构
jvm内存结构包括:堆,栈,方法区,程序计数器,虚拟机栈
面试时一般关注的是堆,栈,方法区。
堆:①堆中存放new出来的对象,包括对象的成员变量等;
②成员变量的生命周期是new对象时存在,对象被回收时消失;
③当对象没有任何引用时,就是垃圾,垃圾回收器(GC)回收的就是堆中的对象(建议:不再使用的对象,及时将引用设置为null)
栈:①存储正在使用的局部变量
②方法被调用时,分配一个“栈帧”。方法结束时,局部变量也一并消失。
方法区:①用于存放类的信息,方法信息等
参考文章:JVM内存模型与垃圾回收
7、乐观锁异常,如果解决?
8、微服务,dubbo