在此汇总一些经典的技术系列文章和技术问题回答,对于比较长的内容,添加了简介和字数。

1.数据库相关技术

2.微服务相关技术

  • 什么是微服务架构: 从软件架构的发展历程讲起,分别对单体架构、SOA架构和微服务架构的演进过程做了深入浅出的讲解,同时也深入介绍了微服务架构的特点,本章以宏观的视角为读者打开微服务的大门。约1.2万字。
  • 微服务架构深度解析与最佳实践:微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo、还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的 Rest 服务。但是这个过程,具体应该怎么做?现有的条件下到底要不要做微服务?服务拆分成什么粒度才是合适的?遗留的老系统需要如何考虑重构改造?有哪些坑需要我们注意?系统怎么在分布式服务下实现数据的一致性和服务的高可用可伸缩?拆分的过程中系统数量增多,测试、部署、运维、监控,又应该如何处理?文章共分为7部分,每部分大概在3000-4000字,全文2.4万字。
  • 百亿流量微服务网关的设计与实现:本文从百亿流量交易系统微服务网关(API Gateway)的现状和面临的问题出发,阐述微服务架构与 API 网关的关系,理顺流量网关与业务网关的脉络,分享API网关知识与经验。约1.5万字。

3.中间件相关技术

4.JVM/GC相关技术

5.研发与测试

6.开源相关

7.职业发展

8.杂七杂八话题

to be continued…

最近研发中心图书馆准备补充一些书籍,我就抽空整理了一下近期朋友圈的各位技术大拿发的推荐书单、网上的一些比较火评价高的书单,再结合我自己看的一些书籍,形成了以下的4类,其中技术研发类74本,社会经济类37本,工作管理23本,其他书籍6本,共计140本。 -kimmking

1. 技术研发类(74)

  • 《数学之美》《算法之美》《系统之美》《计算进化史》《算法图解》《重构:改善既有代码的设计》《设计模式》
  • 《人月神话》《编程珠玑》《高效程序员的45个习惯:敏捷开发修炼之道》《算法导论》
  • 《计算机程序设计艺术》《程序员修炼之道》《计算机程序的构造和解释》《Java性能权威指南》
  • 《揭秘Java虚拟机》《软件随想录》《Java并发编程实战》《Java8 实战》《深入理解Java虚拟机》
  • 《深入分析Java Web技术内幕》 《大型网站技术架构》 《高性能MySQL》 《高可用MySQL》 《性能之巅》
  • 《高可用架构(第一卷)》《大型网站: 架构演进与性能优化》《亿级流量网站架构核心技术》《京东基础架构建设之路》
  • 《进化 - 运维技术变革与实践探索》《SRE:Google运维解密》《发布!软件的设计与部署 》《DevOps 软件架构师行动指南》《DevOps 实践指南》《有效的单元测试》《企业应用架构模式》《企业集成模式》
  • 《程序员修炼之道-从小工到专家》《程序员的职业素养》《程序员的数学》《程序员的数学2》《程序员的数学3》
  • 《自己动手写Java虚拟机》《图解密码技术》《图解性能优化》《图解HTTP》《图解TCP/IP : 第5版》《Netty 实战》
  • 《Java性能权威指南》《Go 语言实战》《Python 数据科学入门》《前端架构设计》《同构 JavaScript 应用开发》
  • 《微服务设计》《生产微服务》《Spring微服务实战》《分布式服务架构:原理、设计与实战》
  • 《深入理解计算机系统 第3版》《数据库全书》《虚拟机:系统与进程的通用平台》《白话深度学习与TensorFlow》《白话大数据与机器学习》
  • 《哥德尔、艾舍尔、巴赫书:集异璧之大成》《写给大家看的设计书》《恰如其分的软件架构 - 风险驱动的设计方法》《软件系统架构:使用视点和视角与利益相关者合作 第2版》《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》
  • 《硝烟中的Scrum 和 XP》《学习敏捷》《敏捷开发的艺术》《去中心化应用:区块链技术概述》《区块链技术指南》《区块链:通往资产数字化之路》《区块链革命》

2. 社会经济类(37)

  • 《全新思维》《驱动力》《游戏改变世界》《体验经济》《伟大创意的诞生》《失控》《规模》《奇点临近》
  • 《从0到1》《创业维艰》《联盟》《支付战争》《激荡三十年》《影响力》《科学的极致:漫谈人工智能》
  • 《腾讯传》《向前一步》《人类简史》《未来简史》《乔布斯传》 《人工智能简史》《信息简史》《万物简史》
  • 《浪潮之巅》《黑天鹅》《灰犀牛》《创新者的窘境》《精益创业》《走近2050:注意力、互联网与人工智能》
  • 《定位》 《场景革命》 《爆发》 《跨界》《知识的边界》《虚拟货币革命》 《爆裂:未来社会的 9 大生存原则》《硅谷钢铁侠:埃隆·马斯克的冒险人生》

