FrankKai
FrankKai
### 如何创建一个可用来测试的Blob对象 ```js var newBlob = new Blob(array, options); // array是个数组:数组元素可以是ArrayBuffer,ArrayBufferView, Blob, USVString ``` 普通的 ‘foo’也可以作为生成Blob对象。 ```js var blob = new Blob(['foo'],{type:'text/plain'}) blob.text().then((data)=>{console.log(data)})// 'foo' ``` 这样就生成一个最简易的blob对象了,可以用来测试一些api。
### 不使用canvas的情况下将image的url转换为blob url #### fetch api ```js fetch(url).then(response => response.blob()).then((blob)=>{ const urlCreator = window.URL || window.webkitURL; const imageUrl = urlCreator.createObjectURL( blob ); const img = new Image(); img.crossOrigin = 'Anonymous';...
### 正则表达式速查表  https://regexr.com/
### JavaScript中的正则 - String.prototype.replace() / replaceAll() - String.prototype.match() / matchAll() - String.prototype.search() - String.prototype.split() - RegExp object ### 工作中遇到的正则表达式 - 匹配.jpg或.jpeg `/\.jpe?g$/ ` - 匹配11位手机号 `/1\d{10}/` - 匹配尾缀0 "12000".match(/0+$/) //...
### 时间复杂度真的是计算'时间'吗? 把算法的执行时间当做时间复杂度? 这种方式是最为直观也是最容易想到的方式。 但是有一个问题,那就是代码在不同性能的机器上运行,以及在不同的状态下运行,会呈现出完全不同的运行时间。 比如说我有一台内存为32GB内存的mbp,还有一台8GB的台式机,假设其它的硬件条件比如cpu,主板以及机器负载状态一致。通常情况下,32GB的内存要比8GB的内存运行更快。而且这种理想状态下的只有单一变量的状态也是很难做到的。 所以不能通过计算算法的消耗时间作为时间复杂度。 那我们通常所说的'时间'复杂度中的'时间'到底是指什么呢? 聪明的前辈们想到了一种方式:**大O表示法。** 大O表示法内部有非常复杂的数学计算逻辑,我们偷个懒,不去证明公式,把公式用好就很厉害了。 为什么不去证明一下或者演算一遍? 我在大一曾经上过一门叫做高等代数的课,有道题目叫做:**请证明1+1=2**。 看到这个题目应该知道为什么不深究大O表示法背后的数学了吧。
### 时间复杂度公式:大O符号表示法 ```js T(n) = O(f(n)) ``` - f(n)是指每行代码执行次数之和 - f(n)可以是这些值:1,log n,n,nlog n,n^2,n^3,n^k,2^n,n! - f(n)与O正相关 - O(f(n))可以是这些值:O(1),O(log n),O(n),O(nlog n),O(n^2),O(n^3),O(n^k),O(2^n),O(n!) - 大O表示法实际表示的是代码执行时间的增长变化趋势,不是真实的运行时间,是一种趋势预估 - 大O表示法中的f(n)是近似值。很多时候不会完全是1,log n,n,nlog n,n^2,n^3,n^k,2^n,n!这些完整的值。例如斐波那契数列的真实时间复杂度为O(2^N-1),由于N->∞,所以可以近似为O(2^N)。 更多的斐波那契数列时间复杂度的分析可以查看下文中的:如何理解斐波那契数列的时间复杂度O(2^N)?
### 常见时间复杂度类型及代码分析 理论扯了一大堆了,到精彩绝伦的Show me the code环节了。 先来看一张大O复杂度曲线图。  以下时间复杂度根据**最佳->较好->一般->较差->糟糕**的顺序排列。 - 常数型O(1) - 对数型O(log n) - 线性型O(n) - 线性对数型O(n log n) - 平方型O(n^2)、立方型O(n^3)、K次方型O(n^k) - 指数型O(2^n) - 阶乘型O(n!) #### 常数型O(1) - 常见于赋值和引用等简单操作...
### 如何理解斐波那契数列的时间复杂度O(2^N)? ```js O(2^N) ``` - `Math.pow(base, ex)`,2个递归所以base是2。 - N的话是因为N->∞,但其实真正是O(2^(N-1))。 ```js /** * @param {number} N * @return {number} */ var fib = function (N) { /** * 解法1: 递归...
### web audio workflow  `1.create Audio context -> 2.create sources-> 3.creates effects -> 4.choose destination -> 5.establish connections`
### sources and channels - 一个input或output由一个或者多个audio channel组成,channel的组成代表了audio的layout。 - 任何离散的channel结构都是支持的,包括mono,stereo,quad,5.1等等  #### 音频源生成方式 - 通过JavaScript直接创建一个audio node,例如oscillator。 - 创建一个raw PCM data。Audio Context有解码各种格式audio的方法。 - 从HTML media elements获取。例如`video`或者`audio`。 - 直接从WebRTC MediaStream获取。例如webcam或者microphone。 #### Audio channels...