面试测试开发岗,需要准备的100道题型

1、项目经验

2、介绍下什么是索引

在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
对于数据库来说,索引是一个必选项,但对于现在的各种大型数据库来说,索引可以大大提高数据库的性能,以至于它变成了数据库不可缺少的一部分。
Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引

PRIMARY KEY(主键索引) ALTER TABLE table_name ADD PRIMARY KEY ( column )
UNIQUE(唯一索引) ALTER TABLE table_name ADD UNIQUE (column)
INDEX(普通索引) ALTER TABLE table_name ADD INDEX index_name ( column )
FULLTEXT(全文索引) ALTER TABLE table_name ADD FULLTEXT ( column )
组合索引 ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 )

Mysql各种索引区别:
普通索引(INDEX):最基本的索引,没有任何限制
唯一索引(UNIQUE):与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引(PRIMARY):它 是一种特殊的唯一索引,不允许有空值。
全文索引(FULLTEXT ):仅可用于 MyISAM 表, 用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。

3、京东登录页面怎么测?

4、如果一个普通用户,他的百度首页打不开,问题怎么定位?写出定位流程。
首先,看下别的页面是否能打开
如果别的页面能打开,在看下百度的其他页面是否能打开
如果也能打开,换个浏览器试试,其他浏览器是否能打开
其他浏览器也不能打开的话,说明不是浏览器的问题
看下ip是否正常,用ping命令看看Ping值是多少,ping百度域名
看下DNS是否配置正确
看注册表是否正常
实在没有发现问题,看看安全软件能不能修复(例如360等)

5、问简历上的第一个项目的详细情况,包括测试用例怎么写?怎么判断测试通过?项目的原理?

6、如果是做功能测试,能接受吗?

7、说一下你们工作中的测试流程

8、用她的手机给我看了下百度贴吧的发帖功能的界面,给我张纸,让我写出测试点(只需要考虑内容,表情,添加图片,@功能),写完讲一遍逻辑。

9、针对发朋友圈这个功能设计你的测试用例,请给出用例分类与典型用例场景

10、Java 中的容器有哪些?它们的区别和特性?
Iterable 接口
Iterable是一个超级接口,被Collection所继承。它只有一个方法: Iterator iterator() //即返回一个迭代器

Collection 接口

List 接口:List是有序的 collection
子类:Vector、ArrayList、LinkedList
名称 扩容方式(默认) 线程安全 速度 有效个数的属性
ArrayList 增长50% 线程不安全 快 size
Vector 增长一倍 线程安全 慢 elementCount
共同点 如果新增的有效元素个数超过数组本身的长度,都会导致数组进行扩容 - remove,add(index,obj)方法都会导致内部数组进行数据拷贝的操作,这样在大数据量时,可能会影响效率 -

Set接口:无序性,确定性,单一性。所以可以很好的理解,Set是无序、不可重复的。同时,如果有多个null,则不满足单一性了,所以Set只能有一个null
子类:HashSet、TreeSet、LinkedHashSet

Queue 接口:此接口用于模拟“队列”数据结构(FIFO)。新插入的元素放在队尾,队头存放着保存时间最长的元素

容器名 是否有序 是否可重复 null的个数
List 有序 可重复 允许多个null
Set 无序 不可重复 只允许一个null
Queue 有序(FIFO) 可重复 通常不允许插入null

Map 接口:key-value形式
子类:
HashMap,无序
HashTable
SortedMap
WeakHashMap
IdentityHashMap
EnumMap

11、Git 的常见操作,如 git stash
git基本操作
git status 查看本次的修改、新建、删除等信息(new file:新建文件,modified:修改文件,deleted: 删除的文件)
git pull 拉取代码;
git add . 添加所有即将提交的文件,
git add fileNamePath添加某个文件
git commit -'提交的日志' 提交到本地,
git push 提交到git服务器;
git 另一种提交方式,
git commit -a -m '提交的日志' 添加所有即将提交的文件并提交到本地 ,
git commit -a -m 相当于git add . 和 git commi -' '命令的集合,当你使用git commit -a -m ' '命令时,就会执行上述两个操作;

