热乎的面经——水滴石穿

news2025/4/21 12:31:35

请添加图片描述

⭐️前言⭐️

本文记录博主面试北京某大厂所记录的面经,回答答案仅供参考。

🍉欢迎点赞 👍 收藏留言评论 📝私信必回哟😁

🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

🍉博客中涉及源码及博主日常练习代码均已上传GitHub


请添加图片描述

📍内容导读📍

  • 🍅一面
  • 🍅二面

🍅一面

1、为什么选择测试的岗位?
首先,个人对软件测试是比较感兴趣的,我喜欢在软件中发现错误、解决问题和提高软件质量;其次,软件测试岗位需要的一些特质和能力是比较契合我的,比如说沟通能力、耐心和细心等方面;最后,我想谈下我对软件测试的理解,一个产品在完成开发后,不经过我们测试是不敢轻易上线的,那样将会把bug遗留给用户,直接造成公司的损失,这也让我认识到了这个岗位的重要性。

2、用到的测试工具有哪些?
Postman、Fiddler、selenium

3、为什么选择selenium作为web自动化测试工具?

1)开源免费

2)支持多浏览器。如Chrome、Firefox、edge浏览器等

3)支持多系统。如Linux、Windows、MacOS

4)支持多语言。Java、python、CSharp、Roby、JavaScript

5)selenium包提供了很多可供测试使用的API

4、分享一下项目中最有成就感的一个点

5、针对项目的登录模块设计测试用例
在这里插入图片描述
6、讲一种设计模式,以及你在什么场景下用到了这种设计模式

代理模式
通过创建一个代理对象来控制另一个对象的访问Spring AOP,Spring AOP的实现关键就是动态代理,有两种方式JDK Proxy 和 CGLIB .
在这里插入图片描述

Spring AOP本质就是生成了一个目标对象的代理类,当前端传来请求时,不会将请求直接交给目标对象,而是首先由代理类进行处理,如果满足一定的条件,才会将请求交给目标对象.

比如:如果处理请求前需要登录验证,那么代理类会去验证用户是否登录,如果用户登录了才会将请求交给目标对象并执行核心业务代码,否则代理类将返回响应让用户先登录。

7、如何针对项目去进行接口测试的
根据接口文档分析设计出接口测试用例,利用接口测试工具,比如PostMan输入请求,查看是否能获得预期的响应结果,如果异常可以进一步通过抓包工具Fiddler来获取请求与响应的具体信息(请求的请求头,请求正文;响应的状态码,响应数据格式等信息),进一步排查接口。

8、自动化的稳定性高吗

9、讲一下索引
索引就与书的目录作用相同,是为了提高查询的效率。

主键索引:数据列不允许重复,不允许为NULL,一个表只有一个主键。
唯一索引:数据列不允许重复,允许为NULL,一个表允许多个列创建唯一索引。
普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值。
全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。
复合索引(或称联合索引):复合索引是一种同时包含多个列的索引类型,它可以对多个列进行索引,适用于多条件查询和排序。
聚簇索引:聚簇索引是一种特殊的索引类型,它将数据按照索引列的值进行排序,并将相邻的数据行存储在一起,适用于频繁按照索引列进行查询和排序的情况。

10、索引是越多越好吗?
坏处:
1.索引占用磁盘空间
2.降低插入、更新、删除的效率
3.索引会增加数据库的复杂性,需要对其进行优化和维护。
所以不是越多越好。

11、SpringBoot的核心设计思想
1、约定由于配置:通过一些默认约定来减少配置的复杂性,使得开发者可以更快的搭建一个基于Spring的应用程序。
2、开箱即用:提供一组默认的配置和依赖,使得开发者可以快速地创建一个可用的应用程序,而不必进行大量的手动配置。
3、自动化配置:自动配置Spring框架中的各种组件,如数据源、事务管理、Web应用程序等,开发者可以通过简单的配置文件来进行自定义。
4、模块化设计:讲应用程序分为多个模块,每个模块都有独立的功能和职责,使得应用程序更加灵活和易用。
5、注解驱动:通过注解来驱动应用程序的行为,简化开发过程,提高开发效率。

