11

读者秋招上岸百度客户端开发经验分享(上)

 3 years ago
source link: https://zhuanlan.zhihu.com/p/324275356
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

读者秋招上岸百度客户端开发经验分享(上)

思特沃克软件技术(武汉)有限公司 软件工程师

接近100K star 的Java学习/面试指南:JavaGuide

读者准备面试的时间是 3 个月左右。但是,不是仅仅用 3 个月就能上岸大厂,之前也有计算机基础(网络、数据结构、操作系统、数据库、计组、微机原理等)。

前段时间,贾哥在星球向我询问 offer 选择的问题,我才知道贾哥已经斩获两个还不错的 offer。

贾哥和我一样都是双非本科,学历上面我们和大部分一样都没有任何优势。他的校招经历挺波折的,非常有参考价值。

于是,我就找到贾哥让他写一篇文章分享一下自己秋招的一些准备面试的经历以及经验。

贾哥写的太用心了,整篇文章大概有 1w+字。我将分为两次来发。觉得内容不错的话,大家记得点赞催更。

希望贾哥的分享对小伙伴们有帮助!

01

秋招这一路跌跌撞撞的走来,经历了很多心酸,也成长了很多。

从信心满满的开始,到不断地自我怀疑。从一个一无所知的菜鸡,到现在还是一个菜鸟。

我或许没有很多成功的逆袭经验来分享给大家。但是!我从一个秋招的裸奔男孩到理想上岸,收获的更多是失败的经验、成长的阅历和人生的考验吧!

我对计算机并没有激情满满的热爱,更多的是随着投入的时间和学习而产生的兴趣吧!

我是一个普通的不能在普通的大学生:双非本科,没有任何实习经历、比赛经历。

作为一个计算机学子,我大一大二几乎不知道自己将来会选择编程开发……

听过很多秋招大佬的传奇逆袭经历,向往他们将热爱都投身到刷力扣的成就感中,羡慕他们在秋招时斩获大把 Offer。

社会遵循着 2-8 原则,我或许应该被归到 8 这一类当中。我有时在不断问自己,你真的适合开发这一行吗?你会在这条路上走多远呀?评估自己的实力与大佬们的差距,可能就是我学习的动力吧!

作为一个被秋招毒打的打工人,我想和大家分享我的经历!

02

带着高考的些许遗憾,我来到了我的母校,西安某不知名双非一本,专业为数字媒体技术。

这个专业虽然归类在计算机学院下,但是我们的课程方向是游戏动画,影视建模方向。

导致每次面试官问我专业,我都要解释一遍,我是计算机专业的,计算机的公共基础课(数据结构、计算机网络等)我们都会学。

我们的就业方向貌似更加偏向新媒体方向,虽然编程知识也会学,甚至还学了那本西瓜书的《机器学习》。

大学前两年,自己就是一种浑浑噩噩的状态。我没有很明确的目标和方向,每天都是在宿舍-食堂-教室,上好该上的课。

曾经想拿个综测的专业第一,但是好像光靠成绩还是不够的,后来标准降到了考试尽力考个高分就行。

对于学习数据结构、操作系统等等计算机专业课程,我有一个深深的感触:考试分数高不代表你真的“学会了” 。

这些基础课程,我基本都是上课认真听听,考前复习半个月,拿个不错的分数过了,感觉任务就完成了。

现在熬夜补这些知识的时候,眼里都是悔恨的泪水呀 。

大三,才意识到自己马上要毕业了,考虑了一个月,放弃考研的打算。我想了很久很久,感觉还是做一个打工人吧!

C/C++中的指针让我头晕眼花,于是我选择了 Java。

2019 年 10 月,开始了自己在大学里,真正有目标,有动力的去学习!

在一个失眠焦虑的夜晚,我写下这段话来激励自己:

