Java整理3

一.http协议web

二.hibernate缓存模式,级别;Hibernatemybatis的区别和优缺点数据库

三.SQL优化经验浏览器

四.分布式集群和Redis缓存

五.Spring Aop,动态代理;安全

六.多线程安全问题,多线程实现 thread local服务器

 

一.HTTP协议(HyperText Transform protocal 超文本协议)session

1.超文本协议是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的链接方式,http1.1版本是一种连续性链接机制,绝大多数web开发都是构建在http协议之上。mybatis

 

2.网页响应过程:输入www.baidu.com回车多线程

域名响应-》发起TCP3次握手-》创建TCP的链接后发起http请求-》服务器响应http请求,浏览器获得HTML代码-》浏览器解析HTML代码-》页面渲染框架

 

3.http 无状态的

协议对于事务处理没有记忆能力

 

4. 主要方法getpost请求方法的区别

1 Get方法主要是向服务器获取资源,post重点是向服务器发送数据;

2.Get传输数据经过URL请求,数据可见,用?链接。对用户可见,明文不安全,Post是经过httppost机制,将字段对应封存在请求实体中发送给服务器,对用户不可见,安全性高;

3.Get方式只支持ASCII字符,中文可能乱码。Post支持标准字符集,能够传输中文。

4.Get传输的数据量小,受URL长度的限制,可是效率高。Post能够传输大量数据,因此上传文件时只能用post

 

二.Hibernate

1. Hibernate缓存机制和三种状态

缓存就是要将一些常用的数据缓存到内存或者各类储存介质中,当再次使用时能够不用去数据库中查询,减小与数据库的交互,提升性能。
再说明一级与二级缓存的做用:一级缓存是Session级别的,也就是说在一个事务中才会启做用。好比在一个事务中同时查询同一个对象,则不会两次去数据库中查询。
而二级缓存是sessionFactory级别的,不一样的事务之间是能够共享的,有些权限,当用户首次登录后便将关联的权限放到二级缓存中,这样每次须要权限时就无需再查询数据库了。
最后再说明为何这样设计:通常状况下,咱们查询的数据通常是实时的,使用二级缓存确定不行,使用一级缓存既利用了缓存又不会影响实时。
使用二级缓存是为了存储一些比较稳定的数据,如权限,只有在用户修改了权限且从新登陆时才能生效。

SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预约SQL语句等),对于应用程序来讲,它是只读的。外置缓存中存放的是数据库数据的副本,其做用和一级缓存相似.二级缓存除了之内存做为存储介质外,还能够选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它能够被全部session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。

三种状态:

1. 零时状态(瞬时状态Transient) new对象开辟内存空间 User user=new User();

2. 持久状态(persistent)

该状态的对象在数据库中具备对应的记录,并拥有一个持久化标识.经过session的 get()、load() 等方法得到的对象都是持久对象。持久化对象被修改变动后,不会立刻同步到数据库,直到数据库事务提交。在同步以前,持久化对象是脏的。

3. 游离状态(托管状态Detached)

当与某持久对象关联的 session 被关闭后,该持久对象转变为游离对象.当游离对象被从新关联到session上 时,又再次转变成持久对象(在Detached其间的改动将被持久化到数据库中)。游离对象拥有数据库的识别值,但已不在持久化管理范围以内。

 

2Hibernatemybatis区别

Mybatis优点 面向过程

· MyBatis能够进行更为细致的SQL优化,能够减小查询字段。

· MyBatis容易掌握,而Hibernate门槛较高。

Hibernate优点 面向对象

· HibernateDAO层开发比MyBatis简单,Mybatis须要维护SQL和结果映射。

· Hibernate对对象的维护和缓存要比MyBatis好,对增删改查对象的维护要方便。

· Hibernate数据库移植性很好,MyBatis的数据库移植性很差,不一样的数据库须要写不一样SQL

· Hibernate有更好的二级缓存机制,可使用第三方缓存。MyBatis自己提供的缓存机制不佳

相同点:HibernateMyBatis均可以是经过SessionFactoryBuiderXML配置文件生成SessionFactory,而后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuiderSessionFactorySession的生命周期都是差很少的。

4.Hibernate工做原理

1. 读取并解析配置文件

2. 读取并解析映射信息,建立session Factory

3. 打开session

4. 建立事务transation

5. 持久化操做

6. 提交事务

7. 关闭session

8. 关闭session factory

5.为何要用hibernate

1.对JDBC访问数据库的代码作了封装,大大简化了数据访问层繁琐的重复性代码。
2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他能很大程度的简化DAO层的编码工做
3.hibernate使用Java反射机制,而不是字节码加强程序来实现透明性。
4.hibernate的性能很是好,由于它是个轻量级框架。映射的灵活性很出色。它支持各类关系数据库,从一对一到多对多的各类复杂关系。

6.Hibernate是如何延迟加载

涉及延迟加载的有getload方法,get不会延迟加载,load会延迟加载。另外在many-to-one关系中能够经过lazy属性设置是否延迟加载。

延迟加载的解释是动态代理机制,在设置延迟加载后,hibernate返回给咱们的对象实际上是一个代理对象,并非真正的对象,该对象没有真实对象的数据,只有在真正用到对象时(调用get方法时)时,才会触发hibernate去数据库查找对象的数据,并且返回的数据不会存储在代理对象中,是调试窗口查看不到的值。

7. Hibernate类之间的关系

配置many-to-one,one-to-many,many-to-many来实现类之间的关系

 

三.SQL优化经验

1.exists代替innot exists代替not inin是全表扫描

2.in代替多个or;用union代替or适用于索引列)

3.避免在索引列上进行计算,将会全表扫描;在索引列上使用is nullis not null

4.SQL语句大写,由于Oracle是将其转化成大写再执行的

5.union all效率高,可是会有重复数据;

6. 先用where过滤再group by比用group byhaving效率高

数据库查询优化

1. whereorder by后的列添加索引;2.尽可能避免在where中用null值判断,这样索引会失效对全表扫描,可添加默认值再过滤。同理where中用<>或!=,函数操做(索引失效)

 

四.分布式集群

相关文章
相关标签/搜索