八股文自己总结

本文详细介绍了Java面向对象编程的关键概念(封装、继承、多态),包括重载与重写、接口与抽象类的区别,以及深浅拷贝、线程操作(sleep/wait、创建方式、生命周期)、内存管理和异常处理等内容,还涵盖了字符串操作、集合框架、HTTP状态码、网络请求方法和会话管理等知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.oop面向对象

         封装继承多态

2.重载,重写

        (1)本类,父类和子类(2)重载是在一个类里面,方法名称相同,返回类型可以相同也可以不同,但参数列表必须不同。(3)重写方法名,返回值,参数必须相同,报错范围,权限修饰符必须小于父类。(4)构造方法不能被重写

//重载
public 可同可不同 相同(一定不相同) 
//重写
public 相同 相同(相同)

3.接口,抽象类

        (1)接口实现,抽象类继承(2)实现多个接口,继承一个父类(3)都不能被实例化(4)抽象类里面可以不包含抽象方法,接口里面一定都是抽象方法(4)抽象类里面可以有构造方法,接口不行(5)抽象方法四个权限修饰符都行,接口只能是public(6)接口里面只有常量

4.深拷贝,浅拷贝

        深拷贝完全复制出来一个新的对象,指向的内存地址不一样

        浅拷贝和深拷贝还是共用一个内存地址

5.sleep.wait

        (1)sleep属于thread类,wait属于object类(2)都释放cpu资源(3)sleep不释放锁,wait释放锁(4)wait未设置自动唤醒的话,需要notify(5)wait 方法必须配合 synchronized 一起使用

6.自动装箱

        List<对象>  集合里面装的是对象,但是int是基本数据类型,就把他装箱成integer类型,拆箱成int类型。

7.==,equals

        (1)基本类型

                二者都是比较值的大小

        (2)引用类型

                重写前:地址

                重写后:字符

8.string用final修饰,不能被修改,里面有native修饰的方法,修改了会导致风险

9.Stringbuffer和Stringbuilder

        buffer线程安全,都用的synchonized修饰的,builder线程不安全

        单线程下,stringbuilder更快,因为不存在锁的问题

10.final,finally,finalize

        (1)final:类(不能被继承) 方法(不能被重写) 变量(常量)

        (2)finally:跟着try catch一起用,一定会被执行

        (3)finalize:垃圾回收,销毁对象之前会调用,属于Object类里面的方法

11.Object类里面的方法:

        (1)toString(2)equals(3)hashcode(4)finalize(5)clone(6)getClass

12.集合体系:

        (1)collection

                List Set

        (2)map

                Map

13.ArrayList和LinkedList

        (1)一个基于数组,一个基于链表

        (2)get,set,数量少的插入使用arrayList

        (3)只有大量的修改使用LinkedList性能更高

*ArrayList移动数组,LinkedList有指针,查询要移动指针,慢。插入要往后整体挪动,数组慢。

14.Hashmap

        1.8是数组+链表+红黑树

        数组:根据key找value

        链表:解决hash冲突

        红黑树:处理超过8个节点的链表。

15.Hashmap和Hashtable

        table线程安全,map线程不安全,Synchronized修饰的,单线程用map,多线程用hashTable

      (1)hashmap(containsKey,containsValue)

                hashTable(contains,containsKey,containsValue)

       (2)hashmap (key  唯一一个null,value随便)

                hashTable(key,value都不能为null) 

       (3)hashmap (默认为16  都是2的n次方)

                hashTable(默认为11,2n+1)

16. 线程创建方式

        (1)继承Thread类 (2)实现Runnable接口 (3)使用Callable和Future创建线程(4)使用线程池创建线程。

17.线程的生命周期

        (1)创建(2)就绪(3)运行(4)阻塞   等待阻塞wait,同步阻塞synchronized,其他阻塞sleep超时join超时等(5)销毁

18.流

(1)字节流

(2)字符流

19.error,exception(运行时异常,编译时异常)

        (1)classnotfoundException

        (2)IndexOutOfBoundsException

        (3)nullpointerException

20.反射

(1)对于任意一个类,可以知道这个类有哪些属性和方法

(2)对于任意一个对象,可以调用他的任意一个方法。

(3)判断一个对象所属于哪一个类,构造任意一个类的对象,判断一个类里面所具有的属性和方法,调用任意一个对象的方法。

21.java序列化

22.http常见的状态码

(1)200:正常

(2)301:url已经移走,response中应该包含新的url

(3)302临时重定向

(4)400 客户端请求有语法错误,服务器不理解

(5)401 请求未被授权

(5)403服务器收到请求,但是拒绝提供服务。

(6)404 请求资源不存在,url地址错误

(7)500程序错误

(8)503服务器不能处理当前客户端的请求,一会可能会好

23.get和post

(1)get请求,请求体会在url中,?分割(login.action?name=zhagnsan&password=123456),post会存放在包体内。

(2)get长度,是1024(其实url长度没限制,但是是浏览器限制的url的长度,分浏览器),post没有长度限制。

(3)post更安全,因为get的地址栏里面会看到账户密码等信息,是明文的,浏览器缓存等信息会暴露,但是post处于方法体内

