![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
-----------JAVA---------------
文章平均质量分 81
火锅技术栈
我不能保证写的每个地方都是对的,但是至少能保证每一句话、每一行代码都经过了认真的推敲、仔细的斟酌。每一篇文章的背后,希望都能看到自己对于技术、对于生活的态度。
我相信乔布斯说的,只有那些疯狂到认为自己可以改变世界的人才能真正地改变世界。面对压力,我可以挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。
其实我想说的是,我只是一个程序员,这就是我现在纯粹人生的全部。
展开
-
springboot整合springdata jpa全能书
springboot整合springdatajpa原创 2023-02-23 10:46:39 · 771 阅读 · 0 评论 -
代码问题排查与系统优化手册
软件工程领域存在一个共识:维护代码所花费的时间要远多于写代码。而整个代码维护过程中,最惊心动魄与扣人心弦的部分,莫过于问题排查(Trouble-shooting)了。特别是那些需要 7x24 小时不间断维护在线业务的一线服务端程序员们,大大小小的问题排查线上救火早已成为家常便饭,一不小心可能就吃成了自助餐 —— 竖着进躺着出,吃不了也兜不住。本文分享作者在服务端问题排查方面的一些经验,包括常见问题、排查流程、排查工具,结合实际项目中发生过的惨痛案例进行现身说法。原创 2021-12-30 10:47:51 · 620 阅读 · 0 评论 -
分布式系统技术选型
服务注册中心Eureka: 官方已经不在维护了 (AP) Zookeeper (CA) Consul (CA) Etcd (CP) Nacos(AP)服务调用Ribbon:好像也要不维护的样子 Feign:不再维护 LoadBlance OpenFeign服务熔断Hystrix: 官方已经不在维护了 resilience4j sentienl服务网关Zuul 现在基本不维护 Spring Cloud Gateway Kong APISIX服务配置S...原创 2021-02-07 15:19:03 · 273 阅读 · 0 评论 -
线上故障快速排查手册
简介:有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器、Java应用、数据库、Redis、网络和业务六个层面分享线上故障排查的思路和技巧。较长,同学们可收藏后再看。前言线上定位问题时,主要靠监控和日志。一旦超出监控的范围,则排查思路很重要,按照流程化的思路来定位问题,能够让我们在定位问题时从容、淡定,快速的定位到线上的问题。线上问题定位思维导图一 服务器层面1.1 磁盘1.1.1 问题现象当磁盘容量不足的时候,应用时常会抛出如下的异常信息:.原创 2021-01-08 10:33:25 · 620 阅读 · 0 评论 -
4大JVM性能分析工具详解,及内存泄漏分析方案
打开终端,查看:输入 diskutil list找到对应的磁盘名称,加载:sudo diskutil mount /dev/disk2s3输入密码加载完成sudo diskutil mount /dev/disk2s1Tuxera NTFS for Mac安装步骤:原创 2020-10-24 07:16:48 · 470 阅读 · 1 评论 -
JVM问题排查基本思路分析
Story background 回望2018年12月,这也许是程序员们日夜不得安宁的日子,皆因各种前线的系统使用者都需要冲业绩等原因,往往在这个时候会向系统同时写入海量的数据,当我们的应用或者数据库服务器反应不过来的时候,就会产生各种各样诡异的问题,诸如表现出来就是系统变得巨卡无比,无法使用,或者周期性卡顿,令人发指,用户轻则问候系统全家,重则心脏病发。总而言之每天都脑壳疼!归根到底是我们的应用服务器或数据库服务器因为扛不住流量造成的系统BUG问题暴露,诸如OOM等,呈现出机器的三高,这里说的三高并原创 2020-10-20 10:44:22 · 579 阅读 · 1 评论 -
Java 的垃圾回收从头到尾
简介:之前上学的时候有一个梗,说在食堂里吃饭,吃完把餐盘端走清理的是 C++ 程序员,吃完直接就走的是 Java 程序员。确实,在 Java 的世界里,似乎我们不用对垃圾回收那么的关注。很多初学者不懂 GC,也能写出一个能用甚至还不错的程序或系统。阿里妹导读:之前上学的时候有一个梗,说在食堂里吃饭,吃完把餐盘端走清理的是 C++ 程序员,吃完直接就走的是 Java 程序员。确实,在 Java 的世界里,似乎我们不用对垃圾回收那么的关注。很多初学者不懂 GC,也能写出一个能用甚至还不错的程序..原创 2020-10-01 14:00:54 · 166 阅读 · 0 评论 -
AQS原理
前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS的关联,来深入解读AQS相关独占锁的知识点,同时采取问答的模式来帮助大家理解AQS。由于篇幅原因,本篇文章主要阐述AQS中独占锁的逻辑和Sync原创 2020-10-01 13:59:32 · 537 阅读 · 0 评论 -
Java“锁”事
前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:1. 乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。原创 2020-10-01 13:57:35 · 128 阅读 · 0 评论 -
玩转java面向函数编程lambda表达式Function,Consumer,Predicate,Supplier
上代码: private static final Set<Object> setOs = Sets.newLinkedHashSet(); /** * Applies this function to the given argument. * * @param accountId ->id * @param judge...原创 2020-03-13 16:50:52 · 504 阅读 · 0 评论 -
面试经验
自我介绍 蚂蚁金服-内推的,面了3面技术 携程(offer)内推-只有一次视频面 美团成都提前批(收到offer) 中兴(一面挂) 滴滴(二面挂,现场面) 招银网络(offer,现场面) 华为(offer,现场面) 贝贝网 大疆(只记得3面) 自我介绍本人妹子,985硕士,211本科,专业都是软件...原创 2020-01-30 21:31:01 · 769 阅读 · 0 评论 -
SpringCloud架构
架构Eureka、Ribbon、Feign、Zuul就是优化并发冲突如果你基于Spring Cloud对外发布一个接口,实际上就是支持http协议的,对外发布的就是一个最最普通的Spring MVC的http接口feign,他是对一个接口打了一个注解,他一定会针对这个注解标注的接口生成动态代理,然后你针对feign的动态代理去调用他的方法的时候,此时会在底层生成ht...原创 2019-12-02 20:36:22 · 949 阅读 · 5 评论 -
synchoronized\Lock锁源码分析
owner 当前锁线程waitset 等待队列(o.wait())cxqEntryList 同步队列等待队列AQS加锁流程原创 2019-11-30 13:22:36 · 201 阅读 · 0 评论 -
I/O模型以及多路复用三种实现方式select、poll和epoll比较及区别
I/O过程:图图中明显忽略了很多细节,仅显示了涉及到的基本步骤。 注意图中用户空间和内核空间的概念。用户空间是常规进程所在区域。JVM 就是常规进程, 驻守于用户空间。用户空间是非特权区域:比如,在该区域执行的代码就不能直接访问硬件设备。 内核空间是操作系统所在区域。内核代码有特别的权力:它能与设备控制器通讯,控制着用户区域 进程的运行状态,等等。最重要的是,所有 I/O 都...原创 2019-11-26 15:29:02 · 2841 阅读 · 0 评论 -
java虚拟机(JVM)服务器Linux优化案例
当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化。但GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素很大程度上增加了GC优化的难度。即便如此,GC调优也不是无章可循,仍然有一些通用的思考方法。本篇会介绍这些通用的GC优化策略和相关实践案例,主要包括如下内容: > 优化前准备: 简单回顾JVM...原创 2019-11-19 14:19:46 · 416 阅读 · 0 评论 -
大数据技术栈
技术栈全貌大数据平台技术栈下面自底向上介绍各个层的主要项目。1 采集层和传输层采集层Sqoop在hadoop和关系型数据库之间转换数据。FlumeFlume是一个分布式的高可用的数据收集、聚集和移动的工具。通常用于从其他系统搜集数据,如web服务器产生的日志,通过Flume将日志写入到Hadoop的HDFS中。FlumeCanal数据抽取是 ETL...原创 2019-11-06 20:06:42 · 553 阅读 · 0 评论 -
Spring Boot启动流程
我们开发任何一个Spring Boot项目,都会用到如下的启动类从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱,我们要从这两位开始就可以了。SpringBootApplication背后的秘密虽然定义使用了多个Annotation...原创 2019-11-04 15:10:19 · 177 阅读 · 0 评论 -
Java虚拟机(JVM)- 类加载的详细过程
了解 类加载的过程,有利于在类初始化时进行一些功能操作 本文全面讲解类加载过程,希望你们会喜欢。总体过程:底层一点:JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这 五个过程。综述:...原创 2019-11-01 15:13:29 · 195 阅读 · 2 评论 -
java线程状态反观锁
java线程变化的状态转换图如下:1、新建状态(New):新创建了一个线程对象。2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。...原创 2019-10-31 20:00:38 · 105 阅读 · 0 评论 -
java混淆异常
1、运行时异常和非运行时异常(1)运行时异常都是RuntimeException类及其子类异常,"出现都是你的代码问题,你可以选择处理也可不处理,代码优化可以处理"。如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免...原创 2019-10-31 14:58:19 · 385 阅读 · 0 评论 -
groovy脚本跟java的一些差异
1、Default imports,默认情况下,导入下面的包:java.io. *java.lang。*java.math.BigDecimal中java.math.BigInteger中java.net.*java.util中.*groovy.lang.*groovy.util.*2、Multi-methods,groovy在运行时根据参数的类型选择要调用的方法,称为运行时调度...原创 2019-10-31 11:29:30 · 249 阅读 · 0 评论 -
JDK8中新增StampedLock原理
http://ifeve.com/jdk8%E4%B8%ADstampedlock%E5%8E%9F%E7%90%86%E6%8E%A2%E7%A9%B6/StampedLock是并发包里面jdk8版本新增的一个锁,该锁提供了三种模式的读写控制,三种模式分别如下: 写锁writeLock,是个排它锁或者叫独占锁,同时只有一个线程可以获取该锁,当一个线程获取该锁后转载 2017-10-01 19:51:08 · 3375 阅读 · 0 评论 -
Java指针类:Unsafe
Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概...转载 2019-02-15 21:10:51 · 647 阅读 · 2 评论 -
unsafe类简介
前言Unsafe是Java中一个底层类,包含了很多基础的操作,比如数组操作、对象操作、内存操作、CAS操作、线程(park)操作、栅栏(Fence)操作,JUC包、一些三方框架都使用Unsafe类来保证并发安全。Unsafe类在jdk 源码的多个类中用到,这个类的提供了一些绕开JVM的更底层功能,基于它的实现可以提高效率。但是,它是一把双刃剑:正如它的名字所预示的那样,它是Unsafe的,...原创 2019-01-06 16:10:14 · 6216 阅读 · 0 评论 -
链表常用函数(java实现)
废话少说,上链表的数据结构class ListNode { ListNode next; int val; ListNode(int x){ val = x; next = null; }}1.翻转链表ListNode reverse(ListNode node){ ListNode prev = ...原创 2018-11-27 22:47:04 · 3417 阅读 · 0 评论 -
Java开发人员必知必会的常用类库和API
一个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车。《Effective Java》的作者Joshua Bloch曾经说过:“建议使用现有的API来开发,而不是重复造轮子”。在本文中,我将分享一些Java开发人员应该熟悉的最有用的和必要的库和API。顺便说一句,这里不包括框架,如Spring和Hibernate因为他们非常有名,都有特定的功能。本文总结了日志、JSON解析、单测、...原创 2018-11-26 22:12:05 · 1339 阅读 · 1 评论 -
Java反射中Class.forName()加载类和使用ClassLoader加载类的区别
最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。解释在java中Class.forName()和ClassLoader都可以对类进行加载。ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来获取描述此类的二进制字...转载 2018-10-31 14:07:25 · 2650 阅读 · 3 评论 -
MyBatis 获取子类的属性
这里有个model类:基类:public class user { public int getId() { return id; } public void setId(int id) { this.id = id; } private int id;}子类:public class vipUser extends user { ...原创 2018-06-01 10:28:27 · 4457 阅读 · 0 评论 -
Java读书笔记十一(Java中的内省机制)
1.前言最近在学习Java的时候,突然发现了这个概念,鉴于好奇心的压迫,于是打算写一篇博客来总结一下。2.什么是内省机制为了让程序员们更好的从左Java对象的属性,SUN公司开发了一套API,就被我们称为“内省”,有利于我们对类对象的属性的操作,减少了代码的数量。3.内省和反射有什么区别反射式在运行状态把Java类中的各种成分映射成相应的Java类,可...转载 2018-06-11 18:12:40 · 1645 阅读 · 0 评论 -
java实现K-means算法,k-means聚类算法原理
/** * 需要所有point 以及族中心list * * @author:Yien * @when:2018年5月20日下午3:14:09 * @Description:TODO * @param:@param pointList * @param:@param centerPointList * @param:@return * @return:Map&...原创 2018-05-20 19:33:19 · 1043 阅读 · 0 评论 -
Java 工程师之路
主要版本 更新时间 备注 v1.0 2015-08-01 首次发布 v1.1 2018-03-12 增加新技术知识、完善知识体系 v2.0 2019-02-19 ...原创 2019-02-20 21:47:39 · 4437 阅读 · 0 评论 -
spring 事务该不该加trycatch
spring 加trycatch不支持事物回滚TransactionAspectSupport.class原因:invoke方法:try {//执行事物:这里如果方法没有抛出异常继续执行result = invocation.proceedWithInvocation();} catch (Throwable var17) {//捕获到异常回滚this.completeTrans...原创 2019-03-08 22:50:33 · 3826 阅读 · 0 评论 -
Java8 Stream&Lambda表达式实例讲解
实例代码见文末。本篇文章主要内容:流基本的常用方法 一种特化形式的流——数值流 Optional 类 如何构建一个流 collect 方法 并行流相关问题 实例代码一. 一般方法首先我们先创建一个 Person 泛型的 ListList<Person> list = new ArrayList<>();list.add(new Person...原创 2019-07-16 16:51:09 · 3539 阅读 · 0 评论 -
分布式事务常用的解决方案
1、问题分布式事务了解吗?你们如何解决分布式事务问题的?2、分析只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑,你起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。现在面试,分布式系统成了标配,而分布式系统带来的分布式事务也成了标配了。因为你做系统肯定要用事务吧,那你用事务的话,分布式系统之后肯定要用分布式事...原创 2019-05-26 22:43:16 · 675 阅读 · 0 评论 -
保证缓存与数据库的双写一致性解决方案
一般来说,就是如果你的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况串行化之后,就会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。1、最初级的缓存不一致问题以及解决方案问题:先修改数据库,再删除缓存,如果删...原创 2019-05-12 22:19:45 · 710 阅读 · 0 评论 -
lambda表达式拿泛型T的真实类型
1、通过接口类型stringConsumer的class是没有泛型T的2、应该从匿名内部类的class(也就是实现类)获取:解决办法1)自己实现接口2)通过lambda生成的匿名类class对象获取 /** * 拿泛型的T 类型 * interface Consumer<T> * @when 2019...原创 2019-04-18 21:34:32 · 5341 阅读 · 0 评论 -
红黑树算法Java实现
原理: /** * 红黑树性质四点: * <p> * 1、每个节点要么是红色,要么是黑色。 * 2、根节点必须是黑色 * 3、 红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色)。 * 4、对于每个节点,从该点至null(树尾端)的任何路径,都含有相同个数的黑色节点。 * 隐藏性质:左右子树高度差...原创 2019-04-17 23:04:26 · 3125 阅读 · 0 评论 -
Morris算法K叉树版本Java实现
算法详解:1. 如果当前节点的左子节点为空时,输出当前节点,并将当前节点置为该节点的右子节点;2. 如果当前节点的左子节点不为空,找到当前节点左子树的最右节点(该节点为当前节点中序遍历的前驱节点); 2.1. 如果最右节点的右指针为空(right=null),将最右节点的右指针指向当前节点,当前节点置为其左子节点; 2.2. 如果最右节点的右指针不为空,将最右节点右指...原创 2019-04-17 22:58:16 · 1649 阅读 · 0 评论 -
synchronized使用场景及区别
参考syn锁:https://www.cnblogs.com/lixuwu/p/5676143.html实例对象级别的锁和类对象级别的锁区别 一个锁的是类对象,一个锁的是实例对象。 若类对象被lock,则类对象的所有同步方法全被lock;若实例对象被lock,则该实例对象的所有同步方法全被lock 对象锁 1、实例对象级别的锁private final Object lock...原创 2019-03-17 20:04:28 · 5082 阅读 · 0 评论 -
note sth..
IO模式:对于一次IO操作数据会先被拷贝到操作系统内核缓冲区,然后从操作系统内核缓冲区再拷贝到应用程序内存空间。当一个IO操作发生时会发生两个阶段:1、等待数据准备,2、将数据从内核拷贝到进程中。因为这两个阶段Linux系统产生了五种网络模式方案:1、阻塞IO:在数据准备阶段,用户进程会被阻塞,一直等到数据的到来。知道数据到来并被拷贝到用户内存后该阻塞才会解除2、非阻塞IO:数据...原创 2019-10-31 15:04:37 · 2779 阅读 · 76 评论