- 博客(237)
- 资源 (458)
- 问答 (9)
- 收藏
- 关注
原创 Java异常, 性能有多差
在 Java 中,异常通常被认为是成本昂贵的,不应该用于控制控制。本文将证明这个观点的正确性,并验证导致性能问题的原因。。
2023-06-06 22:31:21 885
原创 通过JVM深入理解Java异常机制
1.JVM异常处理流程当Java程序中发生异常时,JVM会在方法的异常表中查找相应的异常处理代码。如果找到了匹配的异常处理代码,JVM会执行该代码来处理异常;如果没有找到匹配的代码,JVM会将异常向上抛出,弹出当前方法的栈帧,返回到调用该方法的上一级方法,查找上一级方法的异常表;依次沿调用栈查找,如果所有的栈帧被弹出,仍然没有处理,则将异常抛给当前的Thread,Thread会终止;如果当前Thread为最后一个非守护线程,且未处理异常,则会导致JVM终止运行。
2023-06-05 19:34:56 675
原创 Java中的异常表(Exception table)
Java 代码中通过使用 try-catch-finally 块来对异常进行捕获/处理。但是对于 JVM 来说,是如何处理 try/catch 代码块与异常的呢?实际上 Java代码在进行编译时,编译器会在代码后附加一个异常表,以实现try块出现异常后能进入对应的异常处理程序执行。
2023-06-04 17:20:02 835
原创 Java异常处理的最佳实践
有些平台译为“被压制的异常”。“压制”这个词的含义是“使某物变小”,延伸到在 Java 中,被压制的异常指的是在 try-with-resources 语句块中,因为 try 块和 finally 块都抛出了异常,导致 finally 块中的异常被“压制”了,没有被正确捕获和处理。提到:如果程序执行try块出现异常,且进入执行finally 块也抛出异常,则最后抛出给调用方的异常是finally中的,try/catch中的不会再抛出,因为被覆盖掉了,在Java中,对上层调用方只能抛出一个异常。
2023-05-26 20:47:16 1234
原创 重学Java异常体系
在 Java 中,通常情况下已有的内置异常类能够满足应用的基础使用需求。但有些情况下,需要自定义异常来满足特别的需求。最常见的就是用精确的命名描述异常例如,某个特定case的异常,让它见名知意。当程序需要对异常情况进行更加具体和准确的描述时,可以自定义异常类。如何自定义异常就不多描述了,这里着重说一点关于自定义异常时需要注意的地方。
2023-04-15 20:37:52 193
原创 Phaser多任务协同的神器
上篇 CyclicBarrier多任务协同的利器 我们借助部门TB团建的例子,一步步分析了 CyclicBarrier 多线程协调的功能。并在文章末尾,留出思考:实际部门TB活动中,可能有人白天有事,不能参加公园的活动、但晚上会来聚餐;有人白天能参加,晚上不能参加;并且公园的门票,聚餐费用,因参与人数不同,又有不同,需要统计各阶段的参与人数,以此计算经费。需求升级后,如何实现呢?CyclicBarrier 能完成吗?其实在上篇文章中,我们分析了初版TB需求的任务特点,其中之一就是参与者的数量,是确
2020-06-28 15:08:45 847
原创 CyclicBarrier的克星—BrokenBarrierException
上篇 CyclicBarrier多任务协同的利器 我们借助部门TB的例子,一步步分析了 CyclicBarrier 多线程协调的功能。CyclicBarrier 功能强大的同时,意味着提供了更多的API,并且在使用过程中,可能有一些注意点。今天就来聊聊 BrokenBarrierException,从名字就能看出,是“屏障被破坏异常”,屏障被破坏时,CyclicBarrier 的期望功能就不能完成,甚至导致程序异常;BrokenBarrierException 可谓是 Cyclic
2020-06-17 15:17:50 1817
原创 CyclicBarrier多任务协同的利器
疫情逐渐好转,部门也有半年多没有TB团建了,并且金三银四,部门又招了一波新人;leader让你组织一次TB:周六上午,大家先到公司集合,然后一起去朝阳公园玩,最后一起去餐厅聚餐,然后回家。为了体现团队集体意识,在每次开启新项目时,需要所有人一起开始行动(不能早来的人都把东西吃光了吧~),并且每个阶段活动完成后,需要统计人数、向上汇报。这个场景,如何借助JUC并发工具来实现呢?我们先来梳理一下,任务特点:很显然,每次开启新项目时,需要所有人一起开始行动 这是个多任务相互等待,直到所有人都到达一个点
2020-06-15 19:10:35 1310
原创 CountDownLatch的两种常用场景
CountDownLatch的两种使用场景先来看看 CountDownLatch 的源码注释;/** * A synchronization aid that allows one or more threads to wait until * a set of operations being performed in other threads completes. * * @since 1.5 * @author Doug Lea */public class CountDownLa
2020-06-14 15:36:26 942
原创 Redis键空间通知(Keyspace Notifications)
Redis Keyspace Notificationshttps://redis.io/topics/notificationsRedis 是一个键值对数据库服务器,服务器中每个数据库都由 redisDB 结构表示(默认16个库)。其中,redisDB 结构的 dict 字典保存了数据库中所有的键值对,这个字典被称为键空间(key space)。而16个库,独立在各自的键空间(key ...
2020-01-25 14:24:21 1855 1
原创 Redis dict详解
dict,又称字典(dictionary)或映射(map),是集合的一种;这种集合中每个元素都是KV键值对。字典dict在各编程语言中都有体现,面向对象的编程语言如C++、Java中都称其为Map。Redis的KV存储结构Redis内存数据库,最底层是一个redisDb;redisDb 整体使用 dict字典 来存储键值对KV;字典中的每一项,使用dictEntry ,代表KV键值...
2020-01-16 22:30:52 2266 2
原创 使用pipeline加速Redis
面试官:怎么快速删除10万个key?某厂面试题:prod环境,如何快速删除10万个key?带着思考,我们一来研究Redis pipeline。why pipeline ?Redis客户端与server的请求/响应模型前面的文章 Redis底层协议RESP详解 ,介绍到redis客户端与redis-server交互通信,采用的TCP请求/响应模型;我们通过Redis客户端执行命令,如...
2020-01-10 11:19:02 482
原创 一文掌握Redis持久化
Redis持久化Redis常用作KV缓存,热点数据都在内存、访问速度极快。但谁也不能保证服务的100%可用,意外宕机内存中的数据就没了,对一些数据敏感的业务势必会造成影响。因此,Redis提供了持久化,目的就是将内存中的数据尽量保存到磁盘上来,同时最大可能的不影响原本高性能的读写操作。1、Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append ...
2020-01-08 18:05:32 411
原创 手写Redis客户端-实现自己的Jedis
手写Redis客户端-实现自己的Jedis上一篇,我们详细研究了Redis底层使用的协议——RESP(REdis Serialization Protocol),这篇我们在基于理解了RESP原理的基础上,手写一个Redis客户端,实现一个自己的Jedis(mini版)。还没了解Redis底层RESP协议 的同学,可以先移步Redis底层协议RESP详解,对RESP做一个大致的了解。Redis...
2020-01-07 22:18:21 740
原创 Redis底层协议RESP详解
RESP文章开始前,先放出两道面试题1.Redis底层,使用的什么协议?2.RESP是什么,在Redis怎么体现的?带着这两个问题,来一探究竟。什么是 RESP?是基于TCP的应用层协议 RESP(REdis Serialization Protocol);RESP底层采用的是TCP的连接方式,通过tcp进行数据传输,然后根据解析规则解析相应信息,Redis 的客户端和服务端之...
2020-01-07 16:18:22 1582
原创 终于有人把Java内存模型(JMM)说清楚了
网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚至有的人说自己更懵了。本文,就来整体的介绍一下Java内存模型,目的很简单,让你读完本文以后,就知道到底Java内存模型是什么,为什么要有Java内存模型,Java内存模型解决了什么问题等。为什么要有内存模型在介绍Ja...
2019-12-18 17:29:30 672
原创 排序算法`一网打尽
排序算法1、基本介绍 排序算法比较基础,但是设计到很多计算机科学的想法,如下: 1、比较和非比较的策略 2、迭代和递归的实现 3、分而治之思想 4、最佳、最差、平均情况时间复杂度分析 5、随机算法2、排序算法的分类算法分类算法总结3、冒泡排序(1)冒泡排序的介绍 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两...
2019-09-19 22:40:55 379
原创 分布式事务的4种模式
相信很多小伙伴在阅读分布式事务相关文章时,都有碰到过,上来就是分析各种解决方案(全局事务、基于可靠消息、最大努力通知、TCC),又掺杂着两阶段提交协议2PC/TCC(提个小问题2PC和TCC的关系?)看似内容丰满,但看完之后没有条理,记不住这么多。今天从分布式事务4种模式的角度,来聊聊分布式事务理论的发展及其模式的迭代。(再往上层走,才是具体实现,具体实现都是必然的事)常见分布式事务解...
2019-08-17 18:40:44 7144 5
原创 Kafka零拷贝
Kafka除了具备消息队列MQ的特性和使用场景外,它还有一个重要用途,就是做存储层。用kafka做存储层,为什么呢?一大堆可以做数据存储的 MySQL、MongoDB、HDFS……因为kafka数据是持久化磁盘的,还速度快;还可靠、支持分布式……啥!用了磁盘,还速度快!!!没错,kafka就是速度无敌,本文将探究kafka无敌性能背后的秘密。首先要有个概念,kafka高性能的背后...
2019-08-15 19:35:10 13865 5
原创 数据库连接池的大小你真的设置对了吗
问题真实环境prod中的系统,我们该如何设置数据库连接池的大小呢?一些所谓的开发老鸟可能会肯定的告诉你:没关系,尽量设置的大些,比如设置成200,这样数据库性能会高些,吞吐量也会大些!对于菜鸟的你,也许认为好像似乎说的有道理,真的是这样吗?接下来的分析,也许颠覆你的认知哦!数据库连接池的设置分析——测试数据条件线程池设置大小每个请求在连接池队列里平均等待时间执行SQL耗时...
2019-08-10 23:24:47 12035 2
原创 开辟鸿蒙,聊聊华为微内核
曾经,微内核的操作系统一直活在实验室里,从来没走出过实验室。无数教授拿着教材说“微内核的操作系统没有实现过”。过了昨天,这句话就就成为历史了。操作系统(Operating System)内核有几种?操作系统内核kernel,主要控制的计算机的正常运行,包括:文件管理(文件系统)、进程管理(CPU调度)、内存管理、中断处理和应用程序的切换调度。这些功能都是独立成单独的模块,除了...
2019-08-10 18:36:21 2171
原创 Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_criterion_1' in 'class com.xxxx.dao.domain.XxxExample'背景Caused by: org.apache.ibatis.reflect...
2018-11-25 12:42:43 2111
原创 MyBatis 通用mapper批量插入异常
ExecutorException: Error getting generated key or setting result to parameter object.Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list]...
2018-11-19 19:25:16 6149
原创 Your stream was neither an OLE2 stream, nor an OOXML stream
最近使用Apache poi 做excel导出的功能,遇到了如下问题:Your stream was neither an OLE2 stream, nor an OOXML stream起初对比其他的web工程,没有发现如何解决。最后找到抛出此异常的源码:org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFact...
2018-10-25 22:05:24 17081 5
原创 Git 多平台换行符问题(LF or CRLF)
在不同的操作系统上,使用git提交代码时,可能遇到如下提示:warning: CRLF will be replaced by LF in index.html.warning: LF will be replaced by CRLF背景:本人在 Mac下提交html代码,报出warning: CRLF will be replaced by LF in index.html.无法提...
2018-10-05 19:34:51 3755 1
原创 log4j2实战--将MyBatis执行SQL记录到文件,按天分存
需求:将Mybatis的执行SQL,按天存日志文件。项目使用的是log4j2。原先项目,都是将所有日志通通打印到控制台。现在需要将系统接收用户请求后,Mybatis的执行SQL,按天存日志文件。当时在想:把Mybatis的SQL打印到控制台容易实现,日志按Level级别 按天存文件也容易实现,但如何单独把Mybatis的SQL,按天存日志文件呢?于是找了MyBatis日志配置说明...
2018-09-04 14:35:05 3334 14
原创 深度解析volatile—底层实现
我们都知道,Java关键字volatile的作用1、内存可见性2、禁止指令重排序可见性是指,在多线程环境,共享变量的操作对于每个线程来说,都是内存可见的,也就是每个线程获取的volatile变量都是最新值;并且每个线程对volatile变量的修改,都直接刷新到主存。下面重点介绍指令重排序。为什么要指令重排序?为了提高程序执行的性能,编译器和执行器(处理器)通常会对指令做一些...
2018-09-02 17:49:14 5690 8
原创 从多核硬件架构,看Java内存模型
在了解Java内存模型之前,先来看一下多核硬件架构。我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存啦。刚开始,还相安无事的,但是随着CPU技术的发展,CPU的执行速度越来越快。而由于内存的技术并没有太大的变化,所以从内存中读取和写入数据的过程和CPU的执行速度比起来差...
2018-09-02 17:23:29 895
原创 查看Java的汇编指令
通过javap 命令,可以将字节码文件反编译。如通过下面的命令:javap -c Xxxx.class而有时候想看某些JDK底层实现,发现反编译得到的代码并没有什么帮助,因此本文介绍如何查看Java的汇编指令,查看Java代码最真实的运行细节。Java本身提供这个支持,但需要引入而外的包(hsdis-amd64.dylib)。Mac下:https://github.com/...
2018-08-30 11:02:19 7268
原创 Spring事务管理详解
Spring事务介绍Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现。Spring事务管理器的接口是org.springframework.transaction.PlatformTransactionManager,通过这个接口,Spring为各个ORM平台如JDBC、Hiber...
2018-08-26 16:35:06 520
原创 终极解决方案: Invalid character found in the request target. The valid characters are defined in RFC 3986
终极解决方案: Invalid character found in the request target. The valid characters are defined in RFC 398625-Aug-2018 11:27:27.086 信息 [http-nio-8087-exec-5] org.apache.coyote.http11.Http11Processor.servic...
2018-08-25 15:15:03 142480 30
原创 Kafka消费者——从 Kafka读取数据
应用程序使用 KafkaConsumer向 Kafka 订阅主题,并从订阅的主题上接收消息 。 从 Kafka 读取数据不同于从其他悄息系统读取数据,它涉及一些独特的概念和想法。如果不先理解 这些概念,就难以理解如何使用消费者 API。所以我们接下来先解释这些重要的概念,然 后再举几个例子,横示如何使用消费者 API 实现不同的应用程序。消费者和消费者群组假设我们有一个应用程序需要从-个 ...
2018-08-11 17:47:38 13548 2
原创 Kafka——分区partition
在之前的例子里(Kafka生产者——向 Kafka写入数据), ProducerRecord 对象包含了目标主题、键和值。 Kafka 的消息是 一个个 键值对, ProducerRecord对象可以只包含目标主题和值,键可以设置为默认的 null,不过大多数应用程序会用到键。键有两个用途 :可以作为消息的附加信息,也可以用来决定消息该被写到主题的哪个分区。拥有相同键的悄息将被写到同一个分区。 也...
2018-08-11 15:31:33 1874
原创 Kafka生产者——向 Kafka写入数据
不管是把 Kafka 作为消息队列、消息、总线还是数据存储平台来使用 ,总是需要有一个可以往 Kafka 写入数据的生产者和一个可以从 Kafka读取数据的消费者,或者一个兼具两种角 色的应用程序。例如,在一个信用卡事务处理系统里,有一个客户端应用程序,它可能是一个在线商店, 每当有支付行为发生时,它负责把事务发送到 Kafka上。另一个应用程序根据规则引擎检 查这个事务,决定是批准还是拒绝。...
2018-08-10 20:47:38 18839 2
原创 《Kafka权威指南》——初识 Kafka
发布与订阅消息系统在正式讨论Apache Kafka (以下简称Kafka)之前,先来了解发布与订阅消息系统的概念, 并认识这个系统的重要性。数据(消息)的发送者(发布者)不会直接把消息发送给接收 者,这是发布与订阅消息系统的一个特点。发布者以某种方式对消息进行分类,接收者 (订阅者)订阅它们,以便接收特定类型的消息。发布与订阅系统一般会有一个 broker,也就是发布消息的中心点。发布与...
2018-08-10 13:09:33 2244 2
转载 源码分析----Mybatis数据源与连接池
对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题。本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池。本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的。紧接着将分类介绍UNPOOLED、POOLED和JNDI类型的数据源组织;期间我们会重点讲解POOLED类型的数据源和其实现的连接池...
2018-08-09 12:26:13 1014
原创 Zookeeper用作注册中心的原理
RPC框架中有3个重要的角色: image.png注册中心 :保存所有服务的名字,服务提供者的ip列表,服务消费者的IP列表 服务提供者: 提供跨进程服务 服务消费者: 寻找到指定命名的服务并消费。Zookeeper用作注册中心简单来讲,zookeeper可以充当一个服务注册表(Service Registry),让多个服务提供者形成一个集群,让服务消费者通过服务注册表获...
2018-07-27 17:53:37 17866 5
原创 RPC服务注册与发现
如何发布自己的服务?RPC远程过程调用中,存在2个角色,一个服务提供者、另一个服务消费者。那如何让调用者知道,存在哪些服务可以调用呢?即如何让别人使用我们的服务呢?有同学说很简单嘛,告诉使用者服务的IP以及端口就可以了啊。确实是这样,这里问题的关键在于是自动告知还是人肉告知。人肉告知的方式:如果你发现你的服务一台机器不够,要再添加一台,这个时候就要告诉调用者我现在有两个ip了,你们要轮...
2018-07-27 17:15:52 5317 2
SpringMVC集成mybatis教程-实体类的orm
2017-08-03
IDEA SpringMVC集成mybatis
2017-08-03
IDEA整合Spring+Springmvc+mybatis+maven详细教程 实例下载
2017-08-03
spring-data-redis-demo.rar
2017-08-01
springMVC集成spring-data-redis
2017-08-01
xstream-distribution-1.4.10-bin.zip
2017-07-07
综合面试题150问-面试题大-软件开发工程师面试题.xls
2019-07-07
Artificial Neural Networks for Beginners.pdf
2018-10-19
spring-ldap-2.3.2.RELEASE-dist.zip
2017-12-08
ApacheDirectoryStudio-2.0.0win32.x86_64.zip
2017-12-05
javachineseime1.01.jar
2017-11-24
javachineseime1.01.src.zip
2017-11-24
jodd-all-3.9.1.jar
2017-11-23
【白皮书】《2017互联网科技创新白皮书》电子版.pdf
2017-11-09
eclipse新建AVD出现[SDK Manager] Error: null
2016-11-16
《疯狂IOS讲义》 适合初学者 看吗?
2016-10-26
Java 如何实现截图---捕捉手绘区域?
2016-10-01
2.为什么选择Python 作为Web 开发语言?
2016-09-13
2.Java基础---应该有什么样的准备和多深的积累?
2016-09-09
纯Java实现的任务管理器,结束一个进程如何实现刷新,显示当前所剩进程?
2016-07-30
软件工程专业,没怎么给上算法课。很害怕算法,怎么办
2016-07-20
那个密码输入JPasswordField,把提示内容显示成*了,如何解决
2016-04-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人