尝试用 maven assembly plugin 把公司的 API 项目生成 fatjar。执行的时候报“ Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/tx]”。
截图
一开始以为是 spring-tx jar 包有版本冲突。在 pom 文件里显示声明了版本,还是出现这个错误。又查了下,原来是因为把 Spring 里各模块里 META-INF 下的 scheme 文件,handler 文件覆盖了。换用 maven-shade-plugin 配置 transformer 属性即可。

截图

之前一直觉得写 MyBatis 的 SQL 配置文件是一种痛苦,稍微有新的业务需求就要写好多 SQL。今天发现一种新的方式拯救了我。。。原来 foreach 是支持动态 SQL 的,我们可以直接搞成类似拼接 SQL 的方式:
截图
但是这种也有弊端,由于这种写法只有在运行时才知道 SQL 语句是什么,你是不好做 SQL 优化的,可自定义化太高,字段顺序和索引顺序不一样致使索引无法正常生效。不过这对于我来说,都是值得的。

苹果官方宣布 2017 年开始所有 AppStore 上架的 APP 都要启用 SSL/TLS 协议,于是把我们的 API 服务改为 HTTPS,问题来了,用户在输入域名的时候一般不会输「http」或者「https」,需要域名拥有者通过 302 跳转或者加「Strict-Transport-Security」头通知浏览器强制使用 https 访问,基于安全性考虑,我们用了加请求头的方式,后来由于开发调试需要,禁掉了 HTTPS,发现用浏览器访问服务地址都自动给转为了 https 前缀。。。 万事不决问 Google,找到 Chrome,Firefox 的解决之法,我们需要清除掉 HSTS 在浏览器的本地缓存,这样就不会再自动转换为 HTTPS。

  • Chrome
    Chrome 不愧是工程师的最爱,自带 Develop 功能,键入「chrome://net-internals/#hsts」在”Delete domain”那里删掉你想要的域名即可。
    截图
  • Firefox
    火狐家没有提供如 Chrome 般那么好用的工具,需要在管理历史记录里输入你想要删除的站点,然后右键删除该站点信息即可。
    截图

现在的工作中由于需要经常读写文件,处理文本内容,Groovy 这个语言用的频率比较多,渐渐感觉它的强大,方便之处。由于是动态语言加上闭包优势,能让你用很少的代码干很多的事,真的是一件很幸福的事。比起Java冗长的语法,用Groovy处理一些日常的文件操作,字符串操作实在是一件很幸福的事。
打算用Groovy来写些DSL。DSL这个东西知道很久了,但也只是停留在知道上面,现在有机会自己实现一些,很期待。

Live2用了快一年了,耳机线出问题了,现在只有一边有声音了。。囧。网上查了下不是我一个人遇到这个问题,做工确实有问题,但音质很不错,我煲了这么久,发现一个问题,感觉它声音偏低,不知道是我Mac,或者网易云客户端的问题,声音很小。不过用它听歌仿佛所有的歌手嗓音都有了一股厚重感,我个人很喜欢这种声线!追求性价比又不想将就的同学可以看下,除了上面那个小问题,这部耳机还是很不错的

偶然间发现前支付宝架构师姚建东分享的技术人员知识体系,我转成了思维导图,方便自己查看,完善自己的知识结构,图中只列出了需要掌握的东西,具体内容的学习还需要自己按图索骥去找书看,但我已经觉得帮助很大了,可以帮助我完善自己不足的地方。

脑图

阅读全文 »

在新版产品Server端技术选型上,我选了 RESTEasy+Netty+Spring IOC+Mybatis 技术栈。目前没有看到中文blog里有比较详细的实践文章。记录下我使用时遇到的问题。

API设计上采用了目前比较流行的RESTful架构,URL上表达出接口版本号信息.

/v2.0/user/login

阅读全文 »

在公众号里看到一篇技术领导者有关的文章,觉得很不错。再加上自己打算在这条路上发展,特此再此mark。

一晃六年,《技术领导之路》要再版重印了。回想刚刚开始翻译这本书时,我还忙碌在程序开发的一线,对领导技术团队并没有太多经验;如今,也能差强人意地带领技术团队支撑年销售额数亿的业务。一路走来跌跌撞撞,所幸没有中途倒下。思考其中的原因,除去运气,除去身边同事朋友的支持,翻译《技术领导之路》也是不容忽视的因素。

很多人都知道,“职场童年”非常重要,一个人最初工作的几年,在什么样的环境里,得到过什么样的锻炼,很可能决定了他整个职业生涯的走向。同样的道理,“领导力童年”也很重要,一个人对领导力的最初接触和认知,也会深深影响他对于“领导”和“领导力”的观点,甚至领导作风。所以,在我还忙于一线开发的时候,通过翻译《技术领导之路》,“生吞活剥”了一整套关于领导力的学说,基本“塑造”了我关于领导力的认知,深深影响了我作为技术领导的管理风格和价值取向,因此也对很多问题有了自己的判断——前段时间和另一位掌管公司技术的朋友聊天,说起那种“执行力超至上”的领导风格,我们都认为,尽管或许能出结果,但不是好的领导风格。

怎样成为好的技术领导?《技术领导之路》的作者温伯格给出了一系列的答案。以技术人员的身份,我觉得最受用的几点是:通过写日记来加深自我认识,评估自己的能力应该用乘法而不是加法,从哪里寻找改进所需要的时间。

阅读全文 »

经常和字符打交道的工程师,理清字符的不同编码形式很有必要。遇到乱码问题有地放矢,不会手足无措。

1. ASCII码

我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。
ASCII码一共规定了128个字符的编码,比如空格”SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

阅读全文 »

公司附近新开了个红烧牛肉面馆,由于是第一天开,老板各种漏单。一片混乱,做出来后喊号码没有这个码,一合计号码乱了。搞得做出来的没人领,在那等着的没上来。不过那味道我吃着挺好,可能因为老板是老乡吧。
首先我们看下如何用互联网思维来经营:客人来到店里先在前台点单付款,这方式是很好的。厨房映射为后端,前台就是前段了,外卖是异步,在店里吃就是同步喽,所见即所得。我们就举中午这个高峰期吧,店铺容量是有限制的。但客人会不断涌过来。这时候就得分流,让一部分人带走。但人家就想在店里吃,做生意的没道理往外轰客人吧。[先生/小姐,不好意思,给你打包带走吧]。这话给客人说,人指定给你急。那么我们可以指定这样一个优惠活动在高峰期外卖的一律在原价基础上递个1,2块。这样前端拥堵的问题就会改善了,下面接着看后端:it界对业务量上来后网站的架构喜欢业务拆分,下面的专门搞个锅,炒饭专门分开来中间根据流水单按分别留到对应灶位。不要让这个流程打断。人手不够可以高峰期不刷碗等过了高峰一起搞(这里用到缓存概念)

——未完待续

阅读全文 »