技术学习
陈晨_软件五千言
资深Java从业人员,精通企业级应用服务架构,大数据相关架构,RUP、Scrum等过程管理/技术团队管理方法与培训
展开
-
分布式系统中间件整理
文章目录Redis集群架构(主从模式+哨兵)选主算法集群架构(Redis-Cluster)选主算法负载均衡其他Kafka集群架构选主算法负载均衡RabbitMQ集群架构Federation(联邦交换器)Shovel镜像队列网络分区RocketMQ集群架构Name ServerBrokerProducerConsumerElasticsearch集群架构节点和分片(物理设计)选主算法MongoDB集群架构Replica Sets 复制集选主算法Sharding 分片整合 Replica Sets+Shardi原创 2020-08-10 09:55:19 · 1495 阅读 · 0 评论 -
Kafka源码解析与实战
Kafka的架构包括Kafka的基本组成,Kafka的拓扑结构以及Kafka的内部通信协议。Kafka内部的通信协议是建立在Kafka的拓扑结构之上,而Kafka的拓扑结构是由Kafka的基本模块所组成的。AK RELEASE 2.5.0APRIL 15, 2020Kafka的基本组成Kafka集群中生产者将消息发送给以Topic命名的消息队列Queue中,消费者订阅发往以某个Topic命名的消息队列Queue中的消息。其中Kafka集群由若干个Broker组成,Topic由若干个Partitio原创 2020-07-10 14:48:22 · 1007 阅读 · 0 评论 -
Redis实战
文章目录Redis命令字符串命令列表集合散列有序集合Redis事务过期与删除数据安全与性能保障创建快照有以下几种方式:AOF持久化复制(replication,MS)事务分布式锁降低占用内存短结构分片结构打包存储二进制位和字节扩展RedisRedis的Lua脚本编程内存淘汰策略LRU淘汰TTL淘汰随机淘汰:多路复用Redis无中心集群Redis Cluseter 主要组件多个从节点选主故障转移分布式锁version1version2version3redis 和 memcached 的区别redis支原创 2020-07-01 08:51:49 · 220 阅读 · 0 评论 -
RabbitMQ实战
文章目录RabbitMQ概念交换器类型运转流程AMQP协议生产消息exchangeDeclare方法queueDeclare方法queueBind方法exchangeBind方法发送消息 basicPublish 方法消费消息推模式拉模式RabbitMQ进阶持久化生产者确认消费端要点消息传输保障RabbitMQ运维集群搭建集群迁移集群监控跨越集群限制Federation(联邦交换器)ShovelRabbitMQ高阶存储机制流控镜像队列网络分区RabbitMQ扩展消息追踪负载均衡RabbitMQ是采用Erl原创 2020-06-15 09:26:45 · 1822 阅读 · 0 评论 -
Spring源码理解
文章目录Spring整体架构容器Beans项目核心类介绍容器的基础 XmlBeanFactory配置文件封装加载Bean获取XML的验证模式解析及注册BeanDefinitions解析BeanDefinition注册解析的BeanDefinition通知监听器解析以及注册完成bean的加载FactoryBean的使用缓存中获取单例bean从bean的实例中获取对象获取单例准备创建beanSpring处理循环依赖创建bean创建bean的实例属性注入初始化bean注册DisposableBean容器的功能扩展原创 2020-06-03 15:47:55 · 204 阅读 · 0 评论 -
Java并发编程实践
文章目录内部锁重进入(Reentrancy)Java监视器模式(Java monitor pattern)ConcurrentModificationException死锁(Deadlock)、饥饿(Starvation)、活锁(Livelock)ConcurrentHashMap阻塞队列和生产者-消费者模式阻塞和可中断的方法SynchronizerFutureTaskExecutor框架CompletionService:Executor遇见BlockingQueue中断与取消队列饱和减小锁的粒度Lock原创 2020-05-25 11:19:51 · 256 阅读 · 1 评论 -
高性能MySQL分析
文章目录Schema与数据类型优化选择优化的数据类型Scheme设计中的陷阱创建高性能索引高性能的索引策略查询性能优化慢查询基础:优化数据访问是否请求了不需要的数据是否在扫描额外的记录重构查询的方式一个复杂查询还是多个简单查询切分查询分解关联查询执行查询的基础Mysql客户端/服务器通信协议查询状态查询缓存查询优化处理语法解析器和预处理查询优化器MySQL执行关联查询关联查询优化器排序优化查询执行引擎查询优化的局限性优化特定类型的查询优化count查询优化关联查询优化子查询优化group by和distin原创 2020-05-19 05:27:29 · 866 阅读 · 0 评论 -
单元测试实践思考(junit5+jmockit+testcontainer)
文章目录背景方案设计单元测试指导思想单层隔离内部穿透技术实现依赖管理基础架构封装Junit5&Jmockit单元测试配置TestContainer封装官方方案实际方案完整类代码实现实例总结背景之前整理过一篇,基于(SpringCloud+Junit5+Mockito+DataMocker)的框架整理的单元测试。当时的项目是一个编排层的服务项目,所以没有涉及到数据库或者其他中间件的复杂问...原创 2020-04-01 08:58:41 · 2355 阅读 · 0 评论 -
研发环境容器化实施过程(docker + docker-compose + jenkins)
文章目录背景介绍改造思路容器构建基础准备中间件容器外部依赖容器业务应用容器容器整合自动构建容器Maven相关非Maven项目总结背景介绍目前公司内部系统(代号GMS)研发团队,项目整体微服务规模大概是4+9+3的规模,4个内部业务微服务,9个是外部平台或者基础服务(文件资源/用户中心/网关/加密等),3个中间件服务(数据库/Redis/Nacos)。分为2个组,迭代周期为2周。需求和排期都是...原创 2019-12-28 11:28:51 · 458 阅读 · 0 评论 -
Java虚拟机-字节码执行引擎
概述Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,成为各种虚拟机执行引擎的统一外观(Facade)。不同的虚拟机引擎会包含两种执行模式,解释执行和编译执行。运行时帧栈结构栈帧(Stack Frame)支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量、操作数栈、动态连接和方...原创 2019-12-22 17:43:21 · 159 阅读 · 0 评论 -
Java虚拟机-类加载机制
文章目录概述类加载的时机加载类加载的过程加载验证准备解析初始化类加载器类与类加载器双亲委派模型破坏双亲委派模型概述虚拟机把描述类的数据从Class文件加载到内存,并且对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。编译时无需进行连接工作,类的加载、连接和初始化过程都是在程序运行期间完成的。如面向接口的应用程序可以等到运行时再指定其实际的...原创 2019-11-30 14:34:52 · 151 阅读 · 0 评论 -
Java虚拟机-字节码指令
文章目录字节码指令字节码与数据类型加载和存储指令运算指令类型转换指令对象创建与访问指令操作数栈管理指令控制转移指令方法调用和返回指令异常处理指令同步指令字节码指令Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)构成。Java虚拟机采用面向操作数栈而不是面向寄存器的架构,所以大多...原创 2019-11-18 07:05:17 · 206 阅读 · 0 评论 -
Java虚拟机-类文件结构
文章目录类文件结构Class类文件的结构魔数与Class文件的版本常量池访问标志类索引、父类索引和接口索引集合字段表集合方法表集合属性表集合完整结构描述实例源码Class文件分析魔数、Class版本常量池长度常量池内容访问标志类索引、父类索引、接口索引字段表集合方法表集合总结类文件结构Class类文件的结构任何一个Class文件都对应着唯一一个类或者接口的定义信息,但是类或者接口并不一定都要...原创 2019-11-16 11:08:15 · 137 阅读 · 0 评论 -
Java虚拟机理解-内存管理
运行时数据区域jdk 1.8之前与之后的内存模型有差异,方法区有变化(https://cloud.tencent.com/developer/article/1470519)。java的内存数据区域划分:程序计数器虚拟机栈本地方法栈堆方法区程序计数器(Program Counter Register)理解为当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变这个计...原创 2019-10-27 11:05:13 · 563 阅读 · 0 评论 -
单元测试实践(SpringCloud+Junit5+Mockito+DataMocker)
网上看过一句话,单元测试就像早睡早起,每个人都说好,但是很少有人做到。从这么多年的项目经历亲身证明,是真的。这次借着项目内实施单元测试的机会,记录实施的过程和一些总结经验。项目情况首先是背景,项目是一个较大型的项目,多个团队协作开发,采用的是SpringCloud作为基础微服务的架构,中间件涉及Redis,MySQL,MQ等等。新的起点开始起步,团队中讨论期望能够利用单元测试来提高代码质量。...原创 2019-10-19 11:48:41 · 1959 阅读 · 4 评论 -
Git基础概念与Flow流程介绍
文章目录Git相关基本概念常见客户端TortoiseGitSourcetreeIntellij Idea命令行常用命令存储区域命令之 add & commit &push命令之 branch & checkout命令之 cherry-pick命令之 merge & rebaseFlow相关GitFlowGitHub FlowGitLab FlowExeFlow总结...原创 2019-10-08 11:15:21 · 390 阅读 · 0 评论 -
谷歌最佳实践 - 如何处理代码审核中的负面反馈
处理代码审核中的拒绝反馈有时候开发者会在代码审核后给出拒绝或者负面的反馈。或者是不同意你的建议,或者是抱怨在整体过于严格。谁对谁错?当开发者不同意你的建议时,先确认一下他们是不是正确的。通常他们更加靠近代码,所以对于代码的具体方面可能他们会有更好的了解。他们的意见是否合理?从代码质量的角度考虑是否合理?如果是合理的,告诉他们是正确的,并且关闭这个问题。然而开发者并非都是正确的,这时审核者需...原创 2019-09-28 16:55:06 · 238 阅读 · 0 评论 -
谷歌最佳实践 - 如何写代码审核评论
来源如何写代码审核评论概述友善一些清楚的阐述你的理由要在清楚地给出方向和指出问题后让开发者自己决定之间做好平衡鼓励开发者简化代码或者添加说明,而不是解释代码为什么这么复杂礼貌通常当你在审核别人的代码时,友善、尊重、提供清晰、有效的意见对于开发者是非常重要的。做到这个的方法是在评论中只针对代码,而不是开发者。你不一定需要一直按照推荐实践来操作,但是当你说一些负面的或者有争议的...原创 2019-09-25 11:57:58 · 167 阅读 · 0 评论 -
谷歌最佳实践 - 代码审核的速度
来源代码审核的速度为什么代码审核要快?在谷歌,我们会对一个开发团队交付产品的速度进行优化,另外一面就是优化独立开发者的编码速度。独立开发者的速度很重要,但是绝对无法与整组的速度相比。如果代码审核太慢,就会产生下面的影响:**整组的效率会降低。**当审核不能快速反馈时,单个开发可以投入其他的工作。然而对于小组来讲,新功能或者bug修复可能就会因为代码审核被延迟数天、数周甚至数月。*...原创 2019-09-20 16:39:17 · 224 阅读 · 0 评论 -
谷歌最佳实践 - 代码审核的建议路径
来源代码审核的建议路径汇总当你知道该如何审核代码之后,如何有效率的在多个文件中进行审核呢?变更合理吗?有没有适当的描述?优先确认变更提交中的核心部分有没有经过良好设计?确认变更提交中的其他部分都是有良好排序的。第一步:对变更进行概览查看变更的描述并且对变更提交整体的浏览。变更是否合理?如果一开始就发现变更不应该发生,就应当立即解释原因和理由。当你拒绝这个变更的时候,最好也能...原创 2019-09-19 11:06:09 · 145 阅读 · 0 评论 -
mybatis的插入与批量插入的返回ID的原理
文章目录背景底层调用方法单个对象插入直接保存实体的对象作为参数传入(给伪代码示例)多个对象,实体对象作为其中一个对象传入列表批量插入直接保存实体的对象作为参数传入(给伪代码示例)多个对象,实体对象作为其中一个对象传入完成背景最近正在整理之前基于mybatis的半ORM框架。原本的框架底层类ORM操作是通过StringBuilder的append拼接的,这次打算用JsqlParser重写一遍,一...原创 2019-03-07 18:08:47 · 3061 阅读 · 2 评论 -
Flink概念- 数据流编程模型 + 分布式运行环境
Flink概念- 数据流编程模型 + 分布式运行环境文章基于Apache Flink 1.7的文档翻译而来https://ci.apache.org/projects/flink/flink-docs-release-1.7/concepts/programming-model.htmlhttps://ci.apache.org/projects/flink/flink-docs-rele...原创 2019-03-23 16:35:29 · 461 阅读 · 0 评论 -
RocketMQ基础架构
基于官方文档进行翻译文章目录概览代理服务集群生产者集群消费者集群命名服务代理服务概览Apache RocketMQ是一个分布式消息和流平台,它的特性包括低延迟,高性能,高可靠性,万亿级容量和弹性扩展。它的架构主要包括四部分:命名服务(name servers),代理服务(brokers),生产者(Producers),消费者(Consumers)。其中每个部分都是可以水平扩展从而避免单点...原创 2019-03-30 16:56:54 · 295 阅读 · 0 评论 -
RocketMQ生产部署
本文英文原文来自RocketMQ官方部署文档文章目录前提准生产环境部署命名服务代理服务配置代理服务配置命令行管理工具如何访问如何使用复制模式复制:同步/异步 代理服务如何配置部署本章节介绍了准生产环境部署方案。综合来讲,我们要部署一套弹性伸缩并且没有单点故障的RocketMQ集群。前提开始本章之前,你需要先了解过快速开始,并且熟悉RocketMQ的组件和核心概念。准生产环境部署命名...原创 2019-03-31 15:30:22 · 378 阅读 · 0 评论 -
RocketMQ核心概念
本文英文原文来自RocketMQ官方核心概念文档文章目录生产者生产者群组消费者拉取消费推送消费消费者群组主题消息消息队列标签代理服务命名服务消息模型消息顺序根据上面的模型,我们能够深入消息系统设计中的某些主题:并行消费消费热点问题消费负载均衡消息路由多重连接金丝雀部署(灰度,A/B)生产者生产者将业务系统生成的消息发送至代理服务。RocketMQ提供了多种模式来发送:异...翻译 2019-04-13 11:22:23 · 349 阅读 · 0 评论 -
Kafka核心概念介绍
本文的英文原文来自于kafka官方介绍文档文章目录主题与日志分布式地理位置复制生产者消费者多租户保障Kafka作为消息系统Kafka作为存储系统Kafka作为流处理系统集成系统Apache Kafka® 是一个分布式的流平台。具体是指什么?流平台有三个关键能力:发布和订阅流记录,类似与消息队列或者企业信息系统。持久化流记录,用于故障恢复。及时快速处理流记录。Kafka主要用于...原创 2019-04-21 16:30:06 · 379 阅读 · 0 评论 -
Atlassian In Action - (Atlassian成长之路)
Atlassian是我工作过程中,使用过的最满意的研发团队管理套装。使用的主要软件包括Jira Software,Confluence,Fisheye/Crucible。理论上还可以再加上Bitbucket和Bamboo,我们实际使用的是Gitlab和Jenkins。我下面也对Jira Software,Confluence,Fisheye/Crucible使用的方法进行完整的介绍,整个系列篇幅可...原创 2019-05-11 16:30:01 · 682 阅读 · 0 评论 -
[simple-orm-mybaits]基于Mybatis的ORM封装介绍
文章目录前言ORM框架现状Mybatis优缺点simple-orm-mybatis设计思路介绍simple-orm-mybatis使用说明simple-orm-mybatis实际使用推荐最佳实践更多说明前言最早接触Java的web开发框架就是SSH,其中的H就是Hibernate。Hibernate作为最出名的Java的ORM框架,现在的版本已经到了5.3.10.Final,6.0.0.Alp...原创 2019-05-30 17:24:58 · 459 阅读 · 0 评论 -
Java利用Mybatis进行数据权限控制
权限控制主要分为两块,认证(Authentication)与授权(Authorization)。认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Based Access Control)。RBAC包含为下面四个要素:用户、角色、权限、资源。用户是源头,资源是目标,用户绑定至角色,资源与权限关联,最终将角色与权限关联,就形成了比较完整灵活的权限控制模型。...原创 2019-06-06 18:19:18 · 9444 阅读 · 6 评论 -
如何进行软件技术管理?
文章目录引言组织文化体系软件工程管理ScrumRUPScrum+RUP迭代边界研发测试与发布总结这个问题其实来源于一次面试,在聊完一堆的技术架构之后,面试官抛出一个问题:“你是怎么进行研发管理的工作的?”当时我的回答是:“主要是应用Scrum来进行管理。”后续的情况不细说,但是我觉得我这句话来概括之前近10年的管理经历,实在是太弱了。后面我就思考该如何真正回答好这个问题,我也去读了厦大的MEM...原创 2019-06-11 17:58:00 · 9314 阅读 · 1 评论 -
Linux下安装docker与kubernetes(k8s)
文章目录环境kubernetes基础环境配置安装docker和kubernetes下载kubernetes的镜像初始化k8s-master添加node节点启动Kubernetes dashboard异常汇总k8s重启后无法启动。kubernetes部分pod一直没有正常running。环境安装是使用Vmware虚拟机下进行,操作系统是CentOS7 64位。规划是使用三台虚拟机搭建k8s的集群...原创 2019-07-19 18:06:32 · 3971 阅读 · 1 评论 -
Docker+Maven+Jenkins在Devops中完整应用
过去与现在很早之前,当我们需要一个部署环境的时候,我们可能指的是一台PowerEdge R710 2U服务器,走一系列冗长的申请流程,然后上架到机房、调试网络、安装系统、调试环境、最终部署应用,就这样过去了几个月。接着出现了虚拟化技术,我们在一台内部服务器使用Citrix XenApp划分出几台虚拟机,搭建了内部需求管理系统、SVN、测试环境等等,当需要新的机器时,我们只需要再次复制出一台虚拟...原创 2019-07-20 10:21:26 · 446 阅读 · 1 评论 -
互联网安全设计剑与盾
文章目录前言互联网的攻击(剑)厂家们的防守(盾)HTTPS加密/解密加签/验签重放CDN安全防盗链复杂鉴权前言互联网是软件厂家求生之地,自然也险象环生。要保证企业生存发展,自身软件的安全是最重要的,要能够保护软硬件的可用,数据的安全。互联网的攻击(剑)目前互联网常见的攻击方式如下:XSS攻击XSS攻击的全称是跨站脚本攻击(Cross Site Scripting),为不跟层叠样式表(...原创 2019-08-04 11:35:03 · 573 阅读 · 0 评论 -
Spark流式编程介绍 -编程模型
来源Spark官方文档http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#programming-model文章目录编程模型基本概念处理事件时间和延迟数据容错性编程模型结构化流中的核心概念就是将活动数据流当作一个会不断增长的表。这是一个新的流处理模型,但是与批处理模型很相似。你在...原创 2019-08-22 19:13:07 · 291 阅读 · 0 评论 -
企业代码版本管理之争:TrunkBased vs GitFlow vs AoneFlow vs OneFlow vs ExeFlow
文章目录引言TrunkBasedGitFlowAoneFlowOneFlowExeFlow综述引言网络上版本管理系统之争持久而喧嚣,依照声量来讲目前应该是Git占了较大的优势。不过我们本文的关注点在于代码的分支管理模型,因为大家无论是用SVN或者Git,目的是为了解决研发过程管理中的实际问题。我这里整理几种分支管理模型,这样大家可以对照自己的痛点选择合适的模型。不过并不是最灵活的方案就最好,灵...原创 2019-09-05 11:16:54 · 2955 阅读 · 0 评论 -
谷歌最佳实践 - 代码审查指南
来源代码审核标准代码审核的核心目的是保证谷歌代码在不断的改进发展过程中还能持续保证健康。所有代码审核的流程与工具都是设计用于确保这个目标。为了实现这个目标,我们做了很多的权衡。首先,研发人员必须能够在个人的任务上做出改进。如果你从不提交代码的改进,那产品就无法提升。同样的,如果代码审核者对于任何变更提交都设置很高的门槛,也会影响开发者今后也提交改进的热情。从另一个方面说,代码审核者的...原创 2019-09-14 16:53:08 · 239 阅读 · 0 评论 -
谷歌最佳实践 - 代码审核方法
来源代码审核时我们应该审核什么注意:在考虑下面的原则时,切记要根据《代码审核标准》进行考虑。设计代码审核中最重要的事情就是考虑一下变更提交的整体设计。变更提交中各个部分的关联交互是否合理?这些变更是应该在代码基线中,还是应该提交到支持库中?这些变更是否能够与系统内的其他部分很好的整合?现在是不是加入这个功能的合适时机点?功能性变更提交是否实现了开发者的真正目标?开发者期望的对于代码...原创 2019-09-17 10:32:53 · 251 阅读 · 0 评论 -
python入门学习(excel导入mysql)
文章目录背景说明:前置条件:硬件环境:编码过程要点1. 头部引入2. excel读取3. mysql写入4. 整体代码总结参考背景说明:基于Jira设计了一套研发的KPI考核的机制,主要采用任务+工时的形式,分为工作量+质量+规范的考核体系。数据都从Jira导出,经过规则计算后,生成对应的每个人的考核数据和分值。现在是前期探索,所以可能中间算法或者数据来源都有变更,目前还不适合编码固定算法...原创 2019-02-28 17:55:08 · 637 阅读 · 0 评论