自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 资源 (1)
  • 收藏
  • 关注

原创 高校毕业就业信息管理系统

再此有毕业生个人信息管理、用人单位信息管理、岗位信息管理、查看毕业生求职方向数据等功能。在这有简历管理、浏览岗位、面试问卷管理、就业协议管理、个人信息管理五大功能模块。在这里有岗位管理、简历管理、面试问卷管理、就业协议管理、查看毕业生求职方向分布。发送的就业协议、已签订的就业协议、查看毕业生求职方向分布、企业基本注册信息。通过的简历、收到的面试问卷、发送的面试问卷、通过的面试问卷、新增岗位、审核中的岗位、招聘中的岗位、收到的简历、已投简历、未投简历、录入简历、浏览招聘中岗位、系统设置:对系统进行基础设置。

2023-06-07 22:54:32 1105

原创 Java学生成绩管理系统

2)教师模块:任务管理、对学生班级任务安排、班级学生的成绩查看、申述管理。1、成员管理:教师管理、学生管理、班级管理、专业管理、学院管理。2、信息管理:课程信息管理、学期信息管理、课程类型、测验类型。2、信息管理:课程信息管理、学期信息管理、课程类型、测验类型。1、成员管理:教师管理、学生管理、班级管理、专业管理、学院管理。有任务管理、对学生班级任务安排、班级学生的成绩查看、申述管理。1)学生模块:我的成绩、成绩统计、申述管理、修改密码。3、教学管理:课程安排、成绩查看。3、教学管理:课程安排、成绩查看。

2023-05-28 11:18:07 8726 12

原创 MySQL游标详解

参看学习:1、

2023-03-26 21:14:13 2613

原创 MySQL流程控制语句

在存储过程和函数中实现比较复杂的业务时,需要对应的流程控制来控制,类似,MySQL也有对应的语句。针对MySQL的流程控制语句主要有3类,用于存储程序。

2023-03-26 15:35:31 468

原创 详解MySQL中的存储过程

该变量是用户自定义的,不是由系统的。声明、赋值、使用(查看、比较、运算)一组经过预先编译的SQL语句的封装。类似Java的方法存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要发出调用的指令,服务器就会调用预先存储好的存储过程。客户端只需要调用过程或者函数,MySQL服务器内部会调用一组预先编译的SQL组。

2023-03-26 02:30:05 422

原创 SQL窗口函数

窗口限定一个范围,简单理解是满足某些条件的记录集合,所以窗口函数,也就是在窗口范围内执行的函数。

2023-03-24 01:43:52 176

原创 IDEA工具常用配置

IDEA工具常用的配置

2022-07-23 16:38:30 1375

原创 git一篇就够了

详细的Git教程

2022-07-22 01:04:48 211

原创 Zookeeper分布式锁

1、分布式锁在我们进行单机应用开发时,涉及到同步时,我们都是采用synchronized或者Lock方式解决多线程间的共享数据问题。这时多线程的运行都是在一个JVM之下,没有任何问题。当时我们的应用是分布式集群工作的情况下,属于多JVM下的工作环境,跨JVM之间已经无法通过多线程的锁解决同步问题这时需要一种更加高级的锁机制,来处理跨机器的进程之间的数据同步问题。2、分布式锁原理核心思想:当客户端获取锁,则创建节点,使用完锁,则删除节点1)客户端获取锁时,在lock(随便哪个)节点下创建临时顺序

2021-12-18 16:49:10 1228

原创 Zookeeper的ZAB协议

1、什么是ZAB协议ZAB(Zookeeper Atomic Broadcast)协议是Zookeeper为分布式协调服务专门设计的一种支持容错、崩溃、恢复的原子广播协议,这个协议解决了Zookeeper的崩溃恢复和主从数据同步的问题2、崩溃恢复时的Leader选举崩溃恢复的关键Leader建立完后,Leader周期性地不断向Follower发送心跳(ping命令,没有内容的socket)当Leader崩溃后,Follower发现Socket通道已经关闭,于是Follwer开始进入到Look

