5月20日,字节跳动创始人张一鸣发布内部全员信,宣布卸任CEO一职。字节跳动联合创始人梁汝波将接任成为新CEO。
对于张一鸣的卸任原因,网友们纷纷猜测。有人根据全员信猜测,是不是去年okr完成得不好被优化了?
也有程序员担忧字节的offer还能不能接?
这个程序员在忧虑这offer能不能接,而我面试字节却惨遭扑街.....简直不要太难受!
面试扑街经历
一面问的 Java基础 和 数据结构和算法
- HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。
- HashMap,HashTable,ConcurrentHashMap的区别。
- B+树
- 一致性Hash算法,一致性Hash算法的应用
- 还有其他的记不清了,主要是我对二面印象太深刻了。
二面问的 JVM 和 多线程
- JVM方法栈的工作过程,方法栈和本地方法栈有什么区别
- eden survivor区的比例,为什么是这个比例,eden survivor的工作过程
- 双亲委派模型的过程以及优势。
- 常用的JVM调优参数。
- 可重入锁的用处及实现原理,写时复制的过程,读写锁,分段锁(ConcurrentHashMap中的segment)。
- ThreadLocal的了解,实现原理
- ABC三个线程如何保证顺序执行。
- volitile关键字的作用,原理。
说实话,第一个、第三个、第六个我准备的话应该能答出来的,但是一个多月没碰了,忘了都差不多。。。
此外GitHub和博客维护好很重要,像我这种demo随手写,随手删的人直接GG。。
三面问的分布式相关
- 分布式事务的控制?
- 分布式锁如何设计?
- 分布式session如何设计?
- dubbo的组件有哪些,各有什么作用?
- zookeeper的负载均衡算法有哪些?
- dubbo是如何利用接口就可以通信的?
- JDK8的新特性,流的概念及优势,为什么有这种优势?
- 如何设计双11交易总额面板,要做到高并发高可用?
讲实话这个双11交易总额面板,这个新的东西我一知半解的,实在搞不清楚,主要是我之前的小公司确实用不上
- .JDK8的新特性,流的概念及优势,为什么有这种优势?
吐了,一紧张的我面试的时候都给忘了。哎,太难了。.反正答的稀烂
- 你对于一个项目怎么理解
就是为了赚钱呀,然后写出来让客户满意就好,,面试官也没继续往下问,其实我觉得我打的没错,可能应该要往团队方向去回答
面试总结:
对于这次的面试我的看法就是真的好难啊。要准备基础还要刷算法题,不仅问jvm优化,还要问JDK8的新特性,顺便问问项目理解,还要会团队管理,给各位跪了。
下面是我在这次面试之后做出的一些反思以及对之后面试的一个学习复习方法:
技术储备不够面试被怼
为什么有些程序员就算是开发很多年了,去面试依旧会被怼呢?
大部分原因都来自于:技术储备不够。
太多程序员在平时都是做着crud的工作,有些技术都是等到工作上要用到了才去学习,就是因为大家平时用到什么去学习什么,以至于面试的时候面试官问点延伸性或者他需要的人才技术就回答不上了。
简单来说就是:只有当下公司的业务能力,没有解决技术的能力,缺少技术创新的能力。
以至于最后只敢找跟之前公司差不多性质的,缩短了自己的职业规划,工作越找越不满意。
平时应该如何进行技术储备、高效复习呢?
那些底层知识都很枯燥,每次学完就忘,一合上书就忘得差不多了,不知道要怎样学才好了。
其实造成这样的现象最主要的原因是没有掌握系统的学习方法,也没有系统的资料辅助理解和学习。
知识点就是那些,基本上,翻来覆去就是那些换汤不换药的问法。但是现在大家上班要写业务代码,下班又是家庭琐碎,要想自己静下心来好好学习根本不可能,仅仅只是有用信息的筛选就足够麻烦。
1、去学习「自己知道自己不会」的知识
其实在开发过程中,总有一些自己想学但是因为项目压力或者其他原因,然后自己打算放在以后 再学的东西,也就是所谓「自己知道自己不会」的知识。
例如:
- 比较常用的一些框架,比如客户端的网络请求、图片加载框架
- 常用的一些面试问题,比如 框架相关、缓存相关、JVM相关(面试必问)
- 觉得自己无法清晰表达出来的概念,如「JDK8的新特性」、「项目理解」
这个阶段是一个对自己当前知识体系查漏补缺的一个阶段,你要做的,就是把自己不会的东西完 整的列出来,然后逐个击破。
2、全方位的学习,构建自己的「知识体系」
其实很多人在平时学习技术和日常开发过程中,学了非常多的东西,但很少有人会去系统地复习,从而构建自己的知识体系,导致自己学到的很多知识点没办法更好的产生联系,而且可能会 导致学了某个知识点没过多久就忘了。
那如何构建我们的「知识体系」呢?
Java里面所谓的「知识体系」,我认为主要包含这几个部分:
- Java 和 jvm基础
- 设计模式
- 算法
- spring框架
- 消息中间件
也就是说我们需要将这几个部分逐步击破,慢慢完善我们的知识体系,这个阶段是最花时间和精力的,但是坚持下来会让我们的基础变得更加扎实,而且能最大限度的构建我们的知识体系。
3、学习「自己不知道自己不会」的知识
这时候面试题的作用就出来了,「Java面试汇总」其实是一个查漏补缺、增强自己编程基础的非常好的方式。
在做面试题的时候,你会遇到很多奇奇怪怪的问题,很多都是你「之前没有接触过」或者「有接触过却没有往那方面想」的问题。
刚开始遇到这些面试题确实很让人很不舒服,但是这些面试题也确实能够最大限度地提升我们对知识之间联系的理解以及引发我们对一些具体使用场景的思考。
当然更重要的是我们可以通过刷往年各大互联网公司的面试题,让我们对于公司面试题有一个大致的认识而且也能提前了解到面试官面试时候的一些套路和做法。
遇到不懂的面试题直接回答不懂,但最好能将面试官的思路往我们会的东西带。
在面试的时候,切勿不懂装懂
我们面试的是技术岗位,有几斤几两,面试官问几个问题就知道 了,如果面试官问到的某个知识点,你只是有点印象或者没多少了解的话,直接回答这个知识不是很熟就行了。不然被面试官针对这个知识点追加几个问题的话,分分钟打你脸。
当然,在说对这个知识不是很熟之后,可以试着将面试官的面试思路往我们会的东西带,例如我 在阿里二面的时候,面试官问我有没有用过 RocketMQ,因为我对RocketMQ不是很熟,所以我当时是这么讲 的:“对于 RocketMQ不是很熟悉,但我对于消息中间件还是有一定的操作能力。” 然后成功地将面试官的问题转向了消息中间件和学习能力上面。
总结
想要拿到满意的 offer,「坚持」是最重要的,抛开了努力和坚持,其他的一切方法论都毫无用处。
任何一个行业都是不容易的,唯有持续的「有效」努力,才能走得更远。 以上便是我对于面试的一些经验和体会,希望能对大家有所帮助。
最后很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,下面的学习路线帮你解决问题!
知己知彼才能突破难关,所以这里分享我整理的这份10+家大厂面试真题送给大家:
Java学习路线图
首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!
模块化学习资源
接下来是每个模块我整理出来的文档学习资料,帮助大家更细致化的学习。
《Java汇总复习资料—JVM》
《Java汇总复习资料—并发编程》
《Java汇总复习资料—MySQL》
《Java汇总复习资料—spring》
《Java汇总复习资料—分布式》
除了上面的学习路线,还可以额外的配合以下方式学习,效果翻倍~
Java进阶学习
①看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
②读源码,看实战笔记,学习大神思路
程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
③面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
④2021大厂面试高频知识点
- spring
- 并发编程
- dubbo
- hashmap
- Tomcat
- 项目理解看法
以上是关于字节跳动换老板了,我21年第二次Java面试经历也扑街了...的主要内容,如果未能解决你的问题,请参考以下文章
Java面试者的经历,吐血分享字节跳动的Java面试经验技巧
Android面试:字节飞书5轮面试Android Framework层的源码就问了4轮!
3年Java,去字节跳动写Python和Go,这段经历希望能帮助到现在正在面试的你