自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目:在线抽奖系统

在线抽奖系统项目目标复习Spring相关知识:IOC/DI(Bean的注册、配置与使用)、SpringMVC、AOP复习SpringBoot的配置使用学习系统设计,结合并深入复习学过的知识,如异常,HTTP数据传输流程等等复习并巩固Mybatis的基本使用,理解数据转换时对应的映射关系学习项目开发流程开发环境与技术栈Windows/Mac/LinuxMavenLombokSpring、SpringMVC、SpringBootMySQL、Mybatis、Druid项目功能主

2020-09-17 11:39:19 3393

原创 在 O(1) 时间内删除链表节点、 删除链表中的重复的节点、正则表达式匹配

在 O(1) 时间内删除链表节点思路:如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。综上,如果进行 N 次操作,那么大约需要操作节点的次数为 N-1+N=2N-1,其中 N-1 表示 N-1 个不是尾节点的每个节点以 O(1) 的时间复杂度操作节点的总次数,N 表示 1 个尾节点以 O(N) 的时间复杂

2020-09-09 15:37:30 261

原创 剑指offer--旋转数组的最小数字、机器人的运动范围

剑指offer—旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:此时问题的关键在于确定对半分得到的两个数组哪一个是旋转数组,哪一个是非递减数组。我们很容易知道非递减数组的第一个元素一定小于等于最后一个元素。通过修改二分查找算法进行求解(l 代表 lo

2020-09-09 15:32:37 115

原创 剑指offer---旋转数组的最小数字、机器人的运动范围、在 O(1) 时间内删除链表节点、删除链表中的重复的节点、正则表达式匹配

剑指offer—旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:此时问题的关键在于确定对半分得到的两个数组哪一个是旋转数组,哪一个是非递减数组。我们很容易知道非递减数组的第一个元素一定小于等于最后一个元素。通过修改二分查找算法进行求解(l 代表 lo

2020-09-07 17:06:12 104

原创 牛客---设计LRU缓存结构

牛客—设计LRU缓存结构题目:牛客链接设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能​ set(key, value):将记录(key, value)插入该结构​ get(key):返回key对应的value值[要求]​ set和get方法的时间复杂度为O(1)​ 某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。​ 当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。若

2020-09-02 12:57:59 767

原创 Mybatis环境搭建、注解开发环境搭建

MybatisMyBatisMyBatis是一个Java持久层框架,它封装了jdbc,使开发者只关注sql语句本身MyBatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中的sql的动态参数进行映射生成最终执行的SQL语句采用ORM思想解决了实体和数据库映射的问题,对JDBC进行封装,屏蔽了JDBC API底层的访问细节ORMObject Relational Mapping:对象关系映射将数据库表和实体类及实体类的属性对应起来

2020-08-16 14:13:43 165

原创 牛客--distinct-subsequences、最长递增子序列、19年贝壳笔试题

最长递增子序列题目:对于一个数字序列,请设计一个复杂度为O(nlogn)的算法,返回该序列的最长上升子序列的长度,这里的子序列定义为这样一个序列U1,U2…,其中Ui < Ui+1,且A[Ui] < A[Ui+1]。给定一个数字序列A及序列的长度n,请返回最长上升子序列的长度。牛客链接代码:public class 最长递增子序列长度 { public int findLongest(int[] A, int n) { int[] dp=new int[n];

2020-08-11 18:29:54 183

原创 牛客--unique-paths、unique-paths-ii、带权值的最小路径和、triangle

牛客–unique-paths题目:一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start"的位置)。 机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish"的位置)。 可以有多少种不同的路径从起点走到终点? 牛客链接典型的动态规划问题代码:public class Uniquepaths { public int uniquePaths (int m, int n) { int[][] dp=new int[m][n];

2020-08-11 15:38:08 178

原创 leetcode--78.子集、90.子集II

leetcode–78.子集题目:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。算法:使用回溯算法代码:class Solution { List<List<Integer>> lists = new ArrayList<>(); public List<List<Integer>> subsets(int[] nums) { if(nums == null || nums.le

2020-08-11 12:57:15 101

原创 回溯:leetcode--46.全排列、47.全排列II、面试题 08.08. 有重复字符串的排列组合

回溯算法leetcode–46.全排列题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列参考例子代码:class Solution { List<List<Integer>> lists= new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { perm(nums,0, nums.length-1);

2020-08-10 17:38:56 191

原创 DP--面试题 08.11.硬币、leetcode--416.分割等和子集

动态规划面试题 08.11.硬币题目:硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)。leetcode链接思路:与完全背包问题相似。完全背包问题代码:class Solution { public int waysToChange(int n) { int[] arr={25,10,5,1}; int[][] dp=new int[5][n+1];

2020-08-10 17:12:07 122

原创 leetcode--518.零钱兑换II、322.零钱兑换

动态规划leetcode–518.零钱兑换II题目:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。leetcode链接class Solution {public int change(int amount, int[] coins) { int n = coins.length; //定义dp数组,dp数组的含义是:若只使用前 i 个物品,当背包容量为 j 时,有 dp[i][j] 种方法可以装满背包

2020-08-10 12:30:29 120

原创 动态规划---0/1背包问题、完全背包问题、多重背包问题

动态规划问题0/1背包问题125.背包问题II问题描述:有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值. 。领扣链接特点:这是最简单的背包问题,特点是每个物品只有一件供你选择放还是不放。状态:​ F(i, j): 前i个物品放入大小为j的背包中所获得的最大价值状态递推:对于第i个商品,有一种例外,装不下,两种选择,放或者不放如果装不下:此时的价值与前i-1个的价值是一样的F(i,j) = F(i-1,j)​ 如果可以装入:需

2020-08-09 15:50:06 268

原创 编程:序列交换、数字圆环、小易的英语软件

序列交换题目:小易给你一个包含n个数字的数组a1,a2,…,a3a_1,a_2,…,a_3a1,a2,…,a3。你可以对这个数组执行任意次以下交换操作: 对于数组中的两个下标i,j(1<=i,j<=n),如果ai+aja_i+a_jai+aj为奇数,就可以交换aia_iai和aja_jaj。现在允许你使用操作次数不限,小易希望你能求出在所有能通过若干次操作可以得到的数组中,字典序最小的一个是什么。思路:只要不全是奇数或者全是偶数,就进行排序代码:import java.util.Ar

2020-08-07 15:26:37 384

原创 了解HTTP、HTTPS

HTTP概念http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应HTTPS工作原理一、首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;二、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密);三、消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;四、发送给服务端,此时只

2020-08-05 21:25:42 484

原创 leetcode--15.三数之和、16.最接近的三数之和

leetcode–15.三数之和题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。leetcode链接思路:首先对数组进行排序,排序后固定一个数 nums[i],再使用左右指针指向 nums[i]后面的两端,数字分别为 nums[L] 和 nums[R],计算三个数的和 sum判断是否满足为 000,满足则添加进结果集如果 nums[i]大于 0,则三数之和必然无法等于 0,

2020-08-04 21:41:13 362

原创 全排列、亲7数

全排序(递归实现)从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。假设我们要对1234进行全排列首先保证1不变,对234进行全排列同样的,对234进行全排列可以保证2不变,对34进行全排列,然后保证3不变,对4进行全排列,因为4只有一个数,所以全排列只有一种代码:import java.util.Arrays;public class Two { public static void

2020-08-04 21:29:48 892

原创 数据库索引、事务

索引索引是帮助MySQL高效获取数据的排好序的数据结构使用场景要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:数据量较大,且经常对这些列进行条件查询。该数据库表的插入操作,及对这些列的修改操作频率较低。索引会占用额外的磁盘空间。满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。使用1.普通索引是最基本的索引,它没有任何限制。它有以下几种创建方式:(1)直接创建索引CREATE INDEX index_name ON table(column(length))

2020-08-04 19:22:06 523

原创 线程池

线程池什么是线程池线程池其实就是一种多线程处理形式, 处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象;线程池优点降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁带来的消耗。提高响应速度:当任务到达时,任务可以不需要等待线程创建就能立即执行。提高线程的可管理性:使用线程池可以统进行线程分配、调度和监控。ThreadPoolExecutor构造方法

2020-08-03 16:58:40 127

原创 leetcode--3.无重复字符的最长子串、11.盛最多水的容器、15.三数之和

leetcode–3.无重复字符的最长子串题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。leetcode链接列举出这些结果,其中括号中表示选中的字符以及最长的字符串:以(a)bcabcbb开始的最长字符串为(abc) abcbb;以a(b) cabcbb开始的最长字符串为a (bca) bcbb;以ab© abcbb开始的最长字符串为ab ( cab) cbb;以abc (a) bcbb开始的最长字符串为abc (abc )bb;以abca(b) cbb开始的最长字

2020-07-29 16:37:47 83

原创 leetcode--98.验证二叉搜索树、45.删除二叉搜索树中的节点、701.二叉搜索树中的插入操作

leetcode–98.验证二叉搜索树题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。leetcode链接代码:public boolean isValidBST(TreeNode root) { return func(root,null,null);}public boolean func(TreeNode root,

2020-07-28 14:54:18 88

原创 Spring Boot(简)

Spring Boot概念Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应 用程序并且尽可能减少你的配置文件。简单来说就是 SpringBoot 其实不是什么新的框架,它默认配置了很多框架的使用方式,整合了所有的框架。Spring Boot 的特点:SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项 目的 Maven 或 Gradle 构建中

2020-07-27 20:01:39 149

原创 Spring bean

SpringSpring的核心机制管理Bean程序主要是通过Spring容器来访问容器中的Bean,ApplicationContext是Spring容器最常用的接口,该接口有如下两个实现类:ClassPathXmlApplicationContext: 从类加载路径下搜索配置文件,并根据配置文件来创建Spring容器。FileSystemXmlApplicationContext: 从文件系统的相对路径或绝对路径下去搜索配置文件,并根据配置文件来创建Spring容器public cla

2020-07-27 18:30:44 101

原创 GC垃圾回收

GC垃圾回收简介:Garbage Collection(GC),Java进程在启动后会创建垃圾回收线程,来对内存中无用的对象进行回 收。垃圾回收的时机System.gc()显示的调用System.gc():此方法的调用是建议JVM进行 FGC(Full GC),虽然只是建议而非一定,但 很多情况下它会触发 FGC,从而增加FGC的频率。一般不使用此方法,让虚拟机自己去管理它的内存。JVM垃圾回收机制决定创建对象时需要分配内存空间,如果空间不足,触发GC其他回收机制,这部分在后续具体讲解。

2020-07-27 13:33:48 234

原创 leetcode--155.最小栈、224.基本计算器、316.去除重复字母

leetcode–155.最小栈题目:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。借用一个辅助栈min_stack,用于存获取stack中最小值。算法流程:push()方法: 每当push()新值进来时,如果 小于等于 min_stack栈顶值,则一起push()到min_stack,即更新了栈

2020-07-26 00:34:27 86

原创 项目:聊天室

聊天室github源码链接开发环境与技术栈Windows/Mac/LinuxMavenServletMySQLJacksonWebSocket项目功能用户登录、注册显示频道列表用户发送消息、群聊功能历史消息功能关注/取消关注频道功能(不实现)增加、删除频道功能(不实现)项目演示用户登录显示频道列表用户发送消息sjc发送消息聊天信息窗口tz2发送消息聊天信息窗口:历史消息功能用户tz2退出登录,用户sjc发送消息用户tz

2020-07-25 21:05:54 505

原创 leetcode--20.有效的括号、32.最长有效括号

leetcode–20.有效的括号题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。代码:public boolean isValid(String s) { Stack<Character> stack=new Stack<>(); for(int i=0;i<s.length();i++){ if(s

2020-07-23 21:20:26 100

原创 JVM虚拟机、类加载

JVM虚拟机概念:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面,class 类信息常量池(static 常量和 static 变量)等放在方法区JDK1.7内存模型JDK1.8内存模型JVM的分区可以分为两种:线程私有的内存区和线程共享的内存区线程私有的内存区域程序计数器:一

2020-07-23 19:00:17 151

原创 leetcode--61.旋转链表、138.复制带随机指针的链表、206.反转链表

leetcode–61.旋转链表题目:给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。leetcode链接找到旧的尾部并将其与链表头相连 old_tail.next = head,整个链表闭合成环,同时计算出链表的长度 n。找到新的尾部,第 (n - k % n - 1) 个节点 ,新的链表头是第 (n - k % n) 个节点。断开环 new_tail.next = None,并返回新的链表头 new_head。public ListNode rotateR

2020-07-22 21:29:07 68

原创 复习:Web项目、Servlet、Cookies和Session

Web项目Srevlet概念:Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客 户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。定位:Java Servlet用Java编写的服务器端程序(web application)。作用:其主要功能在于交互式地浏览和修改数据,生成动态Web内容。理解:狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,

2020-07-22 18:27:30 152

原创 复习:网络基础

OSI七层模型OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是 一个逻辑上的定义和规范;把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个 层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;但是, 它既

2020-07-22 16:11:38 237

原创 leetcode--2.两数相加、19.删除链表的倒数第N个点

leetcode–2.两数相加题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。leetcode链接将当前结点初始化为返回列表的哑结点。将进位 carry 初始化为 0。将 p 和 q分别初始化为列表 l1 和 l2 的头部。遍历列表 l1l1l1 和 l2l2l2 直至

2020-07-20 21:47:10 77

原创 复习:多线程(锁)

乐观锁、悲观锁乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是 否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。 设计上总是乐观的认为数据修改大部分场景都是没有线程并发修改,少量情况下才存在。线程安全上采取版本号来控制------用户自己判断版本号,并处理。悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样 别人想拿这个数据就会阻塞直到它拿到锁。 悲观的认为总是有

2020-07-20 18:04:18 290

原创 leetcode--110.平衡二叉树、144.前序遍历、145.后序遍历

leetcode–110.平衡二叉树题目:给定一个二叉树,判断它是否是高度平衡的二叉树。leetcode链接代码: public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }public class Lc110 { public int getheight(TreeNode root

2020-07-19 21:14:37 177

原创 复习:进程与线程

复习:进程与线程进程概念:进程:在操作系统中,能够独立运行,并且作为资源分配的基本单位。它表示运行中的程序。时间片:操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。并发与并行:并发:多个进程在一 个CPU下采用时间片轮

2020-07-19 17:57:02 195

原创 leetcode--94.二叉树的中序遍历、102.二叉树的层序遍历

leetcode–94.二叉树的中序遍历题目:给定一个二叉树,返回它的中序 遍历leetcode链接代码:方法一:递归 public List<Integer> inorderTraversal(TreeNode root) { List<Integer> lis=new ArrayList<>(); func(root,lis); return lis; } private void fu

2020-07-18 19:56:24 82

原创 LeetCode--73.矩阵置零、945.使数组唯一的最小增量

LeetCode–73.矩阵置零LeetCode链接题目:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法**。**先将原先二维数组拷贝为arr[][]循环判断arr中每个位置是否为0:为零则调用func()函数,并传入matrix数组和当前位置的坐标i、jfunc()函数:循环将传入的第i行、第j列置为0代码:class Solution { public void setZeroes(int[][] matrix) {

2020-07-17 21:39:11 104

原创 项目:图书管理系统

图书管理系统开发环境与技术栈Windows/Mac/LinuxMavenServletMySQLJackson项目功能主要业务:管理学校图书信息,记录并管理学生借阅图书信息用户注册(可屏蔽不实现)用户登录、会话管理用户信息管理(可不实现)班级信息管理(可不实现)学生信息管理(可不实现)图书信息管理(可不实现)图书借阅信息管理(可实现部分)项目演示用户登录图书借阅管理借阅信息查询新增借阅信息修改借阅信息删除借阅信息数据库设计数据库表

2020-07-17 19:51:37 2374 1

原创 LeetCode--57.螺旋矩阵

LeetCode–57.螺旋矩阵题目:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。网址链接可以将矩阵看成若千层,首先输出最外层的元素,其欺输出次外层的元素,直到输出最内层的元素。从左到右遍历上侧元素,依次为 (top,left) 到(top,right)。从上到下遍历右侧元素,依次为(top + 1, right)到(bottom, right)。如果left < right且top < bottom, 则从右到左遍历下侧元

2020-07-16 21:35:51 154

原创 JavaDS--计数排序

前面所讲的排序都需要进行比较才能排序------比较类型的排序算法桶排序场景:数据局密集,几种在某个范围中时间复杂度:O(N) , N:表示区间中元素的个数空间复杂度:O(M) ,M: 表示区间中元素种类的个数稳定性:稳定实现代码: public static void countSort(int[] array){ //1.统计元素的范围 ...

2020-04-22 20:23:43 141

空空如也

空空如也

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

TA关注的人

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