
java
文章平均质量分 82
养歌
任何傻瓜都能写出计算机可以理解的代码,好的程序员能写出人能读懂的代码。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
spring boot 实现 RSA + AES 混合加解密案例
代码】spring boot 实现 RSA + AES 混合加解密。原创 2022-08-09 15:53:37 · 2119 阅读 · 1 评论 -
为什么需要分布式 ID,在项目中该怎么做?
在日常的开发中,我们需要对系统中的各种数据使用 ID 作为唯一表示,比如系统的用户 ID 只能对应一个人,订单 ID 只能对应一个订单。我们现实生活中也有各种 ID,比如,身份证号就是一个 ID 对应一个人。简单来说,ID 就是数据的唯一标识。那么什么是分布式 ID?这里举个简单的例子。比如单机 MySQL 数据库,前期因为业务量不大,只是使用单个数据库存数据,后期发现业务量一下子就增长,单机 MySQL 已经不能满足于现在的数据量,单机 MySQL 已经没办法支撑了,这时候就需要进行分库分表。在分库分表之原创 2022-06-09 17:28:14 · 1004 阅读 · 0 评论 -
支付金额使用 BigDecimal 会丢失精度问题
当我们在计算金额或者显示金额时,基本已经形成了常识,都会使用 BigDecimal 而不是其他的,这个也是涉及到金额时非常推荐的一个类型。而我们也都知道浮点型变量在进行计算的时候会出现丢失精度的问题。在我们使用 BigDecimal 的同时,是否知道也会丢失精度呢?接下来我们就一探究竟,从而在计算金额时更好使用 BigDecimal。下面我们看一段代码,如下所示:通过测试发现,当使用 double 或者 float 这些浮点数据类型时,会丢失精度。如果我们在进行商品价格计算的时候,就会出现问题,如果线上原创 2022-06-06 17:25:27 · 3420 阅读 · 0 评论 -
Mybatis-Plus 注入 SQL 原理分析
MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。那么 MyBatis-Plus 是怎么加强的呢?其实就是封装好了一些 crud 方法,开发人员不需要再写 SQL 了,间接调用方法就可以获取到封装好的 SQL 语句。特性:下面我们先从一个简单的 demo 入手,来感受一下 MyBatis-plus 的便捷性。实体类对象UserMapper 继承 BaseMapper 接口测试最终查询的 SQL 语句如下图:从原创 2022-06-01 16:28:02 · 3323 阅读 · 1 评论 -
@Transactional 注解失效场景
前言今天早上同事去面试的时候被面试官问到了一个问题,就是@Transactional注解用在什么地方事务会失效,一时之间没有回答上来,因为我们在用这个注解的时候没有过多的去关系它到底在什么情况下会失效,所以今天我利用一点时间来跟大家分享一下@Transactional相关的知识。对于开发人员来说 @Transactional 已经不陌生了,当我们需要保证数据执行前后都要一致的时候就需要用到事务,它可以保证方法中数据库操作要么同时成功、要么同时失败,使用 @Transactional 有很多需要注意的地原创 2022-05-31 10:03:34 · 1978 阅读 · 0 评论 -
不能不懂的 Java 源代码编译过程分析
前言首先问大家一个问题,我们开发好 Java 代码是如何运行的?我们写了这么多年的代码,对于代码运行的流程是否清楚呢?是不是在 ide 中点一下 Run 启动就完事了,我们写的代码直接就跑起来了,其实在背后编译器和虚拟机默默的在帮我们承受了这一切。Java 程序从源文件创建到程序运行要经过两大步骤:1、源文件由编译器编译成字节码2、字节码由 Java 虚拟机解释运行。因为 Java 程序既要编译同时也要经过 JVM 的解释运行。Java 代码编译代码编译由 JAVA 源码编译器来完成。主要是将原创 2022-05-27 17:40:56 · 6370 阅读 · 0 评论 -
java 中实现微信支付退款功能案例
首先调用微信支付退款 API 地址 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4案例代码支付退款工具类用于支付参数中的 nonce_str 字段赋值/** * 生产32位随机数 **/ public static String getUUID(){ UUID uuid = UUID.randomUUID(); return uuid.toString().replace("-",""); }用于支付参原创 2022-05-24 10:54:19 · 3899 阅读 · 0 评论 -
Java调用ssl异常(javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or ci
今天项目中做了一个微信退款接口,当请求微信退款接口时,报了一个错误:“javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)” 在本地测试是不会报错的,但是发布到测试环境退款就报这个错误,在网上找了很多解决方案,都是如以下的解决方案:今天做升级用了jdk1.8发现java调用SSL的时候,突然一下抛出一个异常经过一阵瞎原创 2022-05-23 15:58:34 · 7176 阅读 · 2 评论 -
Java高频面试题总结
设计面试面试题一个单例还能写出花来吗?单例模式的7个问题面试官问你单例设计模式,问问自己你真的了解单例吗?小单例,不简单!漫画:AOP 面试造火箭事件始末 动态代理总结,面试你要知道的都在这里,无废话!linux 面试题凉了!张三同学没答好「进程间通信」,被面试官挂了…懵了,阿里面试官叫我讲讲mmap?框架篇:小白也能秒懂的Linux零拷贝原理从根上理解用户态与内核态 讲讲用户空间和内核空间你管这破玩意叫 IO 多路复用?阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO原创 2022-05-13 13:23:32 · 751 阅读 · 0 评论 -
关于@Controller方法中return返回值成功,前端报404问题的正式解决
前言今天用 postman 测试接口发现出现了重复的地址名称,比如原本路径应该是 /wxMpService/details 的,变成了这样 /wxMpService/wxMpService/details,多了个 wxMpService,我想不通是什么问题导致,因为后台有返回了数据,但是到前端就报 404 的问题。后来经过测试发现了问题,就是如果我定义 @Controller 注解就会发生这个问题,如果我定义 @RestController 就会访问正常,为什么会出现这种情况呢。原因是由于 @C原创 2022-05-12 14:59:53 · 3158 阅读 · 0 评论 -
MyBatis 缓存原理解析
为什么 MyBatis 要缓存缓存在互联网系统中是非常重要的, 其主要作用是将数据保存到内存中, 当用户查询数据时, 优先从缓存容器中获取数据,而不是频繁地从数据库中查询数据,从而提高查询性能。而在 ORM 框架中引入缓存的目的就是为了减少读取数据库的次数,从而提升查询的效率。在 MyBatis 中存在两种缓存,一个在事务内部使用的一级缓存,另一个可以全局使用的二级缓存。一级缓存一级缓存也叫本地缓存,在MyBatis中,一级缓存是在会话(SqlSession)层面实现的,这就说明一级缓存作用范围只原创 2022-04-14 16:46:13 · 2458 阅读 · 0 评论 -
详解Sharding-JDBC的概念
核心概念分片一般我们在提到分库分表的时候,大多是以水平切分模式(水平分库、分表)为基础来说的,数据分片将原本一张数据量较大的表 t_order 拆分生成数个表结构完全一致的小数据量表 t_order_0、t_order_1、···、t_order_n,每张表只存储原大表中的一部分数据,当执行一条SQL时会通过 分库策略、分片策略 将数据分散到不同的数据库、表内。数据节点数据节点是分库分表中一个不可再分的最小数据单元(表),它由数据源名称和数据表组成,例如上图中 order_db_1.t_order原创 2022-03-22 13:19:40 · 1828 阅读 · 0 评论 -
内存溢出+CPU占用过高排查解决方案
前言这段时间以来都没有写过文章了,以为要换工作的原因,所以一直在为面试做准备,面试了几家收到了4个offer,连我也不知道什么时候这么抢手了,后来选择了一家做医疗的大公司工作,废话不多说,今天开始陆续写文章。这里不说其他的,只说内存的溢出以及怎么排查,这也是面试会被面试官问到的问题。以下的方式适合初学者。定位问题top命令查看最耗CPU的进程这里输入top 命令之后键入大写的 P ,进程按照 CPU 从高到底排序。查看最消耗 CPU 的线程,比如一下这个进程:1612 为进程号,键入大写原创 2022-03-15 10:06:48 · 1480 阅读 · 0 评论 -
搞懂 Runnable、Future、Callable、FutureTask 之间的关系,这篇就够了
前言创建线程的两种方式主要有继承 Thread 类 或 实现 Runnable 接口,重写 run 方法,无论我们使用 Thread 还是 Runnable 新建线程,它都无法返回结果值。自从 Jdk1.5 开始,官方提供了 Callable 和 Future, 通过他们就可以获得任务的执行结果。其中 FutureTask 则作为 Future 的实现类。下面是他们的关系类图:RunnableThread 类本身也实现了 Runnable 接口,Runnable 接口源码如下:public in原创 2022-01-27 17:10:02 · 5046 阅读 · 0 评论 -
面试官:为什么有了平衡二叉树,还要选择红黑树这种数据结构?
首先讲解为什么要使用红黑树之前,有必要先了解二叉查找树和平衡二叉树,然后继续介绍红黑树,带着这个问题,让我们一起来学习今天的内容吧。二叉查找树二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如下图:二叉查找树中对于目标节点的查找过程类似于有序数组的二分查找,快速找到某个节点。n 个节点的二叉查找树,正常的情况下,查找的时间复杂度为 O(logn)。为什么说是正常的情况下呢?是因为二叉查找树有一种极端的存在,二叉树的大部分子节点都比父节点值小,然后导致所有的数据偏向左原创 2022-01-27 10:45:22 · 1894 阅读 · 0 评论 -
Java 线程的 6 种状态及转化
前言线程是 JVM 执行任务的最小单元,理解线程的状态转换是理解后续多线程问题的基础。当我们说一个线程的状态时,其实说的就是一个变量的值,在 Thread 类中的一个变量,叫 private volatile int threadStatus = 0;这个值是个整数,不方便理解,可以通过映射关系(VM.toThreadState),转换成一个枚举类。public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TE原创 2022-01-25 18:13:13 · 5206 阅读 · 0 评论 -
为什么重写 equals 方法后还需要重写 hashCode 方法
下面我们先看 一下 Object 类的 equals 方法和 hashcode 方法源码: public native int hashCode(); public boolean equals(Object obj) { return (this == obj); }从代码中我们知道,创建的对象在不重写的情况下使用的是 Object 的 equals 方法和 hashcode 方法,从 Object 类的源码我们知道,默认的 equals 判断的是两个对象的引用指向原创 2022-01-24 16:29:38 · 644 阅读 · 0 评论 -
Spring Boot 中使用 @Async 注解导致循环依赖的原因及解决方案
前言在写这篇文章之前,我写了一篇关于循环依赖的文章,为什么这篇文章我又说和循环依赖有关的话题呢,其实,是因为我原本想写一篇关于 @Async 原理分析的文章的,后来为了能更深入理解 @Async 以便我接下来的写的文章,无意之间看到了 @Async 也会导致循环依赖的问题。关于循环依赖怎么解决以及源码分析可以看我这一篇文章:Spring 源码分析如何解决喜欢依赖的问题Spring 是允许循环依赖的,换句话说,Spring 自身是已经解决了循环依赖这个问题,但是在这里竟然又出现了。比如以下添加 @As原创 2022-01-21 17:36:02 · 7339 阅读 · 3 评论 -
Spring 源码分析如何解决循环依赖的问题
前言在关于 Spring 的面试中,我们经常会被问到一个问题:Spring 是如何解决循环依赖的问题的。这是个高频的面试题,本文主要针对这个问题,从以下几个方面进行讲解:什么是循环依赖?什么情况下循环依赖可以被处理?Spring是如何解决的循环依赖?什么是循环依赖?循环依赖其实就是循环引用,也就是两个或则两个以上的对象互相依赖,最终形成一个闭环。比如 A 依赖于 B,B 依赖于 C,C又依赖于 A 。比较特殊的还有自己依赖自己的。什么情况下循环依赖可以被处理?Spring 解决循环原创 2022-01-21 10:41:00 · 2153 阅读 · 0 评论 -
Java 中发生内存泄漏 5 个场景以及解决方法
前言说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和 Java 联系起来。在 Java 中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM 来处理。顾名思义,垃圾回收就是释放垃圾占用的空间,但垃圾回收器并不是万能的,它能够处理大部分场景下的内存清理、内存泄露以及内存优化。但它也并不是万能的,不然我们在项目实践过程中也不会出现那么多的内存泄漏的问题,很多的内存泄漏都是因为开发人员操作不当导致的。本篇文章我们就来聊聊内存泄露的原因是什么,以及如何在原创 2022-01-20 11:39:25 · 18652 阅读 · 2 评论 -
为什么 String 被设计成不可变?
前言这是一个老生常谈的话题,并且面试的时候也会被问到的问题. 在 Java 中将 String 设计成不可变,这是综合考虑了各种因素的结果,想要理解这个问题我们需要综合内存、数据结构以及安全等方面的考虑,接下来我们就一一进行讲解。加深一下对 String 的理解。String 的组成首先我进去看一下 String 的源码:public final class String implements java.io.Serializable, Comparable<String>, C原创 2022-01-19 18:22:52 · 475 阅读 · 0 评论 -
Tomcat、JDBC 如何打破双亲委派机制的?
首先我们说 之前,还要从类加载器说起。类加载器类加载器是干什么的?我们在初学 Java 的时候,用命令行编译过 Java 文件,Java 代码通过j avac 编译成 class 文件,而类加载器的作用就是把 class 文件装进虚拟机。JVM 预定义有三种类加载器,当一个 JVM 启动的时候,Java 开始使用如下三种类加载器:启动类加载器扩展类加载器系统类加载器启动类加载器(Bootstrap ClassLoade)这个类加载使用 C/C++ 语言实现的,嵌套在 JVM 内部它原创 2022-01-19 10:02:37 · 825 阅读 · 1 评论 -
SpringBean 生命周期源码解析
前言Spring 作为当前 Java 最流行、最强大的轻量级框架,受到了程序员的青睐。准确的了解 Spring Bean 的生命周期是非常必要的,Spring Bean 的生命周期是 Spring 面试热点问题,想要答好并不容易!本文将从源码的角度入手,帮助小伙伴彻底掌握 Spring Bean 的生命周期。而 Spring Bean 的生命周期只有 4 个阶段:主要逻辑都在 doCreateBean 方法(AbstractAutowireCapableBeanFactory类中,逻辑很清晰,就是顺原创 2022-01-17 12:02:29 · 1370 阅读 · 0 评论 -
面试官:条件 a == (Integer) 1 && a == (Integer) 2有可能为true吗?
最近无意间看到一个有趣的帖子:有这么个条件:条件 a == (Integer) 1 && a == (Integer) 2有可能为true吗?int a = 1; if (a == 1 && a == 2) { System.out.println("true"); }这是一个 JS 社区抛出来的问题。这里我改成 java 的方式,我的第一感觉确实为false啊,怎么可能 a 的值即为 1,又为2?似乎是一个无原创 2022-01-10 15:28:19 · 430 阅读 · 0 评论 -
Spring Boot 使用 CORS 解决跨域请求问题
对于前后端分离的项目来说,如果前端项目与后端项目部署在两个不同的域下,那么势必会引起跨域问题的出现。那什么是跨域呢?跨域指的是从一个域名去请求另外一个域名的资源。即跨域名请求,跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的 “同源策略” 造成的,是浏览器施加的安全限制。跨域的严格一点来说就是只要协议,域名,端口有任何一个的不同,就被当作是跨域。下面举个例子:判断下面 URL 是否和 http://www.baidu.com/a/a.html 同源http://www.baidu.com/原创 2022-01-10 13:57:00 · 2639 阅读 · 0 评论 -
Spring Boot 内嵌 Tomcat 实现原理解析
前言为什么 Spring Boot 不需要额外安装 Tomcat 了?因为 Spring Boot 有内置的 Web 服务器 Tomcat,所以不用单独配置。这篇文章主要从源码的角度出发,解析 Spring Boot 内嵌 Tomcat 的实现原理,讨论 Tomcat 何时创建、启动以及是怎样启动的。下面跟随源码一步步找到如何启动内置的 tomcat。首先贴出启动类:@SpringBootApplicationpublic class QuartJobApplication { pu原创 2022-01-10 09:04:38 · 2042 阅读 · 0 评论 -
Spring Boot面试题 35 问
1、什么是 Spring Boot?Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。2、为什么要用 Spring Boot?快速开发快速整合第三方框架(Maven依赖关系,Maven继承)简化XML的配置内置嵌入HTTP服务器(Tomcat(默认)、Jetty),降低了对环境的要求3、Spring Boot 的优点?容易上手,提升开发效率,为原创 2022-01-08 15:50:02 · 15036 阅读 · 0 评论 -
原来 Spring Boot 流程是这么走的
Spring Boot简介Spring Boot 是什么Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。spring大家都知道,boot是启动的意思。所以,spring boot其实就是一个启动spring项目的一原创 2022-01-08 09:05:42 · 4663 阅读 · 0 评论 -
ZooKeeper 面试必问
谈谈对 ZooKeeper 的理解ZooKeeper是什么ZooKeeper 是一个开源的分布式协调服务,ZooKeeper 由雅虎研究院开发,是Google Chubby 的开源实现,由于最初雅虎公司的内部研究小组的项目大多以动物的名字命名,所以后来就以Zookeeper(动物管理员)来命名了,后来托管到 Apache,于2010年11月正式成为 Apache 的顶级项目。ZooKeeper目标他的目标是可以提供高性能、高可用和顺序访问控制的能力,同时也是为了解决分布式环境下数据一致性的问题。高原创 2022-01-05 11:28:47 · 1454 阅读 · 0 评论 -
异常 Non-terminating decimal expansion; no exact representable decimal result的解决方法
今天在写多线程分页同步数据的时候报错:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。发现报错的语句是:int pageSize = new BigDecimal(rCnt).divide(new BigDecimal(300)).setScale(0, BigDecimal.ROUND_UP).intValue();解决办法在 java原创 2022-01-04 12:01:16 · 4683 阅读 · 0 评论 -
Windows版Zookeeper安装过程及启动图解
1、Zookeeper下载地址:http://archive.apache.org/dist/zookeeper/,找到你要下载的版本。2、解压到你指定的目录下,在根目录添加 data 和 log 文件夹。3、将 con f目录下的 zoo_sample.cfg 文件,复制一份,重命名为 zoo.cfg,接着修改 zoo.cfg 配置文件,添加dataDir 和 dataLogDir,配置创建的data 和 log文件路径。dataDir=D:\ZooKeeper\apache-zookeeper原创 2021-12-30 17:12:12 · 4547 阅读 · 1 评论 -
Zookeeper-分布式锁
由于在多线程环境下上下文的切换,数据可能出现不一致的情况,我们需要保证数据安全,所以我们能想到的第一个就是加锁,所谓加锁是当一个线程访问某个数据时,进行限制,其他线程不能进行访问,直到该线程读取完,其他线程才可使用。这里我们以 Redis 秒杀为例:首先我们把库存预热到了Redis缓存中,库存为1。A 服务去 Redis 查询库存发现为 1,说明商品存在,我去抢并且准备减 1 ,这时候库存还没有减。这时 B 服务也去查询库存发现也是 1,这时 B 服务也抢到了,那也减 1。C 服务同上。等所有原创 2021-12-30 10:10:22 · 1570 阅读 · 0 评论 -
ZooKeeper能做什么?
什么是 ZooKeeperZooKeeper 是一个高性能、集中化、分布式应用程序协调服务,是Hadoop和Hbase的重要组件,主要是用来解决分布式应用中用户经常遇到的一些数据管理问题,例如:统一命名服务、统一配置管理、统一集群管理、分布式锁等。ZooKeeper 提供一种类似目录树结构的数据结构,跟 Unix 文件系统路径相似的节点,可以往这个节点存储或获取数据,而每个节点叫做 ZNode。每一个节点可以通过路径来标识。结构图如下:Znode 分为两种类型:短暂/临时(Ephemeral):原创 2021-12-29 14:29:30 · 10039 阅读 · 0 评论 -
详述重入锁-ReentrantLock
什么是重入锁?锁主要用来控制多线程访问的行为,对于同一个线程,如果连续两次对同一把锁进行lock,那么这个线程会被卡死在那里,这样的特性很不好,在实际的开发中,方法之间的调用方式错综复杂,如果不小心可能在多个不同的方法中,反复调用 lock(),这样就会把自己卡死。所以,重入锁就是用来解决这个问题的,重入锁使同一个线程可以对同一把锁在不释放的前提下,反复的加锁不会导致线程的卡死,唯一的一点就是需要保证 unlock() 的次数和 lock()一样的多。重入锁的实现Java中的锁都来自与 Lock原创 2021-12-27 17:17:28 · 4116 阅读 · 1 评论 -
面试官:讲讲互斥锁、自旋锁吧
在介绍悲观锁和乐观锁之前,我们先看一下什么是锁。锁生活中:锁在我们身边无处不在,比如我出门玩去了需要把门锁上,比如我需要把钱放到保险柜里面,必须上锁以保证我财产的安全。如何用好锁是程序员的基本素养之一。多线程访问共享资源的时候,避免不了资源竞争而导致数据错乱的问题,通常为了解决这一问题,都会在访问共享资源之前加锁。最常用的就是互斥锁,当然还有很多种不同的锁,比如自旋锁、读写锁、乐观锁等,不同种类的锁自然适用于不同的场景。如果选对了合适的锁,则会大大提高系统的性能如果选择了错误的锁,在一些高并发的场原创 2021-12-24 11:09:08 · 1602 阅读 · 0 评论 -
什么是乐观锁、悲观锁
在介绍悲观锁和乐观锁之前,我们先看一下什么是锁。锁生活中:锁在我们身边无处不在,比如我出门玩去了需要把门锁上,比如我需要把钱放到保险柜里面,必须上锁以保证我财产的安全。代码中:比如多个线程需要同时操作修改共享变量,这时需要给变量上把锁(syncronized),保证变量值是对的。数据库表:当多个用户修改表中同一数据时,我们可以给该行数据上锁(行锁)。悲观锁(悲观并发控制)当我们要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发的发生。为原创 2021-12-23 15:01:01 · 21606 阅读 · 8 评论 -
怎么排查内存溢出的问题
在上一篇文章中我分享了内存溢出的问题,也写了一个死循环 CUP 飙高的案例,今天我们来看看内存溢出该怎么排查。jvisualvm下面用 JDK 自带的工具 jvisualvm 来个小伙伴操作一遍,在命令行中搜索 jvisualvm 就会出来了。而 jvisualvm 的操作界面是这样的:下面我们还是用上一遍文章中的案例: public static void main(String[] args) { Map map = System.getProperties();原创 2021-12-23 10:57:53 · 4307 阅读 · 0 评论 -
Linux环境多线程报错Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded原因解决以及分析
今天线上的项目停止服务,导致用户登录不上,上次也导致了服务停止,没有把重心放在上面,今天又出现了这个问题才一直在找问题,查看日志定位到发生问题的地方,发现出现了java.lang.OutOfMemoryError: GC overhead limit exceeded错误。那么这种原因是怎么来的?这个oracle官方已经给出了这个错误产生的原因和解决方法:翻译过来的意思是:线程名称中的异常:java。lang.OutOfMemoryError:超出GC开销限制原因:详细消息“超出 GC 开销限制原创 2021-12-23 09:14:17 · 16269 阅读 · 0 评论 -
螺旋矩阵遍历思路以及计算,考验你的时候到了
今天我的同事去面试的时候被问到了一道题目,非常经典的一道题,请用二维数组顺时针螺旋遍历矩阵的思路,当时我同事可能就说 why?弄啥嘞,在这里我也了解了一下,把自己的思路写下来吧。...原创 2021-12-21 18:02:16 · 944 阅读 · 0 评论 -
设计模式-代理模式
面试的时候经常会被问到 Spring 里面 AOP 的代理模式?jdk 的代理模式和 cglib 的代理模式又啥区别?这次要跟大家分享的是设计模式中三大类创建型中的代理模式,代理模式在业务场景上我们可能不会经常用到,但是面试官却会经常问一个问题。接下来开始一步步分析一下代理模式。定义代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介举个例子来说明:假如说我现在想租房,虽然我可以自己去找房源,但是你获取房源的资源太少了,还要自己去找房源,原创 2021-12-21 16:15:59 · 579 阅读 · 0 评论