git 暂存
git stash暂存(存储在本地,并将项目本次操作还原)
git stash pop 使用上一次暂存,并将这个暂存删除,使用该命令后,如果有冲突,终端会显示,如果有冲突需要先解决冲突(这就避免了冲突提交服务器,将冲突留在本地,然后解决)
git stash list 查看所有的暂存
git stash clear 清空所有的暂存
git stash drop [-q|--quiet] [] 删除某一个暂存,在中括号里面放置需要删除的暂存ID
git stash apply 使用某个暂存,但是不会删除这个暂存

git 创建本地分支并推送到服务器:
创建并切换到分支branchName
git checkout -b branchName
推送本地的branchName(冒号前面的)分支到远程origin的branchName(冒号后面的)分支(没有会自动创建)
git push origin branchName:branchName

删除分支
删除本地分支: git branch -d [branchname]
删除远程分支: git push origin --delete [branchname]

合并分支
例如现在有分支master和分支A,要将分支A的代码合并到master
第一步:切换到分支master,在终端输入命令
git checkout master
第二步:合并分支
git merge --no-ff -m 'version:3.0.5_buildL19011720' A
第三步:如果有冲突解决冲突,解决冲突后add . -> git commit -m '提交原因'
第四步:
git push

12、Java 的接口与抽象类的区别
相同点:
(1)都不能被实例化
(2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。

不同点:
(1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
(3)接口强调特定功能的实现,而抽象类强调所属关系。
(4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
(5)接口被用于常用的功能,便于日后维护和添加删除,而抽象类更倾向于充当公共类的角色,不适用于日后重新对立面的代码修改。功能需要累积时用抽象类,不需要累积时用接口。

13、TCP 和 UDP 的区别?如何保证 TCP 的可靠性?
TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,他们之间的区别包括:
1.是否连接:TCP是面向连接的,UDP是无连接的,TCP的发送发要确认接收方是否收到数据段(3次握手协议)

2.传输可靠性:TCP是可靠的,UDP是不可靠的;TCP在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复,它通过为每个数据报提供一个序号来完成此恢复,为确保正确收到数据,TCP要求目标计算机成功收到数据时发回一个确认(即ACK),如果在某个时限内未收到相应的ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复,但是接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。UDP协议不能保证数据准确无误的到达目的地,并不是说UDP就完全无法知道是否发生了错误,一个16位的UDP包包含了一个字节长的头部和数据的长度,校验码域使其可以进行整体校验,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。

3.TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式
4.TCP是面向字节流的,UDP是面向报文的(流模式和数据报模式)
5.TCP拥有拥塞控制机制,UDP没有拥塞控制,适合媒体通信
6.TCP要求系统资源较多,UDP较少
7.TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大,TCP传送数据段的时候要给段标号,UDP协议不用

当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP是更好地选择;反之,当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。

对于可靠性,TCP通过如下方式进行保证:
1.数据包校验:目的是检测数据在传输过程中的任何变化,若校验包出错,则丢弃报文不给出响应,这时TCP发送数据端超时后会重发数据。
2.超时重发:当TCP发出一个段之后,启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
3.对失序数据包重排序:TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层。
4.丢弃重复数据:将丢弃重复数据。
5.应答机制:当TCP收到来自另一端的数据,它将发送一个确认。
6.流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

14、打开一个网页都发生了哪些事?
·通过域名解析获得URL对应的IP地址
·浏览器和服务器建立TCP连接
·浏览器给服务器发送一个HTTP请求
·服务器给浏览器发回一个HTML响应

15、对工作上的压力怎么看待?

16、继续问项目经验和技术难点

17、了解现在的工作环境,背景等

18、户口,家庭情况,伴侣工作等

19、问上一份工作的公司是做什么的?离职原因?自己的职业发展规划?

20、遇到的某个难点是什么?如何解决的?

21、自己解决的最亮点的技术难点是什么?

22、你用jmeter做什么测试?
接口测试

23、如果有一个登录接口需要服务端返回参数,再带着这个参数去请求才能完成登录,用jmeter 怎么做?
先去请求登陆接口,然后得到登录的返回值,然后使用json提取器,提取出需要的值,作为参数传给下一个接口。

24、请问你们公司是如何做接口测试的?
第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;
第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点。
第三步:和开发一起对接口测试案例进行评审。
第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件。
第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发。
第六步,写完自动化用例之后开始执行
第七步,执行如有bug,提交至禅道
第八步,开发修改完成后,回归bug
第九步,完成后做自动化持续集成
1.接口需求调研
2.接口测试工具选择
3.接口测试用例编写
4.接口测试执行
5.接口测试回归
6.接口测试自动化持续集成

25、接口测试质量评估标准是什么?
a) 业务功能覆盖是否完整
b) 业务规则覆盖是否完整
c) 参数验证是否达到要求(边界、业务规则)
d) 接口异常场景覆盖是否完整
e) 接口覆盖率是否达到要求
f) 代码覆盖率是否达到要求
g) 性能指标是否满足要求
h) 安全指标是否满足要求

