找到两个单向链表相交的第一个公共节点
反转链表
反转链表, 大致有递归和非递归方法
1 | // 定义链表结构为 |
补充
总觉得自己的递归写法有点别扭,每次返回的是尾结点,还得用个变量保存最后的结果,也就是反转后的头结点。
搜了一下其他人的写法,然后自己再写还是差点绕晕了 - - 还是太菜了
1 | function reverseNodeByRecursive(node) { |
链表打印
1 | // 递归 |
nginx配置
nginx.conf
1 | user www-data; |
1 | server { |
1 | server { |
1 | location ^~/user/ { |
Docker 使用笔记
could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
- 使用
docker network ls
查看network数量 docker network prune
关闭未使用的网络
1 | FROM node:10-alpine |
1 | # 删除所有 <none> image |
1 | # 删除所有 <none> image |
vim操作
h,j,k,l h表示往左,j表示往下,k表示往右,l表示往上
ggdG 删除所有
I 前插入
A 后插入
w, W 跳到单词的后面,小写包括标点
b, B 以单词为单位往前跳动光标,小写包含标点
O 开启新的一行
^ 一行的开始
$ 一行的结尾
gg 文档的第一行
[N]G 文档的第N行或者最后一行
u 撤销
ctrl r 反撤销
dd 删除一行
dw 删除后面单词 db 删除前面单词
JS字节序相关
字节序分2种
- Little endian:小端字节序, 将低序字节存储在起始地址
- Big endian:大端字节序, 将高序字节存储在起始地址
JS里面的体现: 同一段数据用不同视图读取
1 | const uint8 = new Uint8Array([1, 2]); |
上面代码生成一个 2 个长度的Uint8 TypedArray,然后在它的buffer基础上,建立了一个 16 位整数的视图。
那么这段数据对应的二进制应该是 00000001 00000010
1 | 0b0000000100000010 |
用16位无符号整数读出来应该是 0b0000000100000010
, 应该是258, 为什么是 513呢 ?
解释:
这说明本电脑采用的小端字节序(little endian),相对重要的字节排在后面的内存地址,相对不重要字节排在前面的内存地址, 即 00000010 00000001
1 | 0b0000001000000001 |
那么如果想手动指定字节序呢 ?
DataView 视图:
- 支持多种类型读写
- 支持设置字节序
DataView视图提供更多操作选项,而且支持设定字节序。
默认情况下,DataView的get方法使用大端字节序解读数据,如果需要使用小端字节序解读,必须在get方法的第二个参数指定true。
1 | const dv = new DataView(uint8.buffer); |
写入数据同理。
ArrayBuffer转换
最近开发支付宝小程序蓝牙相关功能,由于支付宝小程序和微信小程序api设计有些不同,需要在 base64, ArrayBuffer, 16进制字符串直接进行转换,记录一下
1 | import { Base64 } from 'js-base64'; |