12、初始化顺序
父类静态代码块-〉子类静态代码块-〉父类代码块-〉父类构造方法-〉子类代码块-〉子类构造方法
13、String a=“ab”,String b=“a”+“b”,a==b true还是false,为什么

false,因为==比较两个对象的内存地址是否相同,即是否是指向相同一个对象,如果是一个对象才会返回true,否则返回false。

如果是比较内容是否相同,应该用equals来进行比较。

14、如何进行白盒测试
白盒测试是基于内部代码结构和实现逻辑的测试。
白盒测试的测试用例:

  • 语句覆盖:测试执行所有代码,测试用例需要覆盖所有的条件语句、循环语句、异常处理语句、判断语句等,以保证程序的正确性。
  • 路径覆盖:测试每个代码的每个路径,以检验程序在不同的路径下的行为是否正确。
  • 边界值分析:针对输入参数的边界值进行测试,以检验程序在边界条件下的行为是否正确。

15、左外连接关键字
left join on

16、SQL:一个表中有学生姓名,语数英科目的成绩,找出各科成绩都大于80分的学生姓名

select name from table_name where math_score >80 and chinese_score >80 and english_score >80

17、SQL:一个表中有学生姓名,语数英科目的成绩,找出数学成绩在120~130之间的学生姓名
select name from table_name where math_score >=120 and math_score <=130

18、Linux命令
列举了常见的linux命令
19、查看日志的命令
● tail -f filename:查看日志(默认最后10行)
● cat -n filename | grep “关键字”:查看日志

20、如何分析日志

  • tail 命令可以用来查看日志文件的最新内容,例如 tail -f /var/log/syslog 可以实时查看系统日志的更新。
  • grep 命令可以用来搜索关键字,例如 grep “error” /var/log/syslog 可以查找系统日志中所有包含 “error” 的行。
  • less 命令可以用来分页查看日志文件的内容,例如 less /var/log/syslog 可以打开系统日志文件并分页浏览其中的内容。

21、抽象类和接口、抽象类中的所有方法都需要实现吗
1、抽象类可以包含非抽象方法,但接口中只能包含抽象方法。
2、类只能继承一个抽象类,但可以实现多个接口。
3、抽象类的目的是实现代码重用,而接口则是为了实现多态性和松耦合。
4、抽象类可以包含构造方法,但接口不能包含构造方法。
5、抽象类中的方法可以有访问修饰符,但接口中的方法都是公共的。

抽象类中的非抽象方法不需要实现。

22、算法题:
题目:

第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回载到每一个人所需的最小船数。(保证每个人都能被船载)。

题解思路:
首先,对体重数组进行排序,然后用双指针来解该题,前指针指向数组头,后指针指向数组尾,如果指针指向的两个数之和<=limit,就让count++,left++,right–,
如果两个数之和>limit,那就让让船只乘体重较大的一个人,即right–,count++。

代码实现:

public class Main {
    public static int numRescue(int[] people,int limit) {
        Arrays.sort(people);
        int left=0,right=people.length-1;
        int count=0;
        while (left<=right) {
            if(people[left]+people[right]<=limit){
                left++;
            }
            right--;
            count++;
        }
        return count;
    }

    public static void main(String[] args) {
        int[] people=new int[]{1,2};
        int limit=3;
        System.out.println(numRescue(people, limit));
    }
}

23、期望的测试开发工作的工作内容
七分测试,三分开发

🍅二面

1、项目设计初衷
2、分享一下开发过程中遇到的问题以及它这个难点,难点是如何解决的

3、Spring、Spring Boot、Spring MVC的区别
Spring是包含了众多工具方法的IOC容器
Spring Boot是为了简化Spring开发而产生的脚手架。
Spring MVC是一个基于MVC设计模式和Servlet API实现的Web项目,同时Spring MVC又是Spring框架中的一个Web模块,它是随着Spring的诞生而存在的一个框架。

4、synchronized的缺点
1、性能问题:synchronized会导致线程阻塞,等待获取锁,将会影响程序性能。
2、可能会导致死锁:如果多个线程中使用synchronized同步代码块或方法时,出现了相互等待对方释放锁的情况。就会导致死锁,死锁会导致程序无法执行,甚至整个系统崩溃。
3、无法实现线程协作:synchronized需要等待某个事件完成后再执行后续操作
4、不够灵活:synchronized的同步粒度较粗,只能将整个方法或代码块加锁,不能对方法内部的某些语句块进行加锁或者选择不同的锁策略。

