自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一只打杂的码农

人心惟危,道心惟微,惟精惟一,允执厥中。

  • 博客(60)
  • 资源 (9)
  • 收藏
  • 关注

原创 CTex的基本用法

Latex、TEX、CTex

2016-01-04 20:07:29 112378 4

原创 如何写好单测

卓越工程-单测

2023-03-05 14:40:52 1319

原创 Sentinel-持久化

直接使用dashboard和sentinel配置各种规则时,默认是存在了内存中。如果服务器重启那么数据就会丢失,从而Sentinel提供了5中持久化的方式,将各种配置数据进行持久化,若服务器重启就重新加载持久化的数据,防止数据丢失。1、持久化原理Sentinel 为我们提供了两个接口来实现规则的持久化,他们分别是:ReadableDataSource 和 WritableDataSource。其中主要关注ReadableDataSource。public interface ReadableDa.

2022-05-22 13:57:02 3008

原创 Sentinel原理

Sentinel

2022-05-22 13:50:11 777

转载 【转】Linux与JVM的内存关系分析

引言在一些物理内存为8g的server上,主要执行一个Java服务,系统内存分配例如以下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际执行的情况是,会发生大量使用SWAP(说明物理内存不够使用了),例如以下图所看到的。同一时候,因为SWAP和GC同一时候发生会致使JVM严重卡顿。所以我们要追问:内存到底去哪儿了?要分析这个问题,理解JVM和操作系统之间的内存关系很重要。接下来主要就Linux与JVM之

2021-05-25 10:32:20 483

原创 多数据源动态切换(主备读写分离)

多数据源动态切换继承Spring-jbdc的AbstractRoutingDataSource,实现其determineCurrentLookupKey方法来确定当前使用的数据源;一般主从切换针对方法级或类级,需要在执行方法或进入类之前明确当前需要的数据源,这时采用Aop的思想+注解来实现;为了确保每个线程之间数据源的独立性,需要增加ThreadLocal来隔离。1、继承Abstrac...

2019-07-24 22:18:51 1066

原创 synchronized关键字

synchronized关键字1、synchronized简述synchronized关键字是为了解决多线程之间访问资源的同步性,保证被它修饰的的方法或者代码块在任意时刻只能有一个线程执行。synchronized属于重量级锁,底层监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现,Java线程切换对应于操作系统实现线程之间的切换时需要从用户态转换为内核态,需要耗...

2019-07-09 23:38:28 190

原创 Dubbo源码通~服务暴露之远程暴露

Dubbo服务暴露~远程暴露远程暴露有两种情况:配置了注册中心的,需要将服务注册到注册中心未配置注册中心的,仅仅将服务按照远程协议暴露出来1、未配置注册中心(用于服务消费者直连服务提供者)具体步骤如下:创建Invoker的步骤和Injvm的方式相同;创建DelegateProviderMetaDataInvoker对象,持有Invoker和ServiceConfig对象;创建...

2019-07-09 23:35:41 400

原创 高并发模拟~多个线程同时发起请求

高并发模拟,多个线程同时发起请求两种方案:CyclicBarrier:栅栏,所有的线程必须同时到达栅栏位置,才能继续执行。CountDownLatch:计数器,一个线程或多个线程一直等待,直到其他线程执行的操作完成。1、CyclicBarrier适用在多线程相互等待,直到到达一个屏障点。并且CyclicBarrier是可重用的。下面的列子,设置线程阻塞200个,但发起线程400个...

2019-07-09 23:30:10 5769 1

原创 Dubbo源码通~服务暴露之本地暴露

Dubbo服务暴露~本地暴露功能:具体服务转换成Invoker,Invoker 转换成 Exporter1、逻辑简述Spring服务暴露入口:ServiceBean.onApplicationEvent() -> ServiceBean.export()Spring容器发布刷新事件,调用Dubbo的export()会进行服务暴露。Dubbo服务暴露入口:ServiceCo...

2019-07-04 22:33:31 479

原创 Java并发~原子操作类

JAVA~原子操作类Atomic原子操作类主要利用CAS (compare and swap) + volatile + native 方法来保证原子操作,从而避免 synchronized 的高开销。CAS:期望的值和原来的旧值比较,如果相同则操作,不同则什么也不做native unsafe方法:UnSafe 类的 objectFieldOffset() 方法是一个本地方法,用于获取”原...

