自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hello, I'm eMac

http://emacoo.cn/

  • 博客(31)
  • 资源 (5)
  • 收藏
  • 关注

原创 【热点】程序员会不会被人工智能取代?

面对飞速发展的 AI ,人类将何去何从?是像对待克隆人技术一样明令禁止,还是像对待核武器一样通过《不扩散核武器条约》进行限制,抑或是像《三体》中的降临派一样全面迎接 AI 时代的到来?且看十年之后。

2024-01-02 13:48:26 1209

原创 故障模型哪家强?PDR 模型来帮忙

搞安全的同学都知道,有一个非常著名的网络安全模型叫 PDR 模型,提出者是美国国际互联网安全系统公司(ISS),其核心论断是网络安全是一个时间问题,对应的公式为 Et = Dt + Rt - Pt,其中:Et (Exposure) 暴露时间,系统暴露在攻击下的时间;Pt (Prevent) 防御时间,系统扛住外部攻击的时间,或者说攻击者成功渗透的整个时间;Dt (Detect) 检测时间,安全检测系统发现攻击所需要的时间;Rt (Response) 响应时间,发现攻击到攻击路径被切断,攻击被中止.

2022-04-17 22:01:01 608

原创 不仅仅是一把瑞士军刀 —— Apifox的野望和不足

如果你认为一体化协作平台就是 Apifox 的一切,那你可能低估了 Apifox 的野心。

2022-03-13 22:25:27 2930

原创 代码评审赋魅

先来看一个令无数技术Leader闻风丧胆的项目“死亡”三角,业务压力引发代码质量下降,代码质量下降引发开发效率下降,开发效率下降又加重了业务压力,最终导致业务压力山大,乃至项目烂尾。如何破解?方法有很多,像精简业务需求、增加开发人手、升级技术架构等,很多时候需要多管齐下,但凡打掉这个“死亡”三角中的任何一角,就能终止这个恶性循环,甚至逆转为良性循环。代码评审(Code Revew,简称CR)的首要打击目标显然是“烂代码”。避免“烂代码”的最好时机是写代码的时候,其次是代码评审的时候。IBM 的 Orb..

2020-09-20 23:04:27 294

原创 【JDK 11】关于 Java 模块系统,看这一篇就够了

继 2014 年 3 月 Java 8 发布之后,时隔 4 年,2018 年 9 月,Java 11 如期发布,其间间隔了 Java 9 和 Java 10 两个非LTS(Long Term Support)版本。作为最新的LTS版本,相比 Java 8,Java 11 包含了模块系统、改用 G1 作为默认 GC 算法、反应式流 Flow、新版 HttpClient 等诸多特性。作为 JDK 11 升级系列的第一篇,本文将介绍此次升级最重要的特性——模块系统。1 模块系统简介如果把 Java 8 比.

2020-07-04 22:21:02 2362 1

原创 【Spring Cloud】详解Feign常用配置

1 Feign常用配置搭载着Spring Cloud的顺风车,Feign正以席卷之势成为使用Spring架构的大大小小互联网公司发起HTTP调用的首选框架。基于接口的声明式定义、客户端负载均衡、断路器和后备方法(fallback)是Feign相对上一代HTTP调用框架(比如Spring Template,Apache HttpClient)的四大优势。类似于Retrofit和OkHttp的关系...

2020-03-22 23:17:33 3222

原创 MySQL Connect/J 8.0时区陷阱

最近公司正在升级Spring Boot版本(从1.5升级到2.1),其间踩到一个非常隐晦的MySQL时区陷阱,具体来说,就是数据库读出的历史数据的时间和实际时间差了14个小时,而新写入的数据又都正常。如果你之前也是使用默认的MySQL时区配置,那么大概率会碰到这个问题,深究其背后的原因又涉及到很多技术细节,故整理出来分享给大家。首先来看一下原因。升级到Boot 2.1之后,MySQL Conn...

2019-12-18 08:44:51 435

原创 从零搭建一个基于Istio的服务网格

上篇文章从微服务1.0时代的三大痛点(技术门槛高,多语言支持不足和代码侵入性强)说起,由此引出服务网格的起源和演化历史。但古语有云纸上得来终觉浅,绝知此事要躬行,不亲自撸一遍命令,怎敢跟人提服务网格?本篇我将教大家如何在本地从零搭建一个基于Istio的服务网格,从而对服务网格有一个更直观的认识。

2018-05-03 23:29:44 416

原创 服务网格:微服务进入2.0时代