今年在综测时,拿到了专业第一,可以申请保研(我校保研一般只能保本校)。也动摇过,秋招真的太难了,要不就放弃吧。但是想到自己大三时立下的雄心壮志,既然选择了这条路,就一抹黑的走下去吧,秋招不上岸,春招还能搏一把;这条路实在走不通,那我就考研!

然后,我就开始在 B 站、慕课网、油管、MOOC 上找 Java 的视频学习。

从 JavaSE、JavaWeb、框架的学习。2020 年 2 月份,似乎感觉,把这些内容都过了一遍。

期间一边看网课、博客文章、Guide 哥的专栏总结,一边写博客加深理解。寒假租了房,每天按部就班的输入,过年前几天才回家。过年那天晚上,都是一边看春晚,一边在复习。

03

到 3 月份,认识的几个同学开始投滴滴、百度的实习,我才开始写简历,到牛客看面经,也准备投实习。但是,看到面经的各种提问,我感觉自己像没学一样,全都是知识盲区。

了解的东西不够深入,到不了面试那种深层次提问,还有数据结构、网络、操作系统这些都没怎么复习。自己学过的这些课,脑海里仅仅残留着一点点印象。

更关键的是,我简历写完了技能列表,项目实在没得可写。面对空白乏力的简历,我感觉自己还有好多好多知识要补,完全就是在精卫填海。

本来打算过完年早早去出租屋里学习,年前就定了正月除六的车票打算赶过去。但是,突如其来的疫情,只能让我待在家里,打乱了我安排好的学习计划。

每天,面对面经上满满的知识盲区,自己在家里的效率又比较低,开学又遥遥无期,学习计划一拖再拖。

同时,我的两位伙伴在 5 月都去到了北京实习,我还在家里天天感觉无所事事。

找实习已经是不可能了,只能直接秋招了。然而,项目经历还是空白,做过的课设项目含金量低,单纯的管理系统实在不想往简历上去写。

对比朋友每天大厂的实习日常,再看看自己的狼狈不堪。每天,整个人都有着巨大的心里压力和焦虑。学校在线的网课都是在后台静音放着,天天跑到教育厅下询问开学时间,“又是不开学的一天!哎,到底什么以后才能去学校呀!”。

那段时间,真的过得非常压抑,每天都是忐忑不安、内心焦躁。自己仿佛在一条漆黑的路上跌跌撞撞的走着,这条路没有光亮,没有尽头。

后来,心态渐渐放平,全国都在众志成城的抗击疫情,大家都在努力着。换个角度想想,自己最大的财富,不就是拥有健康吗?

为了赶上既定的任务安排,我只能每天早早起来学习,虽然中途可能被一些其他事情打断,但是用时间来弥补效率,一直复习到深夜。有时莫名感觉,自己 20 多年来,第一次真正的这么努力。

2020 年 6 月,我不顾我妈的劝阻,来到了西安,和好基友小贤租了间房。他也没有找到实习,我们都是共赴秋招的裸奔男孩,两个人开始做秋招的最后冲刺!

04

来到西安后,我便开始集中精力复习基础知识:

  • 把多线程、集合类相关的知识重头复习了一遍,专门针对这一块的面试提问看了很多文章;
  • 在 B 站刷了两遍宋红康老师讲的**《JVM 从入门到精通》,真的良心推荐 ,零零散散看了下《深入理解 Java 虚拟机》**这本圣经;
  • 复习了一遍计算机网络,主要是针对 TCP-IP 体系结构、HTTP 协议,看着面经来复习知识点
  • 数据库只做了简单复习,基本的 SQL 能写出来,牛客做了些题

眼看秋招提前批已到来,而且没有笔试,对我来说是个莫大的机会。但是,由于自己项目还没整理,没有可写的内容到简历上。所以只能任之溜走了。

这是对 Guide 哥之前的一次提问,让我很清楚自己接下来的两个月该做什么!

05

7 月份的时候,自己的项目经历还是空白,导致简历一直没法完善。

于是我开始着手开始准备项目。顺带着晚上刷题。

