自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (1)
  • 论坛 (1)

原创 架构物语

1、架构为场景而生,最后也会被场景所抛弃2、架构没有最好,只有最合适 人员技术研发能力/业务复杂度/数据规模/时间成本/运维能力3、一切脱离场景谈架构,都是耍流氓 --> 场景驱动架构增长4、架构分类 单体架构 分布式微服务架构-业务垂直方向拆分(用户服务、商品服务、交易服务) -功能水平方向拆分(商品网关层(用户鉴权、限流、熔断等)、商品业务逻辑层(变化最多)、商品数据访问层(CURD)) ...

2020-06-29 21:37:09 32

原创 spring-mvc源码-bean定义加载-非默认标签解析(tx:annotation-driven)

<tx:annotation-driven />这个标签对应的处理器是TxNamespaceHandler,对应的解析器是AnnotationDrivenBeanDefinitionParser,parse方法如下: public BeanDefinition parse(Element element, ParserContext parserContext) { //注册事务监听器工厂 registerTransactionalEventListenerFactory(pars

2020-06-28 18:03:12 46

原创 spring-mvc源码-bean定义加载-非默认标签解析(context:component-scan)

非默认标签解析的流程是一样的,都是先根据自己的命名空间找到对应的处理器,context:component-scan这个标签的命名空间是http://www.springframework.org/schema/context,根据这个命名空间可以找到对应的处理器:ContextNamespaceHandler,然后再找到对应的解析器解析,具体源代码可以参阅:https://blog.csdn.net/matt8/article/details/106643583我们从解析器的解析开始看,最终拿到的对应

2020-06-18 22:17:57 73

原创 spring-mvc源码-bean定义加载-默认标签解析(import)

import标签的解析是调用的org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#importBeanDefinitionResource方法,源码如下: protected void importBeanDefinitionResource(Element ele) { String location = ele.getAttribute(RESOURCE_ATTRIBUTE); if (!Str

2020-06-16 22:28:20 65

原创 spring-mvc源码-bean定义加载-默认标签解析(bean)

接上篇:bean定义加载整体流程:https://blog.csdn.net/matt8/article/details/106352083看下默认命名空间标签的解析过程,也就是http://www.springframework.org/schema/beans命名空间下标签的解析过程。bean标签的解析是从org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader#parseDefaultElement这个方

2020-06-16 18:13:11 83

原创 记一次GC优化

现象young gc时间达到了150-500ms之间,每个服务器的时间不一样,都在这个区间,监控的tp99和tp999有明显的毛刺环境docker环境,服务器规格:2c4g,容器:tomcat8,jdk:8,回收器:cms排查过程1、首先想到查看gc日志,发现有如下日志:[GC (Allocation Failure) [ParNew: 561827K->2873K(629120K), 0.4622482 secs] 1149586K->590676K(2027264K

2020-06-12 22:25:11 73

原创 spring-mvc源码-bean定义加载-非默认标签解析(context:annotation-config)

接上篇:bean定义加载整体流程:https://blog.csdn.net/matt8/article/details/106352083看下非默认标签的解析过程,以<context:annotation-config/>这个标签为例。非默认标签的解析,是通过org.springframework.beans.factory.xml.BeanDefinitionParserDelegate#parseCustomElement(org.w3c.dom.Element)这个方法实现的,这

2020-06-10 20:59:40 38

原创 spring-mvc源码-bean定义加载

接着上篇,在根上下文初始化的过程中,有一步配置和启动根上下文方法:org.springframework.web.context.ContextLoader#configureAndRefreshWebApplicationContext,这里面包含了对bean的所有处理,下面我们慢慢来看。先看下这个方法的实现:configureAndRefreshWebApplicationContext protected void configureAndRefreshWebApplicationConte

2020-06-09 15:14:11 43

原创 spring-mvc源码-上下文的初始化

1、总览目录1、总览2、根上下文初始化 spring-mvc项目里一般会有两个上下文,一个是根上下文(Root WebApplicationContext),一个是spring mvc上下文(Servlet WebApplicationContext,可以有多个),那么为什么要存在这两种上下文,可以看下官方的解释。DispatcherServletexpects ...

2020-05-05 20:45:23 75

原创 spring-mvc源码-DispatcherServlet

spring版本:4.3.15.RELEASE类继承关系HttpServletBean,FrameworkServlet和DispatcherServlet初始化过程1.HttpServletBean初始化web.xml中的参数2.FrameworkServlet将上下文赋予当前Servlet3.DispatcherServlet初始化HandlerMapping(请求...

2020-03-29 19:48:20 43

原创 解决spring-data-elasticsearch的netty包冲突

netty4.0后,不再是jboss的一部分,包名从org.jboss.netty变更为io.nettyjar包也被分割成了多个子模块,以便用户可以定制引入需要的子包。当前结构如下:Artifact ID Description netty-parent Maven parent POM netty-common Utility classes and lo...

2020-03-23 22:03:22 457

原创 mac home brew 安装不同版本的gradle

brew安装gradle命令:brew install gradle这个命令执行的是这个文件:https://github.com/Homebrew/homebrew-core/blob/master/Formula/gradle.rb所以下载的是这里的版本,这里的版本一般是最新的有时候,我们可能想要一些低版本,这个时候可以把上面的那个文件下载到本地:class Gra...

2020-03-22 20:14:44 1151

原创 mac 设置java环境变量

查看本机jdk所在位置 /usr/libexec/java_home -V设置环境变量vi ~/.bash_profile输入内容jdk变量配置内容:export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Homeexport PATH=$JAVA_HOME/bin:$PATHexpor...

2019-09-27 15:44:52 530

翻译 elasticsearch6.6文档翻译-查询语句-词条查询-词查询

Term Query {#query-dsl-term-query}term 查询查找和倒排索引中的词 精确 匹配的文档。例如:POST _search{ "query": { "term" : { "user" : "Kimchy" } }}在 user 字段的倒排索引中查找和词 Kimchy 精确匹配的文档。

2019-03-12 10:49:10 162

翻译 elasticsearch6.6文档翻译-查询语句-全文本查询-匹配查询

匹配查询 {#query-dsl-match-query}match 查询接受文本/数值/日期,分析他们并构造一个查询。例如:GET /_search{ "query": { "match" : { "message" : "this is a test" } }}注意, message 是一个字段的名字,你能够用...

2019-03-03 17:20:19 486

翻译 elasticsearch6.6文档翻译-查询语句-全文本查询

Full text queries高级的全文查询通常在全文本的场景使用,如电子邮件的正文。他们明白正在被查询的字段是怎么被分析( analyzed )的,并且在执行前将每一个字段的 分析器 (或者 搜索_分析器)应用到查询字符串。属于全文查询的是:匹配 查询标准的全文查询,包括模糊匹配和短语或者近似查询。匹配短语 查询与 match 查询类似,但是用于匹配精确短语或单词近似匹配。匹...

2019-03-03 17:11:11 165

翻译 elasticsearch6.6文档翻译-查询语句-全匹配查询

全匹配查询 {#query-dsl-match-all-query}这是最简单的查询,它会匹配所有的文档,并给所有这些文档 1.0 的评分。GET /_search{ "query": { "match_all": {} }}评分能被 boost 参数改变:GET /_search{ "query": { "match_all...

2019-03-03 17:02:53 237

原创 asciidoc转markdown

目前正在做elasticsearch的官方文档翻译工作,翻译的过程中,在想是不是可以把已经翻译的部分文档放到网站上,提前分享给大家,因为现在github上的文档现在都是asciidoc格式的,但是网站支持的是markdown的,所以需要asciidoc转到markdown格式,在网上搜索了下,貌似没有直接转的工具,但是看到很多曲线救国方案,我把自己转的过程梳理出来,供大家参考。...

2019-03-03 16:40:07 946

翻译 elasticsearch6.6文档翻译-查询语句-查询上下文和过滤上下文

date: ‘2019-03-03’title: 查询上下文和过滤上下文查询上下文和过滤上下文 {#query-filter-context}查询子句的行为取决于它是在查询上下文中使用,还是在过滤上下文中使用:查询上下文一个查询子句在查询上下文中被使用时,能够解答这个文档和查询子句的匹配程度是怎样的?除了决定文档是否匹配,还会计算一个评分,来代表与其他文档比起来,这个文档的匹配程...

2019-03-03 16:15:03 337

原创 一起读源码之ThreadLocal

这个类提供“thread-local”变量,这些变量与线程的局部变量不同,每个线程都保存一份该变量的副本,可以通过get或者set方法访问。如果开发者希望将类的某个静态变量(user ID或者transaction ID)与线程状态关联,则可以考虑使用ThreadLocal。

2017-07-21 19:39:06 296

转载 基于Redis的分布式锁到底安全吗(下)

自从我写完这个话题的上半部分之后,就感觉头脑中出现了许多细小的声音,久久挥之不去。它们就像是在为了一些鸡毛蒜皮的小事而相互争吵个不停。的确,有关分布式的话题就是这样,琐碎异常,而且每个人说的话听起来似乎都有道理。今天,我们就继续探讨这个话题的后半部分。本文中,我们将从antirez反驳Martin Kleppmann的观点开始讲起,然后会涉及到Hacker News上出现的一些讨论内容,接

2017-03-21 15:11:48 521

转载 基于Redis的分布式锁到底安全吗(上)

网上有关Redis分布式锁的文章可谓多如牛毛了,不信的话你可以拿关键词“Redis 分布式锁”随便到哪个搜索引擎上去搜索一下就知道了。这些文章的思路大体相近,给出的实现算法也看似合乎逻辑,但当我们着手去实现它们的时候,却发现如果你越是仔细推敲,疑虑也就越来越多。实际上,大概在一年以前,关于Redis分布式锁的安全性问题,在分布式系统专家Martin Kleppmann和Redis的作者an

2017-03-21 15:10:02 5739 1

转载 深入理解Java:SimpleDateFormat安全的时间格式化

想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通过一

2017-02-08 11:17:16 231

转载 神经网络浅讲:从神经元到深度学习

人工智能(Artificial Intelligence)是一个大的概念,它是机器学习的父类。机器学习,把大量的数据告诉机器由机器自己去分析这些数据从而总结得出某种规律/逻辑,然后利用这种逻辑来处理新的数据。 机器学习主要包括了两种学习方法,有监督学习和无监督学习,在无监督学习中,主要是发现数据中未知的结构或者是趋势。虽然原数据不含任何的标签,但我们希望可以对数据进行整合(分组或者聚类),或是简化数据(降维、移除不必要的变量或者检测异常值)。因此无监督算法主要的分类包含:- 聚类算法 (代表:K均值聚类,

2017-01-24 17:24:08 317

转载 Intellij IDEA 一些不为人知的技巧

idea+git=perfect

2017-01-17 20:52:13 1837 1

转载 Innodb中的事务隔离级别实现原理

当我们开启一个事务,意味着我们不想事务外的操作会影响我们,我们的事务就像是独立的线程那样,在对共享资源访问的时候,就会涉及并发问题,而事务之间对共享数据的影响程度,mysql数据库的存储引擎提供了隔离级别来参考。

2016-11-09 10:31:06 11214 3

转载 MySQL索引背后的数据结构及算法原理

摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分

2016-09-22 21:53:14 411

转载 Java NIO类库Selector机制解析

非常不错的从操作系统级别来介绍nio Selector机制

2016-09-12 16:55:06 288

原创 关于io和nio

nio的机制可以让cpu的工作更饱和,更有效率。。。

2016-09-12 11:27:03 295

转载 数据库分库分表策略

作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段。简单地说,Sharding就是将原来单一数据库按照一定的规则进行切分,把数据分散到多台物理机(我们称之为Shard)上存储,从而突破单机限制,使系统能以Scale-Out的方式应对不断上涨的海量数据,但是这种切分对上层应用来说是透明的,多个

2016-08-25 16:29:55 2111

转载 Java HashMap的hash算法

HashMap 中hash table 定位算法: Java代码  int hash = hash(key.hashCode());  int i = indexFor(hash, table.length);  其中indexFor和hash源码如下: Java代码  /**  * Applies a supplemen

2016-08-25 10:22:07 918 1

转载 Java HashMap的hash函数实现

Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到相关的内容,就正好复习一下。网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论。 1、hashmap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构

2016-08-25 10:15:55 1894

原创 Java ReentrantLock(重入锁)带来的改变

前言ReentrantLock称为重入锁,它比内部锁synchronized拥有更强大的功能,它可中断、可定时,JDK5中,在高并发的情况下,它比synchronized有明显的性能优势,在JDK6中由于jvm的优化,两者差别不是很大。synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别

2016-08-24 11:03:32 378

原创 JVM调优(五)对一个web项目的调优

调优前调优过程

2016-08-23 13:51:38 663

原创 JVM调优(四)常用调优方案

将新对象预留到新生代由于Full GC的成本要远远高于Minor GC,因此尽可能的将对象分配在新生代是一项明智的选择。 大部分情况下,jvm会尝试在eden区域分配对象,但是因为空间紧张等问题,很可能不得不将部分年轻对象提前向老年代压缩。因此,可以为程序分配一个合理的新生代空间,以最大限度避免新对象直接进入老年代的情况。一般来说,当survivor区的空间不够,或者占用量达到50%时

2016-08-23 10:37:46 351

原创 JVM调优(三)垃圾收集

前言垃圾收集器要处理的基本问题是:哪些对象需要回收?何时回收这些对象?如何回收这些对象?回收算法复制算法(copying)标记-压缩算法(mark-compact)

2016-08-22 17:22:59 202

原创 JVM调优(二)JVM内存分配参数

设置最大堆内存-Xmx参数指定。最大堆是新生代和老年代的大小之和的最大值,他是java应用程序的堆上限。使用-Xmx可以设置系统的最大堆。设置最小堆内存使用-Xms可以设置系统的最小堆空间,也就是jvm启动时,所占据的操作系统的内存大小。设置新生代设置持久代设置线程栈

2016-08-22 16:29:12 279

原创 JVM调优(一)虚拟机的内存模型

Java字节码是运行在JVM虚拟机上的,同样的字节码使用不同的JVM参数运行,其性能表现可能各不一样。

2016-08-22 10:14:27 446

原创 关于volatile和cas

cas描述:CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。这个旧的预期值是什么意思?V是内存值,B是要程序即将要存入内存的值,但这个旧的预期值A,是什么意思,程序如何知道预期值?一个线程间共享的变量,首先在主存中会保留一份,然后每个线程的工作内存也会保留一份副本。这里说的预期值,就是线程保留的副本。当该

2016-08-18 14:16:55 1352

原创 HTTP初探

http连接实际上就是tcp连接和一些使用连接的规则

2016-08-17 12:52:18 741

oracle数据库迁移

oracle的字符集介绍和设置,oracle导用户时的空表设置,oracle导出导入用户全过程详细介绍。

2013-12-02

点写博客进不去

发表于 2015-02-09 最后回复 2015-02-09

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