自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

霞落满天

我是Oracle Java JCP会员 博客域名 https://linuxstyle.blog.csdn.net/

原创 spring springboot springcloud常用注解

【spring】@Qualifier 在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢? Qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意的是@Qualifier的参...

2020-01-19 18:06:25

阅读数 2423

评论数 0

原创 Java线上程序频繁JVM FGC问题排障与启示

线上Java程序的JVM频繁FGC,现象如图所示: 一直持续FGC 5次左右,每次耗时1秒多不等。 FGC的原因实际上是内存不够用,但是运维反映堆内存是2G,从运维提供的参数看也是。 内存实际上一直只用到1G以内。 这时候可以自己写一段代码输出堆内存数据,这是最准的: publ...

2019-10-16 17:30:51

阅读数 834

评论数 1

原创 线上java JVM问题排查

作者:霞落满天 第一部分 是我以前公司的一则正式案例: 第二部分 是我另一个博客上写的主要是最近发现大家问的比较多就写了此文 第一部分 线上真实故障案例 下面是一个老系统,代码写的有点问题导致出现这样一个JVM占比过高的问题,正常情况下也就是CPU负载不高的时候21:00左右的,也...

2020-01-10 10:42:35

阅读数 5297

评论数 0

原创 IDEA实用插件和技巧

《解决lambda expressions are not supported at this language level的问题》 《Intellij Idea 代码格式化/保存时自动格式化》 一、安装google-java-format preferences -> plugins ...

2019-03-09 16:53:06

阅读数 403

评论数 0

原创 Fiddler+夜神模拟器进行APP抓包

Fiddler+夜神模拟器进行APP抓包 作者:霞落满天 需求:对公司APP进行抓包获取详细的接口信息,这是现在开发必备的。 工具:Fiddler抓包,夜神模拟器 模拟手机 安装APP 1.下载Fiddler https://www.telerik.com/download/fiddle...

2020-01-14 18:31:15

阅读数 2676

评论数 1

原创 经典算法书籍推荐以及算法书排行【算法四库全书】

经典算法书籍推荐以及算法书排行【算法四库全书】 作者:霞落满天 https://linuxstyle.blog.csdn.net/ https://blog.csdn.net/21aspnet 行文方式:类似《四库全书》截取经典算法书目录和精华篇章 版权说明:本文于2019年5月5日首发于C...

2019-05-05 20:14:35

阅读数 9673

评论数 7

原创 SpringBoot使用笔记

其实也是参考官方的:http://spring.io/guides/gs/rest-service/,在官方代码基础上加入了很多实用的东西,比如运行环境启动命令等等。 官方文档:http://docs.spring.io/spring-boot/docs/current/reference/ht...

2017-01-01 14:13:47

阅读数 4803

评论数 3

原创 高性能微服务架构设计模式

高性能微服务架构设计模式 主讲:霞落满天 现在企业开发都是微服务架构,但是有很多问题,比如分布式定义,分布式的微服务怎么拆分,什么时候拆分,怎么做到高性能,中台怎么设计,读写分离模式难道仅仅是MySQL做主从就够了么?分库分表怎么使用,缓存和数据库之间怎么保持一致性,领域模型中的CQRS模式又...

2020-01-09 23:18:58

阅读数 1452

评论数 0

原创 Java字节码研究

