一些次级知识点汇总 5.31
HTTP与TCP的区别和联系
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给 客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以 保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。
TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上来的。
redis rbd与aof区别
如果服务器在非备份时间跨度内发生了故障,无法做到对当前状态的实时保存,导致数据丢失。而且每次保存 RDB文件时, Redis都需要 fork()出一个子进程,由子进程来执行具体的持久化工作,对资源消耗较大。——最大缺点
每次接受到的写命令通过 write函数追加到文件中 默认间隔是每秒同步一次
每秒 fsync 的性能依然非常高——折中方案,数据安全与访问性能折中,
redis与memcached区别
1)、存储方式
Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。
Redis有部份存在硬盘上,这样能保证数据的持久性。
2)、数据支持类型
Memcache对数据类型支持相对简单。
Redis有复杂的数据类型。
3)、redis单核,memcheced多核
消息队列使用场景
https://blog.csdn.net/cws1214/article/details/52922267
异步、模块解耦、流量削锋、日志(同模块解耦)
ClassLoader、类加载器、类加载进程与双亲委派模型
从文档中对ClassLoader类的介绍可以总结出这个类的作用就是根据一个指定的类的全限定名,找到对应的Class字节码文件,然后加载它转化成一个java.lang.Class类的一个实例.
启动类加载器(Bootstrap ClassLoader):
核心库,此类加载器并不继承于java.lang.ClassLoader,不能被java程序直接调用,代码是使用C++编写的.是虚拟机自身的一部分.
扩展类加载器(Extendsion ClassLoader):
用来加载java的扩展库
应用程序类加载器(Application ClassLoader):
一般我们编写的java类都是由这个类加载器加载,这个类加载器是CLassLoader中的getSystemClassLoader()方法的返回值,所以也称为系统类加载器.一般情况下这就是系统默认的类加载器.
如果一个类加载器收到了类加载的请求,它不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,这样层层递进,最终所有的加载请求都被传到最顶层的启动类加载器中,只有当父类加载器无法完成这个加载请求(它的搜索范围内没有找到所需的类)时,才会交给子类加载器去尝试加载.
出现不止一个Object类,应用程序就会全乱了.
Class.forname()与ClassLoader.loadClass():
jstack简单使用,定位死循环、线程阻塞、死锁等问题
tomcat为何没有关闭、死循环、wait、死锁
hibernate 本地sql
https://www.cnblogs.com/panjun-Donet/archive/2010/08/05/1792943.html createSQLQuery
Hibernate 的 10 个常见面试问题及答案
http://www.importnew.com/6004.html
nibernate 中 save()、saveOrUpdate()和persist()的区别
Hibernate中get和load方法的区别
hql
Object类的方法
clone、 hashcode、 equals 、toString、getClass、wait、notify、notifyAll、finalize
常见的几种单例模式
懒汉、懒汉线程安全、懒汉双重检查
饿汉、饿汉static代码块、饿汉静态内部类
rongyun 的sdk单例模式
private static ConcurrentHashMap<String, RongCloud> rongCloud = new ConcurrentHashMap<String,RongCloud>();
- public static RongCloud getInstance(String appKey, String appSecret) {
- if (null == rongCloud.get(appKey)) {
- rongCloud.putIfAbsent(appKey, new RongCloud(appKey, appSecret));
- }
- return rongCloud.get(appKey);
- }
putIfAbsent见:
http://blog.csdn.net/silyvin/article/details/79094642
看看源码怎么处理,Java中Hashtable,Hashmap,ConcurrentHashMap,Key Value为null时
TCP协议中的三次握手和四次挥手(图解)
http://blog.csdn.net/whuslei/article/details/6667471/

mysql什么时候锁表
insert时全表锁,因为要生成主键字段、索引等等,update是行级锁。 http://www.iteye.com/problems/119113
-
myisam,锁表
-
innodb, 成功使用索引时锁行,否则锁表
https://segmentfault.com/q/1010000010389243
![]()
-
要修改数据,首先要找到数据,而如果没有索引,就会直接锁住表的数据,就会锁住其他的会话。
- 所以,如果你看innodb的最佳实践里,一定会要你创建主键索引,如果你没有主键,可以用一个代理键,也就是自增列实现。
https://bbs.csdn.net/topics/392028926
http://blog.sina.com.cn/s/blog_79c0eb870102wmyn.html
InnoDB行锁是通过给索引上的索引项加锁来实现的
nibernate 一级缓存与二级缓存
Hibernate一级缓存是Session缓存,二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。
Forward和Redirect的区别
上图所示的间接转发请求的过程如下:
- 浏览器向Servlet1发出访问请求;
- Servlet1调用sendRedirect()方法,将浏览器重定向到Servlet2;
- 浏览器向servlet2发出请求;
- 最终由Servlet2做出响应。

- 浏览器向Servlet1发出访问请求;
- Servlet1调用forward()方法,在服务器端将请求转发给Servlet2;
- 最终由Servlet2做出响应。
wait 和 oject.wait 区别
synchronized(obj){
obj.wait()和
wait()不同,前者释放锁,后者虽然也是释放锁,但却不是释放的obj对象的锁,而是this对象的锁,this对象!=obj对象,不在同步块中,哪来的锁呢,所以会报错
}
hashCode和identityHashCode的区别
1、hashCode() 是根据 内容 来产生hash值的
2、System.identityHashCode() 是根据 内存地址 来产生hash值的。我们知道,new出来的String对象的内存地址是不一样的,所以hash值也不一样
再补充一下:
String string1 = "w"+"xg";
String string2 = "wxg";
这两个应该也是同一个内存地址

浙公网安备 33010602011771号