2021-12-12 22:53:22 1880 1

原创 Zookeeper的Java API操作

Curator常用操作:创建连接、添加节点、删除节点、修改节点、查询节点、Watch事件监听首先还是创建项目所需要的环境1、在IDEA中创建maven工程 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <vers

2021-12-07 21:14:41 828

原创 zookeeper命令行操作

1、命令行语法命令基本语法功能描述help显示所有的操作命令ls path使用 ls 命令查看当前znode的子节点 -w :监听子节点变化 -s 附加次级信息create普通创建 -s 含有序列 -e :临时(重启或者超时消失)get path获得节点的值 【可监听】 -w : 监听子节点内容变化 -s :附加次级信息set设置节点的具体值stat查看节点状态delete删除节点deleteall递归删除节点1.

2021-12-05 23:48:33 2626

原创 zookeeper选举机制

1、选举机制的概述半数机制:集群中半数以上机器存活,集群可用,所以zookeeper适合在奇数台机器上,zookeeper虽然在配置文件没有说master/slave,zookeeper工作是一个节点为leader,其他的为follow,leader是选举出来的(内部有选举机制)2、Zookeeper的第一次启动的选举服务器初始化拿三台服务器组成的zookeeper集群为例,各自的myid为1-3,它们都是最新启动的,之前没有历史数据,看看它们之间的选举是咋样的,下图是依次启动2.1、选举过程分

2021-12-05 00:48:57 1436

原创 Zookeeper概述

1、Zookeeper的概述Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的项目关键字:分布式:多台服务器共同完成一件复杂的任务在上面的图看出:Zookeeper像个铲屎官,为各种分布式框架(动物)提供服务的下面简单了解一下Zookeeper的工作机制Zookeeper工作机制Zookeeper是基于观察者设计的分布式管理框架(一人在干活,一人在观察监督),是负责存储和管理大家都关心的数据,接收观察者的注册,一旦数据发生改变,Zookeeper负责通知在Zookeeper上注

2021-12-02 21:47:49 1138 1

原创 Storm简介

