Arganzheng's Blog

stay hungry, stay foolish

开放平台主动推送预言

主动推送的好处 实时性: 每次数据的变化基本都在毫秒内返回给应用程序 提升用户体验 服务端数据过滤:不是轮询拉到数据再进行处理,可以指定推送条件(比如IFTTT)。 减少服务器压力(开发者轮询) 易用:只需要一个HTTP请求,就可以不停的接受消息,同时官方提供了SDK,开发者只需要简单实现接口,处理业务数据。 常见应用场景 订单状态变化 物流信息 商品价格/上下架(导购类网站) 示例 订阅商品变更通知 从polling pull到real time push 在主动推送之前,只能使用client不断polling接口的方式。无法实时获取数据,对服务端也是一个压力。这正是 观察者模式 最适合解决的问题。 ...

content negotiation using spring mvc

元数据管理平台的REST接口突然抽风,总是返回XML格式,不管我怎么设置accept头。Debug了一下,发现每次都是优先使用ServletPathExtensionContentNegotitionStrategy。谷歌了一下,原来Spring默认的三个ContentNegotiationStrategy是PPA Strategy (path extension, then parameter, then Accept header) ,顺便也是先path extension,然后parameter(默认是format参数),然后才是accept头。要让Spring使用accept头解析,只要配置一下ContentNegotiationManagerFactory...

面试点

Java基础知识 基础类型,引用 static块 编码(中文乱码) 异常(checked && unchecked) 接口与抽象类 Collections:ConcurrentHashMap的实现机制(CAS) 非线程安全:HashSet、HashMap、ArrayList、TreeMap、TreeSet、LinkedList java集合分为两大类 Collection和Map,而Collection又分Set和List,这就是我们熟知的java3大集合类 Map、Set、List。 List:有序的,内容可重复的 (长度可变的数组) ...

scala with maven

scala官方比较prefer SBT,不过maven也可以的。关键还是IDE问题啊。 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>me.arga...

Scala的Option、Some和None

在java中,我们经常会遇到NPE异常,看到一个方法,我们无法确定它会不会返回一个null对象。方法本身也无法保证接收到的参数一定是不是null,所以有了防御式编程的说法。返回值与参数的取值说明,我们只能从代码注释或者文档中得知,更差情况,从代码实现得知,无法从函数签名直观得到。Scala引入Option关键字解决了这个问题。 必然下面这个函数定义: def computeFoo: Option[Foo] = { … } 表示computeFoo方法可能返回Foo对象,也可以返回null。 配合scala的pattern match,使用起来非常的优雅: computeFoo match { case Some(foo) => ... //...

C# Url Encoding的一些问题

最近API的C#版本SDK又出问题了,总是报sign计算错误。Sign计算问题一般是源串生成(参数排序、URL Encoding之类的)不一致,另一个就是签名算法(一般是HMAC或者MD5)不一致。首先看一下原串生成是不是有问题。 用Java和C#对同样的请求参数进行源串生成,发现果然不一样。对比了一下,发现是由于左右括号引起的。 public static void main(String[] args) throws UnsupportedEncodingException { String itemDesc = "样品材质:材质棉+聚脂纤维 颜色描述:蓝色 绿色 卡其(样品为蓝色)"; String encodingStr...

移除SVN锁

现在还有用SVN悲观锁的。。赶紧移除吧 svn propdel svn:needs-lock -R -q 要移除锁设置的工程目录 TIPS 在这之前,你可能需要先抢占锁: Tortoise==>Check For Modifications==>sell all==>Break Lock==>Commit

卓有成效的程序员——windows篇

windows下如何查看端口被哪个进程占用 比如要找出哪个进程占用了80端口: Here is netstat command & output to find which process is holding port 80. C:\Users\arganzheng>netstat -nao | findstr "0.0.0.0:80" TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 2608 可以看到,2608就是占用80端口的进程id。 然后可以使用tasklist 根据pid得到进程信息: C:\Users\arganzheng>tas...

JVM编码

package java.nio.charset; public abstract class Charset implements Comparable<Charset>{ private static volatile Charset defaultCharset; /** * Returns the default charset of this Java virtual machine. * * <p> The default charset is determined during virtual-machine startup and * typically depe...

maven学习笔记

maven的核心概念 maven的核心概念 坐标 依赖 仓库 生命周期 插件 继承和聚合 仓库 Maven中的仓库用来存放生成的构建和各种依赖。 本地仓库 远程仓库 中央仓库 私服(内部仓库) 其他重要的仓库 仓库和镜像 一般来说公司都会有一个私服,然后我们可以在本地的settings.xml中配置使用: <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xs...

×