最近,几个客户的服务器使用了新的SSL/TLS证书,导致我们的程序不能正常的和服务器进行连接,一直抛一个SSL相关的异常。而过一段时间(大概一天或者两天),我们的客户端又能正确的访问客户的服务器,很奇怪。

最近一直在研究SSL/TLS,主要是因为产品里面和https打交道的很多,而且也遇到了不少的问题。前两天又遇到一个问题,根据用户的反馈,他们更新了服务器上的SSL/TLS证书,而我们的产品,在他们切换证书后便不能成功的监控他们的服务器,而大概过一段时间(一天或两天),再不做任何修改配置的情况下,又恢复正常了。而且,有两个客户遇到了类似的问题。

阅读更多

linux下网卡设置目录在/etc/sysconfig/network-scripts。一般情况下,linux的默认网卡是eth0,所以该目录下通常会有一个叫ifcfg-eth0的文件,该文件内便是改网卡的相关信息。

现在我们要做的是新建一个映射,是的这个网卡有两个IP(甚至多个)。

阅读更多

研究storm的起因是两个老大的一段对话,然后催生了现在要做的这个小项目,其中就要用到kafka和storm。于是,开始了storm和kafka的学习之路。

阅读更多

反射是JAVA中的一个重要特性,使得JAVA 可以在运行时加载、探知、使用编译期间完全未知的classes。JAVA通过反射,可以在运行时获取一个未知的Class,并获取该Class种的方法、变量,甚至改变这些方法的访问权限,这些功能使得JAVA表现的像一个动态语言。

初窥ClassLoader

反射机制中一份非常重要的角色是ClassLoader,从名字可以知道,ClassLoader的作用时加载Class,下面是一个简单的例子,使用ClassLoader加载一个类,并创建一个实例:

阅读更多

有时候我们git提交之后,发现comment有误,希望对其进行修改。

#修改最近一次的提交
如果想修改最近一次提交的消息,简单,执行如下命令:

1
git commit --amnend

于是,你可以用文本编辑器修改上一次的提交信息了。

将hexo迁移到自己的服务器上后,部署方法变的有点烦琐,所以一直有个想法,在服务器上搭建一个git服务器,利用hook技术,实现自动部署。

阅读更多

下午重置了服务器,很多环境都需要重新部署!!折腾!!
我用的是阿里云服务器,从我的电脑登录服务器通常都是使用SSH进行远程登录的。配置免密码登录有多个好处:

  1. 方便,不用重复多次输入密码;
  2. 如果可以,禁用密码登录,防止密码暴力破解。

    阅读更多

Nginx的大名早有耳闻,但是一直没有接触过。这次,为了更方便DIY,还是决定将YFlog从github pages迁移到自己的服务器上,乘机试一把Nginx。
网上搜了下在nginx上部署hexo的方法,大致分一下两种:

  1. 利用hexo提供的hexo server,启动hexo自带的服务器功能,再利用Nginx的反向代理,让博客的域名指向hexo server的4000端口;
  2. 将hexo博客生成静态文件,再将静态文件上传到服务器上,使用nginx直接做web服务器。

    阅读更多

前几天在工作的时候遇到的一个问题,使用jconsole无法登录到VBox虚拟机里面的JVM。
检查了Vbox里面的centos的防火墙设置,以及JVM的运行参数设置,都没有问题,对于JMV的参数,设置了正确的端口,在登录时也使用了正确的用户名和密码,设置尝试了不使用验证的设置都不行。而在虚拟机里面,使用jconsole是可以登录JVM的,包括虚拟机里面的以及虚拟机外面的(PC)上的jvm。

阅读更多

最近有个新闻特别火,Mac上brew工具的作者去面试google,结果跪了,正是跪在“反转二叉树”的问题上,谷歌对该大牛的评论是:

Google:我们90%的工程师都用你写的软件,但你没法在白板上翻转二叉树,所以滚蛋吧。

英文原文如下:

Google:90% of our engineers use the software you wrote(HomeBrew), but you can’t invert a binary tree on a whiteboard, so fuck off.

哈哈!LeetCode很快推出了一道OJ题目invert binary tree, 且把难度定位easy,今天瞅了一眼,写了递归版本的。

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class InvertBinaryTree {


static class Solution {

public void _invertTree(TreeNode root) {
if (root == null)
return;
if (root.left == null && root.right == null)
return;
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
_invertTree(root.left);
_invertTree(root.right);
}

public TreeNode invertTree(TreeNode root) {
if (root == null)
return null;
_invertTree(root);
return root;
}
}


public static boolean case01() {
TreeNode root = new TreeNode(4);
root.left = new TreeNode(2);
root.left.left = new TreeNode(1);
root.left.right = new TreeNode(3);

root.right = new TreeNode(7);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(9);

TreeNode rest = new Solution().invertTree(root);

System.out.println(rest.val);
System.out.println(rest.left.val + "\t" +rest.right.val);
System.out.println(rest.left.left.val + "\t" + rest.left.right.val + "\t" + rest.right.left.val + "\t" + rest.right.right.val);

return true;
}

public static void main(String[] args) {
case01();
}
}

明天有时间,再写一个非递归版本的。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×