自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(393)
  • 收藏
  • 关注

原创 Redis 的 Java 客户端有哪些?官方推荐哪个?

使用建议如果你不需要 Redis 的高级功能,优先推荐使用 Lettuce,因为它的性能较好,并且提供了良好的线程安全性。如果你的应用中需要使用到 Redis 的高级功能,建议使用 Redisson,它提供了很多开箱即用的 Redis 高级功能。Jedis 是一个纯粹的 Redis 客户端,如果你需要简单的同步操作,Jedis 是一个不错的选择,但需要注意线程安全和连接管理。

2024-09-24 15:00:57 250

原创 Java 并发编程:深入理解锁机制与线程安全

在现代软件开发中,并发编程是一个极其重要的课题,尤其在需要高性能和低延迟的应用场景中,合理地管理线程并保证线程安全至关重要。Java 提供了一整套并发工具和机制,帮助我们应对多线程环境中的复杂问题。然而,随着线程数量的增加,竞态条件(Race Condition)、死锁(Deadlock)等问题也逐渐浮现。为了避免这些问题,理解并使用锁机制至关重要。

2024-09-24 15:00:21 473

原创 Java 的垃圾回收机制(GC)

Java 的垃圾回收机制基于堆内存(Heap Memory)管理。堆内存是所有对象实例和数组存储的地方。在 Java 程序运行时,随着对象的不断创建,堆中的空间会逐渐减少。当堆中的空闲内存不足时,垃圾回收器会启动,回收那些不再被任何线程引用的对象,从而释放内存空间。Java 虚拟机(JVM)将堆内存划分为年轻代(Young Generation)和老年代年轻代又细分为Eden 区和两个较小的Survivor 区(S0 和 S1)。

2024-09-24 14:59:45 841

原创 一文彻底搞懂分布式锁(强烈建议打开看看!)

加分布式锁是因为再分布式集群部署的情况下,并发指的不是多个线程,二是多个进程或多个服务器;如果只是加线程锁只能保证一个JVM下的线程互斥,而其他的JVM还是可以进行访问的,从而造成数据不一致!所以可以理解为zookeeper是公平锁,但是可以是实现非公平锁,比如只创建一个临时有序节点,其他进程进行争抢!

2024-09-23 14:53:14 601

原创 spring-ioc实现原理

继续学习IOC这部分内容,只不过这次我们用spring实现IOC。这里核心容器中的每个模块,都对应了单独依赖。xml代码解读复制代码spring-context 上下文,容器spring-beans 创建对象spring-core 核心jarspring-expression【SpEL】 表达式jar四个依赖的关系:通过这个依赖关系图,可以看到,只要是依赖spring-context,就相当于把所有spring的核心模块都依赖进来了。

2024-09-23 14:52:26 853

原创 Nginx配置最全详解(万字图文总结)

Nginx(发音为“Engine-X”)是一个开源的高性能 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。由俄罗斯程序员 Igor Sysoev 创建。它以其高稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。Nginx 最初是为了解决 C10K 问题(即同时处理 10000 个客户端连接)而设计的,现在已经成为世界上最流行的 Web 服务器之一。Nginx 是一个多功能、高性能的 Web 服务器和反向代理,适用于各种网络应用场景。

2024-09-23 14:51:17 895

原创 Java并发编程从入门到进阶 多场景实战

使用场景CallableFuture方式适合那些需要获取执行结果的任务,而Runnable不关心是否有返回值。Thread继承方式同样不关注返回值,但在某些情况下可能更适合简单任务。并发支持:使用可以更容易地管理和控制大量的线程。它提供了高级的并发支持,比如可以设置线程池大小、管理线程的生命周期等。而直接使用Thread或者Runnable则需要手动管理这些方面。扩展性和维护性:使用和CallableFuture可以让代码更易于扩展和维护,尤其是在需要管理多个异步任务的时候。而直接使用Thread。

2024-09-23 14:50:45 564

原创 Java设计模式:解释器模式的介绍及代码演示

