面试八股文

HuiLiu 于 2023-03-22 3405 字 9 mins

测试开发具备的能力

扎实的测试基本功:

对业务比较熟悉,能够独立负责某块业务功能的测试工作。

熟悉测试流程,能够合理的制定测试计划,掌控测试进度,具备敏锐的质量风险意识。

具备一定的测试思维,能够设计出较高质量的测试用例。

测试手段丰富,至少在APP、小程序/H5、WEB、SERVER等,在其中某一端具备扎实的测试经验。

对于常用的测试工具做到如数家珍,并对这些测试工具运用自如。

有一定的测试架构能力,对CD/CI有一定的了解,并且了解一些DevOps的具体实践。

扎实的计算机功底:

熟悉计算机网络,尤其是对HTTP、TCP协议要有深度的了解。

熟悉操作系统及基本原理,进程线程、CPU调度、内存管理、IO读写等。

熟悉数据库,熟悉主流的关系型数据库及非关系型数据库,能写出复杂场景下的查询SQL。

熟悉Linux的基本使用,擅长编写Shell脚本。

扎实的编程功底:

掌握至少一门后端编程语言(Java/Go/PHP/C++),和至少一门脚本语言(Python/JavaScript)。

了解主流的测试工具/框架/平台,能够基于此进行二次开发。

掌握WEB开发技巧,熟悉后端开发框架及中间件,熟悉并掌握至少一个较为流行的前后端分离项目。

掌握IDE工具的基本使用,会使用Git等代码版本控制软件。

具备良好的编程风格,了解基本的代码调优技巧。

软实力:

敢想敢做,勇于尝试,具备创新精神。

善于思考,善于总结,善于查资料。

具备勇攀高峰,克难攻坚的品格。

具备良好的沟通能力。

提升:掌握主流的测试手段,包括并且不局限于:自动化测试、接口测试、性能测试、稳定性测试、安全/渗透测试、移动端测试、服务端测试等。

JAVA

抽象、继承、多态

接口与抽象类的区别

概述ConcurrentHashMap的工作原理

概述Java的异常处理体系,并罗列出常见的5种运行时异常,并说明产生的情况4、请概述如何在应用中排除死锁问题

您所熟悉的Spring注解有那些?各自有什么用途

简要说明Spring中事务的基本用法和相关配置,并说明事务失效的情形

说明所了解的Spring中所使用设计模型,并说明实际应用场景

概述在Java8中有什么方法可以优化 for循环的编码,并说明实际的原因

在具体应用开发中如何防止 sql注入的问题

在Java应用出现OutOfMemoryError的原因有哪些?出现 OOM错误后如何解决

Redis 中常见的数据类型有哪些?请说明各自的应用场景和对应的底层实现方式

概述SpringBoot启动器的工作原理

请说明你所熟悉的常见限流算法

计算机网络基础

TCP三次握手和四次挥手:

三次握手:建立一个TCP连接时,需要客户端和服务器发送3个包。本质:连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。

测试图片

OSI七层网络模型

TCP和UDP的区别

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,

TCP/IP五层网络模型

HTTP协议

HTTP和HTTPS的区别

Http请求和响应

Http常见请求方法

GET和POST的区别

Http响应状态码

Cookie和Session的区别:

Cookie是一段不超过4KB的小型文本数据,存储在浏览器本地,以键值对的形式存在,我们在浏览器上能够实现自动登陆,就是运用了Cookie技术。Session存储在于服务器中,用于保存和处理用户的会话信息,Session和Cookie往往会一起配合使用。

URL和URI的区别

网络Socket

操作系统基础

进程线程、CPU调度、内存管理、IO读写

计算机的组成部分

计算机是怎么跑起来的

CPU是什么

内存是什么

硬盘是什么

IO是什么

进程和线程的区别

进制换算

数据库基础

熟悉主流的关系型数据库及非关系型数据库,能写出复杂场景下的查询SQL

数据库连接

创建数据库

创建数据表

增加数据INSERT

删除DELETE

修改UPDATE

查询SELECT

数据库可视化工具:Navicat、SQLyog、Workbench

Linux基础

终端工具使用:SecureCRT、Xshell、iTerm2

Linux常用命令

目录操作:cd、pwd、ls

文件操作:cat、more、less、tail、vim、mv、cp、rm

权限管理:chmod、chown、sudo、su

进程管理:kill、ps

在Linux系统中如何创建软链接,并说明软硬链接的区别

软件开发设计模式:4大类

1、创建型模式:5种

提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。

工厂模式(Factory Pattern)

抽象工厂模式(Abstract Factory Pattern)

单例模式(Singleton Pattern)

建造者模式(Builder Pattern)

原型模式(Prototype Pattern)

2、结构型模式:8种

关注类和对象的组合

适配器模式(Adapter Pattern)

桥接模式(Bridge Pattern)

过滤器模式(Filter、Criteria Pattern)

组合模式(Composite Pattern)

装饰器模式(Decorator Pattern)

外观模式(Facade Pattern)

享元模式(Flyweight Pattern)

代理模式(Proxy Pattern)

3、行为型模式:12种

关注对象之间的通信

责任链模式(Chain of Responsibility Pattern)

命令模式(Command Pattern)

解释器模式(Interpreter Pattern)

迭代器模式(Iterator Pattern)

中介者模式(Mediator Pattern)

备忘录模式(Memento Pattern)

观察者模式(Observer Pattern)

状态模式(State Pattern)

空对象模式(Null Object Pattern)

策略模式(Strategy Pattern)

模板模式(Template Pattern)

访问者模式(Visitor Pattern)

4、J2EE模式:关注表示层

MVC 模式(MVC Pattern)

业务代表模式(Business Delegate Pattern)

组合实体模式(Composite Entity Pattern)

数据访问对象模式(Data Access Object Pattern)

前端控制器模式(Front Controller Pattern)

拦截过滤器模式(Intercepting Filter Pattern)

服务定位器模式(Service Locator Pattern)

传输对象模式(Transfer Object Pattern)

六大原则:

1、开闭原则(Open Close Principle)

对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。

2、里氏代换原则(Liskov Substitution Principle)

面向对象设计的基本原则之一。任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则(Dependence Inversion Principle)

开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

5、迪米特法则,又称最少知道原则(Demeter Principle)

一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

尽量使用合成/聚合的方式,而不是使用继承。