- 博客(260)
- 问答 (1)
- 收藏
- 关注
原创 时常在面试中被问到的多线程问题:下篇
你也可以实现自己的拒绝策略,通过实现接口并覆盖方法。// 自定义处理逻辑 System . out . println("Task " + r . toString() + " rejected from " + executor . toString());// 可以记录日志,或者执行其他处理措施 } }
2024-06-28 18:29:32
840
原创 时常在面试中被问到的多线程问题:上篇
进程:进程是一个程序在其自身的地址空间中运行的实例。每个进程都有自己的内存空间、数据段、代码段和系统资源(如文件描述符、设备等)。线程:线程是进程中的一个执行路径。一个进程可以包含多个线程,所有线程共享进程的资源(如内存、文件描述符等)。所属类Object类。用途:使当前线程等待,直到其他线程调用该对象的notify()或方法。锁机制:必须在同步块或同步方法中使用,即调用wait()方法的线程必须持有该对象的监视器锁。当调用wait()方法时,线程会释放锁并进入等待状态,直到被唤醒。所属类。
2024-06-28 18:29:11
1187
原创 时间复杂度与空间复杂度的计算
(O(1)) 表示算法只需要常量级别的额外空间,不会随着输入数据的大小 (n) 增加而增加。也就是说,无论处理的数据有多大,算法所需的额外内存空间始终是固定的。它们仅仅需要少量的临时变量(例如用于交换元素的变量),所以它们的空间复杂度是 (O(1))。时间复杂度是衡量算法执行所需的时间随输入数据规模 (n) 增加而增加的速率。(O(n^2)) 表示算法的运行时间与输入数据规模的平方成正比。冒泡排序在每一轮中都要通过相邻元素的比较和交换,将最大(或最小)的元素“冒泡”到数组的一端。
2024-06-03 09:42:53
393
1
原创 面试官:平衡二叉树、红黑树、HashMap、链表之间绕来绕去的面试题都在这里了
当哈希冲突频繁发生时,一个桶中的元素可能非常多,导致链表长度过长,从而使得查找、插入和删除操作的时间复杂度从平均的 O(1) 退化为 O(n)。能够在一个桶中的元素数量超过一定阈值时(默认是 8),将链表转换为红黑树,从而将查找、插入和删除操作的时间复杂度从 O(n) 改善为 O(log n)。如果存在相同的键,更新对应的值;扩容操作会将所有的桶重新分配到一个新的、更大的数组中,并重新计算每个键的哈希值,将其放置到新的桶中。通过计算键的哈希值确定对应的桶,然后遍历该桶中的链表或红黑树来查找匹配的键。
2024-06-03 09:21:01
588
原创 如何理解:选择排序中交换可能改变相同元素的相对顺序?
算法复杂度:两者在最坏和平均情况下的时间复杂度相同,都是 (O(n^2))。但是选择排序在交换次数上通常比冒泡排序少。实现方式:选择排序每次找到最小(或最大)元素放到已排序部分,冒泡排序则是通过多次相邻元素的比较和交换来排序。稳定性:冒泡排序是稳定排序,选择排序是不稳定排序(因为选择排序中交换可能改变相同元素的相对顺序)。适用场景:在实际应用中,两者的使用较少,通常使用更高效的排序算法如快速排序或归并排序。但在数据量小且对交换次数要求高的情况下,可以考虑选择排序。
2024-06-03 09:19:47
1126
2
原创 Comparable 和 Comparator 有什么区别?
接口用于提供一种特定的比较规则,可以对不同类的对象进行排序。接口用于给定类的实例提供自然排序的方法,而。
2024-05-22 17:29:14
224
原创 java中Collection 和 Collections的区别
方法创建一个不可修改的集合,尝试修改这个不可修改的集合会抛出异常。是一个工具类,提供了对集合进行各种操作的静态方法。表示集合的抽象概念,定义了集合的基本行为,而。以下是一个简单的示例代码,演示了如何使用。集合,并向其中添加了几个整数。方法获取集合中的最大值。在这个示例中,首先创建了一个。方法对集合进行排序,并使用。
2024-05-22 17:26:55
358
原创 java中关于HashSet、HashMap 和 Hashtable的面试题总结
实现了高效的键值对存储和查找,平均情况下插入、删除和查找操作的时间复杂度为O(1)。方法),然后将元素存储在哈希表的对应位置上。如果该位置已经有元素存储,新增流程主要涉及计算哈希值、定位桶位置、插入节点等步骤。可以实现在常数时间复杂度内向哈希表中插入新的键值对。认为新元素重复,不会将新元素添加进去。方法来比较新元素和已存在元素是否相等。如果不需要考虑线程安全性,并且需要支持。会首先计算元素的哈希码(通过调用元素的。的使用已经不推荐,通常建议使用。需要注意的是,为了正确保证。无法正确判断元素是否重复。
2024-05-20 14:36:25
916
原创 CentOS7 安装 Mysql 5.7:密码查看与修改、更改端口、开机启动
在之前的版本中,密码字段的字段名是 password,5.7版本改为了 authentication_string。退出 mysql,编辑 /etc/my.cnf 文件,删除 skip-grant-tables=1的内容。使用临时密码登录后,不能进行其他的操作,否则会报错,这时候我们进行修改密码操作。原因是Mysql的GPG升级了,需要重新获取,使用以下命令即可。这一行配置让 mysqld 启动时不对密码进行验证。
2024-05-20 14:35:25
933
原创 面试官:BIO、NIO 和 AIO 有什么区别?
BIO适用于连接数较少的情况,NIO适用于连接数较多但连接活跃度不高的情况,而AIO适用于连接数较多且连接活跃度较高的情况。选择合适的I/O模型取决于具体的应用场景和性能要求。BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)是Java中用于处理I/O操作的三种不同的编程模型.BIO使用阻塞I/O模型,NIO使用非阻塞I/O模型,AIO使用异步I/O模型。以下是他们的各自介绍以及代码示例。
2024-05-11 16:42:54
182
原创 面试官:请把ArrayList与LinkedList、Vector、Array做个比较
如果在单线程环境下对性能要求不高,但是需要线程安全性,也可以使用。如果在单线程环境下,并且需要较好的性能,可以使用。如果在多线程环境下需要安全地操作集合,可以使用。是一种动态大小且可以存储不同类型元素的集合类。是一种固定大小且类型固定的数据结构,而。适用于插入和删除操作较多的场景。适用于随机访问较多的场景,而。都是Java中常用的集合类。接口的可变大小的数组。
2024-05-11 16:42:12
795
原创 java反射常被面试官问到的四个问题
反射机制是指在运行时,动态地获取类的信息(如类名、属性、方法等),并可以在运行时操作类或对象的属性、方法等。在Java中,反射主要通过包中的类来实现。
2024-05-07 16:19:07
1026
原创 若依ruoyi-vue前端异常处理
文件是基于 axios 的封装,用于统一处理请求参数、请求头、错误提示信息等。这些功能的封装使得在 Ruoyi Vue 中进行 HTTP 请求时可以更加方便和统一,同时也提高了代码的可维护性和可扩展性。
2024-05-07 15:49:17
739
原创 若依ruoyi-vue部署在域名的子目录下应该如何配置
本文相关视频教程:https://www.bilibili.com/video/BV1Fi4y1q74p?修改utils/request.js中的location.href。添加一行base属性。
2024-04-25 14:29:50
692
原创 在若依ruoyi-vue中集成watermark实现页面添加水印
本文将介绍如何在若依Ruoyi-Vue中集成Watermark实现页面添加水印,以保护页面内容版权并增强页面视觉效果。
2024-04-25 14:28:57
940
原创 在若依Ruoyi-Vue中集成mybatisplus实现mybatis增强
MyBatisPlus是基于MyBatis的一款优秀持久层框架增强工具,它在MyBatis的基础上提供了丰富而强大的CRUD操作、条件构造器、全局通用操作、代码生成器等特性,极大地简化了开发过程,提升了开发效率。MyBatisPlus通过无侵入式的设计理念,使得在享受其带来的便利同时,无需对现有MyBatis项目进行大规模改造。
2024-04-25 14:28:08
2370
2
原创 在若依Ruoyi-Vue中集成Knife4j实现Swagger文档增强
Knife4j,原名Springfox-Swagger-UI,是为Swagger接口文档提供增强UI展示效果的工具,它在原生Swagger-UI基础上进行了大量功能扩展与优化。Knife4j凭借其友好的界面、丰富的交互功能、强大的个性化定制能力,成为众多开发者首选的API文档管理工具。集成Knife4j后,即可在若依-Ruoyi-Vue项目中体验到Swagger文档的诸多增强特性,提升API文档的实用性和易用性。和swagger一样,使用或注解启用Swagger,并通过Docket。
2024-04-25 14:26:37
1812
1
原创 当你在大厂遭遇不负责任的领导时
复杂的架构、纷繁的人际关系、个人力量的微弱,以及无法改变的困境,使得许多人心中早已消失了曾经对大厂的憧憬和期待,只剩下无情地交换时间和金钱,如同冷冰般执行任务。我曾关注一位朋友,在大厂里面遭遇了不负责任的领导,她选择了坚守原则,勇敢地挑战不合理的决策,却意外地发现自己不得不面对更多不负责任的高层。她展开了对其他大型企业员工的深度访谈,仔细研究了各种绩效管理工具,逐渐形成了自己的洞察:在职场上,我们并非只需勤勉工作便可事事顺遂,因为其中蕴含了许多人性的复杂问题,而工作的完成需要依靠人来实现。
2024-04-24 11:32:57
320
原创 程序员25岁做什么能够改变35岁被淘汰的命运?
那40岁以上怎么办?如果40岁以上真的不幸被裁员了,并且接下来也实在是找不到工作,之前20年的挣得也不少了,就一边继续找工作,一边躺平吧。躺平的前提是有一定的积蓄,没负债。所以25岁开始请多攒钱,不要乱花钱,不要瞎投资。现在行情不好,毕业后去做程序员的人也少了,也就是等你到了40岁以后能顶替你的晚辈也少了,说不定到了40还真能找到一个工作强度还可以,能让你干到退休的公司呢。以我身边的朋友为例,其实35到40找工作勉强还是能找到的,最近行情不好,我朋友在35~40的年纪,平均三个月能拿到一份offer。
2024-04-24 11:31:11
331
2
原创 若依ruoyi-vue中图标使用介绍
该组件是在src\assets\icons\index.js文件中被注册为全局组件的,可以在项目任意地方使用。所有的图标都在src\assets\icons\svg目录下。可自行添加或者删除图标,所有图标都会被自动导入,无需手动操作。如果你是从 iconfont 下载的图标,记得使用如 Sketch 等工具规范一下图标的大小问题,不然可能会造成项目中的图标大小尺寸不统一的问题。本项目中使用的图标都是 128*128 大小规格的。你可以改变父级的color或者直接改变fill的颜色即可。
2024-04-24 08:43:53
758
原创 若依ruoyi-vue前端组件的使用指南
自定义组件允许开发人员根据项目需求创建新的组件,以实现特定的功能或样式。在Ruoyi Vue中,可以通过Vue的component方法来创建自定义组件。// 定义一个自定义组件
2024-04-23 15:51:39
770
原创 若依vue中的静态路由和动态路由
在使用若依Vue(Ruoyi Vue)时,了解静态路由和动态路由的概念和用法是至关重要的。本文将介绍这两种路由的基本概念、特点以及它们在若依Vue中的应用。静态路由适用于路由规则不经常变化的场景,如主要菜单导航等。动态路由适用于需要根据用户权限或其他条件动态生成路由规则的场景,如权限管理系统。
2024-04-23 14:28:51
3176
原创 ruoyi-vue前端的一些自定义插件介绍
可以查看src/plugins 文件夹index.js文件// 页签操作// 认证对象// 缓存对象// 模态框对象// 下载文件。
2024-04-18 17:25:32
1248
原创 若依vue中关于字典的使用
当需要根据字典的value来获取label进行展示,若依提供了selectDictLabel, selectDictLabels两个方法通过value获取label。main.js里已挂载了这两个方法.
2024-04-12 19:32:07
1467
原创 面试官:vue中插件和组件的区别?
我们还可以通过template属性来编写一个组件,如果组件内容多,我们可以在外部定义template组件内容,如果组件内容并不多,我们可直接写在template属性上。编写一个组件,可以有很多方式,我们最常见的就是vue单文件的这种格式,每一个.vue文件我们都可以看成是一个组件。插件的注册通过Vue.use()的方式进行注册(安装),第一个参数为插件的名字,第二个参数是可选择的配置项。全局注册通过Vue.component方法,第一个参数为组件的名称,第二个参数为传入的配置项。如 vue-router。
2024-04-12 16:50:03
405
原创 面试官:关于int 和 Integer的面试题都在这里了!
这种情况下会出现不可靠的情况,是因为这种缓存机制并不是 Java 语言规范的一部分,而是某些 JVM 实现(比如 OpenJDK)的优化措施。类型的对象,会在编译期间对常量进行优化,将特定范围内的整数常量缓存起来以提高性能。对象的值在这个范围内,且是通过自动装箱创建的,那么它们可能会引用相同的对象,导致。,例如在集合类中,因为集合类不能直接存储基本数据类型,需要使用包装类。比较的是对象的引用是否相同,而不是对象的值是否相等。泛型不能直接使用基本数据类型,但可以使用对应的包装类。在使用时,可以直接使用。
2024-04-12 13:06:36
482
原创 为什么重写 equals 时,必须重写 hashCode?
方法返回的值)来确定元素在集合中的位置。当我们向哈希集合中添加元素时,集合会首先计算元素的哈希值,然后根据哈希值找到元素在集合中的位置。方法中使用的字段来生成哈希值。通常情况下,可以将对象中每个用于比较相等性的字段的哈希值合并起来生成一个新的哈希值。方法中被认为是相等的,则它们必须具有相同的哈希值,以确保它们能够被正确地处理。对象将具有相同的哈希值,因此被哈希集合视为同一个对象。)视为不同的对象,最终导致集合中包含了两个相等的对象。对象具有不同的哈希值,因此被哈希集合(方法,导致两个相等的。
2024-04-03 16:15:30
361
原创 java中 == 和 equals 有什么区别?
是一个操作符,用于比较两个对象的引用是否相同。如果两个对象引用同一个内存地址,则。是一个方法,用于比较两个对象的内容是否相等。通常情况下,如果类没有重写。的作用是相同的,即比较对象的引用是否相同。否则返回 false。在比较基本数据类型时,方法来改变比较的方式,使其比较对象的内容而不是引用。的默认实现就是比较对象的引用。比较的是它们的值是否相等。
2024-04-03 15:57:59
259
原创 PHP Warning: chmod(): Operation not permitted in class-wp-filesystem-direct.php on line 173
当我尝试自动升级wordpress的时候,发现报了如下错误:我尝试把整个wordpress目录改成777,发现不行。chmod 777再更新,可以了。
2024-04-01 16:56:08
357
原创 使用queryWrapper查询语句报:Cannot invoke “Object.hashCode()“ because “key“ is null
在使用QueryWrapper查询语句时报错:“Cannot invoke “Object.hashCode()” because “key” is null”据说,这个问题出现在JDK 17与MyBatis-Plus 3.3.x时会出现。遇到一个奇怪的问题,使用Spring Boot和MyBatis-Plus。我们使用的是MyBatis-Plus的3.3.2版本和JDK 19。将MyBatis-Plus升级到3.5.1版本后,问题得到了解决。
2024-03-28 13:20:24
551
原创 若依ruoyi-vue实现excel导入导出
有时候我们希望导出表格包含标题信息,我们可以这样做。有时候我们希望数据展现为一个特殊的格式,或者需要对数据进行其它处理。Excel注解提供了自定义数据处理器以满足各种业务场景。1、在实体类用Excel注解handler属性指定自定义的数据处理器@Excel(name = "用户名称",handler = MyDataHandler.class)2、编写数据处理器MyDataHandler继承ExcelHandlerAdapter,返回值为处理后的值。@Override。
2024-03-25 19:51:18
6599
3
原创 规避mybaties全表更新风险
MyBatis Plus 提供了 BlockAttackInnerInterceptor (阻断攻击Sql解析器) 插件,该插件可以阻止全表更新和删除操作。在一定程度上,保证了数据库数据的安全。标签中做了if判断,id如果为null,if语句自动去掉,相当于使用了不带条件的更新语句。版本要求:MyBatis Plus 3.4.0 版本以上。标签中使用了不带条件的更新语句。
2024-03-22 09:00:49
260
2
原创 若依ruoyi-vue中的文件上传和下载
前端main.js已经引入了FileUpload组件,所以在其他页面直接使用就行。在自动生成的代码里面没有文件下载,是通过若依自己集成的download插件来实现的。若依现成的功能里面没有文件上传,但是集成了文件上传的组件以及图片上传的组件。若依自带的代码相对简单,利用FileUploadUtils将文件上传到本地。在代码自动生成的时候可以对字段设置为文件上传或图片上传图片类型。文件上传会调用服务器的/common/upload接口上传文件。后端实现相对简单,也是通过FileUtils类来实现的。
2024-03-20 17:26:00
6348
原创 若依ruoyi-vue中的参数验证
创建注解:首先创建一个注解类,用于标记需要进行校验的字段或方法。注解类通常使用@Target和@Retention注解指定其作用目标和生命周期。创建校验器:创建一个校验器类,实现ConstraintValidator接口,并在该类中编写校验逻辑。校验器类通常需要指定两个泛型参数,第一个参数是自定义注解的类型,第二个参数是要校验的字段或方法的类型。应用校验器:在需要校验的字段或方法上使用自定义注解,并指定校验器类。处理校验结果。
2024-03-19 17:47:04
687
原创 若依ruoyi-vue中的的DTO、VO、BO、PO、DO、POJO
POJO的定义是无规则简单的对象,在日常的代码分层中pojo会被分为VO、BO、 PO、 DTO。
2024-03-18 17:21:09
845
原创 若依logback日志配置采坑
推荐改成ThresholdFilter,ThresholdFilter也是基于日志事件的日志级别进行过滤的,但它只允许你指定一个阈值级别。只有达到或超过这个阈值级别的日志事件才会被允许通过过滤器。例如,如果你将阈值级别设置为WARN,那么只有WARN、ERROR和FATAL级别的日志事件才会被允许通过。若依使用的appender过滤器是level,如下述代码,这种过滤器只能导出级别为INFO的日志,warn和error都导出不出来。
2024-02-23 14:02:57
1871
空空如也
Spring Data Elasticsearch @Query 报错
2015-08-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人