面试题day2
中电赛宝
- 候选人自我介绍,面试官主要询问项目详情,包括项目的背景、功能以及个人负责哪些功能的实现;
- Redis在项目中如何使用?
登陆时验证码的过期机制,热点数据缓存。
- 在项目中,如何保证缓存和数据库数据的一致性?
先删除缓存,再更新数据库
- 问题
- 请求1先把cache中的A数据删除;请求2从DB中读取数据将将数据A写入cache;请求1再把DB中的A数据更新。
- 解决方案
- 延迟双删策略:先删除缓存;再更新数据库;休眠1秒,再次删除缓存;
先更新数据库,再删除缓存
问题
很难发生,数据库的写慢于缓存的写
- 缓存刚好失效,请求1从DB读数据A;请求2写更新数据 A 到数据库并把删除cache中的A数据;请求1将数据A写入cache。
- Redis的基本数据类型有哪些?
- string 缓存 session共享 分布式锁
- list 消息队列
- hash 存储对象
- set 集合
- zset 排行榜
- 介绍Java中常用的集合容器及它们的特性或优点?
list set map
有序可重复 无需不重复 key不重复value可重复
- HashSet和HashMap之间有什么关系?
HashSet底层是HashMap,以相同值存入HashMap,本身为key,达到去重效果
- 介绍一下SpringMVC的基本工作流程?
- 请求传入dispatcherservlet
- 传入处理器映射器,转换为controller,返回执行链
- 传入处理器适配器,调用底层的方法,返回ModelAndView
- 传入视图解析器,返回View
- 解析View,返回响应
- 线程有几种状态?在Java中创建线程有哪几种方式?
创建、销毁、阻塞、运行、就绪
- 是否使用过Linux?项目部署在Linux服务器时有哪些常用命令?
sudo
makdir
chomd
wget
make&make install
netstat
ps -aux|grep
pstree -pu
- 项目中遇到了什么难点?是如何解决的?
就ThreadLocal内存泄漏及解决方式展开论述。
飞旗
-
自我介绍
-
jdk jre的区别
jdk包含jre,提供编程环境,jre仅仅是java运行环境
- spring 特性
ioc aop
- string stringbuilder stringbuffer的区别
线程安全 可变
- jdbc连接数据库的流程
//首先加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //提供JDBC连接的URL String url="jdbc:mysql://0.0.0.0:3306/xxxx"; String username="root"; String password="root"; //创建数据库的连接 Connection con = DriverManager.getConnection(url,username,password); //创建一个statement执行者 String sql="SELECT * FROM biz_spot WHERE spot_id = ?"; PreparedStatement statement = con.prepareStatement(sql); statement.setLong(1,11L); //执行SQL语句 ResultSet result = statement.executeQuery(); //处理返回结果 while (result.next()){ System.out.println(result.getString("xxx") + "---" + result.getString("xxx")); } //关闭JDBC对象 con.close(); result.close(); statement.close();
-
对mybatis的了解
-
throw和throws的区别
throw自己抛出 方法内使用
throws向上抛出 方法上声明
- 终止for循环的方式,break和continue的区别
是否执行下一次循环
- Java项目打包成jar包和war包的区别,什么情况打成jar,什么情况打成war
是否有web页面
京东数科
一面 2021年11月25日
- 自我介绍
- 实习项目
- 了解哪些开源的rpc框架?dubbo的调用过程简单说一下?
- shiro框架记住我的功能是怎么实现的?
登录后存储用户信息到redis,下一次登录直接验证
- tcp协议建立连接、释放连接的过程。
三次握手,四次挥手
- http、https的区别?
是否安全,https使用ssl加密
- https加密的机制了解过吗?
- 以非对称加密密钥(RSA)加密对称加密密钥(AES)
- 简单来说,我们使用浏览器的根证书(CA公钥)来确保数字证书的真实性(验证),数字证书(服务器公钥)来确保服务器对称公钥的保密性(加密)。
- 私钥签名,公钥验证;公钥加密,私钥解密
- 创建线程有哪几种方式?
继承thread 实现runnable 实现callable
- Runnable和Callable创建线程有什么区别?
有无返回值 异常处理
- 线程池哪几种?分别说一下
单线程池、定长线程池、缓存线程池、定期线程池
- 一个任务进来后,线程池是怎么处理的?
核心线程数、阻塞队列、最大线程数、拒绝
- 线程池的拒绝策略有哪几种?
直接抛出 最早抛出 抛异常 调用者执行
- HashMap的底层数据结构?链表长度大于8就会转化成红黑树吗,没有对数组的插入有要求吗?链表是双向链表还是单向链表?
链表散列、红黑树
不一定,数组长度不足64先扩容
双向链表
- 怎么判断链表有环?怎么找到环的入口?
hashset、快慢指针
-
说说快排的思想
选出哨兵,左右分大小
-
Java里面的锁有哪些?
Sychronized、aqs
-
ReentrantLock的实现原理?
- 核心思想
- 如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
- 操作流程
- AQS 使用一个 int 成员变量来表示同步状态,通过内置的 FIFO 队列来完成获取资源线程的排队工作。AQS 使用 CAS 对该同步状态进行原子操作实现对其值的修改。
- 公平锁和非公平锁
- 非公平锁在调用 lock 后,首先就会调用 CAS 进行一次抢锁,如果这个时候恰巧锁没有被占用,那么直接就获取到锁返回了。
- 非公平锁在 CAS 失败后,和公平锁一样都会进入到
tryAcquire
方法,在tryAcquire
方法中,如果发现锁这个时候被释放了(state == 0),非公平锁会直接 CAS 抢锁,但是公平锁会判断等待队列是否有线程处于等待状态,如果有则不去抢锁,乖乖排到后面。
- 条件队列
- AQS中实现ConditionObject,它实现了Condition接口,实现一个绑定在锁上的条件队列Condition,替代了 Object 监视器方法
- 核心思想
-
说说volatile 关键字的作用
防止指令重排、可见性
写屏障(Store Memory Barrier):告诉处理器在写屏障之前的所有已经存储在存储缓存(store bufferes)中的数据同步到主内存,简单来说就是使得写屏障之前的指令的结果对写屏障之后的读或者写是可见的。
读屏障(Load Memory Barrier):处理器在读屏障之后的读操作,都在读屏障之后执行。配合写屏障,使得写屏障之前的内存更新对于读屏障之后的读操作是可见的。
全屏障(Full Memory Barrier):确保屏障前的内存读写操作的结果提交到内存之后,再执行屏障后的读写操作。借助了CPU的lock指令,通过在写volatile的机器指令前加上lock前缀,触发底层锁机制,使写volatile具有以下两个原则: 写volatile时处理器会将缓存写回到主内存。 一个处理器的缓存写回到内存会导致其他处理器的缓存失效。 lock前缀指令锁定共享变量内存地址的缓存行。
-
你了解的myql存储引擎有哪些?
myisam innodb
是否支持锁 事务 索引
- InnoDB事务隔离级别有哪些?
ru rc rr 串行
- 可重复读是怎么实现的呢?
mvcc
rr级别的邻键锁
- mysql有哪些锁?
行锁 表锁 页面锁
读锁 写锁
意向锁
悲观锁 乐观锁
gap next-key
- mysql是怎么实现乐观锁和悲观锁的?
乐观锁 操作后加锁 版本号 cas
悲观锁 操作前加锁 select … for update、select … lock in share mode、update、delete、insert 事务
- 你了解哪些在SQL语句中可以用的悲观锁?
select … for update、select … lock in share mode、update、delete、insert 事务
- select for update是表锁还是行锁?
没用索引/主键的话就是表锁,否则就是是行锁
- 加了索引一定会走索引吗?索引失效的情况有哪些?
非最左索引
对索引字段做函数操作
隐式类型转换
not in
like%
- 如果我想要强制走某个索引,能实现吗?
FORCE INDEX (index_list)
- 能说一下JVM的模型吗?
程序计数器
本地方法栈
虚拟机栈
堆
方法区
直接内存
-
说一下Spring bean的生命周期?bean什么时候会被销毁呢?
-
Spring Cloud了解过吗?
-
除了Java以外的技术有了解过吗?比如机器学习之类的
爬虫