2019-06-25 21:16:59 227

原创 Dubbo源码通~ExtensionLoader

ExtensionLoaderDubbo SPI官方文档1、 主要功能获取ExtensionLoader:getExtensionLoader(Class<?> type):每个扩展应一个ExtensionLoader扩展类集合:getExtensionName(Class<?> type)创建扩展类对象:getExtension(String name)扩...

2019-06-23 20:35:11 236

原创 JVM~Java 对象

JVM~Java 对象1、对象创建过程一个Java对象的创建过程往往包括 类初始化 和类实例化 两个阶段。类加载检查: 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。分配内存:在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所...

2019-06-16 23:14:25 190

原创 JVM~内存模型

JVM~内存模型注意:JDK1.8之前(不含1.8)和之后有些区别线程私有:程序计数器本地方法栈虚拟机栈线程共享堆方法区(运行时常量池,在JDK1.7及之后时已被迁移到堆中)直接内存(非运行时数据区的一部分)1、程序计数器1.1、功能描述记录当前指定程序的所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节...

2019-06-16 23:07:56 187

原创 JVM面试准备指南

JVM常见问题总结1、Java的四种引用强引用软引用弱引用虚引用2、JVM内存模型:Java的内存划分程序计数器Java虚拟机栈本地方法栈堆内存方法区字符常量池3、Java中对象在内存中的状态可达的/可触及的可恢复的不可达的4、判断对象是否已死的两种常用算法引用计数算法GCRoot根搜索算法5、JVM垃圾回收算法标记-清除复制:新生代的...

2019-06-16 23:04:37 321

原创 Dubbo源码通~SPI机制

SPI机制SPI概念:SPI全称为Service Provider Interface,是一种服务提供发现机制,将接口定义与实现解耦,提升程序的可扩展性。JDK的SPI本质:其本质是将接口实现类的全限定名配置在META-INF/services目录下的文件中中,由服务加载器ServiceLoader读取配置文件加载实现类,为在运行时,动态为接口加载实现类。Dubbo的SPI:Dubbo中...

2019-05-23 23:05:38 336

原创 MyBatis源码通~MyBatis-plus

