难得一次技术面,Java程序员开发七年,突破自己终获小米offer

前言

从面试到现在已有一个多月了,面试的问题还记得八九成。端午节前刚从上家离职趁着假期有空把面试问题总结一下。主要是记录一下问题,答案三言两语写不完,网上有蛮多文章讲的挺好所以本文不再展开。

技术栈

java, golang, js, python 主要是前面两个。

面试总结

  1. 其他Java团队leader面
  2. 其他Golang团队leader面
  3. 本团队leader面
  4. 总监面

之所以把面试总结放前面是因为头一次写文章没经验下面排版太朴素了,怕大家看不下去所以先简单几句话概况。面试总共4小时,4轮。回忆了一下大概回答了90~95%左右,总体感觉还可以。给我的印象这几个面试官都很专业,问题质量也挺高,人也很nice。

这次面试像是照镜子知道了自身的不足,接下来还需扎实沉淀技术。加强算法能力。理解源码。努力不负每次机会

2年前从sz回到wh 然后才感受到sz的好。属于后知后觉类型。看着以前用友的同事们一个个跳的都挺棒(阿里、腾讯、阿里、百度、京东、美团、网易等等)自己再看下自己感觉在荒野求生。

没啥爱好这几年除了玩玩游戏就是看看技术,也没考虑过人生追求,但是最近半年思考了一下人生突然知道了自己想要什么(都二十八九岁马上奔三了这也太后知后觉了)

统计下数据算个帐

19年wh 投了50+ 面了4个 拿到2个。。大部分是不回复。

17年wh 投了10多个 面了7个 拿到4个。(后来某种原因拒绝了讯飞的offer、选择了某公司)

12~16年sz 数据不记得了。虽然自己是个弱鸡但是感觉工作挺好找。(16年用友)

所以19年wh真是神奇,我一度怀疑是简历太水了,发给sz、hz朋友看他们说还好啊没问题。难道是特朗普贸易战搞的招聘困难?【微笑】

本文标题怎讲

讲个真实的笑话,前一阵子在wh面一家小公司架构师职位 场景:4个人同时面我,一个大桌子,总经理办公室

总经理:你要不要做销售啊 以前做过销售吗?

我:尴尬的说做销售太难了我没这个能力。(【黑人问号】为啥一开始就跟我聊这个,难道我看起来这么没有技术含量?我投了几十个简历了兴奋的来这里你跟我说这?这对的起我认真的态度吗?)

总经理:哦!你公司做硬件产品的啊!(我简历里有写NLP机器人项目)

我:“这是个软件产品”(what the f**k,大哥哥你对我有严重的误解。)

总经理:那就让技术总监来面一下吧(估计是让他没面子了)

开始技术面

他: 介绍一下你做的项目

我: 介绍某个项目的背景,说了下项目是干啥用的,简单提了一下技术栈 大概5~6分钟 因为要互动所以不能一个人说太久

他:GRPC是干什么用的,你们为什么不用http restful来做呢

我:远程调用 基于http2 有4中调用方式 序列化协议采用protobuf(心里想这么多内容了你一个个的问吧)

他:好的,我技术面完了

总经理补了几句总结性的客套话 面试结束

【WTF 这就结束了?】这才15分钟不到?我就这样被淘汰了?嗯是的【微笑】

ok 综上所述 抱着终于得到了一次技术面的心情写下这个题目。

一面 Java

难得一次技术面,Java程序员开发七年,突破自己终获小米offer_第1张图片

主要是Java基础 框架原理

  1. 详述线程池构造方法有哪些各有什么用、ctl、allowCoreThreadTimeOut变量的作用,初始化阶段、大量提交任务阶段、执行完所有任务阶段这写过程。(addWorker过程和其它部分回答得不错 runWorker getTask的一些细节回答的不好。线程池是Java躲不开的问题 网上有很多答案不再细说。)
  2. HashMap数据结构,resize过程,如果多线程去操作会出现哪些问题,1.7和1.8有什么变化,既然提到了红黑树那么来聊聊它和BST、AVL各自有啥特点有啥区别,说一下平衡过程(ok。这个是基础内容网上一大把答案不再细说)
  3. 接下来聊聊concurrenthashmap怎样保证线程安全的1.7和1.8区别(ok)
  4. 线程有几种状态,sleep wait 区别(ok)
  5. synchronized Lock区别,synchronized工作原理对象头、JVM中锁的优化,再聊聊并发包的AQS、公平锁非公平锁 读写锁、CAS和底层的unsafe(ok)
  6. JVM内存结构,堆的内存结构哪些是线程共享的呢,使用过javap命令吗结合这个命令你个谈谈对JVM内存各个区的理解。调优相关。(ok)
  7. 聊一下GC,可达性分析算法、哪些对象可以作为GC ROOT,根据新生代老年代特点的不同来说一下他们适合使用哪些垃圾回收算法。对比一下标记清除和标记整理。(ok)
  8. 类加载器,双亲委派,安全沙箱机制(ok)
  9. 聊聊IO吧,BIO、NIO,IO模型,jvm怎样实现NIO的呢(ok。还好之前略看了一下JVM这一块的c c++代码。多路复用 非阻塞之类的就不细说了。说几个关键点,IO模型参照《unix网络编程》。select、poll、epoll。fcntl)
  10. 巴拉巴拉聊项目牵扯出一堆问题 一致性hash算法、分布式事物、Service Mesh实践、rabbitmq(基本ok)
  11. TCP滑动窗口 ACK机制。(ok)
  12. zuul、hystrix、feign工作原理,springmvc工作原理(ok)
  13. 举例说明spring中使用到的设计模式(ok,掘金有这个文章)
  14. git使用规范、gitflow(ok)
  15. dubbo 相关问题(ok)

