自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 优秀开源软件的类,都是怎么命名的?

日常编码中,代码的命名是个大的学问。能快速的看懂开源软件的代码结构和意图,也是一项必备的能力。那它们有什么规律呢?Java项目的代码结构,能够体现它的设计理念。Java采用长命名的方式来规范类的命名,能够自己表达它的主要意图。配合高级的IDE,可以减少编码人员的记忆负担,靠模糊的匹配就能找到自己所需要的资源。为了让大家更好的理解命名的套路,我借鉴了最流行的Java接开源软件(spring系列,netty,libgdx,guava,logback等等),总结了10类常见的类命名。大多数是以后缀形式存在

2021-11-04 22:59:39 610

原创 K8s基础知识

目录K8s中文文档地址K8s基础概念什么是K8s?K8s核心概念K8s整体架构与核心组件K8s常用命令K8s 网络同一个Pod中的容器通信集群内Pod之间的通信外部服务访问集群中的Pods什么是Ingress?ClusterIP与headlessStatefulSet有状态服务管理什么是有状态服务?StatefulSet的作用K8s 配置管理ConfigMap与SecretK8s Volume持久化存储Volume管理PV的静态

2021-05-10 16:48:34 576

原创 Docker基础知识

目录什么是Docker?Docker与虚拟主机的区别?Docker的最大优点?Docker安装Docker的核心组件Docker Container隔离机制Docker中的网络模式Docker的持久化机制Docker常用命令什么是Docker?通俗地讲,Docker 类似于集装箱。在一艘大船上,各种货物要想被整齐摆放并且相互不受到影响,我们就需要把各种货物进行集装箱标准化。 Docker 要做的就是把各种软件打包成一个集装箱(镜像),然后分发,且在运行的时.

2021-04-27 15:51:11 282

原创 Spring Cloud Alibaba核心组件概述

概览Spring Cloud Alibaba是国产的微服务开发一站式解决方案,与原有 Spring Cloud 兼容的同时对微服务生态进行扩展,通过添加少量的配置注解,便可实现更符合国情的微服务架构。其核心组件有:Nacos:主要的功能有注册中心和配置中心,可以代替 Eureka 和 Apollo 两个组件;Sentinel:可实现流量控制、熔断降级、系统负载保护等,比Hystrix功能更加丰富;Dubbo:高性能的RPC通信框架;RocketMQ:高性能、高可靠的消息中间件;S

2021-03-31 10:30:17 14452 4

转载 Dubbo 架构设计概览

设计图图示说明图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承.

2021-03-25 17:59:03 165

原创 Spring Cloud Netflix核心组件概述

目录概览EurekaRibbonHystrixFeignZuulSpringCloud ConfigSleuth概览SpringCloud Netflix 基于SpringBoot 对Netflix OSS进行了整合,使我们只需要通过注解和简单的配置便可以解决微服务间的治理工作。其核心主件有:Eureka:负责服务的注册与发现; Ribbon:负责客户端调用的负载均衡; Hystrix:负责服务之间远程调用时的容错保护; Feign:可以让我们通过定义.

2021-03-24 10:53:41 850

原创 Redis内存回收策略

Redis的六种内存回收策略Redis中提供了多种内存回收策略,当内存容量不足时,为了保证程序的运行,这时就不得不淘汰内存中的一些对象,释放这些对象占用的空间。noeviction:默认的策略,当内存使用达到阈值的时候,所有引起申请内存的命令会报错。 allkeys-lru:从数据集(server.db[i].dict)中淘汰最近最少使用的数据。如果我们的应用对缓存的访问都是相对热点数据,那么可以选择这个策略。 allkeys-random:随机移除某个key。如果我们的应用对于缓存key的访问

2021-02-13 20:19:11 266

原创 Redis持久化机制