针对这些缺点,Java 提供了一些替代方案,如 ReentrantLock、Semaphore、CountDownLatch 等同步工具类,它们提供了更灵活、更高效、更安全的同步机制,可以根据具体情况选择合适的同步方式。

5、自己用过synchronized吗,项目中遇到过上边出现的问题吗
在多线程制作索引的时候,无法实现线程协作,就通过线程池+CountDownLatch的方式,来共同实现多个线程协同完成解析制作索引的过程。

6、如何对自己的项目进行测试的,第一个项目,详细针对功能方面来设计测试用例
我的第一个项目是一个Java API搜索引擎项目,来针对该项目的搜索功能,可以设计以下方面的测试用例。
功能测试:
1、输入关键字进行搜索:测试搜索结果是否符合预期,包括搜索结果数量、排序、过滤等方面。
2、搜索结果页面展示:测试搜索结果页面是否展示正常,包括页面布局、搜索结果列表、分页、相关推荐等方面
3、大小写支持
性能测试:
测试搜索引擎在不同的搜索请求量、并发数、网络延迟等情况下的响应速度、吞吐量、稳定性等方面。
界面测试:
搜索框大小,搜索按钮布局合理性
易用性测试:
1、搜索历史记录:测试搜索历史记录功能是否正常,包括记录数量、清除历史记录,搜索历史提示等方面。
2、大小写支持
兼容性测试:
浏览器兼容性:测试搜索引擎在不同浏览器、不同版本下的兼容性,包括页面展示、搜索结果展示.
安全性测试:
测试搜索引擎是否存在安全漏洞,包括 SQL 注入、XSS 攻击、CSRF 攻击、敏感信息泄露等方面。
7、map和HashMap
两者都是Java集合中的框架,其中HashMap是Map接口的一种实现。
Map:
Map接口表示映射表,它包含一个键和一个值之间的映射关系。
Map接口提供了键值对的操作方法,如put、get、containsKey、containsValue、remove等。Map接口的常用实现类有HashMap、TreeMap、LinkedHashMap等。
HashMap:
HashMap是基于哈希表实现的,它的底层数据结构是数组和链表(或红黑树),使用哈希函数将键映射为索引,以实现快速的插入、删除和查找操作。
具体的说,哈希函数会将键值对的键映射为一个整数,这个整数可以作为数组的索引。当不同的键值通过哈希函数映射到同一位置时,会产生哈希冲突,这时HashMap使用链表来存储这些键值对,当链表长度超过阈值(8)时,链表会被转化为红黑树。

8、如何遍历HashMap
1、遍历键值对:使用entrySet方法获取Map.Entry的Set视图,然后使用for-each循环遍历Set,再通过Map.Entry的getKey和getValue方法获取键和值。
代码示例:

Map<String,Integer> map=new HashMap<>();
// 添加键值对
map.put("A",1);
map.put("B",2);
map.put("C",3);
// 遍历键值对
for(Map.Entry<String,Integer> entry:map.entrySet()) {
	String key=entry.getKey();
	Integer value=entry.getValue();
	System.out.println(key + ": " + value);
}

2、遍历键或值:使用keySet或values方法获取键或值的集合视图,然后使用for-each循环遍历集合。
代码示例:

Map<String,Integer> map=new HashMap<>();
// 添加键值对
map.put("A",1);
map.put("B",2);
map.put("C",3);
// 遍历键
for(String key:map.keySet()) {
	System.out.println(key);
}

// 遍历值
for(Integer value:map.value()) {
	System.out.println(value);
}

9、怎样来学习Java的,看书?看什么书
《Java核心技术》

10、Linux命令

11、awk了解吗

12、如何学习selenium的?
结合技术博客和视频

13、如何对项目进行自动化测试的?
通过JUnit+selenium工具,编写了web端的ui自动化脚本代码,做了自动化测试。

14、spring的难点
依赖注入思想的理解,控制反转的颠覆

