- 博客(68)
- 收藏
- 关注
原创 Java八股文总结四
集合概念集合就是一个放数据的容器,准确的说是放数据对象引用的容器集合类存放的都是对象的引用,而不是对象的本身集合类型主要有3种:set(集)、list(列表)和map(映射)。1、集合类这种框架是高性能的。对基本类集(动态数组,链接表,树和散列表)的实现是高效率的。一般人很少去改动这些已经很成熟并且高效的APl;2、集合类允许不同类型的集合以相同的方式和高度互操作方式工作;3、集合类容易扩展和修改,可以很容易地稍加改造就能满足自己的数据结构需求。
2024-09-09 14:45:08
1113
原创 Java八股文总结三
元空间是一块本地内存,它用于存放类的元数据,例如类名、访问修饰符、字段、方法、注解等信息。这些信息在程序运行期间保持不变,存储在元空间中可以提高程序的运行效率。元空间由Java虚拟机主动管理,可以将其看作是一块特殊的堆内存。详细参考:JVM--方法区&元空间_元空间和方法区的区别-优快云博客在Java中,垃圾回收(Garbage Collection,简称GC),是自动管理内存的机制。它负责检测不再使用的对象,并释放它们所占用的内存,以供其他对象使用。
2024-09-04 18:33:28
673
原创 Java八股文总结二
Java的异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。就是编译器要求你必须处置的异常。不知道你编程的时候有没有遇到过,你写的某段代码,编译器要求你必须要对这段代码try...catch,或者throws exception,如果你遇见过,没错,这就是检查异常,也就是说,你代码还没运行呢,编译器就会检查你的代码,会不会出现异常,要求你对可能出现的异常必须做出相应的处理。
2024-09-03 13:49:34
808
原创 Java八股文总结一
字节码是Java等编程语言源代码经过编译器编译后生成的一种中间代码格式,它包含了程序的所有信息,但比机器码更抽象,不能直接被计算机硬件执行。相反,字节码需要在Java虚拟机(JVM)或其他类似的虚拟机上执行,由虚拟机将其转换成特定平台的机器码后再执行。采用字节码的好处:Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可以移植的特点。
2024-09-02 19:09:58
1244
原创 【力扣】重排链表
给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
2024-07-16 23:06:56
320
原创 【力扣】数组中的第K个最大元素
l, left](该部分小于基准元素key)、[left + 1, right - 1](等于基准元素key)、[right, r](大于基准元素key)。3、计算每部分所包含的元素个数,分别为a 、b = right - left - 1、 c = r - right + 1;请注意,你需要找的是数组排序后的第。你必须设计并实现时间复杂度为。个最大的元素,而不是第。1、随机选择基准元素。
2024-07-05 16:42:37
402
原创 【力扣】完全平方数
是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。我们可以将该问题转化为完全背包问题。的完全平方数的最少数量。的完全平方数的最少数量。我们可以根据小于等于。
2024-06-25 00:00:46
639
原创 完全背包(模板)
你有一个背包,最多能容纳的体积是V。现在有n种物品,每种物品有任意多个,第i种物品的体积为vi ,价值为wi。(1)求这个背包至多能装多大价值的物品?(2)若背包恰好装满,求至多能装多大价值的物品?第一行两个整数n和V,表示物品个数和背包体积。接下来n行,每行两个数vi和wi,表示第i种物品的体积和价值。输出有两行,第一行输出第一问的答案,第二行输出第二问的答案,如果无解请输出0。
2024-06-21 18:39:37
986
原创 【力扣】目标和
给你一个非负整数数组nums和一个整数target。向数组中的每个整数前添加'+'或'-',然后串联起所有整数,可以构造一个2'+'1'-'"+2-1"返回可以通过上述方法构造的、运算结果等于target的不同的数目。5一共有 5 种方法让最终目标和为 3。1。
2024-06-14 13:34:03
1029
原创 01背包问题(模板)
你有一个背包,最多能容纳的体积是V。现在有n个物品,第i个物品的体积为vi,价值为wi。(1)求这个背包至多能装多大价值的物品?(2)若背包,求至多能装多大价值的物品?第一行两个整数n和V,表示物品个数和背包体积。接下来n行,每行两个数vi和wi,表示第i个物品的体积和价值。输出有两行,第一行输出第一问的答案,第二行输出第二问的答案,如果无解请输出0。
2024-06-12 15:49:55
806
原创 【力扣】 两个字符串的最小ASCII删除和
给定两个字符串s1 和 s2,返回使两个字符串相等所需删除字符的 ASCII 值的最小和 。示例 1:输入: s1 = "sea", s2 = "eat"输出: 231解释: 在 "sea" 中删除 "s" 并将 "s" 的值(115)加入总和。在 "eat" 中删除 "t" 并将 116 加入总和。结束时,两个字符串相等,115 + 116 = 231 就是符合条件的最小和。
2024-06-08 23:46:04
1054
原创 【力扣】正则表达式匹配
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
2024-06-06 13:41:10
531
原创 【力扣】通配符匹配
给你一个输入字符串 (s) 和一个字符模式 (p) ,请你实现一个支持 '?' 和 '*' 匹配规则的通配符匹配: '?' 可以匹配任何单个字符。 '*' 可以匹配任意字符序列(包括空字符序列)。判定匹配成功的充要条件是:字符模式必须能够 完全匹配 输入字符串(而不是部分匹配)。
2024-06-05 15:08:41
645
1
原创 【力扣】矩阵中的最长递增路径
1、先求出以矩阵中的每个单元格为起点的最长递增路径题目中说,对于每个单元格,你可以往上,下,左,右四个方向移动。那么以一个单元格为起点的最长递增路径就是:从该单元格往上,下,左,右四个方向走的四条递增路径中的最大值(即最长的一条递增路径)。2、在求出的所有最长递增路径中找最大值因为题目是求矩阵中的最长递增路径,所以要在求出的所有最长递增路径中找最大值。3、使用“记忆化搜索”(递归+“备忘录” )来解决该题。
2024-06-04 13:19:42
486
原创 【力扣】不同的子序列
如下所示, 有 5 种可以从 s 中得到 "bag" 的方案。出现的个数,结果需要对 109 + 7 取模。为了简化初始化,我们可以给dp表增加一行、一列(如下所示, 有 3 种可以从 s 中得到。「从上往下」填每一行,每一行「从左往右」。本题属于动态规划类型的。根据「状态表示」,返回。
2024-06-03 19:28:53
359
原创 【力扣】不相交的线
在两条独⽴的⽔平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制⼀些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满⾜满⾜:• nums1[i] == nums2[j]• 且绘制的直线不与任何其他连线(⾮⽔平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于⼀条连线。以这种⽅法绘制线条,并返回可以绘制的最⼤连线数。
2024-06-02 15:05:38
253
原创 【力扣】最长递增子序列
递归含义:dfs递归函数的作用,给他⼀个数 i ,返回以 i 位置为起点的最长递增子序列的长度;函数体:遍历 i 后面的所有位置,看看谁能加到 i 这个元素的后面(统计所有情况下的最大值。递归出口:因为我们是判断之后再进入递归的,因此没有出口。加上⼀个备忘录(本题只需一个一维数组,如在递归返回前,用memo[i]来存放以 i 位置为起点的最长递增子序列的长度每次进入递归的时候,去备忘录里面看看;每次返回的时候,将结果加入到备忘录里面。递归含义 -> 状态表示;
2024-06-02 14:13:55
508
原创 【力扣】最长公共子序列
给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。
2024-06-01 14:57:18
1280
原创 利用“记忆化搜索“解斐波那契数
如果有一个“备忘录”,我们每次向上返回结果之前,把结果存在“备忘录”一份,下次递归的时候,先看看备忘录,是否有我们需要的值,有的话,直接从备忘录里面取值,就不用再往下递归,便不会有重复计算。2、带备忘录的递归、记忆化搜索和动态规划其实都是一回事(本质相同:对解法的优化,把已经计算过的值给存起来)(对于本题,使用数组即可,可变参数就是数组的下标,代表第几个斐波那契数;答:不是的,只有在递归过程中,出现了大量完全相同的问题时,才能用记忆化搜索的方式优化。1、所有的递归(暴搜、深搜),都能改成记忆化搜索吗?
2024-05-31 21:49:33
312
原创 【力扣】1312. 让字符串成为回文串的最少插入次数
本题我们利用的思想来解决。首先创建一个dp数组,根据「状态转移方程」,没有不能递推表示的值。。根据「状态转移方程」,我们发现,在 dp表所表示的矩阵中,dp[i + 1]表示下一行的位置,dp[j - 1]表示前一列的位置。因此我们的填表顺序应该是。
2024-05-30 23:15:09
359
原创 【力扣】LCR 130. 衣橱整理
这是⼀道非常典型的「搜索」类问题。我们可以通过「深搜」或者「宽搜」,从[0, 0] 点出发,按照选择或,但不能移动到衣柜之外一直往 [m - 1,n - 1]位置走。同时,设置⼀个全局变量。每次走到⼀个合法位置,就将全局变量加一。当我们把所有能走到的路都走完之后,全局变量里面存的就是最终答案。
2024-05-30 21:39:50
518
原创 Spring IOC 和 DI详解
IOC 是Spring的核心思想。其实IOC在前面 Spring MVC 部分我们就已经用到了。代码部分,我们在类上添加@RestController 和 @Controller 注解, 就是把这个对象交给Spring管理Spring 框架启动时就会加载该类。把对象交给Spring管理, 就是IoC思想。IOC: Inversion of Control (控制反转), 也就是说 Spring 是一个"控制反转"的容器.什么是控制反转呢?也就是控制权反转。什么的控制权发生了反转?
2024-04-22 23:46:35
1641
4
原创 Spring MVC应用分层(三层架构)
应用分层 是一种软件开发设计思想, 它将应用程序分成N个层次,这N个层次分别负责各自的职责,多个层次之间协同提供完整的功能. 根据项目的复杂度, 把项目分成三层, 四层或者更多层.常见的MVC设计模式, 就是应用分层的⼀种具体体现。
2024-04-13 09:00:00
1538
原创 Spring Web MVC的入门学习(二)
MVC的概念也逐渐发生了变化, View不再返回视图, 而是返回显示视图时需要的数据. 所以前面使用的 @RestController 其实是返回的数据。@RestController = @Controller + @ResponseBody@Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.@ResponseBody : 定义返回的数据格式为非视图, 返回⼀个 text/html 信息
2024-04-12 09:00:00
1105
原创 Cookie 与 Session
Cookie 和 Session 的区别1、Cookie 是客户端保存用户信息的⼀种机制. Session 是服务器端保存用户信息的⼀种机制.2、Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId 是 Cookie 和 Session 之间的桥梁。3、Cookie 和 Session 经常会在⼀起配合使用. 但是不是必须配合. 完全可以用 Cookie 来保存⼀些数据在客户端. 这些数据不一定是用户身份信息, 也不⼀定是 SessionId。
2024-03-31 22:58:43
811
原创 Spring Web MVC的入门学习(一)
学习Spring MVC,其实就是学习如何通过浏览器和用户程序进行交互。主要分以下三个方面: 建立连接:将用户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调用到我们的 Spring 程序。 请求:用户请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能. 响应:执行了业务逻辑之后,要把程序执行的结果返回给用户, 也就是响应。一个项目中, 会有很多类, 每个类可能有很多的方法, Spring程序怎么知道要执行哪个方法呢?
2024-03-31 17:28:39
1122
原创 优先级队列(堆)
堆的插入总共需要两个步骤: 先将元素放入到底层空间中(注意:空间不够时需要扩容) 将最后新插入的节点向上调整,直到满足堆的性质 2.4.2 堆的删除 注意:堆的删除一定删除的是堆顶元素。具体如下: 将堆顶元素对堆中最后一个元素交换 将堆中有效数据个数减少一个 对堆顶元素进行向下调整
2024-03-21 23:12:27
721
1
原创 垃圾回收机制(GC)
我们由C语言中的动态内存管理来引入,。。这一点对于服务器程序非常不友好。服务器每个请求都去 malloc 一块内存,如果不 free 释放,就会使申请到的内存越来越多,后续想要申请内存就没有内存可申请了,这就是内存泄漏问题。实际开发中,很容易出现 free 不小心就忘记调用了,或者因为一些情况没有执行到(函数中间存在 if -> return 或者 抛出异常了)。java 就属于早期就支持 垃圾回收 的语言了。
2024-03-17 14:50:07
1173
5
原创 JVM 类加载
比如此时有这样一行代码:它是初始化 value 的 int 值为 0,而非123。4、解析解析阶段是 Java 虚拟机将常量池内的符号引用替换为直接引用的过程,也就是初始化常量的过程。(该阶段主要是针对类中的字符串常量进行处理)对符号引用替换为直接引用解释:
2024-03-16 09:00:00
860
2
原创 HTTPS的工作过程
中间人有没有可能篡改该证书?如果中间人篡改了证书的明文,由于他没有CA机构的私钥,所以无法hash之后用私钥加密形成签名,
2024-03-15 16:54:22
1167
原创 HTTP协议
理解“应用层协议” 我们平时打开⼀个网站,就是通过 HTTP 协议来传输数据的。理解 HTTP 协议的工作过程 事实上, 当我们访问⼀个网站的时候,可能涉及不止一次的 HTTP 请求/响应 的交互过程。我们打开Fiddler,并且在浏览器中访问 www.baidu.com,这时我们就可以看到Fiddler中显示的HTTP请求/响应。 1、首行:方法+URL+版本 2、请求头部(Header): 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔,遇到空行表示请求头部分结束。3、空行:空行表示请
2024-03-12 16:57:14
1888
21
原创 NAT(网络地址转换)技术
在IP地址数量不够用的情况下,出现了NAT技术。NAT技术是当前解决IP地址不够用的主要手段,是路由器的⼀个重要功能。NAT能够将私有IP对外通信时转为全局IP. 也就是⼀种将私有IP和全局IP相互转化的技术方法:很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;全局IP要求唯⼀, 但是私有IP不需要;只需要保证在同一局域网内部的IP不重复,在不同的局域网中出现相同的私有IP是完全不影响的。
2024-03-11 09:00:00
592
10
原创 计算机网络-数据链路层
到达对端时再将这些小包, 会按顺序重组, 拼装到⼀起返回给传输层(用到IP协议头中的13位片偏移);⼀旦这些小包中任意⼀个小包丢失, 接收端的重组就会失败,但是IP层不会负责重新传输数据。2、MTU对UDP协议的影响回顾⼀下UDP协议:⼀旦UDP携带的数据超过1472(1500(MTU) - 20(IP⾸部) - 8(UDP⾸部)), 那么就会在网络层分成多个IP数据报.这多个IP数据报有任意⼀个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据。
2024-03-10 16:13:30
1799
21
原创 【JavaEE进阶】CSS选择器的常见用法
CSS选择器的主要功能就是选中页面指定的标签元素,选中了元素,才可以设置元素的属性。接下来用代码来学习这几个选择器的使用。初始的页面为:其中超链接的颜色默认为图中颜色。
2024-03-03 17:19:44
890
33
原创 【JavaEE初阶】volatile 关键字、wait 和 notify
一、volatile 关键字一、volatile 关键字1、volatile 能保证内存可见性我们前面的线程安全文章中,分析引起线程不安全的原因,其中就有一个原因是因此,我们就引入了volatile 关键字,volatile 修饰的变量,能够保证 "内存可见性"。(这里的“工作内存”不是真正的内存,就像CPU寄存器。
2023-11-30 13:45:24
2734
16
原创 【JavaEE初阶】死锁问题
死锁,是多线程代码中的一类经典问题。我们知道加锁是能解决线程安全问题的,但是如果加锁的方式不当,就可能产生死锁。产生死锁的四个必要条件:互斥使用:获取锁的过程是互斥的,一个线程拿到了这把锁,另一个线程也想获取,就要阻塞等待。 不可抢占:一个线程拿到这把锁后,只能主动解锁,不能让别的线程强行把锁抢走。 请求保持:一个线程拿到了一把锁后,会持有这把锁,像持有锁A的情况下,尝试获取锁B。 循环等待/环路等待:像哲学家问题一样,1号哲学家等待2号哲学家释放筷子,2号哲学家等待3号
2023-11-29 18:15:42
1378
34
原创 数据结构-二叉树
上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。在遍历二叉树时,如果没有进行某种约定,每个人都按照自己的方式遍历,得出的结果就比较混乱,,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第。:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是。:若一个结点含有子结点,则这个结点称为其子结点的父结点;:一个结点含有的子树的根结点称为该结点的子结点;有一个特殊的结点,称为根结点,根结点没有前驱结点;
2023-11-28 14:50:20
3400
36
原创 【JavaEE初阶】线程安全问题及解决方法
线程安全的概念想给出⼀个线程安全的确切定义是复杂的,但我们可以这样认为: 如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的。 线程安全,在单线程环境下和多线程环境下都不会出现问题。
2023-11-25 17:04:25
1512
5
原创 【JavaEE初阶】Thread 类及常见方法、线程的状态
Thread 类是 JVM 用来管理线程的⼀个类,换句话说,每个线程都有⼀个唯⼀的 Thread 对象与之关联。每个执行流,也需要有⼀个对象来描述,类似下图所示,Thread 类的对象就是用来描述⼀个线程执行流的,JVM 会将这些 Thread 对象组织起来,用于线程调度,线程管理。
2023-11-24 17:11:12
1512
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人