摘要: 虽然很多人都觉得前端算法弱,但其实 JavaScript 也可以刷题啊!最近两个月断断续续刷完了 leetcode 前 200 的 middle + hard ,总结了一些刷题常用的模板代码。走过路过发现 bug 请指出,拯救一个辣鸡(但很帅)的少年就靠您啦! 常用函数 包括打印函数和一些数学函数。 阅读全文
posted @ 2019-06-28 08:48 我不吃饼干呀 阅读(13558) 评论(12) 推荐(6) 编辑
摘要: 本人写了五年的后台管理。每次面试前就会头疼,因为写的页面除了表单就是表格。抱怨过苦恼过也后悔过,但是站在现在的时间点回想以前,发现有很多事情可以做的更好,于是有了这篇文章。 本文首发在 https://juejin.cn/post/7360528073631318027 写优雅的代码 一道面试题 大 阅读全文
posted @ 2024-09-30 15:00 我不吃饼干呀 阅读(2560) 评论(8) 推荐(16) 编辑
摘要: Easy 1. Easy - 4 - Pick 从类型 T 中选出符合 K 的属性,构造一个新的类型 type MyPick<T, K extends keyof T> = { [key in K]: T[key] } keyof 是 TypeScript 中的一个关键字,用于获取一个类型的所有属性 阅读全文
posted @ 2024-08-15 15:23 我不吃饼干呀 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 完整 demo 和 lib 文件可以在 https://github.com/tengge1/webgl-guide-code 中找到。 第 2 章 WebGL 入门 第一个 WebGL 程序 function main() { // 获取canvas元素 var canvas = document 阅读全文
posted @ 2024-08-15 15:12 我不吃饼干呀 阅读(10) 评论(0) 推荐(0) 编辑
摘要: oh-my-zsh nvm command not found 如果你在使用 oh-my-zsh 并且在终端输入 nvm 命令时提示 "command not found",这可能是因为 oh-my-zsh 没有配置 nvm 插件导致的。 首先,确保你已经在系统中安装了 nvm。如果没有安装,请参考 阅读全文
posted @ 2023-03-28 16:34 我不吃饼干呀 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 关于pod install 慢的要死的问题 解决方法记录 开始时显示ruby有问题,卸载cocoapods重装的 然后启动不起来,到ios目录下执行 pod install 然后太慢尝试设置了域名ip /etc/hosts 151.101.1.194 github.global.ssl.fastly 阅读全文
posted @ 2023-03-08 17:24 我不吃饼干呀 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 第15章、编译器核心技术概览 15.1 模板 DSL 的编译器 完整的编译包括 [源代码] -->词法分析-->语法分析-->语义分析(编译前端) -->中间代码生成-->优化-->目标代码生成(编译后端) -->[目标代码] 在 Vue 中编译器的工作流程 [模板]-->词法分析-->语法分析-- 阅读全文
posted @ 2023-02-09 14:05 我不吃饼干呀 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 第14章、内建组件和模块 14.1 KeepAlive 组件的实现原理 KeepAlive 一词借鉴了 HTTP 协议。 KeepAlive 组件可以避免组件被频繁的销毁/重建。本质是缓存管理,再加上特殊的挂载卸载逻辑。 卸载时将组件放入另一个容器中,再次挂载时再拿出来。对应生命周期为 activa 阅读全文
posted @ 2023-02-09 12:55 我不吃饼干呀 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 第13章、异步组件与函数式组件 13.1 异步组件要解决的问题 用户可以简单通过 import 异步导入组件。 <template> <component :is="asyncComp"> </template> <script> export default { setup() { const a 阅读全文
posted @ 2023-02-07 18:34 我不吃饼干呀 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 第12章、组件的实现原理 12.1 渲染组件 在渲染器内部的实现看,一个组件是一个特殊类型的虚拟 DOM 节点。之前在 patch 我们判断了 VNode 的 type 值来处理,现在来处理类型为对象的情况。 // n1 旧node n2 新node container 容器 function pa 阅读全文
posted @ 2023-02-07 15:16 我不吃饼干呀 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 第11章、快速 Diff 算法 11.1 相同的前置元素和后置元素 快速 Diff 算法包含预处理步骤,这借鉴了纯文本 Diff 算法的思路。 先把相同的前缀后缀进行处理,然后再比较中间部分。 function patchKeyedChildren(n1, n2, container) { cons 阅读全文
posted @ 2023-02-06 17:26 我不吃饼干呀 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 第10章、双端 Diff 算法 10.1 双端比较的原理 上一章的移动算法并不是最优的,比如我们把 ABC 移动为 CAB,如下 A C B --> A C B 按照上一章的算法,我们遍历新的数组,然后定下第一个元素 C 的位置后,后面的 AB 都需要被移动。但是显而易见的,我们其实可以只移动 C 阅读全文
posted @ 2023-02-06 12:55 我不吃饼干呀 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 第9章、简单 Diff 算法 9.1 减少 DOM 操作的性能开销 在之前的章节,如果新旧子节点的类型都是数组,我们会先卸载所有旧节点,再挂载所有新的子节点。但是如果存在相同类型的节点,我们完全可以复用节点,只修改类型即可。 所以这一节采取就朴素的复用思路,按顺序依次 patch 节点,如果旧子节点 阅读全文
posted @ 2023-02-03 17:45 我不吃饼干呀 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 第8章、挂载与更新 8.1 挂载子节点和元素的属性 扩展子元素的类型可以为数组,并判断如果是数组的话,就先依次挂载所有的子元素。 同时新增节点属性。属性可以通过 el.setAttribute 添加到 DOM 上,也可以直接在 DOM 对象上设置。 function createRenderer(o 阅读全文
posted @ 2023-02-03 17:13 我不吃饼干呀 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 第7章、渲染器的设计 7.1 渲染器与响应系统的结合 渲染器需要有跨平台的能力。 在浏览器端会渲染为真实的 DOM 元素。 const { effect, ref } = VueReactivity // VueReactivity 是前几章实现的响应式代码 function renderer(do 阅读全文
posted @ 2023-02-02 15:12 我不吃饼干呀 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 第6章、原始值的响应式方案 6.1 引入 ref 的概念 既然原始值无法使用 Proxy 我们就只能把原始值包裹起来。 function ref(val) { const wrapper = { value: val, }; Object.defineProperty(wrapper, '__v_i 阅读全文
posted @ 2023-01-31 14:19 我不吃饼干呀 阅读(39) 评论(0) 推荐(0) 编辑