说实话,本科生找算法岗位的确实有难度。
本科生与硕博最大的区别是什么?本科生在校学习的课程都是偏理论的,和纸上谈兵没有什么区别,缺乏落实到实际的能力,而研究生和博士不仅有实验室,导师也会提供一些项目让你做,向他请教。
很多企业不招本科生的很大原因,就是不想花费大量的时间和精力,对一个什么经验都没有、只会理论基础的小白进行培训,说白了,费力不讨好。而硕博可能一进去,大概熟悉下业务就能很快上手,何乐而不为?
所以,本科生要想拥有突出的编程能力,得到公司的赏识,不仅先要打好算法基础,还要与理论结合多实操、多做项目。
这是我吐血两周整理的学习经验和路线,从入门到进阶,看了能立马上手操作学习。如果有基础的小伙伴可以略过入门,直接看进阶部分。希望可以帮助到你~
一、入门
很多刚入门的小伙伴逃避学习这些基础知识的一大原因就是,书里讲啥?我听不懂,我看不明白。就算我明白了,我的手也不明白,敲出的代码还是错的。
不过对于算法零基础/弱基础的人来说,学理论知识和敲代码完全是两码事。这里我建议不要死磕书,编程不是文科。就算把整本书都会背了也不一定能学得好,换一种方式——实操代码,我觉得才是编程最好的学习方式。
不过最让初学者头疼可能是理论知识一般,但是还要硬着头皮去敲代码。其实我有一个学习代码的小技巧,也是在《算法基础版Java+Python》里学到的。就是先理解伪代码(用人话解释的代码),再实现自己敲出代码。
这个方式的学习思路就是:理解思路 - 学习伪代码 - 输出代码
有了这个模式其实就是进入编程的死磕模式,了解理论-上手操作-学会理论-项目实操-疯狂刷题-成功求职!
有关入门级的学习资源我这里有一些推荐:
EDX China
edX是哈佛大学和麻省理工学院共同创立的非营利网络教育项目,里面收集收集了非常多数量的课程,涵盖了从人文到科技的方面,当然也有质量上乘的高校分享的编程课程,重点是都是免费的!
《算法基础版Java+Python》
很多初学者往往会忽视算法和数据结构基础,到了求职面试时就被各种算法题“毒打”。这门课程除了让你在短时间内掌握编程语言基础外,还会分别用Java和Python系统讲授算法与数据结构知识。
Coursera
有世界上最大的在线学习平台之称,里面的课程对提升编程的理论知识和编程能力都有很大的帮助。
Codecademy
对于想获得大量编程语言知识的初学者来说,这个网站也可以成为一个最佳选择。
FreeCodeCamp
可能是学习Web开发的最佳在线场所。课程规模庞大,我强烈推荐。
其实基础知识学会后就直接找工作是没办法接住面试官的问题的,也没办法独立完成一个能写在简历上的项目。这其中很大部分的原因是因为没有学会写代码的逻辑思维,没有一个好的代码质量,没有了解大厂出题的规律…… 总而言之没找到做题的“感觉”。
二、进阶
再找感觉之前,首先要注意的是规范自己的编程细节,实质性提高coding的能力也就是提高自己的代码质量。
别急,12个提高代码质量的技巧这就给您上来,偷了之前看的讲座中的技巧总结(视频来自一位北大学霸:《FB面试官揭秘算法面试速成技巧》。
①Coding Style 相关:
- 二元运算符两边加空格,单元运算符不加空格
- 花括号和 for, if 之间要加空格(Java),圆括号和 if 之间要加空格
- 用空行分隔开不同的逻辑块
- 逗号后面加空格
②Readability 相关:
- 函数名和变量名用1-2个单词作为名称
- 确保一个函数内部不超过 3 层缩进(indention)
- 多用子函数来减少入口函数的代码量
- 多用 continue 少用 if
③Bug Free 相关:
- 不管有没有可能出问题,都要对入口函数的参数进行异常检测
- 访问一个下标的时候,一定要确保这个下标不会越界
- 访问一个对象的属性或者方法时,一定要确保这个对象不是空
- 不用全局变量
当然,深入学习也必不可少。不过只是针对求职的话,算法学习的范围可以比正常减少一倍,因为大厂考来考去就那几个知识点。而高频知识点也早就被扒出来了:
拿着重点知识点,结合一套适合自己的学习方式,提早上岸完全不是问题。
最后,分享一波高含金量、易上手的项目,可以直接写在简历,为简历填色。
1.Vue相关开源项目库集合
先给个全的,Github标星10.1K的项目集合。
项目内容不是很难,有些也不太适合放在简历上,不过作为编程新手的练手小项目还是非常推荐的。主要面向前端,包含UI组件、开发框架、实用库、服务端、辅助工具、应用实例、Demo示例,也是非常详细了~
2.Twitter 后端系统 - Django 项目实战
设计Twitter本质上就是在考高并发的信息流系统,其涉及的技术难点非常多,项目的难度也更能检验面试者水平,而且从L3~L5都能问到。
- 对于初级程序员(SDE1),可以把“设计Twitter”拆解出单独设计一个关注功能来问
- 对于高级程序员(SDE2+),面试官通常会要求面试者实现设计登陆、发推、点赞、关注、取关等一系列功能
这些技术难点在《Twitter后端系统 - Django项目实战》首节试听课中都有详细介绍,项目涉及万行代码,都由前ACM金牌选手令狐冲带着手把手敲代码.
3.美团APP
同样是近年来比较火的点餐类平台,这类项目做起来不算太难,但比较通用,设计的技术栈比较广,也适合练手。
项目涉及到技术栈:
- vue全家桶:Vue、Vue-router、Vue-cli等
- 组件化:单Vue文件
- 模块化:ES6 Module
- 第三方模块:better-scroll axios等
- 基础开发环境和包管理:Node、npm
- 构建工具:webpack
- 编辑器:webstrom
项目功能
一言而蔽之:一款集点菜、用户评价和商家信息为一体的移动端点餐APP
- 点餐页面 点选商品后自动添加到购物车,并计算好总价,在商品列表、购物车列表和商品详情页都可以随意增减数目,此外左侧商品分类和右侧的商品相互关联,通过better-scroll插件滑动商品列表时,相应的商品分类也会跟着跳转。
- 用户评价页面 主要包括一个TAB栏,包括三部分:全部、有图和评价三个模块
- 商家信息页面 主要介绍一些商家基本信息,可以通过better-scroll插件,进行左右滑动图片
4.电商秒杀系统 - Spring项目实战
阿里巴巴技术部门面试官带你实现淘宝秒杀系统项目,着重讲解秒杀系统的项目难点、技术架构、常用技术栈和框架。课程会提供项目源码,有个老师带你手把手完成项目,避免了自己做项目拖沓+一问三不知的情况。
欧阳修老师还会以丰富的面试经验帮助你对面试中常考的问题一一剖析,做一个真正有价值的项目。