
面试题整理
第四单元
Java程序员一枚
展开
-
等待synchronized锁时响应interrupted中断吗?
处于阻塞状态时线程不会响应中断,当等待到锁从阻塞状态恢复到runnable状态时线程的中断标志位还处于中断状态,这时如果有对标志位的判断是可以判断出处于中断状态的。原创 2022-08-14 16:47:41 · 429 阅读 · 0 评论 -
Java线程池的知识
在Java中表示线程池的类为ThreadPoolExecutor。定义时最多需要设置7个参数。1.核心线程数,当线程池最少维护的线程个数2.最大线程数,当提交任务时所有核心线程都在工作,切阻塞队列已经满了,则继续创建线程,这个参数定义了创建线程数的上限3和4 线程活跃时间,当线程超过该时间空闲时销毁线程,当然要保留核心线程数个线程5 阻塞队列,任务提交时,当无空闲线程且线程个数到达最大线程数,则先将任务保存到该队列中。...............原创 2022-08-07 12:13:12 · 765 阅读 · 0 评论 -
MySQL之多版本并发控制MVCC
mvcc中文名称为多版本并发控制,用于实现读提交和可重复读隔离级别。多版本是指在对数据进行修改时,会通过undo日志记录数据行的多个版本。通过建立一致性视图,实现事务间的修改不相互影响。一致性视图,记录了当前正在执行的所有事务id。对于可重复读隔离级别,在事务执行过程中读取到的数据是一致的。读取一行数据时,实际会去判断当前数据的事务编号。如果事务id大于当前视图的高水位,说明这是一个未来的事务修改的数据,不能读取。这时就会往前追溯,找到一个undo日志版本号小于当前视图的低水位,或则位于高低水位之间但不在视原创 2022-06-06 23:35:49 · 145 阅读 · 0 评论 -
MySQL之事务的特性、隔离级别和隔离级别解决的问题
事务有A、C、I、D四大特性,分别是A原子性、C一致性、I隔离性、D持久性。A原子性:事务的执行过程做为一个整体,要么所有语句执行成功,要么都没有执行。C一致性:事务执行前后,数据保持一致性的状态。比如银行转账时,从A账户减少100元,给B账户增加100元。事务执行后,两个账户的资金总额是不变的。一致性靠原子性、隔离性、持久性三个特性来保证,是一个结果。I隔离性:事务的执行是相互隔离的,互不影响。共有4种隔离级别:读未提交,读已提交,可重复读和串行化。D持久性:事务对数据的修改是持久的。在读未提交隔离级别下原创 2022-06-05 16:34:40 · 367 阅读 · 0 评论 -
MySQL之索引为什么使用B+树而不是跳表实现?
B+数是平衡的多路查找树。他的特点是一个结点上可以存储多个元素,带来了扇出较高的优点。只需要很少的层数就可以存储大量的数据。和B树相比,它在叶子结点上存储所有的数据。跳表也是分层的。每一层都是一个链表。除了最下面的一层,每个元素除了有指向下一个元素的指针,还有一个指针指向下一层中和自己相同的元素。上一层的链表做为索引加快对下层链表元素的查找。每一层元素都是顺序排列的。当插入一个元素时,使用随机函数决定其是否在每一层插入。在最底层插入的概率是100%,在倒数第二层是50%,依次类推。这样在从最上层往下查询时就原创 2022-06-05 16:06:27 · 775 阅读 · 2 评论 -
分布式之雪花算法
雪花算法用来在分布式集群中生成唯一ID。即在需要在多台机器需要分别生成ID,又要保证生成的ID是唯一的、趋势递增的情况下使用的一种算法。雪花算法生成一个64位的ID,最高位固定为0,之后41位为时间戳,在之后的10位为机器编号,最后的12位为序号。41位的时间戳即2^41毫秒,换算一下是69年。时间戳原本也是一个64位的数字,这里取了其低41位。从当前时间开始,到低41位开始出现重复需要69年。这就是为什么说雪花算法最多可以使用69年的原因。机器编号为10位,2^10=1024,所以雪花算法最多支持1024原创 2022-06-03 00:40:34 · 2556 阅读 · 2 评论 -
Redis之缓存击穿、缓存穿透和缓存雪崩
缓存击穿是指热点key失效之后,所有请求都访问到数据库,对数据库造成较大压力。解决方案:1.加锁,获取到锁的线程去更新缓存;如果是集群部署,则需要使用分布式锁。问题:没获取到锁的其他线程走什么逻辑呢?如果是等待获取锁,那么同一时刻所有线程串行获取锁,后获取到锁的线程等待时间较长。如果直接返回获取不到,要根据具体情况考虑是否能够接受。2.热点key缓存设置永不失效,更新采用异步更新的方式。具体实现可以是启动一个单独线程去定时判断缓存是否失效,失效时进行缓存更新。 存在更新不及时的情况,不能保证缓存和数据库原创 2022-06-01 15:51:19 · 292 阅读 · 0 评论 -
Spring之AOP
AOP意思是面向切面的编程。提供一种方式可以在现有代码前后增加一些统一的逻辑。比如监控、打印日志等。使用动态代理技术实现。有两种实现方式,一个是JDK Proxy,另一个是CgLib。JDK Proxy要求被代理的对象实现一个接口,通过动态代理动态生成该接口的一个实现类。在实际使用时,需要定义一个中间类实现InvocationHandler接口定义代理类要执行的操作。CgLib不要求被代理类实现接口,它是一个第三方类库,通过生成一个被代理对象的子类来进行动态代理。两者在使用上都需要定义一个中间类来指定原创 2022-06-01 15:01:44 · 106 阅读 · 0 评论 -
Java并发之synchronized锁优化
1.锁升级JDK1.6之前 synchronized性能较差,被称作重量级锁,利于操作系统中的管程实现。加解锁需要进行内核空间和用户空间的切换,性能消耗较多。在JDK1.6中对synchronized进行了优化,加入了偏向锁、轻量级锁、自旋锁、重量级锁,从而使用不同程度的锁竞争。在竞争程度最低的情况下,只有一个线程返回获取锁。这样就会进入偏向锁状态。这时对象头中一个专门的偏向锁标志位就会设置为1,线程ID也会记录下来。当下次再需要获取锁时,判断线程ID和自己相同,就可以直接进入临界区了。在偏向锁状态下原创 2022-03-02 11:32:48 · 465 阅读 · 0 评论 -
Java并发之CountDownLatch、CyclicBarrier和Semaphore
原创 2022-02-28 20:49:17 · 187 阅读 · 0 评论