自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 分享 2 种规划思维和 4 个规划方法

每年各个部门都要进行规划,规划能让目标更聚焦,让我们清晰地知道今后我们要做什么、如何去做。并非每个人都会参与规划中去,但需要掌握规划的方法,否则让你来做规划时,你会发现很痛苦,找不到什么头绪,要么规划出来的内容都是散点,要么规划出来的太抽象。在本篇文章中,提到了规划的 2 种思维模式,并分享自己在规划中用到的 4 个规划方法,让开始做规划的你显得不那么迷茫。你应该学会规划1、规划不只是高层的事规划...

2021-05-08 01:23:06 323

原创 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 implements Serializable {...

2020-01-08 22:33:18 93

原创 系统思考

平时听到不少人讲系统性思考,比如当一件事做得并不太好时,就会说缺乏系统性思考。那么究竟什么是系统思考呢?似乎掌握了系统思考就非常厉害了,本篇文章就探讨什么是系统思考,如何去运用系统思考去思考问题。笔者喜欢从名词解释上看问题的本质,把概念理清楚了就知道是什么,剩下怎么做就是实践的过程。系统思考的概念一般是指全局性思考,这个解释然而并没有揭示出本质,意思是从这个解释中并没有学到什么有用的东西。系统思考...

2020-01-06 19:55:14 106

原创 怎样快速学习框架

1、引言对于开发人员而言,框架是数不胜数,如Spring、SpringMVC、Mybatis、Netty、Hadoop......,面对纷繁的框架,如何快速学习和掌握是一项重要的技能。如何只是存留在使用阶段,这样是没有什么竞争力的,而且框架是不断推陈出新的,当你学会这个框架之后,后面又出现了一个新框架,所以快速学习框架显得非常重要了,本文就是以自己的认识和经验分享这个话题。2、框架是什么对于框架的...

2019-08-23 12:13:08 104

原创 系统流程的本质

最近在思考系统流程的本质是什么,小到一个框架、大到一个系统,如何去快速掌握系统是一项重要的能力,笔者认为的技术能力体现在三个方面:解决实际问题的能力、线上问题排查能力、源码阅读能力。本文就谈谈笔者的最近的思考供大家参考。一、从技术点到技术线说起面对阅读大量的源码时,一开始的你的感受是什么?是恐惧还是看不懂,我想两部分都有,主要还是看不懂占大部分的因素,因为看不懂才会产生恐惧,如果都能看懂,剩下就是...

2019-07-25 00:24:22 76

原创 系统架构

系统架构一直看起来比较虚,在info上正在写一个系统架构的系列,目前已发布三篇文章,预计在8月份完成,系统架构,感兴趣的朋友可以关注

2019-06-20 16:26:27 61

原创 典型排查问题案例

1. CPU 飙升定位1.1 示例代码public class Hello{ public static void main(String[] args){ System.out.println("hello"); int i = 0; while(true){ i++; i--; } ...

2019-02-18 20:39:10 83

原创 业务系统开放实现

一、引言现在大部分的人都是在做业务,毕竟业务是一个公司的支撑,没有业务带来的收益,公司又怎么能发展呢。做技术的人都喜欢钻研技术,认为做技术是有含金量的,包括我自己在前两年的工作中也是这么想的。后面发现不是这样的,技术是为了更好的服务于业务的发展,真正体现一个人的技术是他能用技术解决业务上的难题。做业务的同学有一个感受,业务需求永远都做不完,做完一个接一个,天天都在码代码。这个时候就要抬头看路了,看...

2019-01-24 19:41:15 76

原创 设计模式应对变化之道

用ppt的形式分享设计模式应对变化之道。

2019-01-15 18:12:09 68

原创 系统架构第三篇之架构(上)

一、引言架构在百科中的定义是"架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计"。看到这个定义,从中获取的有效信息不大,只知道这个很厉害,用于指导大型软件系统各个方面的设计。那何为架构呢?自己对它的理解是"按照架子把它构建出来",这里包含两个方面:一是架子是什么;二是如何构建出来。在架构两篇文章中回答这两个问题。二、架构分类大部分人谈的架构,一般是两种类型...

2018-11-19 17:28:07 98

原创 系统架构第二篇之系统(下)

一、引言上一篇文章中已经提到系统是具有层次特性,那么系统的层是如何推导出来的呢?本文就主要从系统分层的最终表现反向推导出分层的过程。二、再论系统特性在上一篇文章中根据系统的定义,提炼出系统的两个关键特点:系统的整体和部分、系统的层次结构性。层次特性现在我们大概知道了,在计算机系统中也有接触过,如网络协议的分层、计算机的分层等等。分层是一种表象特征,同时系统也具有整体和部分的特征。通过整体与部分的特...

2018-11-19 14:36:38 64

原创 系统架构第一篇之系统(上)

一、引言系统架构是平常讲得比较多的词汇,但它的含义比较广,以自己的思考和实践写出系统架构系统文章,希望对大家有些启发作用。在本文中,先讨论什么是系统,系统在百科中的解释是"系统就是若干相互联系、相互作用、相互依赖的要素结合而成的,具有一定的结构和功能,并处在一定环境下的有机整体"。从这句话里可以提炼两点内容出来:一是整体与部分(由要素结合而成的);二是结构性(具有一定的结构和功能)。本文也是基于这...

2018-11-19 07:43:47 83

原创 分布式定时任务中间件核心实现

1. 分布式任务实现思路对于分布式任务来讲,最重要的有两点:任务触发和任务执行。任务触发必须在设定的时间点内执行;任务执行一般分为两种:在定时任务集群上执行和在业务方集群上执行。任务的关键属性是JobTrigger,它支持cron表达式。可以自己来写JobTrigger的实现,也可以借用开源的框架来完成,如Quartz,本文的实现就是借用Quartz的功能来完成的,其它的开源框架中也有不少使用到它...

2018-09-17 15:15:37 151

原创 项目结构示例

ProjectName | - Api层 | Api.web | config | controller | filter | vo | - Biz层 | flow | action | trans...

2018-09-14 19:24:27 61

原创 系统业务架构

1、系统的特性百科中对系统的定义是"系统就是若干相互联系、相互作用、相互依赖的要素结合而成的,具有一定的结构和功能,并处在一定环境下的有机整体"。这句话还算好理解,大概知道表达的意思,似乎少了一点什么,对"系统"的含义要进一步提炼:系统的特性是什么。现有的系统是很复杂的,复杂源于问题域的复杂、管理过程的复杂、需求灵活扩展的复杂。既然是复杂的,难道就不能应对么,肯定能的,应对复杂系统有一套方法,这个...

2018-09-06 05:45:33 87

原创 滴滴招聘(Base 杭州)

欢迎来滴滴,有兴趣的朋友可以加微信:13512717641Java高级研发工程师(杭州)(D6~D7) 岗位职责1. 负责电商系统设计、核心业务系统研发工作;2. 梳理业务需求,提出业务规划和系统设计;3. 攻克复杂业务模型、高并发、高可用等技术难关;4. 基于数据驱动实现业务创新。任职资格1. 3年及以上Java开发经验;2. 基础扎实,具备优秀业务建模能力;3. 良好的技术视野,拥抱开源社区;...

2018-07-02 23:30:14 82

原创 架构理解

1.1 何为架构架构一词是很多程序开发心里向往的殿堂,对它充满了无限的想象,但又一直不得要领。在进入阿里之前,自己对架构的理解是很肤浅的,认为架构就是技术对比&选型,经过一年多的实践和思考,也找了一些资深技术专家聊聊,总结下自己的心得。学习一门技术之前,要知道这个技术到底是什么、解决了什么问题、如何解决的。那什么是架构呢?不同的人会有不同的看法,其实这些都不重要,关键是自己要有自己的心得体...

2018-06-01 17:03:02 79

原创 经常学一点计算机底层原理系列之索引

最近和一些大牛在一些聊天时(资深技术专家),想到有必要写这个系列和大家分享点自己的感悟和想法。技术分为快餐技术和慢技术,快餐技术就是大家一看就懂的技术,而且马上就可以使用,看到效果,一般大家都比较喜欢学这个,它的好处是市场需要、快速上手、容易看到结果,不足之处是门槛低,大家都容易掌握,要想提升竞争力比较难;另一种是慢技术,它是需要你花上几个月,甚至一年的时间去消化,它代表了底层的技术,很长时间不会...

2018-05-13 20:02:17 78

原创 面向对象剖析

1. 面向对象1.1 为什么有面向对象呢?在软件开发的历史进程中,面向对象并非一开始就有,而在70年代才出现的,那么为什么会产生面向对象呢,换言之非面向对象编程遇到了什么的问题呢。以面向过程为例,自顶向下的设计思想被论证是成功的,面向过程将解决问题划分成step by step,类似于工厂流水线一下,第一道环节做么,下一道环节做什么,提前就规划得非常好。工厂流水线,是相对固定的,一条流水线也得用上...

2018-04-22 14:03:29 251

原创 谈谈对"计算"的认识

1、何为计算"计算"一词对我们来讲并不陌生,如并行计算、分布式计算、云计算......,前面都是修饰词,关键词是计算。为什么google能提出map-reduce分布式计算框架呢,本文就以自己的理解和感想,去解读"计算"一词。"计算"存在学习和生活中,一直伴随着我们,如应用计算题,有很多条件,计算路径有多远、花了多少钱......,这些现象本质后面有一个共同点:凡是可计算的前提是事物之间存在某种关...

2018-04-22 06:27:11 92

原创 Zookeeper原理&实战

1、分布中的一致性谈到分布式,不得谈到CAP(一致性、可用性、分区性),对于分区性是确定的,剩下的就在一致性和可用性中选择,这个选择又是一个痛苦的事情,鱼和熊掌不可兼得。后面出来了BASE理伦,选择不是完全绝对的,可用性有50%的可用,80%的可用,一致性有强一致性和最终一致性。今天谈谈Zookeeper,有人说它是强一致性,也有人说它是最终一致性,个人觉得都有道理。说它是强一致性的理由是有选举的...

2018-04-14 18:38:16 54

原创 Netty原理解析

1、不得不说的NIO框架解析传统IO问题,一般使用多线程来解决,一个读写阻塞不会影响其它的线程,但这也有问题,线程上下文切换是有开销的,另外设置过多的线程,也是一种开销。传统IO的根本原因是IO是阻塞,所以一种新的IO模型就产生了NIO(Non-Blocking IO),NIO三把斧(select、channel、buffer)刚好解决了传统IO的问题,具体分析可以详见 漫谈NIO。支持NIO要在...

2018-03-25 10:53:54 56

原创 漫谈NIO

1、传统socket的痛点1.1 最基本的网络通信程序单线程用下面的一个图来说明,它最大的特点是一个一个轮流来处理请求,如果一个请求被block住,那后面的请求只有等待的份了,马上有人就提出了优化方案,现在只有一个线程来处理,如果用多线程,是不是马上就解决了这个问题呢?多线程解决了此场景下的吞吐量的问题。 1.2 多线程模式上面提到多线程模式是可以提高吞吐量的,用下面的图来示例说明。写了一个简单的...

2018-03-17 19:02:52 72

原创 Servlet异步

原理经常有这样一类需求,客户端发送一个请求,但服务端什么时候有数据返回不知道,这个时候可以考虑用异步来实现,servlet从3.0版本后就支持这个功能了,主要通过AsyncContext来实现的,在springboot里写了一个demo实践一下。完整代码@WebServlet(asyncSupported = true, urlPatterns = {"/getData"}) public cla...

2018-03-16 07:49:20 50

原创 动态加载类(热部署类)

原理要实现动态加载一个类(可能会修改该类),一般有两种方法,实例化不同的classloader来加载,另一种方法是用同一个classloader来加载,但类名会修改。用的还是JDK编译工具来编译代码,classloader用自定义的classloader。代码如下:/** * Created by gaofla on 2018/3/14. */ public class ClassEngine...

2018-03-14 14:34:44 49

原创 异常日志监控之日志采集

1、 异常日志监控概述异常日志监控十分重要,可以帮助开发和运维同学看到目前线上异常日志的分类和频率,能迅速定位到代码,不必要登录到机器上一个个查找,异常日志监控平台能清晰的知道该异常类型在5分钟内、15分钟内、30分钟内出现的次数和异常完整的堆栈信息,这样在界面上展示出来一目了然。在中小公司可能没有这样的平台,基本上只有核心开发同学才有权限登录到跳板机去查线上日志情况,一个开发团队里,估计也只有3...

2018-03-10 16:40:17 75

原创 Java线上问题排查

1、 垃圾收集算法原理介绍1) 标记-清除算法:标记所有需要回收的对象,在标记完后统一回收。缺点:标记清除效率不高。产生碎片较多。2) 复制算法:将内存分成两份,使用其中的一份,把存活的对象复制到另一块去。则一次性清理另一半的内存。(如:Eden空间与survivor空间)3) 标记-整理算法:与标记-清理类似,但后续步骤是将存活对象向一端移动,然后直接清理掉端边界以外的内存。4) 分代收集算法:...

