转行自学的2021秋招面经汇总(Java开发/运维开发)

个人情况

211计算机硕 本科材料 计算机基础知识很差(四大金刚完全没学过) 考研纯粹为了混计算机学历 自学半年Java 国企实习经历 无Java项目经验 最后拿了小米的运维开发offer
面试题答案待施工。。。

Java开发

金山云(四面通过)

一面
  • HashMap底层实现,扩容机制,如果移除元素,红黑树会不会转回链表?
  • 锁,轻量级锁,自旋锁的代码举例实现
  • 手撕代码,从一些题中选2道
    • 遍历树(我选了这个保底,他问是不是因为这个简单,被发现了=。=然后就让我说了说遍历思路。我说完之后我说可能没有这么简单,会有一些限制条件什么的。面试官问你觉得可能会怎么限制?说了之字型遍历,不让用递归之类的。面试官笑了笑说并没有,就是单纯的遍历)
    • 字符串子串匹配,这个应该用KMP算法去做,但我当时清楚地记得前一天看到了KMP算法但是由于太复杂就没继续看,于是用了一种比较暴力的算法挨个匹配,手写了一半被拿走看了。
    • 实现生产者消费者
    • 实现死锁
    • 还有一些题目不记得了
  • linux操作,记录ip地址的log日志文件里找到出现频率最高的ip,用awk去做
  • AOP IOC
  • concurrenthashmap是完全线程安全的吗
  • concurrenthashmap源码
  • 后期的一些学习规划
    莫名其妙地就通过了,这是我第二个通过一面的公司,上一个是京东,还是挺感动的,因为前一天刚被微步在线一面挂了。。。
二面

很明显的压力面试,面试官很严肃,上来先diss经历,然后概念性的都没问,直接出了一道场景题:
可以实时获得延迟数据,要求得到5min中的数据里90%数据的延迟上限。不能使用数据库。
上来是懵的从来没遇到过直接问应用题的。在面试官的引导下说了一种比较差的方法,当时还是挺崩溃的,面了一个多小时都在面这道题,一直提出方案一直被否定。后来跟面试官交流的时候他还是告诉了我考点。现在整理了一下:

  1. 解决5min数据的问题,如何保证是5min以内的数据?我是用了一个队列,每次数据入队时加上时间戳,然后在计算时出队直到队顶元素的时间戳符合5min以内。
  2. 排序方法,快排没被接受,选择堆排。
  3. 存储方面除了队列还用了一个堆,出队时也在堆中删除元素。
  4. 当时说的是一直去掉堆顶元素直到去掉了队列长度的10%,堆顶元素就是上线。面试官说能不能不删掉元素。面试时没想到,后来跟学长聊的时候学长提到一个算法题,数据流中位数,跟这个很像,用两个堆来解决,一个堆就保存最大的10%的数据,不断调整。
  5. 最后面试官说让堆有序就可以了。我说那就是多路查找树,面试官说可以(我心想这不就是数据库底层实现??。。),但还有更好的方法。
    目前还没有找到更好的方法。。
换部门一面

可能因为简历上写了做过Prometheus Grafana Kubevirt这种云原生的项目,所以虽然二面表现巨差也稀里糊涂被通过了。面试官还说可以考虑下他的部门,因为当时毕业设计的研究内容也很相关,就换部门又面了一遍。

  • 手写冒泡排序
  • 手写 找到数组中相加等于target的两个元素下标
  • 看到项目里有api开发的内容,问openapi是什么
  • 会不会golang?不会……说语言倒不是问题
  • Prometheus和Grafana是什么
  • 团队协作开发?怎么使用git(说了git提交代码,同步代码的一套流程)怎么合并分支(我喜欢用rebase)
  • awk应用
  • 问问项目和学习方法
换部门二面

可能是因为之前的面试官觉得我还行,换部门之后的面试很宽松。二面像是走了个形势,跟主管聊了聊(还是校友),问了问高可用集群api的项目,问我资源是什么(我说不知道,需求文档里这么写的。。)。基本没有什么技术问题,还特别友好地跟我讲了讲这边跟小米那边的工作内容(因为当时还有个小米的offer,这俩算是兄弟公司,都在一个园区里),让我自己考虑下。
后来就是hr面,说了说薪资(比小米高了1k)然后工作内容(to C to B的区别)。比较有挑战性,工作内容还是我想要做的,主管人也很好,其实真的真的很想去。。但是当时已经有小米的offer,父母觉得我能拿到小米已经很不可思议了,不敢放弃(毕竟小米知名度还是蛮高的。。)就一定让我去小米。后来难过了很久……希望以后努努力还有机会??

