9月28
最近和前端同学调试,发现我这里总是无法验证通过,因为他传给我的MD5和我生成的MD5总是对不上。

但是一开始的时候,我是验证了两边的方法的,以test为例

在页面的console中输入

MD5('test')
则输出结果为

098f6bcd4621d373cade4e832627b4f6

在java中的代为如下

System.out.println(DigestUtils.md5Hex("test"));
则输出的结果为

098f6bcd4621d373cade4e832627b4f6

通过对比可以发现是一致的,OK,那就开始调试吧,刚开始就出问题了,验证不通过

拿出有问题的数据做了一下验证,果然不一致,比如“小妹妹,叔叔给你棒棒糖吃”

js的输出结果是      792050820fd52f250ee4f47f58d6198f

java的输出结果是  863088240a7c59d82b7792be48d371ec

果然是中文问题,具体原因没有去详查,于是和前端约定,大家都先encode,然后再求MD5

在页面的console中输入

MD5(encodeURIComponent('小妹妹,叔叔给你棒棒糖吃'))
此时的输出为

8bb9c0940ce8fcc0790303a6a5266a34

在java中的代为进行如下修改

System.out.println(DigestUtils.md5Hex(URLEncoder.encode("小妹妹,叔叔给你棒棒糖吃")));
修改的输出结果如下

8bb9c0940ce8fcc0790303a6a5266a34

终于一致了,继续调试,验证通过。
9月25
项目要做一个后台消息推送,在测试过程中,发现每隔1分半自由,WebSocket会走OnError方法,将异常抛出,异常是java.io.EOFException.然后走@OnClose方法,将连接自动关闭,首先需要加上心跳,并且将nginx中加上proxy_read_timeout 设置为 2000s。

     heartCheckFun(){
        var that = this;
        //心跳检测,每20s心跳一次
        that.heartCheck = {
          timeout: 20000,
          timeoutObj: null,
          serverTimeoutObj: null,
          reset: function(){
            clearTimeout(this.timeoutObj);
            clearTimeout(this.serverTimeoutObj);
            return this;
          },
          start: function(){
            var self = this;
            this.timeoutObj = setTimeout(function(){
              //这里发送一个心跳,后端收到后,返回一个心跳消息,
              //onmessage拿到返回的心跳就说明连接正常
              that.websocketSend("HeartBeat");
              console.info("客户端发送心跳");
              self.serverTimeoutObj = setTimeout(function(){//如果超过一定时间还没重置,说明后端主动断开了
                that.websock.close();//如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
              }, self.timeout)
            }, this.timeout)
          }
        }
      },

nginx的设置为:
location /{
      proxy_pass http://xx.xxx.xxx.xx:xxxx;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_read_timeout 2000s;
      keepalive_timeout  2000s;
            proxy_set_header   Host    $host;
      proxy_set_header   X-Real-IP   $remote_addr;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  }

尽管设置2000s,但是当到达设置时间,如果websocket没有进行通讯,还是会断开连接.可以前端做一个心跳检测,每隔20秒钟发起一次通信就行.

希望能帮到你;
9月21
在安装npm时,可能根据某个教程设置了例如:

npm config set prefix "C:\Program Files\nodejs\node_global"
以及
npm config set cache "C:\Program Files\nodejs\node_cache"

之类的东西,可是后来不想要了,想要恢复默认值,怎么办呢?

方法是删除C:\Users\Administrator\.npmrc这个文件。如果.npmrc不在这个目录下,就全局搜一下啦。
9月21

配置Nodejs镜像

11:18Web开发  From: 本站原创
npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global

yarn config set registry https://registry.npm.taobao.org --global
yarn config set disturl https://npm.taobao.org/dist --global


执行下面的指令就可以使用cnpm利用国内镜像服务了:

npm install -g cnpm --registry=https://registry.npm.taobao.org;
9月14
SELECT COUNT(*) 

FROM (SELECT 分组字dao段 FROM 表 

GROUP BY 分组字段 

)别名 

或者 

SELECT COUNT(*) 

FROM (SELECT distinct 分组字段 FROM 表)别名

扩展资料:
SQL分组查询

在SQL Server中使用的分组查询是ORDER BY子句,使用ORDER BY子句要同聚合函数配合使用才能完成分组查询,在SELECT查询的字段中如果字段没有使用聚合函数就必须出现在ORDER BY子句中(即SELECT后边的字段名要么出现在聚合函数中,要么在ORDER BY子句中使用)

在分组查询中还可以配合使用HAVING子句,定义查询条件。

使用group by进行分组查询

在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:

1、被分组的列

2、为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数

3、group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面


要得到每组的合计可以用下面的,要总计用上面的,想一次性得到分组合计以内及总计,可以这么写:

SELECT 分组容字段 FROM 表
GROUP BY 分组字段
compute sum(COUNT(*))


那就这样
SELECT COUNT(*)
FROM (SELECT 分组字段 FROM 表
GROUP BY 分组字段
)别名

或者

SELECT COUNT(*)
FROM (SELECT distinct 分组字段 FROM 表)别名
9月14

  location / {
      proxy_http_version 1.1;    
      proxy_set_header Upgrade $http_upgrade;    
      proxy_set_header Connection "Upgrade";    
      proxy_set_header X-real-ip $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_pass http://localhost:6633/;
    }
9月3
最近在做项目时,需要要工具类中对属性进行赋值,里面有appID和appsecret,因为这两个都是相对固定不会变动的东西,所以配在配置文件 或者数据库配置表最好,这边使用的是配置文件(application.yml),然后通过@Value()属性注入到对应的属性中。
刚开始在做的时候,启动项目后发现通过使用@Value注解对这两个属性进行赋值,结果两个都注不进去。

这个让我很苦恼,通过查找资料。找到了通过set的办法进行注入,并成功。

解决办法:

   1.将这两个私有属性的set方法从私有变成公开(private -->>> public);

   2.生成这两个静态属性的set方法;

   3.将原来在静态属性上的@Value() 注解改到设在 set方法上;

   4.去除这两个静态属性set方法的static关键字

类上面的@Compoent 注解一定要有,一定要注意set方法是没有static的,否则取不到值的。
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]