春招面试和技术之路回顾 - 2021

总结
review of my roadmap

之前印象很深的句话:一个人如果不耕作,就必须写作!

前言&近况

春招中有幸拿到了阿里和腾讯的开发岗offer,很可惜最后发现只能二选一。

尽管离前去实习还有一段时间,最近有很多计算机相关的比赛也大量占用了我的精力。想稍停下来复盘,写一下和想一下了。

春招面试

在这些面试中收获了很多,同时也遇到了很多很nice的面试官,他们给了我很多的建议,在这里我也将他们分享出来,希望能对今后看到此文的人有所帮助。

前端知识

我面试的主要是前端开发岗,先来总结下我了解到的前端开发所必需具备的知识点,可能有所不全,见谅。

计算机基础

  • 数据结构与算法
    • 栈,队列,二叉树,最大最小堆
    • 排序算法-快排等
    • 查找-哈希查找-二分查找
    • 算法-动态规划-贪心-分治
    • etc
  • 操作系统
    • 系统调用
    • LRU
    • etc
  • 编译原理
    • 概括:词法分析->语法分析->抽象语法树->优化->汇编/中间码
    • etc
  • 计算机网络
    • 三次四次握手及目的
    • 地址栏输入url到加载出网页
    • 网络模型
    • tcp
    • udp
    • http 1.0-1.1-2,状态码及含义
    • etc
  • 信息安全
    • 对称加密与非对称加密
    • 证书认证
    • https原理
    • xss攻击与预防
    • csrf攻击与预防

前端基础

  • html
    • 常见的标签
    • block和inline
    • 标签语义化
  • css
    • 盒模型:基本概念、display、position、float等关键属性
    • 布局flex,实现居中
    • 自适应,rem
    • 媒体查询
    • 高级样式:画个三角形等
  • js基础
    • 基本类型,函数
    • 闭包及其应用
    • 原型链 - 面向对象
    • 函数 - bind,call,apply
    • 事件循环、同步、异步
    • etc
  • js进阶的内容,es6等
    • let和var区别
    • promise
    • async
    • 箭头函数
    • 迭代器
    • etc
  • js应用
    • 防抖与节流
    • 异步程序队列
    • 深浅拷贝
    • etc

前端工程化/框架/工具

  • vue
    • 单向数据流、双向绑定的实现
    • Redux、虚拟DOM
    • v-show
  • react
    • 更新机制
    • hook及其原理实现
  • 小程序
    • 渲染层-逻辑层
    • 虚拟dom
    • etc
  • webpack
    • 流程
  • nodejs
    • koa
    • eggjs
  • 浏览器
    • v8引擎相关
    • 渲染过程及原理
    • 缓存机制-强制/协商缓存
    • 事件模型、选择器、前端路由
  • 性能优化
  • etc

上面的内容很多,很难全部都熟练掌握,但是作为前端开发者,至少应该都要有所了解。如果上面出现了你没有了解过的名词,那就要尽快去补习了。

他人建议

在阿里的面试中印象很深刻的一句话,是来自于阿里四面时前端leader所说的(记得有点不太清了,就简述下大概意思吧)

在学生时代时学习的很多是知识,但是作为今后步入社会后成为的社会人,需要的更多是技术。技术和知识是不一样的,技术需要通过不断地写代码来进行磨练提高的,人的精力是有限的,要想好自己的发展方向并不断提高这方面的技术

还有其他的面试官给的建议,有些在学习的时候没发现,通过他们的建议发现了自己的缺点并改正了许多

计算机基础知识很重要

前端开发在学习到一定程度后,都需要学习其他领域的知识,才能取得突破,比如我们的评级,初级前端,中级前端,高级前端,前端专家,研究员,科学家(具体可能记不清了),在技术实力发展到一定水平后,title就不会再有限定领域了,当然你自己的领域永远是你的基本盘

使用一个框架或者库,一定要去了解其底层原理与实现,最好有时间的话,可以去读一下源码

初次读一个项目的源代码时要带着目标去读,明确自己想要了解什么,不然容易迷失

一个约定,牢记于心

你的一面二面表现都很不错,也可以看出你对计算机是很有兴趣的,不过你的基础还是不够扎实,你可以回去后在复习一个月,还是XXX,可以帮你再投到我们这里

技术回顾

中学-小打小闹

初次接触编程还是初中时,当时就对电脑及上面的事物很好奇,同时作为一个gamer,有着想要制作自己的游戏的小梦想。当时就接触了rpgmaker,flash之类的制作软件,了解到了游戏脚本的存在。

至今还记得,当时用window xp系统,还用dos命令写了个bat病毒脚本,可以设置自己开机启动并,自我复制和有限传播。

大学-进入科班机缘

其实我刚刚上大学时并不是计算机专业的学生,而是一个很多人可能都没有听过的专业船舶与海洋工程,其实也并不是没有兴趣,作为一个军迷,还是很喜欢海军,军事方面的东西,不过在深入了解这个行业后,被行业的就业情况和行内人士劝退了。

所幸学校对于学生专业选择的态度非常开放,我有机会在大一下转专业到计算机,并且在专业分流时选择了软件工程专业,从此正式进入计算机科班专业学习。

科班-正式的学习

很多科班的课程的学习和训练就不细说啦

我印象比较深的课,都是需要写很多代码的课:

  • 面向对象程序设计 - (大一下跨专业选,急急忙忙补习cpp)
  • JAVA多线程综合实验 - (纯代码手写一个基于java swing gui的client,一个多线程的server)
  • 数据结构综合实验 -(现学Qt写了个连连看Github
  • 汇编程序设计 - (8086 asm实现三种排序 Github)
  • 软工实训 - (作为小组组长带着一帮小伙伴开发一个问答机器人)Github
  • 数据库大作业 - (写了个论坛,又当一次小组组长,不过基本没写代码,主要出数据库设计,api文档和救火)

数据结构与算法计组操作系统编译原理计算机网络这几门超级重要,感觉可以终身学习。

2019年中初次接触前端,了解了GitHub这个神奇的地方,还开始在w3c上学习,写了很多静态项目,了解到了bootstrap等,后来继续学习中接触到了jquery,初次实践时写了个2048,当是感觉学到了很多,但是后来才发现这其实这是前端初级的一小部分。

lfx大佬建议:MDN文档好好看

后来确实收获甚多。

中间折腾过很多东西,Ubuntu,deepin,wine,深度学习,openCV,etc。

2020中旬开始接触后端,2020疫情在家时,当时为了写一个计算机设计大赛的比赛,去了解了后端相关的知识,当时我对于前后端的概念还没建立起来,至今上手了django,这是我当时第一次独立自己设计并完成一个完整的软件产品,GitHub仓库LearnPython,完成后感觉收获还是挺多的。

2020下半年,了解到了前端工程化,js的高级知识,被xgp醍醐灌顶的说了一通,才发现自己前端学习的还永远不够,基础不牢,地动山摇,还需要继续学习,于是寒假期间开始恶补基础知识,跟着c4项目手写c子集编译器,并且有幸加入了字节跳动的寒假前端训练营,系统性的过了一遍前端的知识体系,在这个训练营,还有机会写一个nodejs后端项目,写了很多基础curd,了解了koa和eggjs等,最终还拿到了优秀营员,甚是幸运。

通过2021春季的面试,在不断查漏补缺中,学到了很多,通过面试发现自己的不足并加以学习改正,是个很好的方法。

团队-比赛-项目

Token团队,应该是学校里技术最好的团队了,也是最像互联网公司/社团的团队,从产品一路学习,并兼任了技术开发;加入了ACM集训队,和一群很厉害的人一起训练,刷题;和老师联系,接触到了一些比赛和的项目。

写在最后

我可能很贪心,不仅仅是前端,我还想更多的学习算法,计算机图形学,人工智能...,并且能达到被业界认可等水平。

路漫漫其修远兮,吾将上下而求索

如果读完一本书,一个文档,抑或学会一项技术后,就觉得自己已经完全掌握,不需要再次学习了,这是最可悲的,写在这里,希望警醒今后的自己。