京东

一面(电话面试)

京东当时牛客网上说都是kpi面试,非常的水然后直接不通过。非常紧张地接了电话。问的确实还都挺简单的。

  • Java跨平台的原理?(JVM,编译)
  • 一些非常简单的基础知识,实在不记得了
    最后莫名其妙通过了,可能真的是kpi吧。
二面挂(视频面)

二面跟一面差不多,着重考了一下同步机制。感觉基本都答上来了。反问中问了下工作内容,很详细地给我介绍了他们部门的工作,然后把我挂了。。

微步在线(一面挂)

面试官人很好,还给我提了很多建议,不过明显看出我是短时间自学的java。。

  • 堆如何构建,从底向上还是从顶向下
  • 重入锁实现 多线程如何获得锁
  • 红黑树左旋 红黑树如何平衡 (这个我全回答上来了,面试官笑了下说我是今天第一个能解释清楚红黑树的)
  • 线程池参数,如果一直往里放任务会怎么样,阻塞队列满了呢?maximumsize如何使用
  • jvm 垃圾回收算法,新生代老年代用的是什么,垃圾回收器,双亲委派模型
  • hashmap的put 扩容 rehash 为什么要用位运算 扩容transfer的时候是怎么复制的,是否每个都要计算rehash
  • concurrenthashmap的结构,cas+synchronized,其实是有segment
  • equals如何重写
  • 多路平衡树 他的叶子结点和非叶子结点有啥区别
  • java基本类型有几个,int long float double占几个字节
  • AOP和IOC
  • 反问,问了下对自己的建议,面试官说我的数据结构还行,spring框架这种没学过比较伤,想好要不要搞研发。

天融信(二面通过)

一面
  • 抽象类和接口的区别?抽象类中一定全是抽象方法吗?
  • spring的基本知识
  • Java反射机制
  • 面向对象特性
  • volatile使用
二面
  • JVM 垃圾回收,有没有调优过?
  • 为什么选择来面试本公司
  • 项目中遇到的困难, 怎么解决的
  • 反问,问了工作内容

携程(提前批,一面挂)

  • Java内存模型
  • Mysql底层数据结构
  • 公平锁
  • 多线程的实现,线程池
    当时还啥都不会呢。。。

字节(提前批,一面挂)

当时也是啥都不会,现在想想真不应该赶提前批,会留下很不好的记录。。

  • 说说Java的容器
  • HashMap底层实现,源码看过吗,怎么扩容
  • 线程池

祖龙娱乐(一面挂)

问的我很懵逼,都是没听过的,基础太差。

  • 多线程可能出现什么问题
  • 如何避免指令重排序
  • volatile除了避免指令重排序还有什么功能
  • 如何避免死锁
  • 银行家算法代码如何实现
  • 高可用的资源是指的什么
  • 客户需要资源迁移如何做????
  • 怎么做的容灾
  • 在网络编程中传输int键值对怎么实现???
  • Java如何序列化
  • 为什么要重写Object类的equals方法
  • 说一说实现Map的类
  • 这些类的区别?应用?

京东方

  • 抽象类和接口的区别(国企真的很爱考这个问题。。)
  • 如何遍历HashMap
  • 做过Spring项目吗
  • 其他的忘了

运维开发

Java开发太难了,后来因为跟实习做过的项目比较相关,临时转了运维开发,要简单一些,不过就是Java知识都不考了。主要考网络和操作系统,linux命令,问题排查这样的。运维开发各个公司的定义还不一样,有的就还是运维,有的是开发运维平台。

小米(二面通过)

一面(技术面)
  • 如何查看cpu状态?cat /proc/cpuinfo 除了top呢?
  • 路由表如何查看 route -n
  • 说一说linux有什么目录
  • cookie和session区别?
  • http状态码
  • http和https区别,为什么要用非对称密钥加密对称密钥?
  • 非对称加密和对称加密的区别?
  • 你的项目如何实现高可用?
  • 在你的项目中从输入url到服务器到返回用户界面的过程
  • get post 其他http请求头?
  • tcp和udp的区别,哪些协议是基于tcp、udp的
  • 没有ip地址只能广播会不会出现什么问题
  • java的继承封装多态
  • hashmap的实现
  • 看你本科不是计算机的,怎么学习的?
  • 写代码,https://leetcode-cn.com/problems/sliding-window-maximum/
    滑动窗口最大值
  • 反问
