- 博客(153)
- 资源 (5)
- 收藏
- 关注
原创 backtracking Leetcode 回溯算法题
第一个位置选择有 n 种,接下来每个位置只能在前面选择数字的后面选,所以有了 beg 参数,才能保持不重复剪枝:res.size + (n - beg + 1) < k , 已有答案的长度 + 剩余所有未选择的个数 都小于最终答案长度了 就没有必要尝试下去。
2024-04-18 12:41:23
595
原创 stack queue Leetcode 栈和队列算法题
Queue 是 Collection 接口下的,她的一个实现类是ArrayDeque.不推荐使用 Vector 实现的 Stack,因为为了保证线程安全使得 Stack 的效率很低,而且由于继承的 Vector 导致没有屏蔽一些栈不应该有的操作。
2024-04-18 12:39:51
491
原创 string Leetcode 字符串算法题
API:内部是 append 实现字符串的改变,不会每次改变字符串都创建一个新对象不调用API, 使用双指针,分别从两端向中间聚拢。
2024-04-18 12:38:54
450
原创 Redis 配置与使用 (Linux 虚拟机&Windows客户端)
springboot2.X 中需要修改 session 配置存储类型:session.store-type: redis。get set session 自动转化为 redis 中存储。可以自动将 session 存储到 redis 中。默认端口号:6379。
2024-04-17 13:25:38
1085
1
原创 24.两两交换链表中的节点
一条链表,从头节点开始,以两个节点为单位的遍历,当遍历到链表末端,没有节点或者只有一个节点的时候返回当前节点此时返回的节点returnNode是前两个节点的下一个节点,设前两个节点是 swap1Node,swap2Node此时swap2Node 被换到前面去了,所以作为了新的头节点,将作为前两个的下一个节点返回。
2023-12-30 13:25:42
472
1
原创 206.反转链表
用三个节点分别保存前一个节点,当前节点,后一个节点提前存储 nextNode 可以简化代码因为遍历到最后一个元素时 curNode 会指向 null,而 nextNode 就无法获取了,如果写在最后,就会报错另一个角度:通过curNode获取nextNode更好,可以用curNode是否为空判断是否有nextNode通过nextNode获取nextNode还需要额外判断nextNode是否为空。
2023-12-30 00:33:11
463
原创 Spring基础IoC(控制反转)与DI(依赖注入)
Spring 是一个开源的轻量级的 Java 开发框架,可以帮助开发人员更高效的进行开发,主要优势在于简化开发和框架整合。Spring框架整合了很多模块,这些模块可以协助我们开发。例如Spring中的两大核心技术:IoC (Inversion of Control:控制反转) 和 AOP (Aspect-Oriented Programming : 面向切面编程),可以很方便的支持对数据库的访问,并集成第三方组件(例如调度,缓存等等),还支持单元测试。
2023-12-29 22:12:01
1025
原创 Java 类加载与字节码技术
什么时候需要自定义类加载器1)想加载非 classpath 随意路径中的类文件2)都是通过接口来使用实现,希望解耦时,常用在框架设计3)这些类希望予以隔离,不同应用的同名类都可以加载,不冲突,常见于 tomcat 容器继承 ClassLoader 父类要遵从双亲委派机制,重写 findClass 方法注意不是重写 loadClass 方法,否则不会走双亲委派机制读取类文件的字节码调用父类的 defineClass 方法来加载类。
2023-12-29 22:10:25
978
原创 Java虚拟机中的垃圾回收
如果一个对象被另一个对象引用,那么它的引用计数加一,如果那个对象不再引用它了,那么引用计数减一。当引用计数为 0 时,该对象就应该被垃圾回收了。但是下面这种互相引用的情况就无法回收了:两个对象的计数都为1,导致两个对象都无法被释放。
2023-12-29 22:08:23
1241
原创 707.设计链表
单链表的创建需要一个头节点,它不存储值但指向第一个元素,便于后续的增删改查操作的实现。没有注意双链表的特性,依然用单方向的遍历实现。双链表的实现,需要头,尾节点。
2023-12-29 22:06:01
394
原创 Java 虚拟机中的内存结构
Java Virtual Machine Stacks (Java 虚拟机栈)每个线程运行时所需要的内存,称为虚拟机栈每个栈由多个栈帧(Frame)组成,对应着每次方法调用所占用的内存每个线程只有一个活动栈帧,对应当前正在执行的那个方法栈:线程运行需要的内存空间栈中存储着多个栈帧,每个栈帧对应着一个调用过的方法,栈顶为活动栈帧,是当前正在运行的函数;当一个方法运行完成,这个方法对应的栈帧就会出栈问题辨析垃圾回收是否涉及栈内存?不需要,每次方法结束时,栈内存就被回收掉了,不需要等待垃圾回收。
2023-12-22 21:27:18
1109
原创 Java 并发编程中的线程池
在『任务调度线程池』功能加入之前,可以使用 java.util.Timer 来实现定时功能,Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。如果阻塞队列也满了,就会交给救急线程运行,当救急线程运行完了就会结束,但是核心线程会一直执行,不会结束(即使没有任务)。自己创建一个单线程串行执行任务,如果任务执行失败而终止那么没有任何补救措施,而线程池还会新建一个线程,保证池的正常工作。
2023-12-21 22:20:32
862
原创 Java 并发编程中的不可变设计
SimpleDateFormat 不是线程安全的,可以用 synchronized 加锁解决问题,但带来的是性能上的损失如果一个对象在不能够修改其内部状态(属性),那么它就是线程安全的,因为不存在并发修改啊!不可变对象,实际是另一种避免竞争的方式。
2023-12-21 22:18:24
415
原创 Java 并发编程中的无锁实现
compareAndSet,它的简称就是 CAS (也有 Compare And Swap 的说法),它必须是原子操作。获取共享变量时,为了保证该变量的可见性,需要使用 volatile 修饰。它可以用来修饰成员变量和静态成员变量,避免线程从自己的工作缓存中查找变量的值,必须到主存中获取它的值,线程操作 volatile 变量都是直接操作主存。即一个线程对 volatile 变量的修改,对另一个线程可见。
2023-12-21 22:17:08
1050
原创 Java 内存模型 与 volatile原理
JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面。
2023-12-21 22:14:37
923
原创 Java 线程管理中的锁
obj.wait()让进入 object 监视器的线程到 waitSet 等待在 object 上正在 waitSet 等待的线程中挑一个唤醒让 object 上正在 waitSet 等待的线程全部唤醒以上方法的调用必须是先获得锁(成为 Owner以后);log.debug("执行....");// 让线程在obj上一直等待下去log.debug("其它代码....");log.debug("执行....");
2023-12-21 22:08:37
1139
原创 Java 线程安全问题
如果多个线程同时对共享变量读写,其中一个线程还没来得及将更改后的共享变量更新到主内存中,就切换到另一个线程从主内存中读该共享变量,此时读取的共享变量的值就是错的。而且切换回原来的线程后,之前被另一个线程更新后的共享变量的值也会被当前切换回来的线程所继续写的值给覆盖。这里的共享变量 counter 的自增,自检并不是原子操作。是由多个步骤组成的,如果一个线程执行到其中一个步骤就停止了,另一个线程并不会接着上一个线程继续,而是重新开始算法(因为线程之间没有设置同步),此时获取到的counter值就不是最新的。
2023-12-15 11:32:25
900
原创 Java 线程创建的方法和原理
优点:任务类只是实现接口,可以继续继承其他类,实现其他接口,扩展性强。创建Runnable接口的匿名内部类对象,重写其中的 run 方法。其中 Runnable接口只有一个方法,被注解为。类的 run 方法中会判断是否存在。,所以可以用 lambda表达式简化。方法重写,就等于覆盖了下面的方法。变量,如果存在则优先执行。
2023-12-14 11:55:51
433
原创 Java 内部类:成员内部类 静态内部类 匿名内部类
匿名内部类本质是一个子类(实现类),可以更方便的创建一个子类对象。特殊创建的局部内部类;匿名是指创建的这个内部类没有名字;局部内部类定义在方法中,代码块中,构造器等执行体中的类。类中的一个普通成员,类似普通的成员变量和成员方法。内部类如何访问其他类中的数据成员?内部类的对象如何创建?通常作为参数传递给方法。
2023-12-14 10:42:49
367
原创 203. 移除链表元素
如果next指向节点的值是val则说明,这个指向的节点需要跳过,所以返回的是next的next,如果不是val,则返回next指向的本身。对于不是最后一个节点的,它的next等于下面一个return 返回的值,而返回的值由next指向的节点的值决定。注意:这里的head是指向第一个节点的(首元节点),并没有一个虚拟的头节点,所以这让删除节点元素变得有些麻烦。我们创建一个新的头节点的头节点preHead,preHead指向真正的节点 head,这样便于删除元素。
2023-12-13 20:10:19
400
原创 59. 螺旋矩阵 II
每次只走一步判断下一步是否为临界值,如果是,按照预定的的四个方向的顺序进行转变一个巧妙的点:通过判断下一步是否有值来确定是否是边界,就可以不用记录已走过的边界框。
2023-12-13 17:21:06
382
原创 209. 长度最小的子数组
由于前缀和是不断递增的,满足二分查找的条件,所以我们只需要找到一个索引最小的右端点,使得左右端点之间的元素和大于等于target。当元素和的大小大于等于目标值时,判断能否在保证元素和大于目标值的同时,移动左指针前进。但是如果我们只枚举左端点,右端点使用二分查找的方式,复杂度为。注意边界:如果所有元素的和都小于目标值,则区间不存在,返回0。计算当前这种左右区间的长度,更新最小区间长度的答案。一个简单的想法是枚举区间的左右端点,这样复杂度是。右指针不断的前进,计算两个指针之间的元素和。
2023-12-13 15:16:07
401
原创 977. 有序数组的平方
对于两个有序数组的合并,可以利用类似归并排序的思想,为两个数组的最小位置各自分配一个指针。一个包含正负数的非递减数组,等同于一个从正负数分割线开始的两个有序正负数组。只需要在左右边界最高点的地方分配两根指针,逐渐向中心移动。根据数组特性,这是一个凹下去的数组,类似一元二次函数。
2023-12-13 11:32:32
360
原创 27. 移除元素
https://leetcode.cn/problems/remove-element/description/将后面所有不等于val的元素向前赋值移动弊端:大量不等于val的元素会被重复赋值方法二:双指针左右两个指针分别向中间移动如果左指针指向的元素是val,则将右指针指向的元素覆盖左边的元素,同时当前右指针指向的元素就不可用了,所以右指针向左移动一位如果左指针指向的元素不是val,则保留这个元素,左指针向右移动注意的是:最后边界条件的判断,最后左右指针必须重合指向同一个元素,才能保证长度计算正确我
2023-12-13 10:22:36
334
原创 Windows10下VTR.7中VPR项目的运行
下载VTR7和Visual Studio2022点击sln文件,打开vpr工程vpr为VS2010的项目,需要先对工程文件升级后再编译:上方菜单→项目→VPR属性→C/C++→代码生成:编译成功后在Debug文件下可以找到VPR.exe文件在此目录下运行cmd,输入运行命令并传入FPGA结构文件和电路文件:在main.c中给传入的参数赋值,可以用于调试
2023-03-28 22:28:33
482
2
原创 UART 串口通信
UART(universal asynchronous receiver-transmitter):通用异步收发传输器;**异步串行通信**功能:- 发送数据时将并行数据转换为串行数据进行传输- 接收数据时将串行数据转换为并行行数据进行传输
2023-03-08 18:04:18
7632
原创 RAM IP Core
官方文档:ZYNQ 存储资源指导手册 (DS109)RAM 全称 Random Access Memory,随机存取存储器。随时将数据写入任意指定地址的存储单元,或从任意地址读出数据。读写的速度是由时钟频率决定的。RAM主要用于存放程序运行的中间数据、运算结果等资源简介:端口配置前0-31写,后32-63读创建一个设计源文件:选择RAM IP Core双击设置设置读写位宽和深度veo文件是例化模板我们需要一个读写控制模块去驱动RAM IP Core新建一个设计文件ram_rw设置端口控制逻辑:例化ram
2023-03-03 14:28:34
491
原创 FIFO IP Core
不能对数据立刻赋值,fpga内部不一样准备好了,需要延迟等待一段时间,这样的需求可以用状态机完成。选择异步时钟的BRAM(这样后面的读写数据量才能设置,同步时钟的默认相等)创建工程和设计文件ip_fifo,添加FIFO IP Core。生成bitstream,连接开发板,观看ila波形。reg d0 = en 当前时刻的值。这里有三个状态,延迟等待10个周期。设置读写宽度和深度,取消复位引脚。输入信号:时钟,复位,将空,将满。将写模块中的写使能变为读使能。输出信号:写使能,写数据。写满判断变为读空判断。
2023-03-03 14:19:01
898
原创 GPIO之MIO控制LED
配置UART的引脚和MIO,Export Hardware 后打开SDK创建一个空项目,可以看见:包含了GPIO的驱动文档和示例,等会儿会用到。
2023-03-01 23:16:15
404
原创 GPIO之MIO
MIO(Multiuse I/O)将,来自PS外设和静态存储器(Memory Interfaces)接口的访问多路复用在PS的引脚上。当读DATA的时候返回DATA上一次的数值或者MASK_DATA_{LASW/MSW}的值。GPIO Bank0的第8和7作为VMODE引脚,用于对MIO Bank的电压配置。MASK_DATA_LSW:有选择性的改变输出数值。OEN: 输出使能。MIO引脚10作为输出,需要将引脚10的DIRM和OEN都赋为1。DATA:当GPIO配置为输出的时候,该寄存器控制输出的数值。
2023-03-01 23:10:48
328
原创 [RDMA-高级计算机网络report] Congestion Control for Large-Scale RDMA Departments
本文主要解决的问题是在RoCEv2体系中,基于优先级的拥塞控制PFC是一种粗粒度的机制。它在端口(或端口加优先级)级别上运行,并且不区分流。PAUSE机制是基于每个端口(和优先级)的,而不是基于每个流的。这将导致Unfairness和Victim flow等问题。
2023-03-01 09:54:30
1202
原创 NVM Express Base Specification 2.0c - 2 Theory of Operation
名称空间是主机可以访问的一组格式化的非易失性内存。与每个名称空间相关联的是在该名称空间上操作的I/O命令集。一个NVM Express控制器可以支持使用名称空间ID引用的多个名称空间。命名空间的创建和删除可以通过命名空间管理命令和容量管理命令完成。
2022-12-20 22:44:04
1059
原创 NVMe 原理 - 命令的处理
NVMe是为SSD所生的。NVMe出现之前,SSD绝大多数走的是AHCI和SATA的协议,后者其实是为传统HDD服务的。与HDD相比,SSD具有更低的延时和更高的性能,AHCI已经不能跟上SSD性能发展的步伐了,已经成为制约SSD性能的瓶颈。既然SATA接口速度太慢,我用PCIe好了,不过上层协议还是AHCI。AHCI只有一个命令队列,最多同时只能发32条命令。SSD需要PCIe,更需要NVMe。
2022-12-20 22:31:30
1743
原创 2_ZYBO FPGA 按键控制蜂鸣器 key_beep=>key_led
使用按键控制蜂鸣器发声。 初始状态为蜂鸣器鸣叫,按下开关后蜂鸣器停止鸣叫,再次按下开关,蜂鸣器重新鸣叫
2022-12-05 16:28:38
675
原创 1 FPGA ZYBO Xilinx 按键控制LED灯 key_led
使用ZYBO上的PL端按键,分别控制两个PL端的LED,按下不同的按键时, 两个LED显示不同效果
2022-12-02 17:36:27
1044
CVPR会议论文收录信息可视化与分析
2021-08-29
WumpusWorld.zip
2021-02-10
百货公司货物销售系统
2020-12-19
QT实现计算器(包含科学计算与进制转换)
2020-10-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人