3. 工作管理(23)

  • 《重新定义公司》《重新定义管理》《重新定义团队》《原则》《赋能:打造应对不确定性的敏捷团队》
  • 《精要主义》《别让猴子跳回背上》《绝佳提问》《让会议卓有成效》《七个天才团队的故事》
  • 《优秀到不能被忽视》《深度工作》《工匠精神》《复盘+:把经验转化为能力》《非暴力沟通》
  • 《第五项修炼》《洞察:精确观察和有效沟通的艺术》《如何系统思考》《软技能》《代码之外的功夫》
  • 《只有偏执狂才能生存》 《深度工作》《暗时间》

4. 其他书籍(6)

  • 《基因传》《自私的基因》《半个地球》 《共病时代》《太空生存指南》《引力波》

PPT/PPTX转image图片

By KimmKing 2018年6月1日

功能需求与技术分析

最近有一个需求,在Java环境下把PPT/PPTX转换成图片展示。
一般来说,这个需求用dotnet来实现非常合适:

  • 最简单的可以通过VSTO之类的,直接调用PowerPoint来实现转存图片。
  • 也可以不依赖于dotnet,使用手法的Aspose组件,效果非常棒,就是不便宜。

这里提供一种跨平台的Java&开源处理方式:Apache POI实现PPT/PPTX的文件处理。
核心原理就是获取每一页的PPT对象,然后输出到内存图像对象,再保存为图片文件:

1
Slide.draw(graphics);

Github开源项目

操作代码已经封装到这里:
https://github.com/kkstudy/PPT2Image

PPT2Image 是一个把PPT 或 PPTX 的每一页转换成一个图片的库。

使用说明

1
2
File file = new File("D:\\git\\PPT2Image\\1.pptx");
List<String> images = convertPPTtoImage(file,"D:\\git\\PPT2Image\\images\\pptx");

列表images里就是每一个图片的路径。

测试效果

  1. POI对于PPTX格式的处理要比PPT好,特别是文本框和字体上更精确。
  2. 转换速度PPTX要比PPT慢,PPT大概1s一张,PPTX大概需要1.6s。

效果对比

  • PPTX to Images
    PPTX1

Read More

对比项

  1. 参数:
  1. 用途:
  • GET用于从服务器端获取数据,包括静态资源(HTML|JS|CSS|Image等等)、动态数据展示(列表数据、详情数据等等)。
  • POST用于向服务器提交数据,比如增删改数据,提交一个表单新建一个用户、或修改一个用户等。
  1. 缓存:
  • GET时默认可以复用前面的请求数据作为缓存结果返回,此时以完整的URL作为缓存数据的KEY。所以有时候为了强制每次请求都是新数据,我们可以在URL后面加上一个随机参数Math.random或时间戳new Date().getTime()、或版本号,比如abc.com?a=1&rnd=0.123987之类的。这也是目前一些静态资源后面加一个很长的版本号的原因,jquery-min.js?v=13877770表示一个版本,当页面引用jquery-min.js?v=13877771时浏览器必然会重新去服务器请求这个资源。jQuery.ajax方法,如果cache=false,则会在GET请求参数中附加”_={timestamp}”来禁用缓存。
  • POST一般则不会被这些缓存因素影响。
  1. 安全性:
  • 默认对于nginx的access log,会自动记录get或post的完整URL,包括其中带的参数。
  • 对于POST来说,请求的报文却不会被记录,这些对于敏感数据来说,POST更安全一些。
  1. 自动化性能测试:
  • 基于上面提到的nginx日志,可以使用grep GET+日期,awk格式化,然后sort -u去重,从而提取到某天的所有GET请求URL,使用程序模拟登陆,然后请求所有URL即可获取简单的性能测试数据,每个请求是否正确,响应时间多少等等。
  • 但是对于POST请求,因为不知道报文,无法这样简单处理。可以通过nginx-lua获取报文输出到log,这样格式化会麻烦很多,但不失为一个办法。

dubbox与swagger集成

实现了dubbox与swagger集成,可以使用SwaggerUI在线测试rest接口,同时顺便升级了dubbox依赖的resteasy/jackson等库。

