自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 通俗易懂的双亲委派机制

双亲委派机制

2022-07-09 11:26:13 317

转载 kafka使用教程、快速上手

kafka使用教程

2022-06-14 09:06:57 865

转载 Sentinel:万字详解微服务的哨兵机制

Sentinel解读

2022-06-14 09:02:54 324

转载 jvm系列(四):jvm调优-命令篇

运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在出现问题的时候在终端输入一些命令来解决。所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命令的使用也让我们更能了解jvm构成和特性。Sun JDK监控和故障处理命令有jps jstat jmap j

2022-04-28 14:35:09 253

转载 最详细的JVM&GC讲解

这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的差异也比较大。不过文中一些JVM参数示例都是实际项目里调优的结果,还是经受过实战考验的。目录JVM简介JVM结构 2.1 方法区 2.1.1 常量池 2.1.1.1 Class文件中的常量池 2.1.1.2 运行时常量池 2.1.1.3 常量池的好处 2.1.1.4 基本类型的包装类和常量池 2.2 堆 2.3 Java栈 2.3.1 栈帧 2.3.

2022-04-26 21:18:33 2610 1

转载 聊聊jvm的-XX:MaxDirectMemorySize

序本文主要研究一下jvm的-XX:MaxDirectMemorySize-XX:MaxDirectMemorySize-XX:MaxDirectMemorySize=size用于设置New I/O(java.nio) direct-buffer allocations的最大大小,size的单位可以使用k/K、m/M、g/G;如果没有设置该参数则默认值为0,意味着JVM自己自动给NIO direct-buffer allocations选择最大大小System.initPhase1ja

2022-04-26 21:11:23 8603

转载 JVM内存调优 -Xms -Xmx -Xmn -Xss 参数设置

案例-Xms128M: 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你-Xmx512m: 是指设定程序运行期间最大堆的大小。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。-XX:PermSize=64M: JVM初始分配的非堆内存-XX:MaxPermSize=128M:JVM最大允许分配的非堆内存,按需分配-Xss: 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运.

2022-04-26 20:48:45 9285

转载 Kafka和RabbitMQ有哪些区别,各自适合什么场景?

经常有人问我有个 xx 需求,我应该用 Kafka 还是 RabbitMQ ?这个问题很常见,而且很多人对二者的选择也把握不好。所以我决定写篇文章来详细说一下:Kafka 和 RabbitMQ 的区别,适用于什么场景?同时,这个问题在面试中也经常问到。下面我会通过 6 个场景,来对比分析一下 Kafka 和 RabbitMQ 的优劣。一、消息的顺序有这样一个需求:当订单状态变化的时候,把订单状态变化的消息发送给所有关心订单变化的系统。订单会有创建成功、待付款、已支付、已发

2022-04-21 13:44:12 409

原创 java应用源码解析

Caffeine基础:《Caffeine入门使用》->《Caffeine基础源码解析》->《Caffeine 驱逐算法》

2022-04-21 13:31:20 387

转载 由 Excel 数据导入数据库出现中文乱码引发的对 PHP 字符编码转换的探究

经过一番波折 ,虽然最终确定了造成插入数据中文乱码原因,但对 PHP 字符编码转换函数的测试也有一些小发现。为什么数据库插入数据会有中文乱码数据库数据出现中文乱码可以从三个方面考虑:数据库存储字符集与查看环境字符集不同 插入数据字符编码与数据库存储字符集不同 客户端和服务器之间传递字符的编码规则不同这三个方面主要涉及的点也是三个,数据库、MySQL 服务器和数据。只要统一这三者的字符集,就能确保不会出现乱码。检查了一下 ,数据库字符集为 utf8;数据是从 Excel 中读取的 ,不确定;

2022-04-14 16:20:36 534

转载 java pack unpack_[PHP][位转换积累]之pack和unpack

