您的位置:首页 > 其它

2015年创业中遇到的技术问题:61-70

2015-04-01 17:36 274 查看
61.Redis的key要判断null的情况。
如果key为null,报错。 public Boolean exists(String key) { if(StringUtils.isBlank(key)){ return false; } return loginRedisTemplate.hasKey(key); } 另外原因分析,看了错误信息,发现是 org.springframework.util.Assert.notNull. 猜测,用Spring Data和redis连接,Spring会断言key不为null。 62.Chrome坑爹货。桌面快捷方式,需要双击2次,再双击2次,才能打开。加到快速启动栏,得点1次,再点1次,才能打开。
63.数据库连接太多。 云服务器上的mysql默认开的连接数比较少,大概在30~50。 线上跑了好几个程序。 wxdemo 10个,xp2p 20多个。 本地,又跑了2个程序,经常出现数据库连接过多的情况。 无奈之下,把本地的bonecp数据源的连接池数目调小了一点,暂时没有出现问题了。 经常出现“数据库连接过多”,开发效率降低了不少。 <property name="maxConnectionsPerPartition" value="${jdbc.maxConnectionsPerPartition}" /> <property name="minConnectionsPerPartition" value="${jdbc.minConnectionsPerPartition}" /> <property name="idleConnectionTestPeriodInSeconds" value="${jdbc.idleConnectionTestPeriodInSeconds}" /> <property name="idleMaxAge" value="${jdbc.idleMaxAge}" /> <property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
bonecp.ConnectionHandle - uid:1000000179@fansunion 127.0.0.1 Database access problem. Killing off all remaining connections in the connection pool. SQL State = 08S01 64.分布式登录。Cookie,登录之后,设置Cookie。maxAge为-1,表示浏览器关系Session就小时。也可以设置为>0的数值,比如1*24*60*60,保持登录1天。
有一点是需要注意的,除了浏览器Cookie的时间,保存在Redis缓存中的Cookie也有时间限制。
每次有请求访问的时候,重新设置redis的时间。错误的情况:登录之后,把Cookie保存在Redis中30分钟。如果,用户最近一直访问,30分钟之后,也会“离线”。这是不科学的。
正解:每次访问,都要重新向Redis中更新Cookie缓存。
如果是保持登录的情况,比如保持登录一周,不需要。
要不然,用户每天都访问,可以一直保持登录,从而超过了一个周。(这个地方挺关键的,总结的过程中,发现了这个bug。)
65.Redis反序列化。第1次,存储com.jiutianniao.User到Redis。第2次,重构User为com.jiutianniao.User2,连接Redis,提示“反序列化异常”,因为找不到User对象了。
解决办法:清空Redis数据库:FLUSHDB 清除一个数据库,FLUSHALL清除整个redis数据。
66.OSChina的Git项目,有个比较让人郁闷的问题。第1步:新建项目,比如oa。不初始化项目。第2步:本地,Eclipse新建项目,项目名称为oa。第3步:本地提交到远程。坑爹的地方,就是这。本地工程提交到OSChina之后,项目的路径是:/oa/oa。 这个时候,另外一个开发者,从Git上导出项目,结果是个目录/oa/oa。 第4步:把/oa/oa向上移动一个目录,再提交。之前在Java Web项目中,没有遇到太大问题。可能是因为都是Maven项目,重新转换成Maven项目就好了。今天的项目是Android,向上移动一个目录之后,不再是一个工程。又不能向Maven项目那样,重新转换一次就好了。
尝试了几个小时,终于找到了方法。把正常Android的.project的内容,覆盖非正常Android项目的.project的内容。

67.保持登录和缓存导致的bug。后端用户登录,把当前权限列表保存到Redis中了。有的权限,更新了下。重启系统,自动登录了,使用的仍然是旧的权限列表。有些菜单一直访问不了。
68.下载的问题。在个人中心等需要登录的地方,如果有下载,通过浏览器可以正常下载。通过,迅雷等专用下载器就不行了,因为Cookie没有保存。
最开始,我想的是,让这些下载链接改成不需要登录的,刚刚又想了下,这样太危险了,容易泄漏数据。
69.快速构造字符串的一种方法。方法1: String url = "http://jiutianniao.com/demo.html?a="+a+"&b"=b; 方法2: public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; token_url.replace("APPID", appid).replace("APPSECRET", appsecret); 先使用占位符,然后字符串整体替换。
70.微信第2个Demo小坑2个。 a.按钮类型Java定义: //这个地方,不能改为subButton private Button[] sub_button; 看了不爽,把sub_button改成了subButton,最终影响到了序列化,出现“按钮类型错误”。 b.用户事件类型区分大小写 public enum EventType { // 订阅 SUBSCRIBE("subscribe"), // 取消订阅 UNSUBSCRIBE("unsubscribe"), // 用户已关注时的扫描带参数二维码 SCAN("scan"), // 上报地理位置 LOCATION("LOCATION"), // 自定义菜单 CLICK("CLICK"); } 大部分的事件等都是“小写表示”,看到了几个“大写”的,很是不爽, 改成了小写,结果就出事了。 可能是“微信那边的历史遗留问题”吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: