自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 资源 (2)
  • 收藏
  • 关注

原创 python离线安装第三方包

因为安全原因,有些服务器是不允许访问外网的,所以我们没办法通过pip做在线安装,那么这种情况只能采用离线的方式。思路就是,先在有外网的服务器上,通过pip在线安装第三方包,注意:这里的系统和python版本要和离线服务器的一致,不然会出现各种版本不一致问题。大体步骤如下:先看下系统:然后安装python,我这里装的是pypy3:强烈推荐创建一个python的虚拟环境,保持隔离性,会省去很多干扰,比如创建一个名为test的虚拟环境:然后激活这个虚拟环境:在这个虚拟环境里面,下载我们需要

2022-06-08 01:45:28 2571 1

原创 Could not transfer artifact问题

我们项目构建的时候,如果发生了Could not transfer artifact什么之类的错误,绝大部分是因为我们使用的远程仓库已经升级了https,需要下载安全证书才能使用,我们在国内一般配置阿里云的仓库: <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> &lt

2022-03-29 23:30:09 15572 3

原创 设计模式-JAVA

对象池模式背景频繁的实例化对象,是很耗费资源的,同时也会频繁的触发GC操作,解决方案就是重用和共享这些创建成本高昂的对象,这就是对象池模式,也理解为池化技术。案例在JDK 5.0之后,java为了避免频繁的创建和销毁对象而影响性能,设计了对于8种基本类型(byte、short、int、long、float、double、char、boolean)包装类和String类型的9种对象池。8种基本类型包装类的对象池都是java层面实现的,如Integer的java.lang.Int...

2022-02-26 21:10:19 547

原创 查看动态代理生成的类文件

