自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Just Do It!

努力到无能为力,拼搏到感动自己

  • 博客(520)
  • 资源 (2)
  • 论坛 (1)
  • 收藏
  • 关注

原创 Spring AOP 实现日志记录功能

最近项目中需要记录日志,跟大家想的一样 ,利用spring aop去实现,之前也参考了一些代码,自己实现了一套设计,供大家参考。之前看到网上很多是基于切面类Aspect去实现了,在切面类中定义before after around等逻辑以及要拦截等方法。本文利用注解实现了一套可以扩展等日志记录模块。1. 定义注解@Target(ElementType.METHOD)@Retention(Rete...

2018-02-12 12:00:36 20350 8

原创 数据统计分析中Treemap 应用实战(排序以及查找离指定key最近的key)

1. 应用场景按天统计的逻辑利用hashmap进行存储,另外一篇文章已经提到。现在的问题是查询的交易记录表,如果当天没有交易记录,流量余额就是0,这个是不对的,应该是最近一笔交易记录时的流量余额。1.必须有序2.能够查询最近的一个key此时hashmap不能满足要求,试试treemap,map有序的首选。查询了一下api,竟然支持,我利用的是lowerKey方法Map.Entry<K,V&g...

2018-01-30 19:14:02 1056

原创 软考高级信息系统项目管理师真题学习笔记

在CMMI连续式模型中,“技术解决方案”过程域属于()过程组。A过程管理 B工程 C项目管理 D 支持企业应用集成中,()超越了数据和系统,由一系列基于标准的、统一数据格式的工作流组成A应用集成 B功能集成 C过程集成 D表示集成功能api集成(应用集成,控制集成,方法集成)业务逻辑层上对应用系统进行集成表示集成把用户界面作为公共的集成点门户集成比如将内部信息系统的新闻等发布到互联网上过程集成超越了数据和系统,由一系列基于标准的,统一数据格式的工作流组成,必须...

2021-05-07 20:03:53 12

原创 软考高级信息系统项目管理师

1.PV、EV、AC、SPI、CPIPV:计划EV:挣值AC:实际成本进度偏差=EV-PV成本偏差-EV-AC 差值越大叶子正向SPI=EV/PV 越大越正向CPI=EV/AChttp://www.cnitpm.com/pm1/77566.html

2021-04-01 09:22:07 43

原创 OceanBase存储引擎核心-LSM Tree VS B-tree

1.什么是LSM TreeLSM Tree是一种数据结构,全称是Log Structure Merged Tree,顾名思义,基于日志结构的、可以合并的树。通过定义,我们发现三个关键点:基于日志结构 支持合并 树结构适用场景:写入量比较大的时候,为什么呢?因为LSM Tree是顺序写,避免IO寻址操作,节省时间。很多的其他NoSQL数据库核心也是这种数据结构,主要包括Cassandra,BigTable,RocksDB等。SSTablesLSM Tree持久化磁盘利用Sort.

2021-03-09 13:15:14 113

原创 我们为什么采用TiDB代替MySQL

背景我们的系统最初采用mysql作为后台数据库,随着数据量的增加,采用业界主流的分库分表方案。但是,随之而来的问题是,增加了应用的复杂度,不利于多维度的数据查询,性能将来也面临挑战。所以,我们考虑采用TiDB,因为Tidb是分布式数据库,支持二级索引,能够解决多维度查询问题,并且性能很强。本文,我会介绍我们为什么选择tidb和我们的业务场景,以及tidb如何解决我们的 问题。为什么是TiDB最初,我们采用mysql作为后端数据库,随着数据量剧增,我们采用分库分表的方案,但是分库分表的方案

2021-03-08 11:20:48 302 2

原创 彻底搞明白大数据量下Mysql的分页优化

1.背景大家都知道分页,那么我们这里肯定讨论的不是一般的情况,一般的情况我们利用limit分页,或者java代码内存分页都可以解决。如果数据量非常大,如何解决分页呢?比如下面的SQL。select * from user where type=0 order by id limit 1000000,100上面的sql需要查询100条数据,但是是从第100W条开始,mysql会需要遍历跳过前面的100W条,然后从100W条开始,获取100条记录返回,101,102,103......很明显,

2021-03-02 14:32:32 116 1

原创 彻底搞明白JDK的Future机制

什么是Future接口Future是java.util.concurrent.Future,是Java提供的接口,可以用来做异步执行的状态获取,它避免了异步任务在调用者那里阻塞等待,而是让调用者可以迅速得到一个Future对象,后续可以通过Future的方法来获取执行结果。一个实例代码如下:public class Test { public static void main(String[] args) throws ExecutionException, InterruptedEx

2021-03-01 17:22:35 260 7

原创 MySQL在实际应用中的规范(表定义、SQL、索引等)

统一规范存储引擎: 请统一使用innodb存储引擎,特殊的数据库引擎必须通过DBA的评审。字符集: 统一使用utf8字符集。这个要从应用程序、服务器、数据库的表、字段等全部统一起来。注意:MySQL中的utf8mb4字符集,才是真正的utf8,请用这个。作用范围:不要在MySQL存储大对象,比如图片、音乐等;不要用MySQL做Gis运算、全文检索;不使用存储过程、触发器、函数、外键,避免破坏数据库的性能和扩展性。使用上限:每个MySQL实例,数据库不要超过50个; 单数据库容量,...

2021-02-25 16:20:48 80

原创 彻底搞明白JDK 1.8 Lambda 表达式

Lambda表达式为什么背景Java是面向对象语言,所以java对行为的封装都是基于对象。什么意思,简单说,我们要定义个行为,那么需要一个函数,只有函数就行了吗?在java里面不行,因为java是面向对象的语言,所以我们需要定义对象,看下面的代码:public interface ActionListener {void actionPerformed(ActionEvent e);}最早接触过java swing编程的老程序员肯定不陌生,定义一个按钮触发时间,每当时间发生时,

2021-02-24 17:29:48 1645 5

原创 JDK 8 的optional类

什么是Optional类NPE(Null Pointer Exception)一直是我们最头疼的问题,也是最容易忽视的地方。NPE常是导致Java应用程序失败的最常见的原因。在日常研发工作中,经常会处理各种变量、集合,但在使用的过程中,往往要进行空判断,不然会出现NPE。Optional类实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional 类的引入很好的解决空指针异常。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。尽量避免在程序中直接调用Optiona

2021-02-23 16:56:36 8163 6

原创 分库分表之后如何通过非分片键操作

场景今天看到一个场景,比如一个表,表名字是award_use_risk,作用是记录奖品使用的记录,用作风控。表结构如下:这个表,只是分库,没有分表,db分成4个库,分别是db0-db4。我的第一反应是根据terminal no或者prize guid,具体看业务逻辑进行分表操作,这样增加、修改、删除都可以通过分片算法定位到哪个库。后来看到业务场景里面,需要定时删除前一天的风控数据,这种情况下,条件里面只有时间,没有分片键,如何定位每个库呢?梳理一下:根据prize guid进行分

2021-02-19 11:19:15 197

原创 Mybatis 中的$和#

1.区别#{}是预编译处理,${}是字符串替换。Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;Mybatis在处理${}时,就是把${}替换成变量的值。使用#{}可以有效的防止SQL注入,提高系统安全性。2.特殊情况在涉及表名的时候,必须用$符号,否则报错,如下:在order by 后面的字段名字也必须用$,如果用#,语法不报错,但是排序不生效,如下:排序不生效情况:...

2021-02-18 18:06:56 75 1

原创 log4j2 提升系统性能

什么是log4j2使用方式log4j2最好的地方就是异步日志模式,所以在这里我们就要进行升级改造.日志接口(slf4j) slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback) 日志实现(log4j、logback、log4j2) log4j是apache实现的一个开源日志组件 logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4..

2021-01-29 20:04:13 111

原创 JVM OOM日志分析

最近项目出现OOM,复习一下知识:首先,jvm增加参数,打印printGCdetails的日志 运行过程中,观察gc日志gc日志分析如下:2019-03-28T18:02:49.809+0800: 3.175: [GC (Allocation Failure) [ParaNew: 65536K->7435K(76288K)] 65536K->7451K(251392K), 0.0132004 secs] [Times: user=0.00 sys=0.02, real=0.0.

2021-01-21 20:50:34 190

原创 到底什么是JWT技术?

什么是JWT全称为JSON web token,是一个json对象,用于系统间身份验证。主要包括三部分组成:[header].[payload].[signature]上面三部分用.分割。我们来看每一部分的具体内容:header部分header部分用于描述签名的算法,也可以包括content type。是一个json对象,并且用BASE64处理。一个简单的header例子如下: { "typ":"JWT", "alg":"HS256" }typ字段告诉我们类

2021-01-12 17:20:29 223

原创 HTTP 1.0 vs HTTP 1.1 vs HTTP 2.0

HTTP 1.0 vs 1.1我们先看1.1相比于1.0做了哪些改进:支持代理和Host报文头:1.0没有要求host header,但是可以添加。1.1支持,便于路由和代理 支持持久化链接:在同一个Http链接上传输多个报文,1.0要求每个请求/响应必须创建一个新的链接 支持缓存:1.0仅仅支持If-Modified-Since header,1.1增加了entity trag和If-Unmodified-Since, If-Match, If-None-Match 等条件请求头 100状.

2021-01-11 16:52:15 105

原创 Java中的闭包

背景方法是一堆声明和业务逻辑代码,返回结果给调用者。方法也可以执行特定的逻辑,不返回任何职给调用者。方法能够复用代码,但是java里面的方法必须属于某个类。在看闭包之前,我们先复习一下lamada表达式。lamada表达式是函数式接口的实例。lamda表达式实现了唯一的抽象方法,也就是实现了函数式接口。如果函数式接口有多个抽象方法定义,就无法用lamada表达式实现多个方法,如下:函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单.

2021-01-07 17:29:12 21049 14

转载 关于Socket粘包、半包问题的解决方法

背景在 Java 语言中,传统的 Socket 编程分为两种实现方式,这两种实现方式也对应着两种不同的传输层协议:TCP 协议和 UDP 协议。但作为互联网中最常用的传输层协议 TCP,在使用时却会导致粘包和半包问题。TCP协议传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793[1]定义。TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信...

2021-01-06 11:12:51 147

原创 什么是单页面应用(SPA)和多页面应用(MPA)

背景最初我们的应用都是多页面应用,多页面应用就是每次客户单请求都返回一个新的页面。在互联网初期,这个问题并没有带来很差的用户体验,但是随着移动互联网的发展以及用户的体验,开发者开始考虑,为什么我们每次只更改了页面的一部分数据,却要更新整个页面呢?所有的反思促使了技术的进步。我们是不是可以第一次加载全部的页面内容,以后的更新,仅仅更新变化的数据,答案是可以的,这就是单页面应用SPA。下图是总体上比较单页面应用和多页面应用的流程:从上图可以看到:多页面应用:每次请求服务端都.

2021-01-05 15:13:37 212

原创 什么是PWA技术?

1.PWA背景为了说明白PWA,我们先看下面的两个概念:Native APP:需要用户下载安装,哪怕使用一次 需要升级,发布需要审核 开发成本相对较高Web网页:无需下载软件,直接浏览器浏览 手机进入不方便,需要记录地址或者收藏网址 没有网络就没有相应,不具备离线能力 无法推送通知,无法调用底层接口如何在二者之间寻找一个平衡呢?这就是PWA技术诞生的原因。2.什么是PWAPWA是一个渐进式web应用,随后加上App manifest和service worker实.

2020-12-18 17:38:20 335 2

原创 一次搞明白什么是MVC、MVP、MVVM?

1.前言三个框架的共同目的:为了将业务和视图的实现代码分离,从而使同一个程序可以使用不同的表现形式。MVC = Model-View-ControllerMVP = Model-View-PresenterMVVM = Model-View-ViewModel都有Model和View层。Model 为模型层,主要管理业务模型的数据和行为;View 为展示层,其职责就是管理用户界面。三个架构模式目的都是为了解耦 Model 和 View,主要不同点就在于三者实现解耦的方案不同。2.MV

2020-12-17 14:34:03 132

原创 Mysql覆盖索引与回表查询

1.什么是覆盖索引和回表查询首先,我们看看mysql的索引类型,mysql包括两种索引类型,聚集索引和非聚集索引:聚集索引(主键索引): 聚集索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据。 聚集索引的叶子节点称为数据页,聚集索引的这个特性决定了索引组织表中的数据也是索引的一部分。辅助索引(二级索引): 非主键索引,叶子节点=键值+书签。Innodb存储引擎的书签就是相应行数据的主键索引值。...

2020-12-10 17:20:03 230

原创 一张图分析架构中的缓存设计

今天从掘金网站看到一张高并发系统中的缓存设计图,如下:图片来源:缓存仅仅是使用Redis?看看高并发系统缓存体系架构(缓存体系架构一)(共6篇,后续不断更新) (juejin.cn)针对这张图,写一下我对缓存的思考:首先,分析一下系统中缓存的位置都有哪些,常见的缓存位置包括:1.浏览器页面缓存2.路由网关可以有缓存,进行限流等操作3.应用级别缓存,主要是业务数据,常见的redis、memorycache等4.持久层框架缓存,比如hibernate,mybatis都有缓存.

2020-12-03 21:33:18 202

原创 BitMap思想分析

1.什么是bitmap我们知道很多常见的存储结构,数组、链表、散列表等容器。那么BitMap是什么呢?我们先一起看看,再分析为什么需要bitmap。我们知道一个int占据4个字节,32个bit,比如我存储一个int数据,值为8,那么存储结构如下:00000000 00000000 00000000 00100000一共32位。如果我们申请一个int类型的数组,比如 new int[32],总计占用内存32*32bit,需要大量的内存空间,有没有可以优化的方法呢?现假如我们用i..

2020-11-25 11:37:58 157

转载 性能测试工具比较loadrunner、jmeter和locust

2020-10-10 11:45:30 266

转载 一文读懂什么是进程、线程、协程

目录进程 线程 任务调度 进程与线程的区别 多线程与多核 一对一模型 多对一模型 多对多模型 查看进程与线程 线程的生命周期 协程 协程的目的 协程的特点 协程的原理 协程和线程的比较 进程  我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。  进程是一个具有一定独立功能的程序在一个数.

2020-10-09 20:29:55 201

原创 如何利用微信登陆自己的网站

https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html理解如下:这个默认显示的二维码其实是个固定的链接地址 扫描之后,发送请求到微信开放平台,获取code 取得code之后,再加上之前在微信开放平台注册的appid和appsecret,一起发送请求获取access token 获取access token之后,就可以调用微信接口获取用户信息了,包括昵称、照片等等另.

2020-06-18 16:26:58 554

原创 Mac OS 安装Homebrew,亲测有效,网上其他的都不靠谱

今天需要按照homebrew,网上搜了一大堆,都过时了,亲自看了一下,共享给大家,免得浪费时间。第一步:按照xcode,这个简单,app store里面就有第二步: 利用网上的命令/usr/bin/ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)根本无法安装,一直报错443,我打开网址看看https://raw.githubusercontent.com/H..

2020-05-15 11:44:29 1010 5

原创 Service mesh 总结

1 我们现在怎么做的基于docker容器技术,我们K8s进行容器编排和调度管理。利用ingress controller进行负载均衡,主要是nginx。最早以前,我们自己实现的服务发现,是新增的服务去报活,发送消息,nginx接受到消息后更新配置文件,后来我们利用consul去实现服务发现。现在ingress controller帮我们实现了负载均衡和动态服务发现。负责监听pod资源变...

2020-02-12 10:40:06 396

原创 插入或者更新的并发情况处理

最近接收的代码经常出现并发问题。操作分为两步,第一步查询是否存在,如果不存在插入,存在更新。关键是查询判断和后面的插入或者更新不是原子操作,如果判断之后,其他线程进行了插入操作,抛出唯一key异常。 private void insertOrUpdateCaseExpand(RobotCaseUpdateDTO updateDTO, RobotAddPaymentDTO addPa...

2019-12-12 19:00:55 1080 1

原创 mysql 优化总结

1 in 操作,如果是字符串,必须加上单引号或者双引号

2019-10-12 11:01:26 238

原创 java面试宝典下部

1. ArrayBlockingQueue原理基于数组实现的、有界的(构造方法传入)阻塞队列 内部存储是数组,保证FIFO,阻塞利用notEmpty = lock.newCondition()实现 ReentrantLock 利用ReentrantLock加锁,保证线程安全。ReentrantLock的lock方法调用的是Sync.lock方法。Sync继承自A...

2019-08-02 15:27:09 1643

原创 java面试总结宝典上部

目录1.@postconstruct @init-method @afterPropertiesSet 顺序2. JVM常用命令3.Xss攻击4.CSRF5.CORS6. Mysql索引7. Mysql事务隔离级别8. Mysql调优注意事项8.1 慢查询9 Mysql 锁研究9.1 行锁:记录锁(Record Locks)9.2 间隙锁 [ Ga...

2019-05-29 15:57:03 1120

原创 架构师进阶之NIO以及Netty

NIO在讲解Netty之前,我们先复习一下基础,什么是NIO?网上很多文章,枯燥的讲解了什么是NIO,大家也看的一头雾水,下面我简单而不简洁的给大家解释一下NIO。首先我们要明白一点,什么时候用多线程?多线程不是适用于所有场景,一般适用于cpu密集型任务。然后比如redis,netty,nginx这些框架的应用场景明显都是IO密集型任务。所以多线程不是适用。举个例子,看看IO密集型场景的瓶...

2019-03-26 18:49:57 470

原创 架构师进阶之九Nginx架构分析

Nginx概述简单复习一下什么是nginx,nginx是一个反向代理服务器,不同于我们平时为了访问某个网址设置对代理,那个是正向代理。反向代理,请求访问反向代理地址,反向代码寻址目的地址然后返回给请求方,但是请求方并不知道请求对处理方。这样设计的好处在于:保护服务器隐私 实现负载均衡 集中控制请求 缓存资源,减少真是服务器的压力 节省ip资源 解决Ajax跨域问题 区分动态资源...

2019-03-24 16:51:21 275

原创 架构师进阶之Hibernate和Mybatis比较

Hibernate架构Mybatis架构分析架构Hibernate 是一个ORM工具,java对象是mapping到数据库到一条记录,对java对象对修改,hibernate会在适当对时机flush到数据库,可以commit事务,也可以调用flush方法。Mybatis仅仅是方法和sql语句到映射,不是ORM映射框架。 Mybatis具有一级缓存和二级缓存,默认一级缓...

2019-03-22 18:42:03 212

原创 架构师进阶之九Consul+Openresty作为api gateway

什么是API gateway确保客户端无法察觉应用程序是如何被拆分为多项微服务的。 确保客户端不受服务实例的位置的影响。 为每套客户端提供最优API。 降低请求/往返次数。举例来说,API网关能够确保客户端在单次往返中就从多项服务中检索出数据。请求数量更少意味着运行负担更低且用户体验更好。API网关对于移动应用而言是必不可少的。 将从客户端调用多项服务的逻辑转换为从API网关处调用...

2019-03-12 11:36:30 1635

原创 架构师进阶之八一些问题

目录1.jvm相关问题1.1 JVM内存结构1.2 JVM内存模型1.3 类加载机制1.4GC算法1.5 垃圾回收器1.6 调优命令1.5 JDK1.8在jvm有什么优化新增的 JVM 参数2.并发与锁2.1 countdownlatch和cyclic barrier2.2 Synchronize和lock1. Synchronized...

2019-03-10 14:37:37 422

原创 架构师进阶之七Mysql数据库原理题

Redo UndoMysql 非常重要的三个日志文件。我们一一分析讲解。Redo log:顾名思义,防止操作丢失,记录数据的变动。为了保证数据持久化到磁盘。redo log记录的是新变更的操作语句。数据修改写入data buffer之前,先持久化redo log到磁盘。Undo log: 顾名思义,撤销操作变更。回滚数据,为了保持数据的事务性。 undo log记录的是变更之前的s...

2019-03-08 11:36:15 215

Spring AMQP 集成完整代码,可运行

Spring AMQP实例 以及Spring 配置文件动态注入属性使用实战

2015-02-04

java排序算法

排序算法的java和c实现,有思路有代码,值得学习!!!

2012-04-15

hanruikai的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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