自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 复习-图(非邻接表和邻接矩阵的存储方式和相关算法)

图非邻接表和邻接矩阵的存储方式、深度、广度、prim、kruskal、dijkstra

2022-03-08 12:50:35 501 1

原创 复习-排序

前言:仅用来自己复习,如果有读者发现错误,提出批评指正,非常感谢。选择排序选择排序:假设我们把数组分成有序区间和无序区间,有序区间开始时为0,无序区间为数组元素总个数,选择排序就是不断循环遍历无序区间。找到无序区间最值元素下标,再与无序区间第一个元素交换,使的有序区间越来越大,无序区间越来越小,最后整个区间有序。简而言之,选择排序就是遍历选择最值下标的过程。public class SelectionSort { public static void selectionSort(int[

2022-03-08 12:45:35 540

原创 在线OJ系统--第二章(业务层编写)

主要是将后端逻辑完善

2022-03-01 17:23:11 1091

原创 在线OJ系统--第一章(实现java编译运行过程)

在线OJ核心,java代码编译运行过程实现。

2022-02-27 20:15:54 1367

原创 Mybatis基于注解开发

Mybatis注解开发环境搭建pom.xml首先引入坐标,我们需要mybatis、mysql、junit这三个必要的坐标,当然,为了方便,这里我还使用了log4j查看日志和lombok处理getter、setter、toString。<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or

2021-06-24 00:56:42 188 1

原创 关于Mybatis延迟加载和缓存

延迟加载延迟加载:在真正使用数据时才发起查询,不用的时候不查询,按需加载(懒加载),以免造成不必要的浪费。立即加载:不管用不用,只要一调用方法,马上发起查询。还是之前的Account表和User表我们来举例,一个账户一定对应一个用户,并且在之前讲多表查询的时候,我们已经将各种配置都设置好了,并已经将User封装到了Account实体类中。现在学习延迟加载,我们需要做的任务就是,在查询account表时,对其对应的用户信息进行延迟加载。本质上我们还是多表查询,只是将多次查询做了处理。select

2021-06-23 18:27:48 173 1

原创 MybatisCRUD

Mybatis-CRUD上一篇mybatis入门中已经讲了如何搭建Mybatis的环境,主要是pom.xml依赖,SQLMapConfig.xml主配置文件以及dao接口和数据库对应实现类的编写,如果是使用xml配置方式,则需要对dao接口编写指定xml文件(路径也要相同),相反,注解方式则不需要。这里就不讲如何进行环境搭建的具体流程了,有需要的可以去看看。数据库相关信息以及对应类相关信息create table user( id int not null primary key auto_incr

2021-06-22 23:13:24 143 2

原创 MybatisCRUD

Mybatis-CRUD上一篇mybatis入门中已经讲了如何搭建Mybatis的环境,主要是pom.xml依赖,SQLMapConfig.xml主配置文件以及dao接口和数据库对应实现类的编写,如果是使用xml配置方式,则需要对dao接口编写指定xml文件(路径也要相同),相反,注解方式则不需要。这里就不讲如何进行环境搭建的具体流程了,有需要的可以去看看。数据库相关信息以及对应类相关信息create table user( id int not null primary key auto_incr

2021-06-18 15:53:00 95

原创 MyBatis入门

MyBatis入门MyBatis的概述:MyBatis是一个持久层框架,用Java编写的。它封装了jdbc操作的很多细节,使开发者只需要关注SQL语句本身,而无需关注注册驱动,创建等繁杂过程。它使用了ORM思想实现了结果集的封装。ORM:Object Relational Mapping对象关系映射,就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。1.创建Maven工程并导入坐标<?xml version="1.0" encoding="UTF-8"?&g

2021-06-16 15:46:24 637 7

原创 Spring事务

环境搭建回顾事务基本概念事务是数据库操作的基本单元,对其的执行操作,要么都成功,要么都失败。四大特性(ACID):原子性、一致性、隔离性、持久性。假设现在需要完成对下表操作,搭建一个基础环境,使a向b转账500。第一步:xml配置上个JdbcTemplate博客中都有讲,基本都是一样的。组件扫描数据库连接池配置JdbcTemplate对象创建,并注入数据库连接池属性。<?xml version="1.0" encoding="UTF-8"?><beans

2021-04-21 16:55:25 108

原创 JDBCTemplate

JdbcTemplateJdbcTemplate是Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作。准备工作配置组件扫描,xml配置或者注解配置类都可以,这里我是用了xml配置。配置数据库连接池,这里我使用了德鲁伊连接池。创建JdbcTemplate对象,并注入dataSource(数据库连接池)属性。<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.s

2021-04-20 21:56:26 170

原创 每日五题-(6)

剑指Offer61.扑克牌中的顺子解析过程:1.抽到的牌中如果有重复,说明不能构成顺子。2.抽到的牌中最大的与最小的差值大于等于5,说明不能构成。(零不能算作最大或最小)3.记录最大最小值时,不需要考虑0,因为一共有两个0,所以一定会出现最大最小值的。代码实现:class Solution { //抽到的五张牌中最大的-最小的>=5 则说明不能组成(0除外) //有重复牌则不能组成 public boolean isStraight(int[] nums) {

2021-04-19 20:34:43 98

原创 AOP

AOP原理概念面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。不修改源代码,在主干功能里添加新功能。底层原理AOP底层使用动态代理,分别针对有无接口分为两种。一、有接口,使用JDK动态代理,创建接口实现类代理对象,增强类方法。使用Proxy类里面的方法创建代理对象第一参数:类加载器第二参数:增强方法所在类的实现接口,支持多个接口第三参数:实现这个接口InvocationHandler(

2021-04-19 17:09:50 165

原创 每日五题-(5)

今天没有针对什么专门去做,就是自己剑指还没有刷完的,随便点开五道。剑指Offer 54.二叉搜索树的第k大节点解析过程:要解此题就得知道什么是二叉搜索树,其满足左孩子 <= 根 <= 右孩子。所以我们要是对其进行中序遍历的话就会有顺序的进行输出,但是此题要求解的是第k大节点,所以也就是倒数第k个,那么就需要进行二叉树的倒序输出了,[右,根,左]。使用递归去遍历的时候需要注意对其k次进行–操作,对第k个元素信息得保存起来,并返回。代码实现:class Solution {

2021-04-18 20:51:19 154

原创 每日五题-(4)topK专项

TopK剑指Offer40.最小的k个数,昨天想好的今天就写这道题,不过得用多种方式写出来,所以也算写了五道题,哈哈哈哈。方式一:普通快排解析过程:其实这道题一眼看下去,最直接的方法就是对整个区间进行排序,然后再去输出前k个元素就完成了。快排的时间复杂度是O(nlogn)。那么我们来回顾一下快排?整体思路就是选一个元素,将小的放在其左面,大的放在其右面,然后递归执行,直到每个区间有序,使得整个区间有序。最难的也就是这个partition过程了,具体讲解在我的博客排序算法里都有。代码实现:

2021-04-17 15:12:16 124

原创 每日五题(3)

剑指Offer 32-II.从上到下打印二叉树II解析过程:题目要求已经很明确了,我们需要对二叉树进行层序遍历,但这时候要注意返回值是一个嵌套链表,需要对二叉树进行按行打印,所以我们就得找个东西来存放每一行。队列就是一个比较好的选择了!当根节点不是空的时候,那就将根节点先放入队列。当我们要往list中放的时候就将其取出,然后再将该节点的子节点放入到队列中。我们可以使用for循环来控制每一层的遍历,并且用队列的长度来控制循环。当我们将二叉树遍历完成时那么队列也就一定为空了,所以这可以当做我们BFS的

2021-04-15 15:48:24 136 1

原创 每日五题(2)

剑指Offer 55-I.二叉树的深度解析过程:要判断数的深度,那么只需要知道左子树和右子树的深度哪个最大,然后再加上根结点,即为数的深度,所以此时找到递归的终止条件,也就是当root为空时,则return 0,否则继续向下查找。代码实现:class Solution { public int maxDepth(TreeNode root) { if(root == null)return 0; return Math.max(maxDepth(root

2021-04-14 14:20:20 127

原创 每日练题之动态规划太难了(本来想练5道题,但是实在练不动了)

LeetCode42题,连续子数组的最大和解析过程:第一步:找出最优解当要求最后一个元素4的最大连续和时,只需要判断从-2到-5的最大连续和是否为正,如果是正数,那么最后的最大值为前面的+4,否则就为其本身。也就是。第二步:状态转移方程第n项满足条件,即所有项都满足条件,所以此时我们可以列出状态转移方程。当dp[i-1] (i-1项最大之和)>= 0时,dp[i] (第i项的最大连续子数组之和)=nums[i]+dp[i-1]。反之,dp[i] = nums[i]。第三步:边界值

2021-04-13 22:15:13 285

原创 数据库连接池

数据库连接池普通的连接方式不停的连接和断开会消耗大量的资源和时间,没有对资源进行很好的重复利用,不能控制被创建的连接对象数。并且每一次使用完都必须断开,否则如果程序出现异常而未能关闭,将会导致数据库系统的内存泄漏最终重启数据库。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。用时则取,完时则还。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。多种开源的数据库连接池:JDBC的数据库连接池使用javax.sql.DataSourc

2021-04-03 20:24:41 286

原创 JDBC-(2)

操作BLOB类型字段MySQL BLOB类型在MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器。之前我们讲了PreparedStatement与Statement的区别,其实这里也算一点,就是插入BLOB类型的数据必须使用PreparedStatement,因为BLOB类型的数据无法使用字符串拼接写的。MySQL中的四种BLOB类型如下:插入BLOB类型示例现在有如下表,需向其中插入一组数据(’张国荣‘,18,对应图片)。对于大数据的插入操作,我们可以使用IO流操作进行传输

2021-04-02 21:42:48 89

原创 JDBC-(1)

JDBC介绍JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql.* 、javax.sql.*)使用这些类库可以以一种标准的方法、方便地访问数据库资源。JDBC为访问不同的数据库提供了一种统一途径。JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统。JDBC优势:Java语言访问数据库操作完全面向抽象接口

2021-04-01 21:01:02 182 1

原创 Mysql-视图、变量、存储过程以及函数

视图视图是一种虚拟存在的表,行和列的数据来自自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。应用场景:1.多个地方用到同样的查询结果。2.该查询结果使用的sql语句较为复杂。创建视图:#sql语句create view 视图名as 查询sql语句;视图的优点:重用sql语句简化复杂的sql操作,不必知道它的查询细节保护数据,提高安全性修改视图:#方式一:create or replace view 视图名as查询语句;#方

2021-04-01 12:03:15 304

原创 Mysql-事务

事务概念及特性Transaction Control Language 事务控制语言事务:一个或一组SQL语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。如果单元中某条SQL语句执行失败或产生错误,整个单元将会回滚,即所有收到影响的数据将返回到事务开始以前的状态。事务的ACID属性:原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么不发生。一致性(Consistency)事务必须使数据库从一个一致性状态变换到另外一个一致性

2021-03-31 17:29:49 1499 2

原创 Java排序算法总结

排序稳定性:两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法是具备稳定性的排序算法。排序分类:插入排序 插入排序的优化版–希尔排序基于选择的排序:选择排序 堆排序冒泡排序快速排序归并排序怎么学习排序?思想–通过思想可以手动排出来实现–代码复杂度比较插排思路过程插排是将整个需要比较的区间分为有序区间和无序区间,然后将无序区间的第一个元素插入到有序区间的合理位置(即插入之后的有序区间仍然有序),重复循环,直到遍历完整

2021-03-20 16:58:22 194 1

原创 堆(Heap)、优先级队列

堆(heap)什么是堆堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一颗树(逻辑上)的数组对象(实质上)。并且堆总是满足下列性质:堆中某个结点的值总是不大于或不小于其父节点的值堆总是一颗完全二叉树将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。那么对应的已知父节点下标parentIndex,则左孩子的下标为2*parentIndex+1,右孩子的下标为2*parentIndex+2;堆的作用是快速找集合中的最值,例如平时写的题目topK

2021-03-20 15:48:14 131

原创 二叉树基本知识

二叉树(Binary Tree)概念二叉树是一种特殊的树,它的每个节点,最多只能有两个孩子,并且二叉树是有序树(孩子的前后关系很重要)。二叉树的所有形态如下:两种特殊二叉树满二叉树:一个二叉树,如果每一层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是2^k-1,则它就是满二叉树。完全二叉树:即添加结点顺序为从左往右、从上往下,删除顺序为从右往左、从下往上的二叉树。二叉树的性质若规定根结点的层数为1,则一颗非空二叉树的第i层上最多有2^(i

2021-02-23 11:07:25 279

原创 栈与队列常用方法(LeetCode题目实操演练)

队列和栈队列是一种线性结构,但是它只能从头尾插入和删除,并且遵守先进先出(FIFO)的规则。在java中有两个接口Queue(单向队列)和Deque(双向队列)。紧接着我们来捋一下继承关系。Queue与Deque方法:Queue方法:作用第一组第二组插入boolean add(E e)boolean Offer(E e)删除队首元素E remove()E poll()查看队首元素E element()E peek()区别通过异常通知调用者发生错

2021-01-19 18:39:58 291 1

原创 一道题检测多线程基本功!(顺序打印ABC)

一道题检测多线程基本功!(顺序打印ABC)初阶题目内容:有三个线程,线程名称分别为:A,B,C。要求:使三个线程同时启动,并按顺序打印A,B,C。注:有的人看到这个题目,直接就是创建三个线程,然后直接调用对应的star()方法,这当然是个坑啦。这里我们可以想到join方法,让A线程跑完,再跑B,B线程跑完再跑C。public class printABC { public static void main(String[] args) { Thread a = new

2021-01-17 17:02:31 292 1

原创 用扑克游戏操练List常用方法

线性表List(线性表)是一个接口,ArrayList(顺序表)和LinkedList(链表)继承了List。List的常用方法:方法签名功能描述add(E e)把e这个元素,尾插到线性表中add(int index,E e)把e这个元素,插入到index所在位置,同时,index之后的所有元素,必须"逻辑"后移remove(int index)删除index这个下标的元素,同时,index之后的所有元素,必须"逻辑"前移remove(Object o)删

2021-01-14 16:44:25 2184 7

原创 单例模式_边吃边说!

单例模式单例模式(Singleton Pattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它保证一个类仅有一个实例,并提供一个访问它的全局访问点,可以防止一个全局使用的类频繁地创建与销毁。所以当我们想要控制实例数目,节约系统资源的时候就可以使用单例模式。注意事项:单例类只能有一个实例。单例类必须自己创建自己的唯一实例(构造器私有)。单例类必须给所有其他对象提供这一实例。饿汉式饿汉式顾名思义就是很饥饿,不管执行啥任务,都得先吃再说,所以当类加载时就初始化了。它

2021-01-13 00:35:25 309 3

原创 注解与反射详解

文章目录注解什么是注解元注解自定义注解反射机制反射概述Class类类加载内存分析(扩充)获取运行时类的结构动态创建对象执行方法性能分析获取泛型信息反射操作注解注解什么是注解注解(Annotation)可以对程序作出解释,并且可以被其他程序(比如:编译器等)读取(通过反射读取)。注解是以"@注释名"在代码中存在的,还可以添加一些参数值,例如@SuppressWarnings(value=“unchecked”)。注解可以附加在package,class,method,field等上面,相当于给他们

2021-01-12 16:04:09 315

原创 关于Arrays.sort()的使用方式

如果你想要看Comparable和Comparator的用法,可以点这里:Comparable和Comparator的比较与使用今天在写LeetCode题目时,本来想使用Arrays.sort()方法,可以对于其中传入比较器的使用带有疑惑,所以来整理一篇Arrays.sort()的用法。对于需要我们自己去实现排序的题的话,就不要投机取巧使用Arrays.sort()了,如果是一道题的某一步,还是建议使用的。点开IDEA,可以查看到它的用法有很多,但其实可以大致分为几类。基本类型的数组排序不管是哪种基

2021-01-05 15:21:45 1573

原创 Comparable和Comparator的比较与使用

Comparable与Comparator的使用从字面意思我们就可以看出,Comparable是具有比较能力的,Comparator是比较器,那么前者很显然是指某个对象具有比较能力的,就好像是一种技能,而后者是给一个比较的工具,我们使用这个工具来进行比较。ComparableComparable接口中只有一个方法:public interface Comparable<T> { // 返回值: // < 0: 表示 this 指向的对象小于 o 指向的对象

2021-01-04 20:12:39 240 1

原创 前端三剑客--HTML(为后端小伙伴扫盲前端而撰写)

前言本篇博客主要是针对后端开发的小伙伴们对前端的扫盲性学习,了解前端更利于编写后端接口,从而使整体项目编写更加流畅,若是专业前端人士,跪请批评指正。文章目录前言怎么学习HTML初识HTML网页标签基本标签图像标签链接标签标签分类列表标签表格标签媒体标签页面结构分析iframe内联框架表单(重点)初识表单表单内容怎么学习HTML第一点:所见即所得,我觉得这句话对于前端的理解非常重要。第二点:学会查看浏览器开发者工具。查看网页源代码(鼠标点击右键):通过开发者工具理解前端代码:初识HTML

2020-12-23 16:46:55 271

原创 JAVA多线程入门一篇通

文章目录创建线程基本概念继承Thread类实现Runnable实现Callable接口(了解)静态代理Lamda表达式线程方法线程停止线程休眠线程礼让线程强制执行线程状态线程优先级守护线程线程安全线程不安全原因原子性可见性有序性解决线程不安全synchronizedLock锁线程间通信生产者消费者问题管程法信号灯法线程池创建线程基本概念程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。进程是执行程序的一次执行过程,它是一个动态的概念。它是系统资源分配的单位。通常在一个进程中

2020-12-21 17:42:58 156

原创 IO流的使用(刷题小疑问:为什么我的Scanner没有别人的BufferedReader跑的快)

文章目录前言什么是IO流呢?File类概念构造方法成员方法IO流体系IO流的使用字符流使用字符缓冲流拷贝文件(重要)字符缓冲流成员方法使用(重要)字节流使用单字节拷贝图片BufferedReader和Scanner前言还在为BufferedReader和Scanner的用法而困苦吗?为什么BufferedReader就比Scanner快呢?IO流是个啥?怎么用呢?这些问题本篇博客都会详细介绍,若读者朋友想直接了解BufferedReader和Scanner的区别可直接根据目录查阅,若读者朋友想对IO流也

2020-11-20 17:38:54 291

原创 Java程序逻辑控制,刷完这些你就懂了

目录判断年龄段判断素数打印闰年乘法口诀表最大公约数计算分数数9水仙花数模拟登陆二进制中的1奇偶二进制输出一个整数的每一位猜数字游戏判断年龄段题目:根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)。注:不要一看到多分支就想到switch,switch不支持复杂的表达式,例如题目中的范围表达式。switch中可以是整数(int)、枚举、字符和字符串。import java.util.Scanner;public class Judge

2020-07-20 18:58:32 1854

原创 Java开端~数据类型与运算符(你忽视了么?)

前言数据类型与运算符虽然简单,并且在很多地方都和C语言相同。但是我们也要注意这些细节,以及他们的不同之处,防止写代码的时候总会踩入一些不必要的坑!变量的命名规则硬性指标:一个变量只能包含数字、字母、下划线不能以数字开头变量名大小写敏感,例如:num和Num是两个不同的变量注意:虽然语法上也允许使用中文\美元符($)命名变量,但是强烈建议不要这样做!软性指标:变量命名要具有描述性,见名知意。变量名不建议使用拼音(但是不绝对)。变量名的词性推荐使用名词。变量命名推荐小驼峰命名,

2020-07-18 08:44:20 278

原创 Java开发环境怎么配?就这?细节细节细节!

目录资源链接安装系统环境变量配置检验Demo写给自己的话资源链接文本剪辑器Sublime Test链接:https://pan.baidu.com/s/1xMhkvao46RZv3TaOROY5Gg提取码:JavaJDK8链接:https://pan.baidu.com/s/1UbKnQrKWR-BWUDvQnRIqGg提取码:java注意:在Windows下安装JDK需要考虑安装包的位数,如果是32位操作系统,则需安装jdk-xxx-windows-i586.exe,如果是64位操

2020-07-17 20:02:52 325 1

原创 你真的了解C吗--深度剖析数据在内存中的存储(C进阶)

文章目录整形在内存中的存储原反补单纯的计算机实例讲解数据的取值范围大小端存储浮点型内存存储问题思考浮点数的表示M的知识点E的知识点答案揭秘空类型总结整形在内存中的存储当我们创建一个变量是要在内存中开辟空间,而空间的大小是根据不同的类型而决定的!!!那数据在所开辟内存中到底是如何存储的呢?如果是整形,则以补码形式存储原反补计算机中有符号数有三种表示方法,即原码、反码和补码。而这三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。正数的原

2020-07-08 16:59:16 1088 1

空空如也

空空如也

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

TA关注的人

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