redis
数据结构:String hash list set sorted set
redis两种优化策略:
rdb--保存某一时间点的数据集,适用于备份,灾难恢复
aof--即使宕机也不会丢失数据
HashMap HashTable ConCurrentHashMap
HashMap是线程不安全的,
HashTable是安全的,使用synchronized
HashMap允许key vaule为空
HashMap效率高
ConCurrentHashMap线程安全,引入分割,对于一部分上锁
提高了多线程性能
Java数据存储方式:数组,链表
数组的特点是连续空间,增删元素的时候有较大幅度移动,查询快,增删慢
链表空间不连续,增删只需要修改指针,查询速度慢,增删快
HashMap底层实现:数组+链表
http://blog.csdn.net/seu_calvin/article/details/52653711
一个长度为16的数组中,每个元素存储的是一个链表的头结点
HashMap的哈希算法实际操作通过位运算
键值对存放的数据结构是定义的一个Entity内部类,属性有key,value,
指向下一个Entity的next
通过hashcode()和equals保证键的一致性
类修饰符默认为default 拒绝一切保外访问
protected允许子类访问 即使是包外
抽象方法不能有方法体
基本类型只能用==,引用类型都可以,比较地址内容
String类型equals比较内容,==比较内存地址和内容
java鲁棒性 即健壮性
能检查在编译和运行时的错误,自己操作内存减少内存出错
实现了真数组,避免覆盖数据
webservice:
属于web服务,跨平台,跨语言的服务
采用xml参数格式化数据,通信协议是soap
成员方法称为实例方法
静态方法称为类方法
静态方法中没有this
JVM
栈式存储:
1.基本类型的变量和对象,超过作用域后自动释放内存空间
2.存取速度快,栈数据可以共享
3.存储的数据大小和生存期是确定的,缺少灵活性
堆式存储:
1.存new的对象和数组,由java虚拟机自动回收
2.动态分配内存,不必事先告诉编译器生存期
3.缺点是存取速度慢
system.gc() 只是提醒虚拟机程序员希望进行一次回收,不能保证一定进行
finalize()在Object中定义,只有当垃圾回收器清理垃圾是才调用
JVM相关命令
jps 输出jvm中线程运行状态
jps -m -l
jstack
显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
jmap
JVM布局
如何解决高并发
Spring事务
spring支持编程事务管理和声明事务管理
声明式事务建立在aop之上,对方法进行前后拦截,在目标方法之前加入事务,方法执行后根据情况提交或回滚。最小颗粒度作用在方法级别
四个特性(ACID):
原子性:确保动作全部完成,或全部起作用
一致性:业务处于一致状态,不能部分完成或部分失败
隔离性:每个事务与其他事务隔离,防止破坏数据
持久性:事务结果写到持久化存储容器中
传播行为:
required:方法必须运行在事务中,如果当前事务不存在会新建一个
supports:如果事务存在则在事务中运行
mandatory:必须在事务中运行,如果不存在抛出异常
required_new: 必须运行在自己的事务中,存在该事务,方法运行期间,事务被挂起
not_supports:方法不应该运行在事务中
never: 如果正有一个事务运行,抛异常
nested:如果已经存在一个事务,该方法会在嵌套事务中运行,嵌套事务可独立与当前事务
提交或回滚,不存在则和required一样
隔离级别:
脏读:事务读取另一个事务尚未提交的数据,若回滚则数据无效
不可重复读:一个事务查询两次或两次以上结果不一致,通常因为另一个事务在查询期间
数据更新
幻读:一个事务读取了几行数据,另一个事务插入几行数据
不可重复读和幻读区别:不可重复读重点是修改
幻读是新增或删除
default:使用数据库默认隔离级别 orcle默认是read commited
read_uncommitted:允许读尚未提交,可能出现脏读,幻读,不可重复读
read_committed:允许读提交数据,可阻止脏读,幻读和不可重复读仍有可能发生
repeatable_read:同一字段多次读取一致,可以阻止脏读,不可重复读,幻读可能发生
serialzable:最高隔离,完全阻止,速度慢,锁定事务相关的数据库
事务失效原因:
1.使用mysql且引擎为myisam,事务不会起作用(innodb支持,速度慢)
mysql默认myisam基于isam(有索引的顺序访问方法)不是事务安全的,
不支持外键,用于大量
innodb事务安全,大量insert或update使用
2.
context:component-scan重复扫描
3.
@Transactional注解开启加载放到listener中,在DispatcherServlet中
不起作用
4.注解加载放到public方法上
分布式session一致性如何保证
同一个ip的请求落在同一个web-server上
四种回话跟踪技术
url重写,隐藏表单域,session,cookie
object有哪些方法
toString 返回一个string对象
hashcode 获取hash值
wait()
sleep()是Thread类的静态方法,对象锁没有释放,睡眠时间结束后,进入就绪状态
wait()释放对象锁,可以通过notify唤醒线程
构造方法
1.构造方法可以在创建对象时为成员赋值
2.可以重载
3.没有返回值
4.构造方法不能被对象调用,只能创建对象
5.不能用abstract final native static synchronized修饰
6.子类构造方法调用时,先默认调用父类无参构造方法,如果想
调用有参的 需要用super
7.
java反射机制使用java.lang.Class或java.lang.reflect.Constructor的 newInstance()方法调用构造方法
执行优先顺序:
静态块>main()>构造块>构造方法
静态块只执行一次
Java程序种类
applet 内嵌于web文件
application 可独立运行
servlet 服务器端的
CGI 通用网关接口
能与浏览器交互,还可以通过数据库api,从数据库中获取数据
Hibernate
hibernate优化: 使用单向一对多
配置对象缓存,不使用集合缓存
继承类不使用显示多态
get()采用即时加载 load()延迟记载
get()方法会直接向数据库发送查询语句,load()会返回一个代理(此代理中只有
一个id属性),只有等真正使用该对象属性时,才会发出sql语句
如果数据库没有记录,get()返回null,load返回异常
super关键字 :
子类对象内部指代其父类对象的引用
![](https://i-blog.csdnimg.cn/blog_migrate/1b4576b0fc0dacac2036a4608c664e4a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/750710af0319960ee6ef20388d794f57.png)
![](https://i-blog.csdnimg.cn/blog_migrate/27431e1e4f603b444e0df81dc5f3eb9c.png)