存档

‘工作’ 分类的存档

Double.NaN的错误用法

2014年2月19日 没有评论

看到一个大佬提供的计算两点间距离的方法,有一个比较生的用法

        double xxx = Double.NaN;
        if (xxx == Double.NaN) {
            xxx = 0;
        }
        System.out.print(xxx);

测试结果:输出是NaN
查了一个这个神奇的NaN,发现这个大佬用错了,Double.NaN只有一个特点,就是跟谁都不相等,包括它自己。
更多内容…

Java的两个容易忽略的空指针异常

2014年2月19日 没有评论

今天发现另一种没注意到的空指针异常,加上之前碰到的,简单总结一下。

本次的问题,直接上示例代码

public static void main(String[] args) {
        User u = null;
        System.out.println("用户编号:" + u == null ? "无" : u.getUserId());
    }

    public static class User {

        private int userId;

        public int getUserId() {
            return userId;
        }
    }

这个代码看起来好像没问题,实际上报空指针异常。
更多内容…

Tomcat的session问题处理及gc日志打开

2014年2月18日 没有评论

某些原因,web服务由resin改为tomcat,最大的一个问题就是tomcat在高并发下完全不胜任(估计会有人扔砖头过来)。
原因:tomcat的session关不掉,每次无cookie请求都会创建新会话,内存中会存储这些会话对象。

举例如下:
tomcat启动后

[root@xxxxx data]# jmap -histo:live 22809 | grep session
 613:             1            160  org.apache.catalina.session.StandardManager

用chrome的隐身模式访问几次后(每次都关掉chrome隐身窗口,然后重新打开,否则cookie会重用,会话也会重用。chrome的隐身只是一个孤岛,不是多个孤岛)

[root@xxxxx data]# jmap -histo:live 22809 | grep session
 350:            13           1144  org.apache.catalina.session.StandardSession
 554:            13            360  org.apache.catalina.session.ManagerBase$SessionTiming
 690:            13            208  org.apache.catalina.session.StandardSessionFacade
 794:             1            160  org.apache.catalina.session.StandardManager

13次访问,产生13组session对象,每组三个。
更多内容…

MySQL改密码的低级错误

2014年2月12日 没有评论

今天有童鞋找我问MySql用户无法连接的问题,怀疑是这位童鞋把密码弄错了,就再改了一次密码,结果一直报错。

mysql> SET PASSWORD FOR user_*=PASSWORD('*');
ERROR 1133 (42000): Can't find any matching row in the user table

这个用户肯定是有的

mysql> select host,user,password from mysql.user where user = 'user_*';
+-----------+--------+-------------------------------------------+
| host      | user   | password                                  |
+-----------+--------+-------------------------------------------+
| localhost | user_* | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | 

更多内容…

分类: 工作 标签: , ,

【内训】说说域名解析

2014年1月26日 没有评论

内训2:说说域名解析

case: 想通过mcp这个名称直接访问10.4.21.184,比如:
ping mcp
ssh mcp
wget http://mcp:8186/

最简单的方法:绑host
在/etc/hosts文件最后加一行

10.4.21.184 mcp

如果多人共享,这种条目比较多,更新起来就会很不爽。有另外一种方式:
在resolv.conf中指定搜索域,用真正的域名来实现

search toft.tk

search后可以跟多个域名,之间用空格分开即可,解析时会域名的配置的顺序分别去解析。
比如:ping mcp
会自动去解析mcp.toft.tk

一个很自然的问题:如果hosts和resolv.con两个都配置了,会以谁的解析结果为准
更多内容…

分类: 工作 标签: , , ,

【内训】误删日志恢复及运行目录确定

2014年1月26日 没有评论

内训1:误删日志恢复及运行目录确定。

case 1:
运行着的服务产生的日志,被误删除,怎么找回来。
步骤:
1、先用top或ps找到服务的进程编号:pid
2、xxxxx代表找到的那个pid,找到它下面对应的被删除但还被占用的文件,lsof -p xxxxx | grep deleted
3、在输出结果中,找到日志所在的那一行,找到第四列的数值,比如:115w,假设此值为yyy即115
4、查看相应的日志文件:cat /proc/xxxxx/fd/yyy
或者输出到另一文件:cat /proc/xxxxx/fd/yyy > /tmp/zzz.log
完成。

case 2:
有多个雷同进程,看不出来其所在目录,比如下面这个

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                              
 8669 root      20   0 3345m 507m  11m S  0.0  3.2  56:53.80 java -cp .:./../lib/*:./../bin -server -Xmx1024m -Xms1024m 

步骤:
1、先用top或ps找到服务的进程编号xxxx,比如:8669
2、看lsof的cwd的NAME,一般在标题下的第一行:lsof -p xxxx | head -n 2
还可以用更傻一些的方法:lsof -p xxxx | grep cwd
最后那个NAME列对应的值就是这个进程的工作目录。
更多内容…

分类: 工作 标签: , ,