💡 每周一篇前端同学可能会用到的综合知识,积跬步,行千里,祝大家有所收货,能拿到满意 offer 🌱🌱🌱
⛺️ 项目
一般来说,好的面试都是围绕着自己做过的项目来展开。回答采用 STAR 原则
项目名称:XXX IM SaaS 产品
项目概述:在XXXX团队, 主要是做 IM SaaS 产品更新和维护, 帮助长尾商家入住,搭建起商家和
客户的沟通桥梁。
项目难点:该项目是一个 4 年的项目,技术栈比较老,业务模块强耦合,编译打包速度较慢。
技术选型:React + AntD + 乾坤微应用。
主要职责:负责应用框架模块的拆分,以及里面的知识库、机器人自助等前端模块。
项目成果:把项目的各个模块拆分成独立的微该用,进行技术栈的迭代升级和各个模块的独立开发
维护,最终模 块的体积只有以前的 1/6 ,编译和打包速度都有显著提升(50s - 5s),
秒开率从 60% 提升 80% 左右,浏览体验全面升级。
📝 手写代码
JS 手写题,平时慢慢积累
**手写 const
**实现 const 的关键在于 Object.defineProperty() 这个 API,这个 API 用于在一个对象上增加或修改属性。
通过配置属性描述符,可以精确地控制属性行为。
Object.defineProperty() 接收三个参数 Object.defineProperty(obj, prop, desc)。
在 desc 里设置 writable: false
function _const(key, value) {
const desc = {
value,
writable: false
}
Object.defineProperty(window, key, desc)
}
_const('obj', {a: 1}) //定义obj
obj.b = 2 //可以正常给obj的属性赋值
obj = {} //无法赋值新对象
\
💡 TypeScript
类型体操练起来
ts 中的访问修饰符有哪些?
- public 任何地方
- private 只能在类的内部访问
- protected 能在类的内部访问和子类中访问
- readonly 属性设置为只读
\
🔃 React
有一个自己深入理解的开发框架,源码也需要懂
react.createElement 的用法 ?
React.createElement( type, [props], [...children]) 参数:
- 第一个参数:如果是组件类型,会传入组件对应的类或函数;如果是 dom 元素类型,传入 div 或者 span 之类的字符串。
- 第二个参数:一个对象,在 dom 类型中为标签属性,在组件类型中为 props 。
- 其他参数:依次为 children,根据顺序排列。
老版本的 React 中,为什么写 jsx 的文件要默认引入 React?
答:因为 jsx 在被 babel 编译后,写的 jsx 会变成上述 React.createElement 形式,所以需要引入 React,防止找不到 React 引起报错。
\
🎢 算法
算法与数据结构,多练,找题感
leetcode 206. 反转链表
题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表
示例:
输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]
题目解析:反转链表属于链表的常规操作
示例代码:
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
let p1=head;
let p2=null;
while(p1) {
const temp = p1.next;
p1.next=p2;
p2=p1;
p1=temp;
}
return p2;
}
\
🎓 设计模式
设计模式的实战应用
几个常用的设计模式:
| 设计模式 | 描述 | 例子 |
|---|---|---|
| 单例模式 | 一个类只能构造出唯一实例 | Redux/Vuex的store |
| 工厂模式 | 对创建对象逻辑的封装 | jQuery的$(selector) |
| 装饰器模式 | 对类的包装,动态地拓展类的功能 | React高阶组件、ES7 装饰器、Redux |
| 适配器模式 | 兼容新、旧接口,对类的包装 | 封装旧API、axios |
| 代理模式 | 控制对象的访问 | 事件代理、ES6的Proxy、 |
| 策略模式 | 对象映射的方式 | 针对多个 if-else 的场景的封装、抽离 |
| 状态模式 | 状态-行为映射为主体类对应实例的一个属性 | 咖啡机 - 各个口味的咖啡 |
| 观察者模式 | 当一个对象被修改时,会自动通知它的依赖对象 | Redux的subscribe、Vue的双向绑定 |
| 发布订阅模式 | 发布者 - 调度中心 - 订阅者 | |
| 迭代器模式 | 遍历 Iterator |
\
📈 性能优化
优化开发过程中的每一个细节
🎯 工程化
编译、打包、部署
webpack 常见的 Loader ?
- file-loader:把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件 (处理图片和字体)
- url-loader:与 file-loader 类似,区别是用户可以设置一个阈值,大于阈值会交给 file-loader 处理,小于阈值时返回文件 base64 形式编码 (处理图片和字体)
- source-map-loader:加载额外的 Source Map 文件,以方便断点调试
- svg-inline-loader:将压缩后的 SVG 内容注入代码中
- image-loader:加载并且压缩图片文件
- json-loader 加载 JSON 文件(默认包含)
- handlebars-loader: 将 Handlebars 模版编译成函数并返回
- babel-loader:把 ES6 转换成 ES5
- ts-loader: 将 TypeScript 转换成 JavaScript
- awesome-typescript-loader:将 TypeScript 转换成 JavaScript,性能优于 ts-loader
- sass-loader:将SCSS/SASS代码转换成CSS
- css-loader:加载 CSS,支持模块化、压缩、文件导入等特性
- style-loader:把 CSS 代码注入到 JavaScript 中,通过 DOM 操作去加载 CSS
- postcss-loader:扩展 CSS 语法,使用下一代 CSS,可以配合 autoprefixer 插件自动补齐 CSS3 前缀
- eslint-loader:通过 ESLint 检查 JavaScript 代码
- tslint-loader:通过 TSLint检查 TypeScript 代码
- mocha-loader:加载 Mocha 测试用例的代码
- coverjs-loader:计算测试的覆盖率
- i18n-loader: 国际化
- cache-loader: 可以在一些性能开销较大的 Loader 之前添加,目的是将结果缓存到磁盘里
\
🔍 浏览器
所有与用户交互的界面,都值得好好研究
介绍一下前端缓存?
前端缓存也可以直接看作是 HTTP 缓存 和 浏览器缓存 的结合,两者是相辅相成的关系。
HTTP 缓存是产生于客户端与服务器之间通信的一种缓存,利用这一缓存可以提升服务器资源的重复利用率,在有效的时间内不必每次都向服务器请求相同的资源,大大减少服务器的压力;而浏览器缓存则是浏览器提供的一种缓存机制,可以将服务器资源和网页访问产生的临时数据缓存到内存或本地,提升客户端的加载速度。
✨ 网络
网络链接的建立与传输
介绍一下 网络 OSI 七层模型?
\
📖 产品思维
写好代码的同时,也学学产品逻辑
如何冷启动一个新产品?
知识点: 考察你对新产品的设计经验,评估你从0-1搭建产品的能力。
分析: 首先要谈下自己对新产品冷启动的理解,之后再结合自己的工作经历,谈下自己对新产品冷启动核心流程的理解。
参考答案:
首先,我认为,冷启动是指一个没有用户的新产品到有用户的过程。
其次,冷启动一个产品设计我觉得最重要的工作,主要有 “产品调研”、“需求收集”、“MVP模型设计”、“运营迭代” 。
关于产品调研:
我觉得主要是从产品角度,针对新产品的业务场景、用户痛点、产品价值等方面进行可行性分析,这个阶段要论证产品的可行性,输出产品立项报告。
关于需求收集:
是针对已经论证通过的产品设计,通过一些产品方法,将高层级的需求进行详细收集与细化的过程,比如,竞品分析、现场调研等方法,这个阶段一般会输出需求收集分析报告。
关于“MVP模型设计”:
第三个核心工作点,我认为其实就是“产品功能设计”,但是因为是冷启动的新产品设计,我们一般会采用“MVP模型”进行最小化的产品设计, 以便进行市场试错。这也是我在进行多个从0-1产品设计时的重要经验,因为产品方向把控有偏差,后面会产生很大的沉默成本。
关于“运营迭代”:
第四个工作就是运营迭代,根据市场反馈,快速完善丰富产品功能,修复已知问题,以及提升用户体验性设计。
\
😀 演讲
费曼:脑子里的知识讲出来才是自己的
准备演讲前必须先判断演讲任务的场景和目标,是去为公司秀肌肉提升技术影响力、给产品做广告、还是吸引人才?
\
👨 HR 面
入职的最后一道关口。需要从职位匹配度、入职意愿、谈钱、口才等多个维度准备
你未来的职业规划是什么?
面试官问这个问题的目的:
看你这个人定位清不清晰,能否在公司长久的干下去。所以你千万不要说学点本事,出去创业神马的。
想知道你这个人做事是否有规划,有自己的处事原则。
看你和公司的规划是否一致,如果一致,会有可能把你列为候选人才培养。
正确回答:我在三年内会一直留在这里(就算你不留,你也要瞎掰),发展成为高级产品经理,在锻炼自己的同时,也为公司创造价值,带来收益。
🤼 劳动法
懂点劳动法关键时候保护自己
Tips:最近裁员的消息很多,在尽可能的前提下保护自己的合法权益。在绩效、人事、主管沟通过程中记得录音,上班的记录等。
换个视角:
还得看自己做的事情到底有没有价值。如果对自己做的事情心里是有谱的,安全系数就会高很多。另外如果真的大批裁员,说明整个社会的经济已经差到一定程度了,现在还远不至于那么糟。
有些裁员我觉得是喊的响,可能真正裁的并没有喊的那么多,可能把一些自然流失,也都当成了裁员。
大家肯定会有担心,但不要过分焦虑,还是要看团队和自己做的事情是不是有价值,自己在团队中的贡献,要相信没有一家公司会把有价值的人裁掉。同时也需要更加进一步提升自己的技能。祝好。
🌠 工具推荐
好的开发工具,提升工作效率
偷偷刷题,在 vscode 里使用 LeetCode 插件,摸鱼刷题爽歪歪。
刷高频题:codetop.cc/login
💰 投资理财
你不理财,财不理你。打工是不可能一辈子打工的
20220505
美联储5月议息会议 - 加息0.5% 6月开始缩表
4月PMI数据:
制造业 -> 47.4% (-2.1%)
非制造业 -> 41.9% (-6.5%)
两个主要结论:
1:各项指标全面走差,核心变量仍然是疫情
2:价格回落,二次滞涨的风险有机会通过经济衰退的方式解决
需求侧:需求不振,出口逐级回落
新订单: 48.8% -> 42.6%
新出口订单:47.2% -> 41.6%
供给侧:所有指标大幅下行
生产: 49.5% -> 44.4%
从业人员:48.6% -> 47.2%
采购量:48.7% -> 43.5%
进口:46.9% -> 42.9%
库存:48.9% -> 50.3% 企业被动补库存
结合需求、供给以及库存数据来看, 4月份仍然维持3月份供需两弱、库存积累的趋势,而且更加严重。
主要原材料购进价格指数 66.1% -> 64.2%
出厂价格指数:56.7% -> 54.4%
证明当下需求疲弱,已经开始影响到上游价格,正在寻顶过程中。
必选消费品则在寻底过程中,后续可看好。
从企业规模来看,大中小型企业 PMI 均出现回落。
总结一下:由于疫情扩散影响,4月份的PMI 延续3月份的PMI 趋势,继续大幅下行。
指数级别的机会仍要等疫情缓和。
看多大盘价值股:上证50、上证300
看空小盘制造业:中证500、中证1000、国政2000
\
🧘♀️ 杂谈
可能是鸡汤
程序员最大的有点就是能思考、学习。最大的缺点就是很难把一个事情讲明白。
解决办法:
费曼学习法 -> 学习感兴趣的事情,多想、多总结(笔记+记忆),然后写出来,讲出来(进行大量的练习)