先说下楼主经历:

其实我之前已经写过一篇关于自己秋招经历的文章了,里面有很多面试题,可以作为参考:

今年行情这么差,到底如何进大厂?

下面重新介绍一下自己:

我个人是双非本,去年五月份至今一直在 JD 实习,拿到了 JD 的 offer 后,偶然的机会(boss 上)就开始面试

部门是百度云 cdn 具体好像是做音视频相关的,主要语言是 Java 和我本人相符

一、二、三面两天面完,具体的问题记不清楚了,以下内容仅凭回忆(上班摸鱼写的):

正文

一面面经:2021/1/21 下午五点

是个小姐姐,但是很严肃

  1. 自我介绍
  2. 介绍实习项目、难点、参与的工作
  3. 项目用到的设计模式以及其他设计模式
  4. syn 锁(升级过程、降级?(读写锁)一些底层原理)
  5. 操作系统线程间同步机制
  6. syn 和 lock 区别
  7. 线程池、参数详解?你怎么设置参数(I/O 密集型、计算密集型)
  8. JVM 内存区域
  9. 如何排查一下线上 OOM 问题?
  10. 类加载机制?
  11. 双亲委派?tomcat 如何打破的?
  12. 写代码 1 翻转链表(秒)2 手写快排序 介绍各个排序算法时间复杂度
  13. 在看的书籍?知识?《深入理解 Java 虚拟机》说下最深刻的部分?我说了个 R 大写的 JVM 是如何区分出是引用类型还是基本类型
  14. 反问 大约 47 min

二面:2020/1/22 上午十一点

HR 说的是一个高 T 二面面试我,果不其然,一个秃头大叔。

  1. 自我介绍
  2. 介绍京东实习项目
  3. 项目分布式锁怎么用的?主从的缓存 master 节点 down 了怎么办?(Redlock)
  4. 脑裂问题(配置文件)、数据倾斜(一致性哈希,虚拟节点)、数据分片
  5. 缓存穿透、击穿、雪崩
  6. Redis 哨兵?cluster?
  7. zset 底层,为什么用压缩列表(避免内存碎片),跳表查询复杂度?log(n)(逮住 Redis 真就往死里问啊)
  8. 看你博客里有微服务,讲讲微服务、分布式?
  9. 项目中各个服务之间怎么调用的?我说用 JSF(JSF 是京东内部的RPC通信工具,类似于 dubbo)
  10. 分布式 CAP 定理
  11. 讲讲分布式事务解决方案,各自优缺点(内心。。。还好前几天看过)
  12. 写题 忘记具体是啥了 反正都是属于 easy 的题目,大约 50+min

还有一些回忆不起来了,好像是 Spring 源码的东西,电脑面试没有录音,总之抠得很细,面试官果然是个大佬。。。

三面 2020/1/22 晚上八点半

  1. 介绍自己
  2. 两个栈实现一个队列
  3. 基本上就是一些非技术问题,唠家常、谈理想、问 offer
  4. 可能是我比较能 bb 三面约 1 h 15min

十分钟 HR 联系微信联系说过了,让我等接下来的补笔试、测评邮件

1/26下午收到邮件做完后 HR 叫我安心等待,最迟周五给发 offer。

lz 从去年二月份开始春招找实习,(双非本科学历)到现在差不多过去了一年。大大小小的面试也经历过了不少,也相应的拿了一些公司的 offer,下面是我的一些个人见解加上别的大佬的一些参考,希望能抛砖引玉,如有瑕疵,还请多多指教!

我认为的面试 = 基础 + 能力 + 规划以及一些面试技巧

其实也就是对应着一个人的:过去(学过的知识)、现在(拥有的能力)、未来(规划)

基础

这个就很简单了比如

  1. 最基本的数据结构、算法;
  2. 以Java 为例的一些基础知识:JVM、集合、框架;
  3. 计算机操作系统、计算机网络;
  4. 通用的一些中间件:netty、nginx、redis、MySQL 等。

这些是基本上都要知道的,尤其是一些面试常问的必须要数量掌握,尽管有人认为这是背书,但是连背书都不背的说明态度有问题,肯定是不是被公司接受的。