解释器模式是指,将一种特定的语言或语法,解释为有用的信息。比如说将英语解释为中文、解析正则表达式、汇编语言解析为机器语言等这些都可以看作是解析器模式。通过解析器模式,甚至可以设计自己的语言,然后通过自定义的解析器去翻译它。例如,现在要实现一个需求,将hmhmwsbm翻译成黑猫黑猫我是白猫,就可以使用解释器模式去实现。

2024-09-20 15:33:28 382

原创 手写Spring第三篇,原来Spring容器是使用反射来初始化对象的

今天我来辟一下谣,真的是这样的。这小子的样品确实被我收了,不过这小子没给真东西给我,只给了一个指针,害我宝贝得存起来了。本来还想再招两个人的,但有个被卷怕的奋斗b来应该说他带一个团队,但只收一个人的工资来干活。团队干活的是大杂烩,他啥都想插一手,啥都想露脸,是模板哥的得力助手。他说模板这一套他门清,不止写程序要用模板,连带团队抢活干也需要模板,第一步是抢别人工作,第二步是入职还要带团队加班,第三步是让人骂,第四步是让人砍。用这个就不用拿样品来了,直接和我说要什么豆子,下次来取我直接给你一个好的豆子。

2024-09-20 15:32:45 948

原创 多线程最佳实践之使用completablefuture在电商项目中的应用

把发票的每一块数据分别进行异步查询,最终阻塞等待完成所有模块的查询后,进行数据的最终组装。

2024-09-20 15:31:32 359

原创 Java八股文最新面试总结,持续更新

Object中的equals()方法用于判断this和obj本身的值是否相等,即用来判断调用equals方法的对象和形参obj所引用的对象是否是同一对象。反之,则返回false。AVA反射机制是在运行状态中,对于任意一个类,都能够获取这个类的所有属性(属性的权限修饰符,数据类型,变量名等)和方法(方法名,返回值,参数等),构造器,运行时类实现的接口,所在的包,注解等,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2024-09-20 14:28:14 1207

原创 2024Java面试八股文合集(持续更新)

1、为什么静态方法不能调用非静态方法和变量?类在加载的时候,会将所有被static修饰的内容(包括方法和属性)初始化,但此时非静态方法和变量还没有经过初始化,也就是没有内存空间,调用的时候就会出错。

2024-09-20 14:24:42 1827

原创 Java微基准测试框架入门

具体来说,如果 JVM 检测到某些代码的结果没有被使用,它可能会在优化时将这些代码完全消除,从而导致基准测试的时间测量不准确。在 Java 中,进行性能测试(特别是微基准测试)是非常复杂的,因为 JVM 会执行一系列的优化操作(如即时编译、垃圾回收等),这些操作会影响测试结果的准确性。隔离测试:为了确保测试结果的可重复性,JMH会在单独的JVM进程中运行每个基准测试。在Java开发中,性能优化是一个持续的过程,它要求我们不仅理解代码的逻辑,还需要对代码的执行效率有深入的认识。

2024-09-19 15:31:15 944

原创 基于Mybatis实现动态数据源切换

通过实现方法,并结合 Spring 框架内部的逻辑,我们可以实现在运行时根据不同的条件动态地选择和切换数据源。这种机制允许应用程序在处理不同的请求或事务时使用不同的数据库连接,从而提供了极大的灵活性和扩展性。

2024-09-19 15:30:17 804

原创 除了递归算法,要如何优化实现文件搜索功能

是一种用于优化递归算法的技术,它通过缓存函数的中间结果来避免重复计算,从而提高性能。这个技术在计算具有重叠子问题(overlapping subproblems)的递归算法时非常有用,如斐波那契数列、背包问题、动态规划等。

2024-09-19 15:29:34 639

原创 Java面试八股文(全网最全)

1. 什么是字节码?采用字节码的好处是什么?所谓的字节码,就是 Java 程序经过编译之类产生的.class 文件,字节码能够被虚拟机识别,从而实现 Java 程序的跨平台性。Java 程序从源代码到运行主要有三步:编译:将我们的代码(.java)编译成虚拟机可以识别理解的字节码(.class)解释:虚拟机执行Java字节码,将字节码翻译成机器能识别的机器码执行:对应的机器执行二进制机器码

