【面试总结】Java面试题目总结(一)

(以下仅为个人见解,如果有误,欢迎大家批评并指出错误,谢谢大家)

1.项目中的验证码功能是如何实现的?

  • 第一步:在项目的pom.xml文件中导入 EasyCaptcha 的依赖;
<dependency>
   <groupId>com.github.penggle</groupId>
   <artifactId>easy-captcha</artifactId>
   <version>2.6.2</version>
</dependency>
  • 第二步:Controller层写一个captcha接口,接收前端请求
@Controller
public class CaptchaController {
   
   @RequestMapping("/captcha")
   public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
       CaptchaUtil.out(request, response);
   }
}
  • 第三步:前端页面定义接口
<img src="/captcha" width="130px" height="48px" />

不要忘了把`/captcha路径从拦截器中排除

2.怎么自己实现一个验证码功能?从生成到回显到验证,怎么设计?

  • 生成验证码:

创建一个生成验证码的类,这个类专门负责生成随机的验证码字符串,并且生成对应的验证码图片;
可以使用Java的 BufferedImage 类来创建验证码图片,并在图片上绘制生成的验证码文字。

  • 回显验证码到前端页面:

将生成的验证码图片以 Base64 编码字符串的形式返回给前端页面,或者直接生成一个验证码图片的 URL 地址,让前端页面可以通过这个 URL 获取验证码图片进行展示。

下面是一个小Demo

// 验证码生成器类
public class CaptchaGenerator {
    public static Captcha generateCaptcha() {
        // 在这里使用你选择的验证码生成库,例如 EasyCaptcha 或者其他验证码生成工具
        // 生成验证码并返回
    }
}
// Controller 类
@RestController
public class CaptchaController {

    // 生成验证码图片并返回给前端
    @GetMapping("/captchaImage")
    public ResponseEntity<String> getCaptchaImage() {
        Captcha captcha = CaptchaGenerator.generateCaptcha();
        String base64Image = captcha.getBase64Image(); // 获取验证码图片的 Base64 编码字符串
        return ResponseEntity.ok(base64Image);
    }

3.==equals的区别?

== 操作符用于比较两个对象的引用是否相同,即它们是否指向内存中的同一块地址。
对于基本数据类型,==用于比较它们的数值是否相等。
当使用 == 操作符比较两个对象时,如果两者指向内存中的相同对象,则返回 true;否则返回 false。

equals 方法是 Object 类中定义的方法,用于比较两个对象的内容是否相等。
在 Object 类中,equals 方法默认实现是与 == 相同的,即比较两个对象的引用是否相同。
通常情况下,我们会在自定义类中重写 equals 方法,以便根据对象的内容来判断是否相等。

总结起来,== 用于比较两个对象的引用是否相同,而 equals 方法用于比较两个对象的内容是否相同。

4.重写equals要重写什么?为什么?

       在Java中,对象的hashCode方法用于计算对象的哈希码,而哈希码在哈希表中用于快速查找对象。当我们将自定义对象用作哈希表的键时,需要确保对象的hashCode方法返回的哈希码能够与equals方法一致。
       哈希表在查找键值对时,首先会根据键的哈希码找到对应的桶,然后在桶中使用equals方法进行比较来找到对应的值。如果equals方法被重写,hashCode方法没有被重写,那么在哈希表中查找时,可能无法正确地找到对应的值。
       根据Java规范,如果两个对象根据equals方法是相等的,那么它们的hashCode方法应该返回相同的值。所以在重写equals方法时,为了保证对象的一致性,必须同时重写hashCode方法,以确保相等的对象具有相等的哈希码,从而在哈希表中正确地进行查找。

5.见过哪些重写equals的类?

  • String类:String类重写了equals方法,用来比较字符串的内容是否相等。
  • Integer类:Integer类重写了equals方法,用来比较两个整数对象的值是否相等。
  • Boolean类:Boolean类重写了equals方法,用来比较两个布尔值对象是否相等。
  • Date类:Date类重写了equals方法,用来比较两个日期对象是否代表同一时刻。
  • 自定义类:在自定义的类中,如果需要自定义相等性判断逻辑,通常会重写equals方法。比如,你可以在自定义的Person类中重写equals方法,根据姓名和年龄来判断两个人是否相等。

6.两个对象的Hashcode相等,这两个对象相同吗?

       如果两个对象的hashcode相等,它们并不一定相同,这就是所谓的哈希冲突。因为哈希码值是通过对象的内容计算出来的,不同的对象可能会有相同的哈希码值。这种情况下,哈希表中就会出现冲突,需要使用equals方法进行进一步的比较。
       当我们使用具有哈希表结构的集合类(例如HashMap、HashSet等)时,对象在存储和检索时会使用哈希码值。哈希表可以看做是一个数组,每个元素都是一个链表或红黑树。当我们向哈希表中添加元素时,系统会自动调用该元素的hashCode方法,计算出哈希码值,并将其插入到对应的位置上。当我们需要查找元素时,系统也会先使用hashCode方法计算出哈希码值,然后根据哈希码值找到对应的位置,最后使用equals方法进行比较,找到目标元素。
       因此,如果两个对象的hashCode相等,只能说明它们存储在哈希表中的位置相同,但不能说明它们一定相同。只有在hashCode相等的情况下,再使用equals方法进行比较,才能判断两个对象是否相等。

7.介绍一下类加载器中的双亲委派?

       类加载器(Class Loader)是负责加载Java类文件并将其转换为Java虚拟机(JVM)可识别的二进制格式的重要组件。在Java程序运行时,每个类加载器都会维护一棵类加载器层次结构。
       双亲委派模型(Parent Delegation Model)是类加载器层次结构中的一个重要概念。它是指当类加载器收到一个类加载请求时,它首先会把这个请求委托给它的父类加载器去处理,如果父类加载器还存在父类加载器,则依次向上委托,直到顶层的启动类加载器。如果父类加载器可以完成类加载任务,就返回类加载结果;否则,子类加载器才会尝试自己去加载。
       双亲委派模型的优势在于保证了Java类的安全性和稳定性。因为在一个类加载器的作用域中,相同名称的类只会被加载一次,而且这个类的加载是由顶层的启动类加载器来完成的。这样就能够避免不同的类加载器对同一个类的多次加载,从而确保了类的唯一性和一致性

8.重写和重载的区别?

  • 重写是指继承关系中,子类继承了父类中同名同参同返回值的方法,但是访问修饰符的限制一定要大于或等于被重写方法的访问修饰符。重写是运行时多态。
  • 重载是指在同一个类中,方法名相同,但是参数列表不同,如参数个数、类型和顺序等。重载是编译时多态。

9.Java多线程中int i进行i++操作会有什么问题吗?如何解决?

  • 在Java多线程中,对一个整型变量 int i 执行 i++ 操作可能会引发线程安全性问题。这是因为 i++ 操作并不是原子操作,它包括读取 i 的当前值、对其进行加一操作、然后将结果写回 i。在多线程环境下,如果有多个线程同时对 i 执行 i++ 操作,就可能导致竞态条件和数据不一致的问题。

为了解决这个问题,可以采取以下几种方法来保证对 i 的操作是线程安全的:

  • 使用synchronized关键字:
           可以使用synchronized关键字来保护对 i 的操作,确保同一时刻只有一个线程可以执行 i++ 操作。例如:

    synchronized (this) {
       i++;
    }
    
  • 使用AtomicInteger类:
           可以使用java.util.concurrent.atomic.AtomicInteger类来代替普通的 int 类型,它提供了一系列原子操作,可以保证对 i 的操作是线程安全的。例如:

     AtomicInteger atomicI = new AtomicInteger(0);
     atomicI.incrementAndGet();
    
  • 使用volatile关键字:
           使用volatile关键字修饰 i 变量,可以确保多个线程看到的是同一个变量副本,从而避免一些可见性问题。但这并不能解决i++操作的原子性问题,仍需要额外的手段来保证原子性。

  • 使用ReentrantLock:
           可以使用显式的锁来保护对 i 的操作,例如java.util.concurrent.locks.ReentrantLock。通过获取锁之后执行 i++ 操作,然后释放锁,来保证操作的原子性和线程安全性。

10.Redis中有很多Key同时过期,会发生什么现象?在项目业务中会有什么影响?

       在Redis中,如果有很多Key同时过期,会导致Redis的性能下降,并且可能会引发一些问题,例如:

  • Redis CPU 占用率上升:当有大量Key同时过期时,Redis会将其从内存中删除。这个操作可能会消耗大量的CPU资源,导致Redis的CPU占用率上升,影响Redis的性能和稳定性。
  • 缓存穿透: 如果很多Key同时过期,并且这些Key都是热点数据,那么这些数据在被重新加载到Redis之前,如果有大量请求访问这些数据,就会导致缓存穿透问题,使得请求直接打到后端数据库,增加了数据库的负载。
  • 缓存雪崩: 如果很多Key同时过期,那么这些Key在过期之后,如果都同时被请求到,就会导致缓存雪崩问题,使得请求都打到后端数据库,增加了数据库的负载。
  • 数据丢失:如果Redis中的Key同时过期,并且没有进行持久化存储,那么这些过期的数据将会被永久删除。如果这些数据是重要的业务数据,可能会导致数据丢失的问题。

11.Redis中只知道某些数据的前缀,如何查找这一类数据?

在Redis中,可以使用KEYS命令来查找符合特定模式的Key。如果我们只知道某些数据的前缀,可以使用通配符*来匹配后面的字符,从而查找这一类数据。

例如,如果我们想查找所有以"foo_"为前缀的Key,可以使用以下命令:

KEYS foo_*

这个命令会返回所有以"foo_"为前缀的Key列表。需要注意的是,KEYS命令会扫描Redis中的所有Key,如果数据量很大,可能会对Redis的性能产生影响。因此,应该尽量避免频繁地使用KEYS命令。

12.RedisKeysScan的区别?你推荐用哪一个?

KeysScan都是Redis中用于查找Key的命令,但它们在实现方式和使用场景上有所不同。

  • Keys命令会扫描Redis中所有的Key,返回符合特定模式的Key列表。这个命令简单易用,但如果Redis中的Key数量很大,就可能会对Redis的性能产生影响。因此,不建议在生产环境中频繁使用Keys命令。
  • 相比之下,Scan命令更加高效和安全。Scan命令通过游标分步扫描整个数据库,每次返回一部分数据,直到遍历完整个数据库。这种方式可以避免在一次操作中对整个数据库进行扫描,从而减轻Redis的负担,提高命令的执行效率。此外,Scan命令还支持并发修改和过期Key的情况,可以保证在执行期间不会出现数据丢失或重复访问的问题。

13.MySQL数据库中int(5),存储1,查询结果是?

       在MySQL中,对于int(5)来说,括号中的数字只表示显示宽度,并不会影响存储或数据类型的范围。所以存储值为1时,查询结果仍然会返回整数1,后面不会出现乱码。
       这种情况与char和varchar是不同的。对于char和varchar类型,指定的长度是用于限制存储的实际字符数量,而int(5)中的5只是用于指定展示宽度,并不影响实际存储的值。

14.charVarchar的区别?

  • char:char类型是一种固定长度的字符类型,需要指定存储的最大字符数量。存储的值会被固定在指定长度内,如果存储的值超过了定义的长度,会发生截断。如果不足指定长度,会在末尾用空格进行填充;
  • varcharvarchar类型是一种可变长度的字符类型。它也需要指定存储的最大字符数量。但是varchar类型存储的值会根据实际长度动态调整占用的存储空间,不会进行填充或截断。只占用实际需要的存储空间。

15.id = 1 ,怎么给他加一个查询锁?

       在MySQL中,可以通过使用SELECT ... FOR UPDATE语句为特定的行添加查询锁。这样做可以确保在当前事务中对该行的读取操作不会被其他事务所修改。

SELECT * FROM your_table WHERE id = 1 FOR UPDATE;

16.如何给name字段加一个索引。

       可以在已经存在的表上为需要优化查询的字段创建索引:

CREATE INDEX idx_name ON your_table (name);

17.索引列有null值会对索引列有影响吗?

索引列有 NULL 值会对索引的效率和查询结果产生影响。

  • B-Tree 索引中,NULL 值被视为一个特殊值,与其他值分开存储。如果索引列包含 NULL 值,则在索引中将为每个 NULL 值保存一个指针。这样,当查询需要查找 NULL 值时,它会使用这些指针来定位匹配的行。
  • 然而,由于 NULL 值不是实际的值,因此它们无法进行比较运算。因此,在使用索引进行排序或范围查询时,包含 NULL 值的列通常不会被使用。
  • 另外,当查询条件中包含索引列时,如果列包含 NULL 值,那么索引可能无法使用。例如,如果查询条件是 WHERE index_column = 5,并且索引列包含 NULL 值,那么索引可能无法使用,因为索引无法判断 NULL 值是否等于 5。
  • 需要注意的是,如果索引列中包含大量的 NULL 值,那么它可能会影响索引的性能和空间占用。因此,在设计索引时,需要考虑到数据的实际情况和查询需求,适当地处理 NULL 值。例如,可以使用部分索引或过滤条件来排除 NULL 值。

18.复合索引中有NULL值有影响吗?

       在复合索引中,NULL 值对索引的影响是需要注意的。复合索引是由多个列组成的索引,用于加快查询的速度。当涉及到 NULL 值时,以下情况需要考虑:

  1. NULL 值的位置:
           如果复合索引中的某个列包含 NULL 值,那么整个索引的键值也将是 NULL。在这种情况下,该索引项将不会包含具体的值,只会标识为 NULL。因此,在使用复合索引进行查询时,如果需要匹配到具有 NULL 值的列,那么该索引就会被使用。

  2. 匹配 NULL 值:
           如果查询条件中涉及到了包含 NULL 值的列,那么复合索引可能会被使用来筛选满足条件的行。

  3. 不匹配 NULL 值:
           当查询条件排除了 NULL 值时,复合索引可能无法使用,因为索引中的键值包含 NULL 值。此时,数据库可能会选择其他索引或执行全表扫描来满足查询条件。

       需要注意的是,复合索引中的 NULL 值并不会影响索引的创建和维护。它主要会影响到查询时的索引使用情况。

       总结起来,复合索引中的 NULL 值对索引的影响取决于具体的查询条件。如果查询需要匹配或排除包含 NULL 值的列,那么复合索引可能会被使用。而当查询条件不涉及 NULL 值时,NULL 值对索引的影响较小,可能会导致索引无法使用。因此,在设计复合索引时需要考虑到数据的特点和实际查询需求。

19.NOT INNOT EXISTS的区别?

  • NOT INNOT EXISTS 都是用于条件查询中的否定操作符,用于筛选出不满足指定条件的结果。尽管它们可以达到相同的效果,但它们在实现方式和性能方面存在一些区别。

NOT IN 是一个子查询操作符,用于从一个查询结果中排除满足给定条件的行。它通常与子查询结合使用,将子查询结果与外部查询进行比较,并返回不匹配条件的结果。

NOT EXISTSNOT EXISTS 也是一个子查询操作符,用于检查子查询的结果是否为空。如果子查询返回空集,则 NOT EXISTS 为真,否则为假。它常用于判断某个条件下是否存在符合要求的数据。

  • NOT IN 使用一个子查询来获取比较值,而 NOT EXISTS 只需确定子查询是否返回结果。
  • NOT IN 适用于对单个列进行比较,而 NOT EXISTS 可以使用子查询中的任意条件进行比较。
  • 从性能角度来看,NOT EXISTS 在某些情况下可能更有效,因为它只需确定子查询是否返回结果,而 NOT IN 需要将所有结果加载到内存中进行比较。

20.请自己设计一个算法实现字符串的反转?

方法一:可以使用双指针来实现字符串的反转

  1. 首先将字符串转换为字符数组;
  2. 使用双指针法,一个指向数组的头部,一个指向数组的尾部。
  3. 交换数组头部和尾部的元素。
  4. 将指针向中心靠拢,重复执行第3步,直到指针相遇。

源码如下:

package com.kfm;

import java.util.Scanner;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class StringReversal {
    public static String reverseString(String s){
        if (s == null || s.length() == 0) {
            return s;
        }
        // 将字符串转换为字符数组
        char[] arr = s.toCharArray();
        int left = 0;
        int right = arr.length - 1;
        while (left < right){
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
        // 将字符数组转换为字符串
        return new String(arr);
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        System.out.println("反转后的字符串为:" + reverseString(s));
    }
}

运行效果:

在这里插入图片描述

方法二:使用递归实现字符串的反转

源码如下:

package com.kfm;

import java.util.Scanner;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class StringReversal02 {
    public static String reverseString(String s) {
        // 递归结束的条件:当字符串长度为0或者1时,无需再反转字符串,直接返回字符串
        if (s.length() <= 1) {
            return s;
        }
        // 递归调用:将字符串分解为首字符和剩余部分,然后对剩余部分进行递归反转,并将首字符放在最后
        return reverseString(s.substring(1)) + s.charAt(0);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        System.out.println("反转后的字符串为: "+ reverseString(s));
    }
}

运行效果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/237415.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

联邦蒸馏中的分布式知识一致性 | TIST 2024

联邦蒸馏中的分布式知识一致性 | TIST 2024 联邦学习是一种隐私保护的分布式机器学习范式&#xff0c;服务器可以在不汇集客户端私有数据的前提下联合训练机器学习模型。通信约束和系统异构是联邦学习面临的两大严峻挑战。为同时解决上述两个问题&#xff0c;联邦蒸馏技术被提…

【开源】基于Vue+SpringBoot的教学资源共享平台

文末获取源码&#xff0c;项目编号&#xff1a; S 068 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S068。} 文末获取源码&#xff0c;项目编号&#xff1a;S068。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课…

Camunda 7.x 系列【60】流程分类

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. 案例演示2.1 后端2.2 前端2.3 测试1. 前言 钉钉中的OA审批分类: 企业级的业务…

AI 绘画 | Stable Diffusion 真实人物动漫二次元化

前言 如何让一张真实人物变成动漫二次元风格的图片?Stable Diffusion WebUI加上contolNet扩展插件帮你快速实现。快来使用AI绘画打开异世界的大门吧!!! 真人动漫化 选择大模型 首先选择一个二次元风格人物画风的大模型(我这里选择是SD1.5通用模型anything-v5-PrtRE.sa…

智能优化算法应用:基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂群算法4.实验参数设定5.算法结果6.…

Nginx的location和rewrite的使用

目录 常用的Nginx 正则表达式 location location 大致可以分为三类&#xff1a; 精准匹配&#xff1a;location / {...} 一般匹配&#xff1a;location / {...} 正则匹配&#xff1a;location ~ / {...} location 常用的匹配规则 location 优先级 location 示例说明…

Kafka生产问题总结及性能优化实践

1、消息丢失情况 消息发送端&#xff1a; &#xff08;1&#xff09;acks0&#xff1a; 表示producer不需要等待任何broker确认收到消息的回复&#xff0c;就可以继续发送下一条消息。性能最高&#xff0c;但是最容易丢消息。大数据统计报表场景&#xff0c;对性能要求很高&am…

HTML常用表单元素使用?

目录 一、常用表单元素使用的关键字二、常用表单元素使用的效果与作用&#xff08;1&#xff09;password : 保护用户的隐私(2) email: 输入邮件&#xff08;比如QQ邮件&#xff09;(3)、number : 输入框只能输入数字&#xff08;4&#xff09;、tel : 常用于输入电话号&#x…

一、微前端目标、前端架构的前生今世、微前端架构优势和劣势、软件设计原则与分层

1、目标 2、前端架构的前世今生 ① 初始&#xff1a;无架构&#xff0c;前端代码内嵌到后端应用中 ② 后端 MVC 架构&#xff1a;将视图层、数据层、控制层做分离 缺点&#xff1a;重度依赖开发环境&#xff0c;代码混淆严重&#xff08;在调试时&#xff0c;需要启动后端所有…

Flink之迟到的数据

迟到数据的处理 推迟水位线推进: WatermarkStrategy.<Event>forBoundedOutOfOrderness(Duration.ofSeconds(2))设置窗口延迟关闭&#xff1a;.allowedLateness(Time.seconds(3))使用侧流接收迟到的数据: .sideOutputLateData(lateData) public class Flink12_LateDataC…

前端框架(Front-end Framework)和库(Library)的区别

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

WPF实现更加灵活绑定复杂Command(使用Microsoft XAML Behaviors 库)

1、安装NuGet 2、在XAML的命名空间引入&#xff1a; xmlns:i"http://schemas.microsoft.com/xaml/behaviors" 3、使用&#xff1a; <Canvas Background"Aqua"><Rectangle Stroke"Red" Width"{Binding RectModel.RectangleWidth}…

Docker基础概念解析:镜像、容器、仓库

当谈到容器化技术时&#xff0c;Docker往往是第一个被提及的工具。Docker的基础概念涵盖了镜像、容器和仓库&#xff0c;它们是理解和使用Docker的关键要素。在这篇文章中&#xff0c;将深入探讨这些概念&#xff0c;并提供更丰富的示例代码&#xff0c;帮助大家更好地理解和应…

【AI绘图】 学习 prompt 画图,收集网站

文章目录 在线画图网站Prompt模型下载AI 工具箱 在线画图网站 【强推】搜图&#xff1f;也可以在线画图&#xff0c;质量很高&#xff01;&#xff1a;https://lexica.art/ Lexica 是一个搜索 AI 生成图片的网站&#xff0c;可以根据图片本身关联性或描述文本&#xff08;prom…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含python、JS工程源码)+数据集+模型(五)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存4. 上传结果5. 小程序开发1&#xff09;查询图片2&#xff09;查询识别结…

计算机网络——期末考试复习资料

什么是计算机网络 将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路和通信设备连接起来&#xff1b;实现资源共享和数据传递的计算机的系统。 三种交换方式 报文交换&#xff1a;路由器转发报文&#xff1b; 电路交换&#xff1a;建立一对一电路 分组交换&a…

大数据驱动下的人口普查:新时代下的新变革

人口普查数据大屏&#xff0c;是指一种通过大屏幕显示人口普查数据的设备&#xff0c;可以将人口普查数据以可视化的形式呈现出来&#xff0c;为决策者提供直观、准确的人口数据。这种大屏幕的出现&#xff0c;让人口普查数据的利用变得更加高效、便捷。 如果您需要制作一张直观…

手写VUE后台管理系统10 - 封装Axios实现异常统一处理

目录 前后端交互约定安装创建Axios实例拦截器封装请求方法业务异常处理 axios 是一个易用、简洁且高效的http库 axios 中文文档&#xff1a;http://www.axios-js.com/zh-cn/docs/ 前后端交互约定 在本项目中&#xff0c;前后端交互统一使用 application/json;charsetUTF-8 的请…

appium安卓app自动化,遇到搜索框无搜索按钮元素时无法搜索的解决方案

如XX头条&#xff0c;搜索框后面有“搜索”按钮&#xff0c;这样实现搜索操作较为方便。 但有些app没有设置该搜索按钮&#xff0c;初学者就要花点时间去学习怎么实现该功能了&#xff0c;如下图。 这时候如果定位搜索框&#xff0c;再点击操作&#xff0c;再输入文本后&#x…

【QT入门】基础知识

一.认识Qt qt是一套应用程序开发库&#xff0c;与MFC不同是跨平台的开发类库&#xff0c;主要用来开发图形界面。完全面向对象容易扩展。 优点&#xff1a;1.封装性强&#xff0c;简单易学 2.跨平台 3.独立编译为本地代码 二.qt工程 1.常见的工程文件有这两种…