maven相关

##一、maven
1、maven地址
 maven的仓库的定义是在${M2_HOME}/lib/maven-2.0.10-uber.jar 里面。你可以在里面找到\org\apache\maven\project\pom-4.0.0.xml 这个文件,在这个文件里面定义了默认中央仓库的地址,所以可以更改

2、maven配置文件
如果你想覆盖中央仓库的默认地址,那么这里我们就会使用的镜像了,还在setting. xml里面配置:

1
2
3
4
5
6
7
8
9
10
<settings>
<mirrors>
<mirror>
<id> maven-net-cn</id>
<name> Maven China Mirror</name>
<url> http://maven.net.cn/content/groups/public/</url>
<mirrorOf> central</mirrorOf>
</mirror>
</mirrors>
</settings>

Read More

Share

windows hexo 搭建个人博客教程

windows hexo 搭建教程

安装nodejs

  • 自己到nodejs官网下载安装吧

安装git

  • 先本地安装git客户端
  • 注册一个git账号

安装Hexo

  • 在D盘创建一个目录 D:\testblog ,目录自己定义

  • 安装git之后,右键上会有一个git bash标签,点击会出现git bash 界面如下图

    Hexo初始化

  • 依次执行下面命令

    1
    2
    3
    4
    5
    6
    7
    npm install hexo-cli -g
    npm install hexo --save
    //如果上面的命令由于网络原因,安装失败,那么可以切换一下npm源,执行一下下面命令
    npm install -g cnpm --registry=https://registry.npm.taobao.org
    //然后执行
    cnpm install hexo --save

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //然后执行
    hexo init
    //然后装一下hexo的一些插件,建议全部安装
    npm install hexo-generator-index --save #索引生成器
    npm install hexo-generator-archive --save #归档生成器
    npm install hexo-generator-category --save #分类生成器
    npm install hexo-generator-tag --save #标签生成器
    npm install hexo-server --save #本地服务
    npm install hexo-deployer-git --save #hexo通过git发布(必装)
    npm install [email protected] #渲染器
    npm install [email protected] --save #渲染器
  • 安装完成之后跑起来试试

    运行 hexo server 或者 hexo s

GIT配置

HEXO配置

配置文件介绍

  • 全局配置文件_config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
index_generator:
per_page: 10 ##首页默认10篇文章标题 如果值为0不分页
archive_generator:
per_page: 10 ##归档页面默认10篇文章标题
yearly: true ##生成年视图
monthly: true ##生成月视图
tag_generator:
per_page: 10 ##标签分类页面默认10篇文章
category_generator:
per_page: 10 ###分类页面默认10篇文章
feed:
type: atom ##feed类型 atom或者rss2
path: atom.xml ##feed路径
limit: 20 ##feed文章最小数量
deploy:
type: git ##部署类型 其他类型自行google之
repo: <repository url> ##git仓库地址
branch: [branch] ##git 页面分支
message: [message] ##git message建议默认字段update 可以自定义
-多部署
deploy:
type: git
message: update ##git message建议默认字段update 可以自定义
repo:
github: <repository url>,[branch] ##github 仓库地址和分支
gitcafe: <repository url>,[branch] ##gitcafe 仓库地址和分支

主题配置文件_config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Header
menu: #导航栏连接
Home: /
Archives: /archives #归档页面URL
自定义页面标题: /自定义页面URL
rss: /atom.xml #rss地址 默认即可
# Content
excerpt_link: Read More #阅读更多的文字显示
fancybox: true #开启fancybox效果
# Sidebar #侧边栏设置
sidebar: right
widgets:
- category
- tag
- tagcloud
- archive
- recent_posts
# Miscellaneous #社交网络和统计连接地址
google_analytics: #google analytics ID
favicon: /favicon.png #网站的favicon
twitter:
google_plus:
fb_admins:
fb_app_id:

配置主题

这里介绍我自己修改的主题,炒鸡漂亮

基于landscape-plus主题修改 ,GIT地址

演示地址

使用方法,下载下来丢到D:\testblog\themes 文件夹下面就好了

然后修改全局配置文件_config.yml文件里面theme字段

配置GIT发布

1
2
3
4
5
deploy:
type: git
repo: https://github.com/mustfun/mustfun.github.com.git
#我的github是mustfun 换成你本人的
branch: master

上图有哦~

HEXO部署

1
2
3
hexo clean #清除缓存 网页正常情况下可以忽略此条命令
hexo g #生成静态网页
hexo d #开始部署

HEXO预览

那么就成功啦,直接访问mustfun.github.io就可以访问啦,换成你的域名哦


品品我宣你哦~ ^_^

Share

如何找到占用CPU和内存最高的线程