关于怎么查看字节码的五种方法参考本人另一篇文章《Java以及IDEA下查看字节码的五种方法》 1.String和常连池 先上代码: public class TestApp { public static void main(String[] args) { ...

2019-03-05 18:46:45

阅读数 3754

评论数 1

原创 你真的掌握了并发编程volatile synchronized么?

先看代码: import java.util.concurrent.atomic.AtomicInteger; /** * * @author xialuomantian */ public class NewTest { static volatile int a = 1...

2020-01-05 22:09:16

阅读数 531

评论数 0

原创 多线程Atomic和ThreadLocal

public interface CounterI { void addOne(); int getCount(); } public class Counter implements CounterI { private static int count = 0...

2016-04-27 11:43:37

阅读数 4745

评论数 0

原创 有界阻塞队列ArrayBlockingQueue和无界阻塞队列LinkedBlockingQueue

ArrayBlockingQueue和LinkedBlockingQueue最大的区别是一个是有界无界,各有优劣。 先看实例代码: main函数起2个线程模拟生成消费者 import java.util.concurrent.ArrayBlockingQueue; import java....

2019-04-15 18:48:07

阅读数 1872

评论数 0

原创 合理估算线程池线程数量

参考《Java并发编程实战》 线程数量计算公式 公式:Nthread = Ncpu * Ucpu * (1+ W/C),各字段含义: Nthreads:线程数量 Ncpu:CPU的数量,Runtime.getRuntime().availableProcessors() ...

2019-04-18 15:24:15

阅读数 2085

评论数 1

原创 Java线程怎样映射到操作系统线程

先说多线程模型,参考经典教材《Operating System Concepts , Silberschatz ,9th edition》 中文版是《操作系统概念,第9版》 https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems...

2019-04-06 22:07:31

阅读数 1626

评论数 2

原创 Java一个线程能否结束另一个永不停止的线程

在Java中停止一个线程有三种办法: 1.正常结束执行; 2.发生异常; 3.被其他线程stop(Java官方不建议) 参考:https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitive...

2019-04-16 17:29:08

阅读数 1264

评论数 0

原创 多线程并发编程需要注意虚假唤醒Spurious wakeup

虚假唤醒 Spurious wakeup 如果等待线程在没有通知被调用的情况下唤醒,则称为Spurious wakeup。 解决方案就是: 使用while条件判断,更好的方案是避免使用wait这种低级的API,而是使用高级的并发工具。 因为这些高级的并发工具都是经过无数的坑才提炼出来的...

2019-04-19 17:48:04

阅读数 1299

评论数 1

原创 Java多线程的11种创建方式以及纠正网上流传很久的一个谬误

创建线程比较传统的方式是继承Thread类和实现Runnable,也可以用内部类,Lambda表达式,线程池,FutureTask等。 经常面试会问到继承Thread类和实现Runnable的区别,然后网上会流传如下这样的说法,这是错误的。 流传很久的错误说法: 这个说法是举一个火车票售票的...

2019-04-06 21:22:58

阅读数 4019

评论数 4

原创 Java使用字节码和汇编语言同步分析volatile,synchronized的底层实现

关于怎么查看字节码的五种方法参考本人另一篇文章《Java以及IDEA下查看字节码的五种方法》 查看汇编语言汇编码 说要看汇编还是很有必要的,因为有些地方比如加锁其实还是通过汇编实现的,只看字节码不能看出底层实现。 其实就是利用使用hsdis与jitwatch查看JIT后的汇编码。 1.首先...

2019-03-15 13:18:09

阅读数 794

评论数 0

原创 Unix/Linux开源世界资源链接汇总【不断更新】

最后更新:2012.12.04 说明:好东西在后面,Linux镜像基本涵盖全球主要下载点。【长期更新】 世界很大,我们很小,学海无涯,书山有路! 一.内核 Unix代码大全 http://minnie.tuhs.org/ UnixV6 https://github.com/R...

2019-11-22 09:47:25

阅读数 23401

评论数 11

原创 K8S的横向自动扩容的功能Horizontal Pod Autoscaling

K8S 作为一个集群式的管理软件,自动化、智能化是免不了的功能。Google 在 K8S v1.1 版本中就加入了这个 Pod 横向自动扩容的功能(Horizontal Pod Autoscaling,简称 HPA)。 HPA 与之前的 Deployment、Service 一样,也属于一种 K...

2019-10-29 14:25:41

阅读数 601

评论数 0

原创 从Jdk8到Jdk12的Java虚拟机垃圾回收(垃圾收集)相关论文和官方网站集锦

JVM架构图 《Java Program Execution Process in Detail | Working of JUST-IT-TIME Compiler (JIT) in Detail》 ---- 这张图微观画的很好:https://www.javainterviewpoi...

2019-03-24 03:00:23

阅读数 3941

评论数 2

原创 Spring4实战学习笔记

《Spring4实战 第4版》2016年4月新出版的,之前的第三版看起来还是不错的,所以看到新版就直接买下来。 英文版源码地址:Spring in Action, Fourth Edition Covers Spring 4 1.IOC装配Bean 参考【Spring实战42.2】,...

2016-05-12 18:42:40

阅读数 14522

评论数 2

原创 Java泛型使用需要小心

这是源自实际开发的一个坑,只是被我简化了。 Set<Integer> gs = null; Set gss = new HashSet(); gs = gss; gss.add("19"); ...

2019-10-09 20:36:45

阅读数 445

评论数 0

原创 SpringBoot整合Grpc实现跨语言RPC通讯

什么是gRPC gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行。它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查和身份验证。它还适用于分布式计算的最后一英里,用于将设备,移动应用程序和浏览器连接到后端服务。 ...

2019-09-11 10:46:17

阅读数 6121

评论数 2

原创 Linux(centOS)手动安装Apache+MySQL+PHP+Memcached+Nginx原创无错版

最后更新时间:2012.3.21 =================== 第一步:Apache安装(已更新到2.2.22) =================== 下载 去 http://www.apache.org自己找新的 http://httpd.apache.org/ 国内...

2011-07-03 13:21:22

阅读数 16675

评论数 1

原创 度量,跟踪和日志记录

今天,我有幸参加了2017年的分布式追踪峰会,其中有很多来自AWS / X-Ray,OpenZipkin,OpenTracing,Instana,Datadog,Librato等公司的人员,我很遗憾我忘记了这一点。有一次讨论转向了项目范围和定义。跟踪系统是否也应该管理日志记录?什么确实的记录,通过...

2019-08-20 19:14:38

阅读数 2091

评论数 0

原创 适用于软件工程的定律Augustine's laws

奥古斯丁定律(Augustine's laws)原是诺曼拉尔夫奥古斯丁提出的一系列诙谐的格言,但是实际上用于工程和项目管理,软件开发上也是很有借鉴意义的。 他是1975年至1977年担任美国陆军副部长的美国航空航天商人。1984年,他出版了他的定律这本书,和发表在2012年3月“声音与...

2019-07-24 11:55:27

阅读数 2273

评论数 0

原创 不要千言万语,一组漫画让你秒懂最终一致性

直接上图 如果你以前看过最终一致性的定义那么你一定会为这幅精彩漫画拍手叫好。 你要是不知道什么是最终一致性你可以看看下面的权威定义,当然了网上关于什么是最终一致性的帖子铺天盖地,也许你已经很明白了,即使这样你是不是依然为此图欢呼? 最终一致性是分布式理论中的重要,定义如下: 最终一...

2019-06-14 18:02:37

阅读数 4764

评论数 10

原创 分布式系统的现代消息传递

论文《分布式系统的现代消息传递》Modern Messaging for Distributed Sytems L Magnoni 通过IOP出版有限公司出版许可物理学学报:会议系列,608卷,第1会议 作者电子邮件 luca.magnoni@cern.ch 作者隶属关系 1欧...

2019-06-13 15:29:27

阅读数 1721

评论数 1

原创 valgrind massif检查长期闲置堆积导致的内存泄露

memcheck 内存泄露是线上很严重也是比较常见的故障,内存泄漏问题,一般可以用memcheck工具来检查。 http://valgrind.org/docs/manual/mc-manual.html Memcheck是一个内存错误检测器。它可以检测C和C ++程序中常见的以下问题。 ...

2019-05-02 00:29:09

阅读数 1897

评论数 3

原创 JVM设置对象直接进入年老代

1.先说明一个事情就是在jdk1.8之后已经没有永久代被元空间取代,那么元空间在哪里? 说明:元空间在本地内存,自然更不是所谓年老代等分代里。 Java PermGen去了哪里? Java虚拟机(JVM)使用其类的内部表示,包含每个类的元数据,如类层次结构信息,方法数据和信息(如字节码,堆栈...

2019-04-19 18:56:11

阅读数 1749

评论数 4

原创 一个冷僻的知识点try直接返回finally里的设置null其实无效

先看引用类型的代码: import java.util.HashMap; import java.util.Map; public class trycatchefinally { public static void main(String[] args) { Sy...

2019-04-26 09:32:37

阅读数 1846

评论数 6

原创 Linux内核的红黑树源码实现以及调用

红黑树可以说是程序员经常遇到的一种数据结构,不管是工作还是面试都会涉及,有时候还会让你写一段红黑树代码。 本文主要是讲Linux中的红黑树,关于红黑树定义参考wiki:https://en.wikipedia.org/wiki/Red%E2%80%93black_tree 其中《算法导论》中的...

2019-04-28 19:33:02

阅读数 2291

评论数 4

原创 小而美的Nginx日志分析利器GoAccess

一般会把Nginx的日志导入日志系统进行实时或者准实时的分析,不过不是每个公司都有这样的环境,还有有时候临时就是想分析监控下Nginx,那么GoAccess就很适合你,这块工具小而美,功能很强大。 GoAccess是一个开源的实时网络日志分析器和交互式查看器,可以在Linux/Unix系统中的终...

2019-04-30 11:18:46

阅读数 2461

评论数 8

原创 你需要知道的高性能并发框架Disruptor原理

Disruptor的小史 现在要是不知道Disruptor真的已经很outer了,Disruptor是英国外汇交易公司LMAX开发的一款开源的高性能队列,LMAX Disruptor是一个高性能的线程间消息传递库,它源于LMAX对并发性,性能和非阻塞算法的研究,如今构成了其Exchange基础架...

2019-04-30 16:55:10

阅读数 1557

评论数 3

原创 支撑Java框架的基础技术:泛型,反射,动态代理,cglib

以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写一个简单的Spring框架。 一.静态代码块和非静态代码块以及构造函数的调用顺序 静态...

2019-04-22 10:29:24

阅读数 5402

评论数 2

原创 Java线上问题排障:Linux内核bug引发JVM死锁导致线程假死

Java本质上还是离不开操作系统,一来Java源码是用C/C++实现的,二来java进程还是需要依附于操作系统和硬件资源,有时候一些问题是操作系统级别导致的,下面的整个事件是源自一则真实的线上案例。 过程: JVM死锁导致线程不可用,然后会瞬间起N个线程,当然起再多也是不可用的,因为需要的...

2019-04-28 15:16:42

阅读数 2931

评论数 4

原创 Java12和Jdk12安装以及OpenJdk12源码

文档: JDK 12文档:https://docs.oracle.com/en/java/javase/12/ 下载: OracleJDK12下载:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads...

2019-03-23 14:12:39

阅读数 13984

评论数 15

原创 为什么Java8中HashMap链表使用红黑树而不是AVL树

在Jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度。 那么很多人就有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树阿? 最主要的一点是: 在CurrentHashMap中是加锁了的,实际上是读写锁,如果写冲...

2019-04-01 01:51:46

阅读数 8520

评论数 2

原创 好理解的Java内存虚假共享(False Sharing)性能损耗以及解决方案

虚假共享(False Sharing)也有人翻译为伪共享 参考https://en.wikipedia.org/wiki/False_sharing 在计算机科学中,虚假共享是一种性能降低的使用模式,它可能出现在具有由高速缓存机制管理的最小资源块大小的分布式一致高速缓存的系统中。当系统参与者将...

2019-04-30 19:06:04

阅读数 1480

评论数 5

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