码农逆袭传奇:二本Java程序员如何闭关6个月斩下月薪30k的字节Offer
对于很多没有学历优势的人来说,面试大厂是非常困难的,这对我而言,也是一样,出身于二本,原本以为就三点一线的生活度过一生,直到生活上的变故,才让我有了新的想法和目标,因此我这个二本渣渣也奋斗了起来,竟拿下了今日头条Java工程师Offer。今天分享这波面经,主要是希望能够激励到同样被学历所困扰的技术人,能够对职业生涯和技术规划有一个参考价值,感谢!
一、面试今日头条Java工程师难在哪?(面试难点)
(1)难在“心态”
首先需要克服的第一关,实际上就是自己的心态。因为我是二本出身,base比较低,所以面试今日头条本就是一件没太大底气的事情,更何况是高级开发岗,所以心里就更容易没底。因此,在准备面试之前,调整心态这件事情就做了很久,所以难在“心态”一点也没错,心态没调整好,面试几乎是没戏的。
(2)难在“要求”
其次就是要求,所谓的要求实际上就是阿里对岗位的任职要求,也就是作为开发人员,你掌握了多少技术栈?
首先,你简历上写的肯定要会,其次就是你要拥有一些亮点,也就是说对某个技术有深入的了解,这样才能给面试官耳目一新的感觉。
那么,面试今日头条Java工程师,需要掌握多少呢?
- Java集合:HashMap和ConcurrentHashMap,平时最好有读一些源码,最好知道每个参数为什么设置成这么大?有什么好处?
- JUC包肯定要学,即使平时的编程根本不用,也必须得会。至少要知道aba,cas,aqs,unsafe,volatile,sync,以及常见的各种lock,死锁,线程池参数等,也必须要明白自旋,阻塞,死锁和它如何去定位,oom如何定位问题,cpu过高如何定位等基本的操作,你可以没有生产调试经验,但不代表你可以不会top,jps,jstack,jmap这些可能会问的东西。以及可能衍生的jmm模型和mesi协议等。
- 大厂必问JVM:垃圾回收算法,垃圾收集器、JVM内存模型,每个区域用途,各种oom的种类,jvm调优经验,类加载过程,双亲委派等。
- Spring就得抽空看源码了,一般会问到bean的生命周期,如何解决循环依赖,实现事务原理,动态代理原理等。
- Dubbo也是必须问的,设计框架,负载均衡。
- Redis更要多懂一点,单线程模型,aof,rdb,rewrite,主从,cluster,哪些类型?包含一些缓存常见的问题击穿、穿透、雪崩、数据一致性等。
- Mysql,事务,锁,索引,b+树,主从这些你必须会
- Mq ,我用的rocketmq,你得知道为什么用,重复消费,顺序消息,事务消息,高可用,消息丢失,挤压场景,整个消息发送消费的流程,读过源码更佳,更好吹
- Netty的话,零拷贝,bio,nio,aio,架构设计怎么样子的?用过看过更好
- 算法,建议去刷题,我运气好,简单的算法让我碰到了,一些快排,堆排,二叉树相关的,链表反转,成环,环节点,跳楼梯等常规的简单算法建议刷刷,双指针,dp,递归这些还是多找找感觉,大数据内存有限的场景的统计,有时间一些middle可以去试试,手写红黑树你要是可以,那我估计算法你稳了。
- 网络,http,tcp,https,udp,7层网络协议等,最好结合自己理解,背,你都要背下来。
- 还有就是一些分布式事务实现,架构实现,比如抢红包,高并发下单等常规的场景设计,你来设计,你怎么去设计?多找一些大牛或者上网自己查,帮你看看有哪些漏洞,有哪些解决方案?业界有哪些好的中间件?
二、今日头条Java工程师面试真题(共三面)
一面
- 写一个题,找一个无序数组的中位数
- 写了个快排,然后让我找到无序数组第k大的一个数,我说先排序再找,实际上可以用快排的partition函数。
- 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少,nlgn。
- 操作系统了解么,Linux和windows
- 说说Linux的磁盘管理,一脸懵逼
- Linux有哪些进程通信方式,五大件
- Linux的共享内存如何实现,大概说了一下。
- 共享内存实现的具体步骤,我说没用过
- socket网络编程,说一下TCP的三次握手和四次挥手,中间网络不好,面试官都没听清楚,很尴尬
- 跳过网络,问了项目的一些东西
- 问我如何把docker讲的很清楚,我从物理机,虚拟机到容器具体实现稍微说了下。
- 问我cgroup在linux的具体实现,不会。
- 多线程用过哪些,chm和countdownlatch在实习用过
二面
- 自我介绍
- Java的集合类哪些是线程安全
- 分别说说这些集合类,hashmap怎么实现的,扯了很多
- MySQL索引的实现,innodb的索引,b 树索引是怎么实现的,为什么用b 树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
- MySQL的事务隔离级别,分别解决什么问题。
- Redis了解么,如果Redis有1亿个key,使用keys命令是否会影响线上服务,我说会,因为是单线程模型,可以部署多个节点。
- 问我知不知道有一条命令可以实现上面这个功能。不知道
- Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么,不清楚。
- Redis的list是怎么实现的,我说用ziplist quicklist实现的,ziplist压缩空间,quicklist实现链表。
- sortedset怎么实现的,使用dict skiplist实现的,问我skiplist的数据结构,大概说了下是个实现简单的快速查询结构。
- 了解什么消息队列,rmq和kafka,没细问
- 写题时间到。第一题:写一个层序遍历。
- 第二题:写一个插入树节点到一颗排序树的插入方法,使用递归方式找到插入位置即可。
- 第三题:一个有向图用邻接矩阵表示,并且是有权图,现在问怎么判断图中有没有环。
我说直接dfs走到原点即为有环,刚开始写的时候我又问了一嘴是不是只要找到一个就行,面试官说是的,然后我说这样应该用bfs,有一次访问到原节点就是有环了。
面试官问我不用递归能不能做这个题,其实我都还没开始写。然后我就说没有思路,他提示我拓扑图。我没明白拓扑图能带来什么好处。现在一想,好像当访问过程中找不到下一个节点时就说明有环。做一个访问标记应该就可以。
- 第四题:一个二叉树,找到二叉树中最长的一条路径。
我先用求树高的方式求出了根节点的左右子树高度,加起来便是。
然后面试官提示需要考虑某个子树深度特别大的情况,于是我用遍历的方式刷新最大值,用上面那个方法遍历完整个树即可。
面试官说复杂度比较高,但是由于时间问题就说结束了。
三面
- 介绍一下项目
- 你谈到的并发技术,chm和countdownlatch怎么使用的
- 为什么要这么处理,使用线程池是不是也可以。我说也可以
- 操作系统的进程通信方式,僵尸进程和孤儿进程是什么,如何避免僵尸进程,我说让父进程显示通知,那父进程怎么知道子进程结束了,答不会。
- 计算机网络TCP和UDP有什么区别,为什么迅雷下载是基于UDP的。
我说FTP是基于TCP,而迅雷是p2p不需要TCP那么可靠的传输保证。他说不对,我说是不是因为要建立连接,开销比较大,他说不对。我说p2p的发送节点很多,所以不是那么需要各种传输保证,他说不对。我说TCP会自动分包而TCP可以自己定义数据长度。。他还是说不对。最后他说算了。我们问下一个吧。
- 操作系统的死锁必要条件,如何避免死锁。
- 写一个LRU的缓存,需要完成超时淘汰和LRU淘汰。
我说用lhm行不行,他说用linkedlist和hashmap可以。于是我就写了put和get函数,进行了队头队尾操作。他说get复杂度会不会太高,我瞎掰了半天没找到办法,他说那就这样吧,今天面试到这。
HR面
- 兴趣爱好
- 三年到五年的职业规划
- 意向公司和城市
- 工作经历和收获
- 工作中最大的困难
- 为什么换公司
- 你的缺点和优点
- 你觉得你比其他人优秀的地方说三个
- 为什么想来我们部门
- 巴拉巴拉
三、拿下今日头条Java工程师offer前,我做了些什么?
(1)准备简历
简历是门面,更是敲门砖,能否拿到大厂的面试机会,就要看自己的简历如何,抛开学历意外,大厂最看重简历是否有亮点,因此我们对简历内容要有准备,对自己的突出点,包括技术、个性上的亮点,要练习表达,避免临时组织语言。
(2)提升技能
实际上我有个今日头条工作的朋友很早之前就向我透露过,很多人认为大厂看重学历,但实际情况并不完全是,在今日头条只以能力论英雄。所以,在日常生活中,通过不断地学习,提升自己的能力,努力去拉近自己与目标值的距离,这是很有必要的,也是未来的必然趋势。
关于我是如何提升我的技术栈的:
① 阅读实战文档包括一些源码笔记和技术笔记
全部资源获取方式已放在文末!
② 猛刷面试题
全部资源获取方式已放在文末!
做个总结
很多学历不太好的人,可能对自己没有太大的信心,实际上任何事情都有“奇迹”发生,而这个“奇迹”关键还是要靠自己去创造。无论你是小白菜鸟,还是技术大牛,日常都不能够落下学习这件事情,一旦落后下来,就容易遭到淘汰。做一个有深度,有广度的程序员,赶紧学习起来吧!
以上我的经历希望能够给大家带来帮助,另外自己手头上的资料整理均可免费分享,需要这些资料的朋友一键三连后扫描
码农逆袭传奇:二本Java程序员如何闭关6个月斩下月薪30k的字节Offer相关推荐
- Zoom 袁征码农逆袭:8 次申请美国签证被拒,独闯硅谷成亿万富翁
作者 | 哈那 出品 | 出海瞭望(ID:Globalinsights) Zoom,袁征(Eric S. Yuan). 这可能是你最近在中外科技.财经类报道里经常看到的关键词.继去年成功在纳斯达克上市 ...
- 11 年艺术生转行,逆袭成蚂蚁金服程序员,出版 TensorFlow 教材!
编辑 | Jane 采访嘉宾 | 唐源,蚂蚁金服技术专家 出品 | AI科技大本营(ID:rgznai100) 今天是 2019 年最后一天,伴随着即将到来的 2020 年,第一批 90后互联网大军即 ...
- Java程序员用了3个月从月薪5k涨到20k,我是这么做到的?
学生投稿 先说一下自己的个人情况,大专生,18年通过校招进入湖南金蝶软件公司,干了接近3年的CRUD,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干 ...
- 从事Java程序员五年的艰辛之路。月薪从3k到18k,我整整花了五年
先说一下自己的个人情况,大专生,16 年通过校招进入广州光汇科技软件公司,干了接近 3 年的 CRUD,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业 ...
- 陷阱太多!究竟该如何应对逆袭神器期权?某程序员历经4次上市公司,终于顿悟!...
期权是许多公司用来激励员工的一种方法,有期权的员工可以在将来以某个固定价格购买公司股票.比如某上市公司现在股价为9元,公司给员工发放期权一亿份额,约定几年后员工可以用10元的价格买入一亿股公司股票.如 ...
- 看看30万码农怎么评论:培训出来的程序员真的很渣吗?
软件行业技术日新月异,变化极快.首先是自学能力,新技术一般都是英文文档,需要vpn.普通大学生都做不到.再次是基本功力,能够举一反三.新技术更新很快,但基本思想迭代的很慢.好的基础意味着适应性更强.还 ...
- Java程序员从笨鸟到菜鸟全部博客目录
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...
- Java程序员由笨鸟到菜鸟 电子版书正式发布 欢迎大家下载
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 欢迎关注 ...
- JAVA程序员已成为最疯狂的加班行业,没有之一?
程序员界加班经常成为业界讨论的话题,夜幕降临,大楼里依然灯火通明时,那一刻,仿佛让我渐渐的忘记了时间,我知道我不是一个在加班,我不是一个人!连续加班已成为常事,一点不夸张. "太可怕了,我宁 ...
最新文章
- 硝烟四起的云服务双十一促销大战,谁更便宜?
- git add 之后因为没提交正确文件需要撤销
- BM22 比较版本号
- 【Android】Looper消息分发(msg.target.dispatchMessage), Handler消息处理(消息回调/外部回调/自身回调)
- tomcat工作原理以及详解操作
- Android轩辕剑之ActionBar之一
- 上海著名网络公司招聘高级软件工程师
- 荐一个不错的UI设计网站: uimaker
- Mac上双系统中Windows无法使用苹果鼠标键盘,如何处理
- 英伟达驱动更新记录_英伟达更新驱动最好的方式 - 卡饭网
- pc端+移动端电商源码
- PS将可见图层创建为一个新的图层,保留原来的图层,Photoshop 导出可见图层
- mysql 回滚sql_Mysql误操作后使用binlog2sql快速回滚
- 【C++ Primer】第十章 泛型算法 (练习)
- 小米、华为、一加、OPPO接连入场,电视的魅力在哪里?
- 前沿|十位顶级大咖为您把脉容器技术大势
- 培训机构无线覆盖解决方案
- 非线性方程求解 :二分迭代法和牛顿迭代法
- 从黑天鹅事件到墨菲定律
- xbox解锁服务器和语言,微软终于还是没忍住!国行Xbox One实现解锁了
热门文章
- DB2 SQL0668N SQLSTATE=57016 reason code 1
- 接口大师v3.12,一套满足企业自建OpenAPI、接口平台的解决方案、产品和源代码
- 计算机丢失api-ms-win-crt-runtime-l1-1-0.dll解决方案
- windbg 调试崩溃
- qrobot开发总结之android完全退出程序
- 植物大战僵尸:手工计算偏移地址
- 中原证券分析报告(0607)
- Wordpress安装woocommerce插件出现500错误Internal Server Error
- html5 光影效果,基于 HTML5 WebGL 的 3D 场景中的灯光效果
- 刘强东刷屏了,一片好评。京东宣布全员涨薪两个月!