对山西大同订婚强奸案的思考
近几天热门话题二审判决后,网上似乎只有一种声音,不太对劲。而各方也只是借此案来宣传蹭热度,在此写下我的思考。
读《盐铁论》
读这本书前前后后花了一年,终于读完了。
用数组或栈实现阻塞队列
用数组实现 参考 JDK 中的实现java.util.concurrent.ArrayBlockingQueue。 考虑使用环形数组。用两个指针 putIndex(下一个入队位置)、takeIndex(下一个出队位置),入队/出队到数组末尾时都从零开始,count统计元素数量,count=0说明队列为空,count=数组容量说明队列已满。 考虑用 lock + Condition.await 实现阻塞和保证线程安全。 import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class ArrayBlockingQueue<E> { final Object[] items; // 存放元素的数组 int putIndex; // 下一个入队位置 int takeIndex; // 下一个出队位置 int count; // 元素数量 final...
博客迁移说明
最近有时间,把博客迁移了,本文记录迁移的思路和过程。仅能找到的几篇都迁了过来,时间可能对不上,无所谓了,这是迁移后的第一篇。
邮件已读追踪
最近需要做个追踪邮件已读功能,本文记录了实现的过程。
电信机顶盒无线改造
过年回家想在卧室看电视,经过一番折腾终于实现,效果还可以,记录一下以供参考。
Java问题排查
这是一些 java 程序查错的方法和经常使用的命令。
源码阅读-HashMap
HashMap的原理就是用一个数组存储一系列 K-V 结构的 Node 实体,存储位置通过对 key 的 hashCode 计算得到,Node 对象有 next 指针,作为单链表的一个节点。如果发生 hash 冲突,就将新的 Node 插入链表里。链表过长超过阈值的话为了提高查询效率会转为红黑树(JDK 1.8以后)。 成员变量 //默认初始化容量static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16//最大容量static final int MAXIMUM_CAPACITY = 1 << 30;//默认负载因子 0.75static final float DEFAULT_LOAD_FACTOR = 0.75f;//桶中链表树化的阈值 8static final int TREEIFY_THRESHOLD = 8;//树转为链表的阈值 6static final int UNTREEIFY_THRESHOLD = 6;//table最小树化容量 64static final int...
Linux上的OpenVPN搭建
最近因工作需要搭一个VPN,网上相关的词都被屏蔽(白眼.gif),只能自己鼓捣,记录一下过程。
Git笔记
实践中发现版本控制还是很重要的,于是看了看廖雪峰的Git教程,比较简单易懂,整理一下笔记。