学校稍微有代表性的一点就是老师指导我们组做了个国家级的大创项目,但是我负责前端相关的内容。课设都是很基础的类似新闻管理系统、学生管理系统,还有 Unity 做的两个游戏 Demo,实在没法往简历上写。自己学习的方向是后端,只能找有代表性的项目来做!

Github Star 了些 Java 相关的项目,但当我拉下代码导入,发现自己搞不懂有些地方为什么要这样写,项目的架构是怎么设计的?关键的技术点在哪里?可能出现什么问题?如何去改善?

因为这些问题搞不懂,吃不透,虽然简历上写的是你的项目,但面试官一问就被问住了,所以终究还是不属于你。

由于自己底子薄,框架探究没那么深入,自己虽然学了 SSM、SpringBoot 这些框架,但是也只是能简单上手使用下。当下也没时间来深入探究底层原理学习,只能停留在简单了解和使用上。开源项目我可能没法吃透,我需要找个视频教程跟着做,然后基于自己理解再做拓展。

我把 B 站所有有关 Java 的项目都找了一遍,搜索不同的关键字足足过了三遍进行筛选统计。我发现项目大体可以分为两大类:

  • 【原理性】:就是造轮子,对已有框架或者协议自己来做个实现;如 Guide 哥的 RPC 框架和 HTTP 的轻量级框架,其他的如实现 Tomcat 功能、性能基准测试框架、实现网络协议等
  • 【功能性】:项目实现具体的业务功能;如各种权限管理系统、博客系统、商城、管理系统等。形式有前后端分离的,有基于微信小程序的后台的、还有客户端的

筛选了大概一周,我找到了适合自己的项目。一个是基于自己之前练手的 Demo,跟着视频学习自己做了拓展,一个是前后端分离的项目。

项目没必要功能业务多么复杂,涉及的技术栈有多广,但是一定能够自己吃透,原理性、结构性的层面自己搞懂,还有一定要有亮点!

因为面试官想听的不是你做了什么,而是怎么去做的。就我而言,更多的是考察你发现问题、分析问题、解决问题的能力。即便项目本身简单,但是一些特殊情况要考虑到,为什么这么设计?出现问题了怎么改进?如何去完善?其他技术方式怎么实现?

在百度三面主管面时,全程都在问项目,大概问了 50min 之久。虽然我觉得准备时自己考虑的很周到了,但是毕竟没参加工作,很多问题根本不知道:

因为基于 WebSocket 协议做的聊天室,本身是应用层的协议,直接就用 TCP 来保证消息可靠传输,如果访问量大,为了高效可以改用 UDP。这个项目准备的重心没有放在网络层面,而是考虑到多线程下并发聊天,会存在线程安全的问题,准备了很多多线程相关的针对项目的改善、应对策略,消息存储发送。

但是面试官全程都在针对网络层面做拓展,我只能根据已有的知识和对自己项目的拓展了解做回答。面试结束,我感觉自己被按在地上摩擦,又限了入了深深的自我怀疑中~

06

到了 8 月份的时候,我才开始完善简历以及刷题。

我的简历大概前前后后改了十二版,最初是改简历的布局,内容块;后面就是字字斟酌,细微调整。

经常删删改改,一句话可能要思考好久;我把我掌握的知识点都很详细的列出来,虽然技能列表看起来很基础,但是我有自信对自己写的内容负责

小伙伴们一定要重视简历!多花点精力在完善简历上!

我的刷题大概从 6 月就已经开始,断断续续在 LeetCode 上刷一些题。在 8 月的时候,我开始每天集中抽出很多时间来刷题。

没错,大佬们天天坚持刷个一年半载,我 7、8 月才开始每天集中刷题。

我大三就意识到了刷题得重要性,因为做题能力差,报了蓝桥杯比赛没去。

既然意识到重要性,为什么不早点去每天坚持刷题呢?

**我尝试过,最终放弃了。**这么做可能更多是临时抱佛脚的心态,对刚做完的题有个印象。

