- 浏览: 56441 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (117)
- RPC相关 (4)
- mvc_controller (3)
- mvc_model (3)
- maven (4)
- mvc_view (5)
- IO (2)
- 业务相关 (2)
- MQ (7)
- 搜索引擎 (3)
- zookeeper (2)
- 工具相关 (4)
- 编辑错误 (1)
- tomcat (1)
- 单元测试 (1)
- 负载均衡 (1)
- ubuntu (1)
- nginx (1)
- dubbo (2)
- 网络站点分发 (1)
- 电商-支付相关 (10)
- 电商订单业务相关 (3)
- Core java1 (3)
- Core Java (12)
- 多线程高并发(并发包/线程/锁) (10)
- 数据库+缓存 (17)
- springcloud (2)
- jvm (5)
- 日志相关 (1)
- 算法 (3)
- spring (2)
- 分布式一致性算法 (1)
最新评论
复习大纲
- 博客分类:
- Core Java
https://maimai.cn/article/detail?fid=1082458242&efid=R-SdQ-TDbJmZWEdNokgwSw&from=singlemessage
1.Queue ThreadPoolExecutor的三种队列SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue
https://www.cnblogs.com/feiyun126/p/7686302.html
每个队列底层实现的数据结构
2.Synchronized 类锁,对象锁
3.23种设计模式
https://www.cnblogs.com/geek6/p/3951677.html
https://blog.csdn.net/zhangerqing/article/details/8194653
4.集合
ArrayList http://www.cnblogs.com/skywang12345/p/3308556.html
LinkedList http://www.cnblogs.com/skywang12345/p/3308807.html
ArrayList的扩容原理,每次增加>>2一半,LinkedList的get原理,数据结构,遍历时使用哪种效率高。
Vector https://www.cnblogs.com/skywang12345/p/3308833.html Vector中的操作是线程安全的
Vector的扩容原理,增长系数,每次增加增长系数值,否则增加一倍。
5.海子多线程博客 https://www.cnblogs.com/dolphin0520/‘
6.Object方法 clone潜复制
clone,getClass,toString,finalize,equals,hashCode,wait,notify,notifyAll
7.单例模式在spring应用
每个类确实只产生一个bean实例,多个线程异步去可同时操作这个bean,正常会对其controller的成员变量产生线程不安全。
以上是正常思路,再说说除外的场景,https://wallimn.iteye.com/blog/2435341
大神详解 jdk动态代理和ThreadLocal应用使变量线程安全https://my.oschina.net/u/270991/blog/1785896?from=timeline
此问题可以延伸到Spring的实例化和自动装配工作https://blog.csdn.net/mack415858775/article/details/47721909
8.jdk动态代理
源码分析:http://www.cnblogs.com/zuidongfeng/p/8735241.html
传入代理类的类和接口和InvocationHandler对象(代理类关联对象),把接口转换为字节码文件
(代理类接口数量限制,是否存在缓存中,否则,使用ProxyClassFactory创建代理类),
ProxyClassFactory创建代理类,对文件进行校验(类型,重复),
真正生成新代理类的字节码文件(JDK动态代理就是通过程序来动态生成Class文件的。),
(第一步为代理类生成一个带参构造器,第二步, 生成静态域hashCode方法equals方法toString方法,
第三步, 生成代理方法,第四步, 生成静态初始化方法https://www.cnblogs.com/liuyun1995/p/8144706.html)
使用类加载器将代理类的字节码文件加载到JVM中。
执行时根据动态代理InvocationHandler参数回调到具体invoke方法,通过invoke执行代理类中的目标方法
Interceptor实现了InvocationHandler
invoke(代理对象,代理对象接口方法对象,参数数组),在invoke中执行代理类,前后加入自己方法。
9.Java原子类实现原理分析
从内存取出当前值a,定义新值(当前值a+1),把当前值再和内存值比较如果相等说明安全,原子化地更新去设定新值。
Java CAS ABA漏洞问题发生的场景分析:https://www.cnblogs.com/senlinyang/p/7875381.html
线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场已经和最初不同了,尽管CAS成功,但可能存在潜藏的问题。比如:
现有一个用单向链表实现的堆栈,栈顶为A,这时线程T1已经知道A.next为B,然后希望用CAS将栈顶替换为B:head.compareAndSet(A,B);在T1执行上面这条指令之前,线程T2介入,将A、B出栈,再pushD、C、A。而对象B此时处于游离状态:
此时轮到线程T1执行CAS操作,检测发现栈顶仍为A,所以CAS成功,栈顶变为B,但实际上B.next为null,其中堆栈中只有B一个元素,C和D组成的链表不再存在于堆栈中,平白无故就把C、D丢掉了。
避免ABA可使用AtomicStampedReference
10.线上调查溢出,打印堆栈信息
jmap -heap 进程ID 打印堆空间占用
jmap -histo 进程ID 所有对象占用空间
jstat -gc 1024毫秒 50次 此机器堆栈占用信息
jstack是java虚拟机自带的一种堆栈跟踪工具
11.javaagent
javaagent应该更暴力些,跟这些修饰符没关系,直接修改字节码文件
javaagent就是更优雅一些,不用在代码中添加注解
12 @Scheduled quartz
一个东西,缺点是不只是高可用HA
13 lock和synchronized区别,reentrantlock和ReentrantReadWriteLock原理,每个方法的实现。
14 AbstractQueuedSynchronizer AQS原理
aqs一个抢占资源同步器框架,里面有队列,对队列等待,唤醒机制。一个线程获取资源,如果资源没有占用,返回成功获取资源,如果资源被占用,放到有序队列末尾,监听前一个节点,等待到前一节点释放状态变更(要求状态小于0,大于0是取消了抢占任务),此线程唤醒调整头节点再尝试获取资源。
http://www.cnblogs.com/waterystone/p/4920797.html
15 意向锁
行锁->表锁,表锁不需要再每一行去检查有没有行锁,直接有没有之前加过的意向锁,有了阻塞等待,没有加表锁。注意在第一步加行锁时,
是数据库自动完成申请一向锁,意向锁不需要我们自行添加
https://572327713.iteye.com/admin/blogs/2438247
16 cas原理:
cas三个参数 内存值V,旧的预期值A(当前方法最一开始取到的内存值),新值B,使用native方法当V与A比较,
如果相等,修改V变为B,如果不相等递归重复之前操作。
对ABA的问题隐患,场景分析
V和A比较时虽然是相等的,但V可能由其他线程操作过V变为N又变会V,导致不安全
场景是对于栈的指向问题会发生空指向,比如V的指向从空变为指向C,但是A不知道,又把V指向回了空。
https://www.cnblogs.com/senlinyang/p/7875381.html
17线程池
https://572327713.iteye.com/admin/blogs/2427908
18 Exception ,RunTimeException 异常, Error错误区别:
Error程序启动和运行时一般不会报错,会出现在服务器上,比如内存溢出。
RunTimeException 继承Exception,启动时编译器不会感知在运行时会报错,比如空指针,数组过界,运算错误。
Exception的非运行异常还有IO异常,线程interrupter异常,反射类无法找到,需要在代码里加try,catch才能编译通过。
19.浏览器缓存机制
https://www.cnblogs.com/shixiaomiao1122/p/7591556.html
20.volatil内存模型,为什么不能保证原子性,是如何保证视图性运行原理是?
https://www.jianshu.com/p/33bf19c072bd
21.深入理解java反射(运行时校验读取class文件信息的字段,方法,构造方法等)
https://572327713.iteye.com/blog/2440086
22.深入理解类加载机制和生命周期
https://572327713.iteye.com/blog/2440086
23.深入理解类加载器
https://572327713.iteye.com/blog/2440086
24.双亲委派模型
https://572327713.iteye.com/blog/2440086
25.深入理解spring boot加载工作原理
https://blog.csdn.net/htf2620032/article/details/79298661
https://www.cnblogs.com/shamo89/p/8184960.html
SpringBoot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入到Spring容器。
26.多路复用IO,epoll
单路阻塞:A一直等待B处理,此线程虽然挂起不占资源,但是一直傻傻的等。
多路复用:A还是B交给多路复用模型去处理,多路复用处理轮询去处理(select),或者按照节点信息(epoll)直接指针到位置去处理。
https://www.cnblogs.com/blfshiye/p/5411435.html
27.阻塞,同步
阻塞:在调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会被唤醒执行后续的操作,当前线程挂起(不占资源),但一直等待。
同步:必须一件事一件事的做,等前一件做完了,才能做下一件事,占用资源,没有通知。
非阻塞:在结果没有返回之前,该调用不会阻塞住当前线程。此线程先做其他事情,然后再不断扫结果,做到不阻塞。
异步:调用者在没有得到结果之前,可以继续执行后续操作,调用者等待结果通知就好。
https://baijiahao.baidu.com/s?id=1612594086537323804&wfr=spider&for=pc
28 AQS
aqs一个抢占资源同步器框架,里面有队列,对队列等待,唤醒机制。一个线程获取资源,如果资源被占用,放到有序队列末尾,监听前一个节点,当前节点释放状态变更,此线程唤醒调整头节点再尝试获取资源。
1,非公平和公平锁
抢占资源不成功分别什么处理流程
2,非公平锁自旋插入队尾,什么场景会不入队
3,说说可重入锁的实现
4,其中还有个状态大于0,等于 0,小于0分别含义,队列会状态如何处理
https://www.cnblogs.com/waterystone/p/4920797.html
29 rabbit
见分享文档
1.Queue ThreadPoolExecutor的三种队列SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue
https://www.cnblogs.com/feiyun126/p/7686302.html
每个队列底层实现的数据结构
2.Synchronized 类锁,对象锁
3.23种设计模式
https://www.cnblogs.com/geek6/p/3951677.html
https://blog.csdn.net/zhangerqing/article/details/8194653
4.集合
ArrayList http://www.cnblogs.com/skywang12345/p/3308556.html
LinkedList http://www.cnblogs.com/skywang12345/p/3308807.html
ArrayList的扩容原理,每次增加>>2一半,LinkedList的get原理,数据结构,遍历时使用哪种效率高。
Vector https://www.cnblogs.com/skywang12345/p/3308833.html Vector中的操作是线程安全的
Vector的扩容原理,增长系数,每次增加增长系数值,否则增加一倍。
5.海子多线程博客 https://www.cnblogs.com/dolphin0520/‘
6.Object方法 clone潜复制
clone,getClass,toString,finalize,equals,hashCode,wait,notify,notifyAll
7.单例模式在spring应用
每个类确实只产生一个bean实例,多个线程异步去可同时操作这个bean,正常会对其controller的成员变量产生线程不安全。
以上是正常思路,再说说除外的场景,https://wallimn.iteye.com/blog/2435341
大神详解 jdk动态代理和ThreadLocal应用使变量线程安全https://my.oschina.net/u/270991/blog/1785896?from=timeline
此问题可以延伸到Spring的实例化和自动装配工作https://blog.csdn.net/mack415858775/article/details/47721909
8.jdk动态代理
源码分析:http://www.cnblogs.com/zuidongfeng/p/8735241.html
传入代理类的类和接口和InvocationHandler对象(代理类关联对象),把接口转换为字节码文件
(代理类接口数量限制,是否存在缓存中,否则,使用ProxyClassFactory创建代理类),
ProxyClassFactory创建代理类,对文件进行校验(类型,重复),
真正生成新代理类的字节码文件(JDK动态代理就是通过程序来动态生成Class文件的。),
(第一步为代理类生成一个带参构造器,第二步, 生成静态域hashCode方法equals方法toString方法,
第三步, 生成代理方法,第四步, 生成静态初始化方法https://www.cnblogs.com/liuyun1995/p/8144706.html)
使用类加载器将代理类的字节码文件加载到JVM中。
执行时根据动态代理InvocationHandler参数回调到具体invoke方法,通过invoke执行代理类中的目标方法
Interceptor实现了InvocationHandler
invoke(代理对象,代理对象接口方法对象,参数数组),在invoke中执行代理类,前后加入自己方法。
9.Java原子类实现原理分析
从内存取出当前值a,定义新值(当前值a+1),把当前值再和内存值比较如果相等说明安全,原子化地更新去设定新值。
Java CAS ABA漏洞问题发生的场景分析:https://www.cnblogs.com/senlinyang/p/7875381.html
线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场已经和最初不同了,尽管CAS成功,但可能存在潜藏的问题。比如:
现有一个用单向链表实现的堆栈,栈顶为A,这时线程T1已经知道A.next为B,然后希望用CAS将栈顶替换为B:head.compareAndSet(A,B);在T1执行上面这条指令之前,线程T2介入,将A、B出栈,再pushD、C、A。而对象B此时处于游离状态:
此时轮到线程T1执行CAS操作,检测发现栈顶仍为A,所以CAS成功,栈顶变为B,但实际上B.next为null,其中堆栈中只有B一个元素,C和D组成的链表不再存在于堆栈中,平白无故就把C、D丢掉了。
避免ABA可使用AtomicStampedReference
10.线上调查溢出,打印堆栈信息
jmap -heap 进程ID 打印堆空间占用
jmap -histo 进程ID 所有对象占用空间
jstat -gc 1024毫秒 50次 此机器堆栈占用信息
jstack是java虚拟机自带的一种堆栈跟踪工具
11.javaagent
javaagent应该更暴力些,跟这些修饰符没关系,直接修改字节码文件
javaagent就是更优雅一些,不用在代码中添加注解
12 @Scheduled quartz
一个东西,缺点是不只是高可用HA
13 lock和synchronized区别,reentrantlock和ReentrantReadWriteLock原理,每个方法的实现。
14 AbstractQueuedSynchronizer AQS原理
aqs一个抢占资源同步器框架,里面有队列,对队列等待,唤醒机制。一个线程获取资源,如果资源没有占用,返回成功获取资源,如果资源被占用,放到有序队列末尾,监听前一个节点,等待到前一节点释放状态变更(要求状态小于0,大于0是取消了抢占任务),此线程唤醒调整头节点再尝试获取资源。
http://www.cnblogs.com/waterystone/p/4920797.html
15 意向锁
行锁->表锁,表锁不需要再每一行去检查有没有行锁,直接有没有之前加过的意向锁,有了阻塞等待,没有加表锁。注意在第一步加行锁时,
是数据库自动完成申请一向锁,意向锁不需要我们自行添加
https://572327713.iteye.com/admin/blogs/2438247
16 cas原理:
cas三个参数 内存值V,旧的预期值A(当前方法最一开始取到的内存值),新值B,使用native方法当V与A比较,
如果相等,修改V变为B,如果不相等递归重复之前操作。
对ABA的问题隐患,场景分析
V和A比较时虽然是相等的,但V可能由其他线程操作过V变为N又变会V,导致不安全
场景是对于栈的指向问题会发生空指向,比如V的指向从空变为指向C,但是A不知道,又把V指向回了空。
https://www.cnblogs.com/senlinyang/p/7875381.html
17线程池
https://572327713.iteye.com/admin/blogs/2427908
18 Exception ,RunTimeException 异常, Error错误区别:
Error程序启动和运行时一般不会报错,会出现在服务器上,比如内存溢出。
RunTimeException 继承Exception,启动时编译器不会感知在运行时会报错,比如空指针,数组过界,运算错误。
Exception的非运行异常还有IO异常,线程interrupter异常,反射类无法找到,需要在代码里加try,catch才能编译通过。
19.浏览器缓存机制
https://www.cnblogs.com/shixiaomiao1122/p/7591556.html
20.volatil内存模型,为什么不能保证原子性,是如何保证视图性运行原理是?
https://www.jianshu.com/p/33bf19c072bd
21.深入理解java反射(运行时校验读取class文件信息的字段,方法,构造方法等)
https://572327713.iteye.com/blog/2440086
22.深入理解类加载机制和生命周期
https://572327713.iteye.com/blog/2440086
23.深入理解类加载器
https://572327713.iteye.com/blog/2440086
24.双亲委派模型
https://572327713.iteye.com/blog/2440086
25.深入理解spring boot加载工作原理
https://blog.csdn.net/htf2620032/article/details/79298661
https://www.cnblogs.com/shamo89/p/8184960.html
SpringBoot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入到Spring容器。
26.多路复用IO,epoll
单路阻塞:A一直等待B处理,此线程虽然挂起不占资源,但是一直傻傻的等。
多路复用:A还是B交给多路复用模型去处理,多路复用处理轮询去处理(select),或者按照节点信息(epoll)直接指针到位置去处理。
https://www.cnblogs.com/blfshiye/p/5411435.html
27.阻塞,同步
阻塞:在调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会被唤醒执行后续的操作,当前线程挂起(不占资源),但一直等待。
同步:必须一件事一件事的做,等前一件做完了,才能做下一件事,占用资源,没有通知。
非阻塞:在结果没有返回之前,该调用不会阻塞住当前线程。此线程先做其他事情,然后再不断扫结果,做到不阻塞。
异步:调用者在没有得到结果之前,可以继续执行后续操作,调用者等待结果通知就好。
https://baijiahao.baidu.com/s?id=1612594086537323804&wfr=spider&for=pc
28 AQS
aqs一个抢占资源同步器框架,里面有队列,对队列等待,唤醒机制。一个线程获取资源,如果资源被占用,放到有序队列末尾,监听前一个节点,当前节点释放状态变更,此线程唤醒调整头节点再尝试获取资源。
1,非公平和公平锁
抢占资源不成功分别什么处理流程
2,非公平锁自旋插入队尾,什么场景会不入队
3,说说可重入锁的实现
4,其中还有个状态大于0,等于 0,小于0分别含义,队列会状态如何处理
https://www.cnblogs.com/waterystone/p/4920797.html
29 rabbit
见分享文档
发表评论
-
java集合类
2018-03-05 15:42 293集和类:https://www.cnblogs.com/lee ... -
equals()和hashCode()区别与重写
2018-03-05 14:25 327https://www.cnblogs.com/jesonja ... -
单例类,线程安全懒加载。23种设计模式总结
2018-01-17 15:50 673单例模式的七种写法: http://cantellow.ite ... -
基础java
2018-01-17 10:50 3701.// 负数以其正值的补码形式表达(补码=反码加1) // ... -
海量数据排序(电商应用)
2018-01-16 16:53 391问题: 海量排序数据:4亿数据放哪里呢 不放数据库,不放集合类 ... -
sleep() 和 wait() /String,StringBuffer 和 StringBuilder有什么区别
2017-12-25 18:04 444http://blog.csdn.net/shineflowe ... -
equals和==的区别,final和finally,Object中的常见的方法
2017-12-25 17:26 373equals和==的区别 equals用来比较的是两个对象的内 ... -
非阻塞IO和异步IO的区别
2017-12-24 21:13 844https://www.cnblogs.com/euphie/ ... -
HashMap与ConcurrentHashMap 的数据结构
2017-12-24 21:01 423HashMap: 数组与链表,每个数据对应一个链表 插入时进行 ... -
总结20170816
2017-08-15 15:41 317总体分为两类,注重基 ... -
java8语法
2016-12-04 14:12 361new String(a,b,c) => a是字符串, ...
相关推荐
PMP复习大纲PMP复习大纲PMP复习大纲PMP复习大纲
数据库原理复习大纲数据库原理复习大纲数据库原理复习大纲
计算机网络考试复习大纲计算机网络考试复习大纲计算机网络考试复习大纲
《四川省省属事业单位公开招聘工作人员〈综合知识〉笔试复习大纲》.docx
2008 SQL Server 基础复习大纲
计算机网络复习大纲,就是计算机网络期末考试的复习大纲和考试范围.
java考试复习大纲Word版
全国泵站运行工知识技能要求竞赛复习大纲整理.pdf
JavaScript基础复习大纲DAY1,很好,很强大,还有下半部分
中考英语复习大纲.docx
编译技术复习大纲
山东大学软件学院2021软件测试复习大纲.docx
hibernate+spring的复习大纲,重点中的重点,包括选择题,填空题及常见题
C语言 知识点复习大纲,理清思路,好好学习c语言
康华光的第五版 模电 复习大纲 PDF格式 很好很实用
一些软测技术和方法的复习大纲,供给关于软测相关学习的同学们。
微波技术与天线复习大纲.doc
自动控制复习大纲万里整理.pdf
计算机操作系统期末复习大纲总结了操作系统中的知识要点
网络安全课件PPT+复习大纲 上海交大网络教育学院主讲马进