前端开发实习+校招经验分享(附阿里云内推)
首先推荐一下阿里云前端:
先上成果
错过了秋招提前批,从八月底才开始投递到九月中旬结束面试,一共投递了六家大厂,阿里、字节、美团、快手、网易、京东;
除了京东挂了(。。。),其余的都拿到了offer
个人背景介绍
楼主 科班本科,大一尝试过很多方向,处处碰壁,学习卷不过妓院卷王们,故而决定投身开发
初入前端
众多开发方向中,选择前端开发是觉得有趣,后面越来越觉得兴趣真的是驱动长时间学习的主要动力。
大一暑假开始学习前端相关知识,学习html、css、还有jquery,记得都是在w3cschool上学习,
有了一点基础之后,大二开学参加了学校工作室秋招,坎坎坷坷终于进入工作室有了学长的指引了。
工作室练习
大二上: 加入工作室的上半年,跟着之前学长写的培养方案做一些小练习;
自己也在学习一些有意思的:比如vue、微信小程序、尝试用nodejs,
不过大多都是跟着网上的教程或者b站的视频跟着做,学的挺晕乎乎的,不知所以。
(ps: 这里能感觉到学习需循序渐进的重要性,基础不牢,早晚要回来补的;
大二下:(2020)的疫情给了很多时间自学,这段时间看了几本很重要的书:
《高性能JavaScript》、《你不知道的JS上》、《红宝书》、《JS语言精粹》,
(虽然学校教C语言,但是对一门语言有了比较熟悉的认识,还是通过这几本书开始的,当然后续也看了一些其他书更加深了)
同时在工作室完成了两个项目,两个项目分别用了vue、react两个框架,
实际的项目实战把我从纸面上的“会代码”转变成了“会写代码”
(ps: 有一个长时间开发的项目对成长很有帮助)
偶然间得到去某个和学校合作的公司实习的机会,面试通过觉得可以试试大厂;
于是开始准备简历,通过工作室学长帮忙修改简历,开始刷面筋,刷leetcode;
开始在学校论坛和友校论坛找实习内推:
第一个面试的是成都滴滴,面试很顺利(面筋)通过后,入职实习,实习的部门滴滴的橙心优选,部门非常忙,好在组里同事非常好。
大三上: 滴滴实习了三个月,后考虑转正,转战上海,面了上海字节基础架构,大三下: 在上海实习了6个月离职秋招。
实习对成长的帮助真的很大,能够接触到正规的开发-部署流程,看到公司里大佬的代码怎么写的,横向比较同类型项目但不同的解决方案。
秋招
简历:
简历对于秋招/实习来说都是重中之重,简历需要突出显示自己特点,
把自己的优点充分展现出来,并且能够在简历上就吸引面试官问问哪些问题。
简历的设计和软件设计很像,先写一个demo,然后改 改 改, 不断优化,不断填充;
也可以找有经验的同学帮忙参考,给出建议(比如我哈哈哈)
内推哪里找?
学校论坛上师兄师姐最靠谱,不光能投递简历,还能从师兄师姐那里得到部门的加班信息、评价,最重要的是面试反馈;
如果学校没有论坛或者师兄师姐的资源,牛客网可能就是最好的第二选择了,其他啥“***”等招聘网站,投递之后基本都是石沉大海;
面试准备?
1. 简历上的东西一定要很熟悉很熟悉,我一般会把简历上的知识点提炼出来,自己自问自答,写一遍,如果简历上写了自己不熟悉的,那是很减分的
2. 高频的面试题要熟悉,这个牛客网上很多,不一一列举
3. 要有自己的亮点,擅长的地方,不需要多有就行,能够吸引面试官,举个例子: 比如熟悉某个源码、对某个编程范式很熟悉、对前沿的技术有了解/实践(lowcode、precode 等)、垃圾回收、webpack原理
4. 前端的算法题不难,最难的也就是字节的面试,但字节的算法题最多也就是中等题,虽然我只刷了60多道题,但是还没有因为算法题被挂过
总结:
最初选择前端源于兴趣,从加入工作室到实习,到秋招,兴趣是支撑每天能学习一点点的动力;
从学习方式来看,入门某个方向,通过博客、视频、学习都可,但是不要一开始就上手经典的书籍,
比如《深入浅出Nodejs》这本书,大一时候胆子大借来看了看,看的是晕晕乎乎,啥东西也没学到,
直到大四对语言有些深入的理解,加上实习中的实践再看这本书才觉得醍醐灌顶;
入门之后需要有些实践(除非你语言基础非常好):
实践的最好办法就是实习,实习中可以从小功能做起慢慢对整个项目由大致的了解,
慢慢掌控整个项目,最后还可以对同类型的项目进行横向比较;
进阶的办法可能就是看书: 设计模式、进阶的书籍比如: 《JavaScript 忍者秘籍 v2》、《Nodejs设计模式 v3》 《深入浅出Nodejs》 《JavaScript设计模式实践与方法》
比如新出的《Vue.js设计与实现》前八章也很好,就是看9、10两张有些划水、后面还没看完
最后把自己整理的常见的面试题列在下面:
HTML/CSS
#前端工程师##内推##春招##校招##阿里云#- css实现垂直居中?
- position有哪几种?对应的效果和用法
- CSS选择器的优先级
- BFC
- SEO
- <a>标签
- CSS画三角形
- CSS动画
- Iframe
- <meta>
- 移动端的三个视口
- Download属性
- CSS中的百分比
- 弱引用
- 基本包装类型
- ES6新特性
- 判断类型的方法
- Object.prototype.hasOwnProperty.call
- 原型链(你不知道的js上)?
- 变量提升
- instanceOf原理
- 调用栈大小获取
- 浏览器的消息队列和事件循环
- 😵浏览器中的事件循环和node中的事件循环
- setTimeOut & XMLHttpRequest
- V8执行
- 代码执行流程
- 微任务和宏任务
- async/await
- Generator
- new CreateObj操作做了什么
- 闭包
- V8垃圾回收机制(分代)
- 基于promise的简单封装
- 手写promise
- 事件冒泡和事件捕获
- 判断数组
- 箭头函数和普通函数区别
- 不能使用箭头函数的场景
- 😵原型继承函数Object.create
- 遍历对象的方法
- requestAnimationFrame
- 长列表滚动可视区域动态加载?(mutationobserver)
- 图片懒加载?
- MV*模式(不考虑服务端渲染形式的MVC model2)
- React事件系统
- setState是同步执行还是异步执行(执行state的修改)
- 为什么引入Hooks? (from 官网
- 为什么不能给Hooks添加判断条件
- 🚩Hooks理解(摆脱生命周期)
- ?Hook中的闭包问题
- 浏览器内核
- CSS动画比JS高效
- DNS-prefetch
- 性能分析
- 浏览器多进程架构
- Perfromance怎么使用?
- 😵微信小程序相关?
- 浏览器的缓存(缓存的设置都是部署/后台来做)
- 输入url到渲染流程(浏览器角度)
- JS操作对HTML解析器的影响
- 白屏
- 重排和重绘
- 减少重排/重绘的操作
- window.onload和DOMContentLoaded有什么区别
- MIME
- 😵跨域
- 浏览器对JS的限制
- 😵cookie和session
- Restful风格(http协议设计思想)
- rector模式
- node中事件循环
- EventEmitter模块
- Stream
- 缓存优化(客户端缓存、服务端缓存)?
- 服务端开启gzip压缩?
- CDN
- 状态码
- HTTP0.9
- HTTP1.0
- HTTP1.1
- Http2.0
- HTTP3.0
- Cookie
- 常见的数据提交方式
- 浏览器安全
- CORS (cross origin resource sharing)
- 常见的数据传输格式
- 常用请求头解析:
- 三次握手四次挥手
- 为什么要三次握手?
- 前端优化方案
- 懒加载
- 埋点?
- Polyfill
- AMD和CMD区别
- ESM Commonjs
由于篇幅受限,无法全部贴在这里,部分写了答案见私信我吧