- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 SQL优化思路
查询优化:避免全表扫描 避免通配符紧随like出现,如LIKE ‘%ABC’ 避免在WHERE子句中使用IS NULL 避免使用不等于:!= , <> 避免使用OR, 尽量使用UNION ALL 尽量用EXIST子查询代替IN子程序 避免只给出复合索引中的其中一个字段 避免WHERE 1=1这样的写法 避免在WHERE子句中对字段进行表达式操作,如WHERE num/2=100 避免...
2019-07-17 15:50:23
211
原创 理解ThreadLocal
1 TreadLocal的作用是什么? 并发问题的实质是多个线程想要写同一个变量,那么如果给多个线程创建不同的变量,这个问题就解决了。 类似局部变量的思路,所以叫线程局部变量。 比如用户访问网站,每个用户一个userid,那么各个线程用自己的userid,互不影响。 2 使用TreadLocal和直接使用局部变量,有什么不同? threadlocal 提供了和线程操作相关的代理接口 3 Tread...
2019-07-17 12:25:04
131
原创 java并发包Executors中的4种线程池
Executors类中,提供可创建的四种大类的线程池 1. newCachedThreadPool 一句话说清:动态创建线程和移除60s不用的老线程。 适合的场景:拥有大量执行时间短的异步任务。 /** * Creates a thread pool that creates new threads as needed, but * will reuse previously ...
2019-07-16 15:40:07
373
原创 java各种锁
1. synchronized和reentrantlock的区别,ReentrantLock的可重入的含义是什么 sync是悲观锁,认为并发写多读少,不给别人资源 lock是乐观锁,认为并发读多写少,给别人读 sync是非公平性锁,可能存在等待时间最长的线程却一直无法获取资源的情况 lock是公平锁,先到先得 lock是再入锁,就是说当线程试图获取锁时,发现锁已被人持有了,而持有的人正是他自己,那...
2019-07-16 14:25:45
150
原创 详细注释------二分查找简单版(循环和递归)
二分查找 二分查找是对有序的数组进行高效查找的算法。一般是数组,因为支持随机访问,如果是用链表,那么就使用跳表结构,即在链表中加多级索引达到二分查找的结构 下面分别用循环和递归实现简单的二分查找,也就是没有重复数据的二分查找。虽然简单,但是还有有几个小坑的。 递归算法 private static int binarySearch(int[] a, int start, int end, int ...
2019-07-02 16:22:19
217
原创 详细注释------快速排序(简单版)
简单的快排 和归并排序一样,快排的重点在于分区点。先解释一个最简单的快排 public int partition(int[] arr, int start, int end) { //1. 找pivot的过程完成了一轮排序 //2. 返回分区点,此时数组中:分区点左边的元素<分区点<分区点右边的元素 int r = arr[end];//将最后一个元素作为分区点 //i是分区点...
2019-06-28 16:49:31
166
原创 详细注释------带哨兵的归并排序merge函数
##归并排序 ####归并排序和快排都是递归算法,但是难点不在递归,而在merge合并函数和partition分区函数。所以就只分析merge函数就可以了。用哨兵比不用哨兵的代码简洁而且更好理解,所以就不解释不带哨兵的合并函数了。 //带哨兵的归并 public void mergeWithSentinal(int[] arr, int left, int mid, int right) { ...
2019-06-28 15:55:55
1325
5
原创 详细注释------插入排序
三口一头猪插入排序 插入排序 //外层循环控制排序的趟数,只是有的趟时不需要移动数据的。 for(int i = 1; i < arr.length ; i++) {//i从1开始时认为arr[0]是有序的 //arr[i]是无序区间的起点,小于i的部分认为是有序的(i的作用是 : 1.区分有序区间和无序区间,2.控制循环趟数) int value = arr[i]; int j=...
2019-06-28 15:50:01
187
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人