去阿里、百度做测试的都是什么样的人

实不相瞒,早就已经有不少一路“躺赢”的同学,拿着offer功成身退,早早开启了无甚烦扰的大四时光。
在这里插入图片描述

但是!

也有很多测试小伙伴向小拿反应:找工作很难,特别是进大一点的厂!他们特别挑!!!

代码要会写,要有软件架构能力,问一大坨平时根本用不到的技术问题,还挑经验,挑沟通能力,挑这挑那,有时候还特么挑学历、挑年龄。。。
在这里插入图片描述

而招聘者同样也面临招人难的局面。想找到一个合适的人难于上青天,每天各种撒网,简历看几百份,面大几十人,能捞到一个中意的小伙伴就谢天谢地了。

总的来说:

“供求难以匹配,双方都很痛苦!”

今天小拿就来聊聊IT行业中这个让人既爱又恨的职位:

测试

能力要求是核心问题
软件、互联网近20年来飞速成长,其实也经历了很多阶段。

行业软件兴盛阶段和外包兴盛阶段(2000-2010年)行业进入了大量的测试人员,当时最主流的测试实践是:重心放在系统验收阶段。测试人员的主要工作基本都投入在了基于业务的黑盒测试上,对代码能力、系统理解的能力要求不多。

2010年后,互联网行业的真正兴起让国内软件开发模式开始缓慢调头,快速迭代的模式逐步兴起,开发周期越来越短,迭代越来越快,但系统越来越越庞大、复杂。

原来的测试工作模式和工作范围越来越无法满足要求了。但大量从业人员技能范围转变是一件很难的事情,行业是有巨大惯性的。从宏观上看大量QA技能转变跟不上需求转变是造成市场供求不匹配的主要原因。

什么样的人抢手
那么到底什么样的人才才会让大厂伸出橄榄枝呢?

1.测试的底子-项目经验:

有比较复杂系统的测试实战经验,你就超过了50%以上的应聘者。

什么叫做比较复杂系统呢?投入50人年开发出来的系统就可以称作一个复杂系统了。因此,复杂系统并不是很罕见。但是,如果你只接触一个简单的模块,甚至只是测试一个稳定模块的维护性开发,而不是通盘理解,不能说是测试过复杂系统。有从头到尾接触一个完整项目的经历很宝贵。

2.测试的底子-基础知识:

对照三本书:《ISTQB基础教程》 《高级软件测试设计》 《高级软件测试管理》(后两本是ISTQB的高级认证教程)。

这里边的内容你都能熟练应用(真的是熟练应用,而不只是有概念),你就能超过80%以上的应聘者了。

面试官通常会喜欢问几个问题:

如果测试时间不够,你会怎么办?

如果让你去测试一个你完全不熟悉的系统,你会怎么办?

你平时会使用那些测试设计方法?

看似很稀松平常的问题,非常考验人。因为大部分从业者都没有经受过系统训练和学习,工作多年,依然技能不足,意识跑偏。

3.熟练使用一门主语言:

满足这条,你就超过了70%的应聘者)

什么叫做熟练呢?

拿Java来说吧:系统学习过Java的教程,高频面试50题 这样的题可以自测一下,可以回答上35个以上;

熟悉最主流的Spring框架,能够写出一个简单的网站,实现基础的Restful 服务;

读懂过一个测试框架,如mockito或者Junit的源码;

能够熟练实施接口测试(基于一些测试框架 如:rest-assured+Junit);