2018-03-06 02:47:21 48

原创 聊聊分布式

1、分布式概述分布式的定义在百度一搜有一堆,这里就不复制了,分布式是一个很大的概念,它的本质是什么呢?不同的人对分布式下的定义描述不一样,但在本质上是相同的,分布式的本质是:拆分+连接。这次从拆分角度来聊聊自己的一点感想。2、拆分产生的一致性问题拆分是将一个大的业务逻辑拆分成多个独立的子业务逻辑,每个子业务逻辑又可以独立部署在多台机器上(冗余,冗余可以做负载匀衡,提升可靠性),这样一来就产生了一致...

2018-03-04 14:47:08 51

原创 分布式定时任务框架原理

分布式定时任务框架原理1. 定时任务定时任务非常常见,如定时清理状态、定时生成订单、定时处理日志.....,总之定时任务使用得非常之广泛,定时任务的框架也比较多,如crontab,quartz,spring-batch,elastic-job,dts,tbschedule等,框架还是比较多。今天重点介绍quartz,并将它引申到分布式环境下使用。quartz在单机环境下支持得比较多,可以支持RAM...

2018-02-08 08:39:15 131

原创 分布式轻量级批量任务框架设计思想

批量任务在不同的公司都在使用,如每天定时生成订单、处理特定的任务等等,当数据量一大的时候,批量任务就会变得执行非常慢,有的要跑几个小时,甚至更久,如何来提高批量任务执行的速度呢?方法有多线程+分片,这两种结合起来执行速度是非常快的,单纯使用多线程也会提高处理速度(一般的批量任务偏IO密集型,用多线程会提高处理速度)。有多个批量处理框架,如Quartz、Spring-batch、Tbschedule...

