- 博客(60)
- 资源 (3)
- 收藏
- 关注
原创 并发编程--下篇
自定义一个读写锁学一下jdk源码,写一个内置的Sync同步器,低位16位记录写锁重入次数,高位16位记录读锁获取次数// 内置同步器// 写锁方法(tryAcquire/tryRelease)-- 独占// 如果存在读锁或写锁(且持有者不是当前线程),获取失败if (state!= 0) {// writeCount是0,但是state不是0,说明有线程获取到了读锁// 检查是否超过最大重入次数(低16位是否溢出)throw new Error("超出最大重入次数");
2025-05-02 22:06:00
513
原创 Java并发探索--上篇
前面分析可以知道ReentrantLock是以AQS为基础框架来实现的,那么,此节我们自定义来实现一个锁。见 “Java并发探索–下篇”
2025-04-28 20:37:03
710
原创 Bean生命周期
在经过三篇文章的分析过后,我们对Spring容器的创建过程有了一个大致的认识:我们都知道是在方法里面进行的,本文就来对Bean的生命周期作一个总结,本文就不探讨具体源码了。通过对该方法的源码查看调试,我们得知invokeBeanFactoryPostProcessors方法会把所有实现BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor的类进行实例化和调用。BeanDefinitionRegistryPostProcessor :: pos
2025-04-22 20:16:29
690
原创 Spring-AOP分析
在上一篇文章中,【】【https://www.cnblogs.com/jackjavacpp/p/18829545】,我们了解到了IOC容器的创建过程,在文末也提到了AOP相关,但是没有作细致分析,这篇文章就结合示例,来详细分析一下Spring-AOP。本文章示例代码见该仓库:【】中的“spring”模块。仓库地址:https://gitee.com/quercus-sp204/sourcecode-and-demos。
2025-04-21 16:57:02
1024
原创 Spring分析-IOC
Spring 是一个基于 Java 平台的开源全栈应用程序框架,也是一个控制反转(IoC)容器实现。Spring IoC 容器即 Spring 框架中负责管理“Bean”(由容器实例化、配置并组装的普通 POJO 对象)的核心组件。容器读取配置元数据(XML、注解或 Java 配置类),解析 Bean 定义,然后在启动或按需时实例化 Bean,完成依赖注入,并负责 Bean 的整个生命周期管理。
2025-04-16 20:22:47
1109
原创 SpringBoot启动run方法分析
经过第二大节的整体分析,我们大致可以知道在容器刷新之前,由于是Servlet的Application,故由模板方法运行创建Servlet容器,ServletContextListener接口contextInitialized会先执行。调用构造方法创建bean对象,实例化Aware 接口InitializingBean接口的afterPropertiesSet()自定义的initMethodRunners对于Spring的容器创建、bean的创建、以及事件等内容的详细分析,请见后续文章。
2025-04-05 12:21:05
671
1
原创 Mybatis源码分析
Mybatis源码也是对Jbdc的再一次封装,不管怎么进行包装,还是会有获取链接、preparedStatement、封装参数、执行这些步骤的。本文来探索一下其运行原理。下面从最简单的mybatis使用案例,来看看mybatis的步骤。
2025-04-01 22:00:35
786
原创 Java中的Map & CAS & AQS
原本是想在写完ConcurrentHashMap后,把cas补上,谁知道先写了cas,aqs。。。。AQS 即 AbstractQueuedSynchronizer【抽象队列同步器】,是 Java 并发包中很多同步器实现的基础框架,如Semaphore等。AQS作为一个抽象类,通常是通过继承来使用的。它本身是没有同步接口的,只是定义了同步状态和同步获取和同步释放的方法。用于构建锁和同步器,它提供了一种在多线程环境下管理同步状态(state)、线程排队等待以及线程唤醒的机制。
2025-03-23 14:02:44
549
原创 数据库MVCC详解
数据库:MySQL。【很多主流数据库都使用了MVCC,比如MySQL的InnoDB引擎、PostgreSQL、Oracle】MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。是数据库管理系统中的一种并发控制方法。它通过保存数据的历史版本来实现,这样。这样的话,提高了并发性能。比如说,当一个事务开始读取数据时,它会看到数据库在某个时间点的快照,之后即使其他事务修改了数据,这个事务看到的还是旧版本的数据,直到它提交或者回滚。
2025-03-20 21:31:10
1295
原创 跟着路线混,三天饿九顿
java基本语法、常用类String,包装类,时间,大数计算等等。java集合【适当debug跟进源码,list,set,map,queue,栈等等】java多线程【各种锁、线程间通信、线程安全的集合类、进程与线程、ThreadLocal,CompletableFuture…】网络编程 【阻塞式io,同步非阻塞io】java反射的使用。
2025-02-19 16:50:00
333
原创 数据库事务详解
今天聊一聊数据库的事务,这里以MySQL为例子。在MySQL中,事务(Transaction)是一组SQL操作的集合,这些操作要么,确保数据的一致性和完整性。。
2025-01-22 19:29:58
1150
原创 SpringBoot原理分析-1
*自动配置: **以spring-boot-starter-web为例子,引入该启动器,他的父级pom里面有spring-boot-starter,spring-boot-starter的父级pom有spring-boot-autoconfigure。spring-boot-autoconfigure里面有Spring官方定义的所有场景。注解:这是自动配置的入口,通常由注解组合引入。文件:Spring Boot 通过文件加载自动配置类。条件化配置:通过系列注解(如等)实现按需加载配置。
2025-01-05 15:16:23
752
原创 Nginx + Lua脚本打配合
今天实现一个非常简单的例子.那么就可以通过nginx反向代理,就达到了不暴露端口的目的了。但是,我又不想别人随便访问,要加一些限制。比如必须要有指定的请求头。用nginx配置就行了呗。但是,还是不安全呐,随便别人如果F12查看请求的话,还是可以发现我的请求头啊。他随便捏造一个也可以访问这个应用了呀。我这里是宝塔面板的openresty,安装的自带有redis模块。(这个安装就不放了)
2024-12-23 20:00:50
649
原创 代理&动态代理
这些例子都展示了代理模式如何在不同的场景中提供了对“真实对象”的间接控制。通过上面这些例子,可以看到“代理”大致有三个角色:客户端(使用者)、代理(中间层)、真实对象(交付委托的对象、目标对象)。通过使用代理模式,系统能够在不直接暴露真实对象的情况下,提供更多的控制和优化,这对于实际的软件设计和架构非常重要。
2024-12-02 16:38:15
677
原创 Java Stream与多线程
学习了尚硅谷的JUC,周阳老师讲的商城比较价格的案例,自己模拟了一个多线程的demo, 多线程处理任务并且汇总结果,出现了疑问,实例代码放在下面,读者有兴趣的话可ctrl+cv玩一玩
2023-08-31 09:08:35
408
原创 SpringSecurity 入门
SpringSecurity 入门一步一步来。集各家之所长,师从 尚硅谷、狂神、三更草堂;如果文中发现跟他们有类似的,不用想,就是他们那里拿来的事先声明,本人很菜,其中有说的误人子弟的,请大家指出来。环境:idea2020.1 SpringBoot2.6.3 MyBatisPlus Maven3.6.3 SpringSecurity Lombok MySQL8.0.23…总述:先根据三家总的说一下,大致可以划分为两类: **1.**前后端不分离 *
2022-02-16 14:54:19
1132
原创 洛谷P1114 “非常男女”计划
洛谷P1114 “非常男女”计划题目:题目描述近来,初一年的XXX小朋友致力于研究班上同学的配对问题(别想太多,仅是舞伴),通过各种推理和实验,他掌握了大量的实战经验。例如,据他观察,身高相近的人似乎比较合得来。万圣节来临之际,XXX准备在学校策划一次大型的“非常男女”配对活动。对于这次活动的参与者,XXX有自己独特的选择方式。他希望能选择男女人数相等且身高都很接近的一些人。这种选择方式实现起来很简单。他让学校的所有人按照身高排成一排,然后从中选出连续的若干个人,使得这些人中男女人数相等。为了使活
2021-11-14 13:06:41
903
2
原创 洛谷 P1141 01迷宫
洛谷 P1141 01迷宫BFS或者并查集题目描述有一个仅由数字0与1组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。输入格式第1行为两个正整数n,m。下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格。接下来m行,每行2个用空格分隔的正整数i,j,对应了迷宫中第i行第j列的一个格子,询问从这一格开始能移动到多少
2021-11-12 21:58:22
256
原创 试题 算法训练 预备爷的悲剧
试题 算法训练 预备爷的悲剧题目资源限制时间限制:1.0s 内存限制:512.0MB问题描述英语预备爷gzp是个逗(tu)比(hao),为了在即将到来的英语的quiz中不挂科,gzp废寝忘食复习英语附录单词表,俨然一场人间悲剧。不过上天有好生之德,上帝扔给了gzp一张纸,上面记载了将要考到的单词。不过gzp是个逗比,之前复习的东西全忘记了,所以他又要再来一次复习。不过已经知道了要考的单词,所以不需要复习单词表的所有页数。因此,现在需要你帮助他求出有多少页纸需要复习。他会告诉你每个单词会在哪几页
2021-11-11 15:51:56
1134
原创 蓝桥杯 试题 算法训练 进击的青蛙
蓝桥杯 试题 算法训练 进击的青蛙资源限制时间限制:1.0s 内存限制:256.0MB问题描述青蛙X正准备跳过一座桥,这座桥被划分为N段,记青蛙所在的起始点为0,桥的末端为N。桥上的一些点有一些石子,这些点是无法跳上去的。青蛙每次跳跃能向前跳跃+1,+2,+3段,现在请你算出跳到末端的总方法数。如果无法到达,请输出”No Way!"输入格式输入数据共N行。第一行一个数字N,代表桥的长度。接下来N行,表示从点1~N的道路情况,每行一个数字0或1,1表示有石子。输出格式输出一行,为一个整
2021-11-08 14:07:46
2373
6
原创 蓝桥杯 试题 算法训练 印章
试题 算法训练 印章动态规划:资源限制时间限制:1.0s 内存限制:256.0MB问题描述共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。输入格式一行两个正整数n和m输出格式一个实数P表示答案,保留4位小数。样例输入2 3样例输出0.7500数据规模和约定1≤n,m≤20题目意思简洁明了。。。。动态规划:1.设置状态(看是一维数组还是二维数组,一般的题目都是二维数组,经验之谈)2.找状态之间的关系,3.写代码这其中1,2
2021-11-02 14:29:21
24546
111
原创 JavaWeb保姆级入门
JavaWeb保姆级入门first:技术:Servlet && JSP环境:Idea2020.1、Tomcat 9.0.41、Maven 3.6.3步骤:1.新建一个Maven项目由于一个项目里面有很多文件,我们要养成一个习惯:同一个项目的文件放在同一个文件夹里面!Finish之后,This Window选项表示Idea不用新建窗口,关闭当前项目,用来显示现在创建的项目,New Window就是不用关闭当前项目,新建窗口显示我们创建的项目!!!2.添加Web支持建好之
2021-10-25 22:44:16
220
2
原创 月赛题目1025
月赛题目:1.无限增长有一个无限长的数轴,小IT想要知道某个点是否在数轴上。起始时,数轴上只有一个点1,数轴遵循这样一种特点:如果数 x 在数轴上,那么x⋅a和x+b也在数轴上。现在,小IT给定a,b,想问你n是否在数轴上,如果在输出Yes,否则输出No。输入格式:第一行为一个整数T,表示T(1≤T≤10^5)组数据对于每一组数据在一行中输入n,a,b,(1≤n,a,b≤10^9)输出格式:对于每一组测试数据,在一行中输出Yes或者No输入样例:524 3 510 3 623
2021-10-25 14:34:11
247
原创 并查集跟map 洛谷家谱
并查集跟map题目:(来自洛谷:家谱)题目背景现代的人对于本家族血统越来越感兴趣。题目描述给出充足的父子关系,请你编写程序找到某个人的最早的祖先。输入格式输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用 #name 的形式描写一组父子关系中的父亲的名字,用 +name 的形式描写一组父子关系中的儿子的名字;接下来用 ?name 的形式表示要求该人的最早的祖先;最后用单独的一个 $ 表示文件结束。输出格式按照输入文件的要求顺序,求出每一
2021-10-23 20:48:08
196
原创 动态规划入门
动态规划入门动态规划,要么自顶向下来考虑子问题,要么自底向上考虑子问题;通过子问题来推导出最终问题的解;最难的点:定义状态(这个找对了,状态转移方程就好找了),状态转移方程;说白了,动态规划就是做熟练,找规律!!!!一般是二维数组,不多数是一维数组,更高维度那就难的不是一丢丢了。。。1.切原木问题题目描述:给定一根长度为N米的原木;另有一个分段价格表,给出长度L1,L2,…Li,…Lk米所对应的价格P1,P2…Pk(Li,Pi均为正整数),求切割原木分段出售所能获得的最大收益。 例如,根据下面
2021-10-19 13:00:51
944
1
原创 图论基础(1)
图论基础(1)入门级文章1.图基本介绍什么是图?图是由顶点的非空有穷集合(用V表示该集合)与顶点之间的关系(边或弧)的集合(用E表示该集合)构成的结构。可以形式化表示为G=(V,E)其中,V为顶点的非空有穷集合,E为关系的有穷集合。根据顶点与顶点之间的关系分为有向图和无向图!!说白了就是有很多顶点,点与点之间有联系名词术语顶点的度:某个顶点V的度是指依附于该顶点的边或弧的数量,说白了就是跟这个点连的有几条线出度、入度:对于有向图还要区分出度和入度,一个顶点V的出度是指以该顶
2021-10-16 14:24:44
301
原创 洛谷 建筑抢修
洛谷 建筑抢修题目思路:贪心 + 堆题目:思路解析:取自洛谷[Gypsophila ] 的解析贪心策略:直接按 t 贪心?显然不行。那我们考虑先按 t贪心,中途再更改。按 t 从小到大排序之后,开始轮流遍历每个建筑。如果中途某个建筑 i 无法在 ti的时间内修复,那么在先前选择修复的建筑中(放在了堆中)拿出 aj 最大的 j 号建筑。若 ai<aj,则放弃 j 转而修 i。(主思路)策略证明:若第 i号出现时间不足,那么前 i 个建筑中最多修复 i−1个建筑则我们必然选
2021-10-15 15:32:14
172
2
原创 洛谷 中位数
洛谷 中位数优先队列的使用输入样例71 3 5 7 9 11 6输出1 356题目意思解释:输入7,表示有七个数,七个数分别是1 3 5 7 9 11 6;求前1个数的中位数,只有1这一个数,所以输出1;求前三个数的中位数,有1 3 5,中位数是3,输出3;求前五个数的中位数,有1 3 5 7 9,中位数是5,输出5;求前七个数的中位数,按顺序来有1 3 5 6 7 9,中位数是6,输出6;…由于只有七个数,结束输出,输入的数并不是有序的哦思路解析:用两个堆,一
2021-10-14 14:18:36
389
原创 c++ STL二叉堆(优先队列)
c++ STL二叉堆(优先队列)1.介绍完全二叉树:叶子节点只会出现在最后2层,且最后一层的叶子节点都靠左对齐。二叉堆 (优先队列):一种特殊的完全二叉树,父结点值比子结点大或者小。最小堆(小根堆):父结点比子结点都要小最大堆(大根堆):父结点比子结点都要大二叉堆前提是他必须是一颗完全二叉树!!!!!既然可以按顺序标号,那么我们就可以用一个数组来把这颗树存起来了根节点下标为1,左孩子下标 父结点下标*2 ,右孩子下标 父结点下标*2+1反过来,我们知道孩子的下标,求父结点的下标 孩子
2021-10-12 14:24:27
1414
2
原创 PTA 列出连通集
PTA 列出连通集给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{ v1 v2 … vk }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。输入样例:8 60 70 1
2021-10-11 09:16:16
370
原创 c++ Map和题目
c++ map1.dev-c++ 使用c++11的设置方法2.map基本用法简介构造:函数原型功能map<T1, T2> mp;map默认构造函数。map(const map &mp);拷贝构造函数。赋值:(可以写赋值等号=)函数原型功能map& operator=(const map &mp);重载等号操作符。map是STL的一个关联容器,它提供一对一的映射。第一个可以称为关键字(k
2021-10-10 10:37:41
1362
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人