目录Redis的持久化RDBRedis会在以下几种情况下对数据进行快照AOF(append only file)AOF的实现AOF的重写原理Redis的持久化Redis支持两种方式的持久化,一种是RDB方式、另一种是AOF(append-only-file)方式。前者会根据指定的规则“定时”将内存中的数据存储在硬盘上,而后者在每次执行命令后将命令本身记录下来。两种持久化方式可以单独使用其中一种,也可以将这两种方式结合使用。RDB当符合一定条件时,Redis会单独.

2021-02-13 20:14:33 196

原创 Elasticsearch分布式检索原理笔记

目录ES检索的两阶段过程查询阶段取回阶段深分页问题scrollsearch_afterES检索的两阶段过程文档的唯一性可以由 _index(索引名称)和_id(文档id)的组合来确定,这表示我们可以确切知道集群中哪个分片含有此文档。而当我们需要通过id之外的条件进行搜索时,就需要一种更加复杂的执行模型,因为我们不知道查询会命中哪些文档,这些文档有可能在集群的任何分片上。一个搜索请求必须询问我们关注的索引的所有分片的某个副本来确定它们是否含有任何匹配的文档。但是找到..

2021-01-29 14:02:59 590 1

原创 Elasticsearch准实时性问题

目录ES索引的不变性ES索引结构组成为什么要进行数据分段(segment)?ES数据写入流程ES如何解决宕机数据丢失的问题?当我们更新数据至 ES 且返回成功提示,在返回后的一瞬间进行查询,会发现数据仍然不是最新的,背后的原因究竟是什么?想要真正搞清楚原因,就要求我们对数据索引的整个过程有所了解。ES索引的不变性倒排索引被写入磁盘后是不可改变的:它永远不会修改。不变性有重要的价值:不需要锁。如果你从来不更新索引,你就不需要担心多进程同时修改数据的问题。 一旦索引..

2021-01-28 18:06:43 1677

转载 GET请求与POST请求的区别

原文地址:https://www.cnblogs.com/logsharing/p/8448446.htmlGET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。...

2021-01-23 15:50:21 193

原创 Java常用日期工具实现

