自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (4)
  • 收藏
  • 关注

原创 LeetCode Hot100 回顾(三)

去年面试被问了好几次这个问题, 也是用双指针来解, 一个指针指向第一个节点, 另一个指针指向第N个节点, 然后两个指针同时向后移动, 靠后的节点指向最后一个节点的时候, 前一个节点正好指向倒数第N个节点。个节点就可以到达入口节点, 此时再有一个指针从链表的头开始走, 每次走一个节点, 慢指针也一次走一个节点, 当这两个指针相遇的时候, 指针指向的节点就是链表的入口节点了。先不考虑指针, 新建出链表, 然后把两个链表的对应节点做一个映射关系,然后再遍历旧链表把对应的新链表的节点的指针赋值即可。

2024-02-04 10:45:03 878

原创 LeetCode Hot100 回顾(二)

我采用了一种类似分治的想法,通过一个循环来不断输出数组,在循环的过程中,每输出一整行,剩下需要输出的矩阵的高就减1;可以知道, 如果两个链表相交, 那么从链表的末尾到相交节点的距离一定是相等的, 我们在遍历两个链表的过程中, 可以先将指针移动到距离链表结尾距离相等的位置, 然后同时移动两个指针, 移动过程中查看两个指针是否指向了同一个节点。判断回文串的方式就是找到中间节点, 使用两个指针分别向两边移动, 依次比较即可, 难点主要在链表不能简单的找到它的前驱节点, 我们可以利用递归函数的性质来比较。

2024-01-30 12:40:33 866

原创 LeetCode Hot100 回顾(一)

可能会出现这种情况的是, 在这两个指针的范围内, 存在一条更高且不位于这两个指针正中央的边, 但是很明显的是, 及时我们使用了这条更高的边, 围成的容器的容积也不会大于这两条高度相等的边围成的容器容积, 所以上面提出的反面假设是错误的。两个指针从数组的两端开始进行处理, 每次移动指向线高度较小的指针, 因为容器的盛水高度取决于较低的边, 所以选择的这条边无法再和另一边的任何一条线组成盛水更多的容器了。枚举所有不重复字符串的开始位置, 由于字符串的开始和结束位置都是单调递增的, 所以使用滑动窗口来解决问题。

2024-01-28 15:59:49 946

原创 《Effective STL》读书笔记(四):迭代器

iterator。

2023-09-07 15:46:43 219 1

原创 《Effective STL》读书笔记(三):关联容器

但是当对vector中元素进行增删改的时候,要维护vector的有序需要花费很大的代价,所以在容器内修改占比较多的情况下,使用vector可能就搞不定了,这时再考虑关联容器。另外还和局部性原理相关,vector中的元素都是放在一起的,而关联容器的节点可能会分布在内存的任何地方,显然对vector进行二分查找可以产生更少的页面错误。先考虑大小的问题,二叉搜索树的节点不仅包含了存储的对象,而且还包含几个指针:指向做儿子的指针,指向右儿子的指针,通常还会有一个指向父节点的指针。而且多余的存储也会占用更多的内存。

2023-09-07 09:24:25 183

原创 《Effective STL》读书笔记(二):vector和string

需要注意的是,这个技巧并不能完全保证缩减之后的容器一定没有冗余的容量,这是因为可能STL的具体实现会保留一些容量,这是无法避免的,但是这种技巧还是能保证使用后“在容器当前大小确定的情况下,使容量在该实现下变得最小”。,它不是STL容器,但是是C++标准的一部分,但是它的容量在创建时就指定了,没有办法动态调整大小或插入删除元素,因为它不是STL容器,所以它也不提供迭代器,但是提供了很多对位的集合有意义的成员函数。返回的并不一定是字符串数据的内部表示,还可能是一个字符串数据的不可修改的拷贝。

2023-09-05 19:51:15 191

原创 《Effective STL》读书笔记(一):容器

slistrope。

2023-09-05 19:50:16 165

原创 《Linux多线程服务端编程》读书笔记(二)

