遇到的问题 UI 跳转界面的时候发现过了好久才跳转, 最后发现后台存在的一个线程, 负责处理接收到的数据, 一秒接收到的数据大约有100多条, 由于这个子线程会运行几秒钟, 不断处理数据占用CPU, 造成 UI 线程无法刷新界面. java 多线程的知识点 解决 一开始想的是, 既然是因为子线程抢着CPU不放手, 那通知子线程放弃这次的CPU占用, 子线程一释放, UI 线程就可以拿到CPU. 然后首先想到的就是 Thread 的.yield()方法, 不过 yield() 方法在我的程序运行平台上不给力, 子线程最多暂缓10毫秒, 多数情况下子线程不会停下脚步; 然后想到了设置优 ...
事件 EventEmitter
EventEmitter EventEmitter 是内置模块 "events" 里唯一的类, 实现事件的触发和监听回调. // 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter(); // 绑定事件及事件的处理程序 eventEmitter.on('eventName', function (arg1) { console.log('事件被触发',arg1); }) .on('eventName', function (arg1) { console.log('事件被触发2',arg1); }); setTimeout(function() { // 触发名称 ...
Node.js 模块
Node.js 里有原生模块和文件模块, Node.js 可以使用 require() 包含其它文件里的功能, 然后使用 require 返回的对象调用模块里的公共方法; 加载模块 使用 require() 加载, 参数有以下四种 加载原生模块, 直接写模块名, 如 "http" 模块的相对路径 模块的绝对路径 要加载的文件的路径 创建自己的模块 module.exports exports 如果没有 module.exports 的话, exports 可以修饰多个接口, 返回时把这若干个接口整合成一个 module.exports; 如果 module.exports 和 exports 共存, 且 使用 module.exports引入对象, exports ...
语义版本号
格式: X.Y.Z (主版本号.次版本号.修订号)
- 大改动, 不兼容旧版, 更新 X 位
- 新增功能, 但是向下兼容, 更新 Y 位
- 修复 bug, 更新 Z 位
注意点
- 版本号使用非负整数递增;
- 主版本号为0, 表示处于开发阶段, 一切变化都可能发生;
- 主版本号递增后, Y 和 Z 要归零; Y 递增后, Z 归零;
扩展
- alpha版: 内部测试版本, α
- beta版: 公开测试版本, β
- RC版: 较成熟的版本
- release版: 稳定的发行版
文本分析(awk)
awk [-F fs] [-v var=value] [-f progfile | 'prog'] [file ...] 1 awk [-F fs] [-v var=value] [-f progfile | 'prog'] [file ...] awk 进行文本处理, 按行处理, -F 是文本分隔符, 默认空格; 获取分割的结果 $0 是所有结果, $1 取到第一个结果. 内置变量 NF 分隔之后的字段个数 ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME ...
管道
program1 | program2
将 program1 的标准输出作为 program2 的标准输入;
即 program1 的结果作为 program2 要处理的输入
1 2 3 |
ls | grep ^.*.txt >result.txt |
ls 列出当前文件夹里的文件列表, 将这个列表数据作为 grep 指令的输入, grep 指令过滤后将过滤后的结果存入 "result.txt" 文件
输入输出重定向
多数系统默认输入输出端是终端(命令行); 如果想要将结果输出到文件或者直接从文件里获取数据作为处理的数据, 而不是显示结果在终端界面上或从终端里获取键盘输入的数据, 就需要重定向; 输出重定向到文件 内容 > 文件名 直接使用 > 会覆盖之前的内容, 使用 >> 可以追加到文件末尾; 输入重定向 使用 < 特殊文件 "/dev/null" 写到这个文件里的内容会自动删除; 重定向表 命令 说明 command > file 将输出重定向到 file。 command < file 将输入重定向到 file。 command >> file ...
第一个shell脚本
#!/bin/bash # 这是注释 a=0; while [ $a -lt 1000 ] do ((a++)) done echo "end" 12345678 #!/bin/bash# 这是注释a=0;while [ $a -lt 1000 ]do ((a++))doneecho "end" 这个脚本声明了变量a, 接下来判断如果 a 小于 1000, 就执行 a 自增加 1 的操作, 最后结束的时候输出字符串 end; 一般注意点 shell 脚本文件一般保存为 .sh 文件, 使用其它的后缀(不建议)也可以执行; 因为脚 ...
java 8 Optional
java8新增工具类(java.util.Optional) 一个容器类, 表示该实例对象可能无值 使用目的是尽可能避免 NullPointerException 构建实例 返回一个空的 Optional static <T> Optional<T> empty() 返回一个非空有值的 Optional static <T> Optional<T> of(T value) 如果value是null的就返回一个空的 Optional, 否则返回非空有值的 Optional static <T> Optional<T> ofNullable(T value) 123456789 返回 ...
java 8 lambda
lambda 提供一种简化代码的方式; lambda 可以视作一个只有函数参数和方法体的方法, 没有修饰符、函数名和返回值声明; 实现内部类的效果(也内部类类似但有不同点) 能使用 lambda 的接口, 是函数式接口(接口内只有一个抽象方法) 参数 参数可以声明类型, 也可以不声明而由上下文自动推导出类型 参数放在()里, 多个参数使用 "," 分开 一个参数且类型是自动推导出来的, 那么 () 可以省略; 零个参数可以直接写(); 表达式 表达式可以有若干条, 只有一条时, "{}" 可以省略; 只有一行的话, return 可以省略 一些概 ...