摘要:
今天同事提出了一个问题: 将对象a 转化为类型b,b 的classpath 是在配置文件中配置的,需要在运行中使用Class.forName 动态load进来,因为之前从来没有想过类似的问题,所以懵掉了,然后迅速的查找资料,先将结果做下记录,欢迎大家来讨论一下。想法一:能否使用Class.forNa... 阅读全文
摘要:
什么是钻石问题?如下图所示,B和C继承于A,D继承B和C(多重继承),在D中调用A的方法时,无法判断是调用B中的实现还是C的实现,下图继承关系是个菱形,所以该问题又叫做菱形问题。如果java要解决这个问题,需要引入更复杂的机制,这和java 的初衷是背道而驰的(simple),但是java中可以实现... 阅读全文
摘要:
一直认为在加载outer class 的同时也会加载inner class 并且完成静态变量和代码块的初始化,今天在维基百科上面看到“The static class definitionLazyHolderwithin it isnotinitialized until the JVM deter... 阅读全文
摘要:
一个对象可以被用作它自身的类型或者是它的基类类型。当用作它的基类类型时叫做upcasting,如下所示BaseClass ref = new DerivedClass() //upcasting当执行ref.method 时,程序会先到DerivedClass中去寻找method,当找到时就执行,找... 阅读全文
摘要:
今天写的一个程序中需要对一个List进行排序,突然发现自己对这个问题一无所知,于是查阅资料并进行测试,在此做个记录。Collections工具类中有两个方法可以对List进行排序,分别为:public static > void sort(List list)public static void ... 阅读全文
摘要:
在JAVA中使用InetAddress.getByName(String host) 方法来获取给定hostname的IP地址。为了减少DNS解析的请求次数,提高解析效率,InetAddress中提供cache来缓存解析结果。下面就此cache进行简单的分析:该缓存实现比较简单,巧妙的利用Linke... 阅读全文
摘要:
在高性能爬虫为什么使用定制DNS客户端一文中阐述了DNS解析是网络爬虫的瓶颈。目前主要有两种方法来提高DNS解析效率:1. 基于多线程的DNS 解析2. 基于NIO的DNS解析dnsjava中使用的解析方式就是基于多线程的DNS解析class ResolveThread extends Thread... 阅读全文
摘要:
DNS 解析是高性能网络爬虫的瓶颈,主要是因为:1. 由于域名服务的分布式的特性,DNS解析可能需要多次的请求转发,有时需要几秒甚至更长的时间来解析出相应的IP 地址。2. 现有的标准库对DNS解析的实现是同步的。JAVA中InetAddress.getByName是线程阻塞的。并且JAVA中实现的... 阅读全文
摘要:
近期在看dnsjava 源码的时候,不经意间发现一个自己没有想过的问题:HashMap 如何使用key去查找对应的value的,这个问题很难用语言描述的清楚,那就使用代码来进行说明吧!public class test { public static void main(String[] ar... 阅读全文
摘要:
众所周知,HashMap 本身非线程安全的,但是当使用Collections.synchronizedMap(newHashMap()) 进行包装后就返回一个线程安全的Map。怎么实现的呢?今天比较有兴趣就看了Collections.synchronizedMap 的实现,发现其实还是比较简单的。p... 阅读全文