二面 golang

难得一次技术面,Java程序员开发七年,突破自己终获小米offer_第2张图片

  1. Golang 的并发模型(回答的一般 M、P、G)
  2. 聊聊gin源码 路由、group、middleware &设计模式(路由的实现用到了前缀树这个回答得不好 ,其它ok)
  3. grpc4种调用方式,你看过grpc golang版源码 client --> server这个过程你讲一下。protobuf协议 GRPC 性能优化,http2 (ok,这个印象深刻在上家公司时候还做过分享)
  4. cap原理,注册中心选型AP or CP。
  5. etcd是CAP的哪种?etcd数据一致性算法是?详述raft协议,发生分区隔离之后会怎样,隔离恢复之后怎样保证数据一致性?(ok,说raft之前先说了一下Paxos 后来引出了Raft 对比一下,然后开始讲raft各种情况 极力推荐去这里看看 raft.github.io/)
  6. 你说看过源码那聊一下gomicro吧(说了一下各种组件每种适合做什么事,讲了一下我们的项目中微服务用到了哪些,上家公司gomicro技术栈是我推动的所以这里回答得还可以。)
  7. 聊一下你们没有采用gomicro的时候你们的微服务是怎样实践的(注册中心发现用的etcd,lease续期、服务降级、限流、熔断、缓存、一致性hash等负载均衡策略实现,GRPC,golang版rabbitmq客户端&断网重连。不像spring cloud或gomicro很多现成的可以用这些都是手撸 当然这是我的团队共同完成的,这过程中收获蛮多所以不要排斥学习另一门语言或者技术栈 往往会对自己打开一扇窗)
  8. golang压测pprof,火焰图,结合项目讲一下架构推演 性能提升点(OK)
  9. 你们项目结构和依赖管理(OK,这里不得不吐槽一下 godep、glide真的不如maven好用)
  10. 遇到过哪些坑(使用etcd过程中遇到的坑,使用不当造成的协程泄露以及如何避免的,watch、lease、空间压缩、等)
  11. 使用golang你印象深刻的是啥(协程,chan、select这是绝壁是巨好用的,defer,panic&reverse)
  12. golang编码规范、日志规范(这里要提一句规范很重要,架构演进的时候做重构深有体会,然而并没有很统一的规范像Java阿里规范那种,对于分包官方并没有给出一个推荐的目录划分方式 所以google然后根据自身体会制定了一个团队内部规范 后来发现掘金有一篇文章有所共鸣并严重赞同 draveness.me/golang-101 日志框架并没有Java直接采用slf4j 下面用 log4j2或logback那么果断,选之又选决定用logrus,团队的QL同学根据需求定制了)

三面 综合

  1. kafka工作原理、零拷贝、分组协调器工作原理、offset相关问题
  2. 链路追踪 SkyWalking、zipkin 各自特点和实现原理,Java探针
  3. mysql 锁、索引、事务,大数据量优化 分表分库方案
  4. redis线程模型 skiplist ziplist数据结构,持久化方案 rdb快照备份的过程(copy-on-write这个回答的不好 我只知道Java的copyonwrite ,Linux fork进程具体操作不清楚)。淘汰策略,缓存穿透 大规模失效解决方案
  5. 手写代码算法题 假设有两种操作符*和- *代表×2 -代表减一,给你两个数 a,b 要求计算出从a经过这两种运算得到b最少多少步 (ok,算法不是我强项,这题刷算法的时候也没做过还好给的比较简单,大概10多秒有思路 几分钟写了一下不太完整 让我讲了讲思路 使用二叉树去做)
  6. 聊一聊感兴趣的技术 未来发展方向(技术方面)

四面 总监

不详述了 就是以下这些问题

职业规划、为什么跳槽、兴趣爱好、了解一下性格、自我评价上一份工作经历等,我也问了一些问题互动了一下。

面试结束,回去等HR通知。

最终拿到offer

这两年的经历一句话概括。

难得一次技术面,Java程序员开发七年,突破自己终获小米offer_第3张图片

对就是这样,不要看轻一个人。

最后祝小伙伴猥琐发育

需要获取资料文档的朋友 可以关注+转发后点击这里免费领取!

难得一次技术面,Java程序员开发七年,突破自己终获小米offer_第4张图片

难得一次技术面,Java程序员开发七年,突破自己终获小米offer_第5张图片

难得一次技术面,Java程序员开发七年,突破自己终获小米offer_第6张图片

你可能感兴趣的:(面试,Java,笔记)