selenium 使用 chrome 的 headless 模式
#### 无界浏览器爬虫之selenium使用chrome的headless模式
> chrome浏览器更新到59版本之后终于在正式版里加入了headless模式 ,也就是可以操纵chrome进入无界面模式,以前写爬虫的时候使用无界浏览器普遍是用phantomjs,chrome浏览器加入headless模式毫无疑问会干掉phantomjs,今晚下班回到家写个代码正好尝试下效果。
这是我用springboot写的一个简单的chrome之headless无界浏览器爬虫抓取天眼查
首先gradle走起来,
```
group 'net.yuxianghe'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'spring-boot'
//生成的jar包包名和版本
jar {
baseName = 'test'
version = '0.1.0'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
buildscript {
repositori...
2019-01-24 15:06
java8 的 hashmap 源码简单分析
> 原来的hashmap采用的是数组加链表的方式,关于java里面实现链表我前面的文章有提到过实现思路,使用静态链表。在java8里是采用了数组+链表+红黑树。
```
static final int TREEIFY_THRESHOLD = 8;
```
只要阀值超过了8,链表会转换为一棵平衡二叉查找树
数据结构的每一个小格子存储的数据为一个桶,桶后面存储的每一个数据为bin,这是java8里面的注释说这玩意儿叫bin。
```
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
```
capacity 为桶的容量,默认初始值为16,最大为,2^30==1073741824
```
static final int MAXIMUM_CAPACITY = 1 << 30;
```
当量变少的时候,树会转变为链表,也有一个阀值,当低于6的时候会变化为树来存储。
```
static final int UNTREEIFY_THRESHOLD = 6;
```
以前学习数据结构和算法的时候用c实现过简单的hashma...
2019-01-24 15:05
实时更新 jar 包里的某个 class 类文件
> 部署在google云里的应用突然有一个类做了修改,删除掉从新上传的话,一个jar包传上去就得等半小时,墙有点高,你懂的,所以要是能单独更新某个class文件就最棒了,方法当然是有的,如下所示。
```
jar tvf test.jar | less
```
通过上面这个搜索出自己要更新的class文件的目录,在当前路径下建立好目录
```
mkdir -p BOOT-INF/classes/net/yuxianghe/core/
cp Test.class BOOT-INF/classes/net/yuxianghe/core/
```
要更新的class的目录建立好了之后直接更新到jar里即可,如下命令所示:
```
jar -uvf test.jar BOOT-INF/classes/net/yuxianghe/core/Test.class
```
到这里jar包就做到了只更新单个类文件
2019-01-24 15:05
jstat 之 gcutil 数据解析
> jstat之gcutil数据解析
今天刚好用到jstat来查看java应用内存情况,发现数据参数和以前的不太一样,主要是因为环境是java8,java8多了个点东西,比如Metaspace。
例子:
```
##pid为4007的应用的情况,每2秒钟显示一次
jstat -gcutil 4007 2000
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
37.03 0.00 20.87 86.82 94.40 89.37 1640 9.248 6 0.658 9.907
```
S0: Survivor space 0 utilization as a percentage of the space's current capacity.
幸存者区0
S1: Survivor space 1 utilization as a percentage of the space's current capacity.
幸存者区1
...
2019-01-24 15:04
spring-boot 使用 mongodb 查询时只返回某些字段值
> springboot使用mongodb查询的时候会遇到服务器出口带宽压力大的情况,原因可能是查询mongodb的时候把整个对象给拖下来了,事实上我们只需要其中的某些字段,多余的字段返回的话会给小水管的带宽加上压力,也就是说我们的mongodb查询时只需要返回某些字段。
看了很多人的各种文章感觉要么是哪里抄袭的要么是哪里拷贝的,根本不靠谱,自己去查询了下官方文档,实现方法很简单:
直接使用mongoTemplate来查询,只返回主键,name,status字段。(主键是默认返回的)
```
Query query = new Query();
query.addCriteria(Criteria.where("status").is(3));
query.skip(skipNumber);
query.limit(pageSize);
query.fields().include("name").include("status");
return mongoTemplate.find(query, CompanyInformation.class);
```
2019-01-24 15:03