首页 > 笔经面经 > 海康三年开发社招-四面通过

海康三年开发社招-四面通过

头像
北岳 #Java开发#
编辑于 2021-05-19 22:53:11 APP内打开
赞 14 | 收藏 93 | 回复11 | 浏览4664
首先准备面试:JAVA基础,JVM,JUC,多线程,MQ,redis,Mysql和项目
将自己的项目写成文档,将各个功能的具体实现写出来,反复推敲,有没有需要改进的地方,首先要把自己的项目讲清楚, 不要觉得自己实现的,自己就可以表达的很清楚,一定要写出来,我的项目实现写了三页A4纸

开始面试:
一轮面试:将自己的项目,巴拉巴拉说了40分钟
然后问问题,threadlocal实现原理
b树,b+树,聚簇索引,非聚簇索引,普通索引和唯一索引的区别
线程池核心参数,线程池具体场景实现,线程池的核心参数作用
MQ的数据一致性如何实现
秒杀活动如何实现
秒杀活动的产品是否可以退换,如何实现
集合随便问了问
然后问了同步锁和lock锁

商品秒杀实现过程:可以将数据库中所有的SKU缓存到redis中,进行下单的时候,检查redis中是否存在,如果存在并有库存,满足购买条件,则下单,进行支付,当支付的请求进入服务器的时候,首先检查redis中的SKU商品,如果被其他人抢走了,则支付失败;如果剩余的满足订单条件,获取分布式锁,加入消费消息到数据库中,并将消息发送给rabbitMQ-broker,扣除redis库存,支付成功,释放分布式锁,通过中间件更新mysql中的数据,如果服务器崩溃,可以通过数据库消费消息刷新库存和redis缓存


二轮面试:
你最擅长什么技术?我说mysql学的比较好,自己做了一些总结,就单纯从慢日志讲讲自己的看法

第一步:根据慢日志定位慢查询SQL

1.首先检查SQL中是否使用函数,隐式类型转换(字符串转数字),隐式函数或者传入的值超过索引长度

2.SQL中字段的字符集是否一致

3.如果使用count计数,尽量使用count(*)或者count(1),count(字段)会涉及到回表操作,count(id)会全表扫描,并且count(字段)和count(id)都需要判空操作,也可以按照具体的业务选择MyISAM引擎,直接取值

4.查看当前语句的状态,是否是在等MDL锁,数据页flush,其他线程占用了行锁

5.如果是热点数据,需要控制访问资源的并发事务量,可以将一行数据改成逻辑上的多行数据

第二步:使用explain等工具分析 SQL

查看SQL是否按照理想的状态检索最少的数据行,如果没有则查看是否走了指定索引

判断优化器是否选错索引,可以通过强行选择索引或者重新统计索引信息

第三步:修改SQL或者尽量让SQL走索引

A.在数据库空闲的时候,定期进行索引统计,防止优化器选错索引,造成索引失效

B.优化手段:聚簇索引,覆盖索引,索引下推优化,联合索引

C.字符串索引:前缀索引,倒序存储,hash索引

D.如果需要业务字段做索引,必须确保是唯一索引,符合K-V结构,不需要考虑其他索引叶子节点的大小

E.尽量使用自增主键索引,每次插入新的数据都是追加操作,可以防止数据页黑洞出现,保证索引的紧凑,不涉及挪动其他数据,也不会触动叶子节点的页分裂

F.主键索引的长度不可以过长,造成其他索引树的叶子节点较大

G.在建立联合索引的时候,如果可以通过顺序少建立一个索引,则调整顺序,同时需要考虑空间占用

H.数据写多读少的时候选择普通索引,利用change buffer可以提高效率,合理设置change buffer大小,防止频繁merge

I.如果sql语句出现锁操作,尽量让锁操作最后执行,防止影响其他SQL的执行

J.如果使用长连接,在进行较大查询之后,需要重置链接,防止占用较大内存,造成数据库异常重启

K.不要删除索引,删除索引可能会造成页分裂,导致数据页出现黑洞

L.使用order by查询的时候,如果单行数据过大,会造成回表操作,可以使用联合索引,让字段本身有序

三面:
redis为何高可用?
接口如何优化?SDS的特性
OCP是什么,怎么实现
设计模式会不会?我答得是不会,目前不在学习范围
表单重复提交的问题?在提交的时候使用redis发放令牌验证

四面是HR面,谈了薪资

大家有什么问题可以加微信聊w740026081

更多模拟面试

11条回帖

回帖
加载中...
话题 回帖

相关热帖

笔经面经近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