Just Do It!

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

Spring AOP 实现日志记录功能

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

2018-02-12 12:00:36

阅读数 9471

评论数 5

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

1. 应用场景按天统计的逻辑利用hashmap进行存储,另外一篇文章已经提到。现在的问题是查询的交易记录表,如果当天没有交易记录,流量余额就是0,这个是不对的,应该是最近一笔交易记录时的流量余额。1.必须有序2.能够查询最近的一个key此时hashmap不能满足要求,试试treemap,map有序...

2018-01-30 19:14:02

阅读数 188

评论数 0

架构师进阶之NIO以及Netty

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

2019-03-26 18:49:57

阅读数 117

评论数 0

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

Nginx概述 简单复习一下什么是nginx,nginx是一个反向代理服务器,不同于我们平时为了访问某个网址设置对代理,那个是正向代理。反向代理,请求访问反向代理地址,反向代码寻址目的地址然后返回给请求方,但是请求方并不知道请求对处理方。这样设计的好处在于: 保护服务器隐私 实现负载均衡 ...

2019-03-24 16:51:21

阅读数 31

评论数 0

架构师进阶之Hibernate和Mybatis比较

Hibernate架构 Mybatis架构 分析架构 Hibernate 是一个ORM工具,java对象是mapping到数据库到一条记录,对java对象对修改,hibernate会在适当对时机flush到数据库,可以commit事务,也可以调用flush方法。Mybatis仅仅...

2019-03-22 18:42:03

阅读数 41

评论数 0

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

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

2019-03-12 11:36:30

阅读数 94

评论数 0

架构师进阶之八一些问题

目录 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和cycli...

2019-03-10 14:37:37

阅读数 46

评论数 0

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

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

2019-03-08 11:36:15

阅读数 37

评论数 0

架构师进阶之六消息可靠性投递架构

消息可靠性投递背景 消息可靠性投递方案 两个重要监听: ConfirmCallback: 1. 判断消息是否到达exchange,exchange之后不负责。 2. 成功到达exchange并且持久化之后回调。或者没有到达exchange,持久化失败都会回调。ack为true或者fa...

2019-03-05 19:01:44

阅读数 44

评论数 0

架构师进阶之五常用的策略模式,太多if ese语句优化方案

引入 以前在编码中,遇到过下面的情况,根据设备类型,调用不同的Converter转换类。最初代码如下: if(type1){ convert1(); } else if(type2){ convert2(); } else if(type3){ convert3(); } ...

2019-02-27 13:27:27

阅读数 30

评论数 0

架构师进阶之四redis实现分布式锁redission

1. setNX实现方式 一般的setNX实现方式,在设置key之后,需要设置超时时间,防止死锁。另外设置key和设置超时必须是一个原子操作。 这种方式缺点: 1.1 Fail over  因为是把key写到master 节点,无论是主从结构还是cluster集群模式,存在failover...

2019-02-25 16:33:08

阅读数 106

评论数 0

架构师进阶之三Zookeeper,Mesos以及Marathon

1.Mesos Apache Mesos是一个集群管理器,可跨分布式应用程序或框架提供有效的资源隔离和共享。它位于应用程序层和操作系统之间,可以更加轻松地在大规模集群环境中更有效地部署和管理应用程序。它可以在动态共享节点池上运行许多应用程序 Apache Mesos将CPU,内存,存储和其他计算...

2019-02-20 18:09:36

阅读数 120

评论数 0

架构师进阶之二函数式编程和面向对象编程

什么是函数式编程 简单来说:面向对象编程各个模块之间相互依赖,好比流水线生产模式,互相依赖状态,共享数据等等。而FP编程则互相独立,没有任何依赖。 因此:FP编程,模块化程度更高,更容易测试,代码也更简洁,比如下面数组遍历的例子。因为模块化程度高,所以FP编程往往是声明式编程,调用现有的函数,...

2019-02-20 11:47:11

阅读数 50

评论数 0

架构师进阶之一消息中间件RabbitMQ和Kafka比较

为什么需要消息中间件 异步任务处理 系统解构,微服务直接解耦通信的一种方式,不关心系统语言编码实现 流量削峰 常用的MQ技术 1. RabbitMQ 1. 1 基于Erlang语言开发。 Erlang是一种面向并发(Concurrency Oriented),面向消息(Message ...

2019-02-15 12:11:58

阅读数 87

评论数 0

LeetCode总结二维矩阵问题

二维矩阵旋转90度 题目:https://leetcode.com/problems/rotate-image/ 武器:分解步骤 顺时针旋转90度: 交换对称元素,例子中以1 5 9 为轴交换,然后反转每一行 逆时针旋转90度: 交换对称元素,例子中以1 5 9 为轴交换,然后反转每一...

2019-01-24 17:48:16

阅读数 135

评论数 0

LeetCode总结动态规划类题目

爬楼梯 题目:https://leetcode.com/problems/climbing-stairs/ 武器: 分解问题,从1,2,3开始,写出转换方程dp[i]=dp[i-1]+dp[i-2]; 结果:一次通过 最大连续子数组和 题目:https://leetcode.com/pr...

2019-01-18 15:42:45

阅读数 51

评论数 0

LeetCode总结数学转换类题目

罗马字符转换为数字 题目:https://leetcode.com/problems/roman-to-integer/ 武器:抓住关键点,L,X,C三种减法的情况,其他都为加法 结果:一次通过 Excel列转换为数字 题目:https://leetcode.com/problems/e...

2019-01-17 14:15:01

阅读数 88

评论数 0

一片文章说明白分布式系统NRW,Paxos,Raft

引言 今天看到一篇文章提高分布式系统中service宕机的问题,其中作者提到了分布式系统中的一个基本问题。假如有两个service A和B,每个service当然有很多instance。如果A调用B进行数据更新操作,B在接受后未处理前宕机了,怎么办?数据丢失了怎么办? 我们从系统架构的演进来梳...

2019-01-17 11:39:42

阅读数 67

评论数 0

LeetCode总结单链表相关题目

反转单链表 题目:https://leetcode.com/problems/reverse-linked-list/ 武器:反转时候记录pre,nextTmp处理 结果:一次通过 合并两个有序链表 题目:https://leetcode.com/problems/merge-two-s...

2019-01-16 17:47:50

阅读数 41

评论数 0

LeetCode总结整型数组类题目

寻找唯一的单个数 题目:https://leetcode.com/problems/single-number/ 武器:利用map计算次数,线性时间。但是需要O(n)存储空间 结果:未通过 新武器:XOR操作 异或的运算方法是一个二进制运算: 1^1=0 0^0=0 1^0=1 ...

2019-01-16 16:52:47

阅读数 76

评论数 0

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