前言
近几年来,互联网行业变化非常大,除了龙头企业的更替,“裁员潮”“失业潮”也不断掀起,尤其是对于年纪太大的程序员真的是不太友好。但是,根据数据统计表明,自2018来,学习IT行业的人不减反增,更有不少其他行业的人转学转行。
那为什么现在越来越多的人转行了呢?从实际上来看,互联网IT门槛低、薪水多,没有太多的限制,这些因素致使现在的年轻人开始往这个行业内跳。确实,IT行业无需太多人脉、资历,是改变自己未来,逆袭的最佳“捷径”。
如今,一线互联网行业对IT人才的需求也越来越大,甚至对于人才的培养给予了一定的支持。据内部消息称,腾讯也非常鼓励培养Android零基础人才,对此还发布了相关的一些相关的培训和指导,**今天我们要聊到的,是一份内部发布的Android零基础就业宝典,**看完之后或许可以不用再怀疑人生了,学习Android也能如此简单,完美!
面经分享
第一部分是我前端面试的经验总结,第二部分是我认为比较有思考空间的题目
经验总结
- 一份漂亮的简历,需要包括以下部分(排版由上而下)
- 个人亮点(专精领域,个人博客,开源项目)
- 教育经历(毕业院校,在校经历、荣誉)
- 工作经历(实习)
- 项目经历
- 专业技能
- 扎实的前端基础,比如你知道
作用是什么?flex:1
的 1 代表什么?Generator
如何抛出错误?
- 熟悉一门前端框架(React 优先)
- 勤刷 LeetCode 的算法题,熟悉掌握相应的数据结构如常见的链表、栈、队列、哈希表、树
- 熟悉网络基础、Git 命令、Linux 命令
- 多去了解前端的新趋势(Flutter,PWA,Serveless,GraphQL,CSS Houdini)
- 要有自信,让面试官感受到你对前端的热爱
面试题
由于面试的公司和次数略多,老生常谈的面试题就不放出来了,也不按公司划分面试题了
算法题
大多出自 LeetCode ,LeetCode HOT 100,最好自己过一遍,理解最优解
编程题
-
用 Class 实现 EventEmitter,要求拥有 on,once,emit,off 方法
-
实现 deepClone,要求能成功克隆带有循环引用的对象
-
CSS 实现一个宽度为浏览器1/2,宽高比为 2:1 的盒子
-
实现 sum 函数
sum(1)(2)(3) == 6; // true
sum(1, 2, 3) == 6; // true
-
实现 sum2 函数
console.log(sum2(1)(2)(3)()) // 6
console.log(sum2(1, 2, 3)()); // 6
-
用尾递归实现 fibonacci 数列
-
实现 co 函数
-
实现以下功能,当对一个 arr 做 push 操作时,会自动打印一行提示消息
const arr = [1,2,3];
arr.push(4);
// arr pushed a new element: 4
-
代码实现中断 Promise 的运行
-
有一组图片,实现后一张图片必须等到上一张图片加载完毕,才能开始加载
-
为 Test 类添加方法,打印指定内容
class Test {constructor() {this.person = { name: "jack", age: 38, position: "CTO" };}// ......
}const test = new Test();
for (const ele of test) {console.log(ele);
}
// [ 'name', 'jack' ]
// [ 'age', 38 ]
// [ 'position', 'CTO' ]
-
实现 handler 函数,遇到 b 和 ac 都要去除
console.log(handler("aabaa")); // 'aaaa'
console.log(handler("abaccbc")); // 'c'
console.log(handler("aaccc")); // 'c'
console.log(handler("aaabccc")); // ''
-
实现 decode 函数
decode('HG[3|B[2|CA]]F') === 'HGBCACABCACABCACAF' // true
-
实现 _bind 函数,使打印 success
function Animal(name, color) {this.name = name;this.color = color;
}
Animal.prototype.say = function() {return `I'm a ${this.color} ${this.name}`;
};
const Cat = Animal._bind(null, "cat");
const cat = new Cat("white");
if (cat.say() === "I'm a white cat" &&cat instanceof Cat &&cat instanceof Animal
) {console.log("success");
}
-
CSS 实现圆环进度条效果
-
说出以下打印内容
console.log(-1 >>> 32);
console.log(-1 <<32);
console.log(1 >> 32);
console.log(5 >>> 2);var a &#61; { n: 1 };
var b &#61; a;
a.x &#61; a &#61; { n: 2 };
console.log(a.x);
console.log(b.x);
简答题
- 实现 F12 开发者工具的检查&#xff08;inspect&#xff09;功能
- 实现 把一个盒子从一个区域拖放到另一个指定区域中
- 盒子一部分在区域内&#xff0c;一部分在区域外&#xff0c;该如何处理
- 简述几个封装好的关键方法
- 开发完的项目&#xff0c;在微信浏览器上白屏&#xff0c;该如何排查
- 如何统计一个页面上哪些区域用户点击次数最多
- 如何根据按钮级别的粒度&#xff0c;设计用户权限&#xff0c;例如&#xff1a;A 可以访问按钮&#xff0c;B 不可以
- 如何对一个网页内容进行自动化截屏&#xff0c;如何解决登录限制
- A组件包裹B组件&#xff0c;B组件包裹C组件&#xff0c;它们的 componentDidMount 触发顺序如何
- React setState 到底是异步还是同步的&#xff0c;其原理是什么
- React Hooks 的使用有哪些注意事项
- React 的合成事件机制
- 简述 React 类组件的新老生命周期&#xff0c;谈谈 React Fiber 架构的引入
- 详细介绍一下 Redux 状态管理&#xff0c;如何和 React 组件连接
- React HOC 的用途&#xff0c;什么是装饰器模式
- Mobx 的实现原理
- Koa 的中间件原理&#xff0c;介绍一下 compose 函数
- 介绍 NodeJS 的 EventLoop 机制&#xff0c;process.nextTick() 的作用
- NodeJS 是单线程还是多线程&#xff0c;都有哪些线程&#xff0c;JS 为什么是单线程的
- CommonJS 的实现原理
- NodeJS 中存在哪些流&#xff0c;怎么理解 pipe() 及其优点
- require 的解析规则
- 介绍一下负载均衡&#xff0c;NodeJS 的 cluster 和 child_process 是什么
- webpack 是如何进行打包的
- webpack 动态 import 是如何实现的
- 如何编写自己的 loader 和 plugin
- 简述 webpack 配置文件中的 externals&#xff0c;UMD 了解吗
- 介绍一下 DNS&#xff0c;什么是迭代查询和递归查询&#xff0c;什么是一级域名、二级域名
- HTTP 首部&#xff08;Header&#xff09;和实体&#xff08;Body&#xff09;的分隔符是什么&#xff0c;用正则如何匹配
- HTTPS 的详细过程&#xff0c;什么是数字证书&#xff0c;消息摘要&#xff0c;非对称加密&#xff0c;Hash 算法
- 如何实现 Tab&#xff08;标签&#xff09;页之间&#xff0c;客户端与服务器的实时通讯
- HTTP 状态码&#xff1a;301、302、307 的区别
- 简述浏览器的垃圾回收机制&#xff0c;什么是强引用、弱引用、循环引用
- 简述 requestAnimationFrame 和 requestIdleCallback 的作用
- CSS 选择器的解析顺序是从右到左&#xff0c;还是从左到右&#xff0c;为什么
- click 事件在移动端有什么问题&#xff0c;如何解决&#xff0c;你在移动端还遇到那些坑
- 简述 JWT 的生成过程和优缺点&#xff0c;怎么主动注销 JWT 和续签 JWT
- 通过什么检测网站的性能&#xff0c;有哪些指标
- 如何查看网站的 Ajax 请求是由哪行代码发出的&#xff0c;一个元素都绑定了哪些事件&#xff0c;Chrome 调试面板 F8,F10,F11 各代表什么
- 说说你对 jpg、gif、jpeg、png、webp、base64 URL 的了解
写在最后
在技术领域内&#xff0c;没有任何一门课程可以让你学完后一劳永逸&#xff0c;再好的课程也只能是“师傅领进门&#xff0c;修行靠个人”。“学无止境”这句话&#xff0c;在任何技术领域&#xff0c;都不只是良好的习惯&#xff0c;更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。
如果你觉得自己学习效率低&#xff0c;缺乏正确的指导&#xff0c;可以戳这里加入资源丰富&#xff0c;学习氛围浓厚的技术圈一起学习交流吧&#xff01;
加入我们吧&#xff01;群内有许多来自一线的技术大牛&#xff0c;也有在小厂或外包公司奋斗的码农&#xff0c;我们致力打造一个平等&#xff0c;高质量的Android交流圈子&#xff0c;不一定能短期就让每个人的技术突飞猛进&#xff0c;但从长远来说&#xff0c;眼光&#xff0c;格局&#xff0c;长远发展的方向才是最重要的。
35岁中年危机大多是因为被短期的利益牵着走&#xff0c;过早压榨掉了价值&#xff0c;如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。