一、如何找到CPU和内存占用最高的线程

  1. 代码示例

    我们先来写一段代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @Test
    public void testLinuxTop() throws Exception{
    boolean b=true;
    System.out.println("start the cpu Thread");
    while (b){
    int i=(int)Math.random()*1000;
    if (i%3==1){
    }
    if (i==1000){
    System.out.println("stop");
    b=false;
    }
    }
    }

    随便写了个死循环,然后怎么看下CPU占用情况呢?

    TOP命令

    先用ps -ef|grep tomcat查看一下你当前tomcat的进程号,比如我看出来我的进程号是8545

    然后用TOP命令查看当前所有进程

    1
    2
    top -p 8545
    top -p 8545 -H //这样也可以

    使用地址中,进入了下面这个界面之后就要按H了

    于是你就会看到下面这张图片

    QQ20170301-0@2x

    CPU占用接近满了,内存占用30M,怎么会占用这么多?OK,我们记住PID 8545

  2. jstack命令

    OK,我们在栈里面来找出这段代码,可以直接用jstack把栈里面的东西打出来

    直接使用下面的就可以

    jstack 8545 > stack.log 在你的当前目录下面就会出现一个stack.log文件,这是包括所有的栈信息的,这里的8545是tomcat的进程号tomcat的进程号tomcat的进程号,重要的事情强调一下

    如何找到有问题的代码呢?

    我们刚才拿到了一个CPU最高的进程号8545,OK,转化为16进制,使用下面命令

    1
    2
    3
    printf "%x\n" 8545
    //或者
    printf 0x%x 8545

    上面两种都可以拿到16进制的8545,或者你自己去用计算器拿去,这里我们得到的是0x2162或者2161(上面一种可以直接拿到2161,没有0x),我们要的就是2161

    可以直接到jstack.log文件里面去搜索,就看到出问题的代码了

  3. 想直接看

    下面提供一种直接看的方法

    1
    jstack 8545|grep -A 30 2162

    得到线程堆栈信息中2162这个线程所在行的后面30行

  4. question

    4.1 我使用jstack pid报错了怎么办?

    使用jstack pid可能会出现8545 operation permitted之类的错误,解决办法,请切换至root用户执行命令

  5. over

Share

JAVA面试题之基础篇

  1. 九种基本数据类型的大小,以及他们的封装类。各自占多少字节

    boolean, byte, char, short, int, long, float, double, void 还有一种引用类型

    Boolean, Byte, Character, Short, Integer, Long, Float, Double, Void

    存在原因:节省内存开销

    2 2 2 4 8

  2. String 类能被继承吗,为什么。

    不能,String是一个final类

  3. 讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,当 new 的时候,他们的执行顺序

    类实例化的过程中,先执行父类的构造器,然后执行隐式的构造代码,再执行构造方法中的代码

  4. JAVA8 的 ConcurrentHashMap 为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计

    它摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法,段锁性能也不是很高,而CAS操作是CPU支持的操作,是一种原子操作

    1、下面讲一下concurrentHashMap的结构

    ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成(一个segment里面有一个hashEntry数组)。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构

    Read More

Share

Logstash中grok filter example例子

一、Logstash

本文适合有部分Logstash经验的人阅读,如果不懂Logstash是什么,请看我另外一篇博文

1、filters

Logstash核心组成部分就包括filters,这是个过滤器。一般日志中还是有很多有用信息的,利用Logstash的filter机制可以将这些信息抽取出来

1)、JSON Filter

​ 这种方式对于日志数据源是json格式的比较有效,这里我不多讲,一般人日志不会特意弄成json格式的吧…

Read More

Share

Logstash学习经验

一、概述

  1. Logstash是什么

    Logstash是一个内置有分析和转换工具的日志分析工具,是一个管道,可以把生产上面的日志从服务器移动到另外一个地方,支持多种格式

  2. 核心配置

    Logstash核心包括inputscodecsfiltersoutputs等,inputs负责将某种格式的日志数据传输到Logstash中,codecs对于数据流进行某种方式处理(如JSON、msgpack、plain等),filters用于过滤信息,outputs是Logstash的输出部分

    Read More

Share

按位逻辑操作符那些事儿

按位操作符运算符概述

在java底层里面,用到了很多这种符号,不对这些按位逻辑符号弄清楚,不容易看懂jdk源码,这里对按位符号做一个简单的梳理

运算符 用法 描述
按位与( AND) a & b 对于每一个比特位,只有两个操作数相应的比特位都是1时,结果才为1,否则为0。
按位或(OR) `a \ b` 对于每一个比特位,当两个操作数相应的比特位至少有一个1时,结果为1,否则为0。
按位异或(XOR) a ^ b 对于每一个比特位,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0。
按位非(NOT) ~ a 反转操作数的比特位,即0变成1,1变成0。
左移(L) a << b a 的二进制形式向左移 b (< 32) 比特位,右边用0填充。
有符号右移 a >> b 将 a 的二进制表示向右移b(< 32) 位,丢弃被移出的位。
无符号右移 a >>> b 将 a 的二进制表示向右移b(< 32) 位,丢弃被移出的位,并使用 0 在左侧填充。

这里注意,java里面没有无符号左移,因为无符号左移<<<和左移<<是一样的概念

Read More

Share

写给自己的2017

天地不仁,以万物为刍狗

​ ——平凡的人

​ 转眼2017了,毕业也快1年了,工作也近一年有余了,从离开学校那会儿起,自己的目标是什么?自己想要的是什么,倒现在依然还很模糊,然而,还是这么活着……

​ 但是,唯一我清楚的是,不能再这样继续下去了……

Read More

Share

Array.sort和Collections.sort实现原理解析

Arrays.sort和Collections.sort实现原理解析

1、使用

  • 排序

2、原理

  1. 事实上Collections.sort方法底层就是调用的array.sort方法,而且不论是Collections.sort或者是Arrays.sort方法,

  2. 跟踪下源代码吧,首先我们写个demo

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static void main(String[] args) {
    List<String> strings = Arrays.asList("6", "1", "3", "1","2");
    Collections.sort(strings);//sort方法在这里
    for (String string : strings) {
    System.out.println(string);
    }
    }

    简单得不能再简单的方法了,让我们一步步跟踪

    Read More

Share