摘要: 对外联调的时候,通常会使用客户提供的虚拟专用网络,有时候可能造成本地访问不同网段的内网出现问题,这个时候就需要对路由表进行查看和处理了。 阅读全文
posted @ 2020-05-12 18:35 Lucare 阅读(918) 评论(0) 推荐(0) 编辑
摘要: IDEA GrepConsole 插件在控制台无法右键唤起 grep 来过滤关键字 阅读全文
posted @ 2019-08-01 14:10 Lucare 阅读(3414) 评论(0) 推荐(0) 编辑
摘要: 一、目录与路径 相对路径与绝对路径 绝对路径:路径的写法“一定由根目录 / 写起”,例如: /usr/share/doc 这个目录。 相对路径:路径的写法“不是由 / 写起”,例如由 /usr/share/doc 要到 /usr/share/man 下面时,可以写成: “cd ../man”这就是相 阅读全文
posted @ 2019-07-31 20:31 Lucare 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 引言 最近需要对接一个接口,人家提供了两种调用方式,第一种是基于IE浏览器的Active,第二种是动态链接库dll。我们公司的产品不支持IE,所以只能通过调用dll来完成了。 之前我已经用Java实现了这个代理,但是感觉很笨重,依赖于容器还有JVM一大堆,这个代理要安装在客户端电脑上,基于Http协 阅读全文
posted @ 2019-03-24 10:55 Lucare 阅读(1617) 评论(2) 推荐(0) 编辑
摘要: 任务提交 之前在分析线程池的时候,提到过 AbstractExecutorService 的实现: 对于 submit 提交的任务,不管是 Runnable 还是 Callable,最终都会统一为 FutureTask 并传给 execute 方法。 对于 Runnable 还会创建一个适配器 : 阅读全文
posted @ 2019-01-24 21:03 Lucare 阅读(695) 评论(1) 推荐(1) 编辑
摘要: 线程池的实现原理 1)如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(注意,执行这一步骤 需要获取全局锁)。 2)如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQueue。 3)如果无法将任务加入BlockingQueue(队列已满),则创建新 阅读全文
posted @ 2018-12-09 20:39 Lucare 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 遇到问题 曾今在开发的过程遇到一个问题,当时有一个服务是群发邮件的,由于一次发送几十个上百个,所以就使用了多线程来操作。 在单元测试的时候,我调了这个方法测试下邮件发送,结果总是出现莫名其妙的问题,每次都没有全部发送成功。 后来我感觉到启动的子线程都被杀掉了,好像测试方法一走完就over了,试着在测 阅读全文
posted @ 2018-07-15 12:16 Lucare 阅读(1242) 评论(0) 推荐(0) 编辑
摘要: happens-before 是JMM最核心的概念。对应Java程序员来说,理解happens-before是理解JMM的关键。 一、JMM 的设计 从JMM设计者的角度,在设计JMM时,需要考虑两个关键因素: 程序员对内存模型的使用。程序员希望内存模型易于理解、易于编程。程序员希望基于一个强内存模 阅读全文
posted @ 2018-07-10 09:24 Lucare 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 一、volatile 的内存语义1. volatile 的特性volatile变量自身具有以下特性:可见性 :对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。原子性 :对任意单个volatile变量的读/写具有原子性,但类似... 阅读全文
posted @ 2018-06-30 17:37 Lucare 阅读(735) 评论(0) 推荐(0) 编辑
摘要: 重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。1. 数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。编译器和处理器在重排序时,会遵守数据依赖性,编译器和处理器不会改变存在数据依赖... 阅读全文
posted @ 2018-06-30 16:39 Lucare 阅读(218) 评论(0) 推荐(0) 编辑