一、前面的话PHP的pack和unpack提供了为一系列数据打包(pack)和解包(unpack)成2进制流的功能,这个功能在面向字节的字符串处理和套接字的编程环境中尤为适用。在了解这两个函数之前,我们必须掌握一些关于面向字节流编程的概念,否则很难真正上理解它们。1.什么是字节序字节序,顾名思义就是字节存放的顺序计算机在传输或存储多字节的时候,会对每个字节进行双方排序的约定,例如,单字节高位在前还是在后?是需要用1000 0000 0001 0000还是0001 0000 1000 00

2022-04-07 19:30:39 307

转载 业界异地多活高可用架构设计总结

内容来源(侵删): 解密阿里巴巴“异地多活”技术 微博“异地多活”部署经验谈 饿了么异地多活技术实现 1. 异地多活介绍异地多活在近年越来越多大型互联网公司采用的方案,几乎也是大型应用发展到一定阶段的必然选择,综合比较一下各个互联网公司的方案,会发现有很多共性的东西,也有很多差异化的东西。1.1 什么是异地多活异地多活一般是指在不同城市建立独立的数据中心,“活”是相对于冷备份而言的,冷备份是备份全量数据,平时不支撑业务需求,只有在主机房出现故障的时候才会切换到.

2022-03-22 16:34:09 805

转载 Caffeine教程

如果是想直接看官网教程的请移步:https://github.com/ben-manes/...而如果还想结合实际应用场景,以及各种坑的,请看本文。最近来了一个实习生小张,看了我在公司项目中使用的缓存框架Caffeine,三天两头跑来找我取经,说是要把Caffeine吃透,为此无奈的也只能一个个细心解答了。后来这件事情被总监直到了,说是后面还有新人,让我将相关问题和细节汇总成一份教程,权当共享好了,该份教程也算是全网第一份,结合了目前我司游戏中业务场景的应用和思考,以及踩过的坑。实习生小张:

2022-02-09 20:31:50 1603

转载 你应该知道的缓存进化史

1.背景本文是上周去技术沙龙听了一下爱奇艺的Java缓存之路有感写出来的。先简单介绍一下爱奇艺的java缓存道路的发展吧。可以看见图中分为几个阶段:第一阶段:数据同步加redis通过消息队列进行数据同步至redis,然后Java应用直接去取缓存 这个阶段优点是:由于是使用的分布式缓存,所以数据更新快。缺点也比较明显:依赖Redis的稳定性,一旦redis挂了,整个缓存系统不可用,造成缓存雪崩,所有请求打到DB。第二,三阶段:JavaMap到Guava cache这个阶段使用进程内缓存作.

2022-02-07 13:46:55 273

转载 红黑树与平衡二叉树_百图详解红黑树

之前在公司组内分享了红黑树的工作原理,今天把它整理下发出来,希望能对大家有所帮助,对自己也算是一个知识点的总结。这篇文章算是我写博客写公众号以来画图最多的一篇文章了,没有之一,我希望尽可能多地用图片来形象地描述红黑树的各种操作的前后变换原理,帮助大家来理解红黑树的工作原理,下面,多图预警开始了。在讲红黑树之前,我们首先来了解下下面几个概念:二叉树,排序二叉树以及平衡二叉树。二叉树二叉树指的是每个节点最多只能有两个字数的有序树。通常左边的子树称为左子树,右边的子树称为右子树。这里说的有序树..

2022-02-06 11:26:03 10530 3

原创 深入浅出HashMap的设计与优化

HashMap 作为我们日常使用 频繁的容器之一,相信你一定不陌生了。今天我们就从HashMap 的底层实现讲起,深度了解下它的设计与优化。常用的数据结构LinkedList 是基于链表的数据结构实现的,而我今天要讲的 HashMap 是基于哈希表的数据结构实现的。我们不妨一起来温习下常用的数据结构,这样也有助于你更好地理解后面地内容。数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为 O(1),但在数组中间以及头部插入数据时,需要复制移动后面的元素。链表...

2022-01-27 19:56:24 617

转载 【java源码一带一路系列】之HashMap.putAll()

