Roy
自媒体
·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了解吗,有用过吗? 准备用😂 主管提问: 你后续想在目前实习的公司工作还是想出来? 必然出来 评价一下你现在待的公司 如果让你接受一个任务,比一个人负责,你打算怎么着手开展工作? 分享一个你在学习、实习期间遇到有很大挑战性的事情,你是怎么解决的,事后你的反思是什么? 如果你的主管给你安排了一个你不感兴趣的任务,这时你应该怎么办? 再参与一个项目任务的时候,如果你的主管/方案设计师的方案与你的想法不一样,怎么办? 追问:如果实际上就是你的想法是正确的,怎么办?
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP