源自: https://juejin.im/post/5c555b2de51d457fa31e306d
声明: 文章著作权归作者所有, 如有侵权, 请联系小编删除.
0 基础, 一年自学经验, 8 个 offer, 包括头条, 去哪儿, 猫眼, 斗鱼, 趣店, 趣头条等, 总价值 180W
朋友们, 大家好!
我是白小白, 目前是一名电子科技大学信通学院的大四学生. 回想起自己正式涉足前端的学习, 已然过去一年又几. 这一年里, 有困惑, 迷茫, 也有坚持, 不弃, 既收获成长, 亦收获一点小成绩. 于此于文, 将自己这一年来在前端上的摸索和历程记录下来. 受惠前人, 饮水思源. 此篇心得如果能够给到您些许的帮助, 那将是对小白莫大的鼓励.
邂逅篇 -- 为什么选择前端?
先介绍下小白学前端之前的情况: 学业成绩一般, 有一点 C 的基础, 了解一点 Linux 的皮毛, 英语六级
大三学年伊始, 我面临一个选择: 考研还是就业(成绩太差留学没戏). 和同学室友闲聊一通, 他们的答案基本一致, 又寒暄了高中的老同学, 得到的回复还是一致:"考研" . 我并不惊讶, 我们学校深造率一直比较高(报名考研和选择留学合计 85% 左右), 要知道秋招时在我们班加上我选择就业的才 3 个, 其中一个还是国防生工作包分配, 加上现实就业压力大, 岗位竞争激烈, 读研是最显而易见的选择. 但是当时的我并没有选择和大家同行, 因为我不喜欢抽象又枯燥的编程. 研究生整天都在教研室看论文, 写代码, 做项目, 一想到这种场景我就头晕.
确定就业之后, 我就着手做准备, 因为自己性格比较外向健谈 (话多嘴碎), 我希望从事一份与人打交道(唠嗑) 的工作, 加上自己高中有开淘宝店的经历, 我首先把目光放在了销售, 正好新学期校园迎新活动如火如荼的进行中, 我报名了中国移动的校园直销队. 第一次做销售, 心情还是很激动的. 三天半的活动结束, 我们队的业绩其实还不错, 但是我确定销售不会是我的归宿: 每天都要保持微笑不厌其烦跟别人介绍产品, 有时得到的只是一个冷眼旁光, 还得到处跑到处看, 太累而且价值 (工资) 不大.
第一次对前端有正式的认识, 来自于学校工作室的招新宣讲, 当时台上的同学介绍前端的话语我还依稀记得:"学好 JavaScript, 走遍世界都不怕, 既能前后端, 又能桌面移动端, 上天下海, 无所不能", 当时的自己听不太懂, 但是感觉很厉害的样子. 从此, 前端在我脑海形成了初步印象, 回去简单 Google 一下, 发现对前端还有 "简单易学"" 门槛低 "" 工资高" 等形容, 越来越感兴趣(自己零基础), 在逼乎大神的推荐下, 我从 imooc 前端路径和 FCC 前端学习路径开始了我的前端入门.
因为有 C 语言的编程基础, 跟着路径学习阻力不大. 一个月断断续续, 把基础部分都学完了(过一遍), 初步了解了前端三剑客 html,CSS 和 JavaScript, 路径刷完之后, 我开始尝试脱离路径教学独立写一个页面, 从结构, 样式到逻辑. 好了, 问题来了, 我发现自己根本写不出来(更准确来说根本不理解),HTML 标签为啥这么用? CSS 盒子模型怎么写? JavaScript 面向对象咋理解? 越写越不理解, 越写疑问越多, 越写越崩溃... 写了三天放弃了, 觉得自己智商不够, 可能真不适合编程, 不适合做技术.
双十一临近, 本着体验生活和了解工作的初衷, 我报名了京东临时工的招聘. 先在成都京东总部进行了初步的培训后, 我们被分到各个站点进行工作, 工作内容单调又无聊: 卸货, 分拣, 派单, 客服, 退件和查询 (我基本都在站点不用出去). 问了一下身边的小哥哥, 他说每天工作就是这样, 来车的时候忙一点, 其他时候很闲, 工资的话在成都能吃能喝. 了解到京东配送的大概流程还算有点收获, 我发现京东 ERP 系统(系统很复杂) 都是用 Firefox 打开, 我好奇他们为啥必须用 Firefox(其他浏览器不行吗), 他们回答我他们也不知道, 只是公司培训他们要这么做.
双 11 结束之后, 我又陷入迷茫了, 我到底能做啥? 销售是不可能销售的, 运营公关又嫌单调, 编程又很难理解学不下去. 心想, 自己毕业只能找个不喜欢的工作糊口, 要不放弃就业, 回去跟着大家考研. 当时看了几篇文章, 再一次感知到技术的重要性和必要性, 又去请教了学长学姐, 告诉我不要轻易放弃, 要相信自己. 思来想去, 再次把目光聚焦到之前没写完的页面.
学习篇 -- 怎样学习和做了哪些准备
17 年双十一之后, 我正式下定决心走技术这条路, 总结之前的学习教训, 重新思考如何学习前端
我必须重新去思考, 去反省自己的学习方法和方式. 这一次我花在检索和收集信息的时间更多了, 除此之外, 我还试着去看前人的学习心得和经验, 最后获取到比较一致的建议, 那就是必须以基础知识为核心, 系统性, 辐射性的进行学习与积累; 在多数前辈的推荐下, 我去图书馆借了一本《JavaScript 高级程序设计》(第三版), 此后的时间, 无论是在课堂还是在宿舍, 一有时间我就坚持看.
刚开始看高程三的时候, 被这本书的厚度吓到了(毕竟我都不咋爱看书), 而且专业性较强, 对此有一定的心理负担. 大概花了三个星期的时间, 每天看 20,30 页, 然后去理解其中的内容, 整书看了个十有八九, 看完之后真正对 JS, 对前端有了一个宏观的认识, 之前不理解的知识点也通过系统学习后联系了起来, 对比之前的路径学习, 我认为路径学习并不适合初学者, 因为知识点相对分散, 零碎, 前后知识点逻辑性关联性不强, 学习过程中很难形成整体性认识和理解, 过后容易忘记, 书籍是人类最好的朋友. 我之后的收获离不开这本书的启蒙, 这是每一个 FEer 都应该首先阅读的书.
继续我的前端之旅, 当时的自己由于实践较少, 感觉 CSS 甚至比 JS 还要难以掌握及运用, 不知道大家是咋学 CSS 的, 我一直找不到好的方法去学. CSS 有大量零散的, 需要记忆的特性, 属性和属性值, 不经常使用很快就会忘记. 从学 JS 的思路切入, 先理解原理先掌握大局观, 虽然有很多属性(还在一直增加), 但是基本原理和框架不变, 小白认为: CSS 选择器与权重, 盒子模型与 BFC, 常用属性(display,position,float 等), 块级元素和内联元素, 层叠上下文和常见布局是需要重点掌握和熟练的. 看过张鑫旭大神写的《CSS 世界》, 觉得还不错, 能够帮助你构建起对 CSS 的大局观, 但是个人感觉整书在逻辑性上稍稍欠缺一些, 读起来有些费劲(大神原谅我这么说).
在之后的学习中, 我了解到微信小程序, 那时候正好是小程序大火的时候, 开发者数量急剧增长, 于是我也凑了一波热闹. 但是苦于没有什么实战经验, 我在慕课网购买了一门小程序的实战课程(149 元, 感觉挺值的), 此后便跟着视频和老师进行自己第一个 demo 的实践. 每节视频我都仔细看, 看完就亲自手写每一行代码, 跟上老师的进度, 遇到不会的或者出错的我会重新回去看视频, 一遍看不懂就多看几遍, 然后对比出错的地方, 进行总结和学习 , 也正是这门课的契机, 我开始学着去看文档, 去查文档, 用文档解决问题. 除此之外就是老师讲授的调试技巧和经验, 学到了很多只有在项目中才能体会的东西. 我的第一个真正的实战 demo 也完成了.
寒假临近, 我深知不能闲着, 于是我申请了学院的 P2P 项目《搭建基于 LNMP 的学生论坛系统》. 一方面回顾一下 Linux 的相关知识和操作, 一方面锻炼下自己的项目能力. 整个项目花的时间不多, 我使用了 Discuz! 框架, 主要难点是在 Linux 环境中安装和配置 Nginx,MySQL,PHP 环境, 最后使用 ngrok 服务做了内网穿透, 申请了免费域名做 CNAME 解析, 让公网也能通过域名访问. 目中途因为自己装错不兼容版本的软件, 在穷举了所有网络给出的解决方案后仍不能解决错误, 我绝望了, 最后选择了推翻重做. 第二遍有了教训之后轻车熟路, 但还是遇到了不少新问题(比如环境搭好之后无法解析 CSS, 导致页面没有样式), 不过都没能阻挡我, 一一解决. 下图是自己参考了 ZUK 社区做出来的前端重构页面(我觉得挺好看的哈哈)
18 年, 开学已经是第六个学期, 正值金三银四的春招季. 小白本来也想着去投递找实习, 看了几家公司的 JD, 无奈自己的技术栈 (前端框架还没接触过, 后端也不了解) 尚未成形放弃了. 还是先着力现在, 把基础打好. 当时自己正在看《图解 HTTP》补补网络基础知识.
不久后便迎来了我的第二个项目, 这是一个外包项目, 一位研究生学姐联系上我们, 需要我们组成一个小团队实现一个基于微信小程序, 专注于成都户籍政策信息汇总和加工输出, 解决用户相关信息获取成本高, 质量低的痛点的产品. 这也是我第一次参与到团队形式的开发实践中, 我们从 产品调研 ->需求分析 ->商业策划 ->团队分工 ->项目排期 ->开发工作. 在整个项目活动中, 我接触到钉钉, Tower 等团队协作软件, 认识到 Git/GitHub, 码云等代码托管工具, 更亲身经历到团队中 FEer 的工作流和报告流, 需要和设计师沟通原型和 UI, 需要和后端交流接口和业务, 需要和 PM 讨论需求和功能. 整个项目的时间持续了将近俩月, 最后由于其他原因被迫中断, 很是遗憾, 只留下一些页面...
在小程序的学习和开发过程中, 越来越体会到 ES6 的重要性和必要性, 无论从代码简洁上还是开发效率上 (亦或是市场需求上), 其效果和作用越来越凸显, 当时在大家的推荐下, 我买了一本《JavaScript 忍者秘籍》(第二版), 这本由 jQuery 之父撰笔的备受好评的工具书, 成了我 JS(ES6) 启蒙的第二本书, 在书中了解到 ES6 诸多新特性, 优缺点及其适用场景, 每一章后面都有针对的习题, 能够检验和巩固自己的理解.
转眼已是 4 月底, 当时腾讯正在举办第一届大学生微信小程序应用开发赛, 看到进入总决赛的队伍将有机会进入到腾讯微信总部实习, 小白马上找了搭档报名. 一开始我们准备做小游戏 (当时小游戏已经红红火火), 无奈被告知小游戏类目不纳入此次比赛范围. 我们临时调转了方向, 搭档是游戏的技术栈, 没法帮我分担小程序的开发需求, 后来干脆开发我来, 文档他做. 时间不等人, 我们必须抓紧, 没有 PM, 没有 UI, 没有后端, 怎么办? 那自己来做 PM, 做 UI, 做后端! 我们做了一个大学生校园闲置平台 iOS(灵感就是校园版的闲鱼), 旨在简化交易流程, 降低交易成本, 让同一所学校的同学可以更加省心快捷的流通自己的闲置物品, 从立项讨论到最后作品提交(完成), 我们只用了 15 天, 而且还是两个小白. 这个比赛项目让我第一次接触到前后端联调开发流程, 为了写接口 CRUD, 我学了一点 Node, 配合 Koa 和 MongoDB 勉强满足业务需求. 我们的作品在校园选拔赛中获得前十(60 只队伍) 的成绩, 被推荐进入西南赛区分赛.
进入 5 月份, 我正式接触到前端框架, 选的 vue, 跟着官方文档和一些教程, 我也写了一个 todoList 的 Demo 入门, 了解到基本的模板指令, 语法, 框架特性和组织结构(当时第一反应就是和原生小程序好像啊, 后来才知道, 应该是微信的 Developer 借鉴了 Vue 思想, Vue 又借鉴了 React 的思想). 配套的全家桶也入门了一点, Vue-router,Vuex,Vue-cli 和 Axios. 由于没有更加深刻拓展地实践和学习, 对 Vue 的理解只停留在皮毛和表面. 先不管, 我得去找找暑期实习.
实习篇 -- 我与公司不得不说的秘密
无面试经验, 暑期实习投递 10 家公司, 收到 2 家 offer,1 家意向书, 第一次有工资领真开心
正值学校举办双选会实习生专场和 '实习僧' 科大线下活动, 我带着简历去试试, 第一次参加双选会的记忆至今难忘(成都的小伙伴要是感兴趣 19 年春招可以来科大体验一下哈哈): 车水马龙, 鳞次栉比, 如遇赶集的闹市, 明星公司的 "摊位" 前纷纷排起了长队, 招呼声, 交谈声不绝于耳, 真是好不热闹! 我打印了 10 份记录着上文经历的简历, 循着自己的感觉分别投了 10 家公司, 有些公司当场笔试面试, 有些则是另作安排, 太多公司不认识, 当时只想找一家愿意收留我的去实习, 也没什么动力去提前了解. 当场收到一家公司的意向书, 而且离学校还挺近(后来了解到, 那家公司就是本校校友创办的, 正在孵化中), 自己不太想去初创公司, 婉拒了, 回去继续等其他的通知.
几天后我接到一个 HR 小姐姐的电话, 表示我的笔试已经通过, 需要约一个时间进行面试, 这是我第一次接到正式的面试通知(心想这家公司应该不错, 流程正规). 几天后, 面试如约而至, 一面技术面, 是一位稍显文艺, 面相友善的面试官(后来入职才知道是经验十分丰富的前端老司机, 我的 mentor, 真是缘分), 大致总结一下当时被问到的内容:
事件委托与事件模型 (捕获 -> 触发 ->冒泡)
HTML 语义化和规范标准
Event Loop 和消息队列
CSS 盒子模型和 BFC 理解
闭包的理解和作用域
原型与继承(有几种继承方式)
浏览器缓存和相关 API
0.1 + 0.2 不等于 0.3? 电商项目中涉及小数咋处理?
用过哪些 ES6 语法, 介绍一下
跨域产生的原因和处理方式
因为是实习生, 问的都是比较基础的知识点(这些基础题大家肯定都会), 也没有让手写代码实现的要求, 但这是我第一次面试, 当时还是挺紧张的, 有些题答得不好. 在忐忑的心情中, 被告知一面通过, 二面是另一个身材魁梧, 表情严肃的面试官(这是我的 leader,UED 老大). 看着挺有距离感的, 其实交流起来很和蔼, 我以为他会问我更深入的题目和知识, 结果没有, 问了一些我的大致情况: 学什么专业? 上过什么课? 老家是哪的? 能实习多久? 20 分钟结束之后就跟着小姐姐进入 HR 面了, HR 们问的问题具有共通性, 比如咋学前端的? 为啥选择前端? 有什么兴趣爱好? 大学做过什么印象深刻的事情? 等等, 这里就不浪费篇幅仔细描述了, 之后就是和另一个 HR 小姐姐确定入职和实习的细节. 小白也是在这小姐姐那里第一次了解到头条及其 "可怕" 的薪资(现在回想起来, 这难道是冥冥之中的神秘力量?)
另一家公司是电话面试, 面试官主要问了 JS 基础知识 (就是常问的那些, 没有印象深刻的) 和简单的算法题(一个数组中如何查找重复出现 2 次及以上的元素), 还有一道常问的题: 进程和线程的区别? 自己答得都还不错, 40 分钟的面试很快过去. 然后是和 HR 的交流, 薪酬, 实习时间和地点的细节确定.
一周后我收到了两家公司的 offer 邮件, 一家是 G7(成都)智慧物联网, 一家是上海牵趣网络科技公司, 我选择了留成都, 毕竟方便又熟悉嘛. 拿到 offer 就安心准备各科的期末考试了, 学业可不能掉链子鸭.
暑期开始的第一天, 我到公司报道入职, 从此开始了为期三个月的实习生活. 正式了解到公司在全国四个城市有 base, 成都是主要的研发中心, 公司规模在 1500+, 主营业务以商用车车联网解决方案和数字化业务为主, 客户包括京东, 顺丰等, 在这个垂直细分领域是一家独角兽(我的眼光果然不错).
UED 总共有 30 + 人, 我被分到车队运营产品中心, 这个部门主要负责三个产品, 一个 web 端车队运营系统, 一个给司机用的 hybrid App(包括小程序端), 还有一个炫酷的大屏监控项目, 极大地丰富了我的眼界. 实习的过程中, 我认识到很多厉害又谦虚的前辈, 特别是我的 mentor(启蒙导师), 总是耐心地为我讲解知识点, 帮我解决问题. 小白在公司不仅了解到详细严谨的立项 ->研讨 ->排期 ->开发 ->测试 ->上线流程, 还在 mentor 那里学习到常用的开发工具和开发经验, 比如用抓包工具 Charles 代理资源. 由于部门负责的产品和业务比较丰富, 自己有幸接触到不同形态和平台的开发工作, 比如 Web 端项目迭代(SPA 等),Hybrid 开发与 native 端进行协作联调, 小程序端的发布, 最刺激的就是大屏项目(虽然我没怎么参与到新迭代的开发), 炫酷吊炸天, 使用 WebGL 和 ECharts 进行渲染, 基于 GIS 的车队数据可视化.
因为是实习生, mentor 分配给我的任务都不难且合理, 一边熟悉工作环境, 一边上手项目代码, 工作强度也不大, 我是标准的 965(只加过两次班), 公司每天加班的人也不多. 刚开始不是很熟悉流程和代码, 我回到租房还得继续 coding, 后来渐渐熟悉了, 节奏就比较稳定. 公司氛围不错, UED 的同事们每天都会一起吃饭, 互通有无, 一派和谐景象. 每天晚上我都会抽出时间自我充电, 每周六周日我也会坚持去公司学习, 因为公司比较舒适, 有显示器, 空调, 微波炉和人体工学椅, 哈哈哈哈哈哈. 也是在实习的这段时间, 我抓紧时间把我的基础补上.
开发工作之余, 我总结归纳了常考知识点, 包括前端部分, 浏览器部分, 网络协议部分, 算法和数据结构部分等, 这里我要强调一下: 算法很重要! 算法很重要! 算法很重要! 一直以来 FEer 写业务逻辑看似不涉及过多算法, 从而忽略了算法的重要性, 但是如果你的目标是大厂, 算法是一定逃不过的(我在后面的秋招中深刻体会到这点), 自己算法基础很弱, 我就从最简单的《算法图解》看起, 一边刷 LeetCode, 一边看书和博客. 这里把自己学算法的步骤介绍一下:
阅读算法入门书籍, 理解和记忆基础知识. 比如时间复杂度, 空间复杂度, 基础的数据结构等
将基础算法用 JavaScript 描述和实现出来. 比如常见的排序查找算法, 链表二叉树结构等
刷 LeetCode, 先自己尝试解决, 不能解决看别人的解析, 自己再用 JS 实现. 强烈建议刷算法题去 LeetCode 等专业平台进行, 因为除了有大量优质经典的习题, 这里又是面试题的素材来源, 还有严谨的测试用例供你验证自己的代码, 切忌自己随性刷题!
测试通过的题, 要尝试去思考其他方法从时间和空间两个维度进行优化, 面试的一大考点就是先问你实现, 再问你优化, 比如下面这道题:
暴力循环的思路 O(N*logN)大家都能想到, 但是你能想到时间复杂度更低的方法吗?(腾讯面试题)
给定一个整数 n, 计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 .
一转眼到了 9 月份, 金九银十的秋招拉开帷幕. 随着和同事们的相处, 了解加深, 我越来越喜欢 G7,mentor,leader 以及前辈同事们都对我很好, 公司的发展也很有前景, 工作不累还能学到很多东西, 漂亮的小姐姐也很多. 当时我甚至想过放弃秋招, 放弃自己大厂的目标, 留在 G7. 可是生活就是这么妙不可言, 当时正值公司新一轮的融资, 公司上下都锁 hc, 没办法走转正和三方流程. 思考良久, 在国庆节前夕和 leader 提了离职, 当时 leader 说:"先让我去秋招, 职位给我留着, 想回来的时候再回来". 感谢 G7, 感谢前辈们, 秋招拿不到好成绩没脸回去见你们.(越来越觉得, 最后去头条就是注定的)
秋招篇 -- 我的 180W 面经
16 场笔试, 12 场面试, 8 个 offer, 总价值 180W+, 平均 offer 价值 22W+
小白回到学校已经是 9 月底, 正式加入秋招队伍. 时间上已经晚了, 错过了不少公司的网申投递, 有些公司(阿里 8 月中旬就截止网申了)8 月中旬就开启秋招行程了, 校招的同学一定要注意时间, 尽早做准备哦. 来学校宣讲的公司很多, 那段时间还真是挺忙的, 每天跑宣讲会, 做笔试, 跑酒店, 做面试, 回宿舍, 做线上... 接下来小白将会把自己的面试心得写下来, 希望能给屏幕面前的你些许帮助.
首先假设我们基于一个共识和三个约定:
共识: 题是刷不完的, 题背后的知识点 (网) 才是核心, 无限的东西就没必要去学习记忆, 有限的东西才有学习记忆的价值
以下面试题不仅有我在面试中遇到的, 更有为了面试发掘于各个渠道的
以下心得体会面向校招偏向基础, 希望能给同仁们和同学们一些参考
- Canvas
- WebGL
- PWA
- React Native
- WebSocket
来源: http://www.jianshu.com/p/f938315bfdf1