测试开发具备的能力
扎实的测试基本功:
对业务比较熟悉,能够独立负责某块业务功能的测试工作。
熟悉测试流程,能够合理的制定测试计划,掌控测试进度,具备敏锐的质量风险意识。
具备一定的测试思维,能够设计出较高质量的测试用例。
测试手段丰富,至少在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)
尽量使用合成/聚合的方式,而不是使用继承。