26、对接口测试这块熟不熟?是怎么测的?用的什么工具?为什么用 HTTPClient 类库,觉得它有什么缺点?用 Fiddler 主要做什么?

27、请问你们公司是如何做性能测试的?请讲诉性能测试的相关指标?
1.做性能需求分析,挑选了用户使用最频繁的功能来做性能测试,比如:登陆,搜索,提交订单,确定性能指标,比如:事务通过率为100%,90%的事务响应时间不超过5秒,并发用户为1000人,CPU和内存的使用率为70%以下
2.性能测试计划,明确测试时间(通常在功能稳定后,如第一轮测试后进行)和测试环境和测试工具的选择
3.编写性能测试用例
4.搭建性能测试环境,准备好性能测试数据
5.通过性能测试用例,编写性能测试脚本
6.性能测试脚本进行调优,设置检查点、参数化、关联、集合点、事务,调整思考时间,删除冗余的脚本等
7.设计性能测试场景,使用nmon工具监控服务器,运行测试场景
8.分析性能测试结果,如果有问题(性能瓶颈),收集相关的日志提单给开发修改
9.开发修改好后,回归性能测试
10.编写性能测试报告
相关指标:响应时间、并发数、吞吐率、资源利用率、TPS

28、压力测试和负载测试的区别
负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题
压力测试是在高负载情况下对系统的稳定性进行测试。是在高负载(大数据量、大量并发用户等)下的测试,观察系统在峰值使用情况下的表现,从而发现系统的功能隐患
负载测试:多用户,用户数渐增,持续同时发同一业务请求,产出最大TPS
压力测试:多用户,资源使用饱和,持续同时发同一业务请求,产出系统瓶颈或使用极限

29、服务器中一般要监控哪些数据,如何监控的,怎么从监控数据中发现问题?
基础监控和应用监控。
基础监控包括机器是否死机,cpu,内存,磁盘使用率等;应用监控包括日志监控、端口监控、进程数监控等。

30、性能测试用过吗?什么情况下用的?主要测哪些方面?

31、性能测试关注哪些指标?
相关指标:响应时间、并发数、吞吐率、资源利用率、TPS

32、对于多环境(联调环境、测试环境、预发布环境)如何让接口用例支持多套环境,说出你的做法
自定义一个用户变量,将ip放在变量里,然后接口取变量的值

33、如果接口返回数十个字段,如何批量校验这些字段的正确性,请说出你的方法?
使用csv进行多用例编写

34、假设系统A调用系统B,我把B的接口都mock了,进行性能测试,这样有什么好处和坏处?
好处:防止系统B出错引起测试错误;不会因系统B的开发进度影响测试;mock后可以快速返回结果,提高测试效率
坏处:很多情况下无法完全模拟出服务器的所有可能的返回情况,另外,mock掉了关联方之后,整个环境的连通性可能测试的不到位。

35、有一天早上打车高峰,滴滴服务端挂了大概30分钟,工程师抢修之后,马上上线,之后又挂了,请问有哪些原因会造成这个情况?
服务器内存不够、服务器超出负载、并发量太大、遇到恶意攻击

36、请问Monkey测试的优缺点?

37、如果使用monkey发现了一个毕现闪退,请问怎么使用monkey重现它?

38、UI 测试的过程

39、自动化测试用例怎么来?

40、你项目中有多少case,通过率怎么样?

41、报告哪里来,主要统计什么?
自动化测试报告,在执行完用例之后,会自动生成,使用的是allure,主要统计bug通过率,失败率,失败日志,失败截图

42、做自动化测试的目的?

43、如何看待自动化和手动测试?怎样的一个比例才是健康的?
自动化适合做为回归测试的主要方式,新上线的功能一般都是用手动测试方式,一些极端和用户习惯操作还是手动测试比较方便。尽可能线上稳定的功能模块都做成自动化,提供效率

44、你们公司的自动化投入产出比怎样?效益怎样?
自动化主要作为回归测试,减少测试时间。