能够读懂开发的业务代码,对他们的代码进行Code Review。d(´ω`*)

4.对一门语言有比较深入了解:

满足这条,你就超过了90%的应聘者。(妙啊~)

什么叫有深入了解呢?

还拿Java来说吧):

熟练使用Java的常见API;

深入理解基于语言特性/系统特性的知识,如Collections的实现机制、类型系统、I/O、网络、多线程等;

熟知设计模式(广义范围的设计模式,不局限于GOF的设计模式);

熟悉JVM的工作模式;熟练使用调试排查工具解决性能问题;

熟练掌握市面上常见的脚手架;

熟练掌握周边知识(OPs相关,网络知识相关)有不错的实战开发经验(做过真正被生产检验的东西);

对于测试开发,AOP,Java字节码技术是很重要的知识。。。 这是一个很长的学习list,需要几年时间来养成。做到这点,其实你可以胜任普通的开发岗位了,这也是高级测试开发岗位的技术底子。

5.在一个领域知识有不错的了解:

人不可能什么都懂,但工作几年之后,会在工作的域内一定要有积累才行。

例如,你测试一个核心电商系统的交易模块三年了,业务上你一定要熟练讲出来:商品列表、购物车、下单、退单、废单、支付、发货、库存、退款、优惠使用等等一坨业务流程,和可能出现的常见的坑(各类问题产生的资损、各类问题产生的服务不可用、逻辑矛盾),不然根本无法体现你经验沉淀和深入思考;技术角度上,你要能够画得出来系统的交互图,熟悉最核心的接口和最核心的参数,能够读懂开发的代码,熟练使用trace和监控工具,诊断定位线上问题到代码行。

6.用技术保障质量的能力:

测试开发岗一定会问到一个问题:你能够举一个你用技术手段提高测试效率,增强测试能力的例子么?

这是面试时最大的一个坎。 很多人会讲一些自动化测试回归的例子,但是真正成功的例子非常少,因为为什么做,怎么做都没有想好就照网上一个教程攒了一个,结果变成了玩具。

做好自动化,不仅仅是会使用工具、框架,其实要对被测物特性,软件生命周期有很深的理解并且有很强的开发知识才行。

实际上,在环境、CI、数据、测试用例生成、数据比对的很小的一些点上,都能有不错的提效产出,从这些点能够做得好,会得到不错的加分。有一个不错的成功案例,你胜出的几率就超过了80%,没有短板,就十拿九稳了。

7.技能以外的东西- 实战案例:

以前的工作印证了你的能力。

能够讲清楚一件特别拿得出手的工作,证明你能力的案例是面试时候最有用的投名状。

8.技能以外的东西 - 你的个人特质:

一般有如下特质会大大加分:快速学习、系统性学习、学以致用、系统性思考、强大的推动力、技术思维、突出的沟通能力、条理性、抗压性、乐观精神、抗挫折能力、迅速调整的能力、迭代改进的意识、ownership、团队合作、愿景和规划。

这些特性体现人的内核,有强大内核的人,做什么都行,技能暂时不足,也一定能补足。所以,在招聘的时候往往对是否录用的判断起决定性作用。
在这里插入图片描述

高段位要求(高级职位需求)

1.计算机领域知识的通盘理解:

这条范围非常大,人不可能什么都懂。但最最基础的知识是不能有盲点的:

操作系统工作基础原理与基础操作:如linux,要通读过linux操作系统的书,熟悉最基本的概念,基本命令要熟悉,shell要能写和读;

网络知识特别是TCP/IP, HTTP知识:推荐两本书 《图解tcp/ip》 《图解Http》这两本书里的东西要懂。

数据库知识:市面常见数据库(redis,mysql,oracle)的常见DBA操作,问题排查;SQL的熟练使用;

Web及移动端知识:能够懂HTML,CSS,能够读懂Javascript代码,能够读懂Android或者iOS的代码,做简单开发最好。

安全知识:常见的安全防护方法、工具使用;基本的安全攻防原理;

软件工程/开发过程管理:实战中各种磨练,建议系统的学习PMP,敏捷开发的一些认证课程。

2.在一个域的深耕:

人不可能什么都懂,但在一个领域是需要深耕的。

比如,在做了四、五年移动端测试以后。android和iOS都要具备一定的开发能力了,能读懂开发的业务代码是最基础的,能够代替开发实现部分业务功能,完成部分组件开发是个非常好的自检点。能够对移动端自动化工具栈、监控工具栈(如友盟、bugly、newrelic等)、内存泄露检测、卡顿检测、耗电量、弱网、流量、埋点、灰度、版本控制、兼容性、用户体验、安全等等的质量保障方案有通盘搞定能力。

什么叫搞定呢?

举个例子:比如,使用多种手段把崩溃率降低到千分之一以下。对于一个小团队,这是个很不容易实现的坎。做到这点,你需要了解如何收集崩溃率,如何使用一系列工具来定位核心问题,如何推动开发改动,并且预防(静态代码扫描工具引入,阻止乱用第不成熟的第三方插件,代码reivew防止常见pattern如空指针引发的崩溃,推动开发养成良好的log习惯,推动移动端防御性编程编程开发习惯,推动后端开发按照规范吐接口,帮助开发引入内存泄露、卡顿工具,趋势报表,警钟长鸣,各种灰度方式设置,线上监控。。。一个数据的改观,背后要有大量的质量相关工作)。

使用综合手段来保障软件质量提升效能的能力。

你能讲出自己做过5个以上这样的成功例子,我敢保障,你会被一线大厂疯抢。职级基本都是专家起。

3.持续学习能力和复杂问题解决能力:

例子1:

你近期的工作是帮助团队提升后台服务稳定性。你看到了netflix内部使用一个叫做ChaosMonkey的东西来随机对生产服务期进行攻击,而逼迫工程师提高稳定性,所以,你也实现了类似(更温和)的内部机制,推动团队稳定性的提高。

你怎么知道这个叫做ChaosMonkey的东西呢? 因为你会习惯性浏览一线厂商的技术博客,参与行业大会,关注各类新技术。持续性的养成习惯。

例子2:

做大规模接口自动化好难,外部数据依赖太难搞,参数构造太费劲,assert太难写。如果能够简单的录制回放就好了。

但是,外部依赖是个天坑,写操作mock也是个天坑,assert也是个天坑。

实际的案例是,经过几年多个团队持续不屑的填坑,阿里内部已经有应用级的录制回放工具了,数百个应用成功的是用了它,把不可能回归的任务变成了可能(上万数量级的case当天生成,当天投入使用,并可以分析覆盖率),自动化测试实施需要付出的工作时间革命性降低(不足原来付出时间的10%)。

其它能力 测试是个万金油,高阶一些的职位需要什么都要会一些 ,因为越高阶的职位需要解决的问题越综合,需要打交道的人的种类越多。不然很容易变成你职业短板,做个list吧(一定不全):

很好的项目管理能力,至少与开发经理能力同级,甚至要强于他。

一定的软件架构能力。

一定的产品sense:可以跟一个资深的产品经理能够顺畅的交流,明白知道他为什么会这么想,所要实现产品的意义,路径;从产品质量方面的考虑要超过产品经理,给他输出。

极好的沟通能力。

团队管理能力(这个太重要)

目标管理能力

有一个好的内核

怎么转型/怎么进阶

其实不难,没有什么高端的方法。下面这4条就够了,核心秘密就是坚持不懈。

1.熟悉你的被测系统,熟悉你的被测系统,熟悉你的被测系统。

能够从技术、业务角度做到对被测系统熟悉是做一个好QA的最基本职业素养,也是能力提升的最主要源泉。

自检点:我能够画出系统的架构图么?我能够读懂开发的代码么?我熟悉常见的业务监控系统么?熟悉日志系统么?知道开发是如何调试和定位问题的么?给我一个线上问题,我能定位么?我能给别人完整的介绍这个域的核心业务么?我能自己直接动手发布上线一个系统么?知道如何回滚么?灰度是如何做的? 我知道所有关键的技术点么,如一个交易的幂等性是如何实现的?我在团队中有:“这家伙对系统最熟”的口碑么?

如果自检点全部是否定答案。。。 花一年时间把它全变成肯定答案。这一过程,你一定被迫学到了很多很多,并且获得了极为长足的成长,这是进阶的必由之路,也是卡了很多人的地方。如果说做不到,后面不用看了,前面的也全部忘掉吧。

方法:通读所有文档,强迫自己读代码,积极参与开发所有讨论,不懂的狂问,观察开发如何上线,如何排查问题,模仿,学习,善用搜索引擎,总结。。。

2.找到问题解决问题,找到问题解决问题,找到问题解决问题。

你一定有一堆问题,如果你觉得自己做得挺好,没有问题要解决,那必然是你自己有巨大的问题!

自检点:找一支笔,写出你觉得质量方面,你的team的10个问题,做排序。排出最重要的3个。

方法:找到top3的问题,选一个,列个接话,去解决。如果找不出来,使劲去观察,然后去看看做的好的同行,比比你比人家差在哪里。尝试去解决这些问题,从小问题,能够见到效果的问题入手,设置一个时间点。你真正解决了5个以上问题以后,感觉一定会有。

3.系统学习,系统学习,系统学习

自检点:我系统的学过一门知识么?我能讲清楚我这么操作,我写的这行代码的原理么?

方法:从工作出发,确认你需要补足哪些知识。从网上找一个具体知识的学习路线图,订个计划,照着来。 参加学习小组,找到帮你解决难题的人,多请他吃饭,多请教他。获取知识后,马上回到工作中做检验。还是学以致用才能有所增长。结合工作来系统学习的效果是最好的。

再举个例子:

上家公司有个小伙伴(他应该也会泡这个社区),开始应聘的时候,他说熟悉jenkins,用的很多。所以第一份工作是:把所有CI的日常工作交给了他,并告知2个月内要全部搞定。

他一下懵逼了,原来那些不深入的理解支撑不了工作要求。后来他每天死磕,看了jenkins所有的文档(对,几乎所有文档通读了一遍),翻了无数问题的解决帖子,记录了上百个问题解决的过程,写了上百篇jenkins的小blog(现在还没公布出来)。

几个月以后,他比我熟了,他的一项基础能力成长为:可以独自给一个小公司完整的搞定前端、后端、移动端的一整套CI解决方案。其实单凭这一套,就能找到不错的工作了。这是依托工作,系统性学习的结果。

看到有同学说要裸辞,去接受培训。

我的建议是,别这样。

裸辞你就失去了学以致用的阵地,失去了真正解决问题的机会,还失去了资金来源。依托工作,自主学习是王道。自己饶过不去坎,其实有很多网上教程和非脱产培训班啊。

4.选择有挑战的团队,选择有挑战的团队

自检点:在团队里有很多人比我强么?周围的同事都是我佩服的么?我做的事儿有挑战么?

方法:如果这三点都是否定的,并且你处于职业生涯的早期。也许(只是也许),你该考虑一下换个团队了)

下面是我的学习路线(资料),供大家参考。

这份资料整体是围绕着【软件测试】来进行整理的,主体内容包含:python自动化测试专属视频、Python自动化详细资料、全套面试题等知识内容。对于软件测试的的朋友来说应该是最全面和完整的备战仓库了,这个仓库也陪伴我走过了很多坎坷的路,希望也能帮助到你。加入软件测试交流qq群::644956177,就可以直接获取了最后呢,感谢相遇,感谢缘分,感谢支持,感谢选择,感谢信任。让我找到了满意的工作。也祝大家可以顺利找到心仪的工作,成功转行!

一、测试基础

了解测试的基础技能,掌握主流缺陷管理工具的使用,熟练测试环境的操作与运维
在这里插入图片描述

二、Linux必备知识

Linux作为现在最流行的软件环境系统,一定需要掌握,目前的招聘要求都需要有Linux能力。

在这里插入图片描述

三、Shell脚本

掌握Shell脚本:包括Shell基础与运用、Shell逻辑控制、Shell逻辑函数
在这里插入图片描述

四、互联网程序原理

自动化必经之路:前端开发基础知识以及互联网网络必备知识四、互联网程序原理

在这里插入图片描述

五、MySQL数据库

软件测试工程师必备MySQL数据库知识,不仅仅停留在基本的“增删改查”。
在这里插入图片描述

六、抓包工具

Fiddler,Wireshark,Sniffer,Tcpdump各种抓包工具适用于各种项目,总有一款适合你的
在这里插入图片描述

七、接口测试工具

接口测试神器,你绕不开的强大工具:Jmeter。小巧灵活:Postman

在这里插入图片描述

八、Web自动化测试Java&Python

了解自动化的目的,熟练掌握TestNG&unittest自动化框架,以及断言与日志处理

在这里插入图片描述

九、接口与移动端自动化

专业接口调用、测试解决方案。组建完整的web和接口自动化框架,Appium整体使用
在这里插入图片描述

十、敏捷测试&TestOps构建

TestOps,持续集成Jenkins框架烂熟于心
在这里插入图片描述

十一、性能测试&安全测试

在这里插入图片描述

共勉:【可能给予你助力的教程】

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。
在这里插入图片描述

在这里插入图片描述

关注我的微信公众号【程序媛木子】免费获取~

Spring AI 是一个受 Spring 生态启发的 **通用工智能(AI)抽象框架**,旨在为 Java 开发者提供一套统一、简洁、可移植的方式来集成各种大语言模型(LLM)服务,如 OpenAI、通义千问、百度文心一言、Azure OpenAI、Hugging Face 等。 它的总体架构设计遵循了经典的 **Spring 分层抽象思想**,强调 **厂商无关性、接口标准化和可扩展性**。 --- ### ✅ Spring AI 总体架构图(逻辑分层) ``` +-------------------------------------------------------+ | Applications | | (Controllers, Services, PromptTemplate, etc.) | +-------------------------------------------------------+ ↓ ↑ +-------------------------------------------------------+ | Core Abstractions | | ChatClient, EmbeddingClient, ImageModel, etc. | ← 核心接口 +-------------------------------------------------------+ ↓ ↑ +-------------------------------------------------------+ | Vendor-Specific Implementations | | OpenAichatClient, QwenChatClient, HfEmbedding... | ← 厂商实现 +-------------------------------------------------------+ ↓ ↑ +-------------------------------------------------------+ | HTTP Clients & Data Models | | RestTemplate / WebClient + JSON DTOs | +-------------------------------------------------------+ ``` --- ## 1. 应用层(Application Layer) 这是你编写业务逻辑的地方。你可以通过依赖注入使用标准 AI 接口,无需关心底层是哪家厂商。 ```java @Service public class AiService { private final ChatClient chatClient; private final EmbeddingClient embeddingClient; public AiService(ChatClient chatClient, EmbeddingClient embeddingClient) { this.chatClient = chatClient; this.embeddingClient = embeddingClient; } public String generate(String prompt) { return chatClient.call(prompt); } } ``` ✅ 特点: - 不绑定任何具体 LLM 提供商 - 可轻松切换模型后端(只需更换配置或 Bean) - 支持提示词模板、消息历史管理等高级功能 --- ## 2. 核心抽象层(Core Abstractions) 这是 Spring AI 的核心,定义了一组与厂商无关的标准接口和数据模型。 ### 主要接口: | 接口 | 功能说明 | |------|----------| | `ChatClient` | 同步聊天接口,用于文本生成(如对话、文案) | | `StreamingChatClient` | 流式输出接口,支持实时返回 token(SSE) | | `EmbeddingClient` | 向量化接口,将文本转为向量(用于 RAG、语义搜索) | | `ImageModel` | 图像生成模型接口(如 DALL·E) | | `AudioTranscriptionModel` | 音频转录接口 | ### 主要数据对象: | 类名 | 说明 | |------|------| | `Prompt` | 封装输入提示,包含多个 `Message` | | `Message` | 消息基类,有子类:`UserMessage`, `AssistantMessage`, `SystemMessage` | | `ChatResponse` | 响应结果,包含一个或多个 `Generation` | | `Generation` | 单条生成内容,含文本、token 数统计等元信息 | | `PromptTemplate` | 提示词模板引擎,支持 SpEL 表达式动态填充变量 | 示例: ```java var message = new UserMessage("请写一篇关于春天的短文"); Prompt prompt = new Prompt(message); ChatResponse response = chatClient.call(prompt); String result = response.getResult().getOutput().getContent(); ``` --- ## 3. 厂商实现层(Vendor Implementations) 每个 LLM 提供商都需要实现上述核心接口。例如: | 实现类 | 对应服务 | |--------|-----------| | `OpenAiChatClient` | OpenAI GPT-3.5 / GPT-4 | | `AzureAiChatClient` | Azure OpenAI Service | | `HuggingFaceEmbeddingClient` | HuggingFace 模型 API | | `VertexAiChatClient` | Google Vertex AI | | 自定义 `QwenChatClient` | 阿里云通义千问 | 这些实现通常基于 `RestTemplate` 或 `WebClient` 调用厂商 REST API,并处理请求/响应序列化。 它们会读取配置文件中的 key、endpoint、model name 等参数来初始化客户端。 --- ## 4. 底层通信层(HTTP & Serialization) - 使用 `RestTemplate` 或 `WebClient` 发起 HTTPS 请求 - 数据格式:JSON - 认证方式:Bearer Token(Authorization Header) - 错误处理:封装异常为 `RuntimeException` 或自定义 `AiException` --- ## 📦 配置驱动:自动装配机制 Spring AI 支持通过 `application.yml` 配置不同提供商: ```yaml spring: ai: openai: api-key: sk-xxxxxx model: gpt-3.5-turbo # 或将来可能支持 dashscope: api-key: xxxxxx model: qwen-max ``` 配合 `@ConditionalOnProperty` 和 `AutoConfiguration`,可以实现按需加载对应 Bean。 --- ## 🔧 扩展能力 Spring AI 还支持以下高级特性: | 功能 | 说明 | |------|------| | `PromptTemplate` | 动态构建提示词,支持变量替换:<br>`"Hello {name}, today is {date}."` | | `MessageHistory` | 维护会话上下文,实现多轮对话 | | `Function Calling` | 支持调用外部函数(部分厂商如 OpenAI 支持) | | `Retrieval Augmented Generation (RAG)` | 结合向量数据库实现知识增强问答 | | `Observability` | 支持 tracing、metrics(实验性) | --- ## ✅ 架构优势总结 | 优势 | 说明 | |------|------| | **解耦** | 上层应用不依赖具体 LLM 厂商 | | **可移植** | 切换模型只需改配置或 Starter | | **标准化** | 提供统一 API,降低学习成本 | | **易测试** | 可 mock `ChatClient` 进行单元测试 | | **可扩展** | 可自定义实现新厂商接入 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值