- 博客(73)
- 收藏
- 关注
原创 函数式编程
能够看懂公司里的代码大数量下处理集合效率高代码可读性高消灭嵌套地狱 1.2 函数式编程思想 1.2.1 概念面向对象思想需要关注用什么对象完成什么事情。而函数式编程思想就类似于我们数学中的函数。它主要关注的是对数据进行了什么操作。1.2.2 优点代码简洁,开发快速接近自然语言,易于理解易于"并发编程"Lambda是JDK8中一个语法糖。他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。例一我们在创建线程并启动时可
2022-06-24 22:03:02
476
原创 SpringSecurity
Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。一般Web应用的需要进行认证和授权。认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户授权:经过认证后判断当前用户是否有权限进行某个操作而认证和授权也是SpringS
2022-06-24 15:37:04
404
原创 SpringBoot中的坑
记录我开发时遇到的各种坑 1.报错java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 使用springboot和token进行jwt登录的时候报错 原因:网上都说是jdk版本太高了 JAXB API是java EE 的API,因此在java SE 9.0 中不再包含这个 Jar 包。 java 9 中引入了模块的概念,默认情况下,Java SE中将不再包含java EE 的Jar包而在 ...
2022-04-15 22:30:44
1426
原创 SpringBoot前后端分离项目搭建
一,SpringBoot框架的搭建 ①创建项目 Group:项目包的名称 Artifict:工件的名字(项目访问的名称) name:项目的名称 ②依赖的选择 1.Lombok 2.Spring Web 3.MySql Driver 4.MyBatis FrameWork ③目录的选择 选择自行喜欢的目录 ④删除不必要的文件 保留如下 ⑤配置数据库信息 1.使用properties进行配置 2.使用yml进行配置(推荐) spring: #配置数据源..
2022-04-11 22:04:19
3876
原创 java算法常用模板
1.Dijkstra①模板 import java.util.Arrays; import java.util.Scanner; public class dijkstra模板 { static int[] dis = new int[505]; // 距离 static int[] vis = new int[505]; // 标记是否已经访问 static int[][] tab = new int[505][505]; // 邻接矩阵 static int[
2022-04-04 20:47:27
498
原创 深度和广度优先算法题
1.深度优先搜索算法: 深度优先搜索属于图算法的一种,英文缩写为DFS(Depth First Search.)其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。 DFS适合题目:给定初始状态跟目标状态,要求判断从初始状态到目标状态是否有解。 解决必须走到最深处(例如对于树,须走到它的叶子节点)才能得到一个解的问题 通常利用递归实现,所以 每次递归开始的时候要判断是否达到收敛条件,若达到了则得到一个可行解,若...
2022-03-31 20:26:21
1354
原创 回溯算法题
注意体会做选择和撤销选择 题目一: 输入一组不重复的数字,返回它们的全排列 做选择为:向下加入某个节点 取消选择为:递归后这个选择已经做完了,回溯回去上面的节点做右子树的选择,所以要删除以前做的选择 题目二: n皇后问题 做选择为:该位置上放皇后 取消选择为:当前位置不放皇后 ...
2022-03-22 22:57:39
779
原创 图的算法。
1.k算法 在无相图中,用最短的路径使所有的节点连通,从最小的开始加,能形成环的边不加 难点:如何判断是否形成环 将每个节点放入不同的集合里,当连通这两个节点的时候,把to节点放入from节点的集合里面 若目前添加的边已经是同一集合里面的了,则不加这条边 public class Code04_Kruskal { // Union-Find Set public static class UnionFind { private HashMap<Node, Node> fat
2022-03-22 16:00:27
762
原创 蓝桥杯字符串处理问题
1.猜字母 思路1:采用字符串形式 public class 猜字母 { public static void main(String[] args) { StringBuilder a=new StringBuilder("abcdefghijklmnopqrs"); //StringBuilder效率更高 for (int i = 1; i <106 ; i++) { a.append("abcdefghi.
2022-03-21 21:51:45
583
原创 算法小技巧
1.判断闰年的条件 yyyy % 4 == 0 && yyyy % 100 !=0) || yyyy % 400 == 0 2.StringBuffer的使用(判断是否为回文数) StringBuffer //判断日期是否回文 static boolean f(int i) { String string = i +""; StringBuffer sBuffer = new StringBuffer(string); ...
2022-03-21 21:51:31
655
原创 蓝桥杯动态规划问题
1.振兴中华 简单分析:想起爬楼梯,跳格子问题,要知道可能的跳跃路线,我们可以模拟一下,我们必须知道上一步的路线有多少,而到华字有两条路可以走,故可以写成状态转移方程,考虑边界情况,最上和最左只有一种路可以走。 public class 振兴中华 { public static void main(String[] args) { int[][] arr=new int[4][5];//注意是四列五纵 for (int i = 0; i < 5; i.
2022-03-21 21:51:12
342
原创 蓝桥杯日期API问题
Java因为拥有Calendar这个日期API,故只需重点掌握这个api即可 1.世纪末的星期 这里我们通过设置年月份,然后判断是否是星期天,如果是则直接输出答案 public class 世纪末的星期 { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); for (int year = 1999; year <10000 ; ye
2022-03-21 21:23:44
765
原创 第十二届蓝桥杯javaB组刷题day2
1.直线 我们思路: 暴力解法,将所有可能的情况列举出来,故需要两个坐标的横纵坐标,便需要四个for循环来进行遍历,出现问题: ①需要排除斜率为0的情况,后面再单独进行相加 ②因为需要set来加入斜率,而一条斜线y=kx+b,包括k和b,set只能包含key,所以我们需要定义一个直线类进行添加 ★使用HashSet存储自定义对象需要重写equals方法和HashSet方法 import java.util.HashSet; public class Main { ...
2022-03-21 19:56:12
798
原创 ssm踩过的坑
1.Caused by: com.mysql.cj.exceptions.WrongArgumentException 启动服务器后抛出上面异常,页面出现500 原因:url有问题 jdbc.properties中的url使用了转义字符 解决办法: 将其换成" & "即可 2.com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure 启动服务器后抛出以上问题,页面出现500 原因:
2022-03-20 23:24:29
1123
原创 滑动窗口(220320)
1. 代码实现: class Solution { public int lengthOfLongestSubstring(String s) { //1.暴力递归(x) //2.set(x) //3.双指针(√)使用滑动窗口进行解题 if(s.length() == 0){ return 0; } //定义左指针 int left = 0; .
2022-03-20 12:04:05
292
原创 220319(位运算,广搜)
1.位运算中的技巧: ★num = (num - 1) & num 题目一: 利用循环,定义一个计数器,将这个整数变为0即可 c语言代码实现: #include<stdio.h> int main() { int num = 9; int count = 0; while (num != 0) { num = (num - 1) & num; count++; } printf("%d\n", count); return 0; } .
2022-03-19 21:58:22
1019
原创 220318(滑动窗口,广深搜)
1.滑动窗口: 2.广搜深搜: 暴力递归法: 注意:下面会出现栈溢出的问题 public int[][] floodFill(int[][] image, int sr, int sc, int newColor) { //注意点 //因为是递归,故在使用时应该注意,下面进行判断的image[sc][sc]是会改变的 //对上面像素进行判断递归 if(image[sc][sc] == image[sc -.
2022-03-18 22:39:04
706
原创 220317
1.注意链表临界条件的判断: 本题很任意想到使用快慢指针进行遍历。 但在书写代码时: class Solution { public ListNode middleNode(ListNode head) { ListNode fast = head; ListNode slow = head; while(fast != null && fast.next != null){ slow = slow.
2022-03-17 22:58:33
327
原创 220315
1.双指针题 初始暴力解法: 使用了两个for循环进行判断,超时了 class Solution { public int[] twoSum(int[] numbers, int target) { int[] arr = new int[2]; for(int p = 0;p < numbers.length;p++){ for(int q = p + 1;q < numbers.length;q++){ .
2022-03-15 22:57:14
251
原创 220314
1.快慢指针 主要用于链表遍历节点的功能 class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { //要想能够返回头节点,需要给head节点添加一个头节点,便于返回结果 ListNode dummyNode = new ListNode(0); dummyNode.next = head; //定义快慢指针 Lis
2022-03-14 22:57:48
588
原创 220311(二叉树)
1.二叉树 二叉树常用套路 ★要有大局观的思维,把头节点设为x,然后再想想左子树和左子树要达到什么才能满足条件,再判断左右子树递归后需要返回什么给你 ①判断是否是平衡二叉树 首先:设头节点为x,要想该树为平衡二叉树,左子树必须是平衡二叉树,右子树也必须是平衡二叉树,且左子树的高度-右子树的高度不能大于1 然后:我们想想那这样需要什么才能形成递归,头节点需要知道左右节点什么 a)知道左右子树是否为平衡二叉树 b)知道左右子树的高度 public clas...
2022-03-11 16:56:53
654
原创 220310(链表)
1.链表: 在链表结构中,简单题体现算法的题不多,几乎都是使用指针的遍历 链表技巧:快慢指针 在实际应用链表中,往往需要获取链表的中间节点,这时候我们就可以定义一对快慢指针,慢指针走两步时,快指针走两步,当快指针遍历完的时候,慢指针就来到了中间节点。 但特殊题目时,我们需要对快慢指针进行定制,比如慢指针要来到中间节点的前一个,我们需要做一些调整。 链表技巧:哈希表 例题1: 2.二叉树 递归求前中后序遍历 ①先写出改二叉树的递归数 ②只...
2022-03-10 16:46:25
663
原创 220309
1.异或运算 ★异或交换 arr[i] = arr[i] ^arr[j] arr[j] = arr[i] ^arr[j] arr[i] = arr[i] ^arr[j] 原理: a^0=a a^a=0 异或运算满足结合律和交换律,故 arr[i] = arr[i] ^arr[j] arr[i]=arr[i] ^arr[j] arr[j] = arr[j] arr[j] = arr[i] ^arr[j] arr[i] =arr[i] ^arr[j] ...
2022-03-09 11:47:37
525
原创 SpringBoot核心笔记
一,配置文件 1.properties 同以前的properties用法 2.yaml ①简介: YAML是一个可读性高,用来表达数据序列的格式。非常适合用来做以数据为中心的配置文件 ②基本语法: key: value;kv之间有空格 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab,只允许空格 缩进的空格数不重要,只要相同层级的元素左对齐即可 '#'表示注释 字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义 ③数据类型: 字面量:单个的、不可再分的值.
2022-03-08 21:49:29
1350
原创 220307
1.存在重复元素 错误思路: 使用两个for进行暴力查找,然而超时了 ★思路1:使用set 因为set具有不重复性,故我们可以利用这个性质 class Solution { public boolean containsDuplicate(int[] nums) { Set<Integer> set = new HashSet<Integer>(); for (int x : nums) { if (!s
2022-03-07 11:15:35
187
原创 SSM整合
一,环境配置 1.创建Maven工程 2.添加基本依赖 <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId
2022-03-06 15:47:27
496
原创 220305(动态规划)
1.动态规划 动态规划的思想类似于数学归纳法,当知道所有 i<n 的情况时,我们可以通过某种算法算出 i=n 的情况。想想能不能找出n-1和n的规律 ★括号生成 本题最核心的思想是,考虑i=n时相比n-1组括号增加的那一组括号的位置。 思路: 当我们清楚所有 i<n 时括号的可能生成排列后,对与 i=n 的情况,我们考虑整个括号排列中最左边的括号。 它一定是一个左括号,那么它可以和它对应的右括号组成一组完整的括号 "( )",我们认为这一组是相比 n-1 增加进来的括号。 ...
2022-03-05 09:38:57
124
原创 SpringBoot基础笔记
一,快速入门 1.创建maven工程(正常创建即可) 2.引入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </paren
2022-03-04 22:02:26
1120
原创 web遇到的bug
1.部署服务器启动 工件问题 2.ajax提交表单一直为get js错误 return flase 3.jdbc.properties错误 url和 usename 4.过滤器问题 要重写init 5.jdbc模板问题 需要抛出异常 return null 6.BaseServlet问题 需要加上/xxx/* ...
2022-03-04 20:58:09
771
原创 220303
1.链表: ⚪两数相加 将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 00,比如 987 + 23 = 987 + 023 = 1010 每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值 如果两个链表全部遍历完毕后,进位值为 11,则在新链表最前方添加节点 11 链表小技巧: 对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点head。使用预先指针的目的在于链表初始化时无可用节点值,而.
2022-03-03 11:57:17
172
原创 220302(摩尔投票法)
1.摩尔投票法: 应用理解: 核心就是对拼消耗。 玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。 那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。 最后能剩下的必定是自己人。 应用实例: ⚪多数元素 思路解析: 候选人(cand_num)初始化为nums[0],票数count初
2022-03-02 14:43:57
163
原创 220301
1.字符串反转 交换有两种方式: ①一种就是常见的交换数值: inttmp=s[i]; s[i]=s[j]; s[j]=tmp; ②一种就是通过位运算: s[i] ^= s[j]; s[j] ^= s[i]; s[i] ^= s[j]; 法一:双指针法 我们可以通过两个指针,一个指向数组头,一个指向数组尾进行比较遍历: void reverseString(char* s, int sSize){ int left = 0; int right =...
2022-03-01 11:05:09
135
原创 web开发技巧
一,常用坐标导入 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!
2022-02-28 21:45:48
453
原创 马踏棋盘算法
一,马踏棋盘算法介绍和游戏演示: 1) 马踏棋盘算法也被称为骑士周游问题 2) 将马随机放在国际象棋的 8×8 棋盘 Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求 每个方格只进入一次,走遍棋盘上全部 64 个方格 3) 游戏演示: http://www.4399.com/flash/146267_2.htm 二,马踏棋盘游戏代码实现: 1) 马踏棋盘问题(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用。 2) 如果使用回溯(就是深度优先搜索)来解
2022-02-23 23:00:49
2345
原创 弗洛伊德算法
一,弗洛伊德算法的介绍: 1) 和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法 名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名 2) 弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径 3) 迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。 4) 弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点 的最短路径;弗洛伊德算法
2022-02-23 22:53:25
2595
原创 迪杰斯特拉算法
一,迪杰斯特拉算法介绍: 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以 起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 迪杰斯特拉算法的步骤: 1) 设置出发顶点为 v,顶点集合 V{v1,v2,vi...},v 到 V 中各顶点的距离构成距离集合 Dis,Dis{d1,d2,di...},Dis 集合记录着 v 到图中各顶点的距离(到自身可以看作 0,v 到 vi 距离对应为 di) 2) 从 Dis 中选择值最小的
2022-02-23 22:47:52
5450
原创 克鲁斯卡尔算法
一,克鲁斯卡尔算法的介绍: 1) 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。 2) 基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路 3) 具体做法:首先构造一个只含 n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森 林中不产生回路,直至森林变成一棵树为止 二,克鲁斯卡尔算法的应用实例: ▲公交站问题: 图解思路分析: 算法分析: 如何判断是否构成回路: 具体代码...
2022-02-23 22:22:17
907
原创 普利姆算法
一,普利姆算法的介绍 普利姆(Prim)算法求最小生成树,也就是在包含 n 个顶点的连通图中,找出只有(n-1)条边包含所有 n 个顶点的 连通子图,也就是所谓的极小连通子图 普利姆的算法如下: 1) 设 G=(V,E)是连通网,T=(U,D)是最小生成树,V,U 是顶点集合,E,D 是边的集合 2) 若从顶点 u 开始构造最小生成树,则从集合 V 中取出顶点 u 放入集合 U 中,标记顶点 v 的 visited[u]=1 3) 若集合 U 中顶点 ui 与集合 V-U 中的顶点 vj 之间存在边
2022-02-23 21:53:40
2142
原创 贪心算法分析
一,贪心算法介绍: 1) 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而 希望能够导致结果是最好或者最优的算法 2) 贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果 二,贪心算法的应用实例: ▲集合覆盖问题: 思路分析: 使用贪婪算法,效率高: 1) 目前并没有算法可以快速计算得到准备的值, 使用贪婪算法,则可以得到非常接近的解,并且效率高。选择 策略上,因为需要覆盖全部地区的最小集合:
2022-02-23 21:45:23
935
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