45、自动化测试用例的覆盖率多少?
30%

46、完整运行一次自动化用例需要多久时间?

47、什么是分层自动化?
金字塔结构, 最底层UnitTest,往上接口API/集成起来的service, 最上面UI自动化
po模式:
1.元素的配置文件(元素的配置文件就是元素控件的路径或者id)
2.page类(通过读取配置文件获取元素的控件,元素对象和元素的原子操作,一个页面一个配置文件)
3.action类(通过原子操作去拼接业务,比如我要执行登录,点击按钮,输入用户名密码都在action中操作)
4.测试用例类(testcase,调用业务实现断言)

48、你的测试数据是怎么准备的?
提前写在配置文件中的或者直接写在Excel中,读取excel中的数据

49、测试脚本的维护成本是怎么样的?
如果业务不变的话,基本上不用修改脚本,如果业务有变化,则去找对应的测试脚本进行修改

50、问第一个项目的测试框架的搭建、怎么用数据驱动测试?

51、Web View 怎么测试?
首先要在代码中开启webview debug
然后输入Chrome://inspect
然后切换driver
获取元素控件
如果想要在继续测试原生,则需要将driver切换回来

52、请问你的定位策略是什么?
web:css
app:id

53、请问如何实现用例失败或者异常时候需要截图?
使用webdriver中的截图类,WebDriver有提供用于截图的TakesScreenshot类
driver.getScreenshotAs

54、请问如何分布式执行webdriver用例?
方式一:利用jenkins分布式Master-slave来解决,selenium脚本不需要修改,环境部署好,可以直接跑
方式二:利用selenium grid分布式处理,这个有介绍过点击打开链接,剩下就是把selenium grid放到jenkins里面,让jenkins去管理,这个后续一篇介绍,这种方式,driver的url要改成hud的,脚本需要稍加修改

55、如何在脚本中执行 JavaScript 代码?
方式一:

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String scriptContent = "function multiply(a,b) {return a*b;}";
//注册脚本
engine.eval(scriptContent);
Invocable invocable = (Invocable) engine;
//调用注册函数
System.out.println(invocable.invokeFunction("multiply", 2, 3));

方式二:

//使用管道流,将输出流转为输入流
PipedReader prd = new PipedReader();
PipedWriter pwt = new PipedWriter(prd);
//设置执行结果内容的输出流
engine.getContext().setWriter(pwt);
//js文件的路径
String strFile = Thread.currentThread().getClass().getResource("/").getPath() + "/abc.js";
Reader reader = new FileReader(new File(strFile));
engine.eval(reader);
BufferedReader br = new BufferedReader(prd);
//开始读执行结果数据
String str = null;
while ((str = br.readLine()) != null && str.length() > 0) {
     System.out.println(str);
}
br.close();
pwt.close();
prd.close();

56、Appium 的定位策略有哪些?
android的定位方式:
1.通过元素的 id 定位
2.通过元素的 className 定位元素
3.通过元素的 accessibility id 定位元素
4.通过 androiduiaumator 定位元素
5.如果选取的定位信息的值在整个界面存在多个时,可以使用 driver.findElements 方法来 定位
6.findElementByAndroidUIAutomator
ios的定位方式:
1.iOSNsPredicateString
2.iOSClassChain
3.AccessibilityId:主要使用元素的 label 或 name 或者 value 属性进行定位
4.className: 主要使用元素的 type 属性进行定位

57、请简述Appium的原理

58、iOS 和 Android 的 UI 自动化的原理是什么?

59、当定位策略都失败的时候,你该怎么做?
80%是你元素定位的不对,那么多定位方法,一个不行换另外一个,直接不能定位,先定位父元素,再循环找子元素。一般来说XPATH都能定位到,无非是可阅读性不强。真的全部失效,请求开发帮你改个元素属性好了。

60、UI 测试做的是 iOS 还是 Android?讲讲 iOS 的 UI 怎么测?

61、获取 Appium 中的 content-desc 不为空的控件列表,代码不限。
driver.find_element_by_accessibility_id('搜索或输入网址')

62、并行运行 Appium 需要修改哪些参数
需要改端口,多个端口
然后在caps文件中获取多设备

63、你如何用Selenium测试

64、Selenium的工作原理?

65、常见的定位方式?

66、上传图片的几种方式?

67、如何处理动态元素?
找父级元素,通过父级元素查找子元素,xpath