JDK的动态代理场景在数据保存前后加入日志实例先定义数据保存接口interface DataSave{ void save();}然后定义一个sql拦截器,在数据保存前后打印日志class SqlInterceptor implements InvocationHandler{ private DataSave dataSave; public SqlInterceptor(DataSave dataSave){ this.data

2022-02-25 17:59:27 1580

原创 Java基础

创建一个单例Effective Java作者Josh Bloch 提倡使用枚举的方式。枚举写法简单public enum EasySingleton{ INSTANCE;}你可以通过EasySingleton.INSTANCE来访问。枚举自己处理序列化我们知道,以前的所有的单例模式都有一个比较大的问题,就是一旦实现了Serializable接口之后,就不再是单例的了,因为,每次调用 readObject()方法返回的都是一个新创建出来的对象,有一种解决办法就是使用readReso

2022-02-16 00:39:25 138

原创 Elasticsearch知多少

Elasticsearch简介ES是Elastic Search的缩写,ES是基于Lucene的分布式存储;Lucene提供了全文检索的功能,ES在此之上加入索引分布式的机制,提供了数据分片、数据副本、数据同步等功能,保证了数据的安全性;ES存储的基本单位是一个Document,可以想象是数据库中的一行,与数据库类似的是,一个Document包含有多个Field,可以是数值类型也可以是字符类型,与数据库不同的是,Document可以随意添加或删除字段,也就是Schema less,另外ES对于需..

2022-02-15 00:46:17 1590

原创 jvm gc调优-新生代的默认值

背景在一次性能调优中,本来使用的是默认的GC,这里是jdk1.8,年轻代使用的是Parallel Scavenge收集器,老年代使用的是Parallel Old 收集器,后面申请的机器配置降低了一半:2C4G,这时候会发现堆内存会一直增长。直至触发full gc,再开始下一轮,如此往复,看下tp999。基本和GC保持一致,看下Parallel Scavenge收集器的回收策略:当整个新生代剩余的空间无法存放某个对象时,Parallel Scavenge/Parallel Old中该

2022-01-28 17:03:59 2761

原创 mybatis与spring boot的集成

前言MyBatis提供了整合到 Spring Boot 的方案 mybatis-spring-boot-starter,能够让你快速的在 Spring Boot 上面使用 MyBatis,那么我们来看看这个 mybatis-spring-boot-starter 是如何将 MyBatis 集成到 Spring Boot中的。mybatis的自动装配引入mybatis-spring-boot-starter包。 <dependency> <groupI

2022-01-24 22:21:45 4803 2

原创 记一次jvm性能调优

背景项目的海外版本,已经有两年没有更新了,目前需要更新到最新版本,申请资源时,已经没有当前使用的4C8G服务器资源了,只有2C4G的服务器了,当前每台服务器的qps有1500左右,看cpu也只使用了5%的样子,虽然新版本增加了不少功能,就算资源缩一半,看起来也是可行的。实际情况单独拉了一个分组,新版本先上了一台,观察了一天,日志没发现啥问题,便继续挂上其他机器,跑了一会,收到性能报警,max有超过1s的情况,看老版本的max,毛刺也很多,但没超过1s的情况。性能较好的是老版本,新版本明显

2022-01-21 16:37:30 1264

原创 spring boot线程池的正确使用方式

spring boot自动装配自动装配是spring boot的一大特点,自动装配其实就是spring把一些常用的bean提前注册到了容器,如redis、jdbc、activemq等,我们可以直接来使用这些bean,所有的自动装配的代码都在spring-boot-autoconfigure这个模块里。内置了很多,市面上常用的组件基本都包括了。线程池的自动装配线程池的自动装配代码在org.springframework.boot.autoconfigure.task.TaskExecuti

2022-01-19 17:57:17 5175 2

原创 java动态线程池

java线程池Java标准库提供了java.util.concurrent.ExecutorService接口表示线程池,并提供了几个实现,通过java.util.concurrent.Executors类提供的方法可以创建线程池,例如:FixedThreadPool:线程数固定的线程池; CachedThreadPool:线程数根据任务动态调整的线程池; SingleThreadExecutor:仅单线程执行的线程池。以上都有其局限性,不够灵活;另外这几种方法内部也是通过java.util.

2022-01-17 21:53:10 483

转载 Zookeeper分布式锁

前言实现一把分布式锁通常有很多方法,比较常见的有 redis 和 Zookeeper。Zookeeper能实现分布式锁,是因为它有一个特性,就是多个线程去 Zookeeper 里面去创建同一个节点的时候,只会有一个线程执行成功。Zookeeper 的 ZNode 节点Zookeeper 里面的节点可以分为两大类,一种是临时节点,一种是持久化节点。临时节点,指的是节点创建后,如果创建节点的客户端和 Zookeeper 服务端的会话失效(例如断开连接),那么节点就会被删除。持久化节点指的是节

2022-01-12 15:26:36 6129 3

原创 java集锦

spring加载过程spring主要是用来管理bean的,spring的加载过程,也就是bean的加载过程,ApplicationContext和BeanFacotry都是用于加载bean的,ApplicationContext提供了更多的扩展功能,BeanFacotry是ApplicationContext的其中一个环节,具体过程如下:读取配置文件、解析配置文件、注册bean、获取bean(单例bean会先从缓存加载,没有就实例化一个)spring循环依赖获取bean的过程是最复杂的,其中就

2022-01-11 23:54:57 278

翻译 使用pipeline加速Redis查询

Request/Response协议和RTTRedis是一个使用client-server模型和所谓的Request/Response协议的TCP服务器。

2021-06-29 21:18:14 256

原创 log4j2谨慎使用位置信息

原文引用:If one of the layouts is configured with a location-related attribute like HTML locationInfo, or one of the patterns %C or %class, %F or %file, %l or %location, %L or %line, %M or %method, Log4j will take a snapshot of the stack, and walk the stack

2021-06-10 17:00:01 349

原创 架构物语二

软件架构指软件系统的顶层结构。首先,“系统是一群关联个体组成”,这些“个体”可以是“子系统”“模块”“组件”等;架构需要明确系统包含哪些“个体”。

2021-05-30 22:37:34 176 1

原创 使用IDEA读JDK源码

建议人手一个,每当心血来潮时、遇到问题时、碰到疑惑时、闲得无聊时都可以打开工程看一看源码,做做笔记和注释。搭建源码阅读调试环境我个人觉得看源码这个事情还是应该单独搞一个Java工程,源码放里面,测试代码也放里面,集中调试,集中看代码,集中写注释比较方便一些。1、创建源码阅读项目选择最普通的Java基础项目即可:2、创建两个目录分别为:sourcetest3、导入JDK源码有很多小伙伴问JDK的源码在哪里呢?远在天边,仅...

2021-05-23 15:26:31 474 2

原创 stream和lambda的一些场景用法

场景一:对集合的去重聚合操作List<String> ips = Lists.newArrayList("10.194.39.102_6408","10.194.39.110_6406","10.194.39.110_6407");//对集合按ip分组,并将同一个ip的端口聚合Map<String, String> result = ips.stream().collect(Collectors.toMap(ip -> ip.split("_")[0],

2021-01-02 17:55:28 178

原创 架构物语

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

2020-06-29 21:37:09 183 1

原创 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 291

原创 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 201

原创 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 221

原创 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 272

原创 记一次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 538

原创 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 162

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

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

2020-06-09 15:14:11 303

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

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

2020-05-05 20:45:23 461

原创 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 163

原创 解决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 1630

原创 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 7925 4

原创 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 1240

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

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

2019-03-12 10:49:10 314

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

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

2019-03-03 17:20:19 833

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

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

2019-03-03 17:11:11 282

翻译 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 378

原创 asciidoc转markdown

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

2019-03-03 16:40:07 1876

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

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

2019-03-03 16:15:03 599

原创 一起读源码之ThreadLocal

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

2017-07-21 19:39:06 368

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

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

2017-03-21 15:11:48 779

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

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

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

好用的线程dump分析工具

好用的线程dump分析工具

2022-01-21

oracle数据库迁移

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

2013-12-02

空空如也

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

TA关注的人

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