35岁的测试被裁,公司地位还不如00后...
Posted 静姐说测试
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了35岁的测试被裁,公司地位还不如00后...相关的知识,希望对你有一定的参考价值。
国内的互联网行业发展较快,所以造成了技术研发类员工工作强度比较大,同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高,超过35岁的基层研发类员工,往往因为家庭原因、身体原因,比较难以跟得上工作节奏,所以裁员往往优先考虑这类员工。
测试工程师也属于技术研发中的一员,所以35岁就是一个门槛了,这并不是说35岁后一定会被淘汰,但是面临的选择肯定会大大减少。这样公司会培养00后,也不会让35岁的测试工程师发光发热....
大多数人都是在22-23岁参加工作,工作两三年后逐渐积累了一些工作经验,开始进入了职业生涯的黄金期。可以看到,测试工程师职业黄金期也就十年左右。
早期的互联网行业红利期虽然已经过去了,但是也一直不断有新的机遇出现。对于大多数人来说,如何在短短十年内,通过奋斗在本职业上建立一些成就,为自己创造更多的积累呢?
我想谈谈自己对测试工程师职业生涯的一些看法,纯属个人意见,如有不同看法,欢迎在留言区拍砖讨论。
01、职业生涯的规划
老生常谈,“职业规划”这个词大家已经都听腻了,从高中到大学,老师就一直在讲每个人要有自己的职业规划。出来工作去面试,HR也在问职业规划。但是根据我的观察,大多数人在职业生涯早期,是没有职业规划的,包括我自己,因为没有什么危机感。
事实证明,越早进行职业的规划,目标越清晰的人,将来的发展就越好。因此每个人都应该尽早确定,未来几年内,我的个人能力逐步应该达到一个什么水平,进入到一个什么级别的公司。再接下来几年,又应该达到一种什么样的水准。你想成为什么样的人,决定了你会成为什么样的人。
02、选择大于努力
在刚毕业的时候,大多人是没有太多选择的(985、211学霸们可以走开了),但是当工作三年后,有了一定的技术积累后,如何选择下一阶段的公司呢?
相信很多人都面临过这样的一些场景,手里有两个offer:一家创业公司,一家行业大公司。两家公司给的待遇都差不多,甚至创业公司更好一些。
小公司的HR往往会这么跟你说:”xx大公司一个萝卜一个坑,进去就是当一个螺丝钉。在我们这里你可以接触更多的业务,你可以学习更多的东西,小公司更锻炼人,而且我们给的钱更多,我们还给你期权”。当你屁颠屁颠入职后,进去后发现工作中既当爹又当妈,工作根本没有边界。负责的业务越多,背的锅也就越多。期权什么的都是大饼,公司倒闭了什么的,都是泡沫了。
而在大公司里,分工很明确,流程比较规范,工作的边界很清晰。分工的明确就意味着你做一个项目,可以跟好多其他工种打交道,更好的锻炼沟通协调能力。以及观察项目的规范运转模式。大公司里技术也比较成熟,可以学习到很多先进的理念,扩宽自己的技术视野。所以即便是一颗螺丝钉,你不但可以让自己更坚固,在自己的职位上拧的更紧,同时你也有机会去了解整个机器的运行原理和细节。甚至以后你能自己建造一个机器,你还会认识一些其他的优秀的螺丝钉,慢慢形成一个螺丝钉联盟,这对将来你的发展是很有帮助的。
从另外一个方面来讲,每个人应该都有一份大公司的经历背景。将来换工作的时候,HR面对众多简历,如何快速筛选出候选人? 是因为你简历里写的那些牛逼的项目?还是因为你简历里吹的天花乱坠的技术能力?都不是,因为你有一份大公司的工作背景。这绝对是个加分项。越是知名的公司,越看中同类规模公司的工作经历。
还有一种情况虽然选择了一家小公司,但是误打误撞进入了一家幼年独角兽,比如2000年左右加入了阿里巴巴。那你今天就不用看这篇文章了。但是这种概率毕竟太小。经验不具备可复制性,创业成功的概率太低了,中间还得经历多少坚持和挣扎才能成长为呼风唤雨的神兽呢。
03、个人能力提升
好多朋友已经忍不住了,道理我都懂啊,我也想进BAT,但是实力不允许啊!这就是另外一个问题,职业规划做好的前提下,配套服务一定得跟上,那就是个人能力的提升。
在工作两三年后,大概在25岁-28岁之间,绝对是你进入大公司的最好时机。这个时候的你,风华正茂,朝气蓬勃,未来有无限的可能性,并且需要的薪水并不太高。你并不需要非常强的技术能力就能进去。一旦过了30岁,并不是说进不去了,而是普通职位已经不向你开放了,你需要更强的技术能力,差不多某方面专家的水平,才能进去。
怎么样提升自己的技术能力呢?答案只有两个字:
工作中学到的只能保证你不被别人落下。工作之外的时间,才是你提高的机会。毕业时同一批进入公司的同事,工作两年后,突然要离职,因为他收到了BAT的offer,你肯定会酸酸的想,他运气比较好,面试的时候没问什么难题。其实你并不知道他在工作之外的时间是怎么度过的。
刚毕业的前两三年,千万别荒废,这个时候大多数的人都还没有成家立业,甚至还没有对象,这绝对是你能静下心来好好学习技术的最佳时间。等你结婚生子后,琐事繁多,属于你个人的时间就越来越少。
肯定会有人说,工作太忙没有时间学。这个大家都懂,借口而已!
另外一个问题,测试工程师应该学什么呢?自动化还是性能?Java还是Python,APP端还是服务端?
答案很残酷,都得学!
但是人的精力是有限的,所以一定得排优先级。我的建议是代码优先。对于已经有两三年工作经验的测试工程师来说,基本的测试素养已经在工作中得到了锻炼。但是代码能力是测试工程师的一个短板,这也是大公司非常看重的一点要求。毕竟代码能力强的孩子,其他方面一般也不会太差,你学习代码的过程中,还会学习到其他方面的知识,如数据库、网络协议、操作系统等。这对你的提升的全方位的。
那么代码学到什么程度呢?
对于一个测试工程师来讲,先系统学习掌握基础类库和api,达到掌握的程度;再学会使用企业内常用开发框架,达到一种会用的程度。
代码学习后,再去学习行业内常用的一些自动化框架和性能框架,你就会感觉比较容易上手了。
需要注意的是,学代码一定要边学边练,争取自己开发一些小工具,一是对理论的一个实践,二是会有阶段性的成就感,鼓舞自己坚持下去。
如果你通过一段时间的学习加实践,能成功搞定(自动化工具开发+上线)一整套自动化工程,那你就比国内95%的码农都要厉害了,这时就是你挑公司而不是公司挑你了。
在测试测开的整个体系中,自动化测试又是缺口最大的,而真的能独立做自动化的人凤毛菱角。很多功能测试的同学想转型做自动化时都会遇到这些问题——
自学找不到门路,迟迟没有进展
市面上的视频零零散散不系统, 不能系统串联知识点
代码0基础,脚本看不懂,改都不知道怎么改
最核心的问题是 没有项目实战!企业就不认可,导致不能转型成功
基于市场上大量的软件测试开发人员岗位需求,和人才缺口之间的矛盾,我们的课程完美的匹配了各大厂对测试开发的能力要求。帮助了上千位测试同学快速积累了测试开发实战经验,并成功进入一线互联网大厂。
我的自动化测试之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,所以,我和朋友特意花了一段时间整理编写了下面的《自动化测试工程师学习路线》,也整理了不少【网盘资源】,需要的朋友可以点击文末小卡片加入我的学习交流qun免费领取。希望会给你带来帮助和方向。
一、先学习一门编程语言,建议python
二、Python自动化测试框架应用
三、自动化测试篇 - Web UI 自动化
四、自动化测试篇 - 移动端UI 自动化
五、自动化测试篇 - 接口自动化测试
六、自动化测试篇 - 持续集成Git、jenkins、Docker
七、自动化测试篇 - 性能测试LoadRunner、jmeter、app性能
八、自动化测试篇 - WEB安全测试、渗透测试、漏洞扫描
九、自动化测试篇 - RobotFramework、AirTest
10、测试开发篇-自动化测试平台开发
11、互联网高薪测试拓展知识、Redis、MongoDB、nginx集群实战
上面就是我为大家整理出来的一自动化测试工程师发展方向知识架构体系图。希望大家能照着这个体系在3-4个月完成这样一个体系的构建。可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。正所谓万事开头难,只要迈出了第一步,你就已经成功了一半,等到完成之后再回顾这一段路程的时候,你肯定会感慨良多。
送给大家一句话:
让自己变得更强:想一想,如果你想在测试这个行业一直做下去,你的经验和测试技术是远远不够的,你需要进阶,你需要丰富你的技术栈!还等什么!
今天的分享就到此结束了, 如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入下方我们的测试交流群大家一起讨论交流学习。
35岁的程序员被裁,秀出天际!
1. 面试官:工作中使用过Zookeeper嘛?你知道它是什么,有什么用途呢?
小菜鸡的我:
- 有使用过的,使用ZooKeeper作为dubbo的注册中心,使用ZooKeeper实现分布式锁。
- ZooKeeper,它是一个开放源码的分布式协调服务,它是一个集群的管理者,它将简单易用的接口提供给用户。
- 可以基于Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
- Zookeeper的用途:命名服务、配置管理、集群管理、分布式锁、队列管理
用途跟功能不是一个意思咩?
2. 面试官:说下什么是命名服务,什么是配置管理,又什么是集群管理吧
小菜鸡的我(幸好我刷过面试题),无所畏惧
-
命名服务就是:
命名服务是指通过指定的名字来获取资源或者服务地址。Zookeeper可以创建一个全局唯一的路径,这个路径就可以作为一个名字。被命名的实体可以是集群中的机器,服务的地址,或者是远程的对象等。一些分布式服务框架(RPC、RMI)中的服务地址列表,通过使用命名服务,客户端应用能够根据特定的名字来获取资源的实体、服务地址和提供者信息等。
-
配置管理: :
实际项目开发中,我们经常使用.properties或者xml需要配置很多信息,如数据库连接信息、fps地址端口等等。因为你的程序一般是分布式部署在不同的机器上(如果你是单机应用当我没说),如果把程序的这些配置信息保存在zk的znode节点下,当你要修改配置,即znode会发生变化时,可以通过改变zk中某个目录节点的内容,利用watcher通知给各个客户端,从而更改配置。
-
集群管理
集群管理包括集群监控和集群控制,其实就是监控集群机器状态,剔除机器和加入机器。zookeeper可以方便集群机器的管理,它可以实时监控znode节点的变化,一旦发现有机器挂了,该机器就会与zk断开连接,对用的临时目录节点会被删除,其他所有机器都收到通知。新机器加入也是类似酱紫,所有机器收到通知:有新兄弟目录加入啦。
3. 面试官:你提到了znode节点,那你知道znode有几种类型呢?zookeeper的数据模型是怎样的呢?
小菜鸡的我(我先想想):
zookeeper的数据模型
ZooKeeper的视图数据结构,很像Unix文件系统,也是树状的,这样可以确定每个路径都是唯一的。zookeeper的节点统一叫做znode,它是可以通过路径来标识,结构图如下:
znode的4种类型
根据节点的生命周期,znode可以分为4种类型,分别是持久节点(PERSISTENT)、持久顺序节点(PERSISTENT_SEQUENTIAL)、临时节点(EPHEMERAL)、临时顺序节点(EPHEMERAL_SEQUENTIAL)
-
持久节点(PERSISTENT)
这类节点被创建后,就会一直存在于Zk服务器上。直到手动删除。
-
持久顺序节点(PERSISTENT_SEQUENTIAL)
它的基本特性同持久节点,不同在于增加了顺序性。父节点会维护一个自增整性数字,用于子节点的创建的先后顺序。
-
临时节点(EPHEMERAL)
临时节点的生命周期与客户端的会话绑定,一旦客户端会话失效(非TCP连接断开),那么这个节点就会被自动清理掉。zk规定临时节点只能作为叶子节点。
-
临时顺序节点(EPHEMERAL_SEQUENTIAL)
基本特性同临时节点,添加了顺序的特性。
4、面试官:你知道znode节点里面存储的是什么吗?每个节点的数据最大不能超过多少呢?
小菜鸡的我:
znode节点里面存储的是什么?
Znode数据节点的代码如下
public class DataNode implements Record {
byte data[];
Long acl;
public StatPersisted stat;
private Set<String> children = null;
}
哈哈,Znode包含了存储数据、访问权限、子节点引用、节点状态信息,如图:
- data: znode存储的业务数据信息
- ACL: 记录客户端对znode节点的访问权限,如IP等。
- child: 当前节点的子节点引用
- stat: 包含Znode节点的状态信息,比如事务id、版本号、时间戳等等。
每个节点的数据最大不能超过多少呢
为了保证高吞吐和低延迟,以及数据的一致性,znode只适合存储非常小的数据,不能超过1M,最好都小于1K。
5、面试官:你知道znode节点上的监听机制嘛?讲下Zookeeper watch机制吧。
小菜鸡的我:
- Watcher机制
- 监听机制的工作原理
- Watcher特性总结
Watcher监听机制
Zookeeper 允许客户端向服务端的某个Znode注册一个Watcher监听,当服务端的一些指定事件触发了这个Watcher,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher通知状态和事件类型做出业务上的改变。
可以把Watcher理解成客户端注册在某个Znode上的触发器,当这个Znode节点发生变化时(增删改查),就会触发Znode对应的注册事件,注册的客户端就会收到异步通知,然后做出业务的改变。
Watcher监听机制的工作原理
- ZooKeeper的Watcher机制主要包括客户端线程、客户端 WatcherManager、Zookeeper服务器三部分。
- 客户端向ZooKeeper服务器注册Watcher的同时,会将Watcher对象存储在客户端的WatchManager中。
- 当zookeeper服务器触发watcher事件后,会向客户端发送通知, 客户端线程从 WatcherManager 中取出对应的 Watcher 对象来执行回调逻辑。
Watcher特性总结
- **一次性:**一个Watch事件是一个一次性的触发器。一次性触发,客户端只会收到一次这样的信息。
- 异步的: Zookeeper服务器发送watcher的通知事件到客户端是异步的,不能期望能够监控到节点每次的变化,Zookeeper只能保证最终的一致性,而无法保证强一致性。
- 轻量级: Watcher 通知非常简单,它只是通知发生了事件,而不会传递事件对象内容。
- 客户端串行: 执行客户端 Watcher 回调的过程是一个串行同步的过程。
- 注册 watcher用getData、exists、getChildren方法
- 触发 watcher用create、delete、setData方法
6、面试官:你对Zookeeper的数据结构都有一定了解,那你讲下Zookeeper的特性吧
小菜鸡的我:(我背过书,啊哈哈)
Zookeeper 保证了如下分布式一致性特性:
- 顺序一致性:从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。
- 原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
- 单一视图:无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
- 可靠性: 一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会被一直保留下来。
- 实时性(最终一致性): Zookeeper 仅仅能保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。
7、面试官:你刚提到顺序一致性,那zookeeper是如何保证事务的顺序一致性的呢?
小菜鸡的我:(完蛋了这题不会)
需要了解事务ID,即zxid。ZooKeeper的在选举时通过比较各结点的zxid和机器ID选出新的主结点的。zxid由Leader节点生成,有新写入事件时,Leader生成新zxid并随提案一起广播,每个结点本地都保存了当前最近一次事务的zxid,zxid是递增的,所以谁的zxid越大,就表示谁的数据是最新的。
ZXID的生成规则如下:
ZXID有两部分组成:
- 任期:完成本次选举后,直到下次选举前,由同一Leader负责协调写入;
- 事务计数器:单调递增,每生效一次写入,计数器加一。
ZXID的低32位是计数器,所以同一任期内,ZXID是连续的,每个结点又都保存着自身最新生效的ZXID,通过对比新提案的ZXID与自身最新ZXID是否相差“1”,来保证事务严格按照顺序生效的。
8、面试官:你提到了Leader,你知道Zookeeper的服务器有几种角色嘛?Zookeeper下Server工作状态又有几种呢?
小菜鸡的我:
Zookeeper 服务器角色
Zookeeper集群中,有Leader、Follower和Observer三种角色
Leader
Leader服务器是整个ZooKeeper集群工作机制中的核心,其主要工作:
- 事务请求的唯一调度和处理者,保证集群事务处理的顺序性
- 集群内部各服务的调度者
Follower
Follower服务器是ZooKeeper集群状态的跟随者,其主要工作:
- 处理客户端非事务请求,转发事务请求给Leader服务器
- 参与事务请求Proposal的投票
- 参与Leader选举投票
Observer
Observer是3.3.0 版本开始引入的一个服务器角色,它充当一个观察者角色——观察ZooKeeper集群的最新状态变化并将这些状态变更同步过来。其工作:
- 处理客户端的非事务请求,转发事务请求给 Leader 服务器
- 不参与任何形式的投票
Zookeeper下Server工作状态
服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。
- 1.LOOKING:寻找Leader状态。当服务器处于该状态时,它会认为当前集群中没有 Leader,因此需要进入 Leader 选举状态。
- 2.FOLLOWING:跟随者状态。表明当前服务器角色是Follower。
- 3.LEADING:领导者状态。表明当前服务器角色是Leader。
- 4.OBSERVING:观察者状态。表明当前服务器角色是Observer。
9、面试官:你说到服务器角色是基于ZooKeeper集群的,那你画一下ZooKeeper集群部署图吧?ZooKeeper是如何保证主从节点数据一致性的呢?
小菜鸡的我:
ZooKeeper集群部署图
ZooKeeper集群是一主多从的结构:
- 如果是写入数据,先写入主服务器(主节点),再通知从服务器。
- 如果是读取数据,既读主服务器的,也可以读从服务器的。
ZooKeeper如何保证主从节点数据一致性
我们知道集群是主从部署结构,要保证主从节点一致性问题,无非就是两个主要问题:
- 主服务器挂了,或者重启了
- 主从服务器之间同步数据~
Zookeeper是采用ZAB协议(Zookeeper Atomic Broadcast,Zookeeper原子广播协议)来保证主从节点数据一致性的,ZAB协议支持崩溃恢复和消息广播两种模式,很好解决了这两个问题:
- 崩溃恢复:Leader挂了,进入该模式,选一个新的leader出来
- 消息广播: 把更新的数据,从Leader同步到所有Follower
Leader服务器挂了,所有集群中的服务器进入LOOKING状态,首先,它们会选举产生新的Leader服务器;接着,新的Leader服务器与集群中Follower服务进行数据同步,当集群中超过半数机器与该 Leader服务器完成数据同步之后,退出恢复模式进入消息广播模式。Leader 服务器开始接收客户端的事务请求生成事务Proposal进行事务请求处理。
总结
无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
最后,如果有想要我整理的面试资料的,可以**戳这里免费领取**,我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。
家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
最后,如果有想要我整理的面试资料的,可以**戳这里免费领取**,我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。
[外链图片转存中…(img-O51hWmdh-1624869834466)]
以上是关于35岁的测试被裁,公司地位还不如00后...的主要内容,如果未能解决你的问题,请参考以下文章