自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《极客时间-架构实战案例解析》读书笔记

而在中台里,这些微服务升级为了商品中心、订单中心,每个中心更强调体系化,包括更好的业务通用能力,更好的系统运营能力(如监控、稳定性、性能的强化),更好的业务运营能力(比如商品中心自带配套的商品管理后台)。对现有系统的改造,服务的边界划分主要是从圈表入手的,而不是从一个服务应该有哪些功能入手的,这一点和新服务设计是有所不同的。另一方面,如果从表入手,构造的服务和表是对应的,服务包含的是完整的表,不会产生一个表的一部分字段属于库存服务,而另一部分字段属于别的服务的情况,避免表字段的拆分带来额外的复杂性。

2023-03-27 20:24:55 614

原创 《极客时间-技术管理实战》读书笔记

SMART原则:Specific(明确性,目标是明确具体的吗)、Measurable(可衡量性,目标的实现是否可测)、Attainable(可达性,目标描述是可达的吗)、Relevant(相关性,目标和总目标是否相关)、Time-bound(时限性,目标是否有时间限制)收集信息:向上沟通(来自上级的期待和要求)、向下沟通(团队对业务的看法和理解,对未来发展的期待)、左看右看(职能定位的边界,和兄弟团队无缝对接但不争抢)、你的理解(个人对业务的理解、对领域的理解、对团队的期待、对自己的期待)

2023-03-27 20:23:27 597

原创 Redis内存预估

参考博客Redis 相关数据结构的容量评估_程序员掉头发的博客-CSDN博客_redis容量评估的计算方式,写了个python脚本进行计算。def calculateBucketCount(cap): n = cap - 1; n |= n >> 1; n |= n >> 2; n |= n >> 4; n |= n >> 8; n |= n >> 16; return 1 if n &

2022-04-19 19:53:32 1687

原创 《极客时间-Redis核心技术与实战》学习笔记

数据结构Redis数据类型和底层数据结构的对应关系:String -> 简单动态字符串,List -> 双向链表、压缩列表,Hash -> 压缩列表、哈希表,Sorted Set -> 压缩列表、跳表,Set -> 哈希表、整数数组。 哈希表rehash高效操作:默认使用两个全局哈希表,默认使用哈希表1,rehash时,给哈希表2分配更大的空间,把哈希表1的数据重新映射到哈希表2,释放哈希表1的空间。重新映射时,无法处理客户端请求,会造成线程阻塞,采用“渐进式rehash

2021-02-18 21:18:20 1688 2

原创 《设计模式之美》学习总结

