![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 79
sufu1065
这个作者很懒,什么都没留下…
展开
-
6种快速统计代码执行时间的方法,真香!(史上最全)
这是我的第78篇原创文章。作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)我们在日常开发中经常需要测试一些代码的执行时...原创 2020-07-14 07:00:00 · 6480 阅读 · 0 评论 -
9个小技巧让你的 if else看起来更优雅
这是我的第 52篇原创文章。if else 是我们写代码时,使用频率最高的关键词之一,然而有时过多的 if else 会让我们感到脑壳疼,例如下面这个伪代码:是不是很奔溃?虽然他是伪代...原创 2020-04-22 13:42:00 · 5015 阅读 · 8 评论 -
用了自定义Banner后,SpringBoot瞬间变的高大上了...
Spring Boot 在启动的时候,我们或许想要把自己公司的 logo,或者是项目的 logo 放上去,我们可以试试本文的这些方法,可以让你快速制作一些 Spring Boot 项目启动时的彩蛋,以提高项目的辨识度,或者是纯碎为了给枯燥的生活平添一些乐趣,那么本文这些内容能很好的帮助到你。本文知识点,如下图所示:![知识图谱.png](https://imgconvert.csdnimg.c...原创 2020-04-20 11:33:47 · 2820 阅读 · 1 评论 -
别再问我 new 字符串创建了几个对象了!我来证明给你看!
如何证明 new String 创建了 N 个对象?我想所有 Java 程序员都曾被这个 new String 的问题困扰过,这是一道高频的 Java 面试题,但可惜的是网上众说纷纭,竟然找不到标准的答案。有人说创建了 1 个对象,也有人说创建了 2 个对象,还有人说可能创建了 1 个或 2 个对象,但谁都没有拿出干掉对方的证据,这就让我们这帮吃瓜群众们陷入了两难之中,不知道到底该信谁得。但是...原创 2020-04-17 09:42:43 · 1102 阅读 · 0 评论 -
想读Spring源码?先从这篇「 极简教程」开始吧...
为什么要阅读源码?这是一个有趣的问题,类似的问题还有,为什么要看书?为什么要爬山?这也是一个哲学问题,我想每个人都有不同的答案,下面我是对阅读源码好处的一些思考。(PS:也欢迎你在评论区留言补充)阅读源码的好处1.知其然知其所以然这是一句 IT 人都很熟悉的话,在开源软件越来越多,并且升级越来越快的今天,如果说还有什么是重要的,那一定是知道它(开源软件)的核心原理和执行流程,这样就能为我...原创 2020-04-09 21:49:41 · 1582 阅读 · 1 评论 -
震惊!这样终止线程,竟然会导致服务宕机?
在开始之前,我们先来看以下代码会有什么问题?public class ThreadStopExample { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(() -> { try { ...原创 2020-04-06 21:35:56 · 855 阅读 · 0 评论 -
99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏
世界上只有一种英雄主义,就是看清生活的真相之后依然热爱生活。对于 Lombok 我相信大部分人都不陌生,但对于它的实现原理以及缺点却鲜为人知,而本文将会从 Lombok 的原理出发,手撸一个简易版的 Lombok,让你理解这个热门技术背后的执行原理,以及它的优缺点分析。简介在讲原理之前,我们先来复习一下 Lombok (老司机可直接跳过本段)。Lombok 是一个非常热门的开源项目 (...原创 2020-04-06 21:34:08 · 2724 阅读 · 3 评论 -
Redis 性能优化的 13 条军规!史上最全
Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O(1)),但由于 Redis 是单线程执行的特点,因此它对性能的要求更加苛刻,本文我们将通过一些优化手段,让 Redis 更加高效的运行。本文我们将使用以下手段,来提升 Redis 的运行速度:缩...原创 2020-03-27 17:32:44 · 837 阅读 · 0 评论 -
Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!
Java 14 在 2020.3.17 日发布正式版了,但现在很多公司还在使用 Java 7 或 Java 8,每当看到 Java 又发布新版本心里就慌得一匹。不过此版本并不是 LTS (长期支持版) 版本,所以不要慌,我们先来了解一下好了,等 LTS 版本发布后再用也不迟。版本说明现在 Java 的发布节奏是每年发布两个 GA (General Availability,正式发布版),每 6...原创 2020-03-22 18:02:27 · 3863 阅读 · 5 评论 -
HashMap 为什么在链表长度为 8 的时候转红黑树,为啥不能是 9 是 10?
这个问题是在面试某公司的时候面试官提的问题,当时没回答上来。归根到底还是因为自己复习基础的时候还不够仔细,也缺乏思考。首先我觉得需要确认一下,是不是随便什么情况下只要满足了链表长度为8就转红黑树呢?答案自然不是,为什么不是,看代码: /** * Replaces all linked nodes in bin at index for given hash unless ...转载 2020-03-18 21:33:26 · 3441 阅读 · 0 评论 -
Java 官方性能测试工具 JMH 简单入门
什么是 JMHJMH 是 Java Microbenchmark Harness 的缩写。中文意思大致是 “JAVA 微基准测试套件”。首先先明白什么是“基准测试”。百度百科给的定义如下:基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。可以简单的类比成我们电脑常用的鲁大师,或者手机常用的跑分软件安兔兔之类的性能检测软件。都...转载 2020-03-18 15:59:07 · 1207 阅读 · 0 评论 -
因为我说:volatile 是轻量级的 synchronized,面试官让我回去等通知!
因为我说:volatile 是轻量级的 synchronized,面试官让我回去等通知!volatile 是并发编程的重要组成部分,也是面试常被问到的问题之一。不要向小强那样,因为一句:volatile 是轻量级的 synchronized,而与期望已久的大厂失之交臂。volatile 有两大特性:保证内存的可见性和禁止指令重排序。那什么是可见性和指令重排呢?...原创 2020-03-18 09:01:28 · 447 阅读 · 1 评论 -
使用 Redis 如何实现查询附近的人?「视频版」——面试突击 003 期
面试问题Redis 如何实现查询附近的人?涉及知识点Redis 中如何操作位置信息?GEO 底层是如何实现的?如何在程序实现查询附近的人?在实际使用中需要注意哪些问题?视频答案视频地址:https://www.bilibili.com/video/av89369236/图文答案Redis 中要实现查询附近的人,需要使用 Redis 3.2 版本中提供的 GEO 数据类型,它...原创 2020-03-09 13:45:46 · 688 阅读 · 0 评论 -
Redis 中的过期元素是如何被处理的?「视频版」——面试突击 002 期
本文以面试问题「Redis 中的过期元素是如何被处理的?」为切入点,用视频加图文的方式和大家聊聊 Redis 过期元素被处理的相关知识点。涉及的知识点过期删除策略有哪些?这些过期策略有哪些优缺点?Redis 使用的是什么过期策略?Redis 是如何优化和执行过期策略的?视频答案点击查看视频内容:https://www.bilibili.com/video/av887...原创 2020-03-03 11:50:48 · 1067 阅读 · 0 评论 -
面试突击 | Redis 如何从海量数据中查询出某一个 Key?附视频
1 考察知识点本题考察的知识点有以下几个:Keys 和 Scan 的区别Keys 查询的缺点Scan 如何使用?Scan 查询的特点2 解答思路Keys 查询存在的问题Scan 的使用Scan 的特点3 Keys 使用相关1)Keys 用法如下2)Keys 存在的问题此命令没有分页功能,我们只能一次性查询出所有符合条件的 key 值,如果查询结果...原创 2020-02-27 19:04:23 · 1237 阅读 · 0 评论 -
【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案
在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几乎是全年每周一篇面试文章的节奏,当然其中有不少的面试题来源于网络,但这些面试题都是经过我细心甄选的经典内容,只有我觉着对读者可能有帮助的面试文章才会被我「搬运」发布,所以在这个特殊的日子,我决定把这些面试题做一个汇总,方便读者集中阅读和收藏保存,Java 面...原创 2019-12-31 21:11:16 · 5586 阅读 · 6 评论 -
Redis持久化的几种方式——深入解析RDB
Redis的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。Redis 持久化也是 Redis和 Memcached 的主要区别之一,因为 Memcached是不具备持久化功能的。1.持久化的几种方式Red...原创 2019-11-17 22:45:54 · 2557 阅读 · 3 评论 -
Redis中的键值过期操作
1.过期设置Redis 中设置过期时间主要通过以下四种方式:expire key seconds:设置 key 在 n 秒后过期;pexpire key milliseconds:设置 key 在 n 毫秒后过期;expireat key timestamp:设置 key 在某个时间戳(精确到秒)之后过期;pexpireat key millisecondsTimestamp:设置 k...原创 2019-11-12 19:05:27 · 2215 阅读 · 0 评论 -
Spring Boot 最佳实践(四)模板引擎Thymeleaf集成
## 一、Thymeleaf介绍Thymeleaf是一种Java XML / XHTML / HTML5模板引擎,可以在Web和非Web环境中使用。它更适合在基于MVC的Web应用程序的视图层提供XHTML / HTML5,但即使在脱机环境中,它也可以处理任何XML文件。它提供了完整的Spring Framework集成。 关于Spring推荐Thymeleaf的这种说法,我在Spring...原创 2018-09-05 19:47:37 · 899 阅读 · 0 评论 -
Java 200+ 面试题补充② Netty 模块
让我们每天都能看到自己的进步。老王带你打造最全的 Java 面试清单,认真把一件事做到最好。本文是前文《Java 最常见的 200+ 面试题》的第二个补充模块,第一模块为:《Java 200+ 面试题补充 ThreadLocal 模块》。1.Netty 是什么?Netty 是一款基于 NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking...原创 2019-03-08 09:12:40 · 839 阅读 · 0 评论 -
你真的知道 == 和 equals 的区别吗?
在 Java 中 == 和 equals 的区别,感觉只有很少的人能才完全说正确。常见的错误回答就是:== 基础类型对比的是值是否相同,引用类型对比的是引用是否相同;而 equals 则是比较的值是否相同。至于为什么说它是错的,看完本文对 == 和 equals 的解读,你就知道了。1、== 解读对于基本类型和引用类型 == 的作用效果是不同的,如下所示:基本类型:比较的是值是否相同;...原创 2019-03-07 08:38:47 · 1049 阅读 · 1 评论 -
Java 200+ 面试题补充 ThreadLocal 模块
本文是前文《Java 最常见的 200+ 面试题》的第一个补充模块。让我们每天都有进步,老王带你打造最全的 Java 面试清单,认真把一件事做到极致。1.ThreadLocal 是什么?ThreadLocal 是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,适用于各个线程不共享变量值的操...原创 2019-03-07 08:22:03 · 686 阅读 · 0 评论 -
Java 200+ 面试题补充③ Dubbo 模块
昨天在我的 Java 面试粉丝群里,有一个只有一年开发经验的小伙伴只用了三天时间,就找到了一个年薪 20 万的工作,真是替他感到开心。他的经历告诉我们:除了加强自我实战经验之外,还要努力积累自己的理论知识。人生没有白走的路,也没有白吃的苦。你学的某一种知识,在将来某一天一定会给你惊喜!高兴之余,让我们来看,今天的内容。本文是 Java 最常见的 200+ 面试题 的第三个补充模块...原创 2019-03-12 09:22:14 · 1127 阅读 · 0 评论 -
阿里面试题BIO和NIO数量问题附答案和代码
一、问题BIO 和 NIO 作为 Server 端,当建立了 10 个连接时,分别产生多少个线程?答案: 因为传统的 IO 也就是 BIO 是同步线程堵塞的,所以每个连接都要分配一个专用线程来处理请求,这样 10 个连接就会创建 10 个线程去处理。而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处理不同的请求,所以即使有 10 个连接,对于...原创 2019-03-16 15:44:02 · 1329 阅读 · 1 评论 -
经典面试题|讲一讲JVM的组成
JVM(Java 虚拟机)算是面试必问的问题的了,而但凡问 JVM 一定会问的第一个问题就是:讲一讲 JVM 的组成?那本文就注重讲一下 JVM 的组成。首先来说 JVM 的组成分为,整体组成部分和运行时数据区组成部分,一般开发者关注的和面试官问的都是后者,但本文会详细讲解以上两个组成部分。一、JVM 整体组成JVM 整体组成可分为以下四个部分:类加载器(ClassLoader)...原创 2019-04-10 09:23:05 · 787 阅读 · 0 评论 -
解决SpringBoot多模块发布时99%的问题?SpringBoot发布的8个原则和4个问题的解决方案
如果使用的是 SpringBoot 多模块的项目,在发布的时候可能遇到各种各样的问题。本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案,掌握了这些原则和解决方案,几乎可以解决绝大数 SpringBoot 发布问题。SpringBoot 多模块发布的 8 大原则1 在发布模块打包,而不是父模块上打包比如,以下项目目录:如果要发布 api 就直接在它的模块上打包,而不是在...原创 2019-06-20 15:54:57 · 537 阅读 · 0 评论 -
RocketMQ 可视化环境搭建和基础代码使用
RocketMQ 是一款分布式消息中间件,最初是由阿里巴巴消息中间件团队研发并大规模应用于生产系统,满足线上海量消息堆积的需求, 在 2016 年底捐赠给 Apache 开源基金会成为孵化项目,经过不到一年时间正式成为了 Apache 顶级项目。早期阿里曾经基于 ActiveMQ 研发消息系统, 随着业务消息的规模增大,瓶颈逐渐显现,后来也考虑过Kafka,但因为在低延迟和高可靠性方面没有选择,最...原创 2019-07-03 19:26:04 · 657 阅读 · 0 评论 -
深浅克隆面试题汇总——附详细答案
在开始学习深克隆和浅克隆之前,我们先来看下面代码,有什么问题?class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { // 等号赋值( 基本类型) int number = 6; int number2 = n...原创 2019-09-18 09:38:12 · 4533 阅读 · 7 评论 -
Java 208 道面试题:Java 基础模块答案
目前市面上的面试题存在两大问题:第一,题目太旧好久没有更新了,还都停留在 2010 年之前的状态;第二,近几年 JDK 更新和发布都很快,Java 的用法也变了不少,加上 Java 技术栈也加入了很多新的框架,比如 Spring Boot、Spring Cloud 等,但类似的面试题却极少。相比与这些问题,我的这 208 道面试题,包含了以下 4 个特点:披沙拣金提炼出每个 Java 模块中...原创 2019-03-05 11:39:29 · 14221 阅读 · 7 评论 -
JVM(五)垃圾回收器的前世今生
全文共 2195 个字,读完大约需要 8 分钟。如果垃圾回收的算法属于内存回收的方法论的话,那本文讨论的垃圾回收器就属于内存回收的具体实现。因为不同的厂商(IBM、Oracle),实现的垃圾回收器各不相同,而本文要讨论的是 Oracle 的 HotSpot 虚拟机所使用的垃圾回收器。常用垃圾回收器,如下图所示:- 新生代回收器:Serial、ParNew、Parallel Scavenge- 老...原创 2019-02-13 09:53:37 · 510 阅读 · 0 评论 -
Spring Boot(十)Logback和Log4j2集成与日志发展史
一、简介Java知名的日志有很多,比如:JUL、Log4j、JCL、SLF4J、Logback、Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看。1.1 JULJava有自己的日志框架JUL(Java Util Logging)在java.util.logging下,因为对开发者不友好,使用成本太高和日志级别分类不清晰的问题,所有很少有开发者用。...原创 2018-10-30 19:06:48 · 549 阅读 · 0 评论 -
Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据
一、简介在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题:问题一、后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义?问题二、返回数据操作难:数据返回不对或者不够怎么办?怎么才能灵活的操作数据?这是很多公司前后端分离之后带来的困扰,那怎么来解决这些问题?问题一的一般解决方案:后端团队共同维护一个在线文档,每次改接...原创 2018-10-24 09:30:02 · 1181 阅读 · 0 评论 -
Spring Boot (七)MyBatis代码自动生成和辅助插件
一、简介1.1 MyBatis Generator介绍MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper、dao、entity 的框架,让我们省去规律性最强的一部分最基础的代码编写。1.2 MyBatis Generator使用MyBatis Generator的使用方式有4种:命令行生成Maven方式生成使用Ant任务...原创 2018-09-30 10:08:18 · 788 阅读 · 0 评论 -
Spring Boot (八)MyBatis + Docker + MongoDB 4.x
一、MongoDB简介1.1 MongoDB介绍MongoDB是一个强大、灵活,且易于扩展的通用型数据库。MongoDB是C++编写的文档型数据库,有着丰富的关系型数据库的功能,并在4.0之后添加了事务支持。随着存储数据量不断的增加,开发者面临一个困难:如何扩展数据库?而扩展数据库分为横向扩展和纵向扩展,纵向扩展就是使用计算能力更强大的机器,它的缺点就是:机器性能的提升有物理极限的制约,而且...原创 2018-10-08 09:32:47 · 1041 阅读 · 1 评论 -
Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8
## 一、Spring Data JPA 介绍JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring Data JPA是在 Hibernate 基础上封装的一款框架。开发环境Spring Boot 2.0.4Spring Data JPA 2.0.4MySQL 8.0.1...原创 2018-09-07 10:04:51 · 7082 阅读 · 0 评论 -
Spring Boot(六)集成 MyBatis 操作 MySQL 8
## 一、简介1.1 MyBatis介绍MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集。1.2 MyBatis发展史MyBatis 原本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了g...原创 2018-09-12 19:12:18 · 575 阅读 · 0 评论 -
Spring Boot 最佳实践(三)模板引擎FreeMarker集成
## 一、FreeMaker介绍FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT、电子邮件、配置文件、源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组件。FreeMarker最初设计是用来在MVC模式的Web开发中生成HTML页面的,所以没有绑定Servlet或任意Web相关的东西上,所以它可以运行在非Web应用环境中。发展史...原创 2018-08-30 11:12:08 · 568 阅读 · 0 评论 -
Spring Boot 最佳实践(一)快速入门
一、关于Spring Boot在开始了解Spring Boot之前,我们需要先了解一下Spring,因为Spring Boot的诞生和Spring是息息相关的,Spring Boot是Spring发展到一定程度的一个产物,但并不是Spring的替代品,Spring Boot是为了让程序员更好的使用Spring。说到这里可能有些人会迷糊,那到底Spring和Spring Boot有着什么样的联系...原创 2018-08-24 17:11:12 · 2390 阅读 · 0 评论 -
Ubuntu 18.04.1 搭建Java环境和HelloWorld
一、搭建Java环境系统环境Ubuntu 18.04.1JDK 8IDEA 2018.21.下载JDK官网地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html选择相应的版本,点击jdk,进入下载页面,选择“Linux x64”版本的后缀为“xxx.tar.gz”的Liunx压缩...原创 2018-08-24 15:26:57 · 994 阅读 · 0 评论 -
Spring Boot 最佳实践(二)集成Jsp与生产环境部署
一、简介提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下Spring Boot 怎么集成JSP开发,以及生产环境的详细部署方法。二、集成JSP开发环境Spring Boot 2.0.4 RELEASETomcat 9.0.10ID...原创 2018-08-27 09:29:08 · 496 阅读 · 0 评论