- 博客(57)
- 收藏
- 关注
原创 spring 2.7.14 cors 设置 allowedOrigins(“*“)通配符 失效怎么解决
allowCredentials(true)被设置成了ture,说明浏览器应该在请求时携带凭证(credential),如果使用*作为通配符会导致安全问题,所以会导致通配符。将allowCredentials()设置为false。
2023-08-12 16:54:58 1936 3
原创 hutool 工具包 BeanUtil.copyProperties()踩坑
【代码】hutool 工具包 BeanUtil.copyProperties()踩坑。
2023-08-10 23:22:07 469 1
原创 dfs+回溯做题笔记
2.由于需要回溯,因此在回溯的时候不要忘了将状态还原。例如计数器减一,还原是否来过的标记数据(boolean[][] visited)1.dfs需要将循环内的所有可能情况都试一遍,直到找到了才终止循环。收获:本题是经典的dfs暴力搜索题,用到了dfs+回溯。
2023-08-10 11:30:14 246
原创 ThreadLocal源码解析
threadLocalHashCode:threadLocal对象的hashCode,一个ThreadLocal对象都有一个属于自己的hashCode,不同的ThreadLocal对象的hashCode各不相同,在set和get ThreadLocalMap的时候起到hash的作用。HASH_INCREMENT:生成ThreadLocal对象时hashCode的增量,也是用于生成hashCode的。ThreadLocal的常见用法:保存用户信息,在调用时可以不用传参,直接get。
2023-08-04 11:58:29 108
原创 springmvc统一异常处理拦截器
也可以让不同的异常返回不同的结果,捕获什么异常由@ExceptionHandler的value属性决定,传入一个类对象(可以通过反射获得)也可以使用@ControllerAdvice+@ResponseBody+@ExceptionHandler实现。使用@RestControllerAdvice+@ExceptionHandler实现。创建一个异常处理的类,放在config包下。
2023-07-29 22:39:38 259
原创 springmvc登录拦截器
和是spring的两大重要思想,前者指的是控制反转(Invers of control)后者指的是面向切面编程(Aspect oriented programing)。aop的一大作用就是能将很多,而用或者的方式统一给需要此功能的方法进行一个因此,aop的一大用途就是用来简化重复而一致的一些功能比如(日志打印、登录校验、性能监控、事务管理等)。
2023-07-29 21:46:03 316
原创 Error creating bean with name ‘dataSource‘ defined in class path resource spring报错
总结:如果spring项目使用到了数据库,一定记得要添加jdbc的依赖,在配置文件中配置好四项参数,(username、password、url、driver-class-name缺一不可)application.ymal中缺少了jdbc驱动的配置。
2023-07-24 18:09:21 919
原创 DENSE_RANK 窗口函数
通过以上代码的演示,我们就拿到了分部门(department)的薪水(salary)排名,我们只需要选出薪水排名(rk)小于等于3的并且和department表连接查询就可以完成上题了。排名值基于的表达式。如果省略 ORDER BY,则所有行的返回值为 1。DENSE_RANK 窗口函数基于 OVER 子句中的 ORDER BY 表达式确定。函数返回值的规律:order字段的值相同则排名相同;函数返回值:即order字段在partition分组内的排名,适用于 DENSE_RANK 函数的窗口子句。
2023-07-21 15:45:32 256
原创 javascript匿名函数之立即调用函数
看上去像是调用一个函数,但是奇怪的是又没有函数名。它由两部分组成:匿名函数和调用部分。其实上面这种写法叫做。
2023-07-06 15:41:43 286
原创 sql何时会触发索引失效
例如,查询`SELECT * FROM table_name JOIN other_table ON table_name.primary_key=other_table.foreign_key`,如果primary_key是一个主键或唯一索引,而foreign_key是一个对应的键,那么type将是eq_ref。这是查询效率最低的一种情况。请注意,如果MySQL在处理查询时使用多个索引,则key列可能会显示多个索引名称,这时需要对多个索引的使用顺序进行优化(例如,使用覆盖索引或联合索引)以提高查询性能。
2023-06-06 15:29:03 656
原创 如何将maven项目改为springboot项目?
Spring Boot 提供了大量的自动配置和依赖,可以根据需要进行选择和配置。例如,可以使用 `spring-boot-starter-web` 依赖来启用 Web 应用程序支持,使用 `application.properties` 或 `application.yml` 文件来配置应用程序的属性等。另外,需要将 Maven 项目中的代码按照 Spring Boot 的命名约定进行重构,例如将控制器类命名为 `XXXController`、将服务类命名为 `XXXService` 等。
2023-06-01 21:43:07 2882
原创 JAVA8新特性之接口默认方法
如果某个类同时实现了多个接口,并且这些接口中包含了相同的默认方法,则需要在实现类中显式地重写该方法,以避免歧义。这意味着一旦接口的方法发生变化,所有实现该接口的类都需要相应地进行修改,这对于已经发布的库和框架来说可能会带来一定的负担。总之,接口默认方法是Java 8引入的一个新特性,它允许在接口中定义具有默认实现的方法。接口默认方法是Java 8引入的一个新特性,它允许在接口中定义具有默认实现的方法。Java 8引入了接口默认方法,可以通过在接口中定义具有默认实现的方法来解决这个问题。
2023-05-10 11:28:38 710 1
原创 JUC中sleep(long n)和wait(long n)的区别
2.sleep不需要强制和synchronize配合使用,但wait需要和synchronize一起使用。3.sleep再睡眠的同时,不会释放对象锁,但wait再等待的时候会释放对象锁。1.sleep是Thread类的方法,而wait是Object类的方法。
2023-05-05 20:40:00 143
原创 Java语法中的方法引用::是个什么鬼?
方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。,不用Lambda表达式,直接通过方法引用的形式可读性更高一些。函数式接口(Functional Interface)就是一个。通常被用在Lambda表达式和方法引用上。2.Lambda表达式与"::"方法引用。case2:正式工作中用的比较多的。case4:"::new"实例化对象。case3:调用对象方法。当Lambda表达式中。方法的方式,它需要由。的Lambda表达式。
2023-03-08 17:56:05 649
原创 自动化和selenium
比较熟悉的就是linux中的驱动,是用来直接与硬件打交道的底层软件,对操作系统提供一些接口。浏览器的驱动也是这个道理,selenium可以通过驱动去调用浏览器的native方法。浏览器,selenium包,java/python环境(java版本至少8),浏览器驱动(chromeDriver)随着功能的增加,版本越来越多,版本回归的压力越来越大,仅仅通过人工测试来回归所有的测试用例是不现实的。1.浏览器支持丰富,例如chrome,filefox,IE,safari,edge等。3.开源免费,对学习者友好。
2023-02-09 23:39:49 312
原创 软件测试基本概念
没有足够的时间预留个测试活动,否则将导致测试不充分,从而把缺陷遗留给用户;当需求规格说明书没有提到的功能,判断标准以最终用户为准,当程序没有实现其最终用户合理预取的功能要求时,就是软件错误。设计: 将需求细化成一个个任务,进行技术设计(设计哪些接口,采用哪些技术),产出设计文档。需求分析: 分析用户需求是否合理(市场分析,技术可行性分析),产出软件需求文档。预防性维护: 避免产品在线上出现一些其他的问题,使用一些预防的手段。分为6个阶段:需求分析、计划、设计、编码、测试、 运行维护。
2023-02-06 18:38:21 1599 1
原创 手把手教你用springboot实现jdk文档搜索引擎
文档的内容很多,数量高达上万篇,因此当我们想查找一个东西的时候想找到对应的文档很难,因此我们可以写一个搜索引擎来快速的查找到我们想要的文档。使用mybatis框架进行数据库操作需要 Mapper 接口和 对应的 Mapper.xml,因此在 indexer 包下新建 mapper 包,在mapper 包下新建 IndexerMapper 接口,在接口内定义插入正排索引和倒排索引的方法。打开浏览器,在搜索框中输入我们想要查找的关键词,点击搜索就能查找到 JDK 文档中所有与关键词有关的文档。
2023-01-04 20:35:10 2791 6
原创 springboot 搜索引擎项目使用到的技术
stream()将集合变成一个流,parallel()表示使用并行流,使用多核cpu时可以显著的提升速度,map()表示一个映射,将原来集合的 File 类型 映射成 我们需要的 Document 类型。由于构建索引时,我们需要用到很多的 集合 ,而Java 8 中的 Stream 是对集(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。
2023-01-01 17:14:22 2131 17
原创 spring boot 实现搜索引擎的设计思想
我们维护的也是一个key-value结构,key是一个词,value是一个集合,集合中是包含这个词的文章id,还会包含一些其他东西,由于我们要对搜索结果进行排序,还需要加入权重属性。然后我们将计算出来的正排索引和倒排索引保存到数据库中,当我们在前端浏览器界面输入一个关键词时,就可以先通过倒排索引的到docId,再根据docId得到相应的文档内容,最终显示再浏览器界面上。比如我要查找一本书叫 《红楼梦》,那么我直接在所有结果中进行遍历查找,当我们找到书名为《红楼梦》的结果时,就代表我们查找到了。
2023-01-01 14:50:19 1406
原创 java 计算日期差
1.我们要用到 SimpleDateFormat 类,首先设置日期格式2.输入时间3.使用 getTime()获取当前相对于 Date 类中时间原点相差的 毫秒数。
2022-12-31 23:44:47 5142 2
原创 lambda 表达式实现自定义优先级队列顺序
lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda 表达式(Lambda expression)可以看作是一个匿名函数,lambda 表达式主要作用于 匿名内部类。基于数学中的λ演算得名,也可称为闭包(Closure)
2022-12-31 22:29:48 1684
原创 SpringBoot单元测试
1.可以非常简单,直观,快速的测试某一个功能是否正确2.可以帮我们再打包的时候,发现一些问题。因为再打包之前,所有的单元测试必须通过,否则无法打包3.单元测试不会污染数据库,可以再不对数据库进行任何改变的情况下进行测试(比如测试mybaits)
2022-12-28 15:26:56 1383
原创 回调函数~
很显然,在主函数A吃完饭后能干一件事,但是干什么事是不由主函数确定的,而是由回调函数确定的。回调函数就是 主函数中需要动态补充的那一部分逻辑。也就是说:咱们自己定义的函数,不由我们去调用,而是由另一个函数(主函数)去调用。当一个函数作为参数出现在另一个函数中时,那个作为参数的函数就是回调函数。何时调用回调函数:当某个函数内部缺少一段逻辑,需要。当然 主函数A也可以是 我吃完饭后。,此时回调函数就变成了。例如主函数:A说 我。
2022-12-27 17:19:20 256
原创 springboot 日志
springboot 自定义日志的打印:1.在一个类中先获取打印日志对象2.使用日志对象提供的方法实现日志的打印1.有很多Logger类,一定要使用org.slf4j下的Logger2.这里要把类对象传进去时因为日志需要输出类信息。
2022-12-25 22:35:31 310
原创 在springboot创建之后简单的添加依赖
4.如果spring.io速度比较慢可以换成springboot.io点击ok。5.左上角搜索需要的插件,在勾选上,点击ok就添加好了。2.中间上面输入editstarters。3.点击Edit Starters。1.idea 左上角点击File。2.右键,点击generate。1.左上角输入plugins。1.进入到pom.xml中。2.点击Settings。3.点击install。
2022-12-25 22:07:16 3976 1
原创 springboot 配置文件 application.properties 中文乱码问题解决方案
2.搜索 encoding。1.打开settings。3. 全部改成utf-8。
2022-12-24 13:23:34 875
原创 spring注解@Resource 和 @Autowired的区别
相比于@Autowired,多了一些属性,使得使用起来更方便。@Resource 是 JDK提供的,位于。
2022-12-23 14:59:31 340
原创 spring中简单的存和取bean对象
Configuration 配置。@Controller 控制器。@Repository 仓库。@Component 组件。@Service 服务。
2022-12-22 00:37:24 260
原创 jdk文档下载(html格式)
1.首先输入下载界面的网址:Java Downloads | Oracle页面最上方时最新的jdk版本,往下滑动就能看到jdk8最下方有一个Documentation Download,点击,进入到如下界面,再i点击箭头位置,即可下载。下载之后解压的到一个docs文件夹。点击进入再点击api文件夹就看到所有的jdk文档了
2022-12-07 23:49:05 1194
原创 树和图的存储
将每个单链表的头节点用h数组存起来h[N]。当我们要新增一条有a指向b的边是,就让节点b头插到h[a]中。开一个二维数组,g[a,b]就代表一条a指向b的边(一般不用,比较费空间o(n^2)),适用于稠密图)系统讲解常用算法与数据结构,给出相应代码模板,并会布置、讲解相应的基础算法题目。图分为有向图和无向图。有向图:a->b无向图:a->b && b->a。如果我们有n个点就开n个单链表(数组实现的单链表)所以我们可以直接用存储树的方式来存储图。每个单链表表示这个节点等到达的所有的点。
2022-11-26 19:39:48 548
原创 idea 使用 spring boot 创建工程没有pom.xml 解决方案
2. 上一步点击next之后进入如下界面。在第三行Type处可以看到默认是Gradle-Groovy。我们不要点这个,我们需要点击右边的小三角调出下拉框,选择MavenPOM。
2022-11-25 23:11:38 5651
原创 数据结构——堆
第一个元素(根节点)的下标是1,左孩子节点的下标是2*父节点下标,右孩子节点的下标是2*父节点下标+1(参考完全二叉树的定义)。之所以要将第一个元素的下标设为1,是因为如果下标设为零了,根节点的左孩子的下标计算出来也是0就冲突了。down:假设当前是一个小根堆,当前节点大于孩子,那么就将当前节点和孩子中较小的那一个进行交换。3.删除最小值:将最后一个元素覆盖根节点,size--再对根节点进行down操作(删除最后一个的原因是堆是一个完全二叉树,需要去维护这个性质)heap[1] = heap[size];
2022-11-25 19:52:01 333
原创 数据结构——并查集
优化过程在第一次寻找根节点的过程中,将路径中的所有节点的父节点都直接指向根节点。那么以后路径中的节点再查询时间复杂度就都是O(1)了。时间复杂度O(logn)n是集合的节点数量。如何合并两个集合:假设px 是x的集合编号,py是y的集合编号。以上查询属于哪个集合的步骤时间复杂度为O(logn),为了达到近似O(1)的时间复杂度。树根的编号就是整个集合的编号。p[x]表示x的父节点。如何判断树根:如果p[x] == x 那么x就是树根。第二部直接将路径中的所有节点的父节点直接改为根节点。
2022-11-24 12:41:03 405
原创 数据结构——单链表
面试中多用动态链表,笔试中new Node节点很慢,一般不用动态链表而使用数组模拟单链表。用数组e[]来存储元素的值,数组ne[]存储元素的下一个节点的下标。数组e和数组ne之间通过下标联系起来。用-1来表示null。变量idx存储当前已经用到了哪个节点。变量head保存头节点的下标。邻接表可以用来存储数和图。
2022-11-22 20:31:14 196
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人