2024-09-19 14:36:53 1642

原创 6种延迟队列的实现方式

通过设置元素的 score 为过期时间戳,可以实现在特定时间自动过期并被消费。Quartz 是一个开源的任务调度库,可以集成到几乎任何Java应用中,用于定时执行任务。Redis 可以配置过期事件通知,当一个键过期时,Redis 会发送一个事件通知给订阅了该事件的客户端。RabbitMQ 通过消息的 TTL(Time To Live)和死信交换机(DLX)来实现延时队列。队列中的元素只有在其指定的延迟时间到达之后才能从队列中取出。下的一个线程安全的阻塞队列,它存储的元素必须实现。是 Java 并发包。

2024-09-18 14:55:20 468

原创 【Spring Security系列】如何用Spring Security集成手机验证码登录?五分钟搞定!

在当今的互联网应用中,手机验证码登录已经成为一种常见的用户身份验证方式。相比传统的用户名密码登录方式,手机验证码具有使用方便、安全性较高的特点。对于开发者来说,如何在现有的系统中快速集成这一功能,尤其是在Spring Security框架下,可能是一个具有挑战性的任务。这篇文章将详细介绍如何利用Spring Security来实现手机验证码的注册和登录功能,帮助你在短时间内搞定这一需求。

2024-09-18 14:54:43 751

原创 如何搭建 Spring Cloud 统一配置服务?

Spring Cloud 配置服务可以用于统一管理微服务的配置。相比于在各个微服务分别编写独立的配置文件,统一的配置服务可以大大提升维护配置文件的效率。本文将依次搭建一个 Registry Service、Config Service、App Service 来演示 Config Service 的作用。其中 Registry Service 是一个 Eureka Server,即服务注册中心;

2024-09-18 14:53:12 1042

原创 Java八股文年度总结诶

1.Java中的多态是怎么实现的?多态的实现离不开继承,在设计程序时,我们可以将参数的类型定义为父类型。在调用程序时,则可以根据实际情况,传入该父类型的某个子类型的实例,这样就实现了多态。对于父类型,可以有三种形式,即普通的类、抽象类、接口。对于子类型,则要根据它自身的特征,重写父类的某些方法,或实现抽象类/接口的某些抽象方法。

2024-09-18 14:25:09 1075

原创 面试大全Java八股文合集

1. Java为什么是单继承,为什么不能多继承?首先,Java是单继承的,指的是Java中一个类只能有一个直接的父类。Java不能多继承,则是说Java中一个类不能直接继承多个父类。Java语言之所以摒弃了多继承的这项特征,是因为多继承容易产生混淆。比如,两个父类中包含相同的方法时,子类在调用该方法或重写该方法时就会迷惑。准确来说,Java是可以实现"多继承"的。因为尽管一个类只能有一个直接父类,但是却可以有任意多个间接的父类。这样的设计方式,避免了多继承时所产生的混淆。

2024-09-18 14:13:19 1947

原创 Java八股文面试600题

程序员面试教程1、HashMap底层,插入,扩容前置知识:二叉树:每个节点至多只有两个子节点的树搜索二叉树:满足当前节点的左子树上的节点不能大于当前节点,右子树上的节点不能小于当前节点的二叉树红黑树:一种自平衡的搜索二叉树,能保证遍历,插入,删除的时间复杂度永远是O(logn)红黑树规则:红黑:节点只有红黑两种颜色,根节点和叶节点一定是黑色,红节点的子节点一定是黑色树:叶节点一定是null,任一节点到叶节点的所有路径包含相同数量的黑节点

2024-09-17 02:25:06 2474

原创 Java八股文最新合集

Java面试题1、常见的集合Java中的集合主要由Collection(单列集合)和Map(双列集合)这两个接口派生而来Collection下有子接口List,Queue,Set(无序)List接口的实现类有ArrayList,vector(线程安全),stack,LinkedList(双向链表)Set接口的实现类有hashset(底层是hashMap),sortedSet(接口)、treeSet(底层是treeMap,遍历有序),LinkedHashSet线程安全的集合:Vector、

2024-09-17 02:23:07 2293