(4)get向服务器索取数据,post向服务器提交数据(在form表单中)

(5)默认为get请求,他们只是发送机制不同,不是一个取一个发。

24.cookie和session

(1)cookie存储在浏览器,session存储在服务器上。

(2)cookie保存在电脑本地,浏览器在给特定的web服务器发送请求,也会发送所有为该服务器存储的cookie
(3)session存储在web服务器,session对象存储特定用户的属性和配置信息,当用户在web网页之间跳转,存储在session中间的信息不会丢失,会在整个用户会话中保存

(4)不同点:session不受到客户端影响,客户端禁止cookie,那cookie就不能用了。

session能存储各种用户,cookie只能存储String类型的对象。

25.

<think>嗯,用户想要软件测试面试的常见问题及答案总结。首先,我得回顾一下之前提供的引用内容,看看里面有什么相关的信息。引用[1]里提到了功能测试、接口测试、HTTP通信、项目介绍、质量保障和bug定位等问题。而引用[2]则补充了接口自动化测试框架、性能测试、环境差异等题目。需要把这两部分的信息整合起来,分门别类地组织问题,并给出简洁明了的答案。 接下来,我需要确保回答的结构清晰,符合用户的要求。用户希望问题分成几个大类,比如功能测试、接口测试、性能测试等,每个类别下列举具体的问题和答案。同时,答案需要真实可靠,最好结合实际的面试经验,给出实用的回答技巧。 比如功能测试部分,微信红包的测试用例设计是个常见问题,可以列举界面、功能、兼容性等方面的测试点。接口测试方面,流程和工具是关键,要提到Postman、JMeter等工具,以及状态码、数据格式等验证点。HTTP的三次握手和四次挥手也是高频问题,需要简明解释步骤和意义。 另外,关于项目介绍和质量保障,用户需要展示逻辑性和方法论。比如介绍项目时用STAR法则,质量保障则强调流程规范、用例评审和自动化测试。Bug定位部分要体现分析日志、复现步骤和使用工具的能力。 还需要注意引用标注的正确性,每个引用的末尾加上对应的标识符。同时,生成相关问题时要覆盖用户可能关心的其他方面,比如自动化测试、性能测试工具、测试计划编写等,确保全面性。 最后,检查是否有遗漏的重要知识点,比如安全性测试、持续集成等,虽然引用中没有提到,但根据常见面试题,可能需要补充。不过根据用户提供的引用内容,还是以已有信息为主,避免引入外部知识。整理完毕后再通读一遍,确保逻辑连贯,语言自然,符合中文表达习惯。</think>### 软件测试面试常见问题及知识点总结 #### 一、功能测试类 1. **如何设计微信红包功能的测试用例?** - 界面测试:红包金额输入框是否限制最大值/最小值,UI是否符合设计规范 - 功能测试:不同支付方式(零钱/银行卡)发红包,拼手气红包金额分配算法验证 - 兼容性测试:Android/iOS不同系统版本的显示与操作一致性 - 异常测试:断网时红包发送失败提示,余额不足时的处理流程[^1] 2. **朋友圈功能的测试重点有哪些?** - 内容发布:图文混排、视频上传时长限制、@功能准确性 - 隐私控制:分组可见/不可见设置有效性 - 交互测试:点赞/评论实时同步,删除内容后他人可见状态更新[^1] #### 二、接口测试类 1. **接口测试流程包含哪些环节?** - 需求分析 → 设计测试用例 → 准备测试数据 → 执行测试 → 验证响应(状态码、数据格式、业务逻辑) → 生成报告 - 常用工具:Postman(功能测试)、JMeter(性能测试)、Swagger(文档验证)[^2] 2. **接口自动化测试框架的核心组件?** - 测试数据管理(Excel/YAML) - 请求封装(HTTPClient/RestAssured) - 断言机制(JSON Schema验证) - 持续集成(Jenkins调度) - 报告生成(Allure可视化) #### 三、网络协议类 1. **HTTP三次握手过程:** $$SYN → SYN-ACK → ACK$$ 建立TCP连接时,客户端发送SYN=1的报文,服务端返回SYN=1且ACK=1的报文,最后客户端发送ACK=1完成连接 2. **四次挥手过程解析:** $$FIN → ACK → FIN → ACK$$ 主动关闭方发送FIN,接收方ACK确认后发送自己的FIN,最终双方关闭连接 #### 四、质量保障类 1. **如何保障测试质量?** - 需求评审阶段介入,制定测试策略 - 采用分层测试:单元测试(覆盖率≥80%)→ 接口测试 → UI自动化 - 缺陷分析:定期进行Bug分类(如功能/性能/兼容性缺陷占比) 2. **定位问题的常用方法:** - 查看服务日志(tail -f application.log) - 使用Charles/Fiddler抓包分析请求响应 - 数据库查询验证数据一致性(如订单状态与支付流水匹配) #### 五、性能测试类 **Windows程序运行缓慢的排查步骤:** 1. 任务管理器查看CPU/内存/磁盘占用率 2. 使用Process Monitor监控程序系统调用 3. 对比Linux环境运行结果,排除硬件差异 4. 通过Visual Studio性能分析工具检测内存泄漏[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值