互斥器和条件变量构成了多线程编程的全部必备同步原语,用它们即可完成任何多线程同步任务,二者不能相互替代。若干个线程需要等待某个表达式为真,即等待别的线程“唤醒”它。条件变量的学名叫管程(可重入mutex可以被同一个线程反复加锁,这就可能造成一些问题。,可能会出现下面两种情况。对上面的代码有这样的思考。

2023-08-29 10:56:16 64

原创 《Linux多线程服务端编程》读书笔记(一)

一个解决空悬指针的办法是加入一层代理,让A、B指针都指向代理对象,代理对象持有一个指向Object对象的指针,当Object被销毁的时候,代理对象依旧存在,另一个线程也可以通过访问代理对象查看Object对象是否存活。每当对象执行析构函数时,让代理对象的count自减,当count归零时,我们就可以非常安全的销毁代理对象和Object对象了,因为此时不可能再有任何线程访问到代理对象了(因为没有引用)。本身不是线程安全的,它的引用计数本身是安全无锁的,但是它本身作为一个对象不是线程安全的,因为。

2023-08-29 10:55:22 68

原创 Socket编程入门

套接字分为两种类型。

2023-08-22 17:48:14 124

原创 Java类加载

方法是由编译期自动收集类中所有类变量赋值动作和静态语句块中的语句合并产生的,收集顺序和在类中的定义顺序相同,所以静态语句块只能访问到定位在它之前的静态变量,定义在它之后的变量可以对其赋值,但是不能访问。比较两个类是否“相等”,只有在两个类是由同一个类加载器加载的前提下才有意义,否则,即使两个类来源于同一个Class文件,被同一个Java虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等。非数组类加载阶段既可以由Java虚拟机里内置的引导类加载器来完成,也可以由用户自定义的类加载器去完成。

2023-04-16 16:01:08 374 1

原创 字节码指令

字节码指令集中,操作码的长度为1个字节(0~255),所以字节码指令集操作码总数不能超过256条;由于Class文件格式放弃了编译后代码的操作数长度对齐(意思应该是不同的操作需要的操作数长度没有统一),所以虚拟机在处理超过一个字节的数据时,需要从字节中重建出数据,如果要取出一个16位长度的无符号整数,两个字节分别名为byte1和byte2byte1<<8∣byte2这样造成了解释执行字节码的时候的一些性能损失,但是也省去了大量的填充和间隔符号。

2023-04-14 17:03:15 399

原创 Class文件结构

Java虚拟机不与包括Java语言在内的任何程序语言绑定,它之与Class文件这种特定的二进制文件格式所关联。字节码所能提供的语言描述能力比Java语言本身更加强大,这为其他语言实现一些有别于Java的语言特性提供了发挥空间。

2023-04-14 11:29:51 583

原创 垃圾回收算法

主要有两种算法:引用计数式垃圾收集(Reference Counting GC)和追踪式垃圾收集(Tracing GC)。基于这两个假说,引出了垃圾收集器的设计原则:收集器应将Java堆划分出不同的区域,然后将对象根据其年龄(熬过垃圾收集的次数)分配到不同的区域中。如果一个区域中大多数对象都是朝生夕灭的话,那么每次回收只需要关注如何保留存活下来的对象;如果一个区域都是难以消亡的对象,那么把它们集中放在一起,虚拟机就能以较低的频率来回收这个区域。设计者一般将Java堆划分为新生代和老年代两个区域。

2023-04-13 21:47:56 538

原创 Java垃圾收集原理

程序计数器、虚拟机栈、本地方法栈这三个区域随线程而灭,栈中栈帧的内存大小也是在确定的。这几个区域的内存分配和回收都具有确定性,因此不需要过多考虑如何回收。Java堆和方法区这两个区域有着很显著的不确定性只有处于运行期间,才能知道程序需要多少内存,这部分内存的分配和回收是动态的。垃圾收集器关注的正是这部分内存。

2023-04-13 21:17:22 482

原创 Java虚拟机对象

这两种方法各有优劣,使用句柄访问,当对象移动的时候不需要改变reference的值,只需要改变句柄中的对象实例指针,而使用直接访问要比使用句柄访问更快,只需要一次指针定位。如果内存不规整,使用过的和空闲的内存混杂在一起,则虚拟机需要维护一个列表,记录哪些内存是可用的,分配的时候在这个列表上找一块内存区域分配给对象,然后更新列表上的记录。从虚拟机的角度,对象已经创建了,从Java程序的角度对象的创建刚刚开始,这时要执行对象的构造函数。然后初始化对象头中的信息,比如当前实例属于哪个类,哈希值等。

2023-04-12 11:01:56 220

原创 Java虚拟机内存区域

Java虚拟机所管理的内存将会包括以下几个运行时数据区域。

2023-04-11 22:27:15 344

原创 Mac编译OpenJDK12时出现依赖问题

我们根据提示可以得知是因为OpenJDK12依赖的相关文件没有找到,那我们就按照提示手动给它指定依赖文件的位置,先通过。我们需要的东西其实就在这里,我们使用MacOSX.sdk这个链接文件的路径即可。这样的错误,而且在我的电脑上也安装了xcode的命令行开发工具。我在使用Mac编译OpenJDK12时出现了。然后切换到这个目录下看一下我们要的依赖在哪里。命令改成上面这样就可以看到依赖检查通过了。得到命令行工具的位置。

2023-04-10 10:43:23 294

原创 记一次使用Nuxt框架 connect ECONNREFUSED ::1:9001 错误的排错过程

这时我又仔细看了看一开始错误提示,发现网站无法访问到的是 IPV6 回环地址上的9001端口,所以我猜想是不是nginx没有转发IPV6的请求,我搜索了一下相关资料发现果然是这样,然后我在nginx配置文件上加上了IPV6的回环地址,代码果然可以运行了!端口配置了nginx作请求转发,我这时想可能是请求转发出了问题,所以我又手动调用了axios请求尝试直接访问本地服务的原始端口。回调函数里面发送的axios请求都可以正常转发,为什么这里就不行了呢,原来在异步请求中发送的请求是在。环境里进行发送的,而在。

2023-03-24 16:33:35 675

原创 [Vue warn]: Invalid prop: type check failed for prop “image“. Expected String, got Undefined.

在页面启动的时候teacher.avatar属性还没有定义,所以这个组件获取到的是Undefined。我们在页面启动的时候的。在else里面手动给teacher的avatar添加一个值,空字符串或者自定义的默认头像均可。启动的时候可能会报这样的错误。

2023-03-13 10:22:16 212

原创 谷粒学院开发(三):统一日志、异常及前端准备工作

创建自定义异常类继承,写异常属性@ApiModelProperty("异常状态码") private Integer code;@ApiModelProperty("异常信息") private String msg;添加异常处理方法@ExceptionHandler(GuliException . class) // 指定出现什么异常会被处理 @ResponseBody // 为了能够返回数据 public R error(GuliException e) {在需要抛出异常的地方抛出try {

2023-03-11 10:33:12 344

原创 谷粒学院开发(二):教师管理模块

创建数据库,创建讲师数据库表创建父工程pom类型,管理版本依赖和公共依赖 springboot工程子模块1 maven工程子子模块1 maven工程子子模块2子模块2创建项目结构创建父工程,在pom.xml里面加上一个标签,将它修改成pom工程把dependiences删掉,放在子模块中,父工程只管理版本添加下面的标签确定依赖版本配置锁定依赖的版本创建子模块同样创建之后添加标签,导入依赖创建子子模块创建application.properties编写c

2023-03-09 18:19:16 539

原创 谷粒学院开发(一):基础准备

上面的过程中,mary原本是想修改数据500,可最后修改了数据8000,这就导致了lucy的数据更新被覆盖了。如果想要查询被删除的记录的话,MP没有办法做到,只能通过新建 xml 文件,手写slq来实现。分表时,会像下面这样分配每张表的id,所以创建新的表的时候需要知道上一张表最后一个项目的id。ID_WORKER: MP自带的策略,生成19位的值,数字类型使用这种策略。字段变成1,使用MP查询的时候我们也不需要加额外的条件,MP会自动加上。MP自带策略,19位,使用雪花算法生成的。

2023-03-09 09:17:57 334

原创 Redis学习(六):主从复制,发布订阅和实际可能遇到缓存失效的情况

主从切换技术的方法是:当主服务器宕机后,需要手动吧一台从服务器切换为主服务器,这就需要人工干预,费时费力,还会导致一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题。他能够后台监控主机是否故障,如果故障之后,哨兵会根据投票数自动将从库转换为主库。哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,他会独立运行。其原理就是。

2023-03-07 18:03:15 723

原创 Redis哨兵频繁切换主从节点

这样就发现问题了,同一个节点的ipv4地址和ipv6地址被哨兵识别成了两个物理节点,所以在最后哨兵又把这个主节点改成了自己的从节点,这就导致了导入第二行。一主两从的结构,开启哨兵后,关闭主进程模拟主节点宕机,发现其中一个从节点在主从之间反复横跳。然后我改了一下这几个redis服务器的配置文件,把原来的。发现一直是这几句话循环,读一下可以发现,哨兵先是把。让这些服务器不绑定ipv6地址,问题就顺利解决了。但是如果想用ipv6地址怎么办,我再研究研究。设置成了主节点,然后又在最后把。

2023-03-07 17:09:19 368

原创 Redis学习(五):事务、持久化及使用Java操作Redis

是redis官方推荐的Java连接开发工具,使用Java操作redis中间件。

2023-03-07 10:26:47 778

原创 Redis学习(四):三种特殊类型及常用操作

基数是一个集合中不重复的元素的个数。Redis Hyperloglog 是基数统计的算法。比如要统计网站的UV(访问量),可以通过set保存用户id来解决,但是这样很占内存。Redis Hyperloglog占用的内存是固定的,只需要占12kb内存。但是这个统计有0.81%的错误率。常用的就三个命令pfadd,添加一个元素pfcount,查看集合的大小pfmerge,合并多个集合。

2023-03-06 15:35:47 246

原创 Redis学习(三):五大数据类型及常用操作

msetnx和上面的setnx类似,但是这个是原子操作,当且仅当所有的key值都不存在的时候,才会执行。lset,改变列表指定下标元素的值,这个命令不能创建新的列表,也不能给原本没有元素的下标赋值。getrange :根据起止位置截取字符串,包含起止位置的字符,-1代表最后一个字符的下标。取出栈顶的元素,放到另外一个list里面。ltrim命令,修剪操作,保留list的一部分。sadd,向set中添加元素,添加重复的元素会返回0,代表添加失败;和其他语言里面的set一样,这里的set也不能存放重复的值。

2023-03-06 11:30:44 313

原创 Redis学习(二):Redis安装测试

Redis,RemoteDictionaryServer, 即远程字典服务。免费开源的数据库。由C语言编写,支持网络,可基于内存亦可持久化的日志型、KV数据库,并提供所种语言的API。

2023-03-04 11:42:07 476

原创 Redis学习(一):NoSQL概述

泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付了。尤其是超大规模的高并发社区。NoSQL在当今大数据环境下发展的十分迅速,其中Redis是发展最快的。用户的个人信息,社交网络,地理位置。这些的数据的存储不需要一个固定的格式,不需要多余的操作就可以横向扩展(集群)。

2023-03-04 10:03:35 342

原创 前端表单PUT方法传递数据无法被SpringMVC封装到对象中

SpringMVC有一个过滤器可以处理这种情况,在web.xml中配置对应的过滤器即可。但是Tomcat默认只处理POST方法中的数据,PUT方法传递的数据默认不被封装。Tomcat将提交的表单的数据封装到一个Map中,SpringMVC会通过调用。的方法来拿到对象对应属性的值。

2023-02-11 15:00:23 130

原创 java.lang.NoSuchMethodError: ‘int javax.servlet.http.HttpServletResponse.getStatus()‘方法解决

使用Maven管理项目依赖时导入了JSTL包,由于JSTL包比较老,导入它时会自动导入2.5版本的servlet-api,会和新的servlet-api发生冲突。所以在导入JSTL依赖时需要排除他的servlet-api依赖,正确写法如下。

2023-02-09 19:21:12 349

原创 Javaweb从入门到实战

Http响应服务器–响应–客户端百度:1.响应体2. 响应状态码常用面试题当在浏览器中地址栏输入地址并键入回车的一瞬间到页面能展示回来,经历了什么?Maven就是用来解决这种问题的Maven的核心思想:约定大于配置Maven会规定好该如何去编写Java代码,必须按照这个规范来。在IDEA中使用Maven启动IDEA创建一个Maven项目等待项目POM文件pom文件是maven的核心配置文件把实现了Servlet接口的Java程序叫做ServletServlet接口在Sun公

2022-10-24 13:10:29 5165

原创 Leetcode. 886: 可能的二分法

里面的两个人不能分到同一组。那我们就为这两个人对应的编号构建两个节点,并在这两个节点之间连接一条线。处理完成之后,我们要做的就是把所有的点分成两组,这两组之间可以存在连线,而组内不能存在任何连线。我们可以用颜色法来判断这个图是否满足这样的性质。

2022-10-16 10:16:30 108

原创 LeetCode. 769 : 最多能完成排序的块

所以我们可以得到这样一个结论,如果我们需要一个区间内包含从。我们需要思考一个问题,题设条件下,在长度为。所以我们只需要维护三个变量就能解出问题了。的区间中,我们如何保证这个区间包含从。其实只需要保证这个区间里面的最小值是。所有的数字,我们只需要保证。

2022-10-13 10:25:34 54 1

原创 mac上mysql 免密登陆

mac上mysql 免密登陆。

2022-10-09 12:08:38 553

原创 牛客暑期多校解题报告: 3

考虑k-1个点的lca该如何维护,这里使用两个数组来维护一棵树k-1个点的lca:一个pre数组,pre[i]代表k个节点中前i个节点的lca;然后枚举删除的点,找出合法的方案即可。给出起始所在的道路和终点所在的道路,要求求出最短经过的红绿灯的数目。给出两棵树和对应节点的权值,给出k个点,从k个点中删除一个点,若在a树中剩余k-1个点的lca对应的权值大于在b树中剩余k-1个点lca对应的权值,则该种删除方法是有效的删除方法;这个题目的意思比较难理解,问题的求解还是比较简单的,后悔当时场上没有写😭。

2022-08-24 16:45:15 81 2

原创 牛客暑期多校解题报告: 2

给出一个游戏,这个游戏的有多张有向图,编号分别从1到n。假设操作后玩家所在的节点数是i,则他转移到下一张图的节点i。要求求出到达节点m的最小的使用图的数量。已知状态dp(i, j, k),如果a[j+1]==‘(’, 则向b添加一个’(', 状态转移到dp(i+1, j+1, k+1)其他转移方式同理。给定一个长度为n的括号序列a,a是另一个长度为m的合法括号序列b的子序列,给定a,求可能的b的数量。dp(i, j, k) 代表b的前i个最多匹配a的前j个,剩下k个左括号未匹配。, 最小,输出这个最小值。

2022-08-24 10:05:13 606

原创 牛客暑期多校解题报告: 1

题目给出若干个区间,要求求出所有不同连通集的距离之和。把所有的区间读入,按照左端点排序,然后依次尝试合并区间即可。给定一个二维的教室和若干已经做了人的座位,要求求出当前所有视野不被遮挡的座位的个数。

2022-08-23 14:29:11 88

原创 NC20164 :最大数MAXNUMBER [线段树]

第一行两个整数,M和D,其中M表示操作的个数(M ≤ 200,000),D如上文中所述,满足D在longint内。接下来M行,查询操作或者插入操作。其实就是线段树的模版题,因为数据量比较小,所以都用不到带标记的线段树模版,就注意一下每次插入的位置和查询时左右边界的问题吧。对于每一个询问操作,输出一行。该行只有一个数,即序列中最后L个数的最大数。注意:初始时数列是空的,没有一个数。...

2022-08-04 09:33:08 65

西农数据库实习报告及若干资源

西北农林科技大学数据库实习报告及若干资源

2022-05-31

西农Linux实习报告

西北农林科技大学Linux实习报告,包括题目和代码

2022-05-31

西农数字信号处理实习报告

西北农林科技大学数字信号处理的实习报告

2022-05-31

C语言大作业-图书馆资源管理系统

C语言大作业-图书馆资源管理系统

2021-06-16

空空如也

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

TA关注的人

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