Mybatis-plus核心类1、MybatisSqlSessionFactoryBean初始化Configuration(实际为MybatisConfiguration)MybatisXMLConfigBuilder:内部会调动Mybatis的XMLConfigBuilder初始化继承BaseMapper 的Mapper接口中的所有方法和对应的SqlSource(其中包含着执行...

2019-05-22 00:03:17 834

原创 MyBatis源码通~OGNL的应用

OGNL表达式(Object Graphic Navigation Language)一、原生OGNL表达式1、表达式ONGL表达式执行的所有操作都是根据表达式解析得到的。例如:“对象名.方法名”表示调用指定对象的指定方法;“@[类的完全限定名]@[静态方法或者静态字段]”表示调用指定类的静态方法或访问静态字段;OGNL表达式还可以完成变量赋值、操作集合等操作。2、 root对...

2019-05-21 23:59:39 1336 2

原创 MyBatis源码通~SqlNode

SqlNode每个 XML Node 会解析成对应的 SQL Node 对象。public interface SqlNode { //将各Sql片段合并到DynamicContext中,拼接称为完整的SQL boolean apply(DynamicContext context);}apply方法会根据传入的参数context,参数解析该SqlNode所记录的SQL片段,并调...

2019-05-21 23:47:22 1779

原创 MyBatis源码通~SqlSourceBuilder

SqlSourceBuilder两个作用:将"#{xxx}“替换为占位符”?"将占位符"?"对应的属性信息一起构建成到ParameterMapping中,以便在后续ParameterHandler真正地参数赋值。源码解析先分析从SqlNode 上下文中得到完成的originalSql,将其中的"#{xxx}“替换为占位符”?"同时为每个"#{xxx}"对应的属性构建对应的Para...

2019-05-21 23:44:52 917

原创 MyBatis源码通~插件Plugin原理

插件Interceptor拦截器实现:实现Interceptor接口,完成拦截器功能。被拦截对象标记:@Intercepts+@Signature注解定义被拦截对象以及对应需要拦截的方法。(用在拦截器上)拦截器链绑定:InterceptorChain封装了所有拦截器,并为被拦截对象创建代理或者其他处理逻辑。拦截:代理对象Plugin.invoke拦截,调用拦截器的intercept方法...

2019-05-20 20:24:55 356

原创 MyBatis源码通~映射文件解析

Mapper映射文件解析关联类:XMLMapperBuilderXMLStatementBuilderMappedStatement0、入口:XMLConfigBuilder.mapperElement(…)1、 XMLMapperBuilder两种配置方式:配置package,会遍历该包下所有的类指定mapper文件的路径resource/url/class解...

2019-05-20 00:05:39 459

原创 MyBatis源码通~缓存Cache

Cache缓存原理Mybatis提供一级缓存和二级缓存,一级缓存即缓存在内存中的,二级缓存则是利用第三方缓存工具来缓存数据。对应类包括BaseExecutor、CachingExecutor、Cache接口实现类。1、缓存实现类 implement CacheMybatis提供了非常多的缓存实现类,有最基本的PerpetualCache实现类、实现LRU策略的LruCache、可保证线程...

2019-05-18 21:44:57 464

原创 MyBatis源码通~Executor

SQL语句执行之Executor在SqlSession(DefaultSqlSession)中持有一个Executor,用于真正发起sql执行。Executor 主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作,它会将数据库相关操作委托给 StatementHandler完成。1、Executor接口方法读和写操作相关的方法事务相关的方法缓存相关的方法设置延迟加载的方...

2019-05-18 21:41:40 417 1

原创 MyBatis源码通~StatementHandler&ParameterHandler

StatementHandler&ParameterHandlerStatementHandler是连接Mybatis和JDBC之间的桥梁。在执行SQL之前,StatementHandler需要创建合适的 Statement 对象,然后通过ParameterHandler将参数值填充到 Statement 对象中,最后通过 Statement.execute()执行 SQL。SQL ...

2019-05-18 21:40:03 1096

原创 MyBatis源码通~SQL语句执行

SQL语句执行SQL执行过程包括但不限于 Mapper 接口代理类的生成、接口方法的解析、SQL 语句的解析、运行时参数的绑定、查询结果自动映射、延迟加载等。1、涉及技术点为 Mapper 接口生成实现类(其实对应的就是代理类)根据配置信息生成 SQL,并将运行时参数设置到 SQL 中一二级缓存的实现插件机制数据库连接的获取与管理查询结果的处理,以及延迟加载等2、主要涉及类或...

2019-05-18 21:37:01 2088

原创 MyBatis源码通~Mapper注册

Mapper接口注册/mapper节点解析完成后,通过命名空间绑定 mapper 接口,这样才能将映射文件中的 SQL 语句和 mapper 接口中的方法绑定在一起(记录在Configuration的MapperRegistry mapperRegistry),后续即可通过调用 mapper 接口方法执行与之对应的 SQL 语句。1、入口XMLMapperBuilder.bindMapper...

2019-05-18 21:28:25 304

原创 MyBatis源码通~SQL节点解析

XMLStatementBuilder解析SQL节点,将定义的SQL节点信息构建成MappedStatement对象。1、MappedStatement记录SQL节点信息,包含了很多属性,平时常见的属性有: private String id; private List<ResultMap> resultMaps; private boolean useCache;...

2019-05-18 21:23:53 1260

原创 MyBatis源码通~SqlSource

SqlSource构建动态SQL//XMLStatementBuilder.parseStatementNode()SqlSource sqlSource = langDriver.createSqlSource(configuration, context, parameterTypeClass);涉及类LanguageDriverRegistry+LanguageDriverX...

2019-05-18 21:20:25 1879

原创 MyBatis源码通~Config配置文件解析主线

Config文件解析涉及的主要类:BaseBuilderXMLConfigBuilderInterceptorObjectFactoryObjectWrapperFactoryReflectorFactoryTransactionFactoryDataSourceFactoryDataSourceEnvironmentXMLMapperBuilderCac...

2019-05-18 21:06:35 450

原创 为什么不再使用原生JDBC,而选择MyBatis之类的框架?

JDBC 中三种执行SQL的APIStatement:用于通用查询PreparedStatement:继承至Statement接口,用于执行参数化查询CallableStatement:继承至PreparedStatement接口,用于存储过程1、问题:Statement与PreparedStatement的区别以及如何避免SQL注入?Statement属于语句硬编码的方式来执行S...

2019-05-18 20:58:37 3219 2

原创 Mybatis源码导读

Mybatis源码导读一、架构划分Mybatis架构可分为三层:接口层、核心处理层、基础支持层。如下图所示:接口层:开发者与Mybatis的交互入口,开启配置初始化逻辑、构建会话Session等。核心处理层:各种配置文件初始化详细逻辑、SQL执行逻辑、结果解析等。基础支持层:缓存定义、公共工具包、事务管理、数据源等。二、源码阅读主线首次读源码,最好结合自身的使用经验来看,理清主线,...

2019-05-18 20:56:46 496

转载 话说javap命令(转载)

javap定义javap是 Java class文件分解器,可以反编译(即对javac编译的文件进行反编译),也可以查看java编译器生成的字节码。用于分解class文件。实例类class synchronizedTest { private static int i = 100; public static void main(String[] args) { test2();...

2019-01-09 22:47:08 695

原创 Spring 框架面试题总结(待续更新中...)

Spring、面试

2016-09-24 22:23:35 27299 2

原创 深入剖析ThreadLocal实现原理以及内存泄漏问题

ThreadLocal;2017京东校园招聘笔试

2016-09-06 17:19:22 37397 8

原创 try-catch-finally执行与返回值问题

try-catch-finally

2016-09-06 09:52:09 1592

原创 二维数组中查找

二维数组中的查找,剑指Offer

2016-08-26 12:52:59 633

原创 重建二叉树

剑指Offe,重建二叉树

2016-08-25 16:54:04 515

原创 Volley的使用以及源码分析(二)

Volley源码解析,看它内部到底怎么实现这么完美的功能?

2016-07-11 09:16:20 1505 1

原创 Volley的使用以及源码分析(一)

Volley的使用1.1 Volley简介Volley是Google I/O 2013发布的一款基于Android平台的网络框架,介绍一下他的使用和功能。

2016-07-11 09:13:48 588

人人都是架构师

《人人都是架构师:分布式系统架构落地与瓶颈突破》并没有过多渲染系统架构的理论知识,而是切切实实站在开发一线角度,为各位读者诠释了大型网站在架构演变过程中出现一系列技术难题时的解决方案。《人人都是架构师:分布式系统架构落地与瓶颈突破》首先从分布式服务案例开始介绍,重点为大家讲解了大规模服务化场景下企业应该如何实施服务治理;然后在大流量限流/消峰案例中,笔者为大家讲解了应该如何有效地对流量实施管制,避免大流量对系统产生较大冲击,确保核心业务的稳定运行;接着笔者为大家讲解了分布式配置管理服务;之后的几章,笔者不仅为大家讲解了秒杀、限时抢购场景下热点数据的读/写优化案例,还为大家讲解了数据库实施分库分表改造后所带来的一系列影响的解决方案。   《人人都是架构师:分布式系统架构落地与瓶颈突破》适用于任何对分布式系统架构感兴趣的架构师、开发人员以及运维人员。相信阅读《人人都是架构师:分布式系统架构落地与瓶颈突破》你将会有知其然和知其所以然的畅快感。 购买地址:https://item.jd.com/12180592.html

2017-12-14

commons-net-3.0.1.jar

方便开发人员进行FTP访问操作的封装包

2016-04-08

C#视频捕获(Opencv/Emgucv/Aforge)

本文主要详细介绍了使用C# 连接摄像头来进行视频捕获,内容包括opencvhe emgucv的性能比较等

2014-09-30

算法分析-最短路径文图求解

算法分析设计中常用的一种求解方法--最短路径算法,此文档详细讲解怎么求解最短路径问题的方法

2014-09-02

struts2 框架包

用于SSH2框架开发,SSH2框架开发包

2014-07-15

AxtiveX打包成CAB的软件

用于ActiveX控件打包成cab包,用于把.ocx的控件打包

2014-07-15

java连接mysql数据库的驱动包

该包用于java连接数据库时的驱动包,mysql提供的一个jdbc连接器。

2014-06-06

sitemesh用于Web页面布局、装饰

用于Web页面布局、装饰以及与现存的web应用整合的框架。

2014-06-06

一个Java的XML API,用于读取XML文件

一个Java的XML API,类似于jdom,用来读写XML文件的

2014-06-06

空空如也

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

TA关注的人

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