分类: 面试题

10 篇文章

thumbnail
说说线程池原理?以及核心参数?
1.首先线程池有几个核心的参数概念: 最大线程数 maximumPoolSize 核心线程数 corePoolSize 活跃时间 keepAliveTime 阻塞队列 workQueue 拒绝策略 RejectedExecutionHandler 2.当提交一个新任务到线程池时,具体的执行流程如下: 当我们提交任务,线程池会根据corePoolSi…
thumbnail
说说ThreadLocal原理?
ThreadLocal可以理解为线程本地变量,他会在每个线程都创建一个副本,那么在线程之间访问内部副本变量就行了,做到了线程之间互相隔离,相比于synchronized的做法是用空间来换时间。 ThreadLocal有一个静态内部类ThreadLocalMap,ThreadLocalMap又包含了一个Entry数组,Entry本身是一个弱引用,他的…
thumbnail
说说Redis的数据类型?以及每种数据类型的使用场景?
一共五种 String 这个其实没啥好说的,最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。 hash 这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。博主在做单点登录的时候,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的…
thumbnail
说说Redis持久化机制
Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。 实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程写入到临时文件中,持久化的过程结束了,再用这个临时文件替换上次的快照文件,然后子…
thumbnail
volatile关键字的作用?
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,最新值对其他线程来说是立即可见的。 禁止进行指令重排序。 volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchroni…
thumbnail
说说自己怎么使用synchronized关键字的?
1、修饰实例方法 作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁。 2、修饰静态方法 也就是给当前类加锁,会作用于类的所有对象实例,因为静态成员不属于任何一个实例对象,是类成员( static 表明这是该类的一个静态资源,不管new了多少个对象,只有一份)。 所以如果一个线程A调用一个实例对象的非静态 synchronized 方法,…
快乐