本文以jdk1.8中HashMap.putAll()方法为切入点,分析其中难理解、有价值的源码片段(类似ctrl+鼠标左键查看的源码过程)。✈观光线路图:putAll() –> putMapEntries() –> tableSizeFor() –> resize() –> hash() –> putVal()…将涉及到的源码全局变量: transientNode[] table;哈希表,初始化长度length(默认值是16) final float l..

2022-01-26 20:20:41 239

原创 ArrayList还是LinkedList?使用不当性能差千倍

集合作为一种存储数据的容器,是我们日常开发中使用最频繁的对象类型之一。JDK 为开发者提供了一系列的集合类型,这些集合类型使用不同的数据结构来实现。因此,不同的集合类型,使用场景也不同。很多同学在面试的时候,经常会被问到集合的相关问题,比较常见的有 ArrayList 和LinkedList 的区别。相信大部分同学都能回答上:“ArrayList 是基于数组实现,LinkedList 是基于链表实现。”而在回答使用场景的时候,我发现大部分同学的答案是:“ArrayList 和 LinkedL

2022-01-25 20:44:09 266

转载 一次线上 Jedis(Redis 客户端)异常的排查、定位、分析、解决

应用异常监控 Redis客户端异常分析 Redis客户端问题引导分析 站在Redis客户端视角分析 站在Redis服务端视角分析 资源池生产配置合理性分析 本文总结 今天我们来聊聊线上环境遇到的一个问题以及分析过程。1应用异常监控这不,项目中有一个Redis客户端的异常在疫情期间,出现在了你的面前,虽然该异常是偶发,有必要仔细分析下该异常出现的原由。具体异常信息如下所示:大家看截图展示的异常信息,是不是很..

2022-01-22 15:24:21 1655

原创 java实用工作日常集

SpringBoot之双(多)MongoTemplate配置 | 尘杂

2021-12-07 20:40:33 100

原创 java数据库连接池

在工作中经常要和各种连接池组件打交道,各种参数眼花撩乱,再也不想因为连接池配置光顾度娘了。今天总结的主要是几大常用的数据库连接池配置,redis连接池准备ing。内容主要来自各官方文档。Druid官方文档:https://github.com/alibaba/dr...配置 缺省值 说明 性能优化 备注 name null 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataS

2021-12-02 22:30:36 946

转载 阿里P7面试题及答案

当面试扯到jvm这一部分的时候,面试官大概率会问你jvm怎么判断哪些对象应该回收呢?这种经典的面试题当然难不住你。你会脱口而出引用计数算法和可达性分析算法。然后你就停下来了吗?难道你不知道你回答了一句话之后,面试官肯定会接着问你能详细说明一下吗?所以,不要停。主动点,面试的时候主动点。你要抓住面试官把话语权交给你的宝贵机会,接着说啊,你得支棱起来因为引用计数法的算法是这样的:在对象中添加一个引用计数器,每当一个地方引用它时,计数器就加一;当引用失效时,计数器值就减一;任何时刻计数

2021-11-22 09:49:30 1336 1

转载 缓存那些事

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

2021-11-04 14:56:11 279

转载 缓存的设计与使用,值得我们去思考

一、引言本文谈及的是后台业务服务缓存问题,在构建和优化业务服务时,第一想到的应该是优化数据库,比如数据库模型设计、SQL结构化查询语句优化,慢查询往往是系统性能杀手;第二便是使用缓存。在应用中使用缓存的技术手段并不新鲜,计算机组成原理中我们已经学习过,早期的计算机CPU通过fsb(中央处理器数据总线)直接与主存(内存)连接的方式导致CPU吞吐率下降,内存成为性能瓶颈,同时又由于内存访问热点数据的集中性,诞生了位于CPU和内存之间的高速缓存。这类比于高并发的场景,数据库读库性能成为瓶颈,需要在

2021-11-04 14:55:21 194

转载 Nginx - request_time和upstream_response_time详解

