【取他人之面经】腾讯云智后台开发一面
作者:Andrew1219链接:https://www.nowcoder.com/feed/main/detail/8153d4a9dc4d4acaa064eed40af19ad0?sourceSSR=users来源:牛客网
一些碎碎念
最近这段日子,真的感觉自己像个在钢丝上跳舞的人,每一步都走得小心翼翼,生怕一个不小心就摔下去。边实习边投简历测评,这其中的艰辛只有自己最清楚。每天在实习单位忙完一堆工作,拖着疲惫的身体回到家,还得强打起精神筛选合适的岗位,精心修改简历,只为能在众多求职者中脱颖而出。
而学校那边也丝毫不能松懈,各种课程作业、小组项目,还有时不时要和老师同学对接的事项,一件接着一件,感觉就像怎么也忙不完。常常在深夜,当我对着电脑屏幕,眼睛酸痛得不行,还在为了一道测评题绞尽脑汁时,心里会忍不住泛起一阵迷茫和疲惫。
但每当我想要放弃的时候,心底总有个声音在告诉我,这是我喜欢的事业啊。我热爱这个领域,从接触它的那一刻起,就梦想着能在其中闯出一片属于自己的天地。所以,不管前面等待我的结局是什么,我都不能退缩。我要勇敢地去挑战这些未知的事物,用努力和奋斗去浇灌我的梦想。
我知道,找到一份自己真正喜欢的事业并不容易,这条路上会布满荆棘,但路是我自己选的,也只能靠自己一步一个脚印地走出来。我相信,只要我坚持不懈,总有一天,我能站在自己热爱的事业舞台上,闪闪发光。
——————写在边实习边投递暑假实习的第一周 还有很多学校作业等着我
deepseek 的 回答整理
以下是针对面试问题的详细回答建议,结合您的原始回答进行优化和补充:
腾讯云智后台开发一面
- 问有没有投腾讯,为什么想投云智
- 讲一下项目遇到最大的挑战,答了自己项目中做并行分发调度的点
- 你刚才讲到RESTful,RESTful有什么方法,答GET、POST、PUT、DELETE
- URL要怎么设计,举了个具体例子,比如/depart/1,答得不好
- 那RESTful和RPC有什么区别,答得不好
- 根据项目问了更详细的设计,比如调度者怎么对执行者忙碌检测,维护忙碌的状态怎么防止并发修改,执行者很多的情况下怎么维护执行者状态列表,有没有更简单的办法,在面试官引导下基本上回答出来了(应该),提到了一些八股,比如问怎么实现锁,答Java中用synchronized和ReentrantLock,问Redis为什么快,答基于内存、单线程IO多路复用、高效的数据结构,问还有别的原因吗没答上只能想到这些
- 开始问八股,问对什么语言熟悉,说Java和Python
- 问Java和Python的区别,答Python是解释型,Java是编译成字节码再放到JVM运行,JVM中会动态编译成二进制
- 那Java是解释型还是编译型,答更倾向于说成是半编译半解释,扯了下代码缓存会放在元空间
- 问Java面向对象,答封装继承多态
- 问对多态的理解,答子类有公共属性和方法,然后有它们特有的属性和方法,在使用的时候可以上转型,想扯一下依赖倒转原则然后没讲的很清楚
- 问重载和重写的区别,答重载是对同名方法不同传参,重写是子类覆盖父类同名方法
- 问TCP和UDP的区别,答它们都在传输层,在网络层之上,网络层不可靠,TCP相比UDP实现了可靠传输
- 问TCP连接是怎么建立的,答三次握手过程,自己讲了为什么两次握手不行
- 问MySQL事务是什么,答事务是为了解决并发冲突,依次讲了读提交、可重复读、串行化是怎么解决脏读、不可重复读和幻读的
- 问对加班的看法
- 反问,问业务,说网络加速,问自己有什么可以提升的,说我的经验对于这个学历来说可以了(可能是想表达本科?),可以做更难的项目,在精不在多结束后十几分钟查进度进入复试阶段>v<
作者:Andrew1219链接:https://www.nowcoder.com/feed/main/detail/8153d4a9dc4d4acaa064eed40af19ad0?sourceSSR=users来源:牛客网
deepseek 的 回答整理
以下是针对面试问题的详细回答建议,结合您的原始回答进行优化和补充:
2. 项目最大挑战:并行分发调度
挑战核心:实现高并发任务调度时的资源竞争和状态同步问题解决方案:
- 分布式锁机制:使用Redis RedLock算法实现跨节点锁,确保同一任务不会被重复分配。
- 无锁化设计优化:对高频状态更新采用CAS操作(如AtomicInteger)替代传统锁,提升并发性能。
- 状态分片:将执行节点按业务维度分片管理(如Hash分片),降低单点竞争压力。
- 心跳检测+超时剔除:执行节点定期上报心跳,调度中心通过滑动窗口算法检测离线节点,自动触发故障转移。技术细节:曾遇到ZooKeeper临时节点监听实现状态维护,但网络波动导致误判,后改用gRPC双向流实现实时状态推送。
3. RESTful方法
标准方法:
- GET:安全幂等的资源获取
- POST:非幂等的资源创建
- PUT:幂等的全量更新
- PATCH:部分更新
- DELETE:资源删除扩展方法:HEAD(获取元数据)、OPTIONS(查询支持方法)
4. RESTful URL设计规范
设计原则:
- 资源导向:URL表示资源而非动作(如
/departments
而非/getDepartments
) - 层级嵌套:表达资源关系(如
/departments/1/employees
) - 版本控制:在URL或Header中体现(如
/api/v1/departments
) - 过滤分页:Query参数处理(如
?page=2&size=20
)反例改进:原/depart/1
建议改为/departments/1
,复数形式更符合REST语义。
5. RESTful vs RPC核心区别
维度 | RESTful | RPC |
通信协议 | 基于HTTP(应用层) | 自定义协议(TCP/UDP等) |
设计思想 | 资源导向(URI为核心) | 动作导向(方法调用) |
数据格式 | JSON/XML(自描述) | 二进制协议(高效紧凑) |
适用场景 | 松耦合的开放API | 内部高性能服务调用 |
典型实现 | Spring MVC | Dubbo/gRPC/Thrift |
6. 调度系统设计优化
关键问题:
- 忙碌检测:
- 并发控制:
- 状态维护优化:
7-12. Java八股文深度回答
Q:Java是编译型还是解释型?A:Java采用混合模式:
- 前端编译:javac将.java编译为字节码(平台无关的中间代码)
- JIT编译:运行时热点代码由JVM(如C2编译器)编译为机器码(代码缓存区)
- 解释执行:非热点代码逐行解释执行关键机制:分层编译(-XX:TieredStopAtLevel)、AOT编译(GraalVM)
Q:多态实现原理A:
- 静态分派:方法重载(编译期确定,根据静态类型)
- 动态分派:方法重写(运行期确定,虚方法表机制)
class Animal { void eat() { ... } } // 虚方法表索引0 class Dog extends Animal { @Override void eat() { ... } // 虚方法表索引0指向新实现 }
- JVM实现:通过invokevirtual指令查找对象实际类型的虚方法表
13-15. 网络/数据库进阶
TCP三次握手深层原因:
- 防止历史连接:若客户端旧SYN滞留网络,服务端响应后客户端通过RST终止连接
- 序列号同步:两次握手无法保证双方序列号被正确确认(可能导致数据错乱)
MySQL事务隔离实现:
隔离级别 | 实现机制 | 问题解决 |
READ COMMITTED | 每次读创建新ReadView | 脏读 |
REPEATABLE READ | 首次读创建ReadView(MVCC) | 不可重复读 |
SERIALIZABLE | 间隙锁+Next-Key Lock | 幻读 |
16. 加班看法
"我认为技术攻关时期适当的加班是必要的,但更倡导通过提升个人效率和团队协作来减少不必要的加班。例如在项目中通过代码评审减少返工、使用CI/CD自动化流程提升交付效率。对于紧急项目,我会主动承担责任,但同时会思考如何优化架构设计来降低后续维护成本。"
17. 反问建议
进阶方向:
- "您提到可以挑战更复杂的项目,请问团队目前在分布式调度方向有哪些技术规划?是否涉及K8s调度器扩展或自研调度框架?"
- "网络加速领域是否会涉及QUIC协议优化或智能路由算法?我是否有机会参与相关技术预研?"
以上回答结合原理深度与实践经验,既展示技术功底,又体现工程化思维,适合中高级岗位面试。
#牛客创作赏金赛##腾讯云智研发2025实习生招聘#时雨h 的实习 面试记录