自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 java并发线程笔记目录

Java线程的实现一些概念linux系统的pthread_create函数初步猜想通过猜想模拟实现一次java的线程

2019-09-16 23:03:05 407 3

原创 mybatis多参数报错误问题分析及解决方法(jdk问题)

问题分析在mybatis以前的版本在mapper类的方法中传递多参数时如果不用@Param传递参数名就会报错如果从源码上分析我们可以观察到mybaits的底层是通过jdk反射获取参数名,然后通过参数名将#{}和${}中同名的参数替换成真正的数值的,当然#{}和${}的底层实现也是不一样的,前者是预编译,后者是单纯的在发送sql之前替换数值的。之所以会出现这个问题是因为jdk8以前反射得到...

2019-09-30 21:29:00 842

原创 spring的循环依赖分析

假设有如下两个bean对象互相依赖@Componentpublic class TestA { @Autowired private TestB testB;}@Componentpublic class TestB { @Autowired private TestA testA;}先解决循环依赖必须知道当一个bean初始化创建出来后到底做了什么,至于bean是如何初始...

2019-09-28 12:01:54 353

原创 2019.8.1笔记——java并发线程相关

JMMmesi硬件保证了缓存一致性编译优化才导致了java线程间所谓的“不可见”编译优化是java1.5之后happens-before原则happens-before原则如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。两个操作之间存在happens-before关系,并不意味着一定要按照ha...

2019-09-26 15:56:26 90

原创 2019.7.30笔记——java并发线程相关

读写锁读读并行读写串行写写串行ReentrantReadWriteLockreadLock方法 读锁writeLock方法 写锁都是同一把锁锁不能升级(读锁到写锁)可以降级(写锁到读锁)升级可能造成死锁升级会在升级到写锁时等待其他持有锁的线程释放锁如果两个以上的线程升级的话,及会互相等待升级,造成死锁降级可以避免二次排队,提高效率读锁不能加条件(Conditaion)...

2019-09-25 23:12:43 127

原创 2019.7.28笔记——java并发线程相关

ReentrantLock源码分析在没有竞争的情况下会公平锁效率会更高些在有竞争的情况下公平锁会比非公平锁效率高一点(可以忽略不计),只是多了个CAS判断unpark执行后,从park的方法处继续执行...

2019-09-25 23:12:26 153

原创 2019.7.25笔记——java并发线程相关

reentrantLocksync是实现的具体类子类有公平锁和非公平锁aqs类似于一个队列队列里的元素Node首先虚拟一个队列头tryAcquire尝试加锁线程进入公平锁是进入队列,非公平锁是直接尝试拿到锁公平锁和非公平锁唯一的区别就是公平锁会有一个判断...

2019-09-25 23:12:08 135

原创 2019.7.23笔记——java并发线程相关

锁有几种sync语法方便、简单 经过优化后与lock性能相当 实现不了高级功能 非公平锁lock手动释放锁 能够实现高级功能了sync使用的频率远高于lock重偏向遇到sync关键字就执行monitorenter jvm提供了规范 虚拟机自己实现hotspot用moniter实现aqscountDownLatch让多个线程同时执行让某个线程等其他的线程执...

2019-09-24 18:50:24 120

原创 2019.7.21笔记——java并发线程相关

executor创建线程的接口executorserviceexecutor的服务callable有返回值,可以抛出异常executors操作executor的工具类newFixedThreadPool可以设置线程池大小,队列式的shutdown方法会关闭线程池,但线程池的线程还是会执行完,并回收线程shutdownNow方法会关闭线程并且直接停止线程newCachedTh...

2019-09-24 18:49:25 184

原创 2019.7.7笔记——java线程并发相关

interrupt方法interrupt是一种优雅结束线程的方法一个线程很长时间没有结束一般有两种原因:1.线程陷入了一个死循环(如while(true))2.线程被阻塞(如Thread.sleep())如果想结束一个线程,jvm的想法并不是让你直接stop这个线程,而是想让你抛出异常或者将while循环的条件置为false。 @Override public void run() ...

2019-09-23 16:50:38 115

原创 2019.7.11笔记——java线程并发相关

守护进程守护的线程报错会中断其他线程在静态方法上加synchronized锁的是类对象ThreadLocal——线程的本地变量每个线程一一对应这个对象和线程绑定了,线程封闭变量是线程私有的Vector 同步容器Queue 队列ConcurrentLinkedQueue 并发单向链表队列 线程安全的 无界的 可设置边界 add和pollConcurrentArray...

2019-09-23 16:50:13 170

原创 2019.7.18笔记——java并发线程相关

