![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 75
Bolon0708
昨日已成过往,明日未来可期。
展开
-
我把 ThreadLocal 能问的,都写了
今天我们再来盘一盘 ThreadLocal ,这篇力求对 ThreadLocal 一网打尽,彻底弄懂 ThreadLocal 的机制。有了这篇基础之后,下篇再来盘一盘 ThreadLocal 的进阶版,等我哈。话不多说,本文要解决的问题如下: 为什么需要 ThreadLocal 应该如何设计 ThreadLocal 从源码看ThreadLocal 的原理 ThreadLocal 内存泄露之为什么要用弱引用 ThreadLocal 的最佳实践 I转载 2021-08-28 09:50:30 · 478 阅读 · 0 评论 -
JAVA线上故障排查全套路
线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jsta转载 2021-07-07 17:26:13 · 413 阅读 · 0 评论 -
《我想进大厂》之JVM夺命连环10问
这是面试专题系列第五篇JVM篇。这一篇可能稍微比较长,没有耐心的同学建议直接拖到最后。说说JVM的内存布局?Java虚拟机主要包含几个区域:堆:堆Java虚拟机中最大的一块内存,是线程共享的内存区域,基本上所有的对象实例数组都是在堆上分配空间。堆区细分为Yound区年轻代和Old区老年代,其中年轻代又分为Eden、S0、S1 3个部分,他们默认的比例是8:1:1的大小。栈:栈是线程私有的内存区域,每个方法执行的时候都会在栈创建一个栈帧,方法的调用过程就对应着栈的入栈和出栈的过程。每个栈帧转载 2021-03-10 18:01:46 · 668 阅读 · 0 评论 -
面试必考的 HashMap,这篇总结到位了
目录1 概述2 HashMap的数据结构3 三大集合与迭代子4 源码分析单线程rehash多线程并发下的rehashFast-fail线程安全解决方案1 概述HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长.HashMap是非线程安全的,只适用于单线程环境,多线程环境可以采用并发包下的concurrentHashMapHashMap 实现了Serializable接口转载 2021-02-28 19:29:42 · 509 阅读 · 0 评论 -
框架篇:小白也能秒懂的Linux零拷贝原理
目录前言零拷贝的好处内核空间和用户空间缓冲区和虚拟内存传统的 I/Ommap+write实现的零拷贝sendfile实现的零拷贝带有DMA收集拷贝功能的sendfile实现的零拷贝java提供的零拷贝方式欢迎指正文中错误参考文章Reference前言大白话解释,零拷贝就是没有把数据从一个存储区域拷贝到另一个存储区域。但是没有数据的复制,怎么可能实现数据的传输呢?其实我们在java NIO、netty、kafka遇到的零拷贝,并不是不复制数据,而是减少不转载 2021-02-27 19:28:10 · 294 阅读 · 0 评论 -
【分布式】分布式常见的十大坑,你了解几个?
本篇主要内容如下:主要内容前言我们都在讨论分布式,特别是面试的时候,不管是招初级软件工程师还是高级,都会要求懂分布式,甚至要求用过。传得沸沸扬扬的分布式到底是什么东东,有什么优势?借用火影忍术风遁·螺旋手里剑看过火影的同学肯定知道漩涡鸣人的招牌忍术:多重影分身之术。 这个术有一个特别厉害的地方,过程和心得:多个分身的感受和经历都是相通的。比如 A 分身去找卡卡西(鸣人的老师)请教问题,那么其他分身也会知道 A 分身问的什么问题。 漩涡鸣人有另外一个超级厉害的忍转载 2020-09-28 14:23:05 · 1080 阅读 · 0 评论 -
关于多线程中抛异常的这个面试题我再说最后一次!
一道面试题我一年前写过这篇文章《有的线程它死了,于是它变成一道面试题》,这是早期作品,遣词造句,排版行文都有一点稚嫩,但是不知咋地,还是有很多人看过。甚至已经进入了某网红公司的面试题库里面。所以我后面应该会重写一下,翻新翻新,再补充一点新的东西进去。现在先回顾一下这篇文章抛出的问题和问题的答案:一个线程池中的线程异常了,那么线程池会怎么处理这个线程?这个题是我遇到的一个真实的面试题,当时并没有回答的很好。然后通过上面的文章,我在源码中寻找到了答案。先给大家看...转载 2020-09-22 10:16:45 · 301 阅读 · 0 评论 -
你必须懂也可以懂的@Async原理
目录1.前言2.探秘之旅2.1 实现原理2.2 线程池使用2.3 异常处理2.4 返回值类型1.前言想你在看这篇文章之前有过使用@Async注解进行任务异步处理的经历,在项目开发过程中,针对非主流程、非实时、耗时的任务,往往会进行异步处理,这样既不会影响主流程,还会提高主流程的响应时间。在使用@Async注解进行异步处理的过程中,相信你也踩过不少的坑,比如:任务并没有异步执行,由于共用线程池导致任务之间相互影响、异步任务出现异常不知道如何处理等等。今天我将带着你去了解它的转载 2020-09-08 13:18:11 · 1623 阅读 · 0 评论 -
为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?
阿里巴巴Java规范:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。1.异常的分类先来看看异常的分类error是一定会回滚的这里Exception是异常,他又分为运行时异常RuntimeException和非运行时异常 可查的异常(checked exceptions):Exception下除了RuntimeException外的异常 不可查的异常(unchecked exceptions):Ru.转载 2020-08-13 16:38:47 · 529 阅读 · 0 评论 -
【两万字】面试官:听说你很懂集合源码,接我二十道问题!
【高能预警】:两万字长文,建议先收藏再看,深度源码分析,二十个问题带你一网打尽集合面试。问题一:看到这个图,你会想到什么?(PS:截图自《编程思想》)答:这个图由Map指向Collection的Produces并不是说Map是Collection的一个子类(子接口),这里的意思是指Map的KeySet获取到的一个视图是Collection的子接口。我们可以看到集合有两个基本接口:Map和Collection。但是我个人认为Map并不能说是一个集合,称之为映射或许更为合适,因..转载 2020-06-28 15:13:00 · 366 阅读 · 0 评论 -
如何记忆 Spring Bean 的生命周期
我之前在准备面试时,去网上搜过答案,大多以下图给出的流程作为答案。但是当我第一次看到该图时,就产生了很多困扰.“Aware,BeanPostProcessor......这些都是什么啊?而且这么多步骤,太多了,该怎么记啊?”。其实要记忆该过程,还是需要我们先去理解.本文将从以下两方面去帮助理解 Bean 的生命周期:生命周期的概要流程:对 Bean 的生命周期进行概括,并且结合代码来理解; 扩展点的作用:详细介绍 Bean 生命周期中所涉及到的扩展点的作用。3. 生命周期的概要流转载 2020-06-16 14:17:38 · 1748 阅读 · 0 评论 -
如果让你做一个秒杀系统,你会如何设计?
前言秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题。整体思考首先从高维度出发,整体思考问题。秒杀无外乎解决两个核心问题,一是并发读,一是并发写,对应到架构设计,就是高可用、一致性和高性能的要求。关于秒杀系统的设计思考,本文即基转载 2020-06-09 13:40:14 · 1481 阅读 · 0 评论 -
8 个优化建议让你的接口健步如飞
前言最近对外接口偶现 504 超时问题,原因是代码执行时间过长,超过 nginx 配置的 15 秒,然后真枪实弹搞了一次接口性能优化。在这里结合优化过程,总结了接口优化的八个要点,希望对大家有帮助呀~ 数据量比较大,批量操作数据入库 耗时操作考虑异步处理 恰当使用缓存 优化程序逻辑、代码 SQL 优化 压缩传输内容 考虑使用文件/MQ等其他方式暂存,异步再落地 DB 跟产品讨论需求最恰当,最舒服的实现方式 先看一下我们对外转转载 2020-06-09 13:24:20 · 1151 阅读 · 0 评论 -
新鲜出炉,直接带你弄懂 Spring Boot Jar 启动原理!
1. 概述Spring Boot 提供了 Maven 插件spring-boot-maven-plugin,可以方便的将 Spring Boot 项目打成jar包或者war包。考虑到部署的便利性,我们绝大多数 99.99% 的场景下,我们会选择打成jar包。这样,我们就无需在部署项目的服务器上,配置相应的 Tomcat、Jetty 等 Servlet 容器。那么,jar包是如何运行,并启动 Spring Boot 项目的呢?这个就是本文的目的,一起弄懂 Spring Bootj...转载 2020-06-04 16:01:20 · 1299 阅读 · 1 评论 -
玩转Java8中的 Stream 之从零认识 Stream
相信Java8的Stream 大家都已听说过了,但是可能大家不会用或者用的不熟,文章将带大家从零开始使用,循序渐进,带你走向Stream的巅峰。操作符什么是操作符呢?操作符就是对数据进行的一种处理工作,一道加工程序;就好像工厂的工人对流水线上的产品进行一道加工程序一样。Stream的操作符大体上分为两种:中间操作符和终止操作符中间操作符对于数据流来说,中间操作符在执行制定处理程序后,数据流依然可以传递给下一级的操作符。中间操作符包含8种(排除了parallel,sequentia转载 2020-05-22 09:19:21 · 380 阅读 · 0 评论 -
Java 代码精简之道
前语古语有云:道为术之灵,术为道之体;以道统术,以术得道。其间:“道”指“规矩、道理、理论”,“术”指“办法、技巧、技能”。意思是:“道”是“术”的魂灵,“术”是“道”的肉体;能够用“道”来统管“术”,也能够从“术”中取得“道”。在拜读大佬“孤尽”的文章《Code Review是苦涩但有意思的修行》时,感触最深的一句话便是:“优质的代码必定是少便是多的精兵准则”,这便是大佬的代码精简之“道”。工匠寻求“术”到极致,其实便是在寻“道”,且离悟“道”也就不远了,亦或是现已得道,这便是“工转载 2020-05-20 14:26:06 · 363 阅读 · 0 评论 -
Spring Job?Quartz?XXL-Job?年轻人才做选择~
摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/Job/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. 快速入门 Spring Task 3. 快速入门 Quartz 单机 4. 再次入门 Quartz 集群 5. 快速入门 XXL-JOB 6. 快速入门 Elastic-Job 666. 彩蛋 本文在提供完整代码示例,可见 https://github.com/YunaiV/Spr.转载 2020-05-15 09:15:37 · 1790 阅读 · 0 评论 -
Map 集合怎么也有这么多坑?一不小心又踩了好几个!
本文设计知识点如下:不是所有的 Map 都能包含 null这个踩坑经历还是发生在实习的时候,那时候有这样一段业务代码,功能很简单,从 XML 中读取相关配置,存入 Map 中。代码示例如下:那时候正好有个小需求,需要改动一下这段业务代码。改动的过程中,突然想到HashMap并发过程可能导致死锁的问题。于是改动了一下这段代码,将HashMap修改成了ConcurrentHashMap。美滋滋提交了代码,然后当天上线的时候,就发现炸了。。。应用启动过程发生NPE...转载 2020-05-14 14:48:25 · 375 阅读 · 0 评论 -
面试官:听说你看过ThreadLocal源码?我来瞅瞅?
全文共10000+字,31张图,这篇文章同样耗费了不少的时间和精力才创作完成,请大家点点关注+在看,感谢。对于ThreadLocal,大家的第一反应可能是很简单呀,线程的变量副本,每个线程隔离。那这里有几个问题大家可以思考一下: ThreadLocal的key是弱引用,那么在 threadLocal.get()的时候,发生GC之后,key是否为null? ThreadLocal中ThreadLocalMap的数据结构? ThreadLocalMap的Hash算法? ...转载 2020-05-14 16:06:15 · 1166 阅读 · 2 评论 -
当前疫情下火爆的直播应用,你了解背后的技术架构吗?
这场疫情让线下零售降至冰点,但是却带火了直播应用。直播电商、直播教育等各类直播应用可谓赢得了历史性的机会,很多大众开始接受并认可这种新型应用的便利和价值,个人感觉随着5G的普及,『直播+垂直领域+精细化的私域流量』将会是互联网的一个大热点,迎来真正的红利期。直播行业大概在10年多前就开始兴起了,秀场直播和游戏直播是PC时代比较成功的应用场景,直到16年,随着移动互联网的大规模普及,直播行业迎来...转载 2020-05-08 11:11:53 · 852 阅读 · 0 评论 -
面试官没想到,一个Volatile都能吹半小时
Volatile可能是面试里面必问的一个话题吧,对他的认知很多朋友也仅限于会用阶段,今天我们换个角度去看看。先来跟着丙丙来看一段demo的代码:你会发现,永远都不会输出有点东西这一段代码,按道理线程改了flag变量,主线程也能访问到的呀?为会出现这个情况呢?那我们就需要聊一下另外一个东西了。JMM(JavaMemoryModel)JMM:Java内存模型,是java虚拟机规...转载 2020-04-29 13:49:46 · 669 阅读 · 1 评论 -
【并发编程】MESI--CPU缓存一致性协议
目录概念#MESI协议中的状态#MESI状态转换图#操作#概念#MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议。MESI协议中的状态#CPU中每个缓存行(caceh line)使用4种状态进行标记(使用额外的两位(bit)表示)...转载 2020-04-29 11:11:22 · 241 阅读 · 0 评论 -
一口气带你踩完五个 List 的大坑
List 可谓是我们经常使用的集合类之一,几乎所有业务代码都离不开 List。既然天天在用,那就没准就会踩中这几个 List 常见坑。今天我们就来总结这些常见的坑在哪里,捞自己一手,防止后续同学再继续踩坑。本文设计知识点如下:List 踩坑大全ArrayList 这是李逵,还是李鬼?以前实习的时候,写过这样一段简单代码,通过Arrays#asList将数组转化为 L...转载 2020-04-24 09:27:10 · 477 阅读 · 0 评论 -
秒懂MyBatis分页插件PageHelper基于ThreadLocal的实现原理分析
你或许用过mybatis,但你未必用过github上的一个基于mybatis的分页插件PageHelper。项目地址:https://github.com/pagehelper/Mybatis-PageHelper小用了一下,感觉还是蛮不错的。使用MyBatis分页插件PageHelper非常简单,代码如下://使用方法可参考https://github.com/pagehelpe...转载 2020-01-10 10:27:19 · 2914 阅读 · 0 评论 -
网站发展历程九大阶段,及知识体系梳理
目录网站发展历程java入门框架基础阶段一:单体项目阶段二:物理分离应用和数据库阶段三:缓存化、静态化阶段四:应用负载均衡,集群阶段五:动静分离阶段六:分布式缓存、缓存集群阶段七:读写分离、分库分表阶段八:微服务架构阶段九:NoSql与分布式搜索引擎B站视频讲解结束语网站发展历程用思维导图学习java真的是一个不错的方式!今天,我们用...转载 2019-12-26 16:31:44 · 1336 阅读 · 0 评论 -
初识Spring Cloud的各个组件
目录什么是Spring cloudSpring Cloud 的版本Spring Cloud 的服务发现框架——Eureka负载均衡之 Ribbon什么是 RestTemplate?为什么需要 Ribbon?Nginx 和 Ribbon 的对比Ribbon 的几种负载均衡算法什么是 Open Feign必不可少的 Hystrix什么是 Hystrix之熔断...转载 2019-12-11 15:49:42 · 536 阅读 · 0 评论 -
为什么阿里巴巴要禁用Executors创建线程池?
目录写在前面线程池的定义Executors创建线程池的方式ThreadPoolExecutor对象线程池执行任务逻辑和线程池参数的关系Executors创建返回ThreadPoolExecutor对象OOM异常测试如何定义线程池参数看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式...转载 2019-12-10 15:24:27 · 326 阅读 · 0 评论 -
尽量避免 Bug 的一些手法
最近参与了几个需求开发,BUG很少,有些需求没BUG,有些才一个BUG,搞的测试人员还发牢骚说,大佬,你负责的项目,bug都少的可怜,叫俺怎么活?哈哈,其实测试人员要感谢我才对,因为开发人员的代码质量高了,会极大的提升测试人员测试的速度,因为测试过程中非常顺畅,没啥阻碍的东西。设想一下,如果提测后,代码BUG满天飞,测试人员不断的提BUG单,开发人员不断的修复,一不小心还可能修复出其他...转载 2019-12-06 09:48:38 · 273 阅读 · 0 评论 -
SpringBoot配置Filter过滤器
在SpringBoot中使用Filter有两种方式注解注册Filter 代码注册通过代码注册的方式来使用Filter:1、创建自定义的InterfaceAuthenticationFilter类,实现Filter接口import org.apache.log4j.Logger;import javax.servlet.*;import javax.servlet.h...原创 2019-12-03 16:10:37 · 441 阅读 · 0 评论 -
node.js快速安装教程
1、node.js官网下载:https://nodejs.org/en/download/,下载msi文件到本地电脑2、双击msi文件,选择好安装路径之后,一路next,傻瓜式安装即可(不需要修改默认配置)3、安装完成后,win+R打开cmd命令行控制台输入node -v查看安装版本node自带了NPM,输入npm -v可查看npm版本4、npm默认的仓库地址是在国...原创 2019-12-02 21:06:08 · 423 阅读 · 0 评论 -
如何使用idea上传项目到github(无废话简化版)
1、首先确保自己的idea已经安装了git,并且test通过(安装和配置过程不再赘述)2、将自己的github账号保存到idea中,这样第4步上传操作就不需要登录了3、选择VCS菜单栏,如下图箭头所示的Share Project on Github,点击4、第一次执行该过程,会让你使用github用户名和密码登录,登录成功之后会弹出如下页面,写上Repository name...原创 2019-11-28 19:54:34 · 683 阅读 · 0 评论 -
阿里新版java开发手册(2019华山版、2020泰山版)
pdf文件链接: https://pan.baidu.com/s/15Q_qCyqLTG0wBFyHVM3zog提取码: in6y目录一、 编程规约(一) 命名风格(二) 常量定义(三) 代码格式(四) OOP 规约(五) 集合处理(六) 并发处理(七) 控制语句(八) 注释规约(九) 其它二、异常日志(一) 异常处理(二) 日...原创 2019-11-12 19:14:13 · 6818 阅读 · 1 评论 -
【避坑】FastJson稍微使用不当就会导致StackOverflow
目录问题再现FastJson的实现原理JavaBeanSerizlier序列化原理如何避免StackOverflowError总结对于广大的开发人员来说,FastJson大家一定都不陌生。FastJson(https://github.com/alibaba/fastjson)是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化...转载 2019-11-12 10:04:36 · 1875 阅读 · 1 评论 -
参数验证 @Validated 和 @Valid 的区别
目录1. 分组2. 注解地方3. 嵌套验证Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR-303 的一个变种),javax提供了@Valid(标准JSR-303规范),配合 BindingResult 可以直接提供参数验证结果。其中对于字段的特定验证注解比如 @NotNull 等网上到处都...转载 2019-11-11 17:13:10 · 452 阅读 · 0 评论 -
如何在 Spring/Spring Boot 中做参数校验?你需要了解的都在这里!
目录基础设施搭建相关依赖实体类验证Controller的输入验证请求体(RequestBody)验证请求参数(Path Variables 和 Request Parameters)验证 Service 中的方法Validator 编程方式手动进行参数验证自定以 Validator(实用)案例一:校验特定字段的值是否在可选范围案例二:校验电话号码使用...转载 2019-11-11 16:24:46 · 775 阅读 · 0 评论 -
Java,你告诉我 fail-fast 是什么鬼(ArrayList遍历remove的坑)?
目录01、前言02、for each 中集合的 remove 操作03、分析问题的杀手锏04、怎么避开 fail-fast 保护机制呢1)remove 后 break2)for 循环3)Iterator05、最后01、前言说起来真特么惭愧:十年 IT 老兵,Java 菜鸟一枚。今天我才了解到 Java 还有 fail-fast 一说。不得不感慨啊,学习真的是...转载 2019-10-30 13:10:20 · 329 阅读 · 0 评论 -
servlet中Filter过滤器介绍
过滤器是指拦截请求,并对传给被请求资源的ServletRequest 或 ServletResponse 进行处理的一个对象。过滤器可以用于登录、加密和解密、会话检查等等。过滤器可以配置为拦截一个或多个资源。如果同一个资源或同一组资源中应用了多个过滤器,则调用顺序有显示显得比较重要,这时候就需要部署描述符(web.xml)来控制其先后顺序。 filter过滤器中使用的接口包括Filte...转载 2018-03-11 18:55:16 · 323 阅读 · 0 评论 -
jxl 与poi 操作Excel区别
最近在做crm开发,用java将数据生成excel 表格,主要利用jxl.jar 和poi.jar来实现。我看过两段代码,刚好一个是jxl写的,另一个是poi写的,区别可以看出来,^_^ 下面这些看不出来的是前人总结的:POI为apache公司的一个子项目,主要是提供一组操作windows文档的Java API.JavaExcel俗称jxl是一开放源码项目,通过它Java开发人员可以读取Excel...转载 2018-03-30 11:13:53 · 2316 阅读 · 0 评论 -
使用BigDecimal类处理高精度计算
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(Strin...转载 2018-03-24 22:44:44 · 228 阅读 · 0 评论 -
Java DecimalFormat 用法
我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子。下面是一个例子:[java] view plain copyimportjava.text.DecimalFormat; publicclassTestNumberFormat{ publicstaticvoidmain(St...转载 2018-03-24 22:57:15 · 148 阅读 · 0 评论