微服务自2014年3月由Martin Fowler首次提出以来,在Spring Cloud、Dubbo等各类微服务框架的帮助下,以燎原之势席卷了整个IT技术界,成为了最主流的分布式应用解决方案。但仍然还有很多问题没有得到根本性的解决,比如技术门槛高、多语言支持不足、代码侵入性强等。如何应对这些挑战成为了下一代微服务首要回答的问题。直到服务网格(Service Mesh)被提出,这一切都有了答案。1

2018-04-01 14:39:27 1182

原创 零基础玩转Serverless

上篇文章首先指出了Serverless=No Server这一常见误区,然后明确定义了函数这个Serverless中的核心概念,接着介绍了Serverless的4个关键特性:运行成本更低、自动扩缩容、事件驱动、无状态性,最后分析了Serverless和微服务、DevOps之间的关联关系。为了帮助大家更直观的理解Serverless,本文将介绍三种在AWS Lambda上创建函数的方式。

2018-02-04 22:38:18 507

原创 所谓Serverless,你理解对了吗?

随着DevOps和微服务的理念日渐被IT业界所接受,另一个新名词Serverless也开始进入人们的视野。尤其在今年4月份国内两大云服务厂商阿里云、腾讯云先后推出各自的Serverless产品之后,Serverless一时洛阳纸贵。那到底什么是Serverless,它跟DevOps和微服务又有什么样的联系呢?本文将尝试揭开Serverless的神秘面纱,让你一睹为快。

2018-01-01 23:56:17 1865

原创 【Spring 5】响应式Web框架实战(下)

可以看到,使用Router Functions实现RP应用时,你需要自己创建和管理容器,也就是说Spring 5并没有针对Router Functions提供IoC支持,这是Router Functions和Spring MVC相比最大的不同。除此之外,你需要通过`RouterFunction`的API(而不是注解)来配置路由表和过滤器。

2017-07-18 01:23:07 8081 3

原创 【Spring 5】响应式Web框架实战(上)

引子:被誉为“中国大数据第一人”的涂子沛先生在其成名作《数据之巅》里提到,摩尔定律、社交媒体、数据挖掘是大数据的三大成因。IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的。在此背景下,包括NoSQL,Hadoop, Spark, Storm, Kylin在内的大批新技术应运而生。其中以RxJava和Reactor为代表的响应式(Reactive)编程技术针对的就是经典的大数

2017-06-30 00:31:36 5757

原创 响应式编程总览

引子:被誉为“中国大数据第一人”的涂子沛先生在其成名作《数据之巅》里提到,摩尔定律、社交媒体、数据挖掘是大数据的三大成因。IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的。在此背景下,包括NoSQL,Hadoop, Spark, Storm, Kylin在内的大批新技术应运而生。其中以RxJava和Reactor为代表的响应式(Reactive)编程技术针对的就是经典的大数

2017-06-22 00:11:06 1704

原创 【Spring 5】响应式Web框架前瞻

引子:被誉为“中国大数据第一人”的涂子沛先生在其成名作《数据之巅》里提到,摩尔定律、社交媒体、数据挖掘是大数据的三大成因。IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的。在此背景下,包括NoSQL,Hadoop, Spark, Storm, Kylin在内的大批新技术应运而生。其中以RxJava和Reactor为代表的响应式(Reactive)编程技术针对的就是经典的大数

2017-05-30 23:43:12 11386 1

原创 面向开发的测试技术(三):Web自动化测试

引子:自上世纪末Kent Beck提出TDD(Test-Driven Development)开发理念以来,开发和测试的边界变的越来越模糊,从原本上下游的依赖关系,逐步演变成你中有我、我中有你的互赖关系,甚至很多公司设立了新的QE(Quality Engineer)职位。和传统的QA(Quality Assurance)不同,QE的主要职责是通过工程化的手段保证项目质量,这些手段包括但不仅限于编写单

2017-05-15 23:31:35 1033

原创 面向开发的测试技术(二):性能测试

响应时间和吞吐量是衡量应用性能好坏最重要的两个指标。对于绝大多数应用,刚开始的时候,响应时间最短;随着负载的增大,吞吐量快速上升,响应时间也逐渐变长;当负载超过某一个值之后,响应时间会突然呈指数级放大,同时吞吐量也应声下跌,应用性能急剧下降。

2017-05-10 01:03:37 1764

原创 面向开发的测试技术(一):Mock

引子:自上世纪末Kent Beck提出TDD(Test-Driven Development)开发理念以来,开发和测试的边界变的越来越模糊,从原本上下游的依赖关系,逐步演变成你中有我、我中有你的互赖关系,甚至很多公司设立了新的QE(Quality Engineer)职位。和传统的QA(Quality Assurance)不同,QE的主要职责是通过工程化的手段保证项目质量,这些手段包括但不仅限于编写单

