自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指Offer(第二版):67. 把字符串转换成整数 59 - II. 队列的最大值 60. n个骰子的点数

/**解题思路:首先是弄清规则 ①、首先看首位是不是'+''-''数组',如果不是就直接返回0 ②、满足①后,就找后面连接的数字,如果后面紧跟的不是数组,也是返回0,如果后面得到的值大于或者小于int的最大值,则根据首位正负来返回值。 */class Solution { public int strToInt(String str) { //首先我们先去除前导和尾随的空格 String str1 = str.trim.

2021-11-21 15:30:49 255

原创 SpringBoot:SpringBoot启动过程原理 ---- 25

ssssSpringBoot框架的原理是很复杂的,但又是简单的,因为他不是最底层的框架,而是由不同的框架组成的,主要分为以下几个部分:ssss①. Spring原理【Spring注解】、ssss②. SpringMVC原理ssss③. 自动配置原理. ssss④. SpringBoot(启动)原理ssss⑤. 第三方框架 … SpringBoot启动过程 ● 创建 SpringApplication SpringBoot启动过程ssss我们以 “deBug” 方式来进行分析:sdsdsdsad

2021-11-20 23:31:38 513

原创 SpringBoot:自定义starter (大致了解了下)---- 24

starter启动原理 starter启动原理ssssstarter-pom引入 autoconfigurer 包 (我不知道为什么没有创建成功,所以把理解的东西先总结下来)sdsddsdsdsdsdsdsdsssssdssss 【注1】:我们以"Druid"为例进行分析,首先我们要引入其starter,它是Druid的启动器,而启动器内写了响应的自动配置程序DruidDataSourceAutoConfigure.sddsdsdsddsdsdsdsdsdsdssssssddsdsdsdds..

2021-11-20 21:19:06 346

原创 SpringBoot:高级特性 Profile ---- 23

ssssProfile的功能:为了方便多环境适配,springboot简化了profile功能。(适用于不同的环境)https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.profiles application-profile功能 @Profile条件装配功能 profile分组 外部化配置 配置文件查找位置 配置文件加载顺序: 总结:指定环境优先,外部优先,后面的可以覆盖前面的同名配置

2021-11-20 18:13:09 559

原创 SpringBoot:指标监控Actuator (简单使用,没深入内容)---- 22

ssss关于指标监控SpringBoot Actuator,我们以SpringBoot的官方文档为准。https://docs.spring.io/spring-boot/docs/2.5.7/reference/html/ SpringBoot Actuator 简介 1.x与2.x的不同 如何使用? 可视化: Actuator Endpoint 最常使用的端点 管理Endpoints 定制 Endpoint SpringBoot Actuator 简介ssss未来每一个微服务在云上部署以

2021-11-20 13:58:53 895

原创 剑指Offer(第二版):43. 1~n 整数中 1 出现的次数 19. 正则表达式匹配

sdassddsdsssdsas/**解题思路:找规律的题,首先我们要找每一位出现1的个数,然后考虑每一位'0'~'9'不同时,分别对应的1的个数的计算公式,然后遍历所有位,这道题可以看题解,讲解的很好。我们令当前位为cur,然后低于他的位为low,高于他的位为high,dight为cur对应的10^cur 当cur==0, 1的个数为 high*dight 当cur==1, 1的个数为high*dight+low+1 当cur=2~9,1的个数为(high+1)*di

2021-11-19 22:18:55 586

原创 SpringBoot:单元测试 ---- 21

ssss什么是Redis? JUnit5 的变化 JUnit5常用注解 断言(assertions) 简单断言 数组断言 组合断言 异常断言 超时断言 快速失败 前置条件(assumptions) 嵌套测试 嵌套测试 迁移指南 JUnit5 的变化ssssSpring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库ssss作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。ssds

2021-11-19 18:27:10 550

原创 SpringBoot:NoSQL - Redis (很浅,若想学习Redis,请看其专栏)---- 20

ssss什么是Redis?redis中文官方网站 Redis自动配置 Redis自动配置ssss①、引入redis场景 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </d

2021-11-19 15:31:48 1175

原创 SpringBoot:MyBatis增强版:MyBatis-Plus ---- 19

ssss什么是MyBatis-Plus?MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。(建议安装 MybatisX 插件)ssssmybatis plus 官网:https://baomidou.com/ssss引入插件:MybatisX,自动映射mapper的跳转, 快速入门(对应官网指南的快速入门) 测试模拟 自动配置分析 快速入门(对应官网指南的快速入门)ssss①、引入 mybatis-

2021-11-18 22:19:30 960 2

原创 SpringBoot:整合MyBatis ---- 18

ssss如果想学好一门技术,当然要去看官方文档。myBatis-starter 配置分析是:myBatis官方文档 整合MyBatis myBatis-starter 配置分析 纯配置模式的myBatis使用: 整合MyBatis myBatis-starter 配置分析sdsdsss引入starter: <dependency> <groupId>org.mybatis.spring.boot</groupId> &l

2021-11-18 18:18:18 608

原创 SpringBoot:数据访问之使用Druid数据源---- 17

ssss如果想学好一门技术,当然要去看官方文档。Druid数据源的官方文档是:Druid数据源官方文档 整合第三方技术的两种方式: 自定义方式引入Druid: starter方式引入Druid: 整合第三方技术的两种方式:sdsdsdsdsdssss①、 自定义 ssdsdsdsss②、 找starter 自定义方式引入Druid:ssss①、引入Druid依赖ssss②、 往容器中添加Druid 数据库连接池@Configurationpublic class MyDataSourc

2021-11-18 12:31:12 728

原创 剑指Offer(第二版):49. 丑数 (动态规划) 14- II(I). 剪绳子 II(贪心算法) 33. 二叉搜索树的后序遍历序列(后序遍历的使用、递归)

dsasddsasddssdsdas/**解题思路:咋说呢?这种题就是看解析,首先动态规划,dp[n]代表第n+1个丑数 具体怎么想,看别人总结,已放到CSDN */class Solution { public int nthUglyNumber(int n) { int[] dp = new int[n]; //边界值 dp[0] =1; //三个指针指向0,分别对应着前一个丑数的下标

2021-11-18 08:42:48 403

原创 SpringBoot:数据访问之数据库场景的自动配置原理---- 17

数据源的自动配置 导入JDBC场景 自动配置原理 修改配置项\测试代码 数据源的自动配置 导入JDBC场景sdsds引入 spring-boot-starter-data-jdbc 场景<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dep...

2021-11-17 22:07:09 1003

原创 剑指Offer(第二版):51. 数组中的逆序对(归并排序) 45. 把数组排成最小的数(快速排序思想)

/**解题思路1:暴力搜素,但是会超时间 */// class Solution {// public int reversePairs(int[] nums) {// //边界条件// int len = nums.length;// if(len == 0)// return 0;// //考虑动态规划// int[] dp = new int[len];// .

2021-11-17 12:35:22 299

原创 SpringBoot:嵌入式Servlet容器(Tomcat, Jetty, or Undertow服务器)原理浅析---- 16

ssss我们依旧以SpringBoot官网的官方文档为准学习。ssdsdsdsdsdssSpring Boot Features ==> 7.4.3. The ServletWebServerApplicationContext 文档介绍 原理 文档介绍sdsdsUnder the hood, Spring Boot uses a different type of ApplicationContext for embedded servlet container support. The

2021-11-16 23:22:31 1353

原创 SpringBoot: Web原生组件注入(Servlet、Filter、Listener) ---- 15

ssss我们依旧以SpringBoot官网的官方文档为准学习。Spring Boot Features ==> 7.Developing Web Applications ==> 7.4 Embedded Servlet Container Support 使用Servlet API 1 @WebServlet + @ServletComponentScan 2 @WebFilter + @ServletComponentScan @WebListener + @ServletCompone

2021-11-16 19:23:01 758

原创 剑指Offer(第二版):59 - I. 滑动窗口的最大值 37. 序列化二叉树

dsadadsss/**解题思路: 1、遍历给定数组中的元素,如果队列不为空且当前考察元素大于等于队尾元素,则将队尾元素移除。直到,队列为空或当前考察元素小于新的队尾元素; 2、当队首元素的下标小于滑动窗口左侧边界left时,表示队首元素已经不再滑动窗口内,因此将其从队首移除。 3、由于数组下标从0开始,因此当窗口右边界right+1大于等于窗口大小k时,意味着窗口形成。此时,队首元素就是该窗口内的最大值。 重点:单调队列!! queue是用来做什么的,存储“最大值的

2021-11-16 14:37:08 703

原创 SpringBoot: 异常处理机制原理 ---- 14

错误处理的默认规则 定制错误处理逻辑 异常处理自动配置原理 异常处理步骤流程 错误处理的默认规则ssss● 默认情况下,Spring Boot提供/error处理所有错误的映射。ssss● 对于机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。对于浏览器客户端,响应一个“ whitelabel”错误视图,以HTML格式呈现相同的数据ssdsddsdsdsdsdsdsdssdssdsssss● 要对其进行自定义,添加View解析为errorssss● 要完全替换..

2021-11-15 16:06:00 1012

原创 剑指Offer(第二版): 35. 复杂链表的复制 47. 礼物的最大价值 56 - II. 数组中数字出现的次数 II 16. 数值的整数次方

/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; }}*//**解题思想1:哈希表思想,用哈希表来存储一个映射,原节点----->拷贝节点 */cl.

2021-11-15 08:55:17 620

原创 剑指Offer(第二版): 31. 栈的压入、弹出序列 66. 构建乘积数组 64. 求1+2+…+n 32 - III. 从上到下打印二叉树 III

/**解题思路:其实就是栈的模拟过程 */class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { //模拟栈 Stack<Integer> stack = new Stack<>(); //遍历数组 int i=0; for(int x : pushed){ .

2021-11-14 15:03:40 908 2

原创 剑指Offer(第二版):34. 二叉树中和为某一值的路径 56 - I. 数组中数字出现的次数 63. 股票的最大利润 32 - I. 从上到下打印二叉树

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .

2021-11-14 14:19:00 620

原创 SpringBoot: 文件上传原理 ---- 13

文件上传 文件上传实现 自动配置原理 文件上传原理 文件上传ssss其实文件上传原理本质和前面的差不多,只是有一些细节上的处理,因此我们简单分析即可。 文件上传实现ssdsdsssdssss上传功能固定写法:dsdsdsdssssdssss文件上传代码: /** * MultipartFile 自动封装上传过来的文件 * @param email * @param username * @param headerImg * @par..

2021-11-12 20:44:25 1235

原创 SpringBoot:拦截器的实现原理 ---- 12

拦截器的实现原理 自定义拦截器的实现步骤 拦截器原理 拦截器的实现原理ssss对于拦截器的实现原理,其实是非常简单的,在前几篇文章我们已经分析了,请求映射原理最核心的方法是 doDispatch(request, response),因此我们通过 deBug 方式在doDispatch处打断点学习具体的参数处理是如何工作的,其中的核心方式有获取处理器执行器,映射器,执行目标方法,页面渲染等。 在这其中,其实还穿插着一些拦截器的相关方法执行。 自定义拦截器的实现步骤ssdsadssdasdsds..

2021-11-12 17:46:20 2778 2

原创 剑指Offer(第二版): 46. 把数字翻译成字符串(动态规划) 48. 最长不含重复字符的子字符串 26. 树的子结构 07. 重建二叉树 36. 二叉搜索树与双向链表

/**解题思路:动态规划 1、首先考虑转移方程 if xi + xi-1 不能组成一个数,则dp[i] = dp[i-1] if xi + xi-1 能责成一个数,则dp[i] = dp[i-1] + dp[i-2] 2、考虑边界方程 首先 dp[1] =1 , 而 dp[2] = 1+1 =2 ,则 反推可以知道 dp[0] = 1; 3、那怎么知道xi和xi-1能不能组成一个数呢,因为ASCII是 0~25,因此01,.

2021-11-11 23:42:51 608

原创 SpringBoot: 浅析视图渲染的原理 ----11

sss我们以debug如下方法来进行分析,通过客户端 http://localhost:8080/ 进行登录请求:ssdsdsdsdsdsdsdsdsdsdsdsdssdsdsdsdssdsss 视图解析 浅析视图解析原理流程 解析 render(mv, request, response) 方法:①、我们如何根据方法的String返回值得到 View 对象【定义页面的渲染逻辑】呢? 视图解析sss视图的处理方式我们大致分为三种,如下图:ssdsdsdsdssdsdsdsdsdsddsads

2021-11-11 20:01:12 1300

原创 剑指Offer(第二版): 38. 字符串的排列 13. 机器人的运动范围 12. 矩阵中的路径

dddsdsasdas/** 感觉用回溯法比较好,但是要注意, */class Solution { //返回的字符串 Set<String> str_set = new HashSet<>(); public String[] permutation(String s) { //字符串长度 int len = s.length(); //然后通过数组标志每个字母用与不用

2021-11-11 11:59:26 342

原创 SpringBoot: 用于视图渲染的第三方模板引擎 ----10

模板引擎 - thymeleaf thymeleaf简介 thymeleaf使用 thymeleaf开发示例: 基本语法 构建后台管理系统 sdas 模板引擎 - thymeleafsss视图解析:SpringBoot默认不支持 JSP,需要引入第三方模板引擎技术实现页面渲染。我们可以通过springboot文档找到了thymelf模本,因此本次我们以thymelsf为模范进行解析。 thymeleaf简介sssThymeleaf is a modern server-side Java t..

2021-11-10 20:15:11 496

原创 剑指Offer(第二版):55 - II. 平衡二叉树 54. 二叉搜索树的第k大节点 39. 数组中出现次数超过一半的数字 15.二进制中1的个数 28. 对称的二叉树 65. 不用加减乘除做加法

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isBalanced(TreeNode root) { if(root .

2021-11-10 15:38:10 4563

原创 剑指Offer(第二版): 61. 扑克牌中的顺子 32 - II. 从上到下打印二叉树 II 55 - I. 二叉树的深度 21. 调整数组顺序使奇数位于偶数前面 68 - II. 二叉树的最近公共

dasasd/**解题思路: 首先我们将数组排序,然后我们遍历数组,记录0的个数, 1如果相邻的两个差值 <=0的个数值,则true,如果>则返回false 2如果相邻的值相等,则一定不行 */class Solution { public boolean isStraight(int[] nums) { Arrays.sort(nums); int zeroCnt = 0 ; int d

2021-11-09 22:04:30 4091

原创 SpringBoot:图解数据响应与内容协商原理 ---- 9

sss当通过浏览器或者PostMan模拟请求时, 我们首先是执行方法(获取解析参数,执行方法体),然后开始处理返回值,也就是我们今天的主题,响应处理(数据响应与内容协商)。其逻辑都在一个方法中:this.returnValueHandlers.handleReturnValue(returnValue, this.getReturnValueType(returnValue), mavContainer, webRequest); , 这是我们今天分析的主题。 数据响应与内容协商 响应JSON JSO

2021-11-09 12:17:07 775 4

原创 剑指Offer(第二版):30. 包含min函数的栈(链表) 57 - II. 和为s的连续正数序列(滑动窗口) 58 - I. 翻转单词顺序 53 - I. 在排序数组中查找数字 I

/**解题思路:首先我们想到栈是"先入后出",因此我们通过链表模拟栈时,后放入的节点反而做为链表头,这样我们做相关操作时只要链表头的节点就可以了,而对于取最小值,我们只需要再定义Node时多一个属性即可。 */class MinStack { private class Node { int val; int min; Node next; private Node(int val , int min , Node ne.

2021-11-09 00:09:28 461

原创 SpringBoot:参数处理原理 (自定义参数,主要是参数转换)---- 8.4

sss继 《SpringBoot:参数处理原理 ---- 8.2》和SpringBoot:参数处理原理 (复杂参数)---- 8.3(图解)这两篇文章,我们分析一下自定义参数在请求过程中的不同的细节。 自定义对象参数: POJO封装过程 转换过程 自定义转换器 自定义对象参数:sss可以自动类型转换与格式化,可以级联封装:/** * 姓名: <input name="userName"/> <br/> * 年龄: <input name="age"

2021-11-08 10:59:15 1243

原创 剑指Offer(第二版):50. 第一个只出现一次的字符 57. 和为s的两个数字 52. 两个链表的第一个公共节点 18. 删除链表的节点

dasdasdas//最麻烦的双层遍class Solution { public char firstUniqChar(String s) { int[] target = new int[26]; for(int i=0 ; i<s.length() ; i++){ target[s.charAt(i) - 'a']++; } for(int i=0 ; i<s.length()

2021-11-07 09:47:10 158

原创 SpringBoot:参数处理原理 (复杂参数)---- 8.3(图解)

sss继 《SpringBoot:参数处理原理 ---- 8.2》这篇文章,我们继续分析复杂参数的请求原理,其实和上篇文章的过程差不多,也就是变相的分析mv返回后,我们怎么处理。 复杂参数 例子: 为什么Map,Model参数解析后存放位置是相同的?(是) Model 和 View解析后的参数和转发地址是怎么封装到mav中,并返回的呢? 处理完的数据(也就是mav中的数据)怎么办? 复杂参数sssMap、Model(map、model里面的数据会被放在request的请求域 request.s

2021-11-06 19:14:20 798

原创 剑指Offer(第二版):27. 二叉树的镜像 53 - II. 0~n-1中缺失的数字

dsadas/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ //dfsclass Solution { public TreeNode mirrorTree(TreeNode root) {

2021-11-06 08:49:32 166

原创 剑指Offer(第二版):58 - II. 左旋转字符串 06. 从尾到头打印链表 40. 最小的k个数 05. 替换空格 25. 合并两个排序的链表 17. 打印从1到最大的n位数

dsadsd//第一种:substringclass Solution { public String reverseLeftWords(String s, int n) { return s.substring(n,s.length())+s.substring(0,n); }}//第二种:StringBuilderclass Solution { public String reverseLeftWords(String s, int n)

2021-11-05 22:58:22 182

原创 SpringBoot:参数处理原理图解 ---- 8.2

sss读前必看:通过Web开发相关原理那篇文章我们知道,请求映射原理是:DispatcherServlet调用父类中的doGet和doPost,而这两个方法的核心方法是processRequest(request, response) ,而这个方法的核心方法是一个抽象方法doService(request, response),并未做具体实现,而DispatcherServlet实现了这个方法,并且其中最核心的方法是 doDispatch(request, response),因此我们通过deBug方式在d

2021-11-05 16:22:36 889 2

原创 剑指Offer(第二版):24. 反转链表(迭代,递归) 42. 连续子数组的最大和 (动态规划) 22. 链表中倒数第k个节点(双指针) 29. 顺时针打印矩阵 62. 圆圈中最后剩下的数字

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ //迭代class Solution { public ListNode reverseList(ListNode head) { ListNode pre = null , c.

2021-11-05 09:49:19 148

原创 剑指Offer(第二版): 09. 用两个栈实现队列 03. 数组中重复的数字 1. 斐波那契数列 04. 二维数组中的查找 10- II. 青蛙跳台阶问题 11. 旋转数组的最小数字

dasdasadclass CQueue { Deque<Integer> stack1; Deque<Integer> stack2; public CQueue() { stack1 = new LinkedList<>(); stack2 = new LinkedList<>(); } public void appendTail(int value) {

2021-11-04 08:03:43 215

原创 SpringBoot:Web 开发相关原理 ---- 7

静态资源配置原理 静态资源处理规则 静态资源配置原理 静态资源处理规则sssSpringBoot启动自动加载 xxxAutoConfiguration 自动配置类sssSpringMVC功能的自动配置类大都集中在 ==》 WebMvcAutoConfiguration ,生效@Configuration( proxyBeanMethods = false)@ConditionalOnWebApplication( type = Type.SERVLET)@Conditi..

2021-11-03 16:21:47 444

空空如也

空空如也

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

TA关注的人

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