前言最近分析服务器性能,考虑到nginx在前面做反向代理,这里查一下nginx日志来反应服务器处理时间的问题。网上查了查资料,这里记录一下。注:本文提到的所有变量,如果需要区分,则均为ngx_http_upstream_module中的变量,不再做释义。如需要使用其他module中的参数,请参考nginx官方文档1、Nginx内时间定义1.1、request_time单位为秒。官网描述:request processing time in seconds with a millisec

2021-09-29 14:48:50 856

原创 JNI基础(二)

JNI 开发流程主要分为以下 6 步:编写声明了 native 方法的 Java 类 将 Java 源代码编译成 class 字节码文件 用 javah -jni 命令生成.h头文件(javah 是 jdk 自带的一个命令,-jni 参数表示将 class 中用native 声明的函数生成 JNI 规则的函数) 用本地代码实现.h头文件中的函数 将本地代码编译成动态库(Windows:\*.dll,linux/unix:\*.so,mac os x:\*.jnilib) 拷贝动态库至 java

2021-09-28 13:42:42 227

转载 JNI基础(一)

(一) 什么是JNI?JNI官网介绍Java调用C/C++在Java语言里面本来就有的,并非Android自创的,即JNI。JNI就是Java调用C++的规范。当然,一般的Java程序使用的JNI标准可能和android不一样,Android的JNI更简单。JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在..

2021-09-27 22:32:18 493

转载 深入理解JavaVM与JNIEnv