对我来说,复习路上最大的阻碍就是刷题了,因为自己的代码能力实在太差了。

三月份,我大概做了半个月题。《剑指 Offer》上的常规题,我基本上就是半天一道题,因为自己做这些题实在是想不来,想半个小时尝试去解决,但大多时候都是“差一点”,或者思路正确但又不能用代码实现出来。然后看题解,看别人不同的解法,自己再独立写一遍。

因为时间紧任务重,半天能够让我复习好多知识点了,所以想等复习完提纲之后再来刷题。而且,关键是做的题目,当时感觉自己懂了、会了,但是过一段时间又忘了,只能隐约留下个解题思路,还是不能够独立 AC。

七月份,只能是逼着自己来。因为大厂太看重代码能力了,即便是我理论知识掌握的再好,笔试都过不了,根本没得机会去面试。

然后,就开始分类刷题。参考 labuladong 哥的刷题套路,weiwei 哥的刷题分类,小齐姐的刷题经验,剑指 OfferKrahets路飞哥的精彩题解,每天花 8 个小时左右刷题,复习数据结构。

一道单链表反转的题,我整整想了一天半才搞懂。该题下的所有题解全部看了一遍,包括公众号的一些文章。递归的解法,短短几句话,我始终无法理解。

小贤从 4 月份一直开始刷题,在这期间一直和小贤在一起复习。他是 C++方向,算法和代码能力很强,刷题方面我都是请教他的。

单链表递归解法,他画图整整给我解释了一个晚上,从斐波那契的递归,到链表的实现。第二天,我终于搞懂了,在力扣发布了自己写的最认真的一次题解。单链表反转,自己写了不下 20 遍了吧;这次,可能真的是永远记住了吧。

8 月份,小贤由于有事回家了。房间只剩我一个人,我和老板续了房租,继续备战秋招。

期间,刷题有任何问题,我都会立即给小贤打电话过去交流。

【刷题的误区】

开始,我觉得自己不是在刷题,而是不断地重复写,好像在“背代码”。因为有些题说思路,我能够很清晰的表达出来,做的多了发现解题的套路还是比较固定的(虽然也没做多少 ),但是到实际的动手写,又写不出来了。

针对这个问题,我也很痛苦。一方面觉得“背代码”很可耻,自己真的就这么差吗,做个简单题都写不出来吗?但是,我真的是没办法,只能用做的少,练得少来安慰自己。

就这样,每天逼着自己,刷了大概 170 题左右,每天将基础的八大排序写一遍

其实,前期的刷题,自己没见过没思路很正常,参考别人的题解,把这种解法引用到类似的题目上。就像写作文一样,针对不同问题有不同的模板,根据具体问题调整边界即可。我自己总结来说,就是两大因素:

  1. 针对不同问题求解的代码模板,要恰当灵活的应用(如双指针、滑窗、列表 DP 等)
  2. 代码熟练度。模板是基于代码的熟练度而存在的,就像写排序算法一样能够很快的写出来

但是,这个量还有我的认知,对秋招来说是远远不够的。这是一项长期的积累和训练,谁也不可能偷懒,达到立竿见影的效果。因此,在后来的秋招笔试中,我重重的摔了跟头 ,这是可预见的。

听学姐说她们去年是互联网的寒冬,找工作难。今年,因为疫情的原因,仿佛一切都变得更难,竞争更加激烈。

八月,2020 年的秋招已正式开始,但是我还在刷题复习中,准备即将到来的“金九银十”。这份简历,整整迟投出一个月……

我的的开源项目累计在Github上收获了 100k+ 的 star!我的Github地址:Snailclimb - Overview (来fllow me)

不过说句心里话,我觉得这些项目都不过是自己小打小闹的玩具罢了!写这些项目的目的主要也是为了提高自己的能力的同时来帮助到更多的小伙伴。

我更希望的是自己能够参与或者写出一个被更广泛使用的软件/框架。 我想这也是每一个技术人的梦想!共勉。路漫漫其修远兮!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK