二叉树和二叉搜索树总结
二叉树
节点的定义
12345678910111213class TreeNode<T> { public val: T; public right: TreeNode<T> | null = null; public left: TreeNode<T> | null = null; public parent: TreeNode<T> | null = null; constructor(val: T) { this.val = val; } isLeave() { return this.left === null && this.right === null; }}
遍历
对于二叉树来说,比较重要的一个操作就是遍历。遍历分为前序、中序、后序、层序遍历,也称为深度优先搜索和广度优先搜索。
深度优先搜索中包含了前序、中序、后序遍历。
深度优先
对于深度优先搜索最先想到的应该就是递归实现,这也是最简单的实现方式。
1234567 ...
浅析webpack打包过程
初始化
当我们运行 webpack 命令进行打包的时候,webpack第一步做的事就是将我们命令行传递的参数、webpack.config.js 配置文件的导出、默认配置进行合并,形成最终的配置然后开始打包我们的模块。
这一步做的事比较简单,对配置的处理过程是依托一个第三方库yargs完成的。
编译
这一步是最重要的一步,用于将我们的源代码转换成目标代码。
chunk
chunk是打包过程中的一个产物,它表示通过某个入口模块找到的所有依赖的统称。
webpack 会根据入口模块创建一个chunk,一个项目中可以配置多个chunk。
每个chunk都有至少两个属性:
name:默认为main
id:唯一编号,开发环境和name相同,生产环境是一个数字,从0开始
配置中 entry 配置的就是chunk名和入口模块:
1234entry: { main: "./src/index.js", //属性名:chunk的名称, 属性值:入口模块(启动模块) a: ["./src/a.js", "./src/ind ...
webpack模块化原理
CommonJS
在webpack中既可以书写commonjs模块也可以书写es模块,而且不用考虑浏览器的兼容性问题,我们来分析一下原理。
首先搞清楚commonjs模块化的处理方式,简单配置一下webpack,写两个模块编译一下看一下:
webpack.config.js
1234module.exports = { mode: "development", devtool: "none"}
index.js
12const a = require('./a')console.log(a)
a.js
12const a = 'a';module.exports = a;
编译结果
查看编译结果,可以发现webpack对于每个模块的做法类似于node,将每个模块放在一个函数环境中并向其中传入一些必要的参数。webpack将这些模块组成一个对象(属性名是模块路径(模块id),属性值为模块内容)传入一个立即执行函数,立即执行函数中定义了一个函数 __webpack_requi ...
弄明白BFC
BFC是什么
刚开始学 CSS 只知道BFC叫做块级格式化上下文,触发BFC可以解决布局的一些问题,但是具体BFC是个什么不清楚。
先说总结,BFC是一块独立的渲染区域,而且在这块区域中的规定了常规流块盒的布局:
常规流块盒在水平方向必须撑满包含块
常规流块盒在包含块的垂直方向上依次摆放
常规流块盒若外边距无缝相邻,则进行外边距合并
常规流块盒的自动高度和摆放位置,无视浮动元素
这也对应了MDN中的描述:
块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。
CSS 2.1 中对常规流的描述:
常规流中的任何一个盒子总是某个格式区域(formatting context)中的一部分。块级盒子是在块格式区域(block formatting context)中工作的盒子,而内联盒子是在内联格式区域(inline formatting context)中工作的盒子。任何一个盒子总是块级盒子或内联盒子中的一种。
也就是说BFC就是一个区域,所有的常规流块 ...
React 中的事件
React 中的事件
在 React 中书写事件的时候和 DOM 中注册事件很类似语法区别不大:
事件名采用小驼峰命名方式
传入的函数是函数引用而不是函数名
但是 React 中的事件注册和 DOM 中的事件注册是有很大区别的。
事件的特点
对于大部分的事件(除了不会冒泡 / document 没有的)通过事件委托最终都会被注册到 document 上
12345678910function App() { return ( <div> <button onClick={() => console.log("click")}>click</button> </div> );}ReactDOM.render(<App />, document.getElementById("root"));document.getElementById("root").onclick = (e) =&g ...









