自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 (记)路由匹配优化方案测试

(记)路由匹配优化方案测试偶然听到xxx同事接到一个网关性能优化任务【路由匹配优化】,正好在复习数据结构这块的知识,于是研究了下,如果是我,我怎么做这块的优化?思考既然是网关性能优化,无疑是为了提高网关性能,在网关进行请求代理的时候,就需要经过路由匹配,然后下一步请求。那么能否通过降低路由匹配的耗时来提高网关的处理性能?于是分析路由匹配的耗时主要在哪里。以下为目前路由匹配的伪代码: // 这里用了spring的matcher来进行路径匹配 private AntPathMatcher m

2020-08-20 16:38:15 547

原创 (记)Excel导出优化之路

(记)Excel导出优化之路经过了几个月的迭代,项目上的导出组件逐渐完善,想以本篇文章来记录项目上的导出组件的优化过程。Excel导出组件是一个注解驱动的spring-boot-starter导出组件,利用Spring AOP拦截controller中的GET方法的查询API,并通过注解声明在DTO上来表示数据与excel中的映射关系和单元格属性,依赖于Apache POI完成excel数据填充的工作。与easyexcel比较easyexcel提供了非常简单方便的导出api,支持注解驱动的导出

2020-08-25 16:35:52 605

原创 微服务系列(六)探究Spring Cloud服务调用

微服务系列(六)探究Spring Cloud服务调用大纲分布式架构的“骨架”基于http协议的通讯模式RestTemplate与Feign新的选择WebClient从Spring源码中我看到了什么分布式架构的“骨架”分布式架构是由一个个组件组装而成,各司其职,对外提供服务。而将他们联系起来的则是网络,组件之间的通讯方式则是这个分布式架构的“骨架”。如果没有“骨架”,每个组...

2019-07-30 20:27:21 422

原创 微服务系列(五)解读分布式锁

微服务系列(五)解读分布式锁首先,锁是一个熟悉的字眼,在单机应用中,我们常常使用J.U.C等并发工具类来控制多线程读写问题,也会使用ReentrantLock/ReentrantReadWriteLock或是synchronized关键字来给方法或代码块加锁,从而达到同样的目的。我理解的锁说到锁,我能想到这样几个关键字:临界区、共享变量、并发问题从抽象的角度去考虑,锁就是一个能给什么东...

2019-05-31 11:14:06 1118

原创 微服务系列(四)单点登陆问题

微服务系列(四)单点登陆问题分布式系统中单点登陆问题是一个非常常见的问题,开发者经常需要面临不同系统或模块需要不同的认证,而某些场景下,用户只需要一次登陆,即可访问跨模块、系统的服务。ps.分享基于spring boot2.0.x、spring cloud Finchley.SR2一次Oauth 2.0的使用经历由于项目采用了Spring Cloud全家桶来构建底层服务,Spring框...

2019-05-31 11:13:57 914

原创 微服务系列(三)如何选择配置中心

