蚂蚁 国际支付 一面电话面
背景
杭州双非一本,有字节训练营项目(红包雨),实验室项目,现在在字节头条实习(简历没提),不过结束后我才知道面试官就是微信加我的那位,所以等于是已经解过我了
岗位是java开发
面试
- 自我介绍
- 问红包雨项目
被揪出一个项目做得不好的地方,然后还聊了一下go的channel和自旋锁 - redis为什么快
答:自己对redis不是很了解,在我的感性认知下,在redis的场景下,通常来说io是瓶颈,他后面处理是单线程处理等等
然后提了一下上下文切换和现在的redis有多线程io - 还有其他的么
答:我觉得最关键的就这个了,其他的就那些八股文背的了 - 知道的排序有哪些,空间复杂度和时间复杂度分别是多少
把排序基本上讲完了,然后提了一下自己有个仓库写了这个 - 说一下通排序
说了桶排序的过程,然后说桶排序时间复杂度比较难算,还取决于你桶是咋样的就不算了 - 了解过二叉搜索树么?
聊一下二叉树搜索树怎么生成,为什么二叉搜索树查询快 - 进程间通信的方式
感觉答得不是很好,说了管道、共享内存、消息队列,socket犹豫了没说 - 说一下共享内存
说了一下共享内存的过程,然后聊一下信号量和锁 - 自己有使用过这些通信方式么
答: 学校的os实验课就有用到,自己还有个git仓库放了实验的代码,需要看一下么
然后面试官说想看,但因为切不到视频面就算了 - 你是不会java是么
答: 写过一些java,之前老师让写个todolist,自己当时就会个c++,搜了一下就学了一下java,然后写了一个jdbc和用servlet写了个restfulapi的框架,基本上属于没咋学的地步吧 - 我看你会的语言挺多的,先不管学得有多深,可以和我聊一下各个语言有什么不同么,他们分别有什么应用场景么,像java和go有什么不同?
从使用者的角度去吐槽了一下c++和java的包管理,然后聊了一下c是我感觉最接近计算机底层的语言,linux和redis源码的一些实现;c++封装一成更符合人的思维方式,也更加方便人去写,说了一些高性能场景和嵌入式的东西,聊了一下面向对象;java就是更上一层,让人能专注去写业务逻辑,但很难做像os之类的东西,提了目前的java生态,大部分的业务场景的性能瓶颈;go聊了一下协程和它的gc,然后到io,提了一下云原生不是很了解,所以讲了一些微服务,然后吐槽了有些业务go其实并不是很好写;rust无脑吹!说了性能,和能函数式编程也能面向对象和面向过程,然后提了pingCAP的tikv和tidb,以及linux的一些模块打算用rust来写,聊了一下rust的所有权 可变不可变 生命周期。反问
- 是交叉面么
不是,下一面是老板面,没什么问题就两面然后到hr面,如果犹豫要不要的话可能就要加面 - 组里面有写基础架构的么
面试官聊了一下她写了个小工具,然后效果还不错,也有其他组想要接入。但这些东西其实是锦上添花,是你的工作之外的。 - 对于技术栈的选择,是无论什么都选择java么
目前来说还是首选java,之前你也说了语言是一个工具,适合就好,但因为公司内如果很多语言的话其实成本很大,包括一些人员的流失,你不能招一个资深java进来结果让他去写go。 - 你们是如何保证代码质量的,code review之类的是怎么做的,想一些单测是怎么做的
这个说的挺多的,我比较懒就不打了,大概从技术方案的粒度,单测的强要求,review的人选,还有红蓝机房,发现问题立刻回滚而不是先定位问题等角度说了一下如何保证的