自媒体
·2023-09-02经过前几次的一面失败,昨天终于第一次通过了大厂的一面~
分享面经#面试#
详情汇总在我的博客https://tangjiayang.github.io/2023/08/18/2023秋招总结-八股/,欢迎大家交流学习!
自我介绍
目前有实习的经验吗?
在哪实习?
将来想在哪工作?
实习的时候主要做什么项目?
主要用到哪些技术栈?
技术方面:
HashMap了解吗,简单说一下底层原理,包括如何底层怎么解决hash碰撞的以及底层的数据结构
easy,虽然该说的都答了,但是感觉有点生疏了,回头再看看
追问:那HashMap是线程安全吗?
不是
追问:你会怎么去实现一个线程安全的HashMap?
我们可以参考HashTable、ConcurrentHashMap的底层来做
追问:讲一下HashTable、ConcurrentHashMap的区别
HashTable通过使用Synchronize来加锁实现线程安全,但是它锁住了整个表,会导致效率低下,因此现在不会去使用,用的都是ConcurrentHashMap
追问:那 ConcurrentHashMap 是怎么加锁的?
对底层的HashMap数据结构进行分块加锁,提高了并发度
⚠️这里,还好面试官没有继续追问,我这边确实就知道这么多了,也是蛮幸运的,之后立刻补一下ConcurrentHashMap!!
你刚提到了Synchronize,java API层面有个 Reentrantlock ,这两个有什么区别?
balabala(用CAS的方式修改对象的Mark Word)还好上次面试问到了,准备很充分,答得不错,继续巩固。
你刚才说了CAS,简单说一下他是怎么实现的?
首先CAS指的是 compare and swap,balabala……,预期值,相同执行,不同,重做,但是有个缺点就是会产生ABA问题。
追问:ABA问题怎么解决?
加一个序号、时间戳、、
java自定义的线程池用过吗?
有用过,⚠️这里我其实没用过,是个云玩家,还好没问我在那个场景用的,好好准备一下具体场景
追问:介绍一下线程池比较常用的参数
核心线程数、最大线程数、阻塞队列这些
追问:拒绝策略有哪些?
直接丢弃、丢弃并且报错、阻塞、调用者执行⚠️这里我没记好,有专门的名词的,没记住,就说了含义,马马虎虎,好好记一下
追问:线程池的扩展是怎么个扩展方式?
这个真的老生常谈了 核心线程->阻塞队列->最大线程->拒绝策略
线程的sleep( )方法和Object的wait( )方法有什么区别?
❌!!本次面试第一次翻车,挺基础的问题,没答出来挺可惜的,掉价!!
我说:sleep后还会占据CPU、wait不会占据
实际上:都会让出CPU,sleep不会让出它锁定的资源
对线程之间常见的通信的工具类有了解吗?
socket吗?
不是,比如说信号量这些
消息队列,共享内存这些吗?
还不是不是
笑场了一下,面试官给我解释了一下是生产者消费者模型等等
你常用的数据库是什么?(mysql)mysql常见的隔离级别有哪些?
读未提交
读已提交
可重复读
串型化
追问:默认隔离级别是什么?(可重复读)怎么实现的?
MVCC机制、快照 (⚠️没说出多版本控制协议)
追问:说一下多版本控制协议
这个还蛮了解的就详细说了一下(最小事务id、当前事务id、当前活跃事务列表、下一个要常见的事务id,理清逻辑还是蛮简单的)
mysql中主键、唯一索引、联合索引它们的区别是什么?
主键:只能定义一个主键
唯一索引:特点就是唯一
联合索引:就是联合。。。
⚠️:感觉这个问题太简单,虽然我各个索引的底层原理都知道,但是就是不知道要说什么,不知道从哪下手。。
SQL语句常见的优化方案有哪些?
⚠️:这个不会,答得不好,就说了优化索引、select的 * 变为具体的每个列
分布式、微服务部分:
你们现在做的项目数据量有多大?
⚠️我其实不知道,瞎说的
几十qps,mysql中一天几千条,主要是工厂中设备的一些参数
数据量其实不大是吧
考虑过分库分表吗?
这里乌龙了一下,我以为是问分布式数据库,哈哈,被面试官纠正了回来。
数据量过大的时候,对数据表进行分库、分表
先分库、再分表⚠️
对,这是一种模式
然后我就说自己不了解了
所以说就是知道有这个东西,但是没用过对吗?
不不不,用过,我的项目中用到过自己实现的分表
--按照数据量来分表的
分表情况下,你是怎么查询的?
⚠️这是一个蛮好的问题,我说我在创建时就将所属的分表号嵌入其中,从而找到对应的表
我看你还用到了Spring Cloud的一些技术栈是吧,都用到了哪些东西呀?
springcloudgateway、nacos(注册中心)
追问:那对于安全登录认证这一块熟悉吗?就是你现在有很多微服务,通过网关把请求转到微服务模块中,怎么识别身份?
我在项目中有做过类似的功能,就是给用户添加AK、SK字段,(⚠️我好像答偏题了他问的是,怎么判断请求是不是恶意伪造的,而我。。暂时没想明白,aksk也还没搞明白,待我好好研究一下)
你是怎么传递的?
明文。。
你的网关还做了什么别的服务吗?比如说降级、日志这些方面的功能吗?
说了流量染色,
追问:这个是通过IP白名单吗?
这个是通过在header头部添加一个字段来保证的,(⚠️这么说ip白名单太合理了,不如顺着说下去,还能跟上个安全认证的问题呼应。。
追问:那它这个会不会被别人劫持?
网络安全嘛,肯定会被劫持,,,,,总没有完美的办法,,不太清楚
对于微服务中常见的RPC框架都知道哪些?
Dubbo,其他有点忘记了
有个项目使用dubbo进行了请求转发
就只是用过是不是?
是
场景题:
假如说要优化web服务的吞吐量,这个服务有个接口,这个接口需要查询数据库或者说要对数据库进行一些crud操作,但是因为这个接口比较耗时,导致性能不好,怎么优化?
(⚠️很少被问到场景题,有点考验临场发挥)
1. 接口比较慢,可能是接口中做的事情太多了,那么我们可以把里面的业务分阶段
分成多个小阶段的话,它的事务型怎么保证?
我觉得这个情况很适合我做的一个任务框架,,,框架能保证任务失败重试
任务是做了幂等吗?
是
(到底该怎么回答,不知道,快去学习一下)
追问:还有别的方式吗?
2. 可能是sql语句可以优化一下😂
我看你用了redis,用在什么场景?
分布式锁
追问:它是怎么实现的?
setnx
这个命令其实是有一些问题的,可能会导致死锁
(⚠️,这个听说过,但是没深入了解,再好好看看)
对微服务常用的比如说限流有了解过吗?
redis中放个计数器算是个方案
要不就用springcloud中的配置配一下就好
springcloud中的熔断策略了解吗?比如一个微服务出现了异常,怎么处理?
一种方式是:打到出错主机的请求直接全部报错
(⚠️,理应有很多中策略,但我不够了解)
消息中间件比如kafka了解吗,有用过吗?
准备用😂
主管提问:
你后续想在目前实习的公司工作还是想出来?
必然出来
评价一下你现在待的公司
如果让你接受一个任务,比一个人负责,你打算怎么着手开展工作?
分享一个你在学习、实习期间遇到有很大挑战性的事情,你是怎么解决的,事后你的反思是什么?
如果你的主管给你安排了一个你不感兴趣的任务,这时你应该怎么办?
再参与一个项目任务的时候,如果你的主管/方案设计师的方案与你的想法不一样,怎么办?
追问:如果实际上就是你的想法是正确的,怎么办?
33
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