二面(聊天)

主要聊了聊项目和学习方法还有未来规划之类的。据说小米今年在秋招后期扩招的要求都特底,有的一面10min随便聊了聊就过了。。
最后选择了小米,虽然是运维开发,但还是偏向开发的,也是我比较看好的k8s相关。父母很惊喜,就这样吧。。

映客(二面挂)

Java面试受挫之后改投了运维开发,补录的时候被映客捞起来了。

一面
  • 编译的时候遇到负载突然增加如何查找原因
  • 输入url之后的过程,与项目结合
  • 如果缺少一次握手会怎样,比如浏览器白屏?
  • linux系统理论知识 鸟哥的私房菜
  • 计算机网络 dns解析过程 递归or迭代
  • 设计用户权限控制平台
  • 12个球,有一个质量异常,不知轻重,一台天平称至少多少次能保证分辨出这个坏球是哪个?
    一面答上来一半吧,那个智力题找球的没有想到好办法第一次分了4组,面试官让我之后上网查查3次就找到的方法。查完之后确定我绝对绝对自己想不到……(将天平左右各取一球交换)
    后来跟我聊了聊映客的运维开发的工作内容,闲聊了下我校篮球场,就结束了。
二面
  • git协同开发的流程
  • restful api有什么作用
  • python的包
  • 基础数据结构
  • 完全二叉树和满二叉树
  • 树的遍历
  • 写一下先序遍历
  • 二叉树和链表
  • hashmap底层实现 扩容机制
  • Linux常用命令
  • 对k8s和docker的了解
  • 运维开发 保证高可用
  • go多久能学会
  • 多态的好处
  • 能接受工作内容中运维和开发的占比?
    然后就没信儿了……

