FrankKai

Results 350 comments of FrankKai

### Git常用命令 - git克隆远程分支仓库: `git clone -b 分支名称 远程地址` git克隆远程仓库项目时如果不指定分支,只会克隆默认分支的内容。 - 查看git用户名和密码 `git config user.name` `git config user.email` - 分支相关 `git branch(查看当前分支)` `git branch -a(查看所有分支)` `git checkout 分支名(切换到对应分支)` 会自动将代码更新为分支代码 `git...

### 优雅使用Git的一些实践 - windows下gitbash支持中文输入: 1)鼠标左键点击左上角git的logo 2)找到options并且切换到text目录,将Character set设置为UTF-8 - 生成ssh-key `ssh-keygen -t rsa -C "[email protected]"` - windows查看ssh-key `/c/Users/frank/.ssh/id_rsa.pub` - mac/linux查看ssh-key `cd ~/.ssh` `ls` `cat id_rsa.pub` - git flow https://danielkummer.github.io/git-flow-cheatsheet/index.html - 误删除stash,该怎么办?...

### oh-my-zsh 常用命令 #### 缩写全写对照表 缩写| 全写 -- | -- gst | git status gaa | git add . gcmsg "" | git commit -m "" gp | git push...

参考资料: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

### 什么是栈? - 栈是一种后入先出(LIFO)的数据结构 - 栈通常使用DFS(Depth First Search)遍历 - 通常可以通过top/bottom来代表栈的顶部和底部 #### 数据结构图 ![image](https://user-images.githubusercontent.com/19262750/78032216-4306da80-7397-11ea-93a5-a4e9a0993168.png) #### 入栈出栈图 ![image](https://user-images.githubusercontent.com/19262750/78032538-bd375f00-7397-11ea-91bc-4b95027f7949.png) ### JavaScript中的栈 #### 在js中,如何发现出栈LIFO的特性? 下面这个结构大家都熟悉,瞬间体现出栈LIFO的特性。 ```js // 定义一个栈 let stack = [1,2,3]; // 入栈...

### leetcode 栈 解法题目 - 20.有效的括号(easy) - 67.二进制求和(easy) - 905.按奇偶排序数组(easy) - 56.合并区间(medium) - 75.颜色分类(medium) - 228.汇总区间(medium) - 739.每日温度(medium) #### 20.有效的括号(easy) 题目:https://leetcode-cn.com/problems/valid-parentheses/ 题解:https://github.com/FrankKai/leetcode-js/blob/master/20.Valid_Parentheses.js ```js /** * 解法2:栈 * 1.构建一个栈 * 2.依次入栈所有开括号...

### 面试题 栈 解法题目 #### 实现一个BigInt 实现大整数相加,大于 Number.MAX_VALUE,不能直接使用 BigInt。 ```js /** * 请通过代码实现大整数(可能比Number.MAX_VALUE大)相加运算 // your code goes here var bigint1 = new BigInt('1231230'); var bigint2 = new BigInt('12323123999999999999999999999999999999999999999999999991'); console.log(bigint1.plus(bigint2)) */...

### Blob对象知识点 - 将一个ArrayBuffer转换为Blob对象时,可以指定一个[MIME类型](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types)。例如`const blob = new Blob([new Uint8Array(arrayBuffer)], { type: 'audio/AMR' });` - Blob对象是一个类文件对象,熟知的FIle就是继承自Blob类的。 - 使用Blob()构造器,可以将非blob对象转换为Blob。 - 可以使用slice方法获取到Blob切片,而且可以修改MIME类型。 - 还有3个Working Draft方法,stream,text,ArrayBuffer。 - **Blob对象会在磁盘中缓存,或者存储在内存中。** 这取决于浏览器实现。

### 关键API window.URL.createObjectURL() - URL.createObjectURL(object) object可以包括FIle,Blob和MediaSource对象 - URL.createObjectURL()的生命周期仅仅局限于创建它的window对象的document - 需要通过URL.revokeObjectURL(objectURL)通知浏览器,不再持有文件的引用从而释放内存,若不释放,会在document销毁时自动释放 **提醒:尤其第三点,涉及到了内存管理,一定要注意释放内存** #### 疑问 - URL的生命周期在vue组件中如何表现? vue的单文件组件共有一个document,这也是它被称为单页应用的原因,因此可以在组件间直接通过blob URL进行通信。 在vue-router采用hash模式的情况下,页面间的路由跳转,不会重新加载整个页面,所以URL的生命周期非常强力,因此在跨页面(非新tab)的组件通信,也可以使用blob URL。 需要注意的是,在vue的hash mode模式下,需要更加注意通过URL.revokeObjectURL()进行的内存释放,在大量使用blob URL的情况下,可能会撑爆浏览器内存 ##### 组件发出blob URL ```html 上传背景 backgroundUpload(event) { const...

### Blob,File对象如何转换为base64字符串 本地预览仅仅适用于浏览器预览,当需要持久化存储时,就需要将其上传到云存储上,现在用处比较广泛的是OSS、七牛云等公有云,私有云没接触过,应该是大同小异。 如果是上传到云存储,一个仅在当前document内生命周期的blob url就不生效了,那么就需要上传有效的数据上去,就我目前接触的项目来说,我们是将文件最终转换成base64格式,通过接入sdk接口的服务端接口实现上传。 那么问题来了,如果是canvas,可以通过toDataURL()转换为base64,第三方的canvas库也提供相同的api。可以将blob url转换为base64吗?那么如何将File,Blob对象转换为base64格式? #### 可以将blob url转换为base64吗? 不可以。 #### 如何将File,Blob对象转换为base64格式? 用到一个神奇的对象:**Reader对象** 用到一个神奇的方法:**readAsDataURL(blob)** 当文件完成读取并成功转换后,会触发**loadend**事件,同时会在Reader实例的**result**属性中存储base64格式的数据。 若是比较抽象,可以看下面的示例: ```js transferBlobFileToBase64(file){ const reader = new FileReader(); reader.readAsDataURL(file); reader.onloadend = async function() {...