1、什么是 Storm?Storm是一个分布式实时大数据处理系统,它是一个流数据框架,具有最高的摄取率,虽然Storm是无状态的,它通过ZooKeeper管理分布式环境和集群状态,保证每个消息将通过拓扑至少处理一次关键字:实时、流数据storm类似图片的电梯,一直往上传送数据,数据一上去就被传送、处理2、Storm核心概念tuple元组,数据结构,有序的元素列表,通常是任意类型的数据,outputCollector.emit(new Values(s1));,这里的new Value(

2021-11-28 21:28:23 2842

原创 MybatisPlus的条件构造器Wrapper

条件构造器Wrapper1、测试1:查询name不为null的用户,注册时间在2021-11-17之后的 @Test public void TestWrapper1(){ QueryWrapper<tb_user> wrapper = new QueryWrapper<>(); wrapper .isNotNull("name") .gt("create_time","

2021-11-24 00:28:38 435

原创 MybatisPlus的删除delete

删除操作1、根据id删除一条记录 @Test public void deleteById(){ int i = userMapper.deleteById(1462266553855746050L); if(i > 0){ System.out.println("删除成功"); } }输出日志:JDBC Connection [HikariProxyConnection@1183065103 wr

2021-11-23 21:56:07 6565

原创 MybatisPlus的查询select

MybatisPlus查询1、根据id查询一条记录:selectById() @Test public void selectById(){ tb_user user = userMapper.selectById(1); System.out.println(user); }输出的日志JDBC Connection [HikariProxyConnection@1108136194 wrapping com.mysql.cj.jdbc.Con

2021-11-22 22:36:32 6004

原创 MybatisPlus的乐观锁实现

1、乐观锁的概念乐观锁:由名字就可以知道,它十分乐观,认为每次的更新修改都不会被别人修改,所以不会上锁操作,出现问题,、再次判断新值测试悲观锁:名字就可以知道,它十分悲观,认为每次的更新修改都会被别人修改,所以每次操作都会上锁,再去操作2、乐观锁实现方式乐观锁实现的方式:取出记录时,获取当前version更新时,带上这个version值执行更新时,把 set version = newversion where version = oldversion如果version不对,就更新失败

2021-11-22 20:50:20 505

原创 MybatisPlus的时间自动填充问题

自动填充自动填充:指创建时间、修改时间,这些操作都是自动完成,不希望手动更新!在之前的项目都是手动更新其中实现的方式有两种方式,数据库级别和代码级别方式一:数据库级别字面理解:就是对表的字段设计,对创建、更新的时的限制(在实际的开发中,不推荐修改数据库)方式二:代码层级别1、数据库的表不需要任何的处理和限制2、实体类上字段加上注解public class tb_user { @TableId(type = IdType.ID_WORKER) private Long

2021-11-21 22:35:21 399

原创 MybatisPlus的更新Update

先通过id值查询User对象 @Test void TestUpdate() { tb_user user1 = userMapper.selectById(1); user1.setName("李四四"); System.out.println(user1); int i = userMapper.updateById(user1); System.out.println(i); System.

2021-11-21 17:44:58 1761

原创 MybatisPlus的插入insert

MybatisPlus是简化开发,基本的增删改查都不需要开发人员写,insert插入是怎么样的过程呢?1、测试insert @Test void TestInsert() { tb_user user = new tb_user(); user.setName("李四"); user.setPsw("123"); int i = userMapper.insert(user); if(i > 0){

2021-11-21 15:42:38 2481

原创 MybatisPlus快速入门

1、MybtaisPlus概述Mybatis-Plus 是一个Mybatis增强版工具,在Mybatis上扩充了其他功能并没有改变基础功能,为了简化开发提高效率而存在。官方文档:https://mp.baomidou.com/guide/特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,

2021-11-20 20:42:20 273

原创 kafka的概述

1、定义kafka是一个分布式的基于发布/订阅模式的消息队列的流平台,主要应用于大数据实时处理领域.这是提取重点关键词:分布式、发布/订阅模式、消息队列1.1、消息队列为什么需要消息队列举个简单的例子,你在前几天在网上购买了商品,几天后到时候货到了,但是你现在正在上班,小哥打电话叫你来拿快递,可以你得晚上下班才有时间去拿,这时快递小哥也有许多快递需要送,而且等到晚上小哥也下班了,两个人都在僵持,这时小哥把快递放在你住的地方的楼下的便利店,你下班就可以去拿去了,两人皆大欢喜!所以为什么需要消息队列

2021-11-13 20:41:09 1867

原创 MySQL索引

数据表如何用索引快速查找索引是 排好序的快速查找的数据结构索引存储在文件系统中索引的文件存储形式与存储引擎有关索引数据结构:可以是二叉树、红黑树、Hash表、B-Tree、B+Tree1、二叉树使用索引的如下图:(如果是使用二叉树结构)每一个节点都存放数据行的磁盘地址【快速定位到数据】虽然索引不是使用的二叉树,而是使用B+Tree结构,为什么不使用二叉树呢?如果索引是连续的数字,二叉树就会蜕变成链表,访问的速度还是和没加索引一样这时再查找效率就变低了2、红黑树红黑树作为索引的数

2021-08-19 11:07:57 283 2

原创 一条SQL语句如何执行

1、一条查询SQL语句执行select * from tb_user;数据库到底经历了哪些历程,其运转体系是什么样的?1.1、MySQL的逻辑架构图Server层:包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数,所有跨存储的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层:负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。1) 连接器连接器负责和客户端建立连接、获

2021-08-19 09:36:19 429

原创 JAVA集合Set之HashSet源码分析

1、概述HashSet是Java集合的Set的实现类,实际上底层它是HashMap,Set是无序的、不可重的.其中无序的含义是:添加到集合中和取出顺序不一致.可以存放null,但是只可以存放一个null.需要深入了解它,便要从成员变量、构造方法、主要方法深入2、成员变量static final long serialVersionUID = -5024744406713321676L;private transient HashMap<E,Object> map;

2021-06-03 08:08:01 315 1

原创 Java数据结构之链表及实现

之前学习的顺序表查询非常快,时间复杂度为O(1),但是增删改效率非常低,因为每一次增删改都会元素的移动。可以使用另一种存储方式-链式存储结构。链表是一种物理存储单元上非连续、非顺序的存储结构。链表由一序列的结点(链表中的每一个元素成为结点)组成。结点API设计:类名 Node 构造方法 Node(T t,Node next) 创建Node对象 成员变量 T item:存储数据 Node next :指向下一个结点 结点类:publi

2021-05-31 21:45:24 1876 2

原创 Vector源码解读以及与ArrayList的区别

1、概述Vector和ArrayList类似,内部也是维护一个Object的数组 protected Object[] elementData,也允许null存在.其实现了 List<E>、RandomAccess、Cloneable、java.io.Serializable.内部的方法和ArrayList一样的,只是加上 synchronized 关键字, 保证线程安全.需要深入了解它,便要从成员变量、构造方法、主要方法深入2、成员变量protected Object..

2021-05-29 21:38:20 240 1

原创 ArrayList源码解读

1、概述ArrayList是Java集合中使用比较多的,继承AbstractList,实现List接口。内部维护一个Object类型的数组elementData.允许null的存在。其中实现了 List<E>、RandomAccess、Cloneable、java.io.Serializable.需要深入了解它,便要从成员变量、构造方法、主要方法深入。2、成员变量private static final long serialVersionUID = 86834525811

2021-05-22 13:32:50 194 1

原创 LeetCode算法之数组篇

练习数组算法题,得先了解数组的常用操作,只要熟悉这些操作才可以更好刷题。①创建数组Java语言中至少有四种创建数组,这里就介绍四种常用的。int [] nums = {1,3,5,7};int [] a = new int []{1,2,3,4};int [] a = new int [4]; //再添加ArrayList<Integer> a = new ArrayList<>();//add添加元素②添加元素a.add(9);直接添加

2021-05-19 17:43:55 327 3

原创 Java数据结构之顺序表及实现

线性表(linear_list)是最常用且最简单的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。1、线性表相关概念前驱元素:一个A元素在B元素的前面,则称A是B的前驱元素。后继元素:若B元素在A元素的后面,则称B为A的后继元素。线性表的特征:第一个数据元素没有前驱,这个数据元素被称为头结点。 最后一个数据元素没有后继,这个数据元素被称为尾结点。 除了第一个和最后一个数据元素外,其他的数据元素都有一个前驱和一个后继。2、线性表的分类线性表中的数据存储方式可以是顺

2021-05-15 23:26:09 325 1

原创 快速排序算法

快速排序是对冒泡排序的一种改进。基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小;再对两部分数据进行快速排序,来达到整个数据变成有序的。1、排序原理首先定一个分界值,通过该分界值将数据分为两部分 将大于或等于分界值的数据放在右边,小于分界值的数据放到数组的左边。 左右的数据可以独立排序,左侧的数据又可以确定一个分界值又分成两部分。右侧的数据也是确定一个分界值又分成两部分..... 重复上述操作过程来一张快速排序的动态图看看效果:

2021-05-15 16:12:08 163

原创 归并排序算法

归并排序:是采用分治法的一个非常典型的应用,将已有序的子序列合并,得到完全有序的序列;先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。1、排序原理尽可能将一组数据拆成两个元素相同的子组,并对每一个子组继续拆分,直到每个子组的元素个数是1为止 将相邻的两个子组进行合并成一个有序的大组 不断的重复步骤2,直到最终只有一个组为止动态演示过程:2、算法分析过程图析详细过程:在治的过程详细分析:是如何具体归并的?第一次填充:p1指针指向4,p

2021-05-15 12:01:04 374

原创 希尔排序算法

希尔排序(Shell sort)是插入排序的一种又称"缩小增量排序",是直接插入排序算法的一种更高率的改进版本。希尔排序是非稳定算法。为什么不稳定呢?举例子:3 5 10 8 7 2 8 1 20 6 现在d=2(3 10 7 8 20)和(5 8 2 1 6),原本相同的数据(如两个8,可以记为 8' ,8")但是经过排序后变成(8",8')不稳定的意思不是出错的意思。1、排序原理选定一个增量h(一般是数组长度的一半),按照增量h作为数据分组的依据,...

2021-05-14 00:07:41 2463 2

原创 插入排序算法

1、排序原理插入排序是一种简单直观且稳定的排序算法。插入排序的工作非常类似人们一手抓牌,一手插入,并且按顺序插入对应的位置。接下来说明排序原理:把所有元素分为两组,一组已经排序的和没有排序的 找到没有排序的第一个元素插入已经排序组中 倒序遍历已经排序的元素,依次和待插入的元素进行比较,直到找到第一个元素小于等于插入元素,那么就把待插入的元素插入到这个位置,其他元素向后移动一位。是不是没怎么听懂,来一张动态图演示过程:2、算法分析过程3、Java代码实现impo

2021-05-13 19:11:04 116

原创 选择排序算法

1、排序原理每一次遍历的过程中,都假定第一个元素的索引为最小值,和其他索引处的值依次比较,如果当前索引处的值大于其他处索引处的值,就把其他处索引值记录下来(保存到min_index中),它再和后面其他索引处的值进行比较,最后比较得出最后的最小值所在的索引值。 交换第一个索引处和最小值所在的索引处的值。可能听完也不知道讲了什么,不是非常清楚过程,那么来一张动态过程图:2、算法的伪代码for ito n-2 do mini for ji+1 to...

2021-05-13 17:09:28 94

原创 冒泡排序算法

冒泡排序1、排序原理:比较相邻的元素,如果前一个元素比后面的元素大,就交换这两个元素的位置 每一对相邻元素做同样的工作,最终最后位置的元素就最大\最小2、算法分析过程:拿一个数组样例做分析:[89,45,68,90,29,34,17]后面的过程都和第一次一样的过程,最后所有的冒泡结果如下图:N个数字要排序完成,总共进行N-1趟排序,每一趟的排序次数为N-i次,外层循环控制多少趟,内层循环控制每一趟排序次数。3、Java代码实现public class Bubble.

2021-05-13 11:28:14 203 1

原创 Java比较器-Comparable

在Java中经常会涉及到对象数组的排序问题,就会涉及到对象之间的比较问题。Java实现对象排序的方式有两种:自然排序:Comparable 定制排序:Comparator1、Comparable 自然排序Comparable接口强行对实现它的每个类的对象进行整体排序,实现Comparable的类必须实现compareTo(Object obj)方法,返回int类型,如果当前对象this大于形参obj对象,返回正整数,如果当前对象this小于形参obj对象,返回负整数,等于就返回0.pu

2021-05-12 21:32:40 580 5

原创 Java多线程相关的API方法以及作用

yield():让位方法,暂停当前正在执行的线程,让当前线程由"运行状态" 进入到 "就绪状态",但是不可以保证当前线程调用yield()方法之后其他线程就一定可以获得CPU执行权,可能当前线程再次抢到CPU执行权。这个取决于CPU调度,看CPU心情。join():合并线程,让当前线程进入阻塞状态,直到子线程执行结束,当前线程才可以执行。wait():会让当前线程阻塞,同时让当前线程释放它所持有的锁,直到其他线程调用此对象的 notify()方法或者notifyAll()方法,当前线程就被唤醒(进入

2021-05-12 16:13:44 159

mysql详细学习笔记

MySQL的基础详细学习

2021-01-05

空空如也

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

TA关注的人

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