Alei Blog

保持简单

var,let和闭包

说明 let是ES6的新运算符 重复声明变量 var允许 var a = 1 var a = 2 console.log(a) // 2 let不允许 let b = 1 let b = 2 console.log(b) // SyntaxError: Identifier 'b' has already been declared ...

lambda替换匿名内部类Runnable

说明 Java是面向对象的语言,不是函数语言 Java变量只能是基本类型和引用类型,不能是方法(一段要执行的代码) 所以Java在使用回调函数时特别的啰嗦,要把回调函数封装成类的一个方法,将类的实例传给调用方 因为仅仅需要执行回调函数,并不关心类的其他要素,通常我们使用匿名内部类去封装唯一的方法 这种回调设计,叫做回调模式,可以说,这是因为Java不支持方法作为参数而...

Java异步IO(非阻塞式)

说明 包是java.nio.* Future始于JDK 1.5 Files, Paths始于JDK 1.7 IO操作时,线程非阻塞 代码举例 需要准备h.txt文件,包含文本内容 代码中包含读取文件内容和计算1到100的求和 观察打印语句的执行顺序 结论是线程异步执行,主线程和子线程非阻塞 和nodejs不同,nodejs是单线程,默认实现就是...

Java同步IO(阻塞式)

说明 包是java.io.* API始于JDK 1.1 IO操作时,线程阻塞 代码举例 需要准备h.txt文件,包含文本内容 代码中包含读取文件内容和计算1到100的求和 观察打印语句的执行顺序 结论是线程是阻塞的,顺序执行 import java.io.*; public class SyncIO { /** *...

Java多线程-使用Timer和CountDownLatch

被请求方单次执行时间较长,请求方使用多线程加速处理批量请求;被请求方对于请求频率有严格限制,超出阈值连接超时 场景 被请求方提供远程API 一次请求,响应时间需要几秒钟,速度慢而且不稳定 API要求,每分钟最多接收请求100次,否则拒绝响应 请求方需要处理10万次以上的请求 请求方太慢或者请求频率不符合接口要求,都无法完成任务 方案 请求方使用多...

使用免费SSL证书

免费一年的阿里云DV证书到期,继续使用需要续费 不想每年都折腾 申请证书时,blog二级域名没通过,查了不是敏感词,发工单没回复 场景 http不安全,会被监听,劫持后添加广告 免费的SSL证书 长期有效 服务器环境:CentOS 7, Nginx 安装客户端certbot-auto certbot-auto客户端用于获取let’s encrypt的...

Vim保存对只读文件的修改

场景 Vim修改文件,已经编辑了一些内容 保存的时候,提示此文件是只读文件,无法保存 如果强制退出,那么之前编辑的内容全部丢失,费时费力 操作 提示只读文件,无法保存时,在vim中运行 :w !sudo tee % 解释 sudo 切换权限到超级用户,可以操作只读文件 ! ! 意思是 执行后面的shell命令 ...

CentOS 创建sudo用户

场景 新建的CentOS服务器 出于安全考虑,禁止使用root远程登录 增加sudo用户 增加用户 注意,bash的提示符#, 表示当前用户是root; $, 非root用户 使用root登录之后,创建用户tom # adduser tom 设置密码 # passwd tom 增加到具有sudo权限的用户...

Oracle insert忽略重复记录

向Oracle数据库中插入记录,但是有部分数据在库中已存在 场景 插入数据报错,提示唯一性约束冲突 插入的数据由中间件通过网络取得,并不清楚取得的数据和数据库中的数据是否存在唯一性冲突 需求是,存在冲突,就不插入 方案一 利用Oracle的Comments -- 假设表名是t_employees, 冲突的索引名是i_employees_code ...

Java asychronous execution

网络请求,响应很慢,采用异步调用,避免阻塞 ExecutorService 举例:企业系统调用银行付款接口 // 调用银行付款接口,响应较慢,采用异步 ExecutorService executor = Executors.newCachedThreadPool(); Future<String> future = executor.submit(ne...