- 博客(59)
- 收藏
- 关注
原创 MySQL-InnoDB引擎
当我们在一个事务中,执行多个增删改的操作时,InnoDB引擎会先操作缓冲池中的数据,如果缓冲区没有对应的数据,会通过后台线程将磁盘中的数据加载出来,存放在缓冲区中,然后将缓冲池中的数据修改,修改后的数据页我们称为脏页。缓冲池 Buffer Pool,是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度。往磁盘文件中写入数据,由于是日志文件,所以都是顺序写的。
2022-10-28 18:43:31 177
原创 MySQL-锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。全局锁:锁定数据库中的所有表。表级锁:每次操作锁住整张表。行级锁:每次操作锁住对应的行数据。
2022-10-26 16:08:05 86
原创 MySQL-索引
索引结构描述B+Tree索引最常见的索引类型,大部分引擎都支持 B+ 树索引Hash索引底层数据结构使用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询R-tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。
2022-10-19 20:56:02 101
原创 Session共享的解决方案
在这个分布式结构下,如果不用共享session的话,就会出现问题。当一个客户端发送一个请求(无session),通过nginx将第一次请求分发给服务器1,服务器判断无session,就让那个客户进行登录操作,并得到响应,此时客户端会存储一个来自服务器1响应的session,并存储在客户端。当客户端发送第二次请求的时候,此时本次请求已经携带了session(跳过登录),nginx却将请求分发给服务器2,因为服务器2中没有session,所以无法与客户端session进行对应。
2022-09-18 15:23:14 3215
原创 ConcurrentHashMap
调试工具使用 idea在 HashMap 源码 590 行加断点断点的条件如下,目的是让 HashMap 在扩容为 32 时,并且线程为 Thread-0 或 Thread-1 时停下来断点暂停方式选择 Thread,否则在调试 Thread-0 时,Thread-1 无法恢复运行运行代码,程序在预料的断点位置停了下来,输出接下来进入扩容流程调试在 HashMap 源码 594 行加断点。
2022-09-08 08:53:28 119
原创 线程安全集合类
遍历时如果发生了修改,对于非安全容器来讲,使用 fail-fast 机制也就是让遍历立刻失败,抛出。ConcurrentModificationException,不再继续遍历。
2022-08-31 14:28:12 181
原创 JUC-CyclicBarrier
它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。CyclicBarrier 与 CountDownLatch 的主要区别在于 CyclicBarrier 是可以重用的。行到某个需要“同步”的时刻调用 await() 方法进行等待,当等待的线程数满足『计数个数』时,继续执行。循环栅栏,用来进行线程协作,等待线程满足某个计数。构造时设置『计数个数』,每个线程执。CyclicBarrier 可以被比喻为『人满发车』...
2022-08-30 22:02:26 179
原创 JUC-CountDownLatch
用来进行线程同步协作,等待所有线程完成倒计时其中构造参数用来初始化等待计数值,await()用来等待计数归零,用来让计数减一。
2022-08-30 21:23:23 81
原创 JUC-读写锁
当读操作远远高于写操作时,这时候使用让可以并发,提高性能。类似于数据库中的 select …from … lock in share mode提供一个内部分别使用读锁保护数据的 read() 方法,写锁保护数据的 write() 方法测试可以并发输出结果,从这里可以看到 Thread-0 锁定期间,Thread-1 的读操作不受影响测试相互阻塞......也是相互阻塞的,这里就不测试了。...
2022-08-29 20:54:33 175
原创 JUC-AQS
/独占锁 同步器类 class MySync extends AbstractQueuedSynchronizer {//加上了锁,并设置 owner 为当前线程 setExclusiveOwnerThread(Thread . currentThread());} @Override //是否持有独占锁 protected boolean isHeldExclusively() {} }
2022-08-24 20:32:36 58
原创 JUC-线程池
/1.任务队列 private Deque < T > queue = new ArrayDeque < >();//2.锁 private ReentrantLock lock = new ReentrantLock();//3.生产者条件变量 private Condition fullWaitSet = lock . newCondition();//4.消费者条件变量 private Condition emptyWaitSet = lock . newCondition();
2022-08-24 18:46:19 66
原创 异步模式之工作线程
让有限的工作线程(Worker Thread)来轮流异步处理无限多的任务。也可以将其归类为分工模式,它的典型实现就是线程池,也体现了经典设计模式中的享元模式。例如,海底捞的服务员(线程),轮流处理每位客人的点餐(任务),如果为每位客人都配一名专属的服务员,那么成本就太高了(对比另一种多线程设计模式:Thread-Per-Message)注意,不同任务类型应该使用不同的线程池,这样能够避免饥饿,并能提升效率。
2022-08-23 20:06:38 71
原创 共享模型之不可变
结果发现也没有,构造新字符串对象时,会生成新的 char[] value,对内容进行复制。在 web 阶段学习时,设计 Servlet 时为了保证其线程安全,都会有这样的建议,不要为 Servlet 设置成员变量,这种没有任何成员变量的类是线程安全的。发现final变量的赋值也会通过putfield指令来完成,同样在这条指令之后也会加入写屏障,保证在其他线程读到它的值时不会出现为0的情况。String 类也是不可变的,以它为例,说明一下不可变设计的要素。不可变对象,实际是另一种避免竞争的方式。
2022-08-19 10:27:20 56
原创 JUC下的原子类(Atomic)
Unsafe 对象提供了非常底层的,操作内存、线程的方法,Unsafe 对象不能直接调用,只能通过反射获得} }
2022-08-18 10:32:35 177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人