2017-05-01 17:04:08 2896

原创 【Spring】详解Spring MVC中不同格式的POST请求参数的数据类型转换过程

对于不同类型的请求格式,Spring有着不同的转换过程(从请求参数到方法参数)。如果是非raw请求,则需要实现一个自定义的Long->OffsetDatetime的Converter;如果是raw请求,则确保ObjectMapper中包含一个Long->OffsetDatetime的反序列化器,注册Jackon自带的JavaTimeModule即可。

2017-04-23 11:05:40 3631

原创 JUnit 5的前世今生

起源 前事不忘,后事之师。–《战国策·赵策一》对Java程序员而言,JUnit无疑是使用最广泛的单元测试框架。自2006年初JUnit 4发布之后,11年间陆陆续续更新了13个小版本,最新的4.12版本是在2014年底发布的。在现今新技术、新框架层出不穷的IT圈,JUnit的版本更新速度不可谓不缓慢,这一点上,和去年同期发布的Jenkins 2.0如出一辙,后者也花了11年才升级了一个大版本。

2017-04-09 19:30:29 2715

原创 我的写作工具箱

对于程序员而言,写作是一种抽象程度更高的编程,需要放松的环境和专注的思考。对我而言,Mac,豆瓣FM,降噪耳机是不可或缺的陪伴。刻意的营造一些仪式感,可以帮助你更快的进入状态,比如一盏灯,一杯咖啡,一块超大鼠标垫。

2017-01-08 21:46:07 1095

原创 我是如何写作的?

我的写作心得上篇文章谈了我对写作的一些认识,这篇文章继续聊一下我现阶段的一些写作心得。最近在《得到》上听到一篇吴军老师谈写作的文章,深以为然,对照这篇文章,同时结合我的一些经验,分4个步骤介绍一下我的写作流程。1 选题选题不分好坏,只看适不适合。那对于一个程序员,什么是适合的选题?在我看来,至少要满足两个条件:第一,感兴趣的,第二,有一些实践经验。兴趣是最好的老师,也会激发你最大的热情。有了兴趣的指

2017-01-03 00:29:51 609

原创 我们为什么要写作?

写作的过程,就是将大脑中层出不穷、稍纵即逝的思维碎片整理成稳定、有序的文字的过程。这就好比Java里面的垃圾回收机制,一边将不再被引用的对象所占用的内存释放出来,一边将碎片化的内存重新整理成连续、有序的内存。

2016-12-27 14:08:26 1045

原创 微服务化改造系列之四:授权中心

这篇文章是微服务化改造系列的第四篇,主题是授权中心。有了服务注册中心和配置中心,下一步应该就可以发起服务调用了吧?Wait, 还有一个关键问题要解决。不同于单体应用内部的方法调用,服务调用存在一个服务授权的概念。打个比方,原本一家三兄弟住一屋,每次上山打猎喊一声就行,后来三兄弟分了家,再打猎就要挨家挨户敲门了。这一敲一应就是所谓的服务授权。

2016-12-04 16:57:07 7070

原创 微服务化改造系列之三:配置中心

前情概要: - 微服务化改造系列之一:总览 - 微服务化改造系列之二:服务注册中心配置中心概述这篇文章是微服务化改造系列的第三篇,主题是配置中心。上一篇我们谈到服务注册中心,即通过提供某种注册和发现的机制,解决服务互通的问题。那么问题来了,一个服务如何知道服务注册中心的地址呢?这就涉及到服务配置了。我们知道,大至一个PaaS平台,小至一个缓存框架,一般都依赖于特定的配置以正常提供服务,

2016-11-27 22:21:53 3177

原创 微服务化改造系列之二:服务注册中心

服务注册中心概述这篇文章是微服务化改造系列的第二篇,主题是服务注册中心。作为微服务架构最基础也是最重要的组件之一,服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。

2016-11-20 21:41:51 2528

原创 微服务化改造系列之一:总览

从本质上来看,相对单体应用,微服务是以牺牲强一致性、提高部署复杂性为代价,换取更彻底的分布式特性,比如异构性和强隔离性。对应CAP理论,就是用Consistency换Partition。

2016-11-13 21:41:56 2952

原创 【CI/CD】几种常见的不停机发布方式

何为不停机发布?本文所说的不停机发布,是指在不停止对外服务的前提下完成应用的更新。与热部署的区别在于,热部署关注于应用层面并且以不重启应用为前提,而不停机发布则关注于服务层面。随着摩尔定律逐渐逼近极限和多核时代的到来,分布式应用已经成为事实上的主流。下文首先给出一种通用的适用于分布式应用环境的不停机发布方式,然后再介绍Master/Worker这种常见的适用于单机应用的不停机发布方式。Cluster

2016-06-09 17:37:07 6419

原创 【Jenkins】Pipeline使用进阶

无所不能,无所不及的Pipeline得益于Jenkins内嵌的Groovy支持,加上丰富的Step库,通过编写自定义Pipeline脚本你几乎可以实现任何复杂的构建、发布流程。下面简单谈谈使用Pipeline的四个段位。I. 启蒙老师:Snipper GeneratorJenkins晦涩的行文风格并没有随着2.0的发布有所改善,Step库的官方参考手册成功的延续了Jenki

2016-05-22 22:24:31 8758 1

原创 【Jenkins】2.0新时代:从CI到CD

2.0 破茧重生自从去年9月底Jenkins的创始人Kohsuke Kawaguchi提出Jenkins 2.0(后称2.0)的愿景和草案之后,整个Jenkins社区为之欢欣鼓舞,不管是官方博客还是Google论坛,大家都在热烈讨论和期盼2.0的到来。4月20日,历经Alpha(2/29),Beta(3/24),RC(4/7)3个版本的迭代,2.0终于正式发布。这也是Jenkins面世11年以来(算

2016-05-02 11:18:40 7730 1

原创 Here I come and my DREAM is to be a good Software Developer

I believe so I can [2005/03/01 23:31]

2005-03-01 23:32:00 887

Ruby完全自学手册 下

《Ruby完全自学手册》是一本完全覆盖Ruby和Ruby on Rails的完全自学手册。《Ruby完全自学手册》的特色是由浅入深、循序渐进,注重理论和实践的结合。虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的应用领域包括系统管理、网络编程、图形处理、图形界面开发以及web开发等开发热门领域。希望借助于平易的讲解,让读者在学习的过程中,理解Ruby的编程思想,充分享受编程的乐趣,通过《Ruby完全自学手册》进入Ruby开发的殿堂。同时也希望能够与各位读者分享多年来积累的Ruby程序和网站开发的经验。 《Ruby完全自学手册》适合准备学习或了解Ruby语言和IRails框架的各类读者阅读,并可作为开发人员的参考手册。

2014-09-12

Ruby完全自学手册 上

《Ruby完全自学手册》是一本完全覆盖Ruby和Ruby on Rails的完全自学手册。《Ruby完全自学手册》的特色是由浅入深、循序渐进,注重理论和实践的结合。虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的应用领域包括系统管理、网络编程、图形处理、图形界面开发以及web开发等开发热门领域。希望借助于平易的讲解,让读者在学习的过程中,理解Ruby的编程思想,充分享受编程的乐趣,通过《Ruby完全自学手册》进入Ruby开发的殿堂。同时也希望能够与各位读者分享多年来积累的Ruby程序和网站开发的经验。 《Ruby完全自学手册》适合准备学习或了解Ruby语言和IRails框架的各类读者阅读,并可作为开发人员的参考手册。

2014-09-12

Programming Ruby中文版(第二版)下

《Programming Rudy》(中文版)(第2版)是它的第2版,其中包括超过200页的新内容,以及对原有内容的修订,涵盖了Ruby 1.8中新的和改进的特性以及标准库模块。它不仅是您学习Ruby语言及其丰富特性的一本优秀教程,也可以作为日常编程时类和模块的参考手册。Ruby是一种跨平台、面向对象的动态类型编程语言。Ruby体现了表达的一致性和简单性,它不仅是一门编程语言,更是表达想法的一种简练方式。它不仅受到广大程序员的欢迎,无数的软件大师亦为其倾倒。Programming Rubyr是关于Ruby语言的一本权威著作,也被称为PickAxe Book(镐头书,由封面上的工具得名)。

2014-09-12

Programming Ruby中文版(第二版)上

《Programming Rudy》(中文版)(第2版)是它的第2版,其中包括超过200页的新内容,以及对原有内容的修订,涵盖了Ruby 1.8中新的和改进的特性以及标准库模块。它不仅是您学习Ruby语言及其丰富特性的一本优秀教程,也可以作为日常编程时类和模块的参考手册。Ruby是一种跨平台、面向对象的动态类型编程语言。Ruby体现了表达的一致性和简单性,它不仅是一门编程语言,更是表达想法的一种简练方式。它不仅受到广大程序员的欢迎,无数的软件大师亦为其倾倒。Programming Rubyr是关于Ruby语言的一本权威著作,也被称为PickAxe Book(镐头书,由封面上的工具得名)。

2014-09-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除