周末下午想玩xbox,结果遇到了囧事,无论如何都连不上自家的wifi……
在linux服务器上,java程序有时会遇到unknown host name
的问题。通过解决这些问题,我发现搞清楚jdk获取ip和hostname的方式以及linux机器的真实ip、hostname是关键。
linux上有很多常用命令会涉及,诸如:hostnamectl、nslookup、dig、ifconfig……下面我们先来看jdk如何获取hostname的
近期因为误用java System Property,导致了一个file相关的bug。花了一点时间研究之后,终于找到了根源——一切都是user.dir惹的鬼。
spring框架在java世界应用广泛,IOC、AOP,包括最近的spring boot等,体系庞大。平时spring应用很少,也没特别的经验要说。但在适配自己的框架和spring方面,也摸索了几天,有了一点心得。所有的适配都是基于spring框架对外开放的钩子…今天要说的比较简单,是关于xml的
java里的hashmap是单线程的,一般在多线程情况下,我们应该使用ConcurrentHashMap。因为在并发条件下,HashMap的误用可能不仅导致数据不一致性的问题,还有可能引发不可置信的死循环。当然,javadoc里已经明确告诫大家了:
1 | Note that this implementation is not synchronized. If multiple threads access a hash map concurrently, and at least one of the threads modifies the map structurally, it must be synchronized externally. (A structural modification is any operation that adds or deletes one or more mappings; merely changing the value associated with a key that an instance already contains is not a structural modification.) This is typically accomplished by synchronizing on some object that naturally encapsulates the map. If no such object exists, the map should be "wrapped" using the Collections.synchronizedMap method. This is best done at creation time, to prevent accidental unsynchronized access to the map |
这个问题是在rehash时候触发的循环链表造成的,之前sun对此的解释是请选择用ConcurrentHashMap
SimpleDateFormat是java中常用的时间format手段。它本身也不是线程安全的,在并发多线程条件下,比较好的做法应该是使用ThreadLocal或者每个线程创建属于自己的dateFormat。
1 | Synchronization |
最近遇到一个有趣的场景,简单描述如下:有一个interface Hello
,带default实现的方法hello()
;想调用这个Hello.hello()
。
问题是调用实例方法是需要实体的,而仅有interface并不能构造一个实例。开始想通过字节码生成技术,发现困难挺多的,在不断尝试的过程中,发现了一个新的API:MethodHandle
。
javascript的作用域和类C语言相比,有点特殊,对于初学者,容易搞错。所以要牢记javascript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里
liquibase是一个开源的数据库迁移工具,它和rails世界中的migration比较接近,这对大型的j2ee项目开发来说,可谓是优质的辅助。对于一个健壮的j2ee平台而言,稳定的数据库系统是不可或缺的。之前在项目中通过人工的方式审核,并且有专门的数据导入导出环境。但是这样有很多不足,比如:对于一个数据库,我们无法知道哪些脚本执行过,我们也无法搞清楚当前数据库所处的版本(对应于代码流)。liquibase正好提供了一个解决思路。为了应对搭建数据库的不便,我们目前采用了InitialDB+liquibase的机制,这将极大地方便我们在不同的开发产品线之间切换。