东方财富服务端开发暑期实习面试,已拿offer!!
这是一位球友投稿的东方财富服务端开发暑期实习面经,问的内容还是比较多的,难度也相对比较大。下面是正文。
最近参与了东方财富服务端开发暑期实习的招聘,并最终收获了 Offer。整个过程持续了大约一周,从技术一面、技术二面到最终的 HR 沟通,体验下来感觉公司非常注重候选人基础知识的广度与深度,同时也对实际问题的解决能力有较高要求。在此,我将整个面试过程进行复盘,希望能为志在东财或相关岗位的同学提供一些有价值的参考。
背景介绍
- 面试岗位: 服务端开发实习生 (Java)
- 面试流程: 技术一面 -> 技术二面 -> HR -> Offer
- 面试形式: 线上/线下均有,我经历的是线下面试
技术一面
一面的面试官非常和蔼,整体氛围比较轻松。面试时长约一小时,主要围绕 Java 基础、中间件、数据库等核心技术栈进行提问,考察知识的广度。问题由浅入深,覆盖面很广。
Java 基础与 JVM
- 面向对象: 我从封装、继承、多态三板斧切入去聊了挺多,面试官整体比较满意。
- 重载与重写: 我从方法签名、编译/运行期、以及与多态的关联等角度进行了解答。
- 集合与并发:
hashCode()方法的作用是什么?它和equals()方法有什么关系?我回答了其在哈希表中的作用,并强调了两者需要同时重写的原则。面试官追问了哈希冲突的解决方案,我提到了链地址法和开放地址法。TreeSet是如何实现排序的?我解释了其底层基于红黑树,并需要对象实现Comparable接口或在构造时传入Comparator。LinkedBlockingQueue和ConcurrentLinkedQueue的区别?这个问题有点难了,考察了对 JUC 包的熟悉程度,我主要从是否阻塞、内部实现(前者基于ReentrantLock,后者基于 CAS)、容量是否无界这三个角度去回答。
- JVM 内存模型与垃圾回收:
- “介绍一下 JVM 的运行时数据区”,我按照线程共享和私有的方式进行了划分和介绍。
- “为什么要进行垃圾回收?” 这是一个引导性问题,之后面试官深入问了 CMS 和 G1 回收器的核心区别,我从应用场景、回收目标(停顿时间 vs 吞吐量)、内存布局(连续 vs 分区)等方面做了对比。
数据库
- 事务特性与隔离级别: “谈谈数据库事务的 ACID 特性是如何实现的?” 我分别解释了原子性(Undo Log)、持久性(Redo Log)、隔离性(锁/MVCC)和一致性(由其他三者保证)的底层原理。紧接着,面试官让我说明了 SQL 标准的四种隔离级别以及它们分别解决了哪些并发问题(脏读、不可重复读、幻读)。
- 索引与调优: “B+树的结构是怎样的?为什么数据库索引常用它?” 我从非叶子节点只存索引、叶子节点存储数据且形成有序链表等角度,分析了其在范围查询和 I/O 效率上的优势。面试官还让我分享了一些 SQL 调优的实际经验。
- 分布式锁: “如果让你用 MySQL 设计一个分布式锁,你会怎么做?” 我提出了利用主键或唯一索引的唯一性约束来实现,并简单介绍了具体的方案。
缓存
- 高可用与持久化: “Redis 如何保证高可用?” 我介绍了主从复制、哨兵(Sentinel)机制和集群(Cluster)三种模式。接着,面试官问了 RDB 和 AOF 两种持久化策略的优劣和适用场景。
- 缓存生产问题: 经典缓存三件套(穿透、击穿、雪崩)的成因和解决方案是必考题。我结合布隆过滤器、缓存预热、热点数据永不过期、加锁更新、以及限流降级等策略进行了解答。
- 数据结构与热点 Key: “ZSet 的底层数据结构是什么?” 我回答了跳表(SkipList)和压缩列表(ZipList)。面试官进一步问了热点 Key 问题的解决方案,我提到了多级缓存、本地缓存以及将热点 Key 打散等方法。
其他
- RocketMQ: “请介绍一下 RocketMQ 的整体架构和核心组件”,我说明了 NameServer、Broker、Producer 和 Consumer 的作用。
- 网络与框架:
- HTTP 与 HTTPS 的核心区别是什么?我从安全性、证书、端口和连接过程等方面进行了解答。
- Nginx 常用的负载均衡算法有哪些?我列举了轮询、加权轮询、IP 哈希等。
算法手撕
- 题目: 零钱兑换 II (LeetCode 518)
- 要求: 给定不同面额的硬币和一个总金额,计算可以凑成总金额的硬币组合数。
- 分析: 这是一道典型的完全背包问题,考察动态规划能力。我定义了
dp[i]为凑成金额i的组合数,并写出了状态转移方程。虽然一开始有些紧张,但在面试官的引导下最终完成了代码。
一面小结
一面主要考察候选人技术栈的广度和对基础知识的掌握牢固程度,问题多但通常不会无限深入。建议准备时要全面复习,对每个知识点都要有清晰的理解。
技术二面
二面在一天后进行,面试官看起来是部门的技术负责人,气场很强。这一轮不再局限于八股文,而是更侧重于对项目经验的深入挖掘、对技术原理的抽象理解以及解决复杂场景问题的能力。
项目与实习经历深挖
面试官花了大量时间在我的实习经历和项目上,问题非常细致:
- “介绍一下你参与的那个秒杀项目,它的整体流程是怎样的?”
- “在你的项目中,分库分表是如何实现的?基于哪个中间件(如 Sharding-JDBC)?分片键是如何选择的?”
- “秒杀场景下如何解决超卖问题?库存一致性是如何保证的?”
- “你负责的模块中,遇到过最有挑战性的问题是什么?你是如何分析和解决的?”
- “你们的系统 QPS 和响应时间大概是多少?做过压力测试吗?”
这一环节不仅要求你对项目了如指掌,更要展现出你在项目中的思考和成长。
框架
- “谈谈你对 Spring 框架的理解”,这个问题非常开放,我从 IOC 和 AOP 两个核心思想切入,阐述了它们如何解耦和简化企业级开发。
- “Spring AOP 是如何实现的?” 我回答了基于 JDK 动态代理和 CGLIB 两种方式,并说明了它们分别针对接口和类的代理机制。面试官追问:“动态代理只能用反射吗?”
- “Spring Boot 加载配置文件的优先级了解么?”我只提到当前项目根目录下
config/子目录的配置文件优先级最高,其他的有点忘了。
分布式
- “在分布式系统中,如何生成全局唯一的 ID?”,我列举了 UUID、数据库自增、Redis 生成以及雪花算法(Snowflake)等方案,并重点分析了雪花算法的构成和优缺点。
编程语言
- “Java 里有协程(Coroutine)这个概念吗?你了解过其他语言的协程实现吗?” 这个问题考察了技术的视野和前瞻性。
- “除了 Java,还学习过其他语言吗?掌握程度如何?”
算法手撕
- 题目: 合并两个有序数组,并求出中位数 (类似 LeetCode 4. 寻找两个正序数组的中位数)
- 要求: 时间复杂度需要达到 O(log(m+n))。
- 分析: 这道题的难点在于时间复杂度的要求,暴力合并再找中位数是无法满足的。正确解法是利用二分查找的思想,在两个数组中寻找合适的分割线。这道题对算法思维的要求比一面高出不少。
二面小结
二面是压力最大的一轮,面试官非常聪明,能迅速抓住你回答中的关键点并进行延伸。这一轮的核心是考察你的项目真实性、解决问题的能力以及技术思考的深度。单纯背诵八股文很难过关,必须有自己的理解和沉淀。
HR 沟通与总结
二面的技术部分结束后,HR 进行了简短的沟通,主要是一些常规问题:
- 对工作地点有什么要求?
- 对金融和证券行业有什么了解?
- 未来的职业规划是怎样的?
- 目前有拿到其他公司的 Offer 吗?
整个过程比较轻松,主要是为了了解候选人的稳定性和求职意向。
参考资料
下面这几篇文章基本涵盖了上面提到的绝大部分面试题的参考答案(注:这部分为 Guide 补充):
- Java:
- Java 基础常见面试题总结(上)(Java 语言的基本概念、语法、数据类型、变量、方法等)
- Java 基础常见面试题总结(中)(面向对象基础、字符串、对象的比较与拷贝等)
- Java 集合常见面试题总结(下)(
HashMap、ConcurrentHashMap等核心集合) - Java 常见并发容器总结(
java.util.concurrent包中提供的并发容器,例如LinkedBlockingQueue、ConcurrentLinkedQueue等。) - JVM 垃圾回收详解(重点)(JVM 的垃圾回收机制,包括堆空间结构、内存分配与回收原则、垃圾回收算法、以及 CMS、G1 等主流垃圾收集器的特点)
- 数据库:
- MySQL 常见面试题总结(MySQL 基础、存储引擎、事务、索引、锁、性能优化等)
- Redis 常见面试题总结(下)(Redis 事务、性能优化、生产问题、集群、使用规范等)
- 框架:
- Spring 常见面试题总结(Spring 基础、IoC、AOP、MVC、事务、循环依赖等)
- SpringBoot 常见面试总结(星球专栏《Java 面试指北》中的一篇文章)
- 分布式:分布式 ID 介绍&实现方案总结
- 系统设计:如何设计一个秒杀系统?(星球专栏《后端面试高频系统设计&场景题》中的一篇文章)
最终感想与建议
从这次面试经历来看,我总结出东方财富在招聘时比较看重以下几点:
- 扎实的基础: 无论是 Java、JVM、数据库还是网络,基础知识都是面试的重中之重。
- 深入的理解: 不仅要知其然,更要知其所以然。对框架、中间件的底层原理有深入理解会非常加分。
- 真实的项目经验: 项目经历是展示你解决问题能力的最佳舞台,一定要准备充分,能够清晰地阐述项目的背景、难点和你的贡献。
- 优秀的编码能力: 两轮技术面都有算法题,说明公司对候选人的编码基本功有明确要求。
最后,希望这篇复盘能对大家有所启发。求职之路不易,保持学习,不断沉淀,祝愿各位都能拿到心仪的 Offer!
东方财富服务端开发暑期实习面试,已拿offer!!的更多相关文章
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- Swift3.0服务端开发(五) 记事本的开发(iOS端+服务端)
前边以及陆陆续续的介绍了使用Swift3.0开发的服务端应用程序的Perfect框架.本篇博客就做一个阶段性的总结,做一个完整的实例,其实这个实例在<Swift3.0服务端开发(一)>这篇 ...
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
常量,字段,构造方法 常量 1.什么是常量 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...
- 从架构师视角看是否该用Kotlin做服务端开发?
前言 自从Oracle收购Sun之后,对Java收费或加强控制的尝试从未间断,谷歌与Oracle围绕Java API的官司也跌宕起伏.虽然Oracle只是针对Oracle JDK8的升级收费,并释放了 ...
- 微服务项目开发学成在线_day01_CMS服务端开发
05-CMS需求分析-什么是CMS 什么是CMS?CMS (Content Management System)即内容管理系统,不同的项目对CMS的定位不同.CMS有哪些类型? 每个公司对每个项目的C ...
- 俯瞰 Java 服务端开发
原文首发于 github ,欢迎 star . Java 服务端开发是一个非常宽广的领域,要概括其全貌,即使是几本书也讲不完,该文将会提到许多的技术及工具,但不会深入去讲解,旨在以一个俯瞰的视角去探寻 ...
- 在线教学、视频会议 Webus Fox(2) 服务端开发手册
上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...
- Android 服务端开发之开发环境配置
Android 服务端开发之开发环境配置 这里是在Eclipse的基础上安装PhpEclipse插件方法,PHPEclipse是Eclipse的 一个用于开发PHP的插件.当然也可以采用Java开发a ...
- Swift3.0服务端开发(三) Mustache页面模板与日志记录
本篇博客主要介绍如果在Perfect工程中引入和使用Mustache页面模板与日志记录系统.Mustache页面模板类似于PHP中的smarty模板引擎或者Java中的JSTL标签.当然Mustach ...
- 如何有效快速提高Java服务端开发人员的技术水平?
我相信很多工作了3-5年的开发人员都会经常问自己几个问题: 1.为什么总是感觉技术没有质的提高? 2.如何能够有效和快速的提高自身的技术水平? 3.如何进入到一个牛逼的大公司,认识牛逼的人? 这篇文章 ...
随机推荐
- [每日算法 - 华为机试] leetcode463. 岛屿的周长
入口 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer.https://le ...
- APT32 RTC+低功耗调试笔记
1.项目需求 采用APT32F1023单片机,内部27K时钟驱动RTC,内部6M定时器作为主频.周期检测外部供电是否恢复,如果恢复则使用正常工作模式,否则仅开启RTC,关闭其他外设,进入低功耗待 ...
- 端口telnet不通排查过程
现状 简单描述下最近在做啥,我手里维护的一些系统的线上服务器,还在使用centos7,7.3/7.6/7.9都有,运维侧选定的替换系统是openEuler20.03-LTS-SP1.按理说,运维直接在 ...
- rabbitmq的消息的有顺序性
一.rabbitmq:拆分多个queue,每个queue一个consumer,就是多一些queue而已,确实是麻烦点:或者就一个queue但是对应一个consumer,然后这个consumer内部用内 ...
- 使用JSR303进行校验
4.JSR303 1).给Bean添加校验注解:javax.validation.constraints,并定义自己的message提示 2).开启校验功能@Valid 效果:校验错误以后会有默认的响 ...
- Eclipse 中 JAVA AWT相关包不提示问题(解决)
原因: 由于在2021年7月15日 OpenJDK管理委员会全票通过批准成立由Phil Race担任初始负责人的 Client Libraries Group(客户端类库工作组). 新的工作组将继续赞 ...
- elemengui分页
<!-- 分页模块 --> <template> <div class="block" style="margin-top:20px&quo ...
- python爬虫,beatifulsop获取标签属性值(取值)案例
前面的案例里,均采用正则匹配的方式取值 title = re.findall('">(.*?)</a>', i, re.S)[0]#标题 url = re.findall( ...
- 创建第一个属于自己的JavaWeb小程序吧
需要使用的 技术 工具: idea 2022 开发工具 MySql 5.6 数据库工具 Apache Tomcat 8.5.85 web应用部署工具 主要功能有: 用户登录 用户注册 展示列表 ...
- Go工程选择开源分库分表中间件可用性测试
近期在寻找Go工程可以用的开源分库分表中间件,找了3个:ShardingSphere-Proxy,Kingshard,Gaea,下面给出测试过程和对比结果 ShardingSphere-Proxy h ...