2018-01-13 22:27:34 132

原创 可扩展性系统设计的思考

在 面向对象剖析 和 设计模式剖析 两篇文章中提到面向对象设计是解决复杂系统架构设计有效方法,因为面向对象是模拟人类的思维去发现对象和对象之间的关联,并且通过面向对象的技术去实现系统的可扩展性。设计模式的核心是面向对象,它把面向对象的三大特性:封闭、继承、多态,运用得炉火纯青,总结出常用的23种设计模式。找到变化 封装变化这是设计模式中,大师提出的一句高度凝练的话,可以说设计模式所做的事情都是围绕...

2018-01-08 00:45:04 47

原创 设计模式剖析

1、设计模式概述设计模式对于工作一两年的同学来讲并不陌生,甚至觉得设计模式很高深,尤其对于新手来讲,好像有些设计模式知道,一到实际应用中,又使用不上,久而久之,有一种"可远观而不可亵玩焉"的感觉。本文用另一种思路来分析设计模式,探究设计模式的奥秘。1.1 何为设计模式设计模式就是"设计的模式",前面是定语,是修饰,重点是模式,模式我们都知道,是一种可复制的经验、经历、榜样,如"广东模式"等。那为什...

2018-01-07 06:07:27 78

空空如也

空空如也

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

TA关注的人

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