网易有道

  • 说下数组链表
  • 说一下栈和队列(网络不太好,一开始听成了栈和堆)
  • Java的集合
  • Java的Map有线程安全的吗
  • HashMap的扩容
  • git如果commit了但是想撤销怎么办(我答得git reset commitID
  • 项目相关,高可用怎么实现的,资源怎么自动迁移到备份节点?脑裂问题?
  • 有没有什么问题
  • 项目相关,怎么做的软件迁移
  • 算法,数据流的中位数,回答两个堆,有没有更好的方法?
  • 字符串计算最大回文子串,提示加#解决子串长度奇偶问题。如果遍历到字母表示是奇数,符号表示是偶数,但统一都用奇数来处理
  • 图,从起点到终点,途中0表示可以走1表示不能走,求最短路径。深度优先搜索 广度优先搜索?提示广度优先搜索是较好的处理方法,伪代码实现。广度优先搜索的时间复杂度是多少?(O(M*N))
  • k8s会多少?
  • 建议学习下golang
    面试官小哥哥还是挺好的,我想不出来的都会引导甚至直接告诉我答案。最后算法题,真的是太紧张了,没写好。感觉都要现场编程ptsd了。。。一旦要写代码就手抖然后一片空白- -
二面
  • TCP讲一下是怎么断开连接的(四次挥手),这其中有什么状态?状态的名字是什么?(不记得状态名字了)
  • 说一下rpmbuild的文件结构和编译过程,给了一个spec文件让讲一下是什么意思,spec执行过程中的一些阶段(post,poeun??不记得单词了,build。。)
  • 深挖项目,高可用是怎么实现的
  • pacemaker遇到过什么问题(脑裂),有没有了解怎么解决?(投票)投票的过程是怎样的,如何确定选择哪个节点?(设置成奇数,超过50%就确定)
  • 迁移软件包的时候遇到的问题
  • 有没有对软件包有源码层面的修改(答了一个gcc高版本某变量名称修改的问题,进一步追问是什么问题,描述不太清楚)
  • 有没有linux调优经验(没有)
  • 面试过哪些公司,看中公司的什么方面
  • 反问
    这一面感觉自己还挺能bb的。就是可能有些地方没有理解面试官想让我回答什么,没有给到面试官想要的答案,可能偏题了。还有一些话反复说,都是比较通俗的说法,应该记一记严谨的学术词汇。
三面总监面
  • 自我介绍,介绍你觉得最重要的一个项目
  • 开源社区,对开源软件怎么理解?开源社区有什么好处,你学到了什么?
  • 进程线程和协程
  • cpu执行程序上下文切换是必定的吗?(没有太听懂,可能是说是否能主动要求cpu执行某个进程?
  • 对团队的期望
  • 对自己未来职业规划
  • 三面技术问的比较少,都是一些主观题。
  • 反问,问了团队构成,运维开发跟运维的区别等等
    面完很快接到hr电话通知已经通过,约年后hr面。
四面hr面

中途改了时间,不知道为啥面试当天没有面试安排,发了个邮件询问了一下,立马给面试了。hr面的面试官很亲切,就跟聊天一样。

  • 对岗位职责的理解
  • 对公司的看法(夸)
  • 找工作比较看重什么
  • 你觉得工作中可能出现什么问题导致你很难受
  • 你会怎么解决这个问题
  • 已经有的offer 薪资 期望薪资
  • 是否能提前来实习
  • 反问

一些不记得是哪个公司的面试题

  • 红黑树绝对平衡吗
  • 你熟悉的一种设计模式
  • 阻塞队列
  • 进程和线程的区别
  • 多线程通信
  • 内存雪崩
  • TCP报文头部信息
  • InnoDB唯一性如何保证
  • 主键和唯一性索引
  • 类加载器
  • 重写和重载分别在类加载的哪个阶段
  • Mysql四种事务隔离级别怎么实现的
  • NIO BIO javaio
  • b+树的优点
  • 二叉平衡树和二叉搜索树

总结

大概34月份开始实习面试,当时真的是什么也不会,真的很对不起面试官。(有个面试官问我SpringBoot启动流程,我居然说直接点run……)字节的提前批面试被重复+冷笑+转笔+战术后仰打击的很崩溃,自己确实是很菜,没有一点基础。6-10月份又回到公司实习,参与了一个华为的项目(对后来运维开发的面试很重要),10月之后离职回家开始背面试题。经历了非常忙碌的一段时间,每天都有笔试/面试,还要复习(其实就是从0开始学)计算机网络、操作系统,组成原理直接被我放弃了,编译原理也压根没管过。面试的时候说的最多的就是不知道。然后也说错了很多(比如说抽象类中必须都是抽象方法)。
但是努力还是会有一点点进步的,能回答上来的问题越来越多,虽然还达不到基本线吧。很怵算法,没有练习过,脑子也不大聪明。小米的手撕代码是暴力解出来的。笔试题除了京东,金山云这种真的出得很简单的,其他都折在编程题上。实在是不会呀。
如果再来一次,我会想提前准备

  1. 坚持练习力扣/牛客,尤其提前熟悉输入输出。
  2. 系统学习算法。
  3. 网络,操作系统基础补上
  4. Java基础也补上,多看核心技术,多看面试题总结答案
  5. Linux操作也好好看看,《鸟哥的Linux私房菜》面试官都推荐
  6. 好好准备自己的实习项目,要明白为什么选这个框架,底层实现原理
  7. 提前尝试一些大厂的实习,哪怕是积攒面试经验也好
  8. 还是从面试题出发,多背多理解,因为面试官很会挖坑
  9. 语言不是问题,关键是自己会的要掌握的很好
  10. 一些场景应用题,不知道怎么准备,可能是本科课程中的作业吧?

跨专业加上学习时间短真的很伤,研一开学我还不知道linux是什么,不知道怎么写程序,当时心态也很崩,每天在宿舍打游戏也不去上课学习。很后悔。。然而没有再次校招的机会了,春招可能还会尝试一下吧。如果不行,对于我来说小米已经很好很惊喜了。当初跨考计算机的时候想着能有个计算机相关的工作就好了,后来在实验室组会的时候,老师问我们之后的工作打算,实验室有人做产品经理,我说的是希望能做研发,如果技术不够就再说吧。没想到最后真的能面过研发岗(小米是运维开发,金山云和天融信是Java开发)。不过人总是不满足的,现在又想得到一线大厂的研发offer。。。
自己做的还是不够好吧,1-6月的居家期间基本都在玩游戏也没有怎么提前准备。但是不甘心么。

你可能感兴趣的:(面向面试学习)