在下面这段代码,按照之前的原理,因为各个线程是交替执行的,而且也设置了偏向锁延时为0,所以除了第一个线程是偏向锁,后面的线程都是轻量锁。但是有些时候会发现后面两个线程的锁却是偏向锁那么这是不是重偏向呢,我们发现这三个线程打印的对象头mark word都是一样的,我们可以假设,造成这种现象是因为前一个线程已经死亡,后一个线程被分配的id和前一个一样,所以就可以直接用前一个的锁。这样看来并没有发...

2019-09-23 16:49:43 127

原创 spring选择bean初始化构造器的简单分析(源码层面)——存在问题

因为要通过源码分析,这里就要追踪到createBeanInstance方法带注释的源码如下,如果想要了解如何执行到这里的,请看下面的流程解析bean初始化(实例化)详解protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) { // ...

2019-09-23 16:48:06 1070

原创 spring的自动装配(NO模式)

spring的自动装配永远都是开启的,只是默认模式是no罢了spring的自动装配从来都不是在需要注入的地方加上注解,这一点可以从基于xml的方式注入来看出,只需要设置default-autowire属性就够了,默认是no模式下面是4种模式的官方解释如果是使用非xml方式来配置spring那么就无法设置这个自动装配的模式了,这样就默认是no模式,于是spring提供了注解的方式协助自...

2019-09-22 23:58:21 597

原创 mybatis的缓存(和spring整合)

mybatis如果已经和spring整合了,mybatis的一级缓存就会失效因为spring会自动关闭session所以一级缓存比较鸡肋通常会使用二级缓存在mapper上加@CacheNamespace如果查询和修改一个表中数据的方法不在一个mapper类中但是如果在修改前查询并且在修改后查询时会发现查询出来的数据没有被修改,但是实际上数据库中的数据已经被修改了但是如果查询和修改一...

2019-09-22 22:28:01 777

原创 日志与spring5新日志体系笔记(包换mybatis日志)

常见的日志如下log4jjuljclslf4jjul是jdk提供的jcl是通过其他日志实现打印日志的,如果存在log4j就会借助log4j打印日志,如果没有log4j就会借助jul打印日志jcl底层通过classForname的方法加载对应的日志对象jcl会把一些日志的对象的类全名存储在一个数组中,一个一个加载直到得到日志对象所以jcl本身是不提供日志打印的,而是通过第三方的日志...

2019-09-22 22:26:48 219

原创 ImportSelector使用——spring容器bean的注入

zzzz

2019-09-22 22:26:17 1125

原创 spring笔记⑥——模拟springIOC之模拟注解配置

zzzz

2019-09-22 22:25:56 123

原创 spring笔记⑤——模拟springIOC之模拟xml配置

自定义异常

2019-09-22 22:25:44 122

原创 2019.7.14笔记——java并发线程相关

java object对象头mark word 64 bit前56位存储的hashcode最后一个字节第一位无意义,后面4位是分代年龄,klass 32 bit指向了方法区的模板类,字节码JOL小端存储对象的实例数据对齐字节 padding偏向锁比轻量级锁效率高很多轻量级锁比重量级锁效率高锁的标志和锁的释放没有关系...

2019-09-20 22:34:27 164

原创 2019.7.9笔记——java线程并发相关

应用synchronized的基本应用1.锁的是类的实例或者类的字节码而不是对象的引用如果synchronized关键字加在了方法前,含义和锁this是一样的,下面两端代码含义是一致的。2.手动上锁,自动释放3.不要用常量当锁,容易发生死锁下面两个string引用的是同一个字符串,所以如果认为是两把锁的话会出现问题,所以尽量不要用常量当锁。public class Demo2 ...

2019-09-20 22:33:04 85

原创 java数据结构和算法⑩——倒排索引

正向索引是用key找value倒排索引是用value找key类似于hash分词的颗粒度建索引的时候用最小颗粒度:分出所有情况

2019-09-18 17:58:56 384

原创 java数据结构和算法⑨——高效查找(二分查找和Hash查找)

二分查找需要有序时间复杂度为Nlog(N)Hash查找jdk1.7时hashmap的结构就是hash数组和链表jdk1.8后hashmap在链表数据个数大于8时会转换成红黑树所以jdk1.8中hashmap用到的数据结构有hash数组链表和红黑树...

2019-09-18 17:58:46 535

原创 java数据结构和算法⑧——迪杰斯特拉算法(最短路径)

问题:求从1到其他每个点的最短路径6 811 6 1001 5 301 3 102 3 53 4 504 6 105 4 205 6 60我们定义一个数组,表示1这个点到其他的点的所有最短距离。开始我就在第1这个点贪心:比如我想通过1到其他的点。如果要产生一个中间点就可以到其他的点,那么我找离我最近的那个点走就一定能到最短的路。那么我们就应该找离1最近的那个点去中...

2019-09-18 17:58:34 275

原创 java数据结构和算法⑦——图论入门、BFS(广度搜索)和DFS(深度搜索)

1.图的定义:是一种比线性表和树更为复杂的数据结构,在图形结构中结点之间的关系可以是任意的,任意两个数据元素都可能存在相关性,因此图论在计算中应用相当广泛,知识图谱,推荐算法。2.图的基本元素:结点,顶点,弧(边),弧尾,弧头,有向图(边右箭头),无向图,权(边的权重),子图(递归),出度,入度,回路:从当前点出发 最后又能回到自己。针对有向图处理不好就是死循环。子树:GC:树形结...

2019-09-18 17:58:21 740

原创 java数据结构和算法⑥——哈夫曼树

哈夫曼树最优二叉树计算下面三颗二叉树的带权路径长度总和:WPL(a):72+52+22+42=36()WPL(b):73+53+21+42=46()WPL©:71+52+23+43=35()前缀编码class MyNode implements Comparable<MyNode>{ private String chars = ""; //存的数据 p...

2019-09-18 17:58:11 354

原创 java数据结构和算法⑤——二叉搜索树、红黑树和Btree

二叉搜索树又叫二叉查找树,二叉排序树;它具有以下特点:1.如果它的左子树不为空,则左子树上结点的值都小于根结点。2.如果它的右子树不为空,则右子树上结点的值都大于根结点。3.子树同样也要遵循以上两点2的N次一定要随时记得为什么又叫做二叉排序树呢?只要一颗树是二叉搜索树,那么它的中序遍历一定是有序的。看右边的这颗二叉树,它的中序遍历为:左 根(输出) 右0 3 4 5 6 8我...

2019-09-18 17:58:02 291

原创 java数据结构和算法④——树论基础和归并排序

树是数据结构和算法分析与设计中的一种非常重要的结构,由N个节点组成的具有层次结构的模型。其主要有一下几个特点:1.有一个根节点,一般称为root节点2.每一个元素都被称为node3.除了root节点外,其余的节点都会被分成n个互不相交的集合,子树。递归具体的结构如下所示:树形结构里面的基本术语:结点:树形结构里面的元素子树:当结点大于1时,其余的结点分为的互不相交的集合称为子树...

2019-09-18 17:57:53 129

原创 java数据结构和算法③——贪心和动态规划

贪心算法概念:贪心算法又叫做贪婪算法,它在求解某个问题是,总是做出眼前最大利益。也就是说只顾眼前不顾大局,所以它是局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。贪心算法其最重要的两个点就是:贪心策略通过局部最优解能够得到全局最优解会议室安排问题:有N个同等级的...

2019-09-18 17:57:40 274

原创 java数据结构和算法②——排序算法

不引入第三个变量交换两个变量的值a = a + bb = a - ba = a - b1.冒泡排序:其核心就是两两比较,但是不是和所有人比价你public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int data[] = new i...

2019-09-18 17:57:24 100

原创 java数据结构与算法① ——基本概念

判断数是否是2的整数次幂n&(n-1)特征有穷性、确定性、可行性、有输入、有输出设计原则正确性、可读性、健壮性、高效率、低存储时间复杂度 cpu空间复杂度 内存时间复杂度用O来表示常数型线性型对数型平方型...

2019-09-18 17:57:08 161

原创 spring的扩展点总结

zzzz

2019-09-17 23:13:59 1239 2

原创 spring笔记②——springIOC

spring bean声明周期回调一共三种方式第一种bean初始化的回调,实现下面的接口bean销毁的回调,实现下面的接口第二种xml,可以自定义函数第三种注解,同样可以自定义函数如果同一个接口有两个实现,如果用了@AutoWired注解注入的,因为这个注解默认按type注入的,那么会报错,解决办法有在需要注入的实现上加注解@Primary在注入时加注解@Qualifi...

2019-09-17 23:12:42 110

原创 2019.7.4笔记——java线程并发相关

hostpot----------jvm虚拟机java的线程和操作系统的线程是一一对应的jdk包括java库、c文件、jvmc文件pthread_create为linux系统开启线程的函数pthread_mutex_lock为linux操作系统实现锁总结: java 通过jvm hotspot作为代理,调用操作系统函数结论: java创建一个线程 = 操作系统一个线程...

2019-09-17 20:17:57 206

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除