学习
文章平均质量分 74
~小龙~
勇往直前,不停奋斗!!!
展开
-
Java并发编程-点点滴滴
总:并发编程是提供程序执行效率、充分发挥多核CPU的直接方法,这篇,看下并发编程的点点滴滴,先看概况图:一,先看底层基础,也是支撑并发编程的基础,也就是计算机的底层支持:二,Jvm内存模型,属于逻辑内存模型:三 ,支撑并发编程的CPU缓存一致性协议MESI: MESI是指Cache line4种状态的首字母;M修改-Modified,E独享、互斥-Exclusive,S共享-Shared,I无效-Invalid。更多了解:https://www.cnblogs....原创 2021-09-05 20:35:34 · 526 阅读 · 0 评论 -
DDD领域驱动(四)——之领域建模
前边两篇,我们讲述为什么用DDD?DDD如何做好需求梳理?DDD如何在系统的层面拆分为粗细粒度合适微服务,以及微服务的架构划分。也就是我们经常说的自顶向下的拆分,现在我们将要做的功能具体拆分到具体的服务上了,也有了菱形架构、四边形架构等骨架,那么接下来就需要我们进行领域的建模了,也就是传统软件设计中的详细设计了。先看下,这个阶段的重要点:好,先说一下,我们传统的软件详细设计都是怎么做的?ER图进行业务抽象建模,根据ER图进行数据设计,功能流程图、时序图,数据流图,类图、状态图等通过抽象分析设计表、流原创 2020-07-23 09:26:17 · 5945 阅读 · 0 评论 -
DDD领域驱动(三)——之架构映射
前边两篇,我们讲述为什么用DDD?DDD如何做好需求梳理?理解了DDD要达到的目标,需求梳理好,达成统一语言了。那么接下来,就是这些需求的落地了。那么落地的第一步是什么?这些需求做在什么地方(系统)。这也是DDD划分的核心思想,自顶向下,由大到小,将其放到最合理的地方。好,先看下思维导图:这篇我们重点说三个点:限界上下文,上下文映射和领域架构。一,限界上下文(Bounded Cont...原创 2020-04-19 00:26:00 · 2359 阅读 · 1 评论 -
DDD领域驱动(二)——之需求梳理
上一篇《DDD领域驱动(一)——之引入》中,我们阐述了中台、微服务、DDD,并从面向对象的基础出发,软件工程的基础出发,简单介绍了DDD,把DDD的知识列了一个框架。让我们对DDD所处于的环境有个清晰的了解,以及其的存在的价值——要解决的问题。好,这篇我们来看一下,需求分析阶段我们通过DDD能做些什么,帮我们从领域角度去梳理需求。好,继续思维导图的细化:...原创 2020-04-05 13:56:21 · 2143 阅读 · 0 评论 -
OKR——助你做事高效条理
目标管理、时间管理、个人管理……应该大家都听说过,或看过某些方面的书籍,其实就是在不同层面,使其做的东西,有计划性,有目标性,有可掌握控性,从而能够最大程度的高效完成,或者快速成长。而OKR是随着越来越多的探索性工作的出现,KPI已经对其完全使用而发展起来的。前段时间学习了学习OKR,这里总结一下。 因为OKR更多的用在了工作上的管理上,其实我觉得我们任何事都...原创 2020-01-12 00:41:13 · 1178 阅读 · 0 评论 -
逆商助你回顾2019年迎面2020年
19年已经悄然过去,19年对于互联网行业来说是比较激荡的一年,各种新闻跌宕起伏,什么各个大厂爆料裁员、什么某某行业直接喊停、什么996加班、什么员工被暴力裁员、什么优秀人才面试互怼…… 其实不仅仅是互联网行业,随着社会经济的高速发展,而经济的快速发展,无在乎1,大家努力(加班)用时间换来更多的物质;2,改变生产方式,提高生产效率。重点是第二方面,从大的说从开始农业社会、工...原创 2020-01-04 16:51:03 · 386 阅读 · 1 评论 -
技术架构如何做?
前段时间在极客时间上学习了《从0开始学架构》。这篇博客通过思维导图的方式对其进行了总结。作为技术人,大家应该都希望自己能够成为技术专家、架构师。但是在当今纷繁复杂的技术中,如何缕清自己的思路,让自己始终处于一个主动的地位,其实非常重要的。构建自己的知识网,让自己的知识是有条理(整理过后)的进行存储,便于日后更加方便的提取使用。 好,看下总括图吧: ...原创 2018-12-02 02:15:05 · 25885 阅读 · 2 评论 -
Java高并发(五)——Lock优化,提高性能
前边我们讲了,多线程的世界,多线程的基础操作,多线程协作,多线程管理——线程池。其中多线程为什么麻烦,就因为线程并行操作,对共享资源的争夺,会出现线程安全问题。而我们解决线程安全问题的方案是同步(锁资源,串行使用),串行就会出现性能问题。举个例子:大家在大道上并行前进的几列人(多线程并发),突然遇到河流,只有一个独木桥,大家只能一个个过(锁共享资源,串行使用)。显而易见,时间更多的消...原创 2018-12-06 01:31:42 · 3182 阅读 · 1 评论 -
Netty(十四)——EventLoop之式
前边讲了ByteBuf、Channel、Unsafe、ChannelPipeline、ChannelHandler等核心的类。这篇来学习学习EventLoop(EventLoopGroup)——Netty的线程。Netty的线程模型是经过精心的设计,既提高了框架的并发性能,又能在很大程度上避免死锁,局部还是实现了无锁化设计。非常值得学习的。 一,Reactor线程模型...原创 2018-12-04 00:21:53 · 978 阅读 · 0 评论 -
Netty(十六)——总体之览
在前边我们查看了Netty核心类功能及一些源码的查看分析,这篇我们从总体架构的视角来看看Netty是什么样的,方便更好的理解。先简单总结一下Netty的核心类: ByteBuf 网络数据的基本单位总是字节,Java NIO 提供了ByteBuffer作为它的字节容器,但是其过于复杂且繁琐。Netty的ByteBuf替代ByteBuffer,一个强大的实...原创 2018-12-13 22:45:08 · 527 阅读 · 0 评论 -
JVM(一)——Java内存区域管理
在Netty中为了提高了性能,运营了很多多线程相关的知识,而在多线程中我们又看到了各种线程交互、共享资源安全、线程复用等等。而归根结缔所有编写的Java程序都会在JVM中运行,JVM也就是我们程序的容器,它是如何保证多线程程序正常运行,如何存储数据,如何存储逻辑,如何执行程序……好,我们接下来,来学习总结一下JVM相关的知识。 学习JVM,首先就需要这个容器是怎么存储...原创 2018-12-20 00:16:07 · 729 阅读 · 1 评论 -
Java高并发(六)——ThreadLocal为线程保驾护航
前边我们讲述多线程交互,多线程引起的安全问题,多线程安全的问题解决同步(synchronized、lock、CAS)……这一切的一切起源就是共享资源,共享临界区的数据安全引起的。那我们从另外一个角度想想呢?每个线程有自己的一份数据,是不是就会避免共享资源的数据问题了?ThreadLocal就是从这个角度出发而产生的,好,下边我们重点看看这个东东。 一,简单使用:Thr...原创 2018-12-09 13:49:15 · 764 阅读 · 1 评论 -
Java高并发(七)——Future模式
大家想下,多线程处理提高性能的根本本质在哪?其实就是将串行的处理步骤进行并行的处理,其实总时间是没有缩短的。也就是以前一个人干活需要10个小时,而十个人干同样的活需要1小时,从而缩短处理时间。但是如果干活有先后限制怎么办?例如工作中:测试前必须编码,编码前必须设计,设计前必须需求分析,分析前……如何提高这种情况的性能呢?或者说是如何让这中情况下的线程更加充分利用呢?Future模式—...原创 2018-12-09 18:41:47 · 5447 阅读 · 1 评论 -
Netty(十二)——ChannelPipeline之观
前边文章的代码中,我们经常往pipeline中添加ChannelHandler来进行前后顺序控制处理实际业务。是不是类似Servlet和Filter过滤器,利用职责链模式的思想,通过一个一个的Handler进行业务传递处理。下边这个图感觉挺合适: 好,这篇文章主要对ChannelPipeline进行总结学习,首先看下总结思维导图: 一,功能说明...原创 2018-11-27 23:34:22 · 2920 阅读 · 0 评论 -
oracle的 分表 详解 -----表分区(转)
今天在群里讨论了一个分库分表的问题,再加上最近生产库中一个订单记录过大的处理方式,对表分区有了更深一步的理解,这里转载了一篇文章。oracle也好,mysql也好,都是支持分区的,通过时间等范围、列表、hash、组合等等。分库迎合了微服务,分表分区迎合了大数据拆表的需求。hbase、MongoDB等NOSQL数据库也都是支持分区(分片)的。结合场景多思考。例如:订单数据过大,就可以根...转载 2018-11-26 22:29:24 · 5516 阅读 · 2 评论 -
Netty(十三)——ChannelHandler之意
上篇我们讲述了消息容器ChannelPipeline的相关知识,这篇我们来看下由它管理的,负责对I/O事件或者I/O操作进行拦截和处理,可以选择性的拦截和处理自己感兴趣的事件,也可以透传和终止事件的传递,也是由我们亲自实现的ChannelHandler业务处理。而Netty也帮我们实现一些通用的Handler,我们直接用就可以,前边写的例子中应该都有体会。我们还是来先看知识思维导图吧...原创 2018-11-30 00:57:28 · 1521 阅读 · 0 评论 -
Netty(九)——ByteBuf源码之析
ByteBuf在Netty占据着中重要的位置,上篇《Netty——ByteBuf功能之说》讲了ByteBuf的工作原理和重要功能介绍。这篇从源码的角度来看ByteBuf。首先,来看一下主要的类继承结构图: 我们从两个角度看下上图: 从内容分配角度上分为:1,堆内存(HeapByteBuf)字节缓冲区,特点是内存的分配和回收速度快,可被JVM自动回收...原创 2018-11-11 23:51:16 · 1261 阅读 · 0 评论 -
JAVA高并发(一)——了解并行世界
最近不知道怎么了,感觉什么东西都需要画画图,梳理梳理思路、写写,而且每每晚上坐到自己的位置上,打开本书,打开篇文章,打开思维导图,打开onenote,再打开音乐,然后就开始静静理解着,梳理着,画图着,编写着……感觉心情也能平静下来。netty源码还需要多花点时间理解理解,周末再进行;今天开始把Java高并发多线程的知识也回顾整理一吧。 以前学习高并发多线程的过程,现...原创 2018-11-14 00:52:01 · 1888 阅读 · 0 评论 -
Netty(七)——客户端创建之意
上一篇,看了Netty创建Server的步骤,和一些源码跟踪,这篇来看看Client创建的流程以及一些源码分析,还是我们到前边博客中,随便找一个完整的Client创建的示例代码来看。 Netty创建Client的流程其实和Server的挺类似的,下边,还是来看一张时序图: 下边,来梳理一下上边的创建流程:1,用户创建Bootstrap实例,通过API设...原创 2018-11-08 23:59:40 · 787 阅读 · 0 评论 -
Netty(十)——Channel功能之剖
Channel是netty网络操作抽象类,它聚合网络的读、写、客户端发起连接、主动关闭连接、链路关闭,获通信双方的网络地址等,也包括获取该Chanel的EventLoop获取缓冲分配器的ByteBufAllocator和pipeline等。也是非常非常重要的。 一,看下它的设计理念:1,Netty在Channel接口层,采用Facade模式进行统一封装,将网络I/O操...原创 2018-11-16 00:41:22 · 780 阅读 · 0 评论 -
Java高并发(二)——多线程基础
在上一篇 JAVA高并发——了解并行世界 中我们回顾了一些多线程的概念知识。这里先举个例子,来看现实生活中的多线程例子:一个家庭中有爸爸、妈妈、儿子,家中有电视、洗衣机、书桌等,如果妈妈领着儿子出去了,爸爸就可以想干什么干什么(单线程);如果三人都在家,妈妈可以洗衣服、爸爸在书桌上工作、儿子看动画片(三个线程使用不同的资源互不影响);如果儿子看动画片,爸爸想看NBA视频,就得等着儿子...原创 2018-11-18 23:50:47 · 1158 阅读 · 1 评论 -
Java高并发(三)——多线程协作,同步控制
继上一篇:Java高并发——多线程基础 中讲到,共享资源的合理使用,才能够使多线程程序有条不紊的运行。其中我们通过synchronized来实现临界区资源的是否可以访问。而,这篇我们来重点总结synchronized的增强替代版锁,以及其它JDK并发包提供的一些同步控制的功能。 好,还是先看下知识的总结思维导图,然后分开进行总结: 一,Reentran...原创 2018-11-21 01:14:26 · 1892 阅读 · 0 评论 -
Netty(十一)——Unsafe容貌之揭
上一篇 末尾简单提到了JDK的Unsafe类,其实是调用了一些底层的Native的一些方法实现,不希望用户调用的。而Netty中的Unsafe类实际上也是Channel的辅助类,不应该被用户直接调用的。实际的IO的读写操作都是有Unsafe完成的。好,我们简单总结一下。 一,AIP接口功能列表:Unsafe-API功能 序号 接口 注释 1, ...原创 2018-11-18 01:16:36 · 1104 阅读 · 0 评论 -
Java高并发(四)——ThreadPool,线程复用
前边我们讲述了:Java高并发——了解并行世界、Java高并发——多线程基础、Java高并发——多线程协作,同步控制 。从1,线程是什么?为什么需要多线程?2,Java对多线程的基础操作:线程的状态扭转,线程的创建、终止、中断、等待和通知、挂起和执行、等待结束和谦让,volatile关键字,线程组进行分类管理,守护线程,线程优先级,线程共享资源安全和synchronized进行控制...原创 2018-11-25 01:49:58 · 18544 阅读 · 2 评论 -
Java高并发(八)——Thread pool 如何创建及常见并行模式
在前边 Java高并发(四)——ThreadPool,线程复用 中我们学习了ThreadPool,但是在那篇中我们在create Thread pool的时候,由于我安装了阿里的开发规范插件,一直在警告我。这篇我们先看下警告,然后再看下并行开发中常见的模式。 一,如何更合理的创建ThreadPool: 1,警告:手动创建线程池,效果会更好哦!//...原创 2018-12-15 23:16:20 · 6623 阅读 · 1 评论 -
JVM(二)——垃圾回收(GC Garbage Collection)
在上一篇中 JVM(一)——Java内存区域管理 中我们介绍了JVM这个容器内存区域管理。其中 程序计数器、虚拟机栈、本地方法栈 为线程私有的,也就是这几个区域的内存占用,随线程而生、随线程而亡。而 Java堆 和 方法区 则不一样,一个接口中的多个实现类需要的内存不一样,一个方法中的多个分支需要的内存也不一样,只有程序在真正运行执行的期间才能知道创建哪些对象,动态创建、动态回收,也...原创 2018-12-23 01:51:29 · 787 阅读 · 2 评论 -
Redis(三)——Sentinel哨兵模式
前边我们总结了Redis(二)——复制,能够从一定程度上做好备份,扩展读能力(读写分离)。但这种主从复制在出现异常时回带来以下问题:1,一旦主节点出问题,需要手动将一个从节点升级为主节点,手动修改应用方连接信息,手动通过命令其它从节点复制新的主节点,整个过程都需要人工干预。2,主节点的写能力受到单击限制;3,主节点存储能力受到单击限制。而哨兵模式正是解决第1个问题呢。而2、3单机受限...原创 2019-04-13 00:05:40 · 918 阅读 · 0 评论 -
Redis(二)——复制
前边的Redis持久化解决了,单机故障能够重启恢复备份数据的功能。而在分布式系统中,为了解决单点问题,达到高可用的目的,需要进行redis数据分布式,进行多台机器实时备份,从而满足更高效的故障恢复和负载均衡等需求。好,这篇我们来看一下Redis的复制功能。复制功能也是Redis哨兵模式,集群模式的基础。 参与复制的Redis节点分为主节点(master)和从节点(sl...原创 2019-04-06 23:49:54 · 691 阅读 · 0 评论 -
Redis(一)——持久化
Redis大家都在经常使用,其功能非常强大,利用其内存存储、存取快的特新能够帮助我们解决很多难题。在项目中,我们可利用Redis:1作为缓存;2作为消息队列;3生成业务唯一键;4分布式锁控制;5内存数据库……可以很好的解决一些高并发、高性能要求的业务场景。 针对Redis的安装,五种数据结构(字符串string、哈希hash、列表list、集合set、有序集合zse...原创 2019-04-04 13:44:17 · 713 阅读 · 0 评论 -
RocketMQ(四)——常用Example(转)
最近看了看RocketMQ的官方文档,感觉不错,一直在用,每看一次,深刻一次。接下几篇主要是整理转载一下!官方地址:http://rocketmq.apache.org/docs/motivation/github地址:https://github.com/apache/rocketmq当然需要我们根据实际情况,做我们想要的抽象封装!1 基本样例在基本样例中我们提供如下的功能场景:...转载 2019-03-18 22:52:15 · 1506 阅读 · 0 评论 -
RocketMQ(三)——概念和特性(转)
最近看了看RocketMQ的官方文档,感觉不错,一直在用,每看一次,深刻一次。接下几篇主要是整理转载一下!官方地址:http://rocketmq.apache.org/docs/motivation/github地址:https://github.com/apache/rocketmq一,基本概念消息模型(Message Model)主要由 Producer、Broker、Consu...转载 2019-03-17 22:09:47 · 1268 阅读 · 0 评论 -
RocketMQ(二)——架构设计(转)
最近看了看RocketMQ的官方文档,感觉不错,一直在用,每看一次,深刻一次。接下几篇主要是整理转载一下!官方地址:http://rocketmq.apache.org/docs/motivation/github地址:https://github.com/apache/rocketmq架构设计技术架构RocketMQ架构上主要分为四部分,如上图所示:Producer:消息发布...转载 2019-03-17 00:49:18 · 860 阅读 · 1 评论 -
RocketMQ(一)——运维管理operation(转)
最近看了看RocketMQ的官方文档,感觉不错,一直在用,每看一次,深刻一次。接下几篇主要是整理转载一下!官方地址:http://rocketmq.apache.org/docs/motivation/github地址:https://github.com/apache/rocketmq运维管理(operation)1 集群搭建1.1 单Master模式这种方式风险较大,一旦Br...转载 2019-03-14 22:58:48 · 2514 阅读 · 0 评论 -
数据结构回顾
很多人都说程序=数据+逻辑,数据存放到了缓存、数据库、硬盘等,而逻辑却让这些数据根据人的操作、时间的变化等变起来。那么,在逻辑处理过程中,怎么更快、更省空间、更方便的进行数据变化,那么就是合理的选择数据结构,往往可以达到事半功倍的效果。 这段时间,经常和我媳妇聊一些衣柜啊、储物柜啊、收纳箱啊等各种储物容器,她给我说,这放这个合适,那放那个合适,这个放这个东西方便拿取,...原创 2019-03-07 01:12:49 · 1045 阅读 · 0 评论 -
研发工作中感受颇深的一些著名定律
在书中,我们经常能够看到这样那样的法则、定律。然而真正经历过这些事,回过头来进行深度思考的时候,才越来越觉的这些定律、法则的道理之处。下边简述了一些自己感悟比较深刻的定律,当然还有很多,不断学习,不断经历,不断感悟,不断成长吧。一,在系统设计时,应该多思考“墨菲定律”:1,任何事都没有表面看起来那么简单;2,所有的事都会比你预计的时间长;3,可能出错的事总会出错;...原创 2019-03-14 10:31:53 · 2445 阅读 · 3 评论 -
动态规划——解决最优问题
说到动态规划,这里先简单看下另一个算法“贪心算法-greedy algorithm”,是一种在每一步选择中都采用在当前状态下最优或最好的选择,从而导致结果是最好或最优的算法。也就是,在当前情况下,我们只管按照“心最贪”的思路进行选择即可。 一般我们会分析:1-将求解问题分成若干个子问题;2-对每一个子问题进行求解,得到子问题的局部最优解;3-把子问题的解,局部最优解合...原创 2019-03-02 00:58:26 · 6327 阅读 · 1 评论 -
JVM(四)——类加载机制
在上篇 Class类文件结构浅析 中,我们总结了将.java文件编译为的.class文件的组成结构,不仅知道我们如何写代码,也清楚了JVM执行的文件构成。那么,JVM是如何将加载这些Class文件呢?好,这篇我们来学习总结一下JVM的类加载机制。 一,JVM的类加载机制(概念):JVM把描述类的文件从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形...原创 2019-01-10 00:05:06 · 532 阅读 · 0 评论 -
浅谈算法和数据结构: B树、B+树(转)
数据结构是个美妙的东西,再次看,理解又是一个层面。学习就是一个反复的过程……原文地址:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进...转载 2019-01-15 17:01:39 · 991 阅读 · 0 评论 -
JVM(五)——JVM如何执行代码之执行引擎
前边,我们学习总结了JVM的内存区域分布、内存回收机制、及装载文件.class的文件组成结构,还有.class文件的装载过程。好,接下来,我们来看看装载好.class文件,jvm如何进行执行其代码。 我们都知道,我们写的代码,为了实现业务主要是执行其中的方法。都说项目=逻辑+数据,逻辑,即我们写的业务代码,数据及数据库、各种缓存、client本地存储等存储的数据。好,那...原创 2019-01-20 13:01:36 · 2181 阅读 · 0 评论 -
JVM——字节码指令(转)
前边我们说了class的组成部分,但是对于JVM是用什么指令进行执行各种操作呢?由于更多的是理论知识点,这里找了一篇比较全的,条理也不叫清楚。这样我们就知道我们写的Java代码,对应的JVM的指令集了。多了解,需要的时候查相关资料即可。原文地址:https://www.cnblogs.com/tenghoo/p/jvm_opcodejvm.htmlJava虚拟机的指令由一个字...转载 2019-01-12 10:02:12 · 644 阅读 · 0 评论