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


    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:
      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");
    }
    大部分的事件等都是“小写表示”,看到了几个“大写”的,很是不爽,
    改成了小写,结果就出事了。
    可能是“微信那边的历史遗留问题”吧。
  • 相关阅读:
    mt7601u: probe of xxxx failed with error -2
    error: 'ENOSYS' undeclared (first use in this function)
    backports移植rtlwifi驱动
    Buildroot 指定内核版本
    Buildroot 使用默认配置
    Uncaught TypeError: jQuery.i18n.browserLang is not a function
    Web APi之控制器创建过程及原理解析(八)
    Web APi之手动实现JSONP或安装配置Cors跨域(七)
    Web APi之Web Host消息处理管道(六)
    Web APi之消息处理管道(五)
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462801.html
Copyright © 2020-2023  润新知