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优化有没有做过

网上搜索的结果:

20180511-面试感悟-要知其然还要知其所以然

6、JVM内存结构

jvm内存结构包括:堆,栈,方法区,程序计数器,虚拟机栈

20180511-面试感悟-要知其然还要知其所以然

面试时一般关注的是堆,栈,方法区。

堆:①堆中存放new出来的对象,包括对象的成员变量等;

      ②成员变量的生命周期是new对象时存在,对象被回收时消失;

      ③当对象没有任何引用时,就是垃圾,垃圾回收器(GC)回收的就是堆中的对象(建议:不再使用的对象,及时将引用设置为null

栈:①存储正在使用的局部变量

      ②方法被调用时,分配一个“栈帧”。方法结束时,局部变量也一并消失。

方法区:①用于存放类的信息,方法信息等

参考文章:JVM内存模型与垃圾回收

7、乐观锁异常,如果解决?

8、微服务,dubbo