存档

2013年7月 的存档

Java在常量上容易犯的错

2013年7月26日 2 条评论

Java的常量在编译期会在引用处本地化,单个java文件改动后编译更新,容易由此引入问题。

举例说明:
本地为测试环境的测试代码,常量配置为测试域名test.xx.com

public class A{
  public static final String X_HOST = "test.xx.com";
}

线上为正式域名:

public class A{
  public static final String X_HOST = "xx.com";
}

调用代码为:

public class B{
  public static final String LURL = "http://" + A.X_HOST + "/";
  public void xxx(){
    ...
    String url = "http://" + A.X_HOST + "/";
    ...
  }
}

当需要修改B中省略的代码,只把B.java编译后的B.class替换到线上时,执行出错。
原因在开始时已经说明:在测试环境编译的时候,LURL和url中的A.X_HOST都被B类本地化了,B.class中只有值,没有引用信息。所以上线就错了。

分类: 工作 标签: ,

Android在联通GPRS网络下丢包分析

2013年7月25日 没有评论

Android出现丢包问题,备注一下:
问题:
Android在联通的GPRS网络下,偶现长期无法连接现象。

调查过程:
  Android和服务端第一层,同时使用tcpdump抓包,碰到失败的情形后,分析两个包文件。
  发现小报文传输没问题,大报文1516传输失败,服务器端无相应的包。SYN握手协商的MSS是1460,看起来正常。
  初步怀疑联通网络不支持MSS1460的包,考虑X.25只支持536大小计划调整服务端MSS为536。
  尔后发现大部分时候正常的报文也是1460,可以正常通讯。

更多内容…

分类: 工作 标签: , , ,

geohash的格边缘问题

2013年7月2日 没有评论

使用geohash搜索,当前位置越接近格的边缘,搜索结果越不准(格外的很近,却搜不到),无论怎么扩格大小或偏移,都无法解决此问题。
一种方法可解决此问题:搜索时,把当前格周边的8个格也取出来,一并搜索。

一个牛人提供了比较好用的工具:https://github.com/kungfoo/geohash-java

使用牛人的工具,只使用其GeoHash,代码如下:
private static final int GEO_CHAR_BITS = 5;

GeoHash bitPrecision = GeoHash.withBitPrecision(lat, lng, GEO_CHAR_BITS * 4);//根据当前位置取精度取geohash:当前格
GeoHash[] adjacent = bitPrecision.getAdjacent();//取当前格周边的8个格

这九个格拿到后,用GeoHash的toBase32()方法拿到字符串,匹配即可。

分类: 工作 标签: , ,