自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小媛的博客

当你真的爱上编程的时候,其实编程就是你的娱乐方式。

  • 博客(27)
  • 资源 (7)
  • 论坛 (3)
  • 收藏
  • 关注

原创 Skywalking 链路追踪

Skywalking 链路追踪Skywalking 根据官方的解释,Skywalking是一个可观测性平台(Observability Analysis Platform简称 OAP)和应用性能管理系统(Application Performance Management 简称 APM)。提供分布式链路追踪、服务网格(Service Mesh)遥测分析、度量(Metric)聚合和可视化一体化解决方案。一、APM 系统概述APM(Application Performance Monitoring

2021-01-20 14:03:44 46

转载 9种常见的CMS GC问题分析与解决

9种常见的CMS GC问题分析与解决本文主要针对 Hotspot VM 中“CMS + ParNew”组合的一些使用场景进行总结1. GC 问题判断在做 GC 问题排查和优化之前,我们需要先来明确下到底是不是 GC 直接导致的问题,或者应用代码导致的 GC 异常,最终出现问题。1.1 判断 GC 有没有问题?1.1.1 设定评价标准评判 GC 的两个核心指标:延迟(Latency): 也可以理解为最大停顿时间,即垃圾收集过程中一次 STW 的最长时间,越短越好,一定程度上可以接受频次的增

2021-01-10 23:09:22 276

原创 GC 的算法及收集器

GC 的算法及收集器Garbage Collection(垃圾收集),Java 中 GC 的对象是堆空间和永久区。文章目录GC 的算法及收集器1.1 引言2.1 基础概念2.2 分配对象2.3 收集对象2.3.1 识别垃圾2.3.2 收集算法2.4 收集器2.4.1 分代收集器2.4.2 分区收集器2.4.3 常用收集器2.4.4 其他收集器2.5 可触及性2.6 Stop-The-World2.7 常用工具2.7.1 命令行终端2.7.2 可视化界面2.7.1 命令行终端2.7.2 可视化界面1

2021-01-10 22:52:38 52

原创 Redis 线程模型

Redis 线程模型一、概述【1】Redis 是基于 Reactor 模式开发的网络事件处理器:这个处理器被称为文件事件处理器(file event handler),这个文件事件处理器是单线程的,所以 Redis 才叫做单线程的模型:■ 文件事件处理器使用 I/O 多路复用(multiplexing)机制监听多个套接字 Socket,根据 Socket 上的事件来选择对应的事件处理器进行处理。■ 当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(cl

2021-01-06 19:46:10 26

原创 Redis 性能优化

Redis 性能优化一、Linux 操作系统【1】ulimit 与 TCP backlog:1)、修改 ulimit:通过 ulimit 修改 open files 参数,redis 建议把 open files 至少设置成 10032,因为 maxclients 是10000 [客户端的数据是以文件的形式进行保存的] ,另外 redis 内部最多会使用 32 个文件描述符。1 ulimit -n 10032 #但重启后就无效了,也可以通过配置文件limits.conf 的形式持久修改2 #修改

2021-01-06 19:39:02 49

原创 Redis Cluster集群搭建及节点的添加、删除

Redis Cluster集群搭建及节点的添加、删除一、什么是 Redis ClusterRedis 是在内存中保存数据的,而我们的电脑一般内存都不大,这也意味着 Redis 不适合存储大数据,适合存储大数据的是 Hadoop 生态系统的 Hbase 或者是 MogoDB 。Redis 更适合处理高并发,一台设备的存储能力是有限的但是多台设备协同合作,就可以内存增大很多倍,这时就需要集群。Redis 集群搭建的方式有很多种,但从 redis 3.0 版本之后,支持 redis-cluster 集

2021-01-05 19:40:25 70 1

原创 Java面试-----缓存

一、什么是缓存【1】缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存中查询数据,有则直接执行,不存在时从磁盘中获取。由于缓存的数据比磁盘快的多,所以缓存的作用就是帮助硬件更快的运行。【2】缓存往往使用的是RAM(断电既掉的非永久存储),所以在用完后还是会把文件送到硬盘等存储器中永久存储。电脑中最大缓存就是内存条,硬盘上也有16M或者32M的缓存。【3】高速缓存是用来协调CPU与主存之间存取速度的差异而设置的。一般CPU工作速度高,但内存的工作速度相对较低,为了解决这

2021-01-03 22:35:56 41

原创 分布式缓存的一致性 Hash 算法

分布式缓存的一致性 Hash 算法一、使用一致性 Hash 算法的原因简单的路由算法可以使用余数 Hash:用服务器数据除缓存数据 KEY 的 Hash 值,余数为服务器列表下标编码。这种算法可以满足大多数的缓存路由需求。但是,当分布式缓存集群需要扩容的时候,事情就变得棘手了。举个例子:很容易可以计算出,3台缓存服务器扩容至4台服务器,大约有 75%(3/4)被缓存了的数据不能正确命中,随着服务器集群规模的增大,这个比例线性上升。当100台服务器的集群中加入一台新服务器,不能命中的概率是 99%(N/

2021-01-03 13:30:45 45 1

原创 Redis 主从复制

Redis 主从复制一、Redis 复制复制(Replication):是 Redis 实现高可用的基础。且在复制过程中,主节点/从节点都是非阻塞的,但是从节点在执行同步时使用的是旧数据集提供查询。Redis 复制启动图与流程说明:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QRM7gNLF-1609648520684)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEA

2021-01-03 12:35:45 17

转载 针对 Redis Rehash机制的探索和实践

针对 Redis Rehash机制的探索和实践来源于美团一、背景Squirrel(松鼠)是美团技术团队基于 Redis Cluster打造的缓存系统。经过不断的迭代研发,目前已形成一整套自动化运维体系:涵盖一键运维集群、细粒度的监控、支持自动扩缩容以及热点 Key监控等完整的解决方案。同时服务端通过 Docker进行部署,最大程度的提高运维的灵活性。分布式缓存Squirrel产品自2015年上线至今,已在美团内部广泛使用,存储容量超过60T,日均调用量也超过万亿次,逐步成为美团目前最主要的缓存系

2021-01-03 12:33:56 37

转载 Netty堆外内存泄露排查

Netty堆外内存泄露排查来源于美团一、导读Netty 是一个异步事件驱动的网络通信层框架,用于快速开发高可用高性能的服务端网络框架与客户端程序,它极大地简化了 TCP 和 UDP 套接字服务器等网络编程。Netty 底层基于 JDK 的 NIO,我们为什么不直接基于 JDK 的 NIO 或者其他 NIO框架:使用 JDK 自带的 NIO 需要了解太多的概念,编程复杂。Netty 底层 IO 模型随意切换,而这一切只需要做微小的改动。Netty自带的拆包解包,异常检测等机制让我们从 NIO

2021-01-03 12:28:31 39

转载 MyBatis 版本升级引发的线上问题

MyBatis 版本升级引发的线上问题MyBatis上线前后的版本:上线前(3.2.3)上线后(3.4.6)服务上线后,开始陆续出现了一些更新系统交互日志方面的报警,这属于系统的辅助流程,报警如下代码所示。我们发现都是跟 MyBatis相关的报警,说明在进行类型转换 [ibatis.type.TypeException]的时候,系统产生了强转错误。更新开票请求返回日志, id:{#######}, response:{{"code":XXX,"data":{"callType":3,"code":

2021-01-03 12:27:26 40

原创 本地缓存与分布式缓存

本地缓存与分布式缓存一般而言,现在互联网应用(网站或App)的整体流程,可以概括如图所示,用户请求从界面(浏览器或App界面)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。随着互联网的普及,内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时我们的应用服务器和数据库服务器所做的计算也越来越多。但是往往我们的应用服务器资源是有限的,且技术变革是缓慢的,数据库每秒能接受的请求次数也是有限的(或者文件的读写也是有限的),如何能够有效利用有限的资源来提供

2021-01-03 12:22:03 96

转载 消息队列设计精要

消息队列设计精要来源于美团消息队列已经逐渐成为企业 IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步 RPC的主要手段之一。 当今市面上有很多主流的消息中间件,如老牌的 ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、RocketMQ等。 本文不会一一介绍这些消息队列的所有特性,而是探讨一下自主开发设计一个消息队列时,你需要思考和设计的重要方面。过程中我们会参考这些成熟消息队列的很多重要思想。

2020-12-16 23:58:23 73

原创 消息中间件选型

消息中间件选型常用的 MQ组件有 Kafka、RabbitMQ、RocketMQ、ActiveMQ、ZeroMQ、MetaMQ。当然 Kafka的功能更加强大,其它 MQ都有自己的特点和优势,如下:特性KafkaRabbitMQRocketMQActiveMQ开发语言ScalaErlangJavaJava单击吞吐量十万级万级十万级万级时效性ms级以内us(微秒)级ms级ms级可用性非常高(分布式架构)高(主从架构)非常高(分布式架

2020-12-16 23:53:26 84

原创 Netty5 入门HelloWorld

Netty5 入门HelloWorld一、客户端代码及关键类说明 1 /** 2 * netty5的客户端 3 * @author -zhengzx- 4 * 5 */ 6 public class ClientSocket { 7 8 public static void main(String[] args) { 9 //服务类10 Bootstrap bootstrap = new Bootstrap();11

2020-12-16 23:43:34 43 1

原创 IO 与 NIO之网络通信

IO 与 NIO之网络通信一、阻塞IO / 非阻塞NIO**阻塞IO:**当一条线程执行 read() 或者 write() 方法时,这条线程会一直阻塞直到读取到了一些数据或者要写出去的数据已经全部写出,在这期间这条线程不能做任何其他的事情。非阻塞NIO:NIO 与原有的 IO 有同样的作用和目的,但是使用的方式完全不同,NIO 支持面向缓冲区的、基于通道的操作。NIO 将以更加高效的方式进行文件读写操作。JAVA NIO的核心在于:通道(Channel)和缓冲区(Buffer)。通道表示打开 IO

2020-12-16 23:36:05 61

原创 Netty 线程模型(Reactor 线程模型)

[Netty 线程模型(Reactor 线程模型)当说到 Netty 线程模型的时候,一般首先会想到经典的 Reactor 线程模型,尽管不同的 NIO 框架对于 Reactor 模式的实现存在差异,但本质上还是遵循了 Reactor 的基础线程模式。一、Reactor 单线程模型无论是C++ 还是 Java 编写的网络框架,大多数都是基于 Reactor 模型进行设计和开发,Reactor 模型基于事件驱动,特别适合海量的 I/O 事件。【1】Reactor 单线程模型,是指所有的 I/

2020-12-14 20:12:29 60

转载 万亿级 KV 存储架构与实践

来源于美团KV 存储作为美团一项重要的在线存储服务,承载了在线服务每天万亿级的请求量。第一部分讲述了美团 KV 存储的发展历程;第二部分阐述了内存 KV Squirrel 架构和实践;第三部分介绍了持久化 KV Cellar 架构和实践;最后分享了未来的发展规划和业界新趋势。一、美团点评 KV 存储发展历程美团第一代的分布式 KV 存储如下图左侧的架构所示,相信很多公司都经历过这个阶段。在客户端内做一致性哈希,在后端部署很多的 Memcached 实例,这样就实现了最基本的 KV 存储分布式设计.

2020-12-10 23:17:24 62

原创 Redis 基础数据结构

Redis 基础数据结构Reids 所有的数据结构都以唯一的 key 字符串作为名称,然后通过这个唯一的 key 值来获取相应的 value 数据。不同的数据结构差异就在于 value 的结构不一样。*一、*Redis 五大数据类型【1】String(字符串):String 是 Redis 最基本的类型,一个 key 对应一个 value。String 类型是二进制安全的。意思是 Redis 的 String 可以包含任何数据。一个键最大能存储 512MB。【2】Hash(哈希):Hash 是

2020-12-09 23:14:28 44

原创 Redisson实现分布式锁原理

Redisson实现分布式锁原理一、高效分布式锁当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁,这里我认为以下几点是必须要考虑的。1、互斥在分布式高并发的条件下,我们最需要保证,同一时刻只能有一个线程获得锁,这是最基本的一点。2、防止死锁在分布式高并发的条件下,比如有个线程获得锁的同时,还没有来得及去释放锁,就因为系统故障或者其它原因使它无法执行释放锁的命令,导致其它线程都无法获得锁,造成死锁。所以分布式非常有必要设置锁的有效时间,确保系统

2020-12-09 19:42:42 39

原创 ReentrantLock 锁详解

ReentrantLock 锁详解ReentrantLock 支持公平锁和非公平锁,可重入锁 ReentrantLock的底层是通过 **AQS[链接]**实现。一、BAT 大厂的面试题**【1】**什么是可重入,什么是可重入锁? 它用来解决什么问题?【2】ReentrantLock 的核心是 AQS,那么它怎么来实现的,继承吗? 说说其类内部结构关系。【3】ReentrantLock 是如何实现公平锁的?【4】ReentrantLock 是如何实现非公平锁的?【5】ReentrantL

2020-12-07 23:27:23 84

原创 CAS乐观锁(原子操作)

CAS乐观锁(原子操作)锁主要分为两种:乐观锁和悲观锁,而 synchronized 就属于一种悲观锁,每次在操作数据前都会加锁。乐观锁是指:乐观的认为自己在操作数据时,别人不会对当前数据进行修改,因此不会加锁。如果有人对数据进行了修改,则重新获取修改后的数据,进行操作。直到成功为止。而乐观锁的这种机制就是CAS(compare and swap)比较并交换。一、什么是 CASCAS(Compare And Swap | Compare And Set)**:**比较并交换,CAS 是解决多线程

2020-12-07 23:26:51 41

原创 AQS 锁核心类详解

AQS 锁核心类详解AQS(AbstractQuenedSynchronizer 抽象队列同步器) 是一个用来构建锁和同步器的框架,使用 AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于 AQS的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。当然,我们自己也能利用 AQS非常轻松容易地

2020-12-07 23:26:20 33

原创 Synchronized 关键字详解

Synchronized 关键字详解Synchronized原理分析加锁和释放锁的原理深入JVM看字节码,创建如下的代码:[](javascript:void(0)????1 public class SynchronizedDemo2 {2 Object object = new Object();3 public void method1() {4 synchronized (object) {5 6 }7 }8 }[]

2020-12-07 23:23:29 35

原创 线程池的实现原理

线程池的实现原理线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数超过了最大数量超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。什么是线程池线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避

2020-12-06 23:33:26 43

原创 线程池的使用

线程池的使用一、常见的五中线程池【1】Executors.newFixedThreadPool(n):创建一个定长的线程池,可控制线程最大并发数,超出的线程会在队列中等待。创建的线程池 corePoolSize 和 maximumPoolSize 值是相等的,使用的是 LinkedBlockingQueue 阻塞队列。执行长期的任务,性能好很多。底层实现如下:public static ExecutorService newFixedThreadPool(int nThreads) { retur

2020-12-06 15:19:16 29

java 高级开发 zzx博客链接.xmind

自己高级学习脑图,希望能够帮助到更多迷茫中的同行们。主要对当前非常流程的知识点和框架内容进行整理。重点是只需要1积分,纯粹的免费送呀。

2020-04-06

FastDFSClient配置文件

fastDFS配置文件,主要修改其中的Service就可以了,其他可默认。

2018-09-20

pagination.css

pagination.css 由于前端分页时配合pagination.js使用。

2018-09-02

MyBatis逆向工程生成工具

通过数据库逆向生成MyBatis需要的pojo、interface和xml文件

2018-05-13

ojdbc14-10.2.0.4.0.jar包

由于微软的数据库不是用Java语言来编写的,但是我们需要用java语言连接微软的数据库,这样就要编写一个桥连接,使java语言编写的代码也可以操作数据库。

2017-03-27

ojdbc14-10.2.0.4.0.jar

2017-03-26

企业人事管理论文+源代码

本篇论文使用了Swing、Hibernate、Oracle等技术,设计了一个功能全面、操作简单,可以快速的为员工建立电子档案,并且便于修改、保存和查看,实现了无纸化存档,为企业节省了大量的资金和空间。通过企业人事管理系统,还可以实现对企业员工的考勤管理、奖罚管理、培训管理、待遇管理和快速生成待遇报表。

2016-11-27

不想做CTO的程序员不是一个好的架构师

发表于 2020-11-06 最后回复 2020-11-06

IDEA 中使用properties配置文件 乱码问题

发表于 2018-10-31 最后回复 2018-10-31

CSDN 403错误

发表于 2018-10-16 最后回复 2018-10-16

空空如也

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

TA关注的人 TA的粉丝

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