15、算法题:输出英文字符串中出现频率最高的三个字母
题解思路:
首先通过长度为26的数组,遍历字符串,完成每个字母出现次数的统计,再通过优先级队列,把出现过的字母抽象成类放入优先级队列中,排序规则为次数大小,那么弹出优先级队列的前三个即为前三个字母。

代码实现:

public class Test {
    static class Num{
        char ch;
        int count;

        public Num(char ch, int count) {
            this.ch = ch;
            this.count = count;
        }
    }
    public static void main(String[] args) {
        String s="abcdaacc";
        char[] chs=s.toCharArray();
        PriorityQueue<Num> queue=new PriorityQueue<>(new Comparator<Num>() {
            @Override
            public int compare(Num o1, Num o2) {
                return o2.count-o1.count;
            }
        });
        int[] arr=new int[26];
        for(char c:chs) {
            arr[c-'a']++;
        }
        for (int i = 0; i < 26; i++) {
            if(arr[i]==0) continue;
            char ch=(char)(i+'a');
            Num num=new Num(ch,arr[i]);
            queue.offer(num);
        }
        for(int i=0;i<3;i++) {
            Num num=queue.poll();
            System.out.println(num.ch);
        }
    }
}

⭐️最后的话⭐️
总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公网SSH远程访问家中的树莓派[无公网IP]

文章目录 前言如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地址…

计算机视觉的深度学习 Lecture4:Regularization + Optimization 笔记 EECS 498.008

课件非常好&#xff01; 数值计算梯度 问题是慢&#xff0c;每个都要注意做步长&#xff0c;求除法。 应该用求导方法解决。 SGD通过每次抽取一部分&#xff08;mini-batch&#xff09;来计算梯度&#xff0c;而不是遍历整个数据集来求梯度&#xff0c;大大增大了求梯度速…

18 KVM管理虚拟机-虚拟机生命周期总体介绍

文章目录 18 KVM管理虚拟机-虚拟机生命周期总体介绍18.1 概述18.2 虚拟机状态18.3 状态转换18.4 虚拟机标识 18 KVM管理虚拟机-虚拟机生命周期总体介绍 18.1 概述 为了更好地利用硬件资源&#xff0c;降低成本&#xff0c;用户需要合理地管理虚拟机。本节介绍虚拟机生命周期过…

零基础学网络安全

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决. 一…

spring的事物

这是我第三次接触事物了&#xff0c;mysql一次&#xff0c;以前的也看过一次。 事物的四大特点&#xff1a; 原子性&#xff1a;多条sql保证同时成功&#xff0c;同时失败。 一致性&#xff1a;在事物的开启和结束&#xff0c;数据库的完整性不被破坏。 隔离性&#xff1a;多线…

centos7 配置密钥登录

目录 1.xshell生成公钥 1.工具->新建用户密钥生成导向 2.选择4096下一步​编辑 3.输入用户密钥密码&#xff0c;也可以不输入 4.保存为文件 5.导出私钥文件 2.服务器配置 1.将公钥文件上传至服务器上 3.链接服务器 1.新建连接配置ip 2.设置用户身份验证 3.选择1.5上…

大疆无人机空三建模干货分享(大疆智图集群建模超详细教程)

Part 01 大疆无人机空三建模干货分享(大疆智图集群建模超详细教程) 大疆智图集群简介 大疆在今年5月推出的智图3.0.0及以上版本中加入了集群功能&#xff0c;有集群版许可的用户可以使用此功能。智图集群是由一台主节点分配任务控制多台同局域网内子节点设备进行空三和建模。集…

【Java零基础入门篇】第 ④ 期 - 继承(三)

【Java零基础入门篇】第 ④ 期 - 继承&#xff08;三&#xff09; 博主&#xff1a;命运之光专栏&#xff1a;Java零基础入门 学习目标 1.掌握继承性的主要作用、实现、使用限制&#xff1b; 2.掌握this和super的含义及其用法&#xff1b; 3.掌握方法覆写的操作&#xff1b; 4.…

内网渗透(七十)之域权限维持之重置DSRM密码

重置DSRM密码 目录服务还原模式(DSRM)是Windows域环境中域控的安全模式启动选项。每个域控都有一个本地管理员administrator账户,也就是(DSRM账户)。DSRM的用途是允许管理员在域环境出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常。也就是说,DS…

