2025.3.25 富途

219 阅读6分钟

电话一面

  1. 离职原因
  2. 目前的技术栈
  3. 介绍一下什么是goroutine
  4. 事务的4个特性
  5. Redis有哪些数据类型

3.28 技术一面

  1. 自我介绍
  2. 挑一个你觉得做的比较好的项目,你在其中扮演什么样的角色,如何去克服一些困难的?
  3. 对数据中台了解吗?
  4. 数仓相关这一块之前你负责了什么,对接了数仓API还是直接在数仓里头做一些离线计算。
  5. 为什么看外部的机会,下一段工作有什么期望?目前拿了什么offer
  6. 假设有一个全局计数器count,初始值为0。启动100个goroutine,每个goroutine执行 count++ 操作100次。最终count的值可能是什么(存在哪个范围内)?如何保证结果的正确性?
    • 别的解法,用ch能否实现?
  7. automatic包和加写锁在性能上有什么差异?
  8. 切片相关的代码题分析(slice参考这篇文章即可)
  9. SQL题
给定两张表,
user表(uid,username,password,ctime)
thread表(tid,uid,title,content,ctime),
写⼀条SQL查看发帖最多的前10名用户(uid+username)以及帖⼦数量,并建合理的索引
  1. 嵌套子查询的实现和联表查询,哪个性能更好?
  2. 联合索引是什么
  3. 缓存穿透是什么,如何解决?
  4. 算法题
两个有序数组,求交集
eg: 
[1 3 5 7 9]
[1 2 3 4 5]
output: [1 3 5]
  1. 分析代码的时间和空间复杂度
  2. 如果现在给这样的一个例子,两个数组长度差异较大,能否再优化你的代码?
[1,2,3, ..., 98, 99]
[1, 99]
  1. 代码题
平台费用计算,根据用户在平台上的交易数梯度收费
1-10笔:每笔收20
11-100笔:每笔收10
101-500笔:每笔收5
501以上:每笔收2

eg: 假设用户上个月交易了16笔,则收费为 20*10 + 10*6 = 260
  1. 如果频繁要增加一个新的梯度,有没有更好的实现方式?
  2. 智力题
3框水果,存放水果和梨子两种水果,一筐纯苹果,一筐纯梨子,一筐混合,现在每个框的标签完全是错误的,你只能从任一筐水果中取出一个水果,然后正确将这3框水果归位
  1. 反问

4.9 技术二面

  1. 自我介绍
  2. 看你先后负责不同业务方向的项目,这是出于组织结构调整的需要还是?
  3. 在你过往的工作中,有没有你认为比较有收获,印象比较深刻的事情,对当时你来说是一个困难点,然后你通过什么样的方式去解决?
    • 这个项目的背景是什么,面临什么样的问题,为什么需要做这个事?
  4. 为什么会看外部机会?
  5. 分析这段代码有什么问题,该如何优化
    • 假设heavyProcessing执行时间很长,会有什么问题?
    • 假设我现在要求并发10个协程执行heavyProcessing,该怎么实现
    • 如果现在有20个jobs进来,会发生什么?
func ProcessJobs(jobs <-chan *Job) {
	for job := range jobs {
		resultCh := make(chan Result)
		go func() {
                    resultCh <- heavyProcessing(job)
		}()
		<-resultCh
	}
}
  1. MySQL InnoDB索引的底层数据结构
  2. B+树相比B树有哪些区别
  3. InnoDB数据表一定有主键吗
  4. 主键和唯一索引的区别
  5. 事务满足哪些特性
  6. InnoDB是怎么保证一致性的
  7. 主从同步是怎么保证从库的数据一致性
  8. 假设开启了一个事务,执行了大批量的数据更新操作,还没提交,这些语句的执行结果会写到Binlog,并同步到从库吗
  9. 假设在主库上开启一个事务A,执行把字段a的值从1改为9,没提交;再有另一个语句,不开启事务,直接把字段a改成5,现在去从库中查,会是怎么样的情况?
    • 后面把改为9那个事务A提交了,再去查从库会怎样,分不同时刻分析查询结果
                     T1          T2           T3
语句A(开启事务)     更新为9                   提交事务
语句B                           更新为5
  1. 提交完事务,MySQL就会立马把这次更新刷盘吗
  2. buffer pool数据存在哪里,更新时是怎么样的流程,是怎么保证发生宕机时DB数据不丢失的
  3. 智力题
两个水壶,一个容量5L,一个容量3L,水是无限的,如何利用这两个水壶准确获取4L水
  1. 算法题:leetcode.cn/problems/cl…
    • 分析一下时间复杂度和空间复杂度
    • 有没有其它实现方法
  2. 反问

4.15 技术三面

  1. 自我介绍
  2. 在职还是离职,为什么想要换新工作
  3. 你主要负责的是什么,是固定负责一个模块呢,还是说也变了好多
  4. 技术栈是什么
  5. 说一下你觉得最有挑战性的项目
    • 输出是一段代码吗?
    • 你们负责对接各种数据源系统,去编排获取逻辑吗?
    • 这里头的技术难点主要在哪?还做了哪些优化
  6. MySQL InnoDB的默认索引数据结构
  7. 主键索引和普通索引的区别
  8. 用普通索引查询数据的过程是怎样
    • 回表底层具体是什么实现流程
    • 它为什么要这么做呢,能不能存一个地址或指针,直接找到数据所在的地方
  9. InnoDB默认事务隔离级别下,哪些操作会触发加锁
  10. 假设有一张表tab1,有主键ID和number字段,对number建立了一个普通索引,执行select * from tab1 where number = 9 for update,会在哪些地方加锁?
    • 这个锁是在number这个索引还是主键这个索引上呢
    • 如果表里没有number为9的记录,会出现加锁吗
  11. 代码题1
给定一个字符串S,只能在上面执行两个操作:
1. 从S头部删除一个字符,加入字符串T
2. 从S尾部删除一个字符,加入字符串T
要求构造一个字典序最小的字符串T

eg:
input: ACDBCB
output: ABCBCD
  1. 代码题2,分析一下你的时空复杂度
给一个可能存在重复元素的乱序整数数组,找到其中一个或多个数,满足:
1. 这个数比其左边所有的数都大
2. 这个数比其右边所有的数都小

eg:
input: [5,1,4,3,6,8,10,7]
output: 6
  1. 智力题
有一条河流隔开了一个村落,河东有60w人,河西有40w人,假设随机挑选一个人,拨打电话给另一个人,每天有100w通电话,求其中跨河的电话有多少通
  1. 你认为做好开发工作最重要的三要素是什么
  2. 你的优势和不足是什么
  3. 最近在学习什么