- 博客(190)
- 收藏
- 关注

原创 深度优先搜索(dfs),宽度优先搜索(bfs),深度优先遍历,宽度优先遍历
DFS,BFS,树与图的深度优先遍历,树与图的广度优先遍历,树的重心,八数码,走迷宫,n皇后,全排列经典例题。
2022-07-09 11:26:15
2631
2

原创 广度优先搜索(BFS)(队列实现) 走迷宫
BFS应用:寻找最短路径或者遍历路径。(树,图或者更抽象的...)实现方法:队列为什么bfs需要队列实现? 队列的原理是先进先出,而广度优先搜索类似于树的层次遍历,从离根节点最近的点开始向外扩散,因此用队列将最先遍历的点存入,后遍历的点后存入,符合bfs的逻辑。经典例题:走迷宫学习中遇到的几个问题:1,如何表示迷宫走的方向?——通过向量表示,dx,dy一一对应; 分别是四个方向:向上/下/左/右;2, 如何确保最后返回的一定是最短路径?———因为bfs是广度优先搜索,一定是从最近的点开始向外扩散,在b
2022-06-25 01:02:39
4341
5
原创 Java进阶
Java中的注解也称标注,可以对类、方法、属性、参数、包等进行标注,然后让编译器或运行时其他类进行解析,完成某个功能。注解也可以编译到字节码文件中。为什么要克隆?new出来的对象的属性还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”就靠clone方法了。将一个已经存在的对象以及对象数据克隆到另一个对象中。
2025-03-29 20:43:14
783
原创 Java并发编程
AQS:是一个底层具体的同步实现者,很多同步的类底层都用到了AQS。AbstractQueuedSynchronizer类中有一个int类型的state变量记录锁的状态。这个类在java.util.concurrent包下面内部类//标记有没有线程在访问共享资源。
2025-03-27 19:00:33
950
原创 MySQL进阶
索引是排好序的数据结构。(例如二叉树。)我们借助索引,索引类似一个目录,通过目录可以快速定位到数据位置,拿到物理地址。帮助MySQL提高查询效率的是数据结构。能实现快速定位数据的一种存储结构,其设计思想是以空间换取时间。本质:通过不断缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机事件变成顺序事件。
2025-03-24 20:48:42
715
原创 Java并发编程
程序由指令和数据组成,指令的运行,数据的读写需要将指令加载至CPU,数据运行至内存。当一个程序被运行,从磁盘加载这个程序代码至内存,这时就开启了一个进程。进程可以视为程序的一个实例。
2025-03-24 17:29:11
220
原创 Java虚拟机
Java Virtual Machine-java程序运行环境(java二进制字节码运行环境)一次编写,到处运行。自动内存管理,垃圾回收功能数组下标越界检查多态比较:JDK JRE JVMJVM内存结构:方法区、堆、虚拟机栈、程序计数器、本地方法栈1、程序计数器(寄存器):记住下一条jvm指令的执行地址。特点:线程私有的,每个线程都有自己的程序计数器。不会存在内存溢出2、虚拟机栈:线程运行时需要的内存空间。栈帧代表每个方法运行时需要的内存(参数、局部变量、返回地址)。
2025-03-21 20:18:30
953
原创 Java基础面试知识路线
toString()方法hashCode() and equals()方法Getter and Setter 方法构造函数对于这种简单的类,这些方法通常是无聊的、重复的,而且是可以很容易地机械地生成的那种东西(ide通常提供这种功能)。throws是异常的申明,若方法中存在检查异常,如果不对其捕获,那必须在方法头中显式声明该异常,以便于告诉方法调用者此方法存在异常,需要处理。抽象类的设计是自下而上的,我们写了很多类,发现这些类有共性,有很多代码是重复的,因此我们将相同代码逻辑封装成抽象类,减少代码冗余。
2025-03-20 21:05:11
978
原创 消息队列导致数据库数据读取不一致解决方案
具体问题:使用消息队列时,发送方给接收方发送消息,接收方修改了数据库的同时发送方查询数据库,由于是异步操作,会导致发送方读取的数据是修改前的数据,导致数据不一致的问题。我使用的是在数据库添加一个版本字段,记录版本,保证版本一致性,就能保证每次读取的是需要的内容。
2025-03-17 18:22:24
226
原创 微服务架构下前端如何配置 OpenAPI 接口
生成客户端代码:使用 OpenAPI 工具(如 `openapi-typescript-codegen` 或 `openapi-generator-cli`)生成前端可用的 API 客户端代码。OpenAPI 规范文件:通常是 `swagger.json` 或 `openapi.json`,可以通过后端服务的 `/v2/api-docs` 或 `/v3/api-docs` 路径获取。它定义了 API 的接口、参数、返回值等信息,并可以通过工具生成客户端代码。在项目中引入生成的客户端代码。
2025-03-16 14:19:32
386
原创 Java原生实现代码沙箱的实现
代码沙箱:只负责接收代码和输入,返回编译运行的结果,不负责判题(可作为独立项目/服务,提供给其他需要执行代码的项目使用)新建一个新的SpringBoot项目并且成功运行(Java8、SpringBoot2.7)不同的编程语言对应领域和关键词都不同,成本太大。以Java语言为主,实现代码沙箱。4. 限制用户操作权限(文件、内存、CPU、网络、执行)新建目录,每个用户的代码都存放在独立的目录下,便于维护。目前为止,核心流程都已经实现,若真正上线,安全吗?(可扩展实现C、C++代码沙箱)
2024-12-19 22:41:48
1148
原创 判题机的开发(代码沙箱、三种模式、工厂模式、策略模式优化、代理模式)
如果所有的选择判题策略都写在判题服务代码中,代码会过于复杂,产生很多if-else,建议单独编写判断策略的方法。-->定义JudgeManager,尽量简化对判题功能的调用,
2024-12-18 20:40:37
1101
原创 工厂模式和普通的对象创建(使用多态)的区别
解耦直接创建对象:客户端代码直接与具体实现类(如Dog)绑定,缺乏解耦。工厂模式:通过工厂类来创建对象,客户端只关心如何获取对象,而不关心具体的实现类。工厂模式有助于解耦客户端代码和具体的实现类。灵活性和扩展性直接创建对象:如果以后需要增加新的对象类型,客户端代码需要修改来适应新类型(如添加new Cat()工厂模式:新增类型时,只需要扩展工厂类,不需要修改客户端代码。工厂模式支持更高的灵活性,特别是在对象的选择是动态的情况下(如配置驱动、条件驱动等)。多态的使用直接创建对象。
2024-12-18 16:19:06
829
原创 工厂模式(根据代码沙箱拓展)
最近写一个关于代码沙箱的项目,用到了工厂模式,简单记个笔记,总结一下。实现了一个简单的,根据传入的字符串参数创建不同类型的代码沙箱实例。这种方式的好处是简洁、易于理解,而且适用于需求较简单的场景。不过,它的扩展性在面对大量沙箱类型时可能不如其他更复杂的工厂模式。: 这是工厂方法的核心,接收一个参数,根据该参数选择不同的沙箱类型并返回相应的实例。switchtypetype"example"type"remote"type: 该方法返回的是一个接口或抽象类,具体的实现类(如)应该实现了该接口或继承了该类。
2024-12-18 16:11:06
441
原创 Vue2中 A页面调用B页面函数
1,创建util.js文件在utils文件夹中。3,A页面(调用方)想在哪调用写在哪就行。4,B页面(被调用方)2,A,B页面均引入。
2024-08-22 19:25:38
350
原创 el-select出现全选情况,并且无论点击哪个选项,都显示最后一个选项的问题
原因:由于绑定的是对象类型数据,官网要求指定value-key作为唯一性标识。
2024-06-12 15:44:25
676
原创 什么是面向对象?
这样的好处就在于,隐藏了内部实现细节,提高安全性,对外提供公共访问方法,提高代码复用性。封装的意义就在于,隐藏了实现细节,对外的调用者来说是透明的,调用者无需知道内部实现方式,只需要知道这个方法是干什么的就好了。继承主要用途就是将子类中共有的方法抽取到父类中,比如说共有的属性和方法,更大的提高的代码复用程度。继承的好处:1,想要使用这些属性和方法的时候,直接调用父类的即可,无需再重新定义,更大程度的提高了代码的复用性。2,无需再写很多冗余代码,如果需要个性化定义子类方法,在子类中去重写父类方法即可。
2024-04-28 12:08:06
426
原创 Vue3中父组件向子组件、子组件向父组件、兄弟组件传值
注:props只可从上一级组件传到下一级组件(父子组件),即单向数据流。方法一:A组件------------------>父组件------------------>B组件。在子组件上监听emit定义的事件名称并绑定自身的函数,在函数参数中接收子组件传递的参数。父组件中引用子组件,并在子组件标签中添加子组件props中创建的属性。(子组件传父组件) (父组件传子组件)子组件中创建一个属性,用来接收父组件传过来的值。最后将需要传给子组件的值赋给该属性。假设我们从A组件中将值传给B组件。
2024-04-08 19:09:58
570
原创 后端上传文件使用阿里云oss存储文件(图片)
前端向后端传文件,后端Controller层接收。3,读取配置文件application.yml中的配置。2,application.yml配置。1,pom.xml安装依赖。4,Service层接口。
2024-04-07 15:06:51
449
原创 自动装箱 自动拆箱
由此可以判断 如果是使用new那么每次都会返回false。因此使用的是Integer中的valueOf。使用数组缓存,如果要转换的数在-128到127之间,直接返回对象,否则创建一个新的对象。底层隐式调用了intValue()方法。基本类型转换为包装类型。包装类型转换为基本类型。
2024-03-24 10:26:22
258
1
原创 平衡二叉树
2,中序遍历:按左,根,右方式遍历(二分搜索树的特点:从小到大依次输出)1,当前节点的值大于左节点的值,小于右节点的值。2,除过叶子节点 其余非叶子节点都有左右孩子。3,后序遍历:按左,右,根方式遍历。4,先序遍历:按根,左,右方式遍历。注:存储元素的值必须具有可比性。2,每一棵子树也是二分搜索树。1,叶子节点在最后一层。
2024-03-09 13:12:20
204
原创 MySQL高级
非聚簇索引:索引的存储和数据的存储是分离的,也就是说找到了索引但没找到数据,需 要根据索引上的值(主键)再次回表查询,非聚簇索引。支持事务、行级锁(并发量大)、外键约束,容量大、支持索引、支持缓存、支持主键自增、不支持存储表的总行数,需要sql逐行统计。聚簇索引:找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,所以 innodb 中的主键就是聚簇索引(一级索引)。不支持行锁、只有表锁(并发小),不支持外键,支持全文检索,MYSIAM存储了表的总行数,统计速度快。排序、分组使用的列。
2024-01-27 14:39:34
955
原创 JAVASE进阶(设计模式、设计原则)
Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。@Deprecated - 标记过时方法。如果使用该方法,会报编译警告。@SuppressWarnings - 指示编译器去忽略注解中声明的警告。@FunctionalInterface 用于指示被修饰的接口是函数式接口。克隆分为浅克隆、深克隆。
2024-01-22 15:07:31
1124
原创 线程进阶(以解决线程安全问题为主)、volatile的底层实现
当一个变量被声明为 volatile 时,线程在写入变量时不会把值缓存在寄存器或者其他地方,而是会把值刷新回主内存。当其他线程读取该共享变量时,会从主内存重新获取最新值,而不是使用当前线程的工作内存中的值。volatile 的内存语义和synchronized有相似之处,具体来说就是,当线程写入了 volatile变量值时就等价于线程退出synchronized同步块(把写入工作内存的变量值同步到主内存),读取 volatile 变量值时就相当于进入同步块(先清空本地内存变量值,再从主内存获取最新值)。
2024-01-18 21:40:39
1020
Gray码的分治构造算法
2023-12-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人