当然以上说的太笼统了,具体的复习路线可以参考其他大佬的作品,如不嫌弃可以看一下我写过的一些博客 https://blog.csdn.net/weixin_44104367 本文只做一些面试经验相关的总结、概述。

能力

这方面主要是围绕实习、项目来展开的基本上 = 技术硬实力 + 能力软实力。

比如:有实习的

  1. 在实习期间做了哪些事能够证明自己的能力
  2. 如何在开发过程中优雅的书写代码?(其实一些知识譬如设计模式大家都会背,但是能够真正将这个知识落到实地的又有几个呢?
  3. 项目开发过程中如何一步步提升自己的技术能力、业务水平?
  4. 如何快速的理解业务?适应环境?
  5. 对于实习OR项目的思考总结?

要明白一点:工作了的人很喜欢问一些 case,尤其是一些领导特别喜欢问,哪怕这个项目技术再牛,那么它是如何落地的呢?他的场景是什么?为了解决什么问题?使用了什么方法 OR 工具?达到的效果如何?最终能满足预期吗

比如大家都会背一些 Spring 源码,设计模式,但是能自己将这二者结合起来吗?比如结合 Spring 源码+设计模式开发?(这篇文章就是个例子 淘系技术部的 https://mp.weixin.qq.com/s/94oe5c_7ouE1GbyiPfNg5g

对面试官而言,他们已经听吐了这些背的东西,如果自己能讲的让面试官眼前一亮,那么即时面试问题回答的不太好 最起码也能证明自己对于技术是有追求、有思考的,而不是一个背题机器

对于一个技术而言,它在这个公司存在的意义就是为了一些变现业务服务 技术服务于业务,用业务创造价值

个人认为学生状态过渡到工作状态就是理论转化为实践动力的过程 有些人总觉得校招生身上有一股书生气 大概就是:理论的东西多而幼稚,有些不切实际的想法,能不能落地呢?

规划

这点其实发现面试总结里面很少有人去谈,但是看到脉脉上,十个 HR,九个都会喜欢听到候选人这方面的一些思考、总结。

路线规划

举个例子比如:会不会提前去规划自己的人生路线?

img

这是从网上找的一张图,可以看到有很多路线,究竟哪一条适合自己?可能很多人压根没思考过这个问题?另外自己适合哪一行呢?教育?广告?地图?还是纯技术?

隔行如隔山,因为我从去年五月份就来实习,也换过俩部门,所以对于这些事情比其他人要深刻一些。

只有清楚知道自己喜欢的才有动力去做好他 不喜欢的只是为了生活被动的产出。

不是所有人都适合做纯技术、也有的人压根就不适合搞业务,究竟那条大路通向自己心中的罗马,只有自己清楚

而这些事很多人都这么回复的:先有了工作再说

看过很多人 尤其是 90 后工作半年跳槽、一年的也有。反正给我的感觉就是:不踏实。对于公司而言就是不忠诚:谁能保证你从上一家公司跳又能干多长时间又跳走了呢?公司培养一个人的代价又有谁去承担呢?

在一个公司呆够超过五年 最起码可以说明这个人在这个行业、公司站住脚了。

有的人入职以后才发现自己不太适合这个行业、这个方向,于是就跳槽,简历就花了。

简历一花,找工作就更不好找。别的公司不知道,JD 这边有的部门五二原则卡的很严格(五年内只在两家公司工作过,也就是说平均一家公司至少工作两年时间 https://www.jianshu.com/p/ac8f28f58e11

这还是次要,更重要的是自己能确保这个新的方向就自己适合或者喜欢吗?于是又开始跳、跳、跳。

人生往往是一步错、步步错。

别人已经在自己合适的方向上工作很久了 而你还在思考自己要做什么。

男怕入错行,女怕嫁错郎,说的大概就是这个意思。

时间规划

大家都知道程序猿 35 是一道坎,到时候要么转管理,要么成为 CTO,自己对于自己的成长路线是一个什么规划呢?

管理路线:三年能够处理日常开发当中的任何问题;五年能够在技术上达到自己一个比较理想的状态;七年能够成为小组 leader;十年能够成为部门 leader

技术路线:三年够在技术上能够有较大提升;五年成为架构师;七年成为资深架构;十年成为总监等。

能够表达出这些,最起码能够说明自己比较踏实,是一个有规划、有思想的人

面试经验

对于面试经验这块真的就只能实战找感觉了,每个人都有自己的一个表达方式,不过套路都是差不太多:

扬长避短

像楼主本人学校不好但是一直在 JD 实习,那么自我介绍的时候可以说自己实习时间比较长等。

学校比较好但是导师不放实习的可以着重说下自己的学校经历,paper、竞赛情况,都没有的可以说能够凸显自己能力的地方

适当的往自己会的方向引导面试官

有的面试官会自己电脑前放一个题库,但是大部分不会,会根据简历上,自己脑海中搜索问题。

比如问你 MySQL 调优,自己知道那些就说哪些,比如你知道索引这块哪些自己知道原理就说那些:(is null 判断可能会导致放弃索引、尽量避免使用判断等)再往下往往会问原理,因为你知道最左前缀原则、MySQL 优化器的索引代价分析、选择过程,你就可以轻松回答上来。

但是你不太懂索引相关的原理就不要胡言乱语,瞎往自己不擅长的领域引导面试官,可以从设计规范方面谈起(使用 varchar 而不是 char 等等)因为面试官一般会问:为什么?自己在学习知识的过程中也要经常问自己一句:为什么?比如都知道函数表达式操作会导致索引失效,那么原理呢?

面试充满了不确定性

你又不是RMB 不会所有人都喜欢你

这个恐怕很多人是深有体会:我面试面的挺好的啊,问题都回答上来了,怎么还是挂了?放宽心态,该佛系的时候佛系一点啦。

面试充满了不确定性,能和面试官聊得来,即便问题回答的不怎么样,面试官也会放你一马。

有的人跟面试官聊不来,甚至面试过程中发生了争执,那肯定就是不给过了呗。

面试是一个双向选择的过程

你被面试官面试的时候其实你也在考量这个部门、这个面试官技术水平、人品以及是否愿意引导新人等。

一般面试自己的都会和自己入职后的工作关系是在一起的,一般是自己的同事、直属领导。

如果面试官为人和善、愿意引导你解答出问题来,那么入职之后你的成长速度也会更快的。

如果面试官技术问题问的很模糊其辞,不够专业,那么面试多了你也会感受出来。

你不是非我不要,我也不是非你们部门、公司不选,面试就是一个双向选择的过程

烂大街的项目尽量不要写

秒杀系统 、商城系统。

原因自己体会 懂得都懂

学历差的自信一点

牛客上认识了很多盆友,大家的学历大多数都比我这个双非渣本菜鸡学历高得多,这也不是意味着学历差就一定不行,我这不是也上岸了百度、京东了么。

衷心劝诫 22 届及以后毕业学历较差的盆友,学历差不代表一切。

但正是因为学历的问题,就需要我们比别人付出更多,别人不会的可以通过学校、paper 补过来,但是我们一无所有只能冲。

确实像 bat 这大厂对于学历的要求不是特别高(某东除外,很多部门明确要求学历 211 及以上)

PS

都在问啥项目比较好,我从个人角度谈一下:有实习的话肯定是公司的项目比较好 无论是体量还是专业程度

没实习的话可以做个:仿制 dubbo、netty、tomcat、简单的 ioc 容器啦 或者一些实实在在能落地的项目,因为一个项目落没落地面试官一问就知道。

前者会更好的走完一个底层的流程,从原理搞懂这些中间件,会比直接背书强。

真正走完一个流程的项目远远优于那些网上的项目 没有实际的背景 那些开发中的情况面试官一问就破(以上为个人观点)

以上内容纯手打,囿于楼主本人的认知阶层,目前暂时总结了这么些,算是回馈一下牛客吧 希望22届及以后的同学们看到这篇帖子能够有所启发,写的不好多多包涵!