Home

Java 中相等的比较

遇到如下一个问题,java中使用复杂类型做Hashkey的时候,构造另一个值相同的对象作为key无法获取map的value。原因其实是java的==判断的依据是两个引用是否指向了同一个对象。实际调用了hashCode函数。内置对象的逻辑相等比较需要使用equals,比如String。而对于非内置对象,equals也同样调用了hashCode来判断相等。 所以对于需要逻辑相等判断的对象,需要override两个函数,比如如下一个getkey的类定义了如何从Map中根据path和type得到一个唯一的对象: class ZkEventKey { EventType type = null; String path = null; ZkEventKey(EventType...

Read more

eclipse多命令行窗口

有时候需要在eclipse中同时运行客户端程序和服务器程序,开始都是一个在eclipse里面运行,另一个在命令行单独启动,未免不方便。后来发现,其实可以直接在eclipse中运行两次。调试视图会有两个显示,同时新建一个console窗口,关联另一个实例的显示就可以同时监视两个程序的输出了。

Read more

协变返回类型

协变返回类型(Convariant Return Type)是指override的函数,返回值有继承关系(子类函数返回类型是父类返回类型的子类)。例子如下:

Read more

Java和C++继承上的一点不同

之前没注意过这里: java继承的时候只会隐藏父类同名同类型的函数。C++直接隐藏了同名的所有函数,如下: public class BaseClass { public void Print(String str){ System.out.println("String" + str); } public void Print(int num){ System.out.println(num); } } public class TestDerived extends BaseClass { public void Print(String str) { System.out.println("String" + str); } public stati...

Read more

使用shadow socks翻墙

拜GFW所赐,连tm boot2docker都连接不上了。而且最近红杏抽风,遂决定买shadowsocks服务翻墙。服务直接在官网购买,90一年,比红杏略便宜一点,主要还是可控性比较大,因为是socks5的代理。 这里购买服务,一年99,这个优惠码可以再打一点折imouto985。之后进入后台可以看到分配给自己的密码,服务器主要是日本,美国和新加坡的,实测貌似日本的响应更快一点。 mac下下载了客户端直接打开配置好地址就能用,linux下需要自己配置代理。 首先下载安装node.js wget http://nodejs.org/dist/v0.10.35/node-v0.10.35.tar.gz tar zxvf node-v0.10.35.tar.gz ...

Read more

java中重用对象的bug

首先这不是java编译器的问题,就是写代码的时候大意了。 有这样一个函数 int parse(String msg, Message out); 解析一个String,返回一个结构体。这么做的目的主要是避开try catch的性能问题,通过返回码来处理异常。这里就很容易出现这样的用法了: Message msg = new Message(); for (xxxx){ if (0 == parse(str, msg)) } 当时觉得还挺好,复用了一个对象。实际明显有问题的,这个对象的生命周期不见得只在for循环内部,一旦引用被传递出去,就会有悬挂(java里是不是不这么叫)的问题。多个引用指向了一个对象,计算结果是不可预测的。 主要问题是j...

Read more

bash下模拟group by功能

遇到这样一个问题:有一堆数据,需要统计相同key下相同的column的重复出现次数,实际上就是数据库里面的group by功能,但是建表导入然后计算未免麻烦,何况数据是临时数据,导入计算完毕之后就不需要了。这里用shell下的一些命令来完成。 数据格式 user tag_id type time AAAAAAAAAAA tag1 Click 2015:13:37:16 AAAAAAAAAAA tag1 Click 2015:13:37:16 AAAAAAAAAAA tag2 Click 2015:13:37:16 BBBBBBBBBBB tag2 Click 2015:13:37:16 BBBBBBBBBBB tag2 Click 2015:...

Read more

sort多列排序

遇到这样一个需求,希望按照第二列排序,第二列相同的情况下按照第一列排序,数据如下: b 2 c c 2 b a 1 b 习惯性的用: sort -k 2 -k 1 input.txt 输出结果是: a 1 b c 2 b b 2 c 可以看到实际上先按照第二列排序,第二列相同按照第三列排序了。问题在于sort -k默认是按照顺序排序到末尾的。如果要打破默认,需要指定从哪个列到哪个列。 sort -k 2,2 -k 1 input.txt 换个角度说,sort -k 1 -k 2 的效果跟 sort -k 1 是一样的。所以最好还是让数据按照排序列生成,这样看起来也最直观。

Read more