- 博客(78)
- 资源 (2)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【JavaWeb】我的个人博客 jsp+servlet+mysql 前端+后台管理
话不多说先放几张成果图:说明:1,登录用户分为3种,1 管理员,2 普通用户,3 冻结用户(管理员在管理界面设置用户权限,冻结用户不能评论)。管理员可进入管理界面,对整个博客进行管理(后面详细说明)普通用户可以浏览,评论,留言。用户权限通过数据库gg_user表中的 user_rights设置,通过过滤器filter进行拦截。2,验证码通过后台动态生成,不区分大小写,验证码,用...
2018-12-09 22:04:03
14370
50
原创 计算机网络
计算机网络:1、内核态用户态1)为什么分这两个:1、为了安全。内核是进行硬件交互、资源管理的(不用程序员开发,简便了步骤),内存分为实地址模式和保护模式,在开机时候会把内存分为两部分一部分专门供内核进程使用一部分给用户进程使用,用户进程通过系统调用的方式调内核里的方法,这样用户进程就不能修改内核地址空间,这样防止了病毒改别人的进程。2、为了并发。如果用户进程不主动让出cpu那么别的进程就会饿死,怎么解决,通过晶振(物理硬件:直流电转化成时间段内规律的电流)规律的产生时钟中断,然后去查中断向量表找到回
2023-06-15 09:29:48
1710
原创 【Java分析】解决秒杀问题的几种实现,使用分布式锁和redis事务实现的对比
秒杀功能最重要的就是对库存的把控性,所以也就是说一定要让查询修改库存这两个步骤具有原子性。所以根据我的理解,可以得出以下几种解决方案:1、使用数据库事务 2、加入Spring声明式事务 3、使用分布式锁 4、使用Redis事务解决方案一: 使用mysql事务,由于这种方法对于mysql压力太大,所以就不予以代码说明了。解决方案二: Spring的话,可...
2020-02-24 10:07:23
614
原创 【Java力扣算法】LeetCode 309 Best Time to Buy and Sell Stock with Cooldown(动态规划)
题目:给定一个整数数组,其中第i个元素代表了第i天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3 解释: 对应的交易状态为: ...
2020-01-18 10:24:13
398
原创 【Java力扣算法】LeetCode 152 乘积最大子序列(动态规划)
题目:乘积最大子序列给定一个整数数组nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。推荐示例:[0,2][-2][-3,-4][...
2020-01-18 06:49:57
335
原创 【面试经验】怎样给别人阐述三次握手四次挥手,以及相关问题。
关于建立TCP连接,以及相关的问题我相信网上有很多的教程,那么怎样才能理解的(或者给别人阐述的)更好呢?就是要深入一点了解TCP协议。 首先了解(最好背过)TCP协议格式,从网上随便找了两张图。TCP协议报头格式:三次握手:四次挥手:问:讲述一下TCP连接建立过程?答: 首先是客户端向服务器发送一个tc...
2019-12-19 10:43:38
186
原创 【Java数据结构】逆置单链表,四种解法
原理:从原来的链表把第一个节点一个一个逮出来,然后头插到新链表中class ListNode{ int data; ListNode next;}public class Link{ public static ListNode ReverseLink(ListNode first){ ListNode cur = first; //原...
2019-08-03 17:25:58
1929
转载 【java排序算法】堆排序,桶排序,计数排序
桶排序* 在额外空间充足的情况下,尽量增大桶的数量,极限情况下每个桶只有一个数据时,或者是每只桶只装一个值时,* 完全避开了桶内排序的操作,桶排序的最好时间复杂度就能够达到 O(n)。//桶排序/*比如高考总分 750 分,全国几百万人,我们只需要创建 751 个桶,循环一遍挨个扔进去,排序速度是毫秒级。但是如果数据经过桶的划分之后,桶与桶的数据分布极不均匀,有些数据非常多...
2019-08-03 15:10:00
296
原创 【Java排序算法】快速排序
快速排序: 是不稳定的。是对冒泡排序的升华。利用分治思想,从两头遍历数组,先让右指针从右往左搜索直到找到比左指针小的元素,然后交换他俩的位置,接着让左指针从左向右搜索直到找到比右指针大的元素,然后交换他俩的位置,以此类推 直到左右指针相遇结束第一轮。紧接着将数组以左右指针相遇的那个点分开,分为左右两部分,再将这两部分做上述处理。复杂度分析: 时间复杂度...
2019-08-02 14:52:52
137
原创 【Java排序算法】归并排序
归并排序: 利用分治思想,将一个数组的排序划分成两个数组的排序,再将两个化成八个,直到划分到最小单位,然后在按序合并的过程就是归并排序。复杂度分析: 时间复杂度O(nlogn)归并排序代码:public static void merge(int []a,int left,int mid,int right){ int []tmp=ne...
2019-08-02 14:03:15
120
原创 【java排序算法】希尔排序
希尔排序: shellSort是对插入排序的优化,是不稳定的。 比较指定步长的数组下标的值,进行插入排序,然后缩小步长,再进行插入排序,以此类推,直到步长为1。复杂度分析: 最优时间复杂度:根据步长序列的不同而不同 最坏时间复杂度:O(n^2)希尔排序代码:public static in...
2019-07-31 11:56:12
91
原创 【java排序算法】插入排序及优化
插入排序: 稳定的排序算法。插入排序相当于从第一个元素开始,将后面的元素一个个往进插,新插的元素一个一个与前面的比较,遇到比自己大的交换,遇到比自己小的则插入这个位置。所以左边的元素永远是有序的。 适用于小规模数据或者大片有序的数组。复杂度分析: 时间复杂度:最坏: O(n^2) 最好:O(n)插入排序代码: ...
2019-07-30 23:15:35
508
原创 【java排序算法】选择排序及优化
选择排序: 第一轮用第一个元素与后面的所有元素比较找到最小的那一个与第一个元素交换位置,如果没找到则不交换。第二轮用第二个元素进行类似第一轮的操作,如此类推。复杂度分析: 与冒泡排序一样,但是交换次数少于冒泡排序。 比较次数n*(n-1)/2 次 时间复杂度:O(n^2)选择排序代码: public static int...
2019-07-30 22:27:12
338
原创 【Java排序算法】冒泡排序及优化
冒牌排序: 从数组开始元素向后两两比较,将大值向后移动。第一遍就会把最大值移动到数组最后,如此往复达到排序目的。复杂度分析: 比较次数n*(n-1)/2 次 时间复杂度:O(n^2)普通冒泡排序:public static int[] BubbleSort1(int arr[],int len){ for (int i = ...
2019-07-30 21:57:53
171
原创 【Java分析】java多线程(2、线程的状态,属性)
1、线程状态: new 新建状态 ---》调用 start()---》进入RUNNABLE :可运行 运行 状态---》waiting timed_waiting 锁是不释放的----》BLOCKED阻塞态,释放锁,或者它就没有获得锁 ------》TERMINATED线程执行完毕 为什么不区分可运行和运行状态:因为无法知道cpu调...
2019-07-23 17:08:02
231
原创 【Java分析】java多线程(1、定义,创建线程)
进程是资源分配的最小单位,线程是CPU调度的最小单位1、进程: 运行起来的程序。 进程通信:网络连接,管道(铁路),信号量,共享内存+同步机制(锁) 进程是应用程序运行的载体。一旦程序被载入到内存中并准备执行,它就是一个进程。进程是一种抽象的概念,进程是资源分配的基本单位,又是调度运行的基本单位,是系统中的并发执行的单位。 ...
2019-07-23 10:54:04
150
原创 【Java分析】HashMap源码分析
目录:一:java集合框架二:ArrayList三:LinkedList四:HashMap总结:1、HashMap 底层数据结构:数组+单链表,存储的是键值对2、key 可以为 null,但是只能有一个 key 为 null ,允许多条记录的值为null,key为null的存贮位置在数组0号下标(table[0])找 value 的值3、HashMap是非线程...
2019-07-23 01:17:00
246
原创 【Java分析】LinkedList分析
目录:一:java集合框架二:ArrayList三:LinkedList四:HashMap一:总结1、底层数据结构:双向链表,有头尾指针。2、实现接口:RandomAccess 随机访问 get(index) Cloneable : 可以克隆 标记接口 Ser...
2019-07-23 00:51:48
93
原创 【Java分析】ArrayList 源码分析
目录:一:java集合框架二:ArrayList三:LinkedList四:HashMap一:总结0、继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。1、可以存放null,可以重复(继承 list的原因)2、可以随机访问 (继承 RandomAcce...
2019-07-23 00:23:16
121
原创 【Java分析】Java集合框架
目录:一:java集合框架二:ArrayList三:LinkedList四:HashMap一:java集合框架:定义: java集合可以看作是一种容器,用来存储对象信息。所有集合类都位于 java.util 包下,但支持多线程的集合类位于java.util.concurrent 包下。 Java 集合类主要由...
2019-07-22 22:13:04
408
原创 【Java分析】注解
定义: JDK1.5 引入注解类型通过注解类型,可以声明元数据。注解可以附加到各种程序实体(包括类型,方法,字段等),注解主要给编译器提供额外的信息,编译器可以同这些附加信息自动生成相应的代码,从而实现特定的功能。 注解类型: 1、java 类库中预定义的注解类型 2、自定义注解类型 1、预定义注解 ...
2019-07-18 10:22:15
97
原创 【Java分析】反射机制
什么是 java 的反射机制? 在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用他的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。 Java 有个 Object 类,是所有 java 类的继承根源,其声明了多个可以在所有 java 类中被改写的...
2019-07-18 00:32:27
61
原创 【Java分析】枚举类型
定义: 在定义变量的过程中往往涉及取值范围,当一个变量的取值范围为一组常量时,那么就把这个变量的类型设置为枚举类型。枚举类型是类的一种特殊形式。创建enum时编译器会生成一个相关的继承自java.lang.Enum的类。 [puiblic] enum EnumName{ NAME1 , NAME2 , NAME3}枚举的用法: ...
2019-07-18 00:16:55
103
原创 【MySql数据库】索引相关知识总结
索引是什么? 索引是创建在表上的,是对数据库表中一列或者多列的值进行排序的一种结构。索引可以提高查询的速度。索引有两种存储类型,B型树索引和 哈希索引。InnoDB和MyISAM存储引擎支持BTREE索引,MEMORY存储引擎只会HASH索引和BTREE索引,默认为前者。 注:索引可以提高查询的速度为什么要索引? 为了快速找到某一个数...
2019-07-16 09:06:03
220
原创 【Java数据结构】AVL树(平衡二叉树)总结(增加,删除操作,四种旋转)
AVL树本质上还是一棵二叉搜索树,AVL = BST + 平衡操作所以它的特点是: 1.本身首先是一棵二叉搜索树。 2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。 3.树中的每个左子树和右子树都是AVL树也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。为何引入AVL: ...
2019-07-15 13:59:46
604
原创 【Java数据结构】BST树(二叉搜索树)总结09(按层打印二叉树)
二叉树总结:入口二叉树的基本操作:1、插入,删除 操作2、前、中、后序遍历,层序遍历3、求BST树高度,求BST树节点个数4、返回中序遍历第k个节点的值5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树6、BST树的镜像7、把BST树满足[begin,end]区间的值放在集合中、打印出来8、判断是否是子树9、按层打印二叉树二叉树的按层...
2019-07-15 09:16:40
303
原创 【Java数据结构】BST树(二叉搜索树)总结08(判断是否是子树)
二叉树总结:入口二叉树的基本操作:1、插入,删除 操作2、前、中、后序遍历,层序遍历3、求BST树高度,求BST树节点个数4、返回中序遍历第k个节点的值5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树6、BST树的镜像7、把BST树满足[begin,end]区间的值放在集合中、打印出来8、判断是否是子树9、按层打印二叉树判断是否是子...
2019-07-15 09:12:47
186
原创 【Java数据结构】BST树(二叉搜索树)总结07(把BST树满足[begin,end]区间的值打印出来,放在集合中)
二叉树总结:入口二叉树的基本操作:1、插入,删除 操作2、前、中、后序遍历,层序遍历3、求BST树高度,求BST树节点个数4、返回中序遍历第k个节点的值5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树6、BST树的镜像7、把BST树满足[begin,end]区间的值放在集合中、打印出来8、判断是否是子树9、按层打印二叉树把BST树满...
2019-07-15 08:40:11
240
原创 【Java数据结构】BST树(二叉搜索树)总结06(求BST树的镜像)
二叉树总结:入口二叉树的基本操作:1、插入,删除 操作2、前、中、后序遍历,层序遍历3、求BST树高度,求BST树节点个数4、返回中序遍历第k个节点的值5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树6、BST树的镜像7、把BST树满足[begin,end]区间的值放在集合中、打印出来8、判断是否是子树9、按层打印二叉树BST树的镜像...
2019-07-15 08:26:47
150
原创 【Java数据结构】BST树(二叉搜索树)总结05(判断二叉树是否是BST树,AVL树)
二叉树总结:入口二叉树的基本操作:1、插入,删除 操作2、前、中、后序遍历,层序遍历3、求BST树高度,求BST树节点个数4、返回中序遍历第k个节点的值5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树6、BST树的镜像7、把BST树满足[begin,end]区间的值放在集合中、打印出来8、判断是否是子树9、按层打印二叉树1、判断是否...
2019-07-07 20:54:03
588
1
原创 【Java数据结构】BST树(二叉搜索树)总结04(返回中序遍历 第k个节点的值)
二叉树总结:入口二叉树的基本操作:1、插入,删除 操作2、前、中、后序遍历,层序遍历3、求BST树高度,求BST树节点个数4、返回中序遍历第k个节点的值5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树6、BST树的镜像7、把BST树满足[begin,end]区间的值放在集合中、打印出来8、判断是否是子树9、按层打印二叉树返回中序遍历...
2019-07-07 20:32:51
848
原创 【Java数据结构】BST树(二叉搜索树)总结03(求BST树高度,求BST树节点个数)
二叉树总结:入口二叉树的基本操作:1、插入,删除 操作2、前、中、后序遍历,层序遍历3、求BST树高度,求BST树节点个数4、返回中序遍历第k个节点的值5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树6、BST树的镜像7、把BST树满足[begin,end]区间的值放在集合中、打印出来8、判断是否是子树9、按层打印二叉树1、求BST...
2019-07-07 20:01:49
2061
原创 【Java数据结构】BST树(二叉搜索树)总结02(前、中、后序遍历,层序遍历)
二叉树总结:入口二叉树的基本操作:1、插入,删除 操作2、前、中、后序遍历,层序遍历3、求BST树高度,求BST树节点个数4、返回中序遍历第k个节点的值5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树6、BST树的镜像7、把BST树满足[begin,end]区间的值放在集合中、打印出来8、判断是否是子树9、按层打印二叉树1、前序遍历...
2019-07-07 16:12:04
798
原创 【Java数据结构】BST树(二叉搜索树)总结01(插入,删除操作)
BST树(binary search tree)定义:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值;(2)若右子树不空,则右子树上所有节点的值均大于它的根节点的值;(3)左、右子树也分别为二叉搜索树;(4)没有值相等的节点。二叉树每层节点个数为2^n ,树高为log2n...
2019-07-07 15:31:10
1351
1
原创 【Java数据结构】判断单链表是否有环,并且找出环的入口
一:判断是否有环 思路:使用快慢引用法解决 是否有环 假设链表是一个有环链表,且由f指向c构成环。那么 使用两个指针 A 和 B,让两指针同时向后遍历 而且B的遍历速度是A的两倍,呢么如果是有环的话,B终究会追上A。因此我们可以 以AB是否相遇作为判断是否有环的必要条件。 下面是图...
2019-05-29 20:39:59
3480
3
原创 【Java数据结构】输出单链表中倒数第k个
思路: 如图所示:这个题的灵魂就是求出 length-k,求出length-k 就相当于知道了倒数k的值。先遍历k长度,到达a点,剩下的长度就是 length-k。然后同时遍历 m, n 两个链表,那么m遍历结束的时候,n链表刚好到达b点 即倒数k的位置。代码:public Entry<E> getKOfLink(int k...
2019-05-28 21:24:11
507
原创 【Java数据结构】如果两个单链表相交,输出相交节点
思路:寻找同一起跑线,再找节点 让 两个链表先处于同一起跑线,如图所示,然后再 同时向后遍历(从d和h开始同时向后遍历),那么就可以确定是在哪个地方相交的了(确定了在f处相同,即交点)。那么如何让他俩处于同一起跑线呢?很简单,只需要长的链表先走 走到与短的链表一样长就可以了。所以解法:1,分别计算两个链表的长度,得出差值(长的为7,短的为4,差值3) ...
2019-05-28 20:52:23
1262
原创 【Java力扣算法】LeetCode 344 反转字符串
题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是ASCII码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2...
2019-05-25 16:41:37
646
原创 【Java数据结构】不带头单向循环链表
public class SingleLink<T> { private static class Entry<E>{ private Entry<E> next; private E value; public Entry(E value){ this.value = va...
2019-05-25 16:09:48
298
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人