- 博客(59)
- 收藏
- 关注
原创 权限管理核心:Shiro框架解析
身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和密码,看其是否与系统中存储的该用户的用户名和密码一致,来判断用户身份是否正确。例如:密码登录,手机短信验证,三方授权等。授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后,系统会为其分配对应的权限,当访问资源时,会校验其是否有访问此资源的权限。这里首先理解4个对象用户对象user;当前操作的用户,程序。资源对象resource:当前被访问的对象。
2025-10-09 10:54:23
647
原创 Redis持久化与删除策略详解
Redis持久化与数据管理摘要 Redis提供RDB和AOF两种持久化方式:RDB通过快照保存数据,适合备份但可能丢失数据;AOF记录操作日志,实时性更好但文件较大。二者可结合使用。 数据删除策略分为: 过期数据删除:定时删除(耗CPU)、惰性删除(占内存)、定期删除(折中方案) 内存淘汰策略:当内存不足时,根据LRU/LFU等算法淘汰数据 企业级解决方案包括: 缓存预热:启动前加载热点数据 缓存雪崩:分散过期时间/集群部署 缓存击穿:互斥锁或逻辑过期方案 缓存穿透:缓存空对象或布隆过滤器 每种方案需根据业
2025-09-24 20:51:11
993
原创 Redis入门指南:从安装到实战应用
Redis是用C语言开发的一个开源的高性能键值对数据库(key-value).特征:1.数据间没有必然的关联关系2.内部采用单线程机制进行工作3.高性能,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s4.多数据类型支持字符串类型列表类型散列类型集合类型有序集合类型5.,可以进行数据灾难恢复。
2025-09-22 21:43:28
902
原创 MyBatisPlus快速入门:简化CRUD操作
Mybatis的入门案例与简介,这个和其他课程不一样,其他课程都是先介绍概念,然后再写入门案例,而对于MyBatisPlus的学习,我们将顺序做了调整,主要的原因MyBatisPlus主要是对MyBatis的简化,所有我们先体会下它的简化在哪,然后在学习是什么,以及它帮我们都做那些事。
2025-09-22 20:09:28
1107
原创 静态代理VS动态代理
CGLIB动态代理:基于继承实现,无需目标实现接口,代理类继承目标类并重写其方法(需引入CGLIB库)。制拦截方法调用,并在运行时增强逻辑织入目标方法。JDK动态代理:基于接口实现的,要求目标类必须实现接口,代理动态生成并实现相同接口。,无需手动编写,通过。
2025-09-18 10:41:53
146
原创 深入解析Spring AOP核心原理
AOP是的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生泛型。利用AOP可以对业务逻辑的各个部分进行隔离,,同时提高了开发的效率。将哪些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理,日志管理,权限控制)封装抽成一个可重用的模块,这个模块被命名为“切面”,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可拓展性和可维护性。
2025-09-11 20:10:49
683
原创 Spring DI/IOC核心原理详解
</bean>替换:<context:component-scan base-package="">替换:<bean id="" class="">
2025-09-10 18:55:32
691
原创 Servlet基础
(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进行管理操作。(浏览器/服务器)结构,是随着internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现。jsp本质上就是一个servlet,jsp适合表示层开发, servlet适合封装控制逻辑。:主机的IP地址:端口号。
2025-09-02 22:18:07
333
原创 MyBatis
目录JDBC编程和ORM模型MyBatis配置文件MyBatis动态代理和映射器一、动态 SQL 概述二、if 元素三、choose、when、otherwise 元素四、trim、where、set 元素where 元素set 元素trim 元素五、foreach 元素六、bind 元素小结:Mybatis映射器注解一、映射器注解概述1.1 映射器配置文件的缺陷1.2 常用注解分类二、基本注解(CRUD 操作)2.1 @Insert(新增操作)主键处2.2 @Delete(删除操作)2.3 @Update
2025-08-31 23:20:01
1099
原创 java-动态代理
1.为什么需要代理呢?代理可以无侵入式的给对象增强其他的功能2.代理长什么样?代理里面就是对象被代理的方法3.java通过上面来保证代理的样子?通过接口保证,后米娜的对象和代理需要实现同一个接口,接口中就是被代理的所有方法。
2025-08-16 17:02:38
686
原创 Linux-常用命令
普通文件 l 链接文件 d 目录 c 字符设备文件 b 块设备文件 s 套接字还被称为数据接口文件 p 管道文件。find . -name "*.txt" 查找当前目录所有.txt文件。find / -name "*.txt" 查找根目录所有.txt文件。find . -type s 查看当前目录所有的socket文件。rm -r 文件夹 删除目录下所有文件夹和文件 带询问的。cp 文件1 文件2 目录 将文件1 2拷贝到目录中。ls -a /bin 显示/bin下的所有目录。
2025-08-11 21:42:19
1216
原创 数组练习(一)
System.out.println("测试用例1结果: " + solution.threeSum(nums1));package 盛水问题;
2025-08-10 19:18:35
803
原创 Java反射机制全面解析
在Java中,除了int等基本类型外,Java的其他类型全部都是class(包括interfaceStringObjectRunnableException...Java反射机制是Java语言的一个重要特性。在学习Java反射机制前,大家应该先了解两个概念:编译期和运行期。编译期:是指把源码交给编译器编译成计算机可以执行的文件的过程。在Java中也就是把Java代码编成class文件的过程。编译期只是做了一些翻译功能,并没有把代码放在内存中运行起来,而只是把代码当成文本进行操作。
2025-08-09 22:41:23
804
原创 线程-线程池篇(二)
线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待.│Task5│├─────┤│Task6│└─────┘...线程数固定的线程池线程池参数:核心线程数和最大线程数一致非核心线程线程空闲存活时间,即为0阻塞队列为无界队列工作机制提交线程任务如果线程数少于核心线程,创建核心线程执行任务如果线程数等于核心线程,把任务添加到阻塞队列。
2025-08-06 22:54:01
832
原创 Java多线程入门:从基础到实战
本文系统介绍了多线程编程的核心概念与Java实现。主要内容包括:1)进程与线程的区别,线程是CPU调度的最小单位,共享进程资源;2)Java线程创建方式(继承Thread类、实现Runnable/Callable接口);3)线程常用方法(start/join/sleep/interrupt/yield)及状态管理;4)守护线程特性;5)synchronized同步锁的三种使用方式(实例方法、静态方法、代码块)及其原理。文章通过代码示例详细演示了多线程的基本操作,并强调了线程安全的重要性,为Java多线程开发
2025-08-04 21:52:41
852
原创 力扣-最大单词长度乘积
给你一个字符串数组 words,找出并返回 length (words [i]) * length (words [j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0。
2025-08-01 23:56:49
308
原创 网络编程-加密算法
计算机网络是指两台或更多的计算机组成的网络,在同一个网络中,任意两台计算机都可以直接通信,因为所有计算机都需要遵循同一种网络协议。那什么是互联网呢?互联网是网络的网络(internet),即把很多计算机网络连接起来,形成一个全球统一的互联网。对某个特定的计算机网络来说,它可能使用网络协议ABC,而另一个计算机网络可能使用网络协议XYZ。如果计算机网络各自的通讯协议不统一,就没法把不同的网络连接起来形成互联网。因此,为了把计算机网络接入互联网,就必须使用TCP/IP协议。TCP/IP。
2025-08-01 20:17:39
704
原创 Excel高效解析与大数据处理实战
在应用程序的开发过程中,经常需要使用Excel文件来进行数据的导入或导出。所以,在通过Java语言实现此类需求的时候,往往会面临着Excel文件的解析(导入)或生成(导出)。Apache POIJXL等。Apache POI基于DOM方式进行解析,将文件直接加载内存,所以速度较快,适合Excel文件数据量不大的应用场景。JXL只支持Excel 2003以下版本,所以不太常见。
2025-07-30 19:06:34
745
原创 JSON核心解析与应用指南
JSON是一种轻量级的数据交换格式。它基于ECMAScript, 欧洲计算机协会制定的JavaScript规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
2025-07-29 23:03:45
1172
原创 文件操作 & IO流
Reader是Java的IO库提供的另一个输入流接口。和的区别是,是一个字节流,即以byte为单位读取,而Reader是一个字符流,即以charReader字节流,以byte为单位字符流,以char为单位读取字节(-10~255int read()读取字符(-10~65535int read()是所有字符输入流的超类,它最主要的方法是int read(),这个方法读取字符流的下一个字符,并返回字符表示的int,范围是0~65535。如果已读到末尾,返回-1。2.方法。
2025-07-28 21:29:21
956
原创 Java集合框架与数据结构全解析
HashMap内部数据结构使用数组链表红黑树进行存储。数组类型为Node[],每个Node都保存了某个KV键值对元素的keyvaluehashnext等值。由于next的存在,所以每个Node对象都是一个单向链表中的组成节点。当新添加一个KV键值对元素时,通过该元素的key的hash值,计算该元素在数组中应该保存的下标位置。如果该下标位置如果已经存在其它Node对象,则采用链地址法处理,即将新添加的KV键值对元素将以链表形式存储。将新元素封装成一个新的Node对象,插入到该下标位置的链表尾部(尾插法)。
2025-07-26 17:08:28
1029
原创 谈谈你对ArrayList的理解,有了解过LinkedList吗?
将头节点赋值给f节点,new一个新节点,此节点有三个元素,pre,next,e。当元素不足时,调用grow()方法进行扩容,每次扩容后容量都会变为原来的1.5倍。指定位置插入:在指定位置插入新元素,需要从链表的头节点(或尾节点),遍历到指定的位置,然后在修改指定节点的prev前驱指向新节点。当ArrayList容量超出范围,需要扩容,这里我们将原数组复制到新数组中,然后在执行添加元素的操作。头插: 只需要头节点的前驱指向新节点,就可以完成插入操作。尾插:只需要尾节点的next后继指向新节点。
2025-07-23 23:20:13
606
1
原创 List集合全面解析与实战指南
在集合类中,List是最基础的一种集合:它是一种有序列表。ListList内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。List和数组类似,也是有序结构。但是,如果我们使用数组,在添加和删除元素的时候,会非常不方便。因此,在实际应用中,需要增删元素的有序列表,我们使用最多的是ArrayList。实际上,ArrayList在内部使用了数组来存储所有元素。size=5然后,往内部指定索引的数组位置添加一个元素,然后把size加1size=6。
2025-07-23 18:34:29
1035
原创 Java异常处理与日志记录全指南
在编写程序的过程中,发现程序运行结果与预期不符,怎么办?2001年以前,全凭System.out和System.err打印出执行过程中的某些变量,观察每一步的结果与代码逻辑是否符合,然后有针对性地修改代码。代码改好了怎么办?当然是删除没有用的System.out和System.err语句了。如果改代码又改出问题怎么办?再加上输出语句。反复这么搞几次,很快大家就发现这样非常麻烦。产生大量的IO操作 同时在生产环境中 无法合理的控制是否需要输出输出的内容不能保存到文件。
2025-07-22 18:22:17
757
原创 Java大数处理与异常捕获实战指南
注意到Weekday定义的常量范围是0~6,并不包含7,编译器无法检查不在枚举中的int值;定义的常量仍可与其他变量比较,但其用途并非是枚举星期值。但是,无论是int常量还是String常量,使用这些常量来表示一组枚举值的时候,有一个严重的问题就是,编译器无法检查每个值的合理性。// TODO:注意到Weekday定义的常量范围是0~6,并不包含7,编译器无法检查不在枚举中的int值;定义的常量仍可与其他变量比较,但其用途并非是枚举星期值。
2025-07-22 00:21:29
610
原创 Java字符串操作全解析
首先来回顾下String类的特点: 任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指 向而已。虽然可以直接拼接字符串,但是,在循环中,每次循环都会创建新的字符串对象,然后扔掉旧的字符串。的赋值写法,称为自动装箱(Auto Boxing),反过来,把Integer变为int的赋值写法,称为自动拆箱(Auto Unboxing)。等)都会创建新的字符串对象。,但实际上那只是Java编译器在编译期,会自动把所有相同的字符串当作一个对象放入常量池,
2025-07-20 15:53:52
625
原创 深入解析Java中的static关键字
friendly(默认访问修饰符):在同一包内可见,不使用任何修饰符。使用位置:类、接口、变量、方法。private(私有访问修饰符): 在同一类的内部可见。使用位置:变量、方法。public(公共访问修饰符): 对所有类可见。使用位置:类、接口、变量、方法protected(保护访问修饰符): 对同一包内的类、或子类(子类可以不同包)可见。使用位置:变量、方法。修饰符当前类同一包内子类(同一包)子类(不同包)其他包publicYesYesYesYesYesprotected。
2025-07-19 13:28:43
625
原创 Java多态与抽象类接口详解
如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法在定义一个方法时使用abstract关键字,表示它是一个抽象方法,本身没有实现任何方法语句。因为这个抽象方法本身是无法执行的,所以,Person类也无法被实例化。编译器会告诉我们,无法编译Person类,因为它包含抽象方法。/*当一个类中没有成员变量,且所有的方法为抽象方法时,可以定义为接口接口定义:修饰符 interface I接口名{1.常量2.抽象方法()
2025-07-17 19:39:27
1091
原创 spring容器的bean是单例还是多例的?线程安全吗?
spring容器的bean默认是单例的。默认是项目启动时实例化的,(如果想要延迟初始化,通过@lazy注解可以延迟初始化)。首先,bean的线程安全取决于bean的状态及bean的作用域。
2025-07-16 23:16:53
518
原创 hashMap原理(一)
默认负载因子是0.75,当HashMap的元素数量达到数组容量的75%时,HashMap会自动扩容,通常会将数组容量扩展为原来的2倍。扩容时,HashMap会重新分配一个更大的数组,并将原来的数组映射到新的数组中,这个过程叫做rehashing。当链表长度过长时候,时间复杂度变为O(n).当链表长度超过一定的阈值(默认是8)时,链表会转换为红黑树,从而将时间复杂度从O(n)降低到O(log n).如果发生哈希冲突,hashMap会将相同的哈希值的元素以链表的形式存储在一个桶中(数组的某个位置)。
2025-07-16 22:07:52
281
原创 Java继承机制与关键概念解析
术语中我们把Person称为 超类(super class),父类(parent class),基类(base class, Student称为子类(sub class).一般来说,java中,父类没有明确写继承的类,编译器会自动加上extends object,所有的类最终的都会指向。,不能把父类变为子类,因为子类功能比父类多,多出的功能无法凭空变出来。实际上判断一个变量所指向的实例是否是指定类型,或者这个类型的子类。和向上转型相反,如果把一个父类类型强制转型为子类类型,就是向下转型(
2025-07-16 20:18:41
1118
原创 面向对象编程核心:类与实例详解
面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方法。class和instance所以,只要理解了class和instance的概念,基本上就明白了什么是面向对象编程。类class是一种对象模版,它定义了如何创建实例,因此,class本身就是一种数据类型.对象:而instance是对象实例,instance是根据class创建的实例,可以创建多个instance,每个instance类型相同,但各自属性可能不相同.注意:a.new关键字用于创建一个对象的实例.
2025-07-15 19:09:41
1013
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