- 浏览: 60540 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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)
最新评论
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 333集和类:https://www.cnblogs.com/lee ... -
equals()和hashCode()区别与重写
2018-03-05 14:25 371https://www.cnblogs.com/jesonja ... -
单例类,线程安全懒加载。23种设计模式总结
2018-01-17 15:50 709单例模式的七种写法: http://cantellow.ite ... -
基础java
2018-01-17 10:50 4011.// 负数以其正值的补码形式表达(补码=反码加1) // ... -
海量数据排序(电商应用)
2018-01-16 16:53 424问题: 海量排序数据:4亿数据放哪里呢 不放数据库,不放集合类 ... -
sleep() 和 wait() /String,StringBuffer 和 StringBuilder有什么区别
2017-12-25 18:04 478http://blog.csdn.net/shineflowe ... -
equals和==的区别,final和finally,Object中的常见的方法
2017-12-25 17:26 406equals和==的区别 equals用来比较的是两个对象的内 ... -
非阻塞IO和异步IO的区别
2017-12-24 21:13 881https://www.cnblogs.com/euphie/ ... -
HashMap与ConcurrentHashMap 的数据结构
2017-12-24 21:01 462HashMap: 数组与链表,每个数据对应一个链表 插入时进行 ... -
总结20170816
2017-08-15 15:41 341总体分为两类,注重基 ... -
java8语法
2016-12-04 14:12 392new String(a,b,c) => a是字符串, ...
相关推荐
四川省中小学公开招聘教师教育公共基础笔试和复习大纲涵盖了教育学、教育心理学和教育法学等多个方面的内容,旨在为参加中小学体育教师招聘考试的考生提供复习指导。以下是大纲中的关键知识点: **教育学基础** 1. ...
计算机网络考试复习大纲计算机网络考试复习大纲计算机网络考试复习大纲
《四川省省属事业单位公开招聘工作人员〈综合知识〉笔试复习大纲》.docx
### 网络规划复习大纲知识点详解 #### 一、基本概念 - **VLAN (Virtual Bridged Local Area Network)**:虚拟局域网,是一种逻辑上的分组方式,它允许在一个物理网络中创建多个逻辑子网。VLAN的划分不受物理位置...
全国泵站运行工知识技能要求竞赛的复习大纲涵盖了电气、机械和安全三个主要部分,旨在提升泵站运行人员的专业能力和安全意识。以下是这些知识点的详细解释: **电气部分:** 1. **基本概念**:包括直流电路、欧姆...
《数字电子技术基础 复习题与复习大纲》是一份重要的学习资料,旨在帮助学生深入理解和掌握数字电子技术的基础知识。这份资料包含了四个Word文档,每个文档都详细地涵盖了不同的主题,总计打印出来有三十多页,堪称...
JavaScript 基础复习大纲 DAY1 一、JavaScript 简介 JavaScript 是一种基于对象(Object)和事件驱动(Event Driven)、并具有安全性的脚本语言。它主要用途改进网页设计、验证表单、检测浏览器、创建 cookies,...
【Web设计技术 复习大纲】 Web设计涵盖了多种技术和概念,包括HTML、CSS、JavaScript以及服务器端编程等。这份复习大纲旨在梳理Web设计的核心知识,帮助学习者巩固基础,掌握关键概念。 ### 第一部分:基础知识 1...
**hibernate+spring复习大纲** 在Java Web开发领域,Hibernate和Spring是两个至关重要的框架。Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作,而Spring则是一个全面的企业级应用框架,提供了依赖...
【中考英语复习大纲】 在准备中考英语的过程中,冠词和代词是不可或缺的重要知识点,它们在句子中起到关键的修饰和指示作用。 首先,我们来深入理解冠词的用法。冠词分为不定冠词(a/an)和定冠词(the)。中考中...
java考试复习大纲Word版
【自动控制复习大纲】 自动控制领域涉及众多概念和技术,复习大纲主要涵盖了以下几个核心知识点: 1. **反馈控制**:反馈控制是一种控制策略,通过比较系统的输出量与期望值(即设定值或参考输入)的差值来调整...
"软件测试复习大纲" 软件测试的发展过程可以分为三个阶段:初级阶段(1957~1971)、发展阶段(1972~1982)和成熟阶段(1983 到现在)。在成熟阶段,国际标准 Std 829-1983 正式发布,软件测试逐渐形成一门独立的...
C++面向对象程序设计复习大纲 本文档为C++面向对象程序设计的复习大纲,涵盖了面向对象编程的基本概念、标准名字空间、Const的使用、内联函数、函数重载、函数模板等多个方面的知识点。 一、面向对象编程的基本...
编译技术复习大纲
【电子贸易复习大纲】 电子贸易,也称为电子商务(E-commerce),是现代商业活动中利用互联网技术和信息网络进行的商品和服务交易。对外经济贸易大学远程教育学院的《电子贸易》课程涵盖了电子贸易的基本概念、运行...