- 博客(25)
- 收藏
- 关注
原创 Mybatis源码解析(三)执行方法过程
上期我们讲了如何获取Mapper,我们获取到了Mapper之后,就要执行Mapper里面的方法,这篇我们就来详细讲解方法的执行过程同样使用我们一直用的测试方法:@Testpublic void testFindAll() throws IOException { //加载主配置文件,目的是为了构建SqlSessionFactory对象 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //创
2021-09-13 15:41:45
245
1
原创 Mybatis源码解析(二)获取Mapper(getMapper)
上期我们说了Mybatis是怎么创建会话的Mybatis源码解析(一)创建会话SqlSession,在创建会话的过程中,会读取mybatis的配置文件和mapper.xml文件来封装一些内容,主要有相关的配置信息,最重要的还是构建了一个map来存储MappedStatement信息,我们会在这篇文章详细讲解我们同样看下面的测试方法: @Test public void testFindAll() throws IOException { //加载主配置文件,目的是为了构建S
2021-09-09 15:31:31
1728
1
原创 Mybatis源码解析(一)创建会话SqlSession
为了避免其他类导致的干扰,该项目只导入了mybatis依赖、mysql驱动包和junit测试依赖,具体如下:<dependencies> <!--mybatis核心包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId>
2021-09-06 22:23:24
719
2
原创 L2-025 分而治之 (25分)团体程序设计天梯赛
思路:一开始用邻接矩阵和并查集做的,但是超时了之后改成了用邻接表的方式就能过了代码如下:#include<iostream>#include<algorithm> #include<string>#include<vector>using namespace std;int visit[10001];vector<int> map[10001];int main(){ int n,m; scanf("%d %d"
2021-08-31 00:33:52
176
原创 L2-022 重排链表 (25 分)团体程序设计天梯赛
思路:建立一个结构体保存节点利用结构体数组保存当前节点的下一节点再用一个vector保存完整的链表,之后就是双指针遍历#include<iostream>#include<algorithm> #include<string>#include<vector>using namespace std;struct Node{ int val; int next;}node[100005];int main(){ int head
2021-08-30 20:13:02
71
原创 L2-020 功夫传人(25 分) 团体程序设计天梯赛
思路:这题明显是并查集,最后一个测试点超时,但是只有三分,没去专研了,其实可以改进的,可以存储每一层的功力值,就不必每次去运算了,只需要算一次直接上代码#include<iostream>#include<algorithm> #include<string>using namespace std;int p[100005];int main(){ int n; double z,r,sum = 0; scanf("%d %lf %lf",&a
2021-08-30 19:06:43
137
原创 L2-013 红色警报 (25 分) 团体程序设计天梯赛
这道题有两种做法求图的连通分量,如果失去一个城市之后,连通分量增加了两个或两个以上,则会影响城市之间的通讯使用并查集方法一:#include<iostream>#include<algorithm>using namespace std;int map[505][505];int visit[505]; int n,m;//深度搜索 void dfs(int root){ visit[root] = 1; for(int i=0; i<n;
2021-08-28 13:44:19
174
原创 L2-012 关于堆的判断 (25 分) Java实现
思路:首先是建立小顶堆,可以用java的优先队列, 再转换为数组,也可以手动创建更改数组索引从1开始,因为这样的话就能保证索引除2能拿到他的双亲节点根据输入判断命令并且把里面的数值取出来把建立好的小顶堆存到一个HashMap里面,方便查找,因为val的值有负数,所以用数组不太方便上代码:package pta;import java.util.Arrays;import java.util.HashMap;import java.util.Map;import java.util.
2021-08-27 09:39:59
323
原创 jdk8新特性(三)Stream流和方法引用
一说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢?在Java 8中,由于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。Stream流和方法引用一、Stream流1、传统集合的多步遍历代码2、循环遍历的弊端3、Stream的更优写法4、怎么获取流4.1 根据Collection获取流4.2 根据Map获取流4.3 根据数组获取流5、Stream流里面的常用API5.1 逐一处理:forEach5.2 过滤:fil
2021-08-18 23:26:02
93
原创 jdk8新特性(二)接口的默认方法
在jdk8之前,接口里面只能声明抽象方法,在jdk8及之后,接口可以声明默认方法接口的默认方法详解一、创建一个Animal接口二、新建Dog和Cat实现类三、引入接口的default方法四、总结一、创建一个Animal接口public interface Animal { public abstract void eat(); public abstract void run();}首先创建一个动物的接口,里面提供了两个抽象方法,一个eat()方法,一个run()方法…
2021-08-17 16:20:30
198
原创 jdk8新特性(一)Lambda表达式和函数式编程
lambda表达式和函数式编程一、函数式接口1、概念2、格式和使用3、@FunctionalInterface注解4、使用自定义的函数式接口二、Lambda表达式1、举例说明lambda表达式的方便之处2、体验Lambda表达式的更优写法3、Lambda的标准格式4、Lambad表达式练习5、Lambda省略格式三、总结lambda表达式和函数式编程是jdk8引入的新特性,这也是java语言发展的大趋势,我们还是要学会使用的一、函数式接口1、概念函数式接口在Java中是指:有且仅有一个抽象方法的接口
2021-08-12 11:57:57
146
原创 一分钟搞定Spring AOP实现权限控制
Spring Aop就是我们常说的面向切面编程,它和IOC构成了spring体系的两大核心,玩明白了这两个,spring就算玩会了。。spring aop可以干很多事,他就类似于拦截器,能在你的目标方法之前或者之后做一些事儿(类似于方法的增强),例如:权限校验、日志记录、统计等本文主要讲的是如何利用spring aop实现权限校验和控制一、首先定义接口(有点spring security那意思了)@Documented@Target(ElementType.METHOD)@Retention(R
2021-08-11 11:24:49
5580
10
原创 扛起来——mybatis自定义分页插件(PageHelper)和自定义日志打印(Log)
文章目录一、环境准备1、导入以下依赖2、创建mybatis核心配置文件(SqlMapConfig.xml)二、创建实体类和mapper层1、创建User实体类2、创建自定义的Page类和PageHelper3、创建HdzPageInterceptor并实现Interceptor接口三、测试结果1、不添加分页插件2、开启分页插件四、自定义日志插件1、定义SQlLogPlugin实现Interceptor接口2、测试日志插件一、环境准备为了不被其他干扰,本项目单纯的引入mybatis依赖和测试环境1、导入
2021-08-08 17:06:01
891
原创 这么玩Springboot+Redis+腾讯云短信验证码登录
在很多网站上都提供了短信验证码登录的功能,其思路大概是这样的:前台点击发送验证码(会携带手机号)调用后台接口生成验证码(3分钟有效),并将验证码存入缓存当中(这里用的是redis)根据前台传送的手机号发送验证码用户收到验证码之后填写验证码并登陆后台收到登陆请求,先校验校正码是否有效并且正确验证码校验通过之后有两种情况:查询数据库,用户存在,则登录成功用户不存在,跳转到注册页面流程如下:一、 首先创建一个SpringBoot项目,导入以下依赖<?xml version="
2021-08-06 21:55:31
675
原创 踩雷避坑之128陷阱
What is 128陷阱?(什么是128陷阱?)我们来看下面的代码public class Test { public static void main(String[] args) { Integer a = 100; Integer b = 100; System.out.println(a==b); Integer a2 = 1000; Integer b2 = 1000; System.o
2021-07-13 12:30:49
116
原创 神仙整合之SpringBoot + MybatisPlus + log4j2+swgger系列
直接上干货先建一个springboot项目,这里使用的是IDEA的快速搭建springboot项目直接点next第一个是组名(随意)第二个是项目名(随意)java选择8版本的,不要问我为什么,因为现在市场上java8是主流,高版本的新特性太多了,人们还没完全用上点next就行了可以看到左侧有一些选项,可以选择需要使用的勾上,当然也可以不勾,勾上之后会在项目初始化的时候帮你把maven依赖加上,不勾的话自己手动加上也行,直接点下一步,项目就创建好了<?xml version="1.
2021-06-28 22:48:51
1953
原创 小练SpringMVC的参数传递
SpringMVC的前后端参数传递主要分为三大类基本数据类型(包括String类)对象数据类型(一般都是自定义的类)数组和List集合复杂的数据类型根据格式又分为json数据格式非json数据格式一、演示基本数据类型(String)下面是请求的路径 @RequestMapping(path= "demo") // demo ip+端口 +项目根路径 + / + demo @ResponseBody // 返回类型是一个对象:可以是字符串、对象、List等等;不
2021-06-15 23:21:58
169
原创 springboot之在线学习平台总结(二)
合并问题,合并问题,合并问题事实告诉我们,接口一定要细分,写完一个小模块就合并一下不然全部写完之后再合并一定、一定、一定会出现问题,和队友合并的时候报了20来个冲突,我和他开着屏幕共享一个一个改,有些接口写的都是一模一样,但又不在同一个Controller层。唉最后用了一个笨方法,他在所有和我有冲突的文件加个后缀Two,想法是好的上面是已经合并好的,但是在这之前,我们花了将近3个小时找冲突,最后发现,因为git太强大了,简单的更换文件名并没什么用,最后还是一个一个找冲突解决的。唉。。。git确
2021-06-13 23:33:11
119
原创 springboot之在线学习平台总结(一)
项目分三个模块:管理员、教师端、学生端登录接口:因为管理员端和学生端业务比较简单,所以就分了两个模块队友:管理员+学生端我:教师端教师端功能:这个模拟项目一开始认为还挺难的,后面做着做着发现没什么难点可能之前没有做过文件操作和富文本相关的功能,所有一开始觉得很难,觉得一个礼拜肯定做不完,后面发现除了要学习文件操作和富文本之外,其他的功能都是简单的增删改查,最后花了5天左右。。。。有无限的bug待测试-----这个登录接口算是比较人性化的前台用的layui,不得不说,layui
2021-06-13 17:50:33
290
1
原创 八大排序算法详解(java版)
1.冒泡排序//冒泡排序 //冒泡排序就是每次选择一个最大值放到后面 public void bubbleSort(int[] arr) { //外层循环控制需要比较的次数 一共是n-1次 for(int i=0; i<arr.length-1; i++) { //内层循环进行冒泡,因为每完成一次外层循环,就会在后面多一个有序序列,因此可以不用比较 for(int j=0; j<arr.length-i-1; j++) { if(arr[j]>ar
2021-05-14 20:29:32
511
原创 栈数据结构的实现
本文采用java实现栈结构栈的特点是先进后出首先定义栈结构和其中的基本方法public class StackDemo { //初始容量为10 private int[] arr = new int[10]; private int flag = 0; //入栈方法 public void push(int val){ //判断数组是否需要扩容 if(flag==arr.length) { int[] newArr = new int[2*arr.length];
2021-05-11 18:13:04
65
原创 java单向链表和双向链表的反转(迭代和递归)
单向链表反转(逆置)//定义单链表的节点public class ListNode { int data; ListNode next; public ListNode(int val) { this.data = val; } }方法一:迭代法(遍历)//单向链表反转,迭代反转public ListNode reverse1(ListNode head) { //参数传入链表的头指针(不带头结点) if(head==null || head.next==null) ret
2021-05-11 12:57:28
657
原创 图解三次握手四次挥手(TCP/IP协议)
TCP/IP协议的官网解释TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。简单说一下:TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接
2021-04-24 21:22:40
497
原创 计算机网络通讯(OSI七层架构)
一、 网络协议介绍互联网协议按照功能不同分为OSI七层架构和TCP/IP四层或五层最先有的是OSI七层架构,之后才引出了TCP/IP五层和四层模型;TCP/IP五层主要是把OSI七层架构中的应用层和表示层以及会话层统一为应用层;TCP/IP四层模型在五层模型的基础之上将数据链路层和物理层统一为网络接口层;这里我们主要根据原始的OSI七层架构来展开详细介绍1. 应用层 能产生流量的程序2. 表示层 加密 压缩等处理 传输格式(二进制 ASCII码)乱码是表示层问题(开发者处理)3. 会
2021-04-22 19:16:47
1887
原创 计算机语言分类
计算机语言分类后端开发java; c; c++; go; python; php; c#;c和c++是性能最快的语言,缺点,代码编写量非常大。他对于基础的工业软件,例如…cc++适合与工业软件记忆桌面软件,像matlab,CAD制图,photoshop,excel,国内腾讯主要用C,腾讯与阿里两家独大,java与go是当前大多数互联网公司的核心语言,原因:这两种语言,能够支持并发超大规模的语言。C#,PHP:适合于小规模公司的开发,开发速度快,Python,开发便捷,但性能不好,无法作为后端的核心
2021-04-12 23:47:27
151
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人