遇到的问题,Native层本地多线程回调Java函数时env->findClass()失败。前面的代码是这样的在 JNI_OnLoad记录全局变量g_vm static JavaVM* g_vm = NULL; 1 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) 2 3 { 4 5 JNIEnv * env = NULL; 6 7 if (g_vm == NULL) 8 {

2021-09-22 10:27:55 979

转载 Syschronized的底层实现原理以及各种锁的理解

java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。每个对象一开始都是无锁的,随着线程间争夺锁,越激烈,锁的级别越高,并且锁只能升级不能降级。java对象头 锁的实现机制与java对象头息息相关,锁的所有信息,都记录在java的对象头中。用2字(32位JVM中1字=32bit=4baye)存储对象头,如果是数组类型使用3字存储(还需存储数组长度)。对象头中记录了hash值、GC年龄、锁的状态、线程拥有者、类元数据的指针。Syschron..

2021-09-11 13:33:27 683

转载 阿里面试题及答案

一面1、自我介绍下自己,不超过3分钟(实际上我的自我介绍不到一分钟)2、你感觉比本科阶段自己进步了多少,有哪些进步3、研究生期间最大的进步是什么4、你觉得你适合从事哪个方向的开发5、synchronized与lock的区别,使用场景。看过synchronized的源码没6、JVM自动内存管理,Minor GC与Full GC的触发机制7、了解过JVM调优没,基本思路是什么如果CPU使用率较高,GC频繁且GC时间长,可能就需要JVM调优了。基本思路就是让每一次GC都回收尽可能多的对象,

2021-09-11 13:31:24 4253

转载 JDK和CGLib动态代理实现和区别

JDK和CGLib动态代理实现动态代理在Java中有着广泛的应用,如Spring AOP,Hibernate数据查询、测试框架的后端mock、RPC,Java注解对象获取等。动态代理的代理关系是在运行时期确定的。在讲解两种动态代理区别之前,首先通过实例代码分别实现两种动态代理,直观感受一下动态代理是个什么东西,是如何实现的,然后通过分析其实现方式和原理,阐述两种动态代理的区别。Jdk原生动态代理IHelloService接口public interface IHelloService { .

2021-09-11 13:27:03 75

转载 可达性分析

当面试扯到jvm这一部分的时候,面试官大概率会问你jvm怎么判断哪些对象应该回收呢?这种经典的面试题当然难不住你。你会脱口而出引用计数算法和可达性分析算法。然后你就停下来了吗?难道你不知道你回答了一句话之后,面试官肯定会接着问你能详细说明一下吗?所以,不要停。主动点,面试的时候主动点。你要抓住面试官把话语权交给你的宝贵机会,接着说啊,你得支棱起来因为引用计数法的算法是这样的:在对象中添加一个引用计数器,每当一个地方引用它时,计数器就加一;当引用失效时,计数器值就减一;任何时刻计数

2021-09-11 13:25:34 3898 1

转载 mongodb连接配置实践

之前百度,google了很多,发现并没有介绍mongodb生产环境如何配置的文章, 当时想参考下都不行, 所以写篇文章,大家可以一块讨论下.1. MongoClientOptions中的连接池配置:配置如下:connectionPoolSettings = ConnectionPoolSettings.builder() .minSize(getMinConnectionsPerH

2021-09-10 17:10:35 1329

转载 mongo db linux查询

1.进入mongodb安装目录(>cd D:\workPrograms\mongodb\bin)2.>mongodb 启动mongo db3.>show dbs; 查询所有数据库4.>use test; 选择要查询的数据库,此处若test数据库不存在会自动创建test数据库5.在users collection中插入6条用户数据>db.users.insertMany( [ { _id: 1, nam...

2021-09-10 17:09:47 3802

转载 synchronized 和Lock区别

0、synchronized实现原理Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:普通同步方法,锁是当前实例对象 静态同步方法,锁是当前类的class对象 同步方法块,锁是括号里面的对象 当一个线程访问同步代码块时,它首先是需要得到锁,当退出或者抛出异常时必须要释放锁,那么它是如何来实现这个机制的呢?我们先看一段简单的代码:package cn.alibab.javap;public class SynchronizedTest { publi

2021-09-09 13:42:04 319

转载 离线安装CentOS软件包方法

在工作和学习中,会需要在离线状态安装所需的linux软件包,此时,大多时候我们会直接从rpm网站获取并安装,但这样一来,很多时候,对于所安装的包的依赖包就又得同时获取才可以,然而依赖包往往不是很明确的,所以就在网上做了一番搜索,最终实现可以快捷获取离线安装包的方法,现在就在这里跟大家分享下,希望共同进步!首先,我们需要一台能联网的Linux服务器,这里我用的是现阶段最新的CentOS7版本的系统Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #

2021-09-09 11:33:46 1458

转载 彻底理解connection timeout

我们在connect时常常遇到connection timeout这种错误, 如果你仔细去观察,会发现connect timout分两种情况,Caused by: java.net.ConnectException: Operation timed out (Connection timed out)另外一种是:Caused by: java.net.SocketTimeoutException: connect timed out那这两种 timeout 有什么区别?分别在什么情况

2021-09-09 11:32:23 29794

原创 Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。  volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatil

2021-09-09 11:31:11 49

转载 HttpClient连接池

推荐Springboot集成http连接池 https://blog.csdn.net/hellozpc/article/details/106861972 常用的http客户端有JDK原生的URLConnection、Netty的异步HTTP Client、Spring的RestTemplate、Spring Cloud中的Feign。 虽然RestTemplate、Feign使用极其方便,但是屏蔽了太多底层细节,不利于全局把控。 本文主要记载一下基于Apache HttpClient

2021-08-20 17:09:32 3663

转载 Java压缩算法性能比较

前言游戏开发中,经常在玩家进入游戏的时候进行必要的信息初始化,往往这个初始化信息数据包是相对来说还是比较大的,一般在30-40kb左右,还是有必要进行压缩一下再发送消息,刚好前段时间看过,里面列举了一些常用的压缩算法,如下图所示:是否可切分表示是否可以搜索数据流的任意位置并进一步往下读取数据,这项功能在Hadoop的MapReduce中尤其适合。下面对这几种压缩格式进行简单的介绍,并进行压力测试,进行性能比较DEFLATEDEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffma

2021-05-28 10:45:52 327

空空如也

空空如也

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

TA关注的人

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