1、TCP和UDP区别
a、TCP面向连接;UDP是无连接的
b、TCP发送的是字节流,UDP发送的是数据报
c、TCP提供可靠服务,通过TCP传输的数据无差错、不丢失、不重复且有序到达;UDP不保证可靠交付
d、TCP连接只能是点对点;UDP支持一对一,一对多,多对一和多对多的交互通信
e、TCP首部20个字节;UDP只有8个字节
f、TCP的逻辑信道是全双工的可靠信道;UDP则是不可靠信道
2、hibernate和mybatis区别
a、hibernate是全自动的;mybatis是半自动的
b、hibernate数据库移植性远大于mybatis
c、hibernate拥有完整的日志系统;mybatis则欠缺一些
d、sql直接优化上,mybatis要比hibernate方便很多
mybatis:小巧、方便、高效、简单、直接、半自动
hibernate:强大、方便、高效、复杂、绕弯子、全自动
3、分布式狭义定义
业务拆分,但不限于水平拆分,而是拆分出底层模块,功能模块,上层模块等等
一个系统功能繁多,且有层次依赖,那么我们需要将其分为很多模块,并分别部署
4、http和https的理解
http是基于TCP协议之上的应用层的协议。是一种无状态的协议。
https十亿安全为目标的HTTP通道,即在HTTP下加入SSL层,HTTPS的安全基础是SSL
5、socket通信
socket通信的步骤:
a、创建ServerSocket和Socket
b、打开连接到Socket的输入/输出流
c、按照协议对Socket进行读/写操作
d、关闭输入输出流、关闭Socket
服务器端:
a、创建ServerSocket对象,绑定监听端口
b、通过accept()方法监听客户端请求
c、连接建立后,通过输入流读取客户端发送的请求信息
d、通过输出流向客户端发送相应信息
e、关闭相关资源
客户端:
a、创建Socket对象,致命需要连接的服务器的地址和端口号
b、连接建立后,通过输出流向服务器端发送请求信息
c、通过输入流获取服务器相应的信息
d、关闭响应资源
6、spring的工作原理
内部最核心的是IOC,动态注入,让一个对象的创建不用new了,可以自动生产,这其实就是利用了java
里的反射。spring在运行时,跟xmlspring的配置文件来动态的创建对象和调用对象里的方法的。spring
还有一个核心就是AOP(面向切面编程),可以为某一类对象进行监督和控制从而达到对一个模块扩充的
功能。
spring的目的就是让对象与对象之间的关系没有通过代码来关联,都是通过配置类说明管理的。
spring是一个容器,凡是在容器里的对象才会有spring所提供的这些服务和功能。
7、springMVC流程
a、用户发送请求至前端控制器DispatcherServlet
b、DispatcherServlet收到请求调用HandlerMapping处理器映射器
c、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦
截器一并返回给DispatcherServlet。
d、DispatcherServlet调用HandlerAdapter处理器适配器
e、HandlerAdapter经过适配调用具体的处理器
f、Contorller执行完成返回ModelAndView。
g、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
h、ViewReslover解析后返回具体View。
i、DispatcherServlet根据View进行渲染视图
j、DispatcherServlet相应用户
8、order by和group by的区别
order by:用来对数据库的一组数据进行排序
group by:用来对数据进行分组,就是将一个“数据集”划分成若干个“小区域”进行数据处理
9、重写equel方法时为什么要重写hashcode
在Java中的一些容器中,不允许有两个完全相同的对象,插入的时候,如果判断相同则会进行覆盖。这
时候如果只重写了equals()的方法,而不重写hashcode的方法,Object中hashcode是根据对象的存储
地址转换而形成的一个哈希值。这时候就有可能因为没有重写hashcode方法,造成相同的对象散列到不
同的位置而造成对象的不能覆盖的问题。
10、关于"a"+"b"共创建了几个对象的问题
创建了一个对象。String s = "a"+"b"; s == "ab";//true
11、“+=”和append的区别
在循环时使用+=会创建多个StringBuilder对象,而使用append(),只会创建一个。
所以我们在平时写代码的时候一定注意,不要再循环中使用+=操作,效率很低的。
12、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区
别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否
相等equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的
对象的内容和类型相配的话,返回真值。
13、HashMap和Hashtable有什么区别?
hashMap允许键和值是null,而hashTable不允许键或者值是null。
hashtable是同步的而hashmap不是。因此hashmap更适合于单线程环境,而hashtable适合于多线程环境
。
hashmap提供了可供应用迭代的键的集合,因此hashmap事快速失败的。另一方面hashtable提供了对键的
列举,一般认为hashtable是一个遗留的类。
14、HashSet和TreeSet有什么区别?
hashset是由一个hash表来实现的,所以它的元素是无序的;Treeset是由一个树形的结构来实现的,它
里面的元素是有序的。
15、PreparedStatement比Statement有什么优势?
preparedstatements是预编译的,因此,性能会更好。同时,不同的查询参数值,preparedstatement可
以重用。
16、doGet()方法和doPost()方法有什么区别?
doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端
请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
doPost:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目
是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。
17、servlet的生命周期
servlet生命周期可以分成四个阶段:加载和实例化、初始化、服务、销毁。
18、sendRedirect()和forward()方法有什么区别?
sendredirect()方法会创建一个新的请求,而forward()方法知识吧请求转发到一个新的目标上。重
定向以后,之前请求作用于范围以内的对象就失效了,因为会产生一个新的请求,而转发以后,之前请
求作用于范围以内的对象还是能访问的。一般认为sendredirect()比forward()要慢。