- 加密解密了解么?几种算法,讲一下你了解的
不懂,我搞后台的,不搞算法。
- 多线程了解么?什么是线程安全?
可以举个例子,hashmap的扩容阿,get null那些线程不安全的例子。
- 说一个你最熟悉的设计模式
工厂、享元、单例,随便说。
- 讲一下你项目中用到了哪些设计模式
雷电游戏走起。
- Java的hashmap的原理、线程安全性,什么是线程安全的?如何实现线程安全。
可以秀一波了。Concurrenthashmmap。
- 数据库的索引、数据库引擎了解么?数据库有哪些优化的方法?讲你自己知道的。
秀起。
- 写单例模式
答主写的是双检查锁单例,问了为什么用Volatile,synchronize
8. 数据连接池采用了什么设计模式?意义是什么?
享元模式, 数据库连接池来说,url、driverClassName、username、password及dbname,这些属性对于每个连接来说都是一样的,所以就适合用享元模式来处理,建一个工厂类,将上述类似属性作为内部数据,其它的作为外部数据,在方法调用时,当做参数传进来,这样就节省了空间,减少了实例的数量。
9. 为什么请求过来时可以找到在注解中的URL路径
通过配置的web.xml的servlet(DispatcherServlet),拦截所有请求,然后就通过SpringMVC的流程,找到URL对应的Handler。
10. 自己写注解实现增强的思路
第一种方法:其实就是使用拦截,用一个切面注解@PointCut,把需要拦截的地方给拦截下来,然后在用@before在前后进行方法增强。
还有第二种方法,就是配置好拦截器。实现了Spring 的HandlerInterceptor 接口,然后重写3个方法,preHandle 、postHandle和afterCompletion;最后在在SpringMVC的配置文件中加上支持MVC的配置说明。就可以拦截所需的类并且实现增强。
11. TCP粘包拆包解决
在进行Java NIO学习时,发现,如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况,这就是TCP协议中经常会遇到的粘包以及拆包的问题。
我们都知道TCP属于传输层的协议,传输层除了有TCP协议外还有UDP协议。那么UDP是否会发生粘包或拆包的现象呢?答案是不会。UDP是基于报文发送的,从UDP的帧结构可以看出,在UDP首部采用了16bit来指示UDP数据报文的长度,因此在应用层能很好的将不同的数据报文区分开,从而避免粘包和拆包的问题。而TCP是基于字节流的,虽然应用层和TCP传输层之间的数据交互是大小不等的数据块,但是TCP把这些数据块仅仅看成一连串无结构的字节流,没有边界;另外从TCP的帧结构也可以看出,在TCP的首部没有表示数据长度的字段,基于上面两点,在使用TCP传输数据时,才有粘包或者拆包现象发生的可能。
粘包、拆包表现形式
现在假设客户端向服务端连续发送了两个数据包,用packet1和packet2来表示,那么服务端收到的数据可以分为三种,现列举如下:
第一种情况,接收端正常收到两个数据包,即没有发生拆包和粘包的现象,此种情况不在本文的讨论范围内。
第二种情况,接收端只收到一个数据包,由于TCP是不会出现丢包的,所以这一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包。这种情况由于接收端不知道这两个数据包的界限,所以对于接收端来说很难处理。
第三种情况,这种情况有两种表现形式,如下图。接收端收到了两个数据包,但是这两个数据包要么是不完整的,要么就是多出来一块,这种情况即发生了拆包和粘包。这两种情况如果不加特殊处理,对于接收端同样是不好处理的。
粘包、拆包发生原因
发生TCP粘包或拆包有很多原因,现列出常见的几点,可能不全面,欢迎补充,
1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
2、待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
等等。
粘包、拆包解决办法
通过以上分析,我们清楚了粘包或拆包发生的原因,那么如何解决这个问题呢?解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个:
1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。
等等。
12. MyBatis