原创 Java八股文合集

1、对象的创建方式1、new2、将类继承Cloneable接口,然后实现clone方法,调用clone方法即可复制对象3、反射(类派发),Student.class.newInstance()4、反射(动态加载),Class.forName("entity.Student").newInstance()5、反射(构造方法),Student.class.getConstructor().newInstance()

2024-09-14 23:39:24 1509

原创 Java八股文(2024年全网最全)

1、多线程的价值?(1) 发挥多核 CPU 的优势多线程,可以真正发挥出多核 CPU 的优势来,达到充分利用 CPU 的目的,采用多线程的方式去同时完成几件事情而不互相干扰。

2024-09-14 23:37:43 1698

原创 @Transactional 注解的错误使用场景

【代码】@Transactional 注解的错误使用场景。

2024-09-13 14:51:18 560

原创 前端入门JAVA:创建第一个java项目

至此,我们使用两种方式创建好了spring Web项目,也搞清楚了两者的区别。

2024-09-13 14:50:35 988

原创 图解支付系统安全设计(精华篇)

支付安全是支付系统最重要的根基之一,没有支付安全,在线支付系统就无从谈起。但是安全又是一门很大的学科,涉及密码学,网络设备,法律法规,流程制度等方方面面。这里只谈一些和软件研发比较紧密的一部分内容,不涉及网络防火墙等网络设备安全。支付安全体系概要;常见加解密、加验签等密码学知识。统一密钥存储及加解密系统设计概要。加密是将明文通过一定的算法和密钥转换成无法识别的密文的过程。比如把明文“123”转成“aexyeffidfdfwsd”。解密。

2024-09-13 14:48:40 1027

原创 JUC从实战到源码:中断机制与API实现

在Java中,线程中断是一种机制,用于通知线程应该停止当前正在执行的任务。中断通常用于协同线程之间的合作,以便让线程在适当的时候终止其工作,尤其是在长时间运行的任务或阻塞操作中。通过学了多线程以及synchronized的相关知识,接下来就到了学习线程中断知识。Java 的中断机制并不是强制终止线程,而是通过设置中断标志、抛出 InterruptedException 来提示线程停止执行。线程必须自己响应和处理这些中断请求。

2024-09-13 14:46:52 1076

原创 Java面试八股文合集(持续更新)

1、HashMap底层,插入,扩容前置知识:二叉树:每个节点至多只有两个子节点的树搜索二叉树:满足当前节点的左子树上的节点不能大于当前节点,右子树上的节点不能小于当前节点的二叉树红黑树:一种自平衡的搜索二叉树,能保证遍历,插入,删除的时间复杂度永远是O(logn)红黑树规则:

2024-09-13 14:25:10 1564

原创 Java最新面试题2024,Java八股文204

1、常见的集合Java中的集合主要由Collection(单列集合)和Map(双列集合)这两个接口派生而来Collection下有子接口List,Queue,Set(无序)List接口的实现类有ArrayList,vector(线程安全),stack,LinkedList(双向链表)Set接口的实现类有hashset(底层是hashMap),sortedSet(接口)、treeSet(底层是treeMap,遍历有序),LinkedHashSet线程安全的集合:Vector、HashTabl

2024-09-13 14:13:27 1691

原创 cross-plateform 跨平台应用程序-09-phonegap/Apache Cordova 介绍

PhoneGap(现在称为 Apache Cordova)是一个开源的移动开发框架,它允许开发者使用 HTML5、CSS3 和 JavaScript 等 Web 技术来构建移动应用。这些应用可以被打包为可以在各种移动操作系统上运行的原生应用,如 iOS、Android、Windows Phone 等。跨平台开发:开发者可以编写一次代码,然后将其部署到多个平台上,无需为每个平台单独编写代码。访问原生设备功能。

2024-09-12 15:36:52 496

原创 spring真的太强了,深度解析,Spring MVC 如何巧妙获取方法参数名

使用Spring 工具类 获取参数名获取参数名有两种原理 1) jdk 反射方法,但需要添加编译参数 -parameters;2)解析字节码Spring Aop 可通过 JoinPoint 获取参数名。

