27届腾讯wxg客户端二面面经
有了准备之后面的挺不错的,反正我是聊嗨了反问面试官的时候他也认可我的业务和技术,希望能过
无手撕,也不算拷打,全称在问对实习内容和项目细节的考察,因为我实习做的是智能体开发,就围绕这块做了挺多提问和设想。面试前一周都紧张得想吐,高强度刷算法和八股,项目,面经,感觉一个小时怎么能聊满,实际聊下来一旦聊嗨了感觉一眨眼过去了,我还没讲够他就说时间差不多了(约的1h),还是自己吓自己
面试官人也挺好,没遇到过压力面,wxg客户端团队都这么尊重人吗我哭了;不对!他全程没开摄像头,不会被kpi了吧xdm别搞我哭了;焦虑等结果ing
-----------------------------------------------------------------------------------------
0.闲聊,看我当下能否快速从现在的公司滚蛋到他们那去,自我介绍,为什么大二决定就业这个方向
1.我看你实习期间做的是智能体开发,能聊聊你开发的智能体相关内容吗? -- 全是我做过的,顺手拈来,以教学的感觉聊了如何开发
2.遇到了哪些问题,如何解决的 -- 智能体由于跟着mentor做的模块比葫芦画瓢几乎没遇到过问题,landing期学的也比较深入,这块没问题。实习期间最大的问题是测试那边和pm,产品经理有时候要
3.如果我现在要做一个地图导航的智能体,该怎么做 -- 仿照我做AI翻译的工作流进行类比开发
4.工作流如果很长的话要传的参数应该很多吧,你该如何解决这个问题 -- 实际开发中没遇到过,但我设想可以通过要么加一个精简参数的智能体,随时监控哪些参数无用给他精简掉,类似垃圾回收;另一种设想是通过多个智能体并行的方式把大量参数拆开,后续哪个模块需要哪些参数只找特定的智能体,不用线性的把所有参数都一节节传递
4.1.你说工作流中的智能体为什么要选择豆包呢,gemini之类的有考虑过吗 -- 不稳定,同时受国际因素影响随时停了对业务影响大,我做的ai翻译也没有说必须哪个模型才能解决,其实通用大模型都可以,豆包的话主要是mentor用的就是这个,我和他保持一致出了问题也好问
4.2.平时有用到ai编程吗,怎么用的 -- 先定需求,写注释,根据注释给我生成部分代码,不要直接要一个大模块的代码
4.3有试过用ai去重构一个项目的大模块吗 -- 不会让ai完全自主负责大模块,一般都是把某个模块下的某个方法,把具体怎么改告诉他,把需求细分,不要完全相信ai;ai通常用于报错修改或配置,相比传统cv到csdn搞半个小时高效的多
5.看你这两个项目,咱主要聊聊你的第一个项目把,你这个项目的项目背景是怎么样的,有什么亮点 -- 坦白背景是为了千万级/亿用户的场景跟着知识星球的文档做的项目,亮点的话是美团leaf分布式id生成方案,(给他详细介绍了两种分布式id如何生成,个有啥利弊),还有分布式事务如何保证数据一致性,比如mysql和es中的数据通过mq的事务消息保证分布式事务的一致性,把mq事务消息原理讲了下。
6.除了雪花和号段模式,还有什么好的分布式id生成方案吗 -- 思考10s,我了解的能保证稳定且好用的就这两种,其他的方式可能都有些缺陷(因为美团技术文档的前言介绍了几个id生成方式但都有缺陷,我就没看没用的东西直奔主题,早知道看看了,讲下为什么不用,从而体现我深度思考的能力)
7.你还了解什么除了mq其他的保证分布式数据一致性的方案吗 -- 还是mysql与es的场景,通过canel伪装从库监听mysql的binlog日志,及时推送到es;
8.那如果此时突然来了个高并发,你这个系统该怎么处理呢? -- (大哥我做这个项目的初衷就是为了亿级流量,还能再高到哪去),把第二个项目如何做秒杀系统给他讲了讲,页面静态化处理,内容分发网络,前端校验,后端mq,redis,caffine,兜底策略熔断,加硬件服务器。
9. 问的具体忘了,大致是如果超出承受范围如何监控 -- 直接对线我这个项目本身就是为了应付大流量的,哪怕只有100个用户也会走缓存,mq,来一亿个也能承受的住,在接口设计之初就考虑到高并发问题做了针对性开发,如果真来了10亿的用户,那就走兜底策略熔断,运维及时监控调整
10. 聊点更基础的,c/c++了解吗 -- 打算法竞赛常用,基本语法与stl库了解,内存管理这些深入的没了解过,主攻java
11. java的threadLocal了解吗 -- 可算问到我爽吟唱的部分了, 从threadLocal应用场景,到底层数据结构,到为什么会内存泄漏,到gc四个类型,到只有线程池中的线程会造成内存泄漏问题,普通创建和销毁线程线程内的threadlocal不会内存泄漏,给他聊了个透(上次引用类型和例子没学明白,现在我是这方面的超级高手,阿里p8来了也带给我老老实实听讲坐下!)
12. 线程池怎么实现的 -- 具体的实现executor是executor实例化executor类,设置相关七大参数,讲了下七大参数有哪些
12.1 线程池的具体工作流程是怎样的 -- 访问量有小变大一步步给他讲了下各个参数如何发挥作用,核心线程数不会销毁,核心线程满了就放阻塞队列里,阻塞队列满了就再创建线程到最大线程,再多就拒绝,请求啥时候减少了过了过期时间最大线程数就会销毁到核心线程数
12.2.那你说如果核心线程数,最大线程数,阻塞队列都满了后的请求该怎么办,直接拒绝掉吗 -- 应该是会阻塞(思考了下)不对,应该是直接拒绝,因为线程阻塞通常在阻塞队列中,再来请求应该是拒绝
13.怎么监测发生内存泄漏 -- 说实话正常都是用第三方工具监测,实际开发中没有人会从头手动排查哪里有内存泄漏;或者测试过程中发现cpu和内存总是飙高gc频繁,第一时间应该就考虑发生了内存泄漏及时排查
14.你认为第三方工具是怎么实现监测内存泄露的 -- 哦原来是问这个,不会,但猜测通过标记强引用和软引用,如果这俩引用无法访问到且无法被gc回收可能就会标记从而实现监测功能
15.了解协程吗 -- 在java21引入协程,同时kotlin原生支持协程,协程是用户级别的,不需要os从用户态到内核态去创建和销毁,比较轻量级,然后详细讲了下进程和线程的区别,这次先讲原理再讲真实案例(钉钉和飞书是俩进程,但钉钉内截图和录音是俩线程共享进程内堆和方法区的资源)
16. 讲的有点乱,没听懂协程和进程的区别 -- (开玩笑我上次面试就问进程和线程的区别,我专门搜了进程,线程,协程的区别,我用最专业的方式给你讲你没听懂?) 强调进程通过os操作,协程通过程序员手动操作,比较轻量级
17.协程与线程间的关系是怎样的/协程是如何工作的(忘了问的啥意思了) -- 因为我平时也没有用过协程都是学习过程中看的,我猜测协程与线程的关系和线程与进程的关系一样,多个线程协助进程,多个协程协助线程(之前好像看过但应该不准确)
18.有了解客户端开发相关的知识吗 -- 就像我在自我介绍的时候提到的,从收到二面以来就在做安卓原生的小demo,当时想开屏幕共享就是给您演示这个,具体用sharedPreference实现了安卓数据的存储,页面跳转功能,列表和提示词弹出的功能
反问:
1. 咱基础微信部门还挺大的,我如果有幸加入该团队主要负责什么业务 -- 不会碰微信核心,做些flutter组件,比如苹果的液面组件
2.对我第一次线上面的建议,哪些地方能改进 -- 其实实习和项目都没啥问题,挺好,唯一担心就是大三有些课可能没学基础知识不牢
3.解释除了os和计网几乎都学完了,由于选修课分大二全修满了,自己也对os和计网常见问题有了解
4.计算机图形学学过吗 -- 学校没开这门课程
5.你不是计算机的吗 -- 我们学校培养计划里没有开设这方面的课程
-----------------------------------------------------------------------------------------
有些记不太清了大体就是这些问题,感觉比第一次面试强太多了,给我一次吧腾讯求求你了卑微求offer不给我我就紫砂
作者:Kaltist链接:https://www.nowcoder.com/feed/main/detail/a55a2204d7a043219c03054bbedb5cde?sourceSSR=userswxg客户端二面面经