关于安卓毛玻璃实现(三)recyclerview静态毛玻璃

背景 毛玻璃&#xff0c;开发中又爱又恨的一个话题&#xff0c;玩法层出不穷&#xff0c;有动态的&#xff0c;也有静态的。有的是实时模糊&#xff0c;有些只需要模糊一次&#xff0c;本文的毛玻璃实现&#xff0c;就是静态毛玻璃。 开发环境 win 10 as 4 jdk 1.8 代码 &…

在中国,年收入20W是什么水平?答案扎心了(文末附最新招聘)

最近关于“年薪20万算什么水平&#xff1f;”冲上了热搜。对此&#xff0c;许多网友纷纷表示自己的看法&#xff0c;有的认为这个收入属于中高收入人群了。 因为按照最近某招聘网站发布的《中国企业招聘薪酬报告》来看&#xff0c;今年一季度38城企业平均招聘薪酬为10101元&…

用 ChatGPT 读 Vue3 源码,会怎么样?

前言 ChatGPT 最近十分火爆&#xff0c;今天我也来让 ChatGPT 帮我阅读一下 Vue3 的源代码。 都知道 Vue3 组件有一个 setup函数。那么它内部做了什么呢&#xff0c;今天跟随 ChatGPT 来一探究竟。 实战 setup 函数在什么位置呢&#xff0c;我们不知道他的实现函数名称&…

Ebean 字段别名配置引发语法问题

前言 Ebean 没听过&#xff1f;这里简单给你介绍下&#xff1a;Ebean 是一个 Java ORM&#xff08;Object-Relational Mapping&#xff09;框架&#xff0c;具有以下优势&#xff1a; 简单易用&#xff1a;Ebean 的 API 设计简单易用&#xff0c;可以快速上手&#xff0c;无需…

OpenGL高级-GLSL

引言 我们会讨论一些内建变量(Built-in Variable)、组织着色器输入和输出的新方式以及一个叫做uniform缓冲对象(Uniform Buffer Object)的非常有用的工具。 GLSL的内建变量 着色器是很小的&#xff0c;如果我们需要从当前着色器以外的别的资源里的数据&#xff0c;那么我们就不…

ChatGPT系列学习(1)transformer基本原理讲解

文章目录 1. 简介1.1. 发展史 2. Transformer 整体结构3. 名词解释3.1. token 4. transformer输入4.1. 单词 Embedding4.2. 位置Embedding4.3. Transformer Embedding层实现 5. Attention结构5.1. 简介5.2. Self Attention&#xff08;自注意力机制&#xff09;5.2.1. 简介5.2.…

Python 密码破解指南:20~24

协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【OpenDocCN 饱和式翻译计划】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 收割 SB 的人会被 SB 们封神&#xff0c;试图唤醒 SB 的人是 SB 眼中的 SB。——SB 第三定律 二十、…

HashMap源码和原理

HashMap源码分析 重要变量: Node<K,V>[] table 存放单链表头结点的数组size 存储结点数量threshold 阈值,通过size和threshold比较来做扩容loadFactor 加载因子 重要方法: put(K key, V value) 添加结点get(Object key) 查询结点 单链表Node结点中的一些变量: hash …

《程序员面试金典(第6版)》面试题 16.20. T9键盘(哈希映射,C++)

题目描述 在老式手机上&#xff0c;用户通过数字键盘输入&#xff0c;手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列&#xff0c;实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。&#xff08;原题链接&#xff09; …

程序的灵魂-数据结构

1、数据结构 程序 数据结构 算法 1.1、何为数据结构? 数据结构是计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的 数据结构是为了更加方便的管理和使用数据&#xff0c;需要结合具体的业务场景来进行选择 通常情况下&#xff0c;精心选择的数…

爆肝一周,我开源了ChatGPT 中文版接口,官方1:1镜像支持全部 官方接口

这里实现我之前文章承诺承接上文 人人实现ChatGPT自由&#xff0c;手把手教你零撸部署自己聊天私服 现在ChatGPT 提供了api接口 可以让我自己对接去实现我们自己想要gpt应用&#xff0c;但是由于一些原因&#xff0c;国内也不开放接口&#xff0c;所以我就1:1 自己对接了官方…