微服务系列(三)如何选择配置中心前面通过源码分析过了注册中心的实现,本文继续思考如何选择【微服务基础设施组件:配置中心】对于注册中心,要对于项目特性,并结合注册中心的功能和实现特性来决定匹配度,那么对于配置中心,我们最应该了解的则是其配置信息的组织模式(决定系统的扩展性、可维护性等)、数据的存储方式和通信方式(决定性能、响应速度)、以及组件之间的契合度(笔者认为,如果两个组件之间是完全解耦的...

2019-05-31 11:13:48 679

原创 微服务系列(二)(5) Nacos源码分析

微服务系列(二)(5) Nacos源码分析Nacos (official site: http://nacos.io) is an easy-to-use platform designed for dynamic service discovery and configuration and service management. It helps you to build cloud na...

2019-05-31 11:13:38 13253 1

原创 微服务系列(二)(4) ZooKeeper源码分析-part-3

微服务系列(二)(4) ZooKeeper源码分析-part-3本文将继续探究以下内容:Zookeeper Client发送命令链路追踪,Zookeeper的事务请求原理,Watcher监听原理使用ZooKeeper Client的小伙伴应该熟悉这个类org.apache.zookeeper.ZooKeeper,可能有人使用了ZkClient或curatorFramework,而这两种方便...

2019-05-31 11:13:27 326

原创 微服务系列(二)(3) ZooKeeper源码分析-part-2

微服务系列(二)(3) ZooKeeper源码分析-part-2前文跟踪源码分析了ZooKeeper Server的初始化过程,通讯原理及选举机制,本文将继续进入源码,探究ZooKeeper的存储机制。通过前文的链路追踪,可以知道ZooKeeper的存储核心类是org.apache.zookeeper.server.ZKDatabase下面就开始分析解读它的实现,它在内存中保存了怎样的数...

2019-05-31 11:13:20 281

原创 微服务系列(二)(2) ZooKeeper源码分析-part-1

微服务系列(二)(2) ZooKeeper源码分析-part-1本节开始进行ZooKeeper的源码分析,针对Zookeeper Server的初始化过程,通讯原理及选举机制做源码层面上的介绍作为ZooKeeper的使用者,应该知道如何部署和启动Zookeeper吧看源码的入口就从这里作为出发点,找到zkServer.sh或者zkServer.cmd截取zkServer.sh里的一段重...

2019-05-31 11:13:12 386 1

原创 微服务系列(二)(1) Eureka源码分析

微服务系列(二)(1) Eureka源码分析关于eureka的使用,就不做介绍了,不熟悉的可以参考官方文档引入依赖,修改好配置文件,在主类上加上注解@EnableEurekaServer,启动服务,一个简单的eureka搭建好了。先看看@EnableEurekaServer@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIM...

2019-05-31 11:13:01 446

原创 微服务系列(二)探究不同注册中心的底层原理

微服务系列(二)探究不同注册中心的底层原理市面上常见的注册中心有 eureka、zookeeper、consul,又由于笔者有关注目前还在0.8.0版本的nacos,本文就针对这四个注册中心,从底层实现来探讨它们的适用场景,并尝试寻找一些可扩展的入口,也便于开发者在其上进行改造和定制化。前言在介绍四种开源项目之前,先简单认识一下注册中心。我的简单理解:注册中心提供服务注册和服务发现...

2019-05-31 11:12:50 961

原创 微服务系列(一)聊聊服务网关

微服务系列(一)聊聊服务网关前几年随着分布式架构的演变,微服务开始兴起,自然也产生了一系列支持微服务的框架,例如本文要聊到的Spring Cloud。Spring 相信做Java的小伙伴们已经耳熟能详了,也正是应该这个Spring生态获得广大的关注,在Spring之上开发的新兴框架如Spring Boot、Spring Cloud也很快让大家熟知。下面主要针对Spring Cloud聊聊它...

2019-05-31 11:12:12 5163 1

原创 【分布式事务】Spring Cloud集成fescar的示例demo

spring-cloud-fescarspring cloud集成fescar的demo工程准备工作阅读官方文档Quick Start,并成功启动fescar-server传送门初始化demo数据库工程路径下fescar_demo.sql文件测试效果修改demo工程中的配置文件account-service:用户账户服务,仅提供用户账户的扣减接口,端口:11...

2019-03-12 20:10:46 2928

原创 Dubbo系列(四)源码分析之服务调用

Dubbo系列(四)源码分析之服务调用前文介绍了Dubbo中服务暴露的过程,本文继续介绍服务调用的过程,让一次服务调用过程连接起来理解。如果读者是第一次阅读本文且对Dubbo SPI没有了解,可以先阅读《Dubbo系列(二)源码分析之SPI机制》、《Dubbo系列(三)源码分析之服务暴露》。ps.本文只考虑整合Zookeeper的情况下的默认配置调用过程读取配置信息这里就不赘述了, ...

2019-01-15 09:47:46 193

原创 Dubbo系列(三)源码分析之服务暴露

Dubbo系列(三)源码分析之服务暴露前文介绍了Dubbo SPI机制,相信读者应该具备Dubbo中SPI实现类跟踪的能> 力,那么在本文中将会直接跳过SPI分析的过程。如果读者是第一次阅读本文且对Dubbo SPI没有了解,可以先阅读《Dubbo系列(二)源码分析之SPI机制》读取配置信息依赖Spring容器根据spring官方文档给的规范进行扩展,增加Dubbo命名标签,如...

2019-01-15 09:45:44 453

原创 Dubbo系列(二)源码分析之SPI机制

Dubbo系列(二)源码分析之SPI机制在阅读Dubbo源码时,常常看到ExtensionLoader.getExtensionLoader(*.class).getAdaptiveExtension();ExtensionLoader.getExtensionLoader(*.class).getExtension(“name”);那么需要深入了解dubbo,了解SPI源码是必不可少...

2019-01-15 09:43:58 332

原创 Dubbo系列(一)dubbo介绍和入门

Dubbo系列(一)dubbo介绍和入门学习Dubbo 之前,先了解一下这几个问题:Dubbo是什么?互联网发展的背景Dubbo介绍Dubbo的优势在哪里?了解了dubbo之后,让我们从零搭建一个简单的dubbo项目。Dubbo是什么官网介绍Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核...

2019-01-15 09:42:39 3031

原创 【缓存一致性】关于数据库与缓存的一致性问题的分析和解决方案

想起遇到过的缓存与数据库的问题和一些思考,在这里做一些系统性的分析和总结,讨论一下对数据库与缓存的一致性问题及解决方案。1,先更新数据库再更新缓存可能出现的问题:a). A更新数据库(或发现缓存失效而查询数据库)b). B更新数据库c). B更新缓存d). A更新缓存(覆盖了B的缓存)出现数据不一致的问题,且问题发生可能性较小。(如果A更新数据库较耗时)另外,当更新数据库成...