68、你是怎么开发测试框架的?

69、PO模型是怎么做的?

70、失败截图的原理是什么?

71、你常用的命令是什么?

72、用什么查看log?
tail -f

73、如何查找一个文件大小超过5M的文件
find user -size +5000k -type f

74、如何查看进程?
ps -elf

75、Linux 中查找某个文件并删除它
find . -name '*.exe' -type f -exec rm -rf { } \

76、Linux 查询 CPU、内存的指令
cat /proc/cpuinfo查看linux系统的CPU型号、类型以及大小
通过greap命令根据Physical Processor ID筛选出多核CPU的信息
cat /proc/meminfo查看linux系统内存大小的详细信息,可以查看总内存,剩余内存、可使用内存等信息。
df -h查看linux系统各分区的使用情况
free -m 查看linux系统内存使用量和交换区使用量

77、使用 Shell 获取 Nginx log 中接口包含 topic 且状态码为 200 的接口平均响应时间(越严谨越好)
cat nginx.log |grep ‘topic’ |grep ‘200’|awk -F ‘’ ‘{sum=sum+$1} END {print “sum=”,sum}’

78、每隔 2s 获取某个进程的 CPU 和 mem 数据并保存到 csv 数据文件
79、快排的实现 (代码实现)

80、算数组中查找出现次数过半的数(代码实现)

81、查找链表的倒数第三个数(代码实现)

82、什么是面向对象编程?

83、讲下Java多线程的使用

84、有三个线程T1,T2,T3,怎么确保它们按顺序执行?

85、Thread 类中的start() 和 run() 方法有什么区别?
start() 启动时用的,只调用一次
run() 可以调用多次

86、请写一个线程安全的单例模型
//Initialization on Demand Holder
public class Singleton
{
private static class SingletonHolder
{
public final static Singleton instance = new Singleton();
}
public static Singleton getInstance()
{
return SingletonHolder.instance;
}
}

87、请写出冒泡排序

88、1~9999数列中数字3出现的次数,请用递推方法解题。

89、从一个数组中找出前4个最大的数,用最优解。

90、写一段程序,删除字符串a中包含的字符串b,举例 输入a = “asdw”,b = “sd” 返回 字符串 “aw”,并且测试这个程序。

91、写一个方法,把字符串转为数字,比如 str=“1234”,变成 int 1234。并且测试这个程序

92 、A、有两个有序链表,将他们组成一个有序链表。

93、给一个字符串,字符串里有 (){}[]“”这六个符号,设计一个算法,判断这些符号是否成对匹配,即要检验这些括号是否都是成对出现的。

94、有两个字符串类型的数字,实现一个方法将它们进行相加,并返回相加后的数值。(要考虑数据的长度问题)

95、Java 多线程的创建

96、算法:二叉树的深度计算

96、算法:一亿个无序数找出 Top 100(这个也没写好,空间复杂度高了,应该用堆排序)

97、说下左连接和右连接
左外连接:将左表为驱动表进行连接,结果数据包含左表全部数据,以及右表中和左表匹配的数据,左表中有,但右表中没有的数据显示null(取左边全部及右边部分数据)
SELECT * FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME

右外连接:将右表为驱动表进行连接,结果数据包含右表全部数据,以及左表中和右表匹配的数据,右表中有,但左表中没有的数据显示null(取右边全部及左边部分数据)
SELECT * FROM TABLE1 RIGHT JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME

内连接:等值连接,返回两张表中都满足匹配条件的数据 (取两个表的交集)
SELECT * FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.USERNAME = TABLE2.USERNAME
SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME

98、给你一张表,根据要求写sql,这个题目比较多,自己百度吧。

99、使用sql生产10万条数据
create table myTestTable as
select rownum as id,
to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,
trunc(dbms_random.value(0, 100)) as random_id,
dbms_random.string('x', 20) random_string
from dual
connect by level <= 1000000;

100、数据库熟吗?用过哪些数据库?索引会吗?事务了解吗?写一个SQL 查询语句:给一个字段,对其进行从大到小排序,取前十行。
我平时的工作中会协助提高数据库的查询效率,会给数据 id 等创建索引; 事务开发那边用的比较多,然后我举了 ATM 机取款的例子。 SQL 语句如下
select field from table order by field desc limit 10

你可能感兴趣的:(面试测试开发岗,需要准备的100道题型)