篱笆墙网络科技公司面试-2021-7-6
Java中如何保证线程安全性 什么是线程安全: 当多个线程访问某个方法时,不管你通过怎样的调用方式、或者说这些线程如何交替地执行,我们在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类是线程安全的。 ...
Java中如何保证线程安全性 什么是线程安全: 当多个线程访问某个方法时,不管你通过怎样的调用方式、或者说这些线程如何交替地执行,我们在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类是线程安全的。 ...
技术面 简单介绍下自己和目前做的项目 static的作用,以及静态类初始化的过程? i++是原子操作吗 spring的IOC和AOP 聊项目 hr面 聊公司业务,福利 聊工资 等通知
线程核心数 如何设置 首先考虑到CPU核心数 Java 中如何获取核心线程数 Runtime.getRuntime().availableProcessors(); 考虑任务是 CPU 密集型任务还是 IO 密集型任务 cpu密集(比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务):理论上线程的数量 = CPU 核数就是最合适的,不过通常把线程的数量设置为CPU 核数 +1,会实现最优的利用率。 IO密集型任务:线程数 = CPU 核心数 / (1 - 阻塞系数) 其中计算密集型阻塞系数为 0,IO 密集型阻塞系数接近 1,一般认为在 0.8 ~ 0.9 之间。比如 8 核 CPU,按照公式就是 2 / ( 1 - 0.9 ) = 20 个线程数 5个线程如何判断线程结束 线程池做的话,线程池有一个termiated终止状态,调用isTermiated可以查看线程池中的线程有没有完全结束 atomicInteger 初始化5,完成一个减一 redis 做缓存 还能做啥 消息队列 分布式锁 使用redis分布式锁(主要使用了redis中的setnx和getset方法,这两个方法在redisTemplate分别是setIfAbsent和getAndSet方法)实现线程安全,因为redis是单线程,能保证线程的安全性,而且redis强大的读写能力能提高效率。 ...
面试过程 先自我介绍 先聊项目 谈谈你项目里负责的模块 开始追着项目模块细问 谈到多线程更新缓存数据时,被问到会不会有并发的问题,怎么解决(主要是redis更新操作不是原子性的,可能存在并发操作) ...