2018-11-17 19:16:12 800 1

原创 【java中间件】自己动手实现一个属于自己的mydubbo

摘要最近在学习zookeeper的选举机制和使用、java如何调用及应用场景,dubbo理所应当的进入了我的视野,作为阿里开源的强大中间件dubbo,我们也应该了解其基本原理和应用场景。 RPC,远程服务调用,dubbo作为服务调用的中间人,为服务消费者和服务提供者来提供服务,首先,要知道dubbo的主要功能:提供服务注册和服务发现的功能(依赖zookeeper)服务间的通讯实现服...

2018-09-05 19:52:27 782

原创 【java基础】Integer的自动装箱拆箱与缓存机制

import java.lang.reflect.Field;/** * @author XCXCXCXCX * @date 2018/8/31 * @comments */public class Test { public static void main(String[] args) throws IllegalAccessException, NoSuchFieldE...

2018-08-31 17:08:35 515

原创 【java反射/注解】简单的反射与注解实践

简单的反射与注解实践反射的使用指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法.这种动态获取信息,以及动态调用对象方法的功能叫java语言的反射机制。ps.JCA.Java Security能控制反射访问范围反射常用方法getClass()getClassLoader()构造器(constructor)...

2018-08-04 12:22:47 250

原创 【java锁】探索AQS的实现原理和源码阅读

    先谈几个大家熟悉的,java.util.concurrent包中的ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier,这几个类都是通过AQS来实现的,先学习了AQS再回头看看这几个类。AQS是什么?它的数据结构是怎样的?AQS全名AbstractQueuedSynchronizer,翻译过来是抽象队列式同步器,队列、同步,在我们学习锁的...

2018-04-23 16:42:00 404

原创 【java集合】jdk 1.8 HashTable和ConcurrentHashMap的源码浅析

    通过阅读源码可以看到,HashTable相对以前版本来说变化很小,而ConcurrentHashMap在jdk1.8的实现方式上有很大的变化,过去的ConcurrentHashMap是采用分段锁的segment来对一小段数组头节点进行加锁然后put、remove操作,而jdk1.8中的ConcurrentHashMap再次缩小了锁的粒度,结合了volatile,在每次put、remove操...

2018-04-21 23:10:30 320

原创 【java集合】jdk1.8 HashMap源码浅析

    花了一些时间阅读了jdk1.8中的HashMap、LinkedHashMap、TreeMap和WeakHashMap的源码,整理一下学习到的东西,这篇博客主要写HashMap的实现源码,并次要总结一下另外三个map实现类的实现原理和特性。HashMap采用的数据结构首先介绍一个重要的参数TREEIFY_THRESHOLD,看一下官方备注。/** * The bin count t...

2018-04-20 18:13:19 225

原创 商品秒杀系统-支付模块的开发【https://github.com/XCXCXCXCX/KillSystem】

一、沙箱环境配置我使用的是测试沙箱环境,使用沙箱测试版的支付宝进行测试,如果需要上线部署,要申请接入哦APPID阿里提供的,后面流程中需要把这个APPID复制粘贴到项目配置中支付宝网关直接使用图中测试环境的网关地址RSA2/RSA密钥这里我使用的是RSA2密钥,需要配置RSA2该栏目,先是生成RSA2的公钥密钥对(在阿里开发文档中有提供生成密钥对的工具,下载后按照文档生成密钥对并进行后续配置,这里...

2018-04-14 18:28:12 4546

原创 商品秒杀系统-秒杀模块的开发【https://github.com/XCXCXCXCX/KillSystem】

在开始设计秒杀模块的时候由于对一些知识了解还不够,设计的比较复杂,想把秒杀思路改变的心路历程都记录下来。一、秒杀思路变形记最初思路:    三层秒杀    1.在tomcat维护管理每个商品库存的线程,商品库存为0后撤销线程    2.在redis记录库存量和订单信息    3.在mysql记录库存量和订单信息每次发起抢购请求,在redis写入订单信息并且在tomcat...

2018-04-12 16:12:38 4849 5

原创 商品秒杀系统-管理员商品管理模块的开发【https://github.com/XCXCXCXCX/KillSystem】

        前面介绍了环境部署和项目所使用的相关技术,基于ssm框架开发,编码分为前台页面和后台逻辑两部分,由于主要的学习方向是后台方向的,前台页面的代码可能会比较冗余,因为是大量复用模板代码,为了方便阅读,只描述重要功能的开发。前台页面的开发一.先上效果图然后介绍一下功能    1.忽略Errors栏目,这里没有开发该功能,预先是为了统计系统错误情况    2.网页上方是一个从服务器获取到的...

2018-04-11 21:46:57 1166

原创 druid连接池、redis作为缓存、整合alipay二维码支付实现的商品秒杀系统

# KillSystem商品秒杀系统gitHub上地址:            https://github.com/XCXCXCXCX/KillSystem一、项目简介网站管理员能上架商品,设置商品信息及图片介绍,需要设置商品秒杀的活动时间,供用户在规定的时间内进行抢购网站管理员能管理用户订单信息用户需要注册后登陆进入系统,查看管理员提供的商品秒杀列表,在规定时间内选择所需抢购的商品进行抢购,抢...

2018-04-09 16:15:06 1372

原创 ODI配置使用日志记录streams实现表同步

一、配置数据库1、修改需要发布表的数据库服务器系统变量由于在ODI的操作中会帮我们设置数据库的参数(如java_pool、streams_pool_size)这里只需要设置补充和强制记录模式,实际在操作流程中ODI会帮我们设置特定表的日志模式,不过为了保险还有对更多表的操作有效,还是自己设置一下。查看归档日志模式archive log list修改归档日志模式alter d

2017-12-07 21:55:51 1066

原创 校招编程题:求最优解题方案

题目:一共有n道题,每道题有对应的分值grade和需要消耗的时间time,求解在规定的时间内,能得到最大的分数。解题思路:使用动态规划,求解最大分数。如果需要求解具体做题步骤,则需要把最大分数进行回溯,逐步找到做过的题。这里由于题目只要求了求出最大分数,所以只编程实现了求解最大分数的目的。代码如下:package test;public class DynamicPr

2017-12-07 21:44:00 1022

原创 对五种排序的实现【java】

冒泡排序:package sort;//冒泡public class BubbleSort { private int[] a; public BubbleSort(int[] a) { // TODO Auto-generated constructor stub this.a = a; } //把小的冒泡到前面,即从小到大 public void sort() {

2017-12-07 21:38:28 212

原创 oracle cdc机制异步模式hotlog学习笔记

大致流程:系统用户配置:创建用户、给予相应权限、设置数据库模式发布者配置:准备改变表、创建改变集、创建改变表、激活改变集、将改变表授权给订阅者订阅者配置:创建订阅集、创建订阅表、激活订阅表、更新或情况扩展窗口、查询扩展窗口上的数据(可查询增量数据)sys用户操作:shutdown immediate;startup mount;alter database

2017-11-29 20:02:10 1185

原创 java高级特性之泛型

看了一些关于泛型的文章,写一下自己对于泛型的理解。。 当我们知道了泛型可以用来干什么之后就自然而然会明白泛型是什么了,即使它是一个非常抽象的东西。 泛型,泛,大致的,就是你知道它是一个黑盒子里面装的东西,但是你不知道它具体是什么,它可能是炸弹,可能是糖果,或者是iphone X。 那泛型可以用来干什么呢,打个比方,老板让你送一个快递盒子,你的快递盒子里面装的东西你并不知道,老板也不会告诉你它是

2017-10-16 17:14:06 428 2

原创 学习github的使用

git init 在workplace创建空仓库git add 把workplace的文件提交到stagegit commit 把stage的文件提交到Local Repogit checkout -- 把Local Repo收到的上一次的提交撤回(让这个文件回到最近一次git commit或git add时的状态。)git reset 撤销更新(更新指文件的改变)gi

2017-10-13 21:41:51 226

原创 【复习】数据库知识

一、SQL简单语法1.集合运算union、union all(保留重复)intersect、intersect all(保留重复)except、except all(保留重复)2.空值is null= null(返回unknown)3.聚集函数avg()、max()、min()、sum()、count() count()会计算null列,其他

2017-09-12 20:43:27 252

原创 认识tcp/ip协议中的http协议

一、什么是tcp/iptcp/ip协议是一个协议集合,按照层次分为链路层、网络层、传输层、应用层四个层次。(与tcp/ip协议并列的还有OSI网络框架模型---开放式系统互连参考模型,分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层七个层次)1.链路层:用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动和网络适配器,及光纤等物理可见的部分。硬件上的范

2017-09-12 11:04:06 7791

转载 Android基本架构

Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86、MAC等体系结构的机器上同样可以运行。android

2017-09-11 16:48:16 347

转载 c/s与b/s的优缺点

一、c/s架构是比较早的软件架构,主要应用于局域网。出现过两层c/s和三层c/s,一般比较流行两层c/s。C/S架构软件(即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机系统上结合了表示业务逻辑,第二层是通过网络结合了数据库服务器。简单的说就是第一层是用户表示层,第二层是数据库层。客户端和服务器直接相连,这两个组成部分都承担着重要的角色。客户端包含一个或多个在

2017-09-11 16:24:22 2715

转载 AndroidStudio目录结构

除app文件夹的目录介绍文件(夹)名用途.gradleGradle编译系统,版本由wrapper指定.ideaAndroid Studio IDE所需要的文件build代码编译后生成的文件存放的位置gradlewrapper的jar和配置文件所在的位置

2017-09-11 16:09:44 240

空空如也

空空如也

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

TA关注的人

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