w1100n
This site is best viewed in Google Chrome
wiloon, 10/18/2017 10:41

 在日常的开发工作中,我们有的时候需要构造像Map<K, List>或者Map<K, Set>这样比较复杂的集合类型的数据结构,以便做相应的业务逻辑处理。例如: 复制代码 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; public class MultimapTest { Map<String, List<StudentScore>> StudentScoreMap = new HashMap<String, List<StudentScore>>(); @Test public void testStudentScore(){ for(int i=10;i<20;i++){ StudentScore studentScore=new StudentScore(); studentScore.CourseId=1001+i; studentScore.score=100-i; addStudentScore(“peida”,studentScore); } System.out.println(“StudentScoreMap:”+StudentScoreMap.size()); System.out.println(“StudentScoreMap:”+StudentScoreMap.containsKey(“peida”)); … Continue reading

wiloon, 10/18/2017 10:32

对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常 http://www.cnblogs.com/dolphin0520/p/3933551.html

wiloon, 10/18/2017 10:30

为什么java.util.concurrent 包里没有并发的ArrayList实现? 原文链接 作者:Stephen C 译者:郑旭东 校对:方腾飞 问:JDK 5在java.util.concurrent里引入了ConcurrentHashMap,在需要支持高并发的场景,我们可以使用它代替HashMap。但是为什么没有ArrayList的并发实现呢?难道在多线程场景下我们只有Vector这一种线程安全的数组实现可以选择么?为什么在java.util.concurrent 没有一个类可以代替Vector呢? 答:我认为在java.util.concurrent包中没有加入并发的ArrayList实现的主要原因是:很难去开发一个通用并且没有并发瓶颈的线程安全的List。 像ConcurrentHashMap这样的类的真正价值(The real point / value of classes)并不是它们保证了线程安全。而在于它们在保证线程安全的同时不存在并发瓶颈。举个例子,ConcurrentHashMap采用了锁分段技术和弱一致性的Map迭代器去规避并发瓶颈。 所以问题在于,像“Array List”这样的数据结构,你不知道如何去规避并发的瓶颈。拿contains() 这样一个操作来说,当你进行搜索的时候如何避免锁住整个list? 另一方面,Queue 和Deque (基于Linked List)有并发的实现是因为他们的接口相比List的接口有更多的限制,这些限制使得实现并发成为可能。 CopyOnWriteArrayList是一个有趣的例子,它规避了只读操作(如get/contains)并发的瓶颈,但是它为了做到这点,在修改操作中做了很多工作和修改可见性规则。 此外,修改操作还会锁住整个List,因此这也是一个并发瓶颈。所以从理论上来说,CopyOnWriteArrayList并不算是一个通用的并发List。 为什么java.util.concurrent 包里没有并发的ArrayList实现? https://twiceyuan.com/2016/06/09/ArrayList-is-not-thread-safe/

wiloon, 10/15/2017 15:04

Chrome 有很多的特性在界面菜单中是没有体现的,你可以通过 chrome:// 命令来访问。本文介绍 12 个非常有用的 chrome:// 命令: chrome://flags 可用来启用或者关闭某些 chrome 的体验特性 chrome://dns 该命令将显示浏览器预抓取的主机名列表 chrome://downloads 该命令同时也可以从菜单中的下载来访问,其快捷键是 Ctrl + J chrome://extensions 该命令等同于菜单 – 工具 – 扩展 chrome://bookmarks 改名了等同于菜单-书签-书签管理器,快捷键 Ctrl+Shift+O chrome://history 该命令可从菜单-历史直接访问,快捷键 Ctrl+H chrome://memory 该命令将重定向到 “chrome://memory-redirect/”. 它将显示浏览器使用内存的情况,以及系统中运行的其他浏览器,包括 firefox。同时还显示浏览器进程的详细信息。 chrome://net-internals 该命令显示网络相关信息,用来捕获浏览器生成的网络事件,可导出数据,可查看DNS主机解析缓存。 其中一个很重要的功能就是“测试”,如果你无法访问某个网址,那么可以使用 “chrome://net-internals” … Continue reading

wiloon, 10/15/2017 12:55

http://www.linuxidc.com/Linux/2012-12/76143.htm 在Linux下,如果需要查看进程的启动时间, 常用ps aux命令,但是ps aux命令的缺陷在于只能显示时间到年、日期、或者时间, 无法具体到年月日时分秒。如果需要查看某个进程的具体启动时间, 使用 ps -p PID -o lstart, 其中,PID为某个进程的进程ID号。 如下所示, 显示系统中所有httpd进程的具体启动时间。 for pid in $(pgrep httpd); do echo -n “${pid} ” ; ps -p ${pid} -o lstart | grep -v “START” ; done 301 Mon Aug … Continue reading

wiloon, 10/14/2017 17:34

http://blog.csdn.net/linzhiji/article/details/6774410 这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。 ./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC, 并不是需要CC或GCC,它是个shell脚本。 make是用来编译的,它从Makefile中读取指令,然后编译。 make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。 AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西。如果你也写程序想使用AUTOMAKE和AUTOCONF,可以参考CNGNU.ORG上的相关文章。 1、configure ,这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如 代码: ./configure –prefix=/usr 上面的意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin), 资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。 同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。 有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制, 你可以通过允许 ./configure –help 察看详细的说明帮助。 2、make ,这一步就是编译,大多数的源代码包都经过这一步进行编译 (当然有些perl或python编写的软件需要调用perl或python来进行编译)。 如果 在 make … Continue reading

foo
wiloon, 10/14/2017 16:57

wget https://download.libsodium.org/libsodium/releases/libsodium-stable-2017-10-14.tar.gz wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz yum groupinstall “Development tools” ./configure make && make check sudo make install echo “/usr/local/lib” >> /etc/ld.so.conf https://github.com/Cofyc/dnscrypt-wrapper http://blog.csdn.net/sahusoft/article/details/7388617 http://www.jianshu.com/p/20b583c35f82 http://blog.hotwill.cn/2016/05/22/dnscrypt-proxy+dnsmasq搭建无污染DNS服务器.html https://03k.org/dnscrypt-wrapper-usage.html https://dnscrypt.org/#install-dnscrypt https://03k.org/centos-make-dnscrypt-wrapper.html

wiloon, 10/13/2017 14:27

linux swap交换分区说明/管理 一.SWAP说明 1.1 SWAP概述 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。这个是SWAP 交换分区的作用。 实际上,我们更关注的应该是SWAP分区的大小问题。 设置多大才是最优的。 一般来说可以按照如下规则设置swap大小: 4G以内的物理内存,SWAP 设置为内存的2倍。 4-8G的物理内存,SWAP 等于内存大小。 8-64G 的物理内存,SWAP 设置为8G。 64-256G物理内存,SWAP 设置为16G。 实际上,系统中交换分区的大小并不取决于物理内存的量,而是取决于系统中内存的负荷,所以在安装系统时要根据具体的业务来设置SWAP的值。 1.2 系统在什么情况下才会使用SWAP? 实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness 参数值控制。 [root@rhce ~]# cat /proc/sys/vm/swappiness 60 该值默认值是60. swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间, swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。 1.3 如何修改swappiness参数? 临时修改: [root@rhce ~]# sysctl vm.swappiness=10 … Continue reading

wiloon, 10/12/2017 11:02

基础知识 – Golang 中的正则表达式 Golang中的正则表达式 用法: 单一: . 匹配任意一个字符,如果设置 s = true,则可以匹配换行符 [字符类] 匹配“字符类”中的一个字符,“字符类”见后面的说明 [^字符类] 匹配“字符类”外的一个字符,“字符类”见后面的说明 \小写Perl标记 匹配“Perl类”中的一个字符,“Perl类”见后面的说明 \大写Perl标记 匹配“Perl类”外的一个字符,“Perl类”见后面的说明 [:ASCII类名:] 匹配“ASCII类”中的一个字符,“ASCII类”见后面的说明 [:^ASCII类名:] 匹配“ASCII类”外的一个字符,“ASCII类”见后面的说明 \pUnicode普通类名 匹配“Unicode类”中的一个字符(仅普通类),“Unicode类”见后面的说明 \PUnicode普通类名 匹配“Unicode类”外的一个字符(仅普通类),“Unicode类”见后面的说明 \p{Unicode类名} 匹配“Unicode类”中的一个字符,“Unicode类”见后面的说明 \P{Unicode类名} 匹配“Unicode类”外的一个字符,“Unicode类”见后面的说明 复合: xy 匹配 xy(x 后面跟随 y) x|y 匹配 … Continue reading

wiloon, 10/11/2017 16:59

https://github.com/aralroca/helloworld-angular-with-golang

wiloon, 10/11/2017 14:12

在windows下,一个文件有:创建时间、修改时间、访问时间。 而在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间。 stat filename.txt来查,如: stat filetime.txt File: `filetime.txt’ Size: 39 Blocks: 8 IO Block: 4096 Regular File Device: 802h/2050d Inode: 17 Links: 1 Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2009-08-04 15:13:44.000000000 +0800 Modify: 2009-08-04 15:13:44.000000000 … Continue reading

wiloon, 10/10/2017 22:52

https://github.com/jemygraw/TechDoc/blob/master/Go%E8%BD%BB%E6%9D%BE%E5%AD%A6/go_tutorial_8_struct_interface.md

wiloon, 10/7/2017 20:26

https://zhidao.baidu.com/question/1769827496564950660.html 连音线是圆滑线和延音线的总称,即连音线有两种,一是延音线,一是圆滑线。   延音线用于连接两个或多个音高相同的音符,演奏时只演奏第一个音符,在延音线下面的其他相同音符就只延长其时值,而不重复按键(在钢琴上)或换弓(在小提琴上)。   圆滑线用于连接不同音高的音符,意思是要求将圆滑线下面的那些音都无棱角地、光滑地演奏出来。   延音线和圆滑线的形状都是弧线,圆滑线较粗一点。

wiloon, 10/6/2017 18:06

http://blog.csdn.net/chenbaoke/article/details/42780895 list是一个双向链表。该结构具有链表的所有功能。 type Element type Element struct { Value interface{} //在元素中存储的值 } func (e *Element) Next() *Element //返回该元素的下一个元素,如果没有下一个元素则返回nil func (e *Element) Prev() *Element//返回该元素的前一个元素,如果没有前一个元素则返回nil。 type List func New() *List //返回一个初始化的list func (l *List) Back() *Element //获取list l的最后一个元素 func (l *List) Front() … Continue reading

辽ICP备14012896