Java
文章平均质量分 83
Java知识分享
侃侃而谈。句句是你
这个作者很懒,什么都没留下…
展开
-
为什么要尽量避免使用 IN 和 NOT IN?
那我们死活都不能用 IN 和 NOT IN 了么?并没有,一位大神曾经说过,如果是确定且有限的集合时,可以使用。如 IN (0,1,2)。原创 2022-03-17 10:27:30 · 453 阅读 · 0 评论 -
一个 Mybatis 开发神器:Fast MyBatis
fastmybatis 是一个 mybatis 开发框架,其宗旨为:简单、快速、有效。零配置快速上手,无需编写 xml 文件即可完成 CRUD 操作。同时支持 mysql、sqlserver、oracle、postgresql、sqlite。原创 2022-03-16 17:12:57 · 240 阅读 · 0 评论 -
private修饰的方法可以通过反射访问,那么private的意义是什么?
private修饰的方法可以通过反射访问,那么private的意义是什么?原创 2022-01-29 09:48:41 · 152 阅读 · 0 评论 -
图解算法:冒泡排序
01故事起源幼儿园放学,小朋友们集合,需要先从低到高排队,应该怎么排呢?02开始行动小K身高180,是班里最高的,自然得往后排啦。小K先和身后的小B比较,然后和小B交换。小K接着和身后的小D比较,然后和小D交换。经过和4个小朋友交换位置,小K终于找到自己的位置啦。上面的过程其实就是冒泡排序的核心思想了。03冒泡排序为描述方便,用下面的数组模拟小朋友的交换过程。核心思想(升序):从首位置开始,依次比较前后两个数,如果...原创 2021-06-09 11:14:58 · 1026 阅读 · 4 评论 -
从0到1! 大话动静态代理
追溯学一个技术,要知道技术因何而产生,才能有学下去的目标和动力,才能更好的理解首先,要明确为什么要存在代理呢?存在一个常见的需求:怎样在不修改类A代码的情况下,在调用类A的方法时进行一些功能的附加与增强呢?先不考虑什么代理不代理的,我们设计一个简单的实现方案:新创建一个类B,类B组合类A,在类B中创建一个方法b,方法b中调用类A中的方法a,在调用前和调用后都可以添加一些自定义的附加与增强代码。 当有需求需要调用类A的方法a并且想要添加一个附加功能时,就去调用类B的方法b即可实现上述需转载 2021-03-24 16:40:47 · 188 阅读 · 0 评论 -
这款IDEA插件刷爆了朋友圈,网友:一定是女朋友送的~
当初年少懵懂,那年夏天填志愿选专业,父母听其他长辈说选择计算机专业好。从那以后,我的身上就有了计院深深的烙印。从寝室到机房,从机房到图书馆,C、C++、Java、只要是想写点自己感兴趣的东西,一坐就是几个小时,但那时年轻,起身,收拾,一路小跑会女神,轻轻松松。现在工作了,毫无意外的做着开发的工作,长时间久坐。写代码一忙起来就忘了起来活动一下,也不怎么喝水。经常等到忙完了就感觉腰和腿不舒服。直到今年的体检报告一下来,才幡然醒悟:没有一个好身体,就不能好好打工,让老板过上他自己想要的生活了...原创 2021-02-08 09:10:31 · 357 阅读 · 0 评论 -
万字完整深入解析JVM 面试必备
Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:在这里插入图片描述程序计数器指向当前线程正在执行的字节码指令。线程私有的。虚拟机栈虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧.原创 2021-02-07 13:03:46 · 190 阅读 · 0 评论 -
Java8 快速实现List转map 、分组、过滤等操作
利用java8新特性,可以用简洁高效的代码来实现一些数据处理。定义1个Apple对象:publicclassApple{privateIntegerid;privateStringname;privateBigDecimalmoney;privateIntegernum;publicApple(Integerid,Stringname,BigDecimalmoney,Integernum){...原创 2021-02-07 12:48:28 · 625 阅读 · 0 评论 -
2021-02-07Spring Boot 中的全局异常处理
在项目开发过程中,不管是对底层数据库的操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。如果对每个过程都单独作异常处理,那系统的代码耦合度会变得很高,此外,开发工作量也会加大而且不好统一,这也增加了代码的维护成本。针对这种实际情况,我们需要将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能单一,也实现了异常信息的统一处理和维护。同时,我们也不希望直接把异常抛给用户,应该对异常进行处理,对错误信息进行封装,然后返回一个友好.原创 2021-02-07 12:38:50 · 542 阅读 · 0 评论 -
Java 中的语法糖,真甜。
我们在日常开发中经常会使用到诸如泛型、自动拆箱和装箱、内部类、增强 for 循环、try-with-resources 语法、lambda 表达式等,我们只觉得用的很爽,因为这些特性能够帮助我们减轻开发工作量;但我们未曾认真研究过这些特性的本质是什么,那么这篇文章,cxuan 就来为你揭开这些特性背后的真相。语法糖在聊之前我们需要先了解一下语法糖的概念:语法糖(Syntactic sugar),也叫做糖衣语法,是英国科学家发明的一个术语,通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出..原创 2021-02-07 10:17:28 · 131 阅读 · 0 评论 -
Vue 实现原理 + 前端性能优化
一、Vue实现原理1、Vue简介现在的大前端时代,是一个动荡纷争的时代,江湖中已经分成了很多门派,主要以Vue,React还有Angular为首,形成前端框架三足鼎立的局势。Vue在前端框架中的地位就像曾经的jQuery,由于其简单易懂、开发效率高,已经成为了前端工程师必不可少的技能之一。Vue是一种渐进式JavaScript框架,完美融合了第三方插件和UI组件库,它和jQuery最大的区别在于,Vue无需开发人员直接操作DOM节点,就可以改变页面渲染内容,在应用开发者具有一定的HTML、CSS原创 2021-02-07 10:14:59 · 441 阅读 · 0 评论 -
spring的BeanFatory和FactoryBean区别
BeanFactorypublic interface BeanFactory { String FACTORY_BEAN_PREFIX = "&"; Object getBean(String name) throws BeansException; <T> T getBean(String name, @Nullable Class<T> requiredType) throws BeansException; Object getB原创 2020-12-05 10:40:46 · 372 阅读 · 0 评论 -
Java 8 中的 Map 骚操作,学习下!
merge()怎么用? merge()简介 使用场景 其他 总结 Java 8最大的特性无异于更多地面向函数,有时约会了lambda等,可以更好地进行函数式编程。前段时间无意间发现了map.merge()方法,感觉还是很好用的,此文简单做一些相关介绍。首先我们先看一个例子。merge()怎么用?假设我们有这么一段业务逻辑,我有一个学生成绩对象的列表,对象包含学生姓名,科目,科目分数三个属性,要求求得每个学生的总成绩。加入列表如下:...原创 2020-11-19 16:18:04 · 95 阅读 · 0 评论 -
新技能 MyBatis 千万数据表,快速分页
基本概念 MyBatis 流式查询接口 但构建 Cursor 的过程不简单 方案一:SqlSessionFactory 方案二:TransactionTemplate 方案三:@Transactional 注解 基本概念流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的...原创 2020-11-19 16:16:50 · 164 阅读 · 0 评论 -
面试官写了个双冒号::问我这是什么语法?Java中有这玩意?代码详解!!
一:简洁 二:方法引用 三:Optional 可选值 一:简洁方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt 实例方法引用,通过实例对象::实例方法,如 str::substring 构造方法引用,通过类名::new, 如 User::new 二:方法引用publicfinalclassInteger{...原创 2020-09-10 15:19:55 · 138 阅读 · 0 评论 -
IDEA中导入Eclipse构建的Java Web项目
# Eclipse 项目结构如上图 Gif 演示,在 Eclipse 下,一般中小项目的项目结构基本都是这种模式的,所以我们这里也通过网上一个开源项目 JspRun 进行讲解。下载地址:http://pan.baidu.com/s/1i3zrSf7# Eclipse 项目配置如上图箭头所示,在 IntelliJ IDEA 下是支持直接打开 Eclipse 项目的,无需导入。如上图标注 1 所示,选择项目的 .project 文件打开即可。...原创 2020-09-09 17:52:30 · 2048 阅读 · 0 评论 -
JDK9可以像Unix脚本一样执行Java代码
现在你多少听说一些JDK9 JShell相关的内容,这篇文章中将介绍如何使用JShell像Unix脚本一样执行Java代码。让我们开始一个简单的例子,再进行详细的介绍: 创建一个 java_shell_code.txt 的文件; 在文件中写一些Java代码,并执行以下命令。你没必须声明一个Class,你可以直接写一句代码,或者创建一个方法。 javaex.jshell.extension.JShellScriptExecutor./java_shell_code.txt..原创 2020-09-09 17:46:30 · 151 阅读 · 0 评论 -
Spring Boot 集成 Redis 实现数据缓存!代码详解
Spring Boot 集成 Redis 实现数据缓存,只要添加一些注解方法,就可以动态的去操作缓存了,减少代码的操作。在这个例子中我使用的是 Redis,其实缓存类型还有很多,例如Ecache、Mamercache、Caffeine等。Redis 简介Redis 是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。Redis 相关的知识就不在这里赘述了,感兴趣的可以公众号回复Redis看下 Redis 系列文章。下面我们在 Spring...原创 2020-09-04 16:32:04 · 223 阅读 · 0 评论 -
IDEA如此牛逼,离不开它的插件生态平台!
# 插件的设置在 IntelliJ IDEA 的安装讲解中我们其实已经知道,IntelliJ IDEA 本身很多功能也都是通过插件的方式来实现的,只是 IntelliJ IDEA 本身就是它自己的插件平台最大的开发者而已,开发了很多优秀的插件。官网插件库:https://plugins.jetbrains.com/ 如上图标注 1 所示,IntelliJ IDEA 对插件进行了很好的分类: All plugins 显示所有插件。 Enabled 显示当前..原创 2020-09-02 18:00:32 · 212 阅读 · 0 评论 -
SpringBoot实战:整合Redis、mybatis,封装RedisUtils工具类等(附源码)
# 创建SpringBoot项目在线创建方式网址:https://start.spring.io/然后创建Controller、Mapper、Service包# SpringBoot整合Redis引入Redis依赖 <!--SpringBoot与Redis整合依赖--> <dependency> <groupId>org.sp...原创 2020-09-02 09:08:10 · 515 阅读 · 0 评论 -
连问 MySQL 索引,脸都问绿了。。。
什么是索引? 索引的实现方式 innodb的索引模型 什么是索引?当我们使用汉语字典查找某个字时,我们会先通过拼音目录查到那个字所在的页码,然后直接翻到字典的那一页,找到我们要查的字,通过拼音目录查找比我们拿起字典从头一页一页翻找要快的多,数据库索引也一样,索引就像书的目录,通过索引能极大提高数据查询的效率。索引的实现方式在数据库中,常见的索引实现方式有哈希表、有序数组、搜索树 哈希表哈希表是通过键值对(key-value)存储数据的索引实现方式,可以将哈希表想..原创 2020-09-02 09:04:36 · 102 阅读 · 0 评论 -
Spring 的 Controller怎么保证并发的安全?
答案 得到的不同的值,这是线程不安全的 解决方案 补充说明 答案controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。我们下面来简单的验证下:packagecom.riemann.springbootdemo.controller;importorg.springframework.context.annotation.Scope;importorg.springframework...原创 2020-09-02 09:00:40 · 537 阅读 · 0 评论 -
如何干掉恶心的 SQL 注入?
简介文章主要内容包括: Java 持久层技术/框架简单介绍 不同场景/框架下易导致 SQL 注入的写法 如何避免和修复 SQL 注入 JDBC介绍 全称 Java Database Connectivity 是 Java 访问数据库的 API,不依赖于特定数据库 ( database-independent ) 所有 Java 持久层技术都基于 JDBC 说明直接使用 JDBC 的场景,如果代码中存在拼接 SQL 语...原创 2020-08-28 09:47:52 · 139 阅读 · 1 评论 -
35个Java 代码优化细节
前言代码 优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。代码优化的目标是:转载 2020-08-28 09:45:52 · 121 阅读 · 0 评论 -
Mybatis 中经典的 9 种设计模式!面试必看!!!
虽然我们都知道有23个设计模式,但是大多停留在概念层面,真实开发中很少遇到。Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用:1、Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;2、工厂模式,例如SqlSessionFactory、Obje原创 2020-08-27 14:59:51 · 141 阅读 · 0 评论 -
多图详解CLH锁的原理与实现
JDK1.8源码分析项目(中文注释)Github地址:https://github.com/yuanmabiji/jdk1.8-sourcecode-blogs1 什么是自旋锁和互斥锁?由于CLH锁是一种自旋锁,那么我们先来看看自旋锁是什么?自旋锁说白了也是一种互斥锁,只不过没有抢到锁的线程会一直自旋等待锁的释放,处于busy-waiting的状态,此时等待锁的线程不会进入休眠状态,而是一直忙等待浪费CPU周期。因此自旋锁适用于锁占用时间短的场合。这里谈到了自旋锁,那么我们也顺便说下互斥原创 2020-08-27 11:28:21 · 939 阅读 · 0 评论 -
你知道Git版本控制系统中都有哪些“后悔药”吗?
你知道Git版本控制系统中都有哪些“后悔药”吗?本文通过案例讲解git reset 、 git revert 、 git checkout在版本控制中的作用;场景小明同学作为新人加入到一个新的项目组中做开发,在项目的迭代开发中,小明勤勤恳恳的写代码,直到有一次...小明:完了,完蛋了洋仔:怎么了,一惊一乍的小明:我把错误代码用git commit后还push到线上代码库了!这可怎么办!洋仔:莫慌,git有“后悔药”!在这里插入图片描述洋仔:容我给你慢慢道来。但.转载 2020-08-27 10:27:56 · 93 阅读 · 0 评论 -
每位开发者都应了解的数据库一致性
应了解的数据库一致性以下为译文:想象一下,给变量赋值,然后立即读取,却发现刚刚的写入根本不起作用,是不是很抓狂?1.x = 422.assert(x == 42) # 抛出异常在使用一致性保证较弱的分布式数据存储时,就有可能遇到这种情况。你可能会问:“等等,难道数据库不是应该为我解决一致性的问题吗?”执行更新操作后,实际的数据会立即被更新还是需要等待一段时间,取决于数据库是否提供这种保证。有些数据库提供的一致...原创 2020-08-27 10:22:50 · 167 阅读 · 0 评论 -
Springboot启动原理解析详解
我们开发任何一个Spring Boot项目,都会用到如下的启动类@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}从上面的代码可以修剪,Annotation定义(@SpringBootApplication)和类定义(SpringAppli原创 2020-08-27 09:39:09 · 561 阅读 · 0 评论 -
Spring 默认把 Bean 设计成单例的?
单例bean与原型bean的区别1.画图分析2.源码分析单例bean的优势1.减少了新生成实例的消耗2.减少jvm垃圾回收3.可以快速获取到bean单例bean的劣势总结Spring 为啥把bean默认设计成单例?单例有啥劣势?熟悉Spring开发的朋友都知道Spring提供了5种scope分别是singleton、prototype、request、session、global session。如下图是官方文档上的截图,感兴趣的朋友可以进去看看这五种分别有什么不同。今天要介绍的是这原创 2020-08-24 15:32:15 · 136 阅读 · 0 评论 -
Spring框架中使用自定义复合注解简化开发
1. 前言Java 1.5 引入了注解,极大的方便了将元数据添加到 Java 代码中,简化了开发。现在很多框架都严重依赖 Java 注解,尤其是 Spring 框架,很多面试者都把这个作为 Spring 框架的一个特色,虽然不够贴切,但是也不是没有一点道理。在本文中,我们将介绍一个非常有用的 Spring 特性,该功能允许我们基于一个或多个 Spring 注解创建自己的注解。欢迎加入微信圈子程序...原创 2020-03-18 09:29:35 · 995 阅读 · 0 评论 -
Java 线程池 8 大拒绝策略,面试必问(重)!
前言谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发。而不论你用FixedThreadPool还是CachedThreadPool其背后实现都是ThreadPoolExecutor。ThreadPoolExecutor是一个典型的缓存池化设计的产物,因为池子有大小,当...原创 2020-03-18 09:25:44 · 231 阅读 · 0 评论 -
2020年Java 多线程面试题总结大全
这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知...原创 2020-03-13 12:20:15 · 176 阅读 · 0 评论 -
基于Spring Boot的API、RESTful API 项目骨架!强!
前言最近使用Spring Boot 配合 MyBatis 、通用Mapper插件、PageHelper分页插件 连做了几个中小型API项目,做下来觉得这套框架、工具搭配起来开发这种项目确实非常舒服,团队的反响也不错。在项目搭建和开发的过程中也总结了一些小经验,与大家分享一下。在开发一个API项目之前,搭建项目、引入依赖、配置框架这些基础活自然不用多说,通常为了加快项目的开发进度(早点回家)还需...原创 2020-03-09 09:53:16 · 407 阅读 · 0 评论 -
Mybatis自动生成代码,优化开发速度
为什么要用这个?方便因为之前那种方式让我用起来不爽了:mybatis逆向工程(MyBatis Generator)能紧密的贴合mybatis,并且MyBatisplus的很多api用起来也更加方便,能大大提高开发效率开始使用0、构建一个普通的Maven工程,这里就不再赘述了1、导包:导入需要使用到的依赖<dependencies> <!-- mybati...原创 2020-03-09 09:35:11 · 316 阅读 · 1 评论 -
instanceof 关键字的作用详解
instanceof 关键字的作用java中,instanceof运算符的前一个操作符是一个引用变量,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是返回true,否则返回false。也就是说:使用instanceof关键字做判断时, instanceof 操作符的左右操作数必须有继承或实现关系下面我们用继承树来判断instance...原创 2020-03-08 10:23:05 · 5271 阅读 · 0 评论 -
手写Java线程池(超详细解说)
线程池问题背景只是单纯使用new Thread(runnable).start();的方式创建线程, 将会导致严重的程序性能问题: 1.线程创建, 销毁需要消耗很大的系统资源; 2.虚拟机创建线程的数量是有限的; 2.线程调度切换也将使程序性能下降; 针对这些问题, 对线程数量进行管理, 有效地重复利用线程, 将会很好地提高程序性能.线程池原理使用队列创建一定数量的线程, 当有任务的时候...原创 2020-03-08 10:17:47 · 2348 阅读 · 1 评论 -
Spring Boot + Vue 开发基于 C/S 架构的应用
前言虽然 B/S 是目前开发的主流,但是 C/S 仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件、调用更多系统资源,再加上 Web 开发的低成本、高效率的优势,这种跨平台方式越来越受到开发者的喜爱。Electron 是一个基于 Chromium 和 Node.js,使用 HTML、CSS 和 JavaScript 来构建跨平台应用...原创 2020-03-07 18:02:56 · 821 阅读 · 0 评论 -
InterruptedException 异常处理
InterruptedException异常在了解InterruptedException异常之前应该了解以下的几个关于线程的一些基础知识。而且得知道什么时候会抛InterruptedException异常当阻塞方法收到中断请求的时候就会抛出InterruptedException异常线程的状态线程在一定的条件下会发生状态的改变,下面是线程的一些状态初始(NEW):新建一个线程的对象...原创 2020-03-07 17:40:12 · 616 阅读 · 0 评论 -
线程的中断
前言:Java中的中断是一种重要的线程控制机制,多用于并发线程编程之中,那么它到底是什么呢?如何工作?和线程切换和阻塞又有什么关系呢?接下来让我们来看看Java中断机制是如何工作的。一、什么是线程切换,线程阻塞,线程中断?线程切换:我们知道,CPU是以时间片进行线程调度的,一个线程在占有一个分配的时间片之后,CPU就会根据相应的策略进行线程的重新调度,这个过程会很大程度上参考线程的优先级,当然...原创 2020-03-07 17:39:38 · 284 阅读 · 1 评论