Java高频面试题(Java Web)
5 Java Web
5.1 序列化和持久化的区别
序列化:将对象转换成二进制流的过程
反序列化:将二进制流恢复成数据对象的过程
持久化:将数据对象保存在介质上(一般就是硬盘上)
序列化是保存当前对象的状态已方便重复使用(比如缓存),持久化是记录对象的某些特征或者状态(比如存储数据库)
序列化偏向于程序运行过程,持久化偏向于业务属性状态
序列化使用在游戏存档、缓解当前内存压力,持久化使用在保存业务数据。
5.2 Java对象为什么要序列化
序列化即可将类实例化到内存中并保留序列化时类中的所有变量和状态
对象、文件、数据有许多不同的格式,很难统一传输和保存,序列化以后就都变为了二进制流了,无论原来是什么东西,都能变为一样的东西,就可以进行通用的格式和保存,传输结束后,要再次使用,就就进行反序列化还原,这样对象还是对象,文件还是文件
所以在Java中的对象需要转化为流的格式,以流的格式进行传输。
Java对象序列化后:
可以对流化后的对象进行读写操作(持久化、缓存)
可以对流化后进行对象传输在网络之间
可以实现分布式对象的远程调用
5.3 什么是对象持久化
持久化:是指将对象流化后保存在内存中的二进制流保存到磁盘等存储设备中。
对象的持久化:是指将业务对象永久保存到数据库中,包括和数据库的相关操作:
更新:更新数据库中对象的状态
删除:从数据库中删除一个对象
查询:根据特定的查询条件,把符合条件的一个或多个对象从数据库加载到内存中
加载:根据特定的OID(Object ID,是对象的唯一标识),把一个对象从数据库加载到内存中
5.4 什么是JDBC
JDBC是允许用户在不同数据库之间做选择的一个抽象层,是Java连接数据库的中间件。JDBC允许开发者用Java写数据库应用程序,而不需要关心底层特定数据库的细节。
5.5 JDBC的驱动程序是什么
JDBC驱动提供了特定数据库厂商对JDBC API接口类的实现,驱动提供了java.sql包下面这些类的实现:
- Connection
- Statement
- PreparedStatement
- CallableStatement
- Driver
- ResultSet
5.6 PreparedStatement比Statement有什么优势
PreparedStatement有助于防止SQL注入,因为他会自动对特殊字符转义
PreparedStatement执行更快。尤其是当你重用它或者使用它的批量查询接口执行多态语句时
PreparedStatement的setter方法更容易写出面向对象的代码,而Statement使用拼接字符串来生成查询语句,如果参数太多了,字符串拼接起来容易出错。
5.7 数据库连接池是什么意思
打开关闭数据库连接可能是很费时的,尤其是当客户端用户增加的时候,会消耗大量的资源,成本是非常高的。可以在应用服务器启动的时候建立很多个数据库连接并维护在一个池中。连接请求由池中的连接提供。当连接使用完毕后,把链接归还(释放)回连接池中,以用于满足将来更多的请求,不必每次进行连接的创建与关闭,大大减少了性能的消耗。
5.8 HTTP请求的结构
HTTP请求是指从客户端到服务器的请求信息
HTTP请求分为了三个部分组成
-
请求的 方法 URL 协议/版本:请求的第一行是“方法URL的协议/版本”
例如:GET/sample.jsp HTTP/1.1
GET代表请求方法;/sample.jsp代表URL;HTTP/1.1代表协议和协议的版本
-
请求头:包含许多有关的客户端环境和请求正文的有关的信息。
例如:请求头可以声明浏览器所用的语言,请求正文的长度等。
-
请求正文:就是我们向后台提交的查询信息,例如:username=123&password=1234
5.9 HTTP响应的结构
HTTP响应是指从服务器端返回请求的结构到客户端
HTTP响应分为了三个部分
-
状态码:描述了响应了的状态。
可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可用来找出失败的原因
-
HTTP 头部:它们包含了更多关于响应的信息
例如:头部可以指定响应过期的过期时间,或者可以指定用来给用户安全的传输实体内容的编码格式
-
主体:它包含了响应的内容,主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的。
5.10 http协议与https协议的区别
安全角度:
HTTP协议属于“明文传输协议”,是以明文的方式在网络中传输数据的
HTTPS协议属于“加密传输协议”,HTTPS协议中传输的数据是需要经过TLS/SSL加密后才进行传输的,因此HTTPS在传输数据方面具有较高的安全性
端口角度&#