2024-09-12 15:36:21 1094

原创 实战Lambda表达式:程序员视角下的数学之美与探索

Lambda表达式,在编程领域中,通常指的是一种匿名函数的表示方法,特别是在函数式编程语言和某些支持函数式编程范式的语言中。它允许程序员以一种简洁、直观的方式定义小型的、一次性使用的函数,而不需要显式地声明一个完整的函数定义。这种表达方式极大地提高了代码的灵活性和可读性。我认为它代表了编程语言发展中的一大步进。传统的编程范式往往要求我们为每一个功能或操作定义一个明确的函数或过程。这种做法在大型项目中容易导致代码的冗余和组织混乱。而Lambda公式的出现,提供了一种更为优雅和高效的解决方案。

2024-09-12 15:35:03 361

原创 2024Java面试八股文300题

死锁就是一组互相竞争资源的线程,因为互相等待又互不相让资源,导致永久阻塞无法进行下去的情况死锁产生的条件有四个:互斥条件:资源x和y只能分别被一个线程占用占有且等待:线程t1占有资源x后,等待资源y被释放,同时自己不释放资源x不可抢占:其他线程不能强行抢占线程t1占有的资源循环等待:线程t1等待线程t2占有的资源,线程t2等待线程t1占有的资源避免死锁的方法(破坏对应的条件):一次性申请所有资源(破坏互斥条件)

2024-09-12 15:07:19 1388

原创 Java突击面试八股文(15个技术栈,持续更新中)

读取配置信息获取到beandefinition(BeanDefinition 是定义 Bean 的配置元信息接口),存入到map中,推断bean的构造方法,进行实例化,然后进行属性赋值,在初始化后会进行aop的切面,如果创建的bean是单例的,会将单例bean放入到单例池中。(> < like),比如用 a b c d四个字段创建了一个复合索引, a=3 b=5 c>7 d=9 只会用到前三个,因为b c d 是根据a 的后面进行规则的排序,即a是有序的,后面的bcd是无序的。

2024-09-12 15:05:20 1958

原创 squirrel-foundation(松鼠状态机)简单介绍

对于一些主要数据的状态例如支付信息处理代码中的控制外,不会轻易手工处理的,这里有必要对数据库层面做一些触发器的约束,数据完整性可以用MD5进行处理。

2024-09-10 14:29:40 593

原创 cross-plateform 跨平台应用程序-05-Flutter 介绍

Flutter 是由 Google 开发的一个开源移动应用开发框架,它允许开发者使用一套代码库来构建跨平台的移动、Web、桌面和嵌入式设备应用程序。跨平台支持:Flutter 允许开发者用 Dart 语言编写代码,然后编译为原生 ARM 代码,支持 iOS、Android、Windows、macOS 和 Linux 平台。高性能:Flutter 使用自己的高性能渲染引擎,不依赖于平台的原生控件,这意味着它可以提供流畅的 60fps 的动画和过渡效果。丰富的组件库。

2024-09-10 14:28:57 1067

原创 cross-plateform 跨平台应用程序-06-uni-app 介绍

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一次代码,可发布到 iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/京东/美团/钉钉/淘宝)、快应用等多个平台。使用 Vue.js 开发:uni-app 基于 Vue.js,这意味着如果你已经熟悉 Vue.js,那么你将能够轻松上手 uni-app 开发。多端适配:支持编译到多个平台,包括但不限于 iOS、Android、Web、各种小程序和快应用。性能优异。

2024-09-10 14:28:23 774

原创 最全Java面试八股文过过过

反射是通过获取类的class对象,然后动态的获取到这个类的内部结构,动态的去操作类的属性和方法。应用场景有:要操作权限不够的类属性和方法时、实现自定义注解时、动态加载第三方jar包时、按需加载类,节省编译和初始化时间;获取class对象的方法有:class.forName(类路径),类.class(),对象的getClass()当一个线程被剥夺cpu使用权时,切换到另外一个线程执行死锁指多个线程在执行过程中,因争夺资源造成的一种相互等待的僵局。

2024-09-10 13:43:00 2077

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除