- 博客(41)
- 收藏
- 关注
原创 JUC(8):AQS重点总结
AQS其实就是一个由volatile+CAS机制实现的==构建锁的框架==同步器。==同步器的设计是基于模板方法模式的==### AQS结构:- volatile 修饰的 int ==State属性==(共享资源): - 因为 state 是使用 volatile 修饰,所以在多线程之间可见,访问 state 的方式有 3 种,getState()、setState()和 compareAndSetState()。 - State有3种状态:0-没人占用,1-被占用了,大于1-可重入锁。-
2022-07-08 21:22:20
382
原创 JUC(7): ThreadLocal重点总结
ThreadLocal重点总结:### 概念:- 每个线程都有本地私有的`独立变量副本`。 ==很多人抢一个公共电话 ----> 每个人都有自己的手机!==- ThreadLocal的作用主要是做**数据隔离**,==填充的数据只属于当前线程==,变量的数据对别的线程而言是相对隔离的,在多线程环境下,如何防止自己的变量被其它线程篡改。...
2022-07-08 21:20:57
358
原创 JUC(6): Future异步任务重点总结
## Future异步任务Future 接口表示异步任务,是还没有完成的任务给出的未来结果。### **1、FutureTask**- **作为线程:**实现了Runnable接口- **异步处理:**实现了Future接口- **有返回值:**构造器注入Callable...
2022-07-08 21:19:28
414
原创 JUC(4): 深入理解CAS
CAS : 比较当前工作内存中的值和主内存中的值,如果这个值是期望的旧值,那么则执行操作!如果不是就一直循环!(==自旋锁==)- **CAS是一种**系统原语,**也就是说CAS是一条CPU的原子指令,不会造成所谓的数据不一致问题。**...
2022-07-08 21:15:25
150
原创 JUC(2): 阻塞队列+线程池(重点)+新时代程序员必会
阻塞队列+线程池(重点)+新时代程序员必会(- lambda表达式- 链式编程- 函数式Function接口:只有一个方法的接口,(Consumer接口,Predicate接口,Supplier接口)- Stream流式计算)
2022-07-08 21:08:10
1698
原创 JUC(1): LockSupport工具类
LockSupport工具类(底层调用了 Unsafe 类):**- `LockSupport`类可以阻塞当前线程以及唤醒指定被阻塞的线程 - Lock Support是一个线程阻塞工具类,有静态方法,LockSupport调用的==Unsafe中的native代码。== - Lock Support提供`park()` 和`unpark() `方法实现**在随意位置阻塞线程** 和 **解除线程阻塞**的过程(不必在同步代码块中)......
2022-07-08 21:06:19
209
原创 JUC(0): 常见*Notes:
LockSupport工具类,阻塞线程的方法,对象内存布局,AtomicLong 原子类与**LongAdder**,**线程中断**:(线程自己中断自己,自己决定自己的命运!),ConcurrentModificationException 集合类并发修改异常,CountDownLatch,CyclicBarrier,Semaphore......
2022-07-08 21:04:18
135
原创 JVM(5) 并发内存模型JMM
JMM 即 Java Memory Model,它定义了**主存(共享内存)、工作内存(线程私有)**抽象概念- **原子性** - 保证指令不会受到线程上下文切换的影响- **可见性** - 保证指令不会受 cpu 缓存的影响- **有序性** - 保证指令不会受 cpu 指令并行优化的影响...
2022-06-29 20:53:26
394
原创 JVM(3) 类加载
1、类加载阶段1) 加载将类的字节码载入方法区(元空间jdk1.8),内部采用C++有父类先加载父类反射是通过对象头class地址找到元空间中Class类对象,从中获取_fields, _methods等信息!
2022-06-29 13:41:22
197
原创 Java集合List常用方法
A:添加功能boolean add(E e):向集合中添加一个元素void add(int index, E element):在指定位置添加元素boolean addAll(Collection<? extends E> c):向集合中添加一个集合的元素。B:删除功能void clear():删除集合中的所有元素E remove(int index):根据指定索引删除元素,并把删除的元素返回boolean remove(Object o):从集合中删除指定的元素boolean
2022-03-13 21:20:34
744
原创 MySQL的MVCC机制实现READ COMMITTED和 REPEATABLE READ隔离级别
MVCC实现依赖于 —— undo日志、隐藏字段、ReadViewMVCC,多版本的并发控制,Multi-Version Concurrency Controlundo日志:例子:表中本来有记录(1,张三,一班)事务10更新记录:(1,李四,一班)后又更新(1,王五,一班)事务20更新记录:(1,钱七,一班)又更新(1,宋八,一班)此时记录修改了四次,undo日志形成版本链:隐藏字段:每行记录后面保存两个隐藏的列:一个保存了行的事务ID(TRX_ID),一...
2022-03-10 15:51:17
2087
2
原创 MySQL锁机制
支持行锁:读锁(S锁)、写锁(X锁)间隙锁:(为了解决 可重复读(repeatable read)隔离级别中存在的幻读问题)A gap lock is a lock on a gap between index records, or a lock on the gap before the first or after the last index record。间隙锁在本质上是不区分共享间隙锁或互斥间隙锁 间隙锁本质上是用于阻止其他事务在该间隙内插入新记录,而自身事务是允许在该间隙..
2022-03-09 22:00:09
466
原创 MySQL索引失效的场景总结
1、左模糊查询:select * from student where name like '%abc'2、使用函数3、不满足最左前缀原则4、<>、!=、is not null、5、范围条件右边的索引列失效6、类型转换
2022-03-07 20:47:37
218
原创 使用反射动态实现对不同表的通用多条查询及JDBC总结
/** * 使用反射动态的实现对不同表的通用多个查询 * @author bh * @create 2022-03-04 17:43 */public class CommonMultiQuery { @Test public void test() { String sql = "select id stuId, name stuName from student where id > ?;"; List<Student> mu.
2022-03-05 10:57:53
686
原创 使用反射动态的实现对不同表的通用单条查询
/** * 使用反射动态的实现对不同表的通用查询 * @author baihang * @create 2022-03-04 17:43 */public class CommonQuery { @Test public void test() { String sql = "select id stuId, name stuName from student where id = ?;"; Student queryInstance = ...
2022-03-04 18:20:28
262
原创 利用反射封装对student表的单条查询(JDBC连接MySQL8.0.28)
一、直接查询student表@Test /** * 直接查询student表 */ public void test1() { Connection connection = null; PreparedStatement ps = null; ResultSet resultSet = null; try { connection = JDBCUtils.getConnect.
2022-03-04 17:31:28
339
1
原创 MySQL索引
索引——> 类似于图书馆书的索引号MySQL使用B+树构建索引。B+树的最底层叶子节点包含了所有的索引项。B+树在查找数据的时候,由于数据都存放在最底层的叶子节点上,所以每次查找都需要检索到叶子节点才能查询到数据。所以在需要查询数据的情况下每次的磁盘的IO跟树高有直接的关系,但是从另一方面来说,由于数据都被放到了叶子节点,所以放索引的磁盘块锁存放的索引数量是会跟这增加的,所以相对于B树来说,B+树的树高理论上情况下是比B树要矮的。也存在索引覆盖查询的情况,在索引中数据满足了当前查询语句所需要
2022-03-02 19:34:28
133
原创 MyISAM与InnoDB 存储引擎特点
InnoDB支持事务,MyISAM不支持。(最好把多条SQL语言放在begin和commit之间,组成一个事务) InnoDB支持外键,而MyISAM不支持。 InnoDB是聚集索引,MyISAM是非聚集索引。 Innodb不支持全文索引,而MyISAM支持全文索引。 InnoDB 默认行级锁,而MyISAM是表级锁。(InnoDB 适用高并发) 系统奔溃后InnoDB 能自动恢复,MyISAM恢复起来更困难。 InnoDB缓存索引和数据,MyISAM只缓存索引。 数据文件结构:...
2022-03-02 16:23:53
404
原创 Java 1.7新特性:try-with-resource语法糖
java1.7之前的异常屏蔽(Suppressed Exceptions)问题:public class Demo { public static void main(String[] args) { BufferedInputStream bin = null; BufferedOutputStream bout = null; try { bin = new BufferedInputStream(new FileInputStream(new File("test.
2022-03-01 17:31:57
410
原创 数据库DDL、DML、DCL的常见操作
DML (data manipulation language):SELECT、UPDATE、INSERT、DELETE等 DDL(data definition language):CREATE、ALTER、DROP、TRUNCATE等 DCL(Data Control Language):grant,deny,revoke等
2022-02-27 20:13:28
525
原创 pip安装包ReadTimeoutError超时解决办法:使用douban镜像
pip --default-timeout=100 install 库名称 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com将库名称换为要安装的包,以torch==1.8.0为例:pip --default-timeout=100 install torch==1.8.0 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com...
2021-12-22 22:04:29
544
原创 java 用Deque 实现队列、栈
一、队列Queue<Integer> queue1 = new LinkedList<>();queue1.offer(1);queue1.offer(2);queue1.offer(3);queue1.poll(); //1queue1.peek(); //2二、栈Stack<Integer> stack=new Stack<>();stack.push(1);stack.push(2);stack.p..
2021-11-12 12:40:16
2127
原创 Java中的strip(), split() 分割字符串
jdk11引进了strip():用来去除字符串的前导和后缀空格eg:str = " hello world! ";str = str.strip();//str = "hello world!"split():加上正则化用来分割字符串1、正则表达式\s表示匹配任何空白字符,+表示匹配一次或多次。str = " hello world! ";String[] words = str.split("\\s+"); //按照一个或多个空...
2021-10-24 18:19:04
5686
原创 java中List<Integer>转化为int[]的方法
1、遍历List中的元素添加到int[]数组中List<Integer> list = new ArrayList<>();int[] res = new int[list.size()];int i = 0;for(Integer num : list) { res[i] = num;}2、利用Java8的stream()int[] res = list.stream().mapToInt(Integer::intValue).toArra..
2021-10-13 18:36:33
5633
3
原创 Java中小数默认为double类型
A:5.3e12表示5.3乘以10的12次方,正确B:在Java中,如果你输入一个小数,系统默认的是double类型的,这个式子相当于float f=double 11.1,明显错误,如果想要表达11.1为float类型的,需要在11.1末尾加一个f标识你输入的是float类型即可C:0.0是小数,默认是double,不是intD:Dbuble是基本类的封装类,不可直接赋值...
2021-10-05 21:48:35
5868
原创 volatile为什么不能保证原子性(能保证可见性)
Java中只有对基本类型变量的赋值和读取是原子操作,如i = 1的赋值操作,但是像j = i或者i++这样的操作都不是原子操作,因为他们都进行了多次原子操作,比如先读取i的值,再将i的值赋值给j,两个原子操作加起来就不是原子操作了。所以,如果一个变量被volatile修饰了,那么肯定可以保证每次读取这个变量值的时候得到的值是最新的(可见性),但是一旦需要对变量进行自增这样的非原子操作,就不会保证这个变量的原子性了。举个栗子一个变量i被volatile修饰,两个线程想对这个变量修改,都对其...
2021-10-04 23:22:41
522
原创 MySQL数据库索引组合索引的最左优先原则
最左优先原则:组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到。只要组合索引最左边第一个字段出现在Where中,那么不管后面的字段出现与否或者出现顺序如何,MySQL引擎都会自动调用索引来优化查询效率。根据最左匹配原则可以知道B-Tree建立索引的过程,比如假设有一个3列索引(col1,col2,col3),那么MySQL只会会建立三个索引(col1),(col1,col2),(col1,col2,col3)。则可知当查询语句中where后只要有col1就会用到索引。创建四种不同
2021-10-04 23:10:03
2465
原创 数据库事务ACID及隔离级别
为保证事务的正确性与可靠型,事务必须满足ACID四大特性:原子性、一致性、隔离性、持久性。原子性(A):一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。一致性(C):在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。隔离性(I):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性
2021-10-03 17:53:12
413
原创 Linux命令记录
从普通用户切换到root用户:$ su 从root用户切换到普通用户:$ su - username给用户username设置filename文件夹的权限:chown$ sudo chown -R username filename #-R表示filename目录以及其子目录下的所有文件的权限...
2021-09-27 22:07:12
102
原创 conda安装python包出错:Collecting package metadata: failed NotWritableError
最近在服务器上用conda命令安装python依赖包时总是报错,如下:Collecting package metadata (current_repodata.json): failedNotWritableError: The current user does not have write permissions to a required path. path: /opt/anaconda3/pkgs/cache/8f77de01.json uid: 984 gid: 98...
2021-09-27 21:49:27
1825
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人