设计原则与思想面向对象面向对象的四大特性:抽象、封装、继承、多态。面向对象分析(OOA):需求分析。面向对象设计(OOD):是代码层面的设计,输出的设计结果是类。划分职责并识别出有哪些类、定义类及其属性和方法、定义类之间的交互关系、组装类并提供执行入口。面向对象编程(OOP:将设计的结果翻译成代码的过程。基于接口而非实现的设计思想、多用组合少用继承的设计思想.设计原则SOLID原则SRP单一职责原则1.如何理解单一职责原则(SRP)?一个类只负责完成一个职责或者功能。不要

2021-02-13 20:36:12 406

原创 《可伸缩架构:面向增长应用的高可用》读书笔记

可靠性:系统是否具备无差错地执行预期操作的能力。一般指一个系统的质量。 可用性:为了执行这些操作,系统当前可运行的能力。一般指系统在其能力范围内执行任务的能力。 导致低可用性的原因:资源耗尽、预期之外的压力变化、流动行为的增加、外部依赖、技术债务。 提高可用性的措施: 时刻考虑应对故障 设计、依赖、用户 时刻考虑如何伸缩 缓和风险 风险管理 监控可用性 服务器..

2021-01-15 15:39:04 176 1

原创 《DDD实战课-欧创新》学习笔记

领域、子域、核心域、通用域和支撑域 DDD 的领域就是这个边界内要解决的业务问题域。 领域可以进一步划分为子领域。我们把划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或更小的业务范围。 领域建模和微服务建设的过程和方法基本类似,其核心思想就是将问题域逐步分解,降低业务理解和系统实现的复杂度。 在领域不断划分的过程中,领域会细分为不同的子域,子域可以根据自身重要性和功能属性划分为三类子域,它们分别是:核心域、通用域和支撑域。 决定产品和公司核心竞争力的

2020-11-25 15:57:44 1649

原创 自己动手实现一个阻塞队列--ReentrantLock使用小结

背景前几天看到一道面试题:实现一个阻塞队列,就萌生了动手操作一把的想法。看着挺简单的,思路也和清晰,就是用ReentantLock和Condition来实现,但在实际操作过程中还是遇到了问题,总结一下,仅供参考。阻塞队列第一版先附上第一版的代码。内部存储,为了方便就使用LinkedList来实现了。import java.util.LinkedList;import java.u...

2019-12-12 15:36:31 616

原创 Docker初学者实战

集合网上各个资料,整理的一些步骤,个人记录,备忘!安装Dockercentos7安装docker参考https://www.runoob.com/docker/centos-docker-install.html,按照以下步骤进行安装移除旧的版本yum remove docker \ docker-client \ docker-client-latest \ ...

2019-07-27 17:08:47 270

原创 阿里巴巴Canal数据同步实战

引言随着业务的发展,我们需要对数据库中的数据进行汇总、统计等操作,通常我们的做法是:写一个定时任务,定时读取数据,再进行汇总、统计等。但随着数据量的越来越来,查询的成本高了很多。那么有什么好的方法来实现呢?阿里巴巴开源的Canal就派上用场了。Canal的定位是:基于数据库增量日志解析,提供增量数据订阅&消费,也就是说,我们可以通过Canal做到实时获取数据库数据变更,以此再进行数据汇总...

2019-02-20 15:35:48 5717 3

原创 Redis Lua脚本

     Lua脚本,是一种轻量级的脚本语言。设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua脚本的应用也很多,比如Nginx+Lua实现的OpenResty,Redis+Lua配合使用(Redisson中大量使用了Lua脚本),使用Lua脚本开发的各种插件(我们公司灰度环境的规则匹配)等等。而我们这次在设计用户领取限制时,使用了Redis+Lua来实现。    Lua...

2018-07-03 13:58:28 1734

原创 Maven项目打包为可执行Jar包

maven pom.xml配置文件如下:<build> <finalName>jar-test</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</gro...

2018-06-12 15:52:30 322

原创 Redis客户端Redisson的简单应用

    Redisson是在基于NIO的Netty框架之上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类。简单来说,我们通过Redisson能够更方便的操作redis。具体介绍可以参考https://github.com/redisson/redisson。1、引入依赖   3.7.0 支持JDK1.8, 1...

2018-05-28 11:17:44 8783

原创 电商中用户余额/积分以及库存的设计

在电商中,我们总会遇到用户余额/积分和库存的问题,总是怕会出现用户余额/积分用超或商品超卖的情况。这次就来了解一下怎么设计用户余额/积分,怎么来处理库存问题。一、用户余额/积分设计1、概述对于用户余额/积分,一方面我们需要知道用户的总积分有多少(这部分是可用积分),另一方面我还还需要知道用户的积分变动记录(积分的增加和减少)。同时,在电商中,关于积分的操作不仅仅都是同步的,也就是我们可以直接增加或扣

2017-09-15 11:15:19 11338 7

原创 MyBatis Generator实战

MyBatis Generator (MBG) 是一个Mybatis的代码生成器 MyBatis 和 iBATIS. 他可以生成Mybatis各个版本的代码,和iBATIS 2.2.0版本以后的代码。 他可以内省数据库的表(或多个表)然后生成可以用来访问(多个)表的基础对象。 这样和数据库表进行交互时不需要创建对象和配置文件。 MBG的解决了对数据库操作有最大影响的一些简单的CRUD(插入,查询,

2017-06-08 14:22:42 716

原创 request的getParameter getParameterMap getInputStream等的一些解惑

getParameter和getParameterMap这两个方法都是用来获取request中的参数的,包括了URL中的参数和body体中的参数。getParameter的返回值是:Map (String,String),当参数中存在重复的key时,用这个方法只能获取到其中一个的值。 getParameterMap的返回值是:Map(String, String[]),当参数中存在重复的key时

2017-04-25 15:19:33 3520

原创 Java也可以爬虫了

目前市面上流行的爬虫以python居多,简单了解之后,觉得简单的一些页面的爬虫,主要就是去解析目标页面(html)。那么就在想,java有没有用户方便解析html页面呢?找到了一个jsoup包,一个非常方便解析html的工具呢。使用方式也非常简单,引入jar包:<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</art

2017-03-14 10:09:01 9203

原创 HttpURLConnection发送接收Http请求

HttpURLConnection是JDK提供的用于发送接收Http请求的类。不需要要引入第三方jar包即可使用,支持http和https的发送方式。发送https需要的前置信息初始化private static SSLContext ctx = null; private static HostnameVerifier verifier = null;

2017-03-14 10:02:49 2911

原创 Java NIO UDP发送接收数据

Java的NIO包中,有一个专门用于发送UDP数据包的类:DatagramChannel,UDP是一种无连接的网络协议,不对传送数据包进行可靠性保证,适合于一次传输少量数据。一般用于发送一些准确度要求不太高的数据等。完整的服务端程序如下:public class StatisticsServer { //每次发送接收的数据包大小 private final int MAX_BUFF

2017-03-13 10:59:14 1362

原创 压力测试工具--JMeter使用指南

最近由于项目需要,使用JMeter对项目进行了压力测试。现在对JMeter的一些使用方式进行总结。Apache JMeter是Apache组织基于Java开发的压力测试工具。用于对软件做压力测试。JMeter启动方式JMeter基本要素JMeter基本要素主要有3个:线程组、HTTP请求和结果监控。 线程组:用于控制请求发送次数、频率等,模拟一定程度的压力HTTP请求:本次压测的协议、请求信息

2016-12-15 10:43:11 2878

原创 不恰当的update语句使用主键和索引导致mysql死锁

背景知识:MySQL有三种锁的级别:页级、表级、行级。MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。MySQL这3种锁的特性可大致归纳如

2016-09-27 13:49:42 24015 4

原创 后台通用参数校验(JS303规范)

在java工程中,涉及到前后台数据传递时,参数校验是必不可少的。一般情况下,我们会在前台和后台都对数据进行双重校验,以保证数据的准确性。如果参数较少,且规则简单的情况下,我们是还用简单的if判断即可满足条件。但是如果参数特别多的情况下,再使用if判断,代码就会复杂很多。正好之前项目中使用了一种通用的参数校验方式,记录一下,进行分享。这种通用参数校验方式采用的是JSR303规范,Hibernate ...

2016-08-24 14:47:37 7325

原创 spring aop aspect + annotation实现缓存命中判断

最近看到了一种使用aop和注解的方式实现缓存命中判断的实现方式,觉得非常不错。借鉴过来,进行分享。    1、引入spring和aspect相关依赖 org.aspectj aspectjrt 1.8.6 org.aspectj aspectjweaver 1.8.6 aopalliance aopalliance

2016-06-02 14:22:38 4564

原创 springmvc整合freemarker以及前端的一些坑

一、SpringMVC整合freemarker配置 2、添加freemarker配置bean和视图解析器二、使用freemarker踩的一些坑

2016-04-29 10:35:42 12828 2

原创 SpringMVC使用RESTful风格后对静态资源的处理

SpringMVC使用REST风格,需要在web.xml中配置DispatcherServlet的映射路径如下: springmvc org.springframework.web.servlet.DispatcherServlet 1 springmvc / 此时,对于项目中引入的css,js等静态资源也会进行拦截,而没有相应的Servlet进行处理,故

2016-04-19 11:04:35 6832

原创 安装nginx踩到的坑

今天,在新的机器上重新安装了一下nginx,按照网上的说明操作,其中出现了一些问题,先总结如下:1、执行./configure,提示没有pcre,安装的nginx是1.4.7版本的,我到pcre的官网去下载,第一次现在的是pcre2-10.10.tar.gz,编译安装之后,nginx的configure完成,make时,报错,检查错误发现,需要的是pcre而不是pcre2,版本错误,又重新下载

2016-01-09 15:11:59 3755

原创 Quartz定时任务

Quartz定时任务的核心是org.quartz.Scheduler,我们对定时任务的一系列的操作都需要它来执行。在与spring的集成中,我们使用如下配置来创建这个bean。 quartz.properties配置文件内容如下:# 调度器的名字org.quartz.scheduler.instanceName = WowojobScheduler# 不使用R

2015-09-28 10:55:54 1280

原创 JDK原生类操作XML

使用JDK自带的类操作XML,包括从对象创建XML,并将XML转换为对象。import java.io.ByteArrayInputStream;import java.io.StringWriter;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;imp

2015-09-17 11:01:38 950

原创 使用curator操作zookeeper

使用Java操作zookeeper时,一般有两种方式:使用zkclient或者curator,相比较来说,curator的使用较为简便。今天就来看看如何使用curator来操作zookeeper。     需要的依赖如下: org.apache.curator curator-framework 2.8.0

2015-09-17 10:57:21 11129 1

原创 Java知识总结----事件处理机制(九)

在上一篇文章中,跟大家介绍了队列的使用,在基于数据库的队列的是实现中,提到了可以使用事件处理机制类进行队列数据的处理。今天就来简单看看事件处理机制是怎么使用的。      首先我们需要一个事件的实体类:Eventimport java.util.concurrent.atomic.AtomicInteger;/** * 消息实体类 */public class Event {

2015-09-12 10:52:37 1973

原创 Java知识总结----队列的使用(八)

今天跟大家来看看如何在项目中使用队列。首先我们要知道使用队列的目的是什么?一般情况下,如果是一些及时消息的处理,并且处理时间很短的情况下是不需要使用队列的,直接阻塞式的方法调用就可以了。但是,如果在消息处理的时候特别费时间,这个时候如果有新的消息来了,就只能处于阻塞状态,造成用户等待。这个时候在项目中引入队列是十分有必要的。当我们接受到消息后,先把消息放到队列中,然后再用新的线程进行处理,这个时候

2015-09-09 10:58:37 17893 1

原创 用Callable和CurrentHashMap实现排它锁

在构建缓存的时候,不可避免的要使用排它锁,防止多个线程同时检测到没有缓存,而去查询数据库。此时一般情况下都会使用synchronized或者ReentrantLock来实现。今天给大家介绍一种比较巧妙的实现方式:使用Callable和CurrentHashMap来实现。import java.util.concurrent.Callable;import java.util.concurr...

2015-09-08 15:25:38 1147 2

原创 远程方法动态调用之参数的处理

最近处理了一个通过类名、方法名、参数值远程调用的功能。在处理的过程中,使用反射的方式进行动态调用,其中的难点是对泛型的处理,特别是多层泛型的情况。现将开发过程中的思路以及遇到的问题进行总结。方法声明:public synchronized String invoke(String beanName, String methodName, List> params)        beanN

2015-09-08 15:15:36 1039

原创 JSON转换工具:fastjson与jackson以及fastjson的enable_type

JSON在开发过程中的作用越来越重要,特别是异构平台之间,使用JSON来通信是非常简单的。一般情况下,在使用json进行转换的时候,一般会采用JSONObject或者是google的Gson。今天给大家介绍两个非常好用,功能非常强大的工具:fastjson和jackson。两个的依赖如下: com.alibaba fastjson 1.1.37 org.codeha

2015-09-08 15:13:13 2003

原创 使用apache HttpClient发送Http请求

在平时的工作中,经常会使用Http去访问其他系统,此时一个Http的工具类就显得非常重要了。给大家分享一个简单的HttpClient的工具类,以备不时之需。主要包括POST请求、GET请求和如何发送XML数据。依赖的jar包如下: org.apache.httpcomponents httpclient 4.3.6

2015-09-08 15:02:37 3078

原创 Java知识总结----Java IO流(七)

说起IO流,脑子里浮现出的就是inputstream,outputstream,reader,writer之类的东西,但是,这些类我们该怎么选择,他们之间有什么区别和联系,好多人却不太清楚。今天就跟大家聊聊Java的IO流。       I就是input,O就是output,IO流就是输入-输出流。输入和输出就有了一个方向的问题。一般情况下,我们所说的输入和输出都是相对于内存来说的,从外设到内

2015-09-06 10:57:51 512

原创 Java知识总结----Spring拦截器(六)

在看到拦截器的时候,大家一定会想到另外一个词,就是过滤器。两者到底有什么区别呢?过滤器,从字面的意思理解就是过滤用的,当很多请求过来的时候,我们对其进行过滤,满足一定条件的时候,才放行。在Java中,过滤器是使用Filter实现的,实现原理都是基于回调函数的。最常见的过滤器的应用就是字符编码的过滤、用户信息验证的过滤等。拦截器呢,就是用来拦截的,可以在方法的执行时,添加一些其他的信息,拦截器是使用

2015-08-26 14:29:03 2645

原创 Java知识总结----日志系统在项目中的应用(五)

现在的工作过程中,日志在项目中的角色越来越重要,环境出问题了,遇到bug了,我们都要从日志查起。所以在项目中记录日志就显得很重要。今天就跟大家简单聊聊如何在项目中引入日志。       现在市面上比较流行的日志框架有log4j,logback等,大家可能还听说过sjf4j,当然了还有apache的commons-logging,jdk的java.util.log。那么slf4j是什么呢?slf

2015-08-25 17:03:46 1512

原创 Java知识总结---MVC模式解析之MyBatis(四)

在上一篇的文章里,简单介绍了一些SpringMVC的一些简单使用方法。今天就来看看Mybatis。现在流行的Hibernate、Mybatis都是比较常见的ORM框架。什么是ORM呢,就是 Object Relational Mapping,对象关系映射,通俗点说,就是把对象映射成sql语句,在操作的时候,直接操作对象就可以了。了解过Hibernate的都知道,在做CRUD的时候,直接操作一个Mo

2015-08-25 10:54:42 862

原创 Java使用限流处理大量的并发请求

在web应用中,同一时间有大量的客户端请求同时发送到服务器,例如抢购、秒杀等。这个时候如何避免将大量的请求同时发送到业务系统。第一种方法:在容器中配置最大请求数,如果大于改请求数,则客户端阻塞。该方法有效的阻止了大量的请求同时访问业务系统,但对用于不友好。第二种方法:使用过滤器,保证一定数量的请求能够正常访问系统,多余的请求先跳转到排队页面,由排队页面定时发起请求。过滤器实现如下:pu

2015-08-24 15:23:47 16236 3

Visual+C+++实践与提高COM和COM+篇源代码

Visual+C+++实践与提高COM和COM+篇源代码,配合书籍非常实用!!

2012-08-29

新手学习COM必备(Visual C++实践与提高-COM和COM+篇(Part1+Part2))

新手学习COM必备书籍,Visual C++实践与提高-COM和COM+篇,全书,Part1+Part2

2012-08-29

空空如也

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

TA关注的人

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