环境准备

git、jdk1.7+、maven4+、zookeeper、tomcat7+、Chrome浏览器

获取源码

源码在:https://github.com/kimmking/dubbo/tree/swaggerui

1
2
git clone https://github.com/kimmking/dubbo
git checkout -b swaggerui origin/swaggerui

编译

切换到源码根目录dubbo下,使用mvn编译

1
2
3
cd dubbo
mvn package install -DskipTests

Read More

JSON是一种文本方式展示结构化数据的方式,从产生的时候开始就由于其简单好用、跨平台,特别适合HTTP下数据的传输(例如现在很流行的REST)而被广泛使用。by kimmking@163.com

1、JSON是什么

JSON起源于1999年的JS语言规范ECMA262的一个子集(即15.12章节描述了格式与解析),后来2003年作为一个数据格式ECMA404(很囧的序号有不有?)发布。
2006年,作为rfc4627发布,这时规范增加到18页,去掉没用的部分,十页不到。

JSON的应用很广泛,这里有超过100种语言下的JSON库:json.org

更多的可以参考这里,关于json的一切

2、优缺点、标准与schema

2.1 结构与类型

这估计是最简单标准规范之一:

  • 只有两种结构:对象内的键值对集合结构和数组,对象用{}表示、内部是”key”:”value”,数组用[]表示,不同值用逗号分开
  • 基本数值有7个: false / null / true / object / array / number / string
  • 再加上结构可以嵌套,进而可以用来表达复杂的数据
  • 一个简单实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

{
"Image": {
"Width": 800,
"Height": 600,
"Title": "View from 15th Floor",
"Thumbnail": {
"Url": "http://www.example.com/image/481989943",
"Height": 125,
"Width": "100"
},
"IDs": [116, 943, 234, 38793]
}
}

2.2 优点

  • 基于纯文本,所以对于人类阅读是很友好的。
  • 规范简单,所以容易处理,开箱即用,特别是JS类的ECMA脚本里是内建支持的,可以直接作为对象使用。
  • 平台无关性,因为类型和结构都是平台无关的,而且好处理,容易实现不同语言的处理类库,可以作为多个不同异构系统之间的数据传输格式协议,特别是在HTTP/REST下的数据格式。

2.3 缺点

缺点也很明显:

  • 性能一般,文本表示的数据一般来说比二进制大得多,在数据传输上和解析处理上都要更影响性能。
  • 缺乏schema,跟同是文本数据格式的XML比,在类型的严格性和丰富性上要差很多。XML可以借由XSD或DTD来定义复杂的格式,并由此来验证XML文档是否符合格式要求,甚至进一步的,可以基于XSD来生成具体语言的操作代码,例如apache xmlbeans。并且这些工具组合到一起,形成一套庞大的生态,例如基于XML可以实现SOAP和WSDL,一系列的ws-*规范。但是我们也可以看到JSON在缺乏规范的情况下,实际上有更大一些的灵活性,特别是近年来REST的快速发展,已经有一些schema相关的发展(例如理解JSON Schema使用JSON Schema在线schema测试),也有类似于WSDL的WADL出现。

Read More

传统的中小企业应用中,使用oracle的系统占比较多。迁移到云环境mysql数据库的情况下,需要考虑诸多因素,可用性、效率等。针对阿里云上的系统迁移情况来看,中小企业为主,迁移的应用数量比较大,所用技术五花八门,人肉处理的工作量非常大,效率较低。

1.整体思路

最主要的思路是:

  1. 先考虑可用性、跑起来,DDL+数据迁移,基本的DML,程序的修改和调整,
  2. 再考虑高性能高可用高扩展,性能优化,分库分表支持,
  3. 中间可以积累一些通用的框架和平台工具,比如:
    • 数据库反向建模与DDL生成,基于EMF、GMF之类的
    • 程序的SQL扫描处理,自动发现
    • DML转换工具,基于下面第二节的考虑要素
    • 数据迁移工具,这个应该相对比较成熟
    • 在线性能度量和优化工具,这个阿里应该也有积累
    • 将上述工具平台化,并串起来,自动评估企业应用的去O上云复杂度,评估成本
  4. 长期来看,应该基于一些友商,比如用友、金蝶、中软、中科软、中科软等一些固定产品做一些封装和深度定制合作,解决同一类平台上的不同应用系统的去O工作。
  5. 对于特定的一些行业信息化系统,也有一些类型特点,可以积累一些行业类的迁移解决方案。

Read More