- 博客(36)
- 收藏
- 关注
原创 01背包 有依赖的背包 分组背包 完全背包的一些题目(更新中)
https://www.luogu.com.cn/problem/P1048在之前的一篇 01 背包和 完全背包 的一篇解析中, 已经详细的解释了 01 背包如何想出来, 以及依赖关系是什么样的, 所以这里就直接附上代码, 只作为练习以上的 main1 表示非空间优化的版本, main 表示进行空间优化的版本https://leetcode.cn/problems/tJau2o此题最重要的是要理解, 题目中很关键的一句话, 满足获得的总优惠金额不低于超过预算的总金额这一句话的意思我们拿题目中的数据来举例
2025-03-19 22:03:42
1034
原创 JVM的一些知识
JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机。虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual Box。VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪。JVM 是一台被定制过的现实当中不存在的计算机。
2025-03-19 21:49:45
1131
原创 递归入手三维动态规划
根据图片, 并且每一层都依赖上一层, 所以我们只需要初始化最上面一层即可, 这个和上一题是一样的, 当利润为 0 的时候发现是填入 1, 我们根据记忆化搜索的返回条件可以知道, 所以我们就知道, 最高层的利润为 0 的点填入 1。我们挂上缓存, 需要注意一个细节, 利润会被我们减到负数有可能, 所以我们需要一个比较, 如果变成负数说明利润已经达到了, 我们把它变成 0 , 我们来修改一下代码, 和上一题的整体步骤是差不多的。根据图上画的, 依赖上一层, 从左向右, 从右向左填 j, k都行。
2025-03-05 23:49:06
252
原创 Mybatis(二)
{}: 预编译处理,${}: 字符直接替换#{} 可以防止 SQL 注入,${} 存在 SQL 注入的风险,查询语句中,可以使用 #{},推荐使用 #{}但是一些场景,#{} 不能完成,比如 排序功能,表名、字段名作为参数时,这些情况需要使用 ${}模糊查询虽然 ${} 可以完成,但因为存在 SQL 注入的问题,所以通常使用 mysql 内置函数 concat 来完成。
2025-03-05 00:26:02
919
原创 Mybatis-plus 的基本使用
为了使⽤这⼀功能, mybatis-plus 版本不低于 3.0.7MyBatis-Plus是MyBatis的增强⼯具,在MyBatis的基础上只做增强不做改变,可以⽤更少的代码实现数据库表的CRUD,让我们的开发变得更加简单.MyBatis-Plus⽀持⾃定义SQL, 版本不低于3.0.7, 传递Wrapper对象作为参数时, 参数名必须为ew, 在SQL语句中, 使⽤ ${ew.customSqlSegment} 来引⽤Wrapper对象⽣成的SQL⽚段。
2025-03-03 01:01:01
567
原创 二维动态规划一些题型
前缀长度为 i 的 s 串中的子序列中, 满足前缀长度为 j 的 t 串有多少个(需要经验与灵感)我们约定前缀长度为 i 的字符串 word1 变成前缀长度为 j 的word2 最少需要花费多少代价前缀长度为 i 的字符串 s1 和 前缀长度为 j 的字符串 s2 能否满足前缀长度为 i + j 的字符串 s3在前 i 个格子中, 涂 j 种颜色, 一共有多少种解法前缀长度为 i 的 s1 字符串 最少删除多少个 会变成前缀长度为 j 的任意后缀子串。
2025-02-22 14:03:38
1006
原创 Mybatis(一)
但是我们发现了param1 和 param2, 这个是指代 gender 和 age 的。与前面一一对应, 后面三个发现后面输出是null, 没有一一对应, 后面再解释解决方法。最简单的就是, 将后三个的名字改成与数据库一样, 但是不符合Java的语法规范规范。加上注解, Options可以获取自增主键的值, 并存储在userInfo中。在sql语句中, 处理好映射问题, 返回的时候就是以Java命名规范命名的。设置的其他值并不会修改, 只有语句中的值会被修改。发现数据库里的和打印的是一样的。
2025-02-20 21:41:05
380
原创 Spring中的日志
修改一下, 发现会自动生成文件, 里面的名字不是springboot, 而是spring.log。交换 name 和 path 的顺序一样生成 name, 说明 name 的优先级更高。在配置文件中加入, 大小可以自己选择, 我们选择 1KB。开始是没有的, 当我们访问了以后就会出现, 以上日志。在配置文件中配置,要保持对齐,以上有相同的要删去。前面我们设置的是名字, 现在我们来设置 path。刷新一下, 会看到自动生成了一个文件存储日志。的日志都没有被打印出来。也可以修改命名, 根据文档里面的信息加入。
2025-02-19 01:03:12
609
原创 IP协议和数据链路层知识点简单总结
IP协议主要分为三个每个网络上的设备, 要能分配一个的地址小A 给小B 发消息, 具体应该IP 地址. 本质上是一个位的整数通常将, 32 位的整数使用点分十进制来表示, 如 192.168.1.1一共可以表示个地址但是目前这些 IP 地址并不够用。
2024-11-06 20:40:43
779
原创 网络原理之 TCP解释超详细!!!
TCP有连接的可靠传输面向字节流全双工其中最核心的是可靠传输那么 TCP 如何使用可靠传输的???我们尽可能传过去, 如果传不过去,发送方至少知道自己没传过去, 所以在于接收方, 收到或者没有收到, 都会有应答的操作。
2024-10-26 19:26:22
2201
1
原创 网络原理之 UDP
没有任何的安全机制, 如 TCP 的 超时重传、确认应答等等, 发送端如果发送数据报以后, 由于网络故障没有送达, UDP 协议层也不会给应用层返回任何的错误信息。如果发送端一次性发送 100 个字节, 接收端也必须接受100 个字节, 不可以接受 10 次, 10 个字节。一般校验和是通过取内容/ 内容的一部分, 通过一些数学公式变换, 算术运算, 得到一个数值.接收方收到的数据后, 可以利用同样的算法, 对载荷重新计算一遍校验和, 得到 sum2。如果内容发生变化, 校验和也会发生变化, 例如。
2024-10-24 20:41:16
1131
原创 网络初识基本概念总结
通俗来说,协议就是 " 约定 " ,发送方规定了数据的格式,接收方要能理解这个格式, 当两边同时对上号才可以进行正常的通信。中间的路由器, 则需要封装分用到网络层(也需要改 mac 地址,还需要根据目的 IP 地址进行下一阶段的路径规划)但是由于环境的复杂, 协议也变得越来越复杂, 所以拆分出很多协议, 对其进行分类, 对不同的类别进行分层。在此处, UDP协议给应用层数据包加上了UDP报头,就是为了贴上一层标签, 填写必要的属性.上述的UDP数据报到达网络层,进行进一步的封装,添加上IP协议的报头。
2024-10-13 00:04:20
1310
原创 Java的IO操作与文件的基本常识
IO操作其实解释操作硬盘1. 文本文件文本文件存储的是遵守ASCII或其他字符集编码比如utf - 8,所得到的文件,本质上存的是字符(不仅仅是所说的char)2. 二进制文件存储的是二进制数据,没有任何字符集限制,存什么都可以常见的区别文本文件: .txt .java .c 等等二进制文件: .class .exe .jpg 等等//判断是否存在//是否为目录//是否是文件//创建一个txt文件可以发现如果写的是相对路径,会以 io ,也就是项目所在的目录展开mkdirs。
2024-10-11 19:27:28
1035
原创 Java多线程几个哈希表的区别
首先HashMap肯定是不行的,并没有加解锁操作,一旦多线程同时写的话,直接就会发生覆盖之类的操作排除HashMap先,主要对比HashTable和ConcurrentHashMap。
2024-09-29 19:14:01
371
原创 CAS操作
CAS的全称是 compare and swap涉及到的操作是寄存器A中的值与内存的值M进行比较,如果值相同就把寄存器B的值和M进行交换用一段伪代码来理解一下address 是内存地址 代表 MexpectValue 代表寄存器 AswapValue 代表寄存器 B他先判断一下内存地址的值 M 和接收到的值确认一下是不是一样的,如果一样就将值进行交换并且返回一个 true。
2024-09-29 18:15:25
2141
原创 synchronized 的特性与机制
自旋锁虽然可以在第一时间拿到锁,但是消耗大量的cpu资源,如果七八个自选,会大量占用cpu的资源,所以会转化成重量级锁,在内核进行阻塞等待。概括 : 刚开始加锁是偏向锁状态,遇到了锁竞争,就变成自旋锁,竞争愈演愈烈(七八个争一个锁)直接变成重量级锁(交给内核阻塞等待)一旦遇到了别的线程来竞争这个锁,这个偏向锁立马升级成轻量级锁,别的线程只能等待(jvm会通知先到的线程,让他把锁进行升级一下)挂起等待锁是如果锁被释放了,不能第一时间拿到锁,可能过很久才有可能拿到锁。乐观锁做的工作会少一下,效率会更高。
2024-09-28 20:57:59
2332
原创 Java中的线程池
接下来要描述的四个常用的线程池的创建方式,先介绍一下会出现的参数我们可以进入Java的官方文档中去查看以下是要逐个介绍的参数。
2024-09-25 21:10:17
890
原创 Scanner中的一些方法
4) 换行符只是标志行的结束并不会包含在返回的字符串里面5) 光标会移动到下一行,但是不同操作系统细节上会有差别,原则上贯标会在下一行的开头。1) 会跳过(空格和换行符等等),找到符合double的字符串会自动解析成double类型,但是如果遇到abc这样的就会抛出异常了。1) 从输入中读取一个单词,不包括(换行符与空格),会读取遇到的第一个分隔符后面的内容(空格、制表符、换行符之类的)3)当只有一个整数时, 如果最后一个是换行符(一般我们输入完整数以后按entre) 会指向换行符。
2024-09-25 10:38:57
513
原创 Java单例模式的两种写法(保证线程安全)
饿汉模式 : 天生就是安全的,只是进行读操作懒汉模式 : 不安全,有读也有写1) 加锁,将 new 和 if 变成原子操作2) 再次判断 if ,避免不必要的加锁节省开销3) 使用volatile防止指令重排序发生,保证拿到的一定是完整的实例化对象。
2024-09-22 16:59:41
428
原创 Java中的线程
在lambda表达式 可以捕获和使用外部的变量,前提这些变量是有效最终变量,也就是final修饰的变量,为了确保线程的安全。1.其中run方法是入口方法,他是属于线程启动的入口,你创建一个新的线程就一定会调用run方法系统会自动调用。由于线程之间是并发执行的,操作系统对线程的调度是无序的,无法判断线程谁先执行谁先结束,所以引入join()其中的66哥代表的是线程的名字,可以用jconsole.exe后台监控线程的运行。1.其中这个程序中有一个main线程和一个自己新开的线程,与main线程并发执行。
2024-09-10 19:44:24
797
1
原创 两个数组的dp问题-最长公共子序列
选取0 - i和0 - j区间之内的子字符串,来相比较确定状态表示dp[i][j] 时0 - i和0 - j区间之内的子字符串之内的所有子序列中,最长公共子序列的长度发现这样刚好能表示所有的情况。
2024-09-09 00:26:26
268
原创 01背包问题模板与完全背包模板问题
牛客链接我们都根据几步进行分析1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值根据以上来分析,并由此进行空间优化。
2024-09-08 16:21:29
850
原创 力扣-N皇后问题
由于n = 4情况太多我们先画一下n = 3的决策树可以知道皇后不能在同一行,因为我的思路是每一行每一行的填写皇后,所以不考虑行的皇后会重叠,主要考虑列的皇后会不会重叠,还有斜线的列皇后可以直接用一个数组col来标记 一列中有皇后标记为true而斜线的需要一点数学功底如图可以转化成截距相等,当斜线斜率为1时,可能会有负数的情况,两边同时加上n,因为我想使用下标来标记截距,截距不能为负数而斜率为-1时可知,斜率不会为负数。
2024-09-05 21:02:01
423
1
原创 递归-合成有序链表笔记
这一题也可以使用迭代,但是迭代没有递归那么好想,递归不要去一个个写,要把它想象成一个黑盒,找到单一子问题相信一定能够完成。
2024-08-29 00:35:53
150
原创 递归-汉诺塔笔记
递归出口是当柱子只剩下一个块时,要将最后一个块移动到c,所以要remove删除a中的移动到c上。函数头是将a借助b移动到c,n为柱子上的个数。
2024-08-29 00:17:51
251
原创 Java中的类型转换,类型提升
1. 不同类型的数据混合运算, 范围小的会提升成范围大的.2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.
2024-06-16 14:46:31
369
原创 Java中的static、代码块执行顺序以及练习
首先我们来看一段代码当用public来修饰classRoom时,可以通过类名来访问其中Static的修饰的classRoom但是变成了private修饰,在还未编译时就开始发出警告了,那我们该如何访问呢?我们应该使用静态方法来访问,所谓的静态方法就是static所修饰的成员方法,通过静态方法来访问封装的静态成员变量,即可进行访问。
2023-11-22 20:58:44
100
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人