获取今日日期 获取本月第一天日期 获取本月最后一天日期 date转日期字符串 日期字符串转date 日期字符串格式化 根据date获取past天前的日期 获取当前年周数:yyyy-w 获取范围时间内的日期集合public class MyDateUtils { public static final String NORMAL_DATE_FORMAT = "yyyy-MM-dd"; public static final String NORMAL_DATE_TIME_F

2021-01-23 11:05:54 282 1

原创 Java编码规范整理

目录前言一.命名风格1.规范变量的命名【强制】2. 规范类的命名【强制】3. 规范方法的命名【强制】二. 代码风格1.提升代码的可读性【推荐】2.尽量避免魔法值【推荐】3.避免大段代码【推荐】三. 控制语句1.控制语句的大括号【强制】2.善于使用卫语句【推荐】3.循环内避免重复性操作【强制】4.循环内的try catch【参考】四. 注释规范1.类、属性、方法的注释【强制】2.方法内的注释【推荐】3.注释同样需要维护【强制】4.谨慎

2020-12-28 16:24:09 431 2

原创 CentOS7搭建Redis Sentinel

什么是Redis Sentinel官方文档:Redis 的 Sentinel 文档搭建Redis Sentinel准备工作首先需要在CentOS环境下准备三个redis节点和三个sentinel节点:首先要在CentOS环境下安装好Redis,具体可以参考:CentOS7安装Redis然后在redis的bin文件夹下创建sentinel文件夹,具体命令如下:[root@localhost ~]# cd /usr/local/redis/bin/[root@localhost

2020-11-23 22:54:34 573 1

原创 CentOS7搭建Redis Cluster

目录什么是Redis ClusterRedis集群介绍Redis 集群的数据分片Redis 集群的主从复制模型Redis 一致性保证搭建Redis Cluster(三主三从)准备工作启动所有节点服务建立集群关系验证集群状态验证数据验证什么是Redis Cluster关于Redis集群的介绍,引用官网的一段文字说明,浅显易懂:Redis 集群教程Redis集群介绍Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis

2020-11-20 14:39:44 251

原创 CentOS7安装Redis

下载与解压[root@localhost local]#wget http://download.redis.io/releases/redis-5.0.3.tar.gz[root@localhost local]#tar -zxvf redis-5.0.3.tar.gz编译与安装[root@localhost local]#cd redis-5.0.3[root@localhost redis-5.0.3]# make[root@localhost redis-5.0....

2020-11-18 17:04:26 312

原创 分布式锁之Zookeeper实现

ZooKeeper 有四种节点类型:持久节点; 持久顺序节点; 临时节点; 临时顺序节。利用 ZooKeeper 支持临时顺序节点的特性,可以实现分布式锁。当客户端对某个方法加锁时,在 ZooKeeper 中该方法对应的指定节点目录下,生成一个唯一的临时有序节点。判断是否获取锁,只需要判断持有的节点是否是有序节点中序号最小的一个,当释放锁的时候,将这个临时节点删除即可,这种方式可以避免服务宕机导致的锁无法释放而产生的死锁问题。ZooKeeper 分布式锁流程:客户端连接 ZooK

2020-11-03 15:12:10 216 1

原创 分布式锁之Redis实现

分布式锁应具备的特性互斥性:互斥是锁的基本特征,同一时刻只能有一个线程持有锁,执行临界操作;超时释放:超时释放是锁的另一个必备特性,通过超时释放,防止不必要的线程等待和资源浪费;可重入性:在分布式环境下,同一个节点上的同一个线程如果获取了锁之后,再次请求还是可以成功;高性能和高可用:加锁和解锁的开销要尽可能的小,同时也需要保证高可用,防止分布式锁失效;支持阻塞和非阻塞性:对比 Java 语言中的 wait() 和 notify() 等操作,这个一般是在业务代码中实现,比如在获取锁时通过

2020-11-02 18:08:54 210

原创 SpringBoot与Spring的区别

目录Spring Boot 特性一:更快速的构建能力Spring Boot 特性二:起步依赖Spring Boot 特性三:内嵌容器支持Spring Boot 特性四:Actuator 监控Spring Boot 本质上是 Spring 框架的延伸和扩展,它的诞生是为了简化 Spring 框架初始搭建以及开发的过程,使用它可以不再依赖 Spring 应用程序中的 XML 配置,为更快、更高效的开发 Spring 提供更加有力的支持。Spring Boot 具体的特性如下。Spring

2020-10-24 12:58:31 4003

原创 Elasticsearch基本查询

目录基本语法查询所有(match_all)匹配查询(match)多字段查询(multi_match)词条匹配(term)多词条精确匹配(terms)结果过滤布尔组合查询(bool)范围查询(range)排序分页基本语法POST /索引库名/_search{ "query":{ "查询类型":{ "查询条件":"查询条件值" } }}query:代表一个查询对象,里面可以有不同

2020-09-28 16:57:00 420

原创 Elasticsearch索引库、类型与文档

目录索引库创建索引库查看索引库删除索引库类型及映射创建映射字段属性说明typeindexstore查看映射关系文档新增文档查看文档修改文档删除文档索引库创建索引库PUT /shop{ "settings": { "属性名": "属性值" }}查看索引库GET /shop删除索引库DELETE /shop类型及映射有了索引库,等于有了数据库中的database。接下来就需要索引库中的类

2020-08-28 17:18:02 1593

原创 Elasticsearch基本概念

Elasticsearch是基于Lucene的全文检索库,本质也是存储数据,很多概念与关系型数据库类似。对比关系:索引库(indexes)--------------------------------- Databases 数据库 类型(type)-------------------------------------- Table 数据表 文档(Document)---------------------------------- Row 行 字段(Field)---------

2020-08-28 15:21:28 196

原创 Centos7安装Kibana

什么是Kibana?Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,生成各种图表,如柱形图,线状图,饼图等。而且还提供了操作Elasticsearch索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习Elasticsearch的语法。国内下载地址https://www.newbe.pro/Mirrors/Mirrors-Kibana/使用版本6.8.0,与安装的es保持一致。解压ta

2020-08-21 16:07:59 237

原创 Centos7安装Elasticsearch

Elasticsearch镜像下载地址https://thans.cn/mirror/elasticsearch.html这里使用的是6.8.0版本。新建Elasticsearch专用账号出于安全考虑,Elasticsearch默认不允许以root账号运行,所以新建一个Elasticsearch的专用账号:esuseradd espasswd es12345678su - es解压es压缩包tar xvf elasticsearch-6.8.0.tar.gz

2020-08-20 18:31:46 240

原创 初识全文检索

什么是全文检索?全文检索是利用倒排索引技术对需要搜索的数据进行处理,然后提供快速匹配的技术。其实全文检索还有另外一种专业定义,先创建索引然后对索引进行搜索的过程,就是全文检索。倒排索引倒排索引是一种存储数据的方式,与传统查找有很大区别:传统查找:采用数据按行存储,查找时逐行扫描,或者根据索引查找,然后匹配搜索条件,效率较差。概括来讲是先找到文档,然后看是否匹配。 倒排索引:首先对数据按列拆分存储,然后对文档中的数据分词,对词条进行索引,并记录词条在文档中出现的位置。这样查找时只要找到了

2020-08-20 16:35:18 234

原创 apollo配置String、List、Map

Stringkey:xxx.strParamvalue:abcdef(冒号后的abc为默认值) @Value("${xxx.strParam:abc}") private String strParam;Listkey:xxx.listParamvalue:202,203,214,216,230 @Value("#{'${xxx.listParam:1,2}'.split(',')}") private List<String> lis

2020-08-04 14:17:31 6744

原创 Mybatis collection标签实现一对多查询

业务中经常遇到一对多的场景,例如一名员工可能拥有多个职务。@Datapublic class UserInfo implements Serializable { private Long id; private String userCode; private String userName; private String sex; private String userPhone; /** * 该员工职务列表 */

2020-07-27 15:45:36 1009

原创 MyBatis常用标签(if、foreach、where、set、like等)

select与if <select id="selectUser" resultType="com.xxx.User"> SELECT * FROM t_user WHERE sid = #{sid} <if test="code != null and code != ''"> AND code = #{code} </if> </select>insert与for

2020-07-27 14:33:03 1093

原创 ThreadLocal使用场景与原理

目录ThreadLocal的使用场景ThreadLocal与synchronized的区别Thread、ThreadLocal及ThreadLocalMap的关系调用remove()方法避免内存泄漏ThreadLocal的使用场景ThreadLocal 用作保存每个线程独享的对象,为每个线程都创建一个副本,这样每个线程都可以修改自己所拥有的副本, 而不会影响其他线程的副本,确保了线程安全。 ThreadLocal 用作每个线程内需要独立保存信息,以便供其他方法更方便地获取该信息的场

2020-06-29 22:56:24 11386 3

原创 缓存七大经典问题

一、缓存失效问题描述一次性缓存大量数据,设置了相同过期时间,同时失效。解决方案即相同业务数据写缓存时,在基础过期时间之上,再加一个随机的过期时间,让数据在未来一段时间内慢慢过期,避免瞬时全部过期,对DB造成过大压力。过期时间 = base 时间 + 随机时间二、缓存穿透问题描述有特殊访客在查询一个不存在的key,导致每次查询都会穿透到DB。解决方案1、查询这些不存在的数据时,第一次查DB,虽然没查到结果返回NULL,仍然记录这个key到缓存,只是这个...

2020-05-17 11:16:45 514

原创 面试题汇总

Java基础八种基本数据类型HashMapArrayListStringsynchronizedsynchronized与Lock对比、AQSvolatile与JMM线程的创建、启动、停止线程池ConcurrentHashMap1.7与1.8对比CopyOnWriteArrayList阻塞队列的常用方法AtomicLong与LongAdder...

2020-05-15 13:21:19 136

原创 TCP与UDP对比

TCP UDP 是否面向连接 面向连接 无连接 是否可靠 可靠传输,保证数据完整且有序 不可靠传输,可能发生丢失或顺序错乱 连接对象个数 只能一对一 支持一对一,一对多,多对一和多对多 传输方式 面向字节流 面向报文 首部开销 首部最小20字节,最大60字节 首部开销小,仅8字节 适用场景 适...

2020-04-22 19:04:39 292

转载 微信朋友圈设计原理

转自:http://www.woshipm.com/pd/2701264.html当你一秒钟拍了张自拍,一个小时修了下图,然后打开朋友圈,点击发送的那一刻,后台到底有多少工作在进行着?我们太习以为常,没有意识到这背后还会有多复杂的逻辑。为什么每天几十亿量级的朋友圈发布量,都没有让微信崩溃过?我看了朋友圈负责人陈明的演讲,他分享了微信的架构,数据结构设计等。演讲很好看,很实在,但有的时候...

2020-03-28 22:56:19 6207 18

原创 秒杀系统设计原则

秒杀活动的特点1、持续时间短,但访问冲击量大;2、业务的请求量远远大于售卖量,大部分是最终无法购买成功的请求;3、秒杀往往价格便宜,因此各种非法作弊手段层出。设计原则1、尽力将请求拦截在系统上游,如验证码等; 2、商品信息设计成静态页,保存在CDN或代理服务器; 3、开始前,按钮置灰,抢购一次后按钮置灰,避免重复提交; 4、秒杀系统独立部署,负载均衡,避免单点...

2020-02-12 00:32:38 285

原创 缓存的三种读写方式

结合业务场景,缓存的读写方式可以分为以下三种模式: Cache Aside(旁路缓存) Read/Write Through(读写穿透) Write Behind Caching(异步缓存写入) Cache Aside查询:应用程序先去cache中读取数据,如果可以命中,则直接返回;如果没有命中,则去数据库中查询,成功后存入缓存。 更新:应用程序先去更新数据库...

2020-02-10 17:07:28 3328 5

原创 破坏双亲委派机制之SPI

我们知道双亲委派模型很好的解决了各个类加载器基础类型的一致性问题,而基础类型往往是被用户代码继承、调用的API存在,但这总设计有时候并不是完美的,比如基础类型又要调用用户的代码,那该怎么办?典型的例子就是SPI机制的实现,以JDBC的实现为例。JDK提供了统一的JDBC驱动接口Driver,各种数据库厂商(MySQL、Oracle等)会根据SPI规范,以jar包形式提供自己的实现。对于实现...

2020-01-31 03:38:01 805

原创 Java四种引用类型

JVM在进行GC回收时,会从GC Roots开始遍历,判断引用是否可达,引用的可达性是判断GC回收的基本条件。但是在某些场景下,即使引用可达,也希望能够根据语义的强弱进行有选择的回收。引用根据语义强弱可分为强引用、软引用、弱引用、虚引用。强引用(永久有效)Strong Reference,最为常见的引用类型,如:Object obj = new Object();只有对象...

2020-01-30 16:54:20 487

原创 面试题:能否自定义一个java.lang.Object类

创建自定义的java.lang.Object首先尝试在工程中创建自己的java.lang.Object类:package java.lang;/** * 自己创建的java.lang.Object * * @author hujy * @version 1.0 * @date 2020-01-30 01:12 */public class Object { st...

2020-01-30 13:24:46 1873

原创 观察者模式

定义观察者模式又称为发布订阅模式。定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者,使他们能够自动更新自己。场景举例微信公众号订阅。具体实现定义发布者接口Observablepublic interface Observable { // 注册观察者 void registerObs...

2020-01-29 20:17:35 517

原创 责任链模式

定义将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象处理。场景举例员工请假流程。具体实现请假申请基本信息类:/** * 封装请假的基本信息 */public class LeaveRequest { // 员工名称 private String...

2020-01-29 19:18:16 510

空空如也

空空如也

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

TA关注的人

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