
java
文章平均质量分 63
光哥_帅
技术就是知识,改变命运!!!
展开
-
【多线程】轻松彻底搞懂ReentrantLock的底层实现原理
上篇博客讲解了Sychronized的底层实现原理,它是基于jdk实现的,现在此篇博客讲解基于AQS 框架实现的另一个锁ReentrantLock。原创 2025-03-28 19:35:52 · 632 阅读 · 0 评论 -
【多线程】synchronized底层实现的方式
在java 开发中对于锁的应用非常的常见,如果对于什么时候该用什么锁,以及锁实现的原理有所不知道的,或者面试过程中面试官问你不知道怎么回答的,欢迎来看下面的文章。原创 2025-03-24 22:54:05 · 732 阅读 · 0 评论 -
【mysql】云服务器被攻击,数据库以及数据都被删除如何通过binlog日志恢复
根据binlog 日志恢复数据原创 2022-11-01 16:45:34 · 2897 阅读 · 5 评论 -
【Java 基础】Java Validation API分组,顺序校验,以及自定以校验注解的优雅写法
Java Validation API分组,顺序校验,以及自定以校验注解的优雅写法原创 2022-10-18 15:51:20 · 2133 阅读 · 2 评论 -
@Valid与@Validated区别
@valid 注解作用转载 2022-10-12 13:45:38 · 509 阅读 · 1 评论 -
【微信小程序】 java如何生成小程序码,并跳转到指定落地页 demo
Java 生成微信小程序二维码 ,可以指定小程序页面原创 2022-09-20 17:16:48 · 1116 阅读 · 1 评论 -
mysql的limit分页,越往后为什么越慢,怎么解决
一 什么是limit分页问题limit 20 这样的语句。仅仅扫描前30行,select* from table limit 0,10扫描满足条件的10行,返回10行,但当limit 866613,20的时候数据读取就很慢,limit 866613,20的意思扫描满足条件的866633行,扔掉前面的866613行,返回最后的20行,可想而知这时会很慢,如下图,达到37.44秒之久。二 怎么解决利用表的覆盖索引来加速分页查询我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这转载 2022-04-01 16:26:01 · 5907 阅读 · 0 评论 -
【rabbitmq 】如何保证消息可靠性
1、rabbitmq如何保证消息可靠首先我们知道一个完整的结构涉及到生产者,mq,消费者这三部分,mq解除了系统之间的耦合,但是会出现一些问题,比如现在是三部分,它们都是独立的,每一部分都会存在消息丢失的情况,所以要从这三部分一起解决此问题。如下图。1.1 mq保证消息不丢失对交换机,队列,消息进行持久化,持久化之后mq断电重启,消息还会被继续消费1.2 消费者消息不丢失通过手动ack机制,当消费者成功将消息消费成功后,返回消息给mq,告诉mq你发送的消息我已经消费成功了,mq将队列中的消息进行原创 2022-01-05 16:26:15 · 2248 阅读 · 2 评论 -
【java 查漏补缺】彻底搞清分布式和集群的区别
概述1.单机结构我想大家最最最熟悉的就是单机结构,一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上就好了。整个项目所有的服务都由这台服务器提供。这就是单机结构。那么,单机结构有啥缺点呢?我想缺点是显而易见的,单机的处理能力毕竟是有限的,当你的业务增长到一定程度的时候,单机的硬件资源将无法满足你的业务需求。此时便出现了集群模式,往下接着看。2.集群结构集群模式在程序猿界有各种装逼解释,有的让你根本无法理解,其实就是一个很简单的玩意儿,且听我一一道来。单机处转载 2021-11-24 16:50:12 · 237 阅读 · 0 评论 -
【java 查漏补缺】java接口回调机制到底是怎么回事
一、回调的含义和用途1、什么是回调?一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类同步调用、异步调用和回调。同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行。异步调用是一种类似消息或事件的机制解决了同步阻塞的问题,例如A通知B后,他们各走各的路,互不影响,不用像同步调用那样,A通知B后,非得等到B走完后,A才继续走。回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口,例如A要调用B,B在执行完又要转载 2021-11-24 16:18:10 · 256 阅读 · 0 评论 -
【java8】 java8分组后,对数据顺序不改变的控制
一.概述 默认groupingBy代码里会生成一个HashMap(hashMap是无序的,put的顺序与get的顺序不一致) HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方。所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟put的顺序不同(除非在put的时候key...转载 2021-10-11 17:39:58 · 921 阅读 · 0 评论 -
Arrays.sort()和lambda表达式
1、对基本数据类型数组的排序:数字排序:int[] intArray = new int[]{1,34,5,-9};Arrays.sort(intArray);System.out.println(Arrays.toString(intArray));字符串排序(先大写后小写):String[] strArray = new String[]{"Z", "a", "D"}; Arrays.sort(strArray); System.out.println(Arrays.toString(转载 2021-04-13 10:20:34 · 2494 阅读 · 0 评论 -
【java 基础】语法糖介绍
语法糖 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。 有意思的是,在编程领域,除了语法糖,还有语法盐和语法糖精的说法,篇幅有限这里不做扩展了。 我们所熟知的编程语言中...转载 2021-01-27 23:58:18 · 474 阅读 · 0 评论 -
【maven】以tar.gz方式打包项目
1、pom <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1&l原创 2021-01-24 21:34:59 · 2757 阅读 · 0 评论 -
【日志】springboot整合log4j2以及log4j2.xml的模板
1、pom文件 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> </parent> <dependency>原创 2021-01-24 21:34:17 · 1040 阅读 · 0 评论 -
【java 基础】枚举深思之反编译枚举类,验证枚举实现单例是线程安全的
1、原创 2021-01-14 23:37:51 · 380 阅读 · 1 评论 -
【java 基础】 枚举深入理解
1、什么时候用枚举如果类的对象是有限个,确定的,那么我们就可以用枚举类。枚举理解成一一列举。比如支付状态和订单状态:支付方式:cash(现金) WeChatPay(微信)、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡)订单状态:Nonpayment(未付款)、Paid(已付款)、Fulfilled(已配货)、Delivered(已发货)、Returen(退货)、Checked(已确认)当需要定义一组常量时,强烈建议使用枚举类...原创 2021-01-14 23:37:18 · 243 阅读 · 0 评论 -
【DJL】Springboot+Maven+DJL实现java调取pytorch模型
前言近期学习了DJL(深度java学习),有了一点小的研究成果,特以此博客分享给大家。这个技术是一个特别新的技术,是亚马逊云服务在2019年re:Invent大会推出的专为Java开发者量身定制的深度学习框架,网上的资料比较少,只有官方文档可以参考,研究起来难度比较大,但是经过不懈的努力,终于搞定了,接下来以官网的demo入门。由于这块有很多坑,所以有必要好好的说一下。官网地址:https://docs.djl.ai/jupyter/load_pytorch_model.htmldemo1、创建Sp原创 2020-08-23 21:39:49 · 14887 阅读 · 26 评论 -
org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader的原因
SpringBoot2.X版本+junit 单元测试+idea2017.1报了如下的错:问题分析,查阅了大量的资料,得出了一个结论,SpringBoot2.x中默认的使用junit5,但是idea20017.1不支持junit5,所以我们可以通过升级idea到2018以上版本来解决此问题,这个亲测有效。然后另一种办法可以不用SpringBootTest注解进行单元,用以前的方法,但是一些注解就不能用了,这个不建议用。...原创 2020-08-06 13:07:35 · 660 阅读 · 0 评论 -
彻底搞懂jdk1.8中的haspMap原理(源码解析+ 对比jdk1.7)
前言:本博客只对jdk1.7中的hashMap进行文字性的说明,源码的说明只针对jdk1.8,因为现在开发多数都是jdk1.8.一、map结构它是双列数据,保存具有映射关系“key-value对”的集合,map中的元素具有无序的,不可重复的特点,那么这个特点是怎么保证的呢,我们可以将它的key 看成set存储(因为它是无序的,不可重复的),将它的value看成collection存储(有序,可重复的)二、HashMap的底层实现原理jdk1.8HashMap的大致结构如下图所示:其中哈希表是一个原创 2020-07-05 20:37:51 · 541 阅读 · 0 评论 -
为什么匿名类是没有名字的,明明有名字的解释
首先大家看一下下面的代码,大家应该还算熟悉吧,他其实就是一个匿名类。 Runnable runnable = new Runnable() { @Override public void run() { for (int i = 1; i <= 20; i++) { ad.loopA(i); } } };原创 2020-07-02 13:15:08 · 720 阅读 · 0 评论 -
Java Integer.valueOf()和Integer.parseInt()的区别
前言大家都知道Integer类中有Integer.valueOf(String s)和Integer.parseInt(String s)两个静态方法,他们都能够将字符串转换为整型。说到这里你肯定会想同一个功能为什么要提供两个不同的方法,这不是浪费吗?区别Integer.parseInt(String s)将会返回int常量。Integer.valueOf(String s)将会返回Integer类型,如果存在缓存将会返回缓存中已有的对象。使用不当将会产生的问题由于Java的自动拆箱和装箱机制导转载 2020-06-28 16:49:18 · 5167 阅读 · 1 评论 -
彻底明白LinkedList插入数据的实现原理
前言:linkedList是通过一个双向链表来实现的,它允许插入所有元素,包括null,它是线程不安全的1、双向链表是什么样子如下图:双向立案别有一个first指针和next指针,分别指向头结点和尾结点。另外还有一个前指针和后指针,指向前驱结点和后继结点上篇博客我们着重的讲解了ArrayList的扩容机制和add 方法,其中ArrayList如果在指定位置插入相关元素是非常耗时的,时间复杂度为O(n),那么这个双向链表到底是如何实现插入数据的呢,请看下图:2、源码分析2.1 属性 // 链原创 2020-06-25 22:16:57 · 4368 阅读 · 0 评论 -
jdk1.8中 ArrayList 底层数组到底是怎么扩容的
一、结论先行ArrayList在JDK1.8与JDK1.7底层区别JDK1.7:ArrayList像饿汉式,直接创建一个初始容量为10的数组JDK1.8:ArrayList像懒汉式,一开始创建一个长度为0的数组,当添加第一个元素时再创建一个始容量为10的数组二、JDK1.8源码分析1、ArrayList 属性 /** * 默认容量的大小 */ private static final int DEFAULT_CAPACITY = 10; /**原创 2020-06-25 10:09:14 · 832 阅读 · 0 评论 -
【java】StringUtils.isEmpty 和 StringUtils.isBlank的区别
1、所需要的包import org.apache.commons.lang.StringUtils;2、StringUtils.isEmpty这个用来判断字符串是否为空,等同于:str==null || str.length()==0System.out.println(StringUtils.isEmpty(null)); //trueSystem.out.printl...原创 2020-04-19 22:29:59 · 1348 阅读 · 1 评论 -
java8新特性之stream的collect实战
1、list转换成list不带return方式 List<Long> ids=wrongTmpList.stream().map(c->c.getId()).collect(Collectors.toList());带return方式// spu集合转化成spubo集合//java8的新特性 List<SpuBo> spuBos=spuLis...原创 2019-12-03 10:04:11 · 403 阅读 · 3 评论 -
yml配置 向前端返回数据时自动忽略参数为null的属性
44原创 2019-10-16 09:08:53 · 928 阅读 · 5 评论 -
【java web】servlet的原理浅分析以及servlet的生命周期方法总结
前言:在学习servlet的时候,看了很多的资料,包括网上写的特别牛逼的文章,本人是真的看不懂,但是初学者,可以看下这篇博客(大神可以自己走开了)1.什么是servlet它的全称是server applet,说白了就是运行在服务器端的小程序,Servlet就是一个接口,定义了Java类被浏览器访问到(服务器tomcat识别)的规则。...原创 2019-08-01 21:11:14 · 273 阅读 · 5 评论 -
【idea】Could not autowire. No beans of 'XXXX' type found.
如下图:在使用@Autowired注解的时候,提示找不到bean类型,查找了半天错误,发现这就不是错误,因为它根本不会影响程序的运行! 此时我以为是我的Service层注解没写,可是明明写了!看下面的解决办法!解决办法:点击文件–setting–Editor–Inspections–spring–Warning–Apply–OK...原创 2019-07-27 17:11:19 · 978 阅读 · 7 评论 -
【java】【spring】整合junit(有详细的分析过程)
此博客解决了什么问题:解决测试的时候代码冗余的问题:测试类代码:(只给大家展示测试类的代码)public class AccountServiceTest { @Test public void testFindAll(){ //1.获取容器 ApplicationContext ac=new ClassPathXmlApplicationCo...原创 2019-07-27 22:42:58 · 257 阅读 · 9 评论 -
【idea】恢复普通的文件夹为Module(remove module 后如何重新打开项目)
情景在线:下图:一个是普通的文件夹,一个是module,解决步骤1.右击项目:选择Open Module Settings然后点击左边的Modules,选择上边的绿色的加号,然后点击Import Module此时找到你要变为module的项目选择后,点击OK然后选择next选择Mark All 在点击next ,一直next,最后点击finish ,在点击OK最后的...原创 2019-08-01 11:19:10 · 12822 阅读 · 15 评论 -
JDBC 超详细讲解
前言:现在对于数据库的连接,为了解耦合,各种架构对数据库的链接部分都有一些封装,让开发人员更加容易的编写代码,但是要是将原来没有架构封装的数据库弄明白也是相当重要的!接下来和我一探究竟吧!之前学C#的时候,也有数据库的连接,java和C#的原理是一样的,当时也有过深入的研究,感兴趣的朋友也可以去看看.接下来不如正题,开始JDBC学习!1.JDBC是个什么东西呢:连接数据库的,它其实是官方定...原创 2019-08-04 10:58:25 · 1320 阅读 · 3 评论 -
【idea】解决用骨架创建项目过慢的问题
如下图:点击加号添加键值对:archetypeCataloginternal原创 2019-07-31 09:21:53 · 714 阅读 · 11 评论 -
idea【SpringBoot】工程热部署(自动构建)的实现
实现效果:就是我们一边修改代码中的内容,不用在重新运行启动的项目,系统自己会构建!只需要在页面上刷新就可以实现内容的变换。解释:如下图:在我的Controller层中有一个quick页面,内容为77777 sprintboot浏览器中的内容是77777 sprintboot此时我想要页面显示66666 sprintboot我们只需要将代码中的内容改为66666 sprintboot...原创 2019-07-30 17:16:17 · 537 阅读 · 16 评论 -
【java】idea新建子目录时命名不是树形结构的解决方法
问题再现解决办法:点击设置,然后再点击Compact Middle Packages,如下图:成功原创 2019-07-07 15:32:19 · 505 阅读 · 7 评论 -
【java】idea解决Command line is to long的问题
错误信息:Error running ‘IntegralkernelProviderApplilcation’:Command line is too long.Shorten command line for IntrgrralkernelProviderApplication or also for Application default configuration解决办法:如下图点击小锤...原创 2019-07-06 12:31:05 · 8929 阅读 · 7 评论 -
【java】Maven简介,以及为什么引入Maven, Maven在idea中的配置,自动下载项目依赖配置
1.什么是MavenMaven 是一个项目管理工具,它包含了一个项目对象模 型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑!以上是一个大牛给的定义...原创 2019-07-06 11:42:45 · 4079 阅读 · 9 评论 -
【java Web】黑马旅游网小知识点全面总结
1.前后端传、接收数据,参数(1)servlet接收前端:request.getParameter("check");(2)servlet传值给前端(序列化用ObjecMapper) /** * 直接将传入的对象序列化为json,并且写回客户端 * @param obj */ public void writeValue(Object obj,...原创 2019-08-23 16:05:18 · 1312 阅读 · 2 评论 -
redis在windows环境下闪退的有效的解决办法
1.在解压后的redis文件夹下新建立一个文本文档(.txt文件)2.在文本文档中写入redis-server.exe redis.windows.conf 这句话3.将文件名改成start.bat4.打开redis.windoows.conf文件,在最后一行加上maxmemory 209715200...原创 2019-08-14 21:50:44 · 2611 阅读 · 8 评论 -
【springCloud】feign.RetryableException: Read timed out executing GET.。的有效解决办法
1.错误如下图2.解决办法错误提示是请求超时,那我们就把请求的时间改大不久行了,这也是网上的大多数朋友给的解决方案,在网关配置ribbon:ribbon: ConnectTimeout: 60000 # 连接超时时间(ms) ReadTimeout: 60000 # 通信超时时间(ms)hystrix: command: default: executi...原创 2019-10-08 16:13:48 · 12881 阅读 · 3 评论