随笔分类 -  常见面试题

摘要:基本概念: 领域驱动设计(简称 ddd)概念来源于2004年著名建模专家eric evans发表的他最具影响力的书籍:《domain-driven design –tackling complexity in the heart of software》(中文译名:领域驱动设计—软件核心复杂性应对之 阅读全文
posted @ 2021-01-05 15:12 天宇轩-王 阅读(1938) 评论(0) 推荐(1)
摘要:什么是阻塞队列? 阻塞队列的作用 阻塞队列,也就是 BlockingQueue,它是一个接口,如代码所示: public interface BlockingQueue<E> extends Queue<E>{...} BlockingQueue 继承了 Queue 接口,是队列的一种。Queue 阅读全文
posted @ 2021-01-05 13:09 天宇轩-王 阅读(207) 评论(0) 推荐(0)
摘要:CopyOnWriteArrayList 有什么特点? 适用场景 读操作可以尽可能的快,而写即使慢一些也没关系 在很多应用场景中,读操作可能会远远多于写操作。比如,有些系统级别的信息,往往只需要加载或者修改很少的次数,但是会被系统内所有模块频繁的访问。对于这种场景,我们最希望看到的就是读操作可以尽可 阅读全文
posted @ 2021-01-04 21:09 天宇轩-王 阅读(136) 评论(0) 推荐(0)
摘要:synchronized和lock的区别 原始构成: synchronized是关键字属于JVM层面,monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象只有在同步块或者方法中才能调用wait/notify) lock是类,是api 阅读全文
posted @ 2021-01-04 19:43 天宇轩-王 阅读(601) 评论(0) 推荐(0)
摘要:面试题:什么叫做阻塞队列的有界和无界 阻塞队列有一个非常重要的属性,那就是容量的大小,分为有界和无界两种。 无界队列意味着里面可以容纳非常多的元素,例如 LinkedBlockingQueue 的上限是 Integer.MAX_VALUE,约为 2 的 31 次方,是非常大的一个数,可以近似认为是无 阅读全文
posted @ 2021-01-04 16:18 天宇轩-王 阅读(857) 评论(0) 推荐(0)
摘要:ReentrantReadWriteLock 当读操作远远高于写操作时,这时候使用 读写锁 让 读-读 可以并发,提高性能。 类似于数据库中的 select ...from ... lock in share mode 提供一个 数据容器类 内部分别使用读锁保护数据的 read() 方法,写锁保护数 阅读全文
posted @ 2021-01-04 13:38 天宇轩-王 阅读(140) 评论(0) 推荐(0)
摘要:CountDownLatch类 CountDownLatch 类在创建实例的时候,需要在构造函数中传入倒数次数,然后由需要等待的线程去调用 await 方法开始等待,而每一次其他线程调用了 countDown 方法之后,计数便会减 1,直到减为 0 时,之前等待的线程便会继续运行。 构造方法: Co 阅读全文
posted @ 2020-12-31 15:49 天宇轩-王 阅读(170) 评论(0) 推荐(0)
摘要:该类自 JDK 8 加入,是为了进一步优化读性能,它的特点是在使用读锁、写锁时都必须配合【戳】使用 读锁: long stamp = lock.readLock(); lock.unlockRead(stamp); 写锁: long stamp = lock.writeLock(); lock.un 阅读全文
posted @ 2020-12-31 14:19 天宇轩-王 阅读(132) 评论(0) 推荐(0)
摘要:final 标记的类不能被继承 。提高安全性,提高程序的可读性。 final标记的方法不能被子类重写。 final标记的变量,只能被赋值一次,即称为常量。 final和abstract这两个关键字是反相关的,final类就不可能是abstract的。 final方法在编译阶段绑定,称为静态绑定(st 阅读全文
posted @ 2020-12-31 13:19 天宇轩-王 阅读(140) 评论(0) 推荐(0)
摘要:volatile 1.volatile保证可见性 代码比较简单,我就不贴出来了。 子线程t从主内存读取到数据放入其对应的工作内存 将flag的值更改为true,但是这个时候flag的值还没有写会主内存 此时main方法main方法读取到了flag的值为false 当子线程t将flag的值写回去后,失 阅读全文
posted @ 2020-12-30 21:49 天宇轩-王 阅读(207) 评论(0) 推荐(0)
摘要:一、as-if-serial as-if-serial语义的意思是:不管怎么重排序(编译器和处理器为了提供并行度),(单线程)程序的执行结果不能被改变。编译器,runtime和处理器都必须遵守as-if-serial语义。as-if-serial语义把单线程程序保护了起来,遵守as-if-seria 阅读全文
posted @ 2020-12-30 17:47 天宇轩-王 阅读(362) 评论(0) 推荐(0)
摘要:Redis的持久化机制是什么?各自的优缺点? Redis提供两种持久化机制RDB和AOF机制: 阅读全文
posted @ 2020-12-30 17:00 天宇轩-王 阅读(216) 评论(0) 推荐(0)
摘要:为什么单线程redis还这么快 绝大部分请求时纯粹的内存操作,非常快速10W+ 采用单线程,避免了不必要的上下文切换和竞争条件,原子性保证关键。其中单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块还是用了多线程,例如持久化模块。 非阻塞IO多路复用,这样提高了redis的 阅读全文
posted @ 2020-12-30 16:32 天宇轩-王 阅读(99) 评论(0) 推荐(0)
摘要:微服务理论 微服务和SOA的区别(这里就把单体应用也写一下) **单体服务:**Web应用程序发展的早期,大部分web工程(包含前端页面,web层代码,service层代码,dao层代码)是将所有的功能模块,打包到一起并放在一个web容器中运行。 优点: 所有的功能集成在一个项目工程中 项目架构简单 阅读全文
posted @ 2020-12-29 20:20 天宇轩-王 阅读(213) 评论(0) 推荐(0)
摘要:在静态方法和非静态方法上加 Synchronized的区别 非静态方法 class Test{ public synchronized void test() { } } 等价于 class Test{ public void test() { synchronized(this) { } } } 阅读全文
posted @ 2020-12-29 10:19 天宇轩-王 阅读(124) 评论(0) 推荐(0)
摘要:3种线程阻塞唤醒 wait/notify /** * @author WGR * @create 2020/12/29 -- 0:28 */ public class Test6 { private static Object objectLock = new Object(); public st 阅读全文
posted @ 2020-12-29 01:12 天宇轩-王 阅读(170) 评论(0) 推荐(0)
摘要:ReentrantLock源码探究 后面的流程可以结合:https://www.cnblogs.com/dalianpai/p/14202617.html 一起看 相对于 synchronized 它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量 与 synchroniz 阅读全文
posted @ 2020-12-29 00:20 天宇轩-王 阅读(344) 评论(0) 推荐(1)
摘要:这个图参考尚硅谷的大厂面试题第三季的AQS,如果感觉看的不方便的,可以联系我发给你。 阅读全文
posted @ 2020-12-28 17:19 天宇轩-王 阅读(149) 评论(1) 推荐(0)
摘要:1、Semaphore 是什么 Semaphore 通常我们叫它信号量, 可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。 可以把它简单的理解成我们停车场入口立着的那个显示屏,每有一辆车进入停车场显示屏就会显示剩余车位减1,每有一辆车从停车场出去,显示屏上显示的剩余车 阅读全文
posted @ 2020-12-27 22:48 天宇轩-王 阅读(265) 评论(0) 推荐(0)
摘要:虚拟机栈 由于跨平台性设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容器实现,缺点是性能下降,实现同样的功能需要更多的指令。栈解决的是程序运行的问题,即程序如何运行,如何处理数据。生命周期和线程一致,它保存方法的局部变量,部 阅读全文
posted @ 2020-12-24 23:22 天宇轩-王 阅读(130) 评论(0) 推荐(0)