- 博客(59)
- 收藏
- 关注
原创 分享 2 种规划思维和 4 个规划方法
每年各个部门都要进行规划,规划能让目标更聚焦,让我们清晰地知道今后我们要做什么、如何去做。并非每个人都会参与规划中去,但需要掌握规划的方法,否则让你来做规划时,你会发现很痛苦,找不到什么头绪,要么规划出来的内容都是散点,要么规划出来的太抽象。在本篇文章中,提到了规划的 2 种思维模式,并分享自己在规划中用到的 4 个规划方法,让开始做规划的你显得不那么迷茫。你应该学会规划1、规划不只是高层的事规划...
2021-05-08 19:31:11
267
原创 洞察设计模式的底层逻辑
设计模式是开发同学经常聊到的话题,也经常被用到实际的开发项目中,熟练的人可以做到信手拈来,不熟悉的人陷入苦思冥想中。笔者认为,不仅仅要掌握设计模式的用法,更要洞察设计模式的底层逻辑,只有那样,才能做到遇到实际的问题可以使用合适的设计模式去解决。一 你应该关注底层逻辑1 设计模式的段子段子一:你让他给你讲设计模式,他给你讲故事,听完后,又蹦又跳,乐坏了;看原著设计模式和实际写代码时,又是又蹦又跳...
2021-05-08 19:24:20
301
原创 技术方案设计没有深度?试试这套方法论
平时听到一些同学说技术方案没什么深度,很难讲出来,怎么去体现技术方案设计的深度是大家普遍关心的一个问题,这个问题不是个例问题,因此分享下自己的一些观点和看法。主要从三个部分来讲:第一部分主要分析为什么技术方案没有体现出深度,找到问题后就好解决,并提出技术方案的广度和深度特征;第二部分是技术方案设计的方法论,主要包括了本质论、矛盾论、系统论、演进论四个方法论,构成一个闭环反馈链路;第三部分是通过具体...
2021-05-08 19:20:33
262
原创 Spring 常用工具类
import com.google.common.collect.Lists;import org.springframework.util.*;import java.io.Serializable;import java.lang.reflect.Method;import java.util.List;class BeanDO i...
2020-01-08 00:56:35
216
原创 系统思考
平时听到不少人讲系统性思考,比如当一件事做得并不太好时,就会说缺乏系统性思考。那么究竟什么是系统思考呢?似乎掌握了系统思考就非常厉害了,本篇文章就探讨什么是系统思考,如何去运用系统思考去思考问题。 笔者喜欢从名词解释上看问题的本质,把概念理清楚了就知道是什么,剩下怎么做就是实践的过程。系统思考的概念一般是指全局性思考,这个解释然而并没有揭示出本质,意思是从这个解释中并没有学...
2020-01-06 02:10:00
656
原创 怎样快速学习框架
1、引言 对于开发人员而言,框架是数不胜数,如Spring、SpringMVC、Mybatis、Netty、Hadoop......,面对纷繁的框架,如何快速学习和掌握是一项重要的技能。如何只是存留在使用阶段,这样是没有什么竞争力的,而且框架是不断推陈出新的,当你学会这个框架之后,后面又出现了一个新框架,所以快速学习框架显得非常重要了,本文就是以自己...
2019-08-23 09:22:14
624
原创 系统流程的本质
最近在思考系统流程的本质是什么,小到一个框架、大到一个系统,如何去快速掌握系统是一项重要的能力,笔者认为的技术能力体现在三个方面:解决实际问题的能力、线上问题排查能力、源码阅读能力。本文就谈谈笔者的最近的思考供大家参考。 一、从技术点到技术线说起 面对阅读大量的源码时,一开始的你的感受...
2019-07-25 01:36:27
390
原创 系统架构
系统架构一直看起来比较虚,在info上正在写一个系统架构的系列,目前已发布三篇文章,预计在8月份完成,系统架构,感兴趣的朋友可以关注 ...
2019-06-20 02:29:12
234
原创 典型排查问题案例
1. CPU 飙升定位 1.1 示例代码 public class Hello{ public static void main(String[] args){ System.out.println("hello"); int i = 0; while(true){ ...
2019-02-18 08:50:12
290
原创 业务系统开放实现
一、引言 现在大部分的人都是在做业务,毕竟业务是一个公司的支撑,没有业务带来的收益,公司又怎么能发展呢。做技术的人都喜欢钻研技术,认为做技术是有含金量的,包括我自己在前两年的工作中也是这么想的。后面发现不是这样的,技术是为了更好的服务于业务的发展,真正体现一个人的技术是他能用技术解决业务上的难题。 做业务的同学有一个感受,业务需求永远都做不完...
2019-01-24 03:52:58
301
原创 软件架构之分离关注点
一、引言 分离关注点是我们经常听到的一个词汇,一说到分离关注点一般情况下有两种场景立即浮现在我们的眼前:一是分层;二是面向接口编程。这两个都只是分离关注点的具体实现,但并不是分离关注点的本质思想。分离关注点本身包含三层含义:一是如何分离; 二是关注点是什么;三是关注点如何实现的。本文就是围绕这三点进行阐述,结合自己的想法探讨一下分离关注点的实践。 ...
2019-01-11 05:56:39
528
原创 系统架构第三篇之架构(上)
一、引言 架构在百科中的定义是"架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计"。看到这个定义,从中获取的有效信息不大,只知道这个很厉害,用于指导大型软件系统各个方面的设计。那何为架构呢? 自己对它的理解是"按照架子把它构建出来",这里包含两个方面:一是架子是什么;二是如何构建出来。在架构两篇文章中...
2018-11-19 02:49:22
277
原创 系统架构第二篇之系统(下)
一、引言 上一篇文章中已经提到系统是具有层次特性,那么系统的层是如何推导出来的呢?本文就主要从系统分层的最终表现反向推导出分层的过程。 二、再论系统特性 在上一篇文章中根据系统的定义,提炼出系统的两个关键特点:系统的整体和部分、系统的层次结构性。层次特性现在我们大概知道了,在计算机系统中也有接触过,如网络协议的...
2018-11-19 02:48:43
187
原创 系统架构第一篇之系统(上)
一、引言 系统架构是平常讲得比较多的词汇,但它的含义比较广,以自己的思考和实践写出系统架构系统文章,希望对大家有些启发作用。 在本文中,先讨论什么是系统,系统在百科中的解释是"系统就是若干相互联系、相互作用、相互依赖的要素结合而成的,具有一定的结构和功能,并处在一定环境下的有机整体"。从这句话里可以提炼两点内容出来:一是整体与部分(由要素结合...
2018-11-19 02:47:52
232
原创 分布式定时任务中间件核心实现
1. 分布式任务实现思路 对于分布式任务来讲,最重要的有两点:任务触发和任务执行。任务触发必须在设定的时间点内执行;任务执行一般分为两种:在定时任务集群上执行和在业务方集群上执行。 任务的关键属性是JobTrigger,它支持cron表达式。可以自己来写JobTrigger的实现,也可以借用开源的框架来完成,如Quartz,本文的实现就是借用...
2018-09-17 01:04:13
307
原创 项目结构示例
ProjectName | - Api层 | Api.web | config | controller | filter | vo | - Biz层 | flow | action ...
2018-09-14 09:05:54
204
原创 架构思考
1、知识的混沌到有序 架构对于很多开发来讲,具有很大的魔性,代表着开发人员的层次,架构师的职位还是非常诱惑人。但什么是架构呢?我自己经过了很长的时间去理解它,中间有迷茫、有困惑,之前在阿里,里面有很多大牛,去请教专家,每个人对架构有自己的理解。自己也买了一些书,看到各种资料上讲的,各不尽同。那时候,知识是混沌。混沌的结果是让人无法抓到问题的本质。人的...
2018-09-07 01:33:24
304
原创 系统业务架构
1、系统的特性 百科中对系统的定义是"系统就是若干相互联系、相互作用、相互依赖的要素结合而成的,具有一定的结构和功能,并处在一定环境下的有机整体"。这句话还算好理解,大概知道表达的意思,似乎少了一点什么,对"系统"的含义要进一步提炼:系统的特性是什么。 现有的系统是很复杂的,复杂源于问题域的复杂、管理过程的复杂、需求灵活扩展的复杂。既然是复杂...
2018-09-06 11:19:06
1144
原创 架构理解
1.1 何为架构 架构一词是很多程序开发心里向往的殿堂,对它充满了无限的想象,但又一直不得要领。在进入阿里之前,自己对架构的理解是很肤浅的,认为架构就是技术对比&选型,经过一年多的实践和思考,也找了一些资深技术专家聊聊,总结下自己的心得。 学习一门技术之前,要知道这个技术到底是什么、解决了什么问题、如何解决的。那什么是架构呢?不同的人...
2018-06-01 07:14:05
211
原创 经常学一点计算机底层原理系列之索引
最近和一些大牛在一些聊天时(资深技术专家),想到有必要写这个系列和大家分享点自己的感悟和想法。技术分为快餐技术和慢技术,快餐技术就是大家一看就懂的技术,而且马上就可以使用,看到效果,一般大家都比较喜欢学这个,它的好处是市场需要、快速上手、容易看到结果,不足之处是门槛低,大家都容易掌握,要想提升竞争力比较难;另一种是慢技术,它是需要你花上几个月,甚至一年的时间去消化,它代表了底层的技...
2018-05-13 05:27:25
219
原创 谈谈对"计算"的认识
1、何为计算 "计算"一词对我们来讲并不陌生,如并行计算、分布式计算、云计算......,前面都是修饰词,关键词是计算。为什么google能提出map-reduce分布式计算框架呢,本文就以自己的理解和感想,去解读"计算"一词。 "计算"存在学习和生活中,一直伴随着我们,如应用计算题,有很多条件,计算路径有多远、花了多少钱......,这些现...
2018-04-21 07:42:36
928
原创 Zookeeper原理&实战
1、分布中的一致性 谈到分布式,不得谈到CAP(一致性、可用性、分区性),对于分区性是确定的,剩下的就在一致性和可用性中选择,这个选择又是一个痛苦的事情,鱼和熊掌不可兼得。后面出来了BASE理伦,选择不是完全绝对的,可用性有50%的可用,80%的可用,一致性有强一致性和最终一致性。今天谈谈Zookeeper,有人说它是强一致性,也有人说它是最终一致性...
2018-04-14 08:13:55
152
原创 Netty原理解析
1、不得不说的NIO框架 解析传统IO问题,一般使用多线程来解决,一个读写阻塞不会影响其它的线程,但这也有问题,线程上下文切换是有开销的,另外设置过多的线程,也是一种开销。传统IO的根本原因是IO是阻塞,所以一种新的IO模型就产生了NIO(Non-Blocking IO),NIO三把斧(select、channel、buffer)刚好解决了传统IO的...
2018-03-25 08:04:54
148
原创 内化是掌握的体现
做技术的人不仅要踏实干活,又要抬头开路,在工作、学习中要不断总结、消化,圆熟自己的技术体系。今天就聊一个话题"内化是掌握的体现",为什么要谈这个呢?试想一下,如果此时让你说出你最得意的技术心得(简单明了概括技术、心得本质),你能列出几话呢? 猛的一惊,似乎这个时候想说几句却说不出了,为什么呢?没有内化成为自己的东西,没有从自己内心中对这个...
2018-03-17 13:04:15
210
原创 漫谈NIO
1、传统socket的痛点 1.1 最基本的网络通信程序 单线程用下面的一个图来说明,它最大的特点是一个一个轮流来处理请求,如果一个请求被block住,那后面的请求只有等待的份了,马上有人就提出了优化方案,现在只有一个线程来处理,如果用多线程,是不是马上就解决了这个问题呢?多线程解决了此场景下的吞吐量的问题。 ...
2018-03-17 06:52:44
268
原创 Servlet异步
原理 经常有这样一类需求,客户端发送一个请求,但服务端什么时候有数据返回不知道,这个时候可以考虑用异步来实现,servlet从3.0版本后就支持这个功能了,主要通过AsyncContext来实现的,在springboot里写了一个demo实践一下。 完整代码 ...
2018-03-16 13:06:00
163
原创 动态加载类(热部署类)
原理 要实现动态加载一个类(可能会修改该类),一般有两种方法,实例化不同的classloader来加载,另一种方法是用同一个classloader来加载,但类名会修改。用的还是JDK编译工具来编译代码,classloader用自定义的classloader。代码如下: /**...
2018-03-14 11:11:08
265
原创 面向对象&设计模式
1、面向对象&设计模式概述 面向对象解决的是复用性和可扩展性,设计模式是运行面向对象分析方法总结出来的一套经验,常说的"找到变化、封装变化"就指的是可扩展性。 软件设计总的原则是:开闭原则、面向接口编程(依赖于抽象,不依赖于具体实现),当然还有其它的原则,只要满足这两点,基本就ok。 ...
2018-03-13 12:24:36
219
原创 异常日志监控之日志采集
1、 异常日志监控概述 异常日志监控十分重要,可以帮助开发和运维同学看到目前线上异常日志的分类和频率,能迅速定位到代码,不必要登录到机器上一个个查找,异常日志监控平台能清晰的知道该异常类型在5分钟内、15分钟内、30分钟内出现的次数和异常完整的堆栈信息,这样在界面上展示出来一目了然。在中小公司可能没有这样的平台,基本上只有核心开发同学才有权限登录到跳...
2018-03-10 12:19:39
549
原创 Java线上问题排查
1、 垃圾收集算法原理介绍 1) 标记-清除算法:标记所有需要回收的对象,在标记完后统一回收。缺点:标记清除效率不高。产生碎片较多。2) 复制算法:将内存分成两份,使用其中的一份,把存活的对象复制到另一块去。则一次性清理另一半的内存。(如:Eden空间与survivor空间)3) 标记-整理算法:与标记-清理类似,但后续步骤是将存活对象向一端移动,然...
2018-03-06 10:25:24
166
原创 聊聊分布式
1、分布式概述 分布式的定义在百度一搜有一堆,这里就不复制了,分布式是一个很大的概念,它的本质是什么呢?不同的人对分布式下的定义描述不一样,但在本质上是相同的,分布式的本质是:拆分+连接。这次从拆分角度来聊聊自己的一点感想。 2、拆分产生的一致性问题 拆分是将一个大的业务逻辑拆分成多个独立的子业务逻辑,每个子业...
2018-03-04 06:51:21
181
原创 分布式定时任务框架原理
分布式定时任务框架原理 1. 定时任务 定时任务非常常见,如定时清理状态、定时生成订单、定时处理日志.....,总之定时任务使用得非常之广泛,定时任务的框架也比较多,如crontab,quartz,spring-batch,elastic-job,dts,tbschedule等,框架还是比较多。今天重点介绍quartz...
2018-02-08 12:11:20
510
原创 分布式轻量级批量任务框架设计思想
批量任务在不同的公司都在使用,如每天定时生成订单、处理特定的任务等等,当数据量一大的时候,批量任务就会变得执行非常慢,有的要跑几个小时,甚至更久,如何来提高批量任务执行的速度呢?方法有多线程+分片,这两种结合起来执行速度是非常快的,单纯使用多线程也会提高处理速度(一般的批量任务偏IO密集型,用多线程会提高处理速度)。 有多个批量处理框架,如Quartz、Spring-bat...
2018-01-13 07:16:52
2201
原创 可扩展性系统设计的思考
在 面向对象剖析 和 设计模式剖析 两篇文章中提到面向对象设计是解决复杂系统架构设计有效方法,因为面向对象是模拟人类的思维去发现对象和对象之间的关联,并且通过面向对象的技术去实现系统的可扩展性。设计模式的核心是面向对象,它把面向对象的三大特性:封闭、继承、多态,运用得炉火纯青,总结出常用的23种设计模式。 找到变化 封装变化 这是设计模式中,...
2018-01-08 02:38:56
354
原创 设计模式剖析
1、设计模式概述 设计模式对于工作一两年的同学来讲并不陌生,甚至觉得设计模式很高深,尤其对于新手来讲,好像有些设计模式知道,一到实际应用中,又使用不上,久而久之,有一种"可远观而不可亵玩焉"的感觉。本文用另一种思路来分析设计模式,探究设计模式的奥秘。 1.1 何为设计模式 设计模式就是"设计的模式",前面是定语...
2018-01-07 05:13:44
157
原创 面向对象剖析
1. 面向对象 1.1 为什么有面向对象呢? 在软件开发的历史进程中,面向对象并非一开始就有,而在70年代才出现的,那么为什么会产生面向对象呢,换言之非面向对象编程遇到了什么的问题呢。以面向过程为例,自顶向下的设计思想被论证是成功的,面向过程将解决问题划分成step by step,类似于工厂流水线一下,第一道环节做么...
2017-11-17 14:05:55
114
原创 订阅与发布思考
我们经常见到的一种场景时,如果一个配置项修改了,其它使用这个配置的应用会立即感知的,在想这在底层是怎么实现的呢?不同的设计实现是不一样的。下面谈谈两种不同设计的思路。 1.主动拉取(pull) 这个是什么意思呢?就是客户启动一个线程,每隔一定的时间去向服务器发送请求(这个时间依赖于不同的系统来设置的,有的是1s,有的是1ms),...
2017-09-17 05:48:09
141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人