当前位置: 首页 > news >正文

【郭东白架构课 模块一:生存法则】07|法则三:架构师如何找到自己的商业模式?

你好,我是郭东白,今天我们来聊聊架构活动中对商业价值的考量。

今天我们要讲的是架构师的第三个生存法则:作为一个架构师,必须要在有限的资源下最大化架构活动所带来的商业价值。对于任何一个架构活动而言,架构师的可用资源,包括商业成本、研发成本、时间成本、迁移成本等等,都是非常有限的。但架构活动就是要在这些限制条件之下,将商业价值最大化。

你可能还处在职业生涯的初期,不太关注商业价值,不知道我们的工作最终能为公司带来什么样的商业收入。我刚工作时,也从来没想过我的工资是从哪里来的;公司凭什么会在明天、明年甚至十年后还会给我发工资;更别说思考我为社会创造的价值了。

但随着在职业上的不断成长,我越来越深刻地意识到,必须要为自己所在的企业创造出可度量的商业价值,这是我们获得有质量的长期收入的重要前提。

要了解商业价值,我们就要先了解商业模式。所以在正式讲解第三条法则之前,我先来对商业模式与商业价值做一个简单的区分。

什么是商业模式?什么是商业价值?

商业模式(Business model) 就是讲一个企业是以什么样的方式赚钱的,比如电商行业,有自营和平台两种不同的商业模式。

商业价值 (Business value) 呢,就是从现金收入的视角看价值创造的过程。你每天忙碌的工作,从企业的收入上来说,可以为公司带来什么样的短期和长期现金和其他收入,那么对这部分收入的量化,就是你创造的商业价值。简单来说,商业价值就是帮助公司获取商业收入。

那么作为一个技术人员,本来是写代码做架构设计的,那你是怎么为公司创造商业价值的呢?从创造商业价值视角来看,你的代码和设计有三个作用:

  • 实现一个商业模式;
  • 提升一个商业模式的效率;
  • 加速一个商业模式的收敛速度。

也就是说,你作为一个程序员,主要通过上面这三个路径为公司赚钱。

举个例子来说,你写代码实现一个电商平台的一部分功能,最终电商平台可以获取交易收入。或者是你实现一个算法,提升了买家转换率,从而提升了电商平台这个商业模式的效率。你也可以通过 A/B 实验的平台、数据仿真的功能等等,加速一个公司的商业模式收敛速度。这些都是为公司增加收入的办法,所以公司多赚的这部分钱就可以归因到你,也就是你为公司创造了商业价值。

或许你是一家企业里做软件基础设施的,比如说写云平台、自动化测试平台、财务系统和数据平台。那么当你通过企业内部用户来间接创造商业价值,通过提升用户的日常工作效率、产品质量、运营效率、决策质量和商业洞察的质量,这个时候,你同样也为企业创造了商业价值。
我会把第三条生存法则分为五个部分来讲:

  • 理解你所在的企业或团队的商业模式;
  • 理解你在自己所处环境中创造的商业价值;
  • 保障架构活动的长期商业价值;
  • 在架构规划中寻找扩大收入的机会;
  • 在架构规划中寻找减少成本的机会。

这节课我们先来讲前三个部分,下节课再来学习后面两个。

理解一个企业或团队的商业模式

我们先来看第一个话题,理解一家企业或团队的商业模式。

我发现,在一个领域做了很多年的研发人员、架构师,甚至是团队主管,都不太清楚自己开发的模块和所在领域的商业模式是什么。这很危险,不知道商业模式,就没法主动创造商业价值,你的日常工作很可能只是不断被动实现需求。这时候,你的成长也会是缓而慢的。

一家企业必须要有收入,虽然这个收入不一定来自当下,但它肯定会有一个可持续的商业模式。也就是从长期来看,有稳定且健康的收入,以及可控的成本,并且最终要做到盈利。这个商业模式,就是我们主动创造商业价值的突破口。

一个商业模式的技术表达公式

作为技术人,我们可以把自己领域的商业模式用一个公式来表达;然后学会在这个公式中,寻找并创造自己的价值。

这个公式,其实就是对所在行业的商业逻辑的数学表达,也就是我们常说的 KPI 的逻辑。
比如说天猫这个电商平台,它的主要收入来自于交易抽成:

总收入 = GMV * Commission

网站的交易额越大,抽成就越多。网站规模越大,总收入就越多。

但到了不同的细分领域,每个领域的商业模式,就会分解成不一样公式了。比如说你负责天猫平台的一个由算法驱动的购物频道,那么你们的商业模式可能是这样的:

GMV= 流量 * 转化率 * 平均订单金额

对于你们整个团队而言,入口流量是一定的,那么你可以通过优化算法,来获得更高的转化率和更高的平均订单金额。

如果你负责天猫平台某个垂直行业的招商团队,那么你们的商业模式可能是这样:

GMV= 日均动销店铺数 * 店铺日均销售额

假设每个店铺的销售额差不多,那么你的目标就是让平台上有越来越多的店铺。显然,这种商业模式不同于上节课讲的放大马太效应的拼多多模式。你需要发现更多的玩家,努力扩大你的基盘。所以这种商业模式就特别适合用于像履约范围和能力都有限的场景,比如外卖、社区团购或便利店。

如果你负责某个垂直行业的大商户运营团队,那么你们的商业模式可能是这样:

GMV= 活动参与次数 * 平均计划销售额 * 计划达成率

你需要说服平台的大商户来参加平台活动。而且每场活动,大商户和平台双方都要达成一个计划销售额,保障双方可以投入足够的流量和营销资源,确保销售计划达成率到 100%。很显然,这种商业模式需要双方的深度配合,来确保营销活动的成功。

如果你负责商品团队,那么你们的商业模式可能是这样的:

GMV= 动销商品数 * 订单数 * 每订单件数 * 件单价

那么你们团队的商业模式需要找到更多受用户欢迎的商品,来提升动销商品数;通过撬动更多的商家参与营销活动,来提升动销商品数和订单数;通过满多件打折等营销方式,来提升每个订单的商品件数;通过更多的功能和商品的可选配置,来提升每件商品的单价。

刚才讲的这些公式里,有些术语你可能不太懂,没关系,因为我想表达的是:哪怕大家是在为同一家公司工作,但如果各自所在的领域不同,那么为公司创造商业价值的方法也有所不同。

对于一个架构师而言,你必须深入理解自己所在公司和团队的商业模式,并且想尽一切办法去最大化这个商业模式的成功概率。这样你才能通过工作为公司创造商业价值,同时也为你自己创造长期的商业价值。

还是那个简单的道理,我们的工资和各种收入,都来自于公司的商业收入和融资。

当然,并非每一家公司的商业模式都是绝对清晰和稳定的。大多数公司往往处在商业模式的探索期,有的团队连自己的 KPI 是什么都不知道。但无论如何,至少要理解你的团队为什么存在,你的工资收入从哪里来。

有句话叫做“良禽择木而栖”,就是说你要选择能够最大化自身成长的工作环境。那么接下来,我就通过一个例子教你怎么从创造商业价值的视角看一个部门, 帮你“择木”。

理解自己所处的工作环境

在一个企业里,从 CEO 到一线员工,大多数人的行为和决策都是基于资金的流转逻辑而来的。对此,我们的老祖宗有一句精辟的总结:“有钱能使鬼推磨”。

一位朋友曾给我讲过这么一个有意思的现象。在一家大企业里,只要是公司大力推动的项目,没有一个存活的。反倒是不怎么受公司高层待见的,由具备创业心态的员工自己发起的项目,最后都很成功。

在我认真思考,也近距离观察了这个过程后,我认为自己理解了这种现象的本质。我们还是通过一个真实的案例来说明。

一个大企业的独立核算部门,之前一直保持着高增长,也做到了盈利。但公司高层不满意现在的下滑增速,认为团队的人才构成、营销方法、运营能力有问题。而且认为部门的管理层自以为是,给的建议也不怎么听。于是公司高层就更换了部门的管理层。

新管理层到岗后,按照高层的指点,把之前的精细化运营方式,换成了高举高打的靠营销和大量模式探索投入来获取高增长的模式。很快,该部门的营销和运营成本一飞冲天,增速却变慢了。虽然业绩一塌糊涂,不过团队上下反倒天天颂扬公司高层的英明决策。仿佛自己受领导重视了,日子也就越来越有盼头了。尝试了两年下来,统计指标越来越玄虚,越来越难看懂,增速也一落千丈。

增速为什么会这样呢?新管理层是高层指派的,按理说双方有绝对的信任,应该是有一说一啊。但是仔细想一想,在新的环境下,公司高层的任何发言都变成了圣旨,别说是抗旨不遵,哪怕稍稍让领导觉得你缺乏信心和激情的表情都不会有。

对比之下,反倒是部门前管理团队一直坚持“客户第一”的原则和市场规律,对公司高层的不合理建议会据理力争。

为什么会有这种截然不同的行为呢?答案很简单:部门的资金来源逆向选择了人才及其行为。
部门重组后,成本一下子膨胀了很多倍,完全没有办法养活自己。这时整个部门都要靠公司高层调拨的预算来求生存。公司高层选择了言听计从的乖乖虎,那么这个乖乖虎就会以他最擅长的方式来获取部门赖以生存的收入,也就是公司的拨款。所以他们只有一条路,就是无时无刻讨取高层的欢心。

然而一个以客户为导向的团队,他们的首要目的不是听从上司的声音,而是去倾听客户的声音,从客户的需求中寻找自己能够创造商业价值的地方。所以这样的团队,绝不会靠公司的拨款过日子,他们的收入必须源自为客户创造的真实的商业价值。

这就是为什么越是受公司大力赞助的项目就越难存活的道理。

我们研究一家公司的商业模式,就是希望你认真理解自己所处的工作环境。

如果你活在一个靠公司拨款而生存的部门,那么你学习到的能力是有限的,因为你们部门从上到下都不是在求生,也不是为客户创造价值,所以你也学不到真正的生存技能。

或许短期内,你作为一个一线技术人员可以不必担忧。但是你越资深,待的时间越长,你对公司的依赖性就越大,那么你的风险也会越大。因为公司遇到困难必然会收缩资金,公司真的到了生死存亡的时刻,就只能依靠自力更生的部门了。想想看,这种靠拨款才能生存的部门,还会有保留价值吗?

总结来说,对于一个业务部门而言,存在不一定合理,只有提供稳定商业价值的存在才是合理的。

每个人都要有自己的商业模式

我们刚才讲了,你应该对自己所处环境的商业模式有一个深刻的理解,而且你最好能在一个可持续的商业模式下工作。

现在我还要给你讲另一个理念,就是每个人都要有自己的商业模式。意思是说,你必须在工作环境中找到创造价值的方式,这样才能保障自己一直被需要,也能保障未来的收入。

具体怎么做呢?那就是你要为公司、部门或团队提供可量化的增量价值。

这里面有两个关键元素。第一是增量价值,就是你通过工作所创造的价值,是在社会提供的平均价值之上的。

举个例子。2010 年之前,如果你是一个做微服务框架的高手,那你的增量价值就非常大,一个人能顶十个甚至一百个研发。因为那时候开源的微服务框架还不够成熟。但到了今天,如果你还是单兵作战,擅长写微服务框架,那跟开源的 Spring Framework 相比,你提供的增量价值可能就是一个负数了。因为团队剩下的同学还要花时间来学习、使用和维护你写的框架,公司也要为这些同学付出工资成本。

虽然你的工作没有变,但社会提供的开源解决方案的价值增加了,那你的增量价值相应地就会减少,甚至不存在。

第二个是可度量性。有些做技术的人会秉持这样一种态度,似乎他创造的价值极其普适,普适到像空气一样,以至于不能量化成商业价值,甚至谈度量就是对他工作的一种侮辱。

这个态度我觉得无异于自毁前程。

对于我们软件行业的从业者来说,价值创造永远是个衰减的过程,因为我们的经验会在信息扩散中迅速贬值。如果你不度量自己的增量价值,那就无法确保自己处在价值创造的前沿。你也不知道应该朝什么方向努力,才能最大化你未来的增量价值,更不能在一个相对未知的环境下扩大你的增值空间。

所以现在的问题就是,该怎么度量自己的增量价值呢?

答案是,把自己的工作放到我们刚才讲的公式里去。假设你是做商品相关的技术,那么:

GMV= 动销商品数订单数每订单件数 * 件单价

你需要度量的是,你的工作对公式中的某一项或某几项会起到什么促进作用。

比如说,你实现了一个需求分层的功能,使得不同需求层次的人群更容易发现自己所喜爱的商品,那么结果就是动销商品数在上线之后明显增加。同时,A/B 测试显示与之前相比,动销商品数增加了 15%,那么这 15% 就是你所创造的直接增量价值。

事实上,你还创造了其他的增量价值。比如动销的商家数肯定也有所增加。此外,用户维度的转化率也会有提升。相应地,用户满意度和回购率也应该提升。

有了这些度量,你就会不断调整自己的知识和技能,不断搜索新的突破口,最终为公司创造源源不断的价值。而你的这个能力,会被周围人以及领导注意到,也会因此获得更多可以施展才能的机会与场景。

再进一步,随着时间的推移,你不仅能得到马斯洛所讲的有底气的自尊,还能得到从目标到实现手段的完整闭环。这个时候,这个技能就会成为你的一个核心技能。

架构师如何创造自己的增量价值?

如果你已经是一个架构师了,你可能发现刚才讲的这两种方法已经不够用了。因为架构师需要做的是,在一个相对复杂的问题上引导实施一个结构化的解决方案。这个方案的参与者是一群人,所以架构师的产出不完全靠自己,而是靠撬动一群人来完成架构目标。

在这种情况下,一个架构师想要创造长期的商业价值,就必须同时满足三个条件:

  • 确保最终架构方案的可行性。
  • 确保参与方达成一个合理的实施路径,最终能够完成实施。
  • 确保设计方案可以最大化解决方案的结构性。

事实上,这三个条件很难被同时满足。架构师之所以参与一个方案,往往有这么几个原因:已经有现成的方案,但比较复杂;参与团队众多,但各个团队的优先级不一样;公司压力大,能够投入到现存方案的人力资源有限。这就意味着你作为一个架构师,需要在资源有限的条件下做取舍。

举个例子。假设你们已经有一套在一些核心系统上使用的老网关,之后又开发了新系统,却发现老网关落后,于是就把老网关迁移到了 Spring Cloud Gateway 上去。但是最近你们发现,出于公司整体安全的要求,还需要在网关层上开发安全功能。这个时候,你作为一个架构师至少有三种不同的选择路径:

  • 一种是在现有的两种网关上各自加安全功能;
  • 一种是迁移和整合现有的网关,然后再加安全功能;
  • 一种是在这两个网关之外再加一层安全网关,之后再想办法把现有的网关能力都迁移上去。

在不同的交付时间、需求压力、现有系统复杂度和研发人员能力的组合之下, 这三种方案都可能是最好的方案。但作为架构师,就要在兼顾方案可行性和实施路径合理性的同时,寻找一个最合理的结构化方案。所谓最合理的结构,就是从长期看,网关层不是越来越复杂,而是全公司统一、易维护和高可用。

如果相关方都能接受长期规划,那么构建第三个网关,然后逐渐把现有网关的功能都迁移上去,可能就是最结构的方案。反之,如果你的迁移项目烂尾了,那么两个网关变成三个网关,而且在迁移到一半的情况下,安全和网关逻辑散落在各处。那就是一个糟糕透顶的设计。

所以架构师在这个过程中创造的增量价值就在于能够审时度势,在企业内部各种资源限制和现实条件下,找到合理可行,并且能够最大化企业长期价值的架构方案。

事实上,除了一些现金流极度充足的大公司,大多数的创业公司都是要在平衡中逐渐迭代升级。我们在第三节课提到了,做架构和做业务一样,都不能靠饱和攻击取胜,而是靠对阶段性精确目标的最大化投入来取得进步。

那么下节课,我就来介绍一个我自己的案例,讲讲架构师到底该如何靠对阶段性精确目标的最大化投入而最大化自己的增量价值的。

小结

这节课我们介绍了架构师的第三个生存法则,那就是必须要在有限的资源下最大化架构活动所带来的商业价值。

不同的团队在以不同的方式为企业创造着商业价值。对于一个架构师而言,你要为公司、部门或团队提供可量化的增量价值,这样才能让自己处于价值创造的前沿,保障自己的长期收入。同时,这也是你增长技能、获取自尊的最佳路径。

那么在这种情况下,架构师创造自己的增量价值,就必须同时满足三个条件:

  • 确保最终架构方案的可行性。
  • 确保参与方达成一个合理的实施路径,最终能够完成实施。
  • 确保设计方案可以最大化解决方案的结构性。

事实上,这三个条件很可能是互相冲突的,很难被同时满足。于是,靠对阶段性精确目标的最大化投入去取得成功,就成了实施架构活动的重点。这个我们下节课再深入讨论。

思考题
三个思考题,任选一个:

  • 你理解自己所在公司或团队的商业模式吗?你知道自己在其中创造的价值是什么吗?这个价值能够长期维持吗?如果你有担心,为什么呢?
  • 你身边有存在一些不合理的现象吗?为什么呢?
  • 你有没有见到过一些架构方案,虽然可以满足我们所提到的三个条件,但是最终却失败了。这是怎么回事呢?你有个合理的解释吗?

相关文章:

【郭东白架构课 模块一:生存法则】07|法则三:架构师如何找到自己的商业模式?

你好,我是郭东白,今天我们来聊聊架构活动中对商业价值的考量。 今天我们要讲的是架构师的第三个生存法则:作为一个架构师,必须要在有限的资源下最大化架构活动所带来的商业价值。对于任何一个架构活动而言,架构师的可…...

STM32 - 看门狗

独立看门狗 IWDG专业时钟LSI 低功耗仍可以运行对定时的控制比较松喂狗这些时间是按照40kHz时钟给出。实际上,MCU内部的RC频率会在30kHz到60kHz之间变化。此外,即使RC振荡器的频率是精确的,确切的时序仍然依赖于APB接口时钟与RC振荡器时钟之间…...

Redis集群搭建

一、哨兵模式 在 redis3.0之前,redis使用的哨兵架构,它借助 sentinel 工具来监控 master 节点的状态;如果 master 节点异常,则会做主从切换,将一台 slave 作为 master。 哨兵模式的缺点: (1&…...

车载基础软件——AUTOSAR AP典型应用案例

我是穿拖鞋的汉子,魔都中一位坚持长期主义的工程师! 最近不知道为何特别喜欢苏轼的一首词: 缺月挂疏桐,漏断人初静。谁见幽人独往来,缥缈孤鸿影。 惊起却回头,有恨无人省。拣尽寒枝不肯栖,寂寞…...

消息中间件----内存数据库 Redis7(第3章 Redis 命令)

Redis 根据命令所操作对象的不同,可以分为三大类:对 Redis 进行基础性操作的命令,对 Key 的操作命令,对 Value 的操作命令。3.1 Redis 基本命令首先通过 redis-cli 命令进入到 Redis 命令行客户端,然后再运行下面的命令…...

react-03-react-router-dom-路由

react-router-dom:react路由 印记中文:react-router-dom 1、路由原理 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>前端路由的基石_history</title> </head> <body><a hre…...

2自由度悬架LQR控制

目录 1 悬架系统 1.1 悬架结构示意图 1.2 悬架数学模型 1.3 路面激励 2.仿真分析 2.1simulink模型 2.2 仿真结果 2.3 结论 3. 总结 1 悬架系统 1.1 悬架结构示意图 1.2 悬架数学模型 其中&#xff1a;x1为悬架动扰度&#xff0c;x2为车身加速度&#xff0c;x3为轮胎…...

C语言返回类型为指针的一些经典题目(下)

续上一篇文章&#xff0c;上一篇文章题目都很经典&#xff0c;这一篇也不例外。一.返回类型为指针经典题目(下)1.代码(第六题)char *GetMemory3(int num) {char *p (char *)malloc(sizeof(char) * num);return p; } void Test3(void) {char *str NULL;str GetMemory3(100…...

OpenAI 官方api 阅读笔记

网站 API Key concepts Prompts and completions You input some text as a prompt, and the model will generate a text completion that attempts to match whatever context or pattern you gave it. Token  模型通过将文本分解成token来理解和处理, 处理token数量取…...

微服务项目【分布式锁】

创建Redisson模块 第1步&#xff1a;基于Spring Initialzr方式创建zmall-redisson模块 第2步&#xff1a;在zmall-redisson模块中添加相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</a…...

JavaWeb5-线程常用属性

目录 1.ID 2.名称 3.状态 4.优先级 5.是否守护线程 5.1.线程类型&#xff1a; ①用户线程&#xff08;main线程默认是用户线程&#xff09; ②守护线程&#xff08;后台/系统线程&#xff09; 5.2.守护线程作用 5.3.守护线程应用 5.4.守护线程使用 ①在用户线程&am…...

JVM调优及垃圾回收GC

一、说一说JVM的内存模型。JVM的运行时内存也叫做JVM堆&#xff0c;从GC的角度可以将JVM分为新生代、老年代和永久代。其中新生代默认占1/3堆内存空间&#xff0c;老年代默认占2/3堆内存空间&#xff0c;永久代占非常少的对内存空间。新生代又分为Eden区、SurvivorFrom区和Surv…...

JAVA练习53-打乱数组

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-打乱数组 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 2月17日练习内…...

基于RK3588的嵌入式linux系统开发(三)——Uboot镜像文件合成

本章uboot镜像文件的合成包括官网必备文件rkbin下载和uboot镜像文件合成两部分内容&#xff0c;具体分别如下所述。 &#xff08;一&#xff09;下载rkbin文件包 以上uboot编译生成的uboot镜像不能直接烧录到板卡中运行&#xff0c;需要与atf、bl31、ddr配置文件等必备文件合成…...

wireshark抓包后通过工具分包

分包说明&#xff1a;关于现场问题分析&#xff0c;一般都是通过日志&#xff0c;这个属于程序中加的打印&#xff0c;或存数据库&#xff0c;或者存文本形式&#xff0c;这种一般比较符合程序逻辑&#xff1b;还有一种就是涉及到网络通信方面的&#xff0c;需要通过抓包来分析…...

举个栗子~Tableau 技巧(251):统一多个工作表的坐标轴范围

在工作汇报场景&#xff0c;有一个很常见、很多数据粉反馈的需求&#xff1a;同一看板上的两个图表&#xff0c;因为轴范围不一致&#xff08;如下图&#xff09;&#xff0c;很难直观比较。有什么办法可以统一它们的坐标轴范围呢&#xff1f; 类似需求&#xff0c;不论两个还是…...

Centos7 调整磁盘空间

1. 查看磁盘空间占用情况&#xff1a; df -h 可以看到 /home 有很多剩余空间,占了绝大部分&#xff0c; 而我又很少把文件放在home下。 2. 备份 /home 下的内容&#xff1a; cp -r /home/ /homebak/ 3. 关闭home进程&#xff1a; fuser -m -v -i -k /home 报错: -bash: fuser…...

小菜版考试系统——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是小菜版考试系统&#xff0c;最近一直在忙C语言课程设计的事&#xff0c;那么&#xff0c;就请uu们看看我的学习成果吧。 课程设计任务 摘要 题目分析 流程图 关键程序代码 程序运行结果 结论与心得 参…...

Twitter被封号了?最详细的申诉教程在此

由于Twitter检测系统是十分敏感的&#xff0c;所以在运营的时候很容易莫名就出现“此账号被封禁”或者“此账号被冻结”的情况。出现这种情况大多是因为账号发送了垃圾信息、面临安全风险、发太多广告或者太久没上线被判为机器人这几个原因。被封号后&#xff0c;我们可以通过向…...

Docker 安装配置

本章背景知识 本章主要介绍在 Centos 操作系统平台上进行安装和配置Docker Engine。 环境准备 1、操作系统支持。 CentOS、Debian、Fedora、Raspbian、RHEL、SLES、Ubuntu、Binaries 2、启用yum 软件仓库源。 centos-extras 编者注&#xff1a;Centos 默认已经开启cento…...

死锁检测组件-设想

死锁检测组件-设想 现在有三个临界资源和三把锁绑定了&#xff0c;三把锁又分别被三个线程占用。&#xff08;不用关注临界资源&#xff0c;因为锁和临界资源是绑定的&#xff09; 但现在出现这种情况&#xff1a;线程1去申请获取锁2&#xff0c;线程2申请获取锁3&#xff0c;…...

线程池的使用

为什么要使用线程池 复习一下创建线程的几种方式&#xff1a; 继承Thread 实现Runnable 实现Callable 但是如果频繁的创建/销毁线程&#xff0c;就会造成资源浪费。这时候就需要将线程创建好之后存起来&#xff0c;以后要用取出来&#xff0c;用完后再放回去。 注意 &#xff…...

字节码指令

目录 2.1 入门 2.2 javap 工具 2.3 图解方法执行流程 1&#xff09;原始 java 代码 2&#xff09;编译后的字节码文件 3&#xff09;常量池载入运行时常量池 4&#xff09;方法字节码载入方法区 5&#xff09;main 线程开始运行&#xff0c;分配栈帧内存 6&#xff09;…...

TLS/SSL证书彻底扫盲

证书格式 pem Privacy Enhanced Mail文本格式&#xff0c;以 -----BEGIN CERTIFICATE----- 开头&#xff0c;以-----END CERTIFICATE-----结尾 der 二进制格式&#xff0c;只保存证书&#xff0c;不保存私钥java和window服务器常见 pfx/p12 Predecessor of PKCS#12二进制格式&…...

WGCNA | 值得你深入学习的生信分析方法!~(网状分析-第五步-高级可视化)

1写在前面 前面我们用WGCNA分析完成了一系列的分析&#xff0c;聚类分割模块。&#x1f970; 随后进一步筛选&#xff0c;找到与我们感兴趣的表型或者临床特征相关的模块&#xff0c;而且进行了模块内部分析。&#x1f618; 再然后是对感兴趣模块进行功能注释&#xff0c;了解模…...

try catch finally执行顺序

try catch finally&#xff0c;try里有return&#xff0c;finally还执行么&#xff1f;答案&#xff1a; 执行&#xff0c;并且返回return时&#xff0c;finally的执行早于try。try-catch-finally的执行顺序无return当try中的t()没有抛出异常public static void main(String[] …...

2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals)分析与编程

2023年数学建模美赛D题分析建模与编程 重要说明&#xff1a; 本文介绍2023年美赛题目&#xff0c;并进行简单分析&#xff1b;本文首先对 D题进行深入分析&#xff0c;其它题目分析详见专题讨论&#xff1b;本文及专题分析将在 2月17日每3小时更新一次&#xff0c;完全免费&am…...

35岁测试工程师被辞退,给你们一个忠告

一&#xff1a;前言&#xff1a;人生的十字路口静坐反思 入软件测试这一行至今已经10年多&#xff0c;承蒙领导们的照顾与重用&#xff0c;同事的支持与信任&#xff0c;我的职业发展算是相对较好&#xff0c;从入行到各类测试技术岗位&#xff0c;再到测试总监&#xff0c;再转…...

华为OD机试题 - 租车骑绿岛(JavaScript)

最近更新的博客 2023新华为OD机试题 - 斗地主(JavaScript)2023新华为OD机试题 - 箱子之形摆放(JavaScript)2023新华为OD机试题 - 考古学家(JavaScript)2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)2023新华为OD机试题 - 最多等和不相交连续子序列(JavaScri…...

Linux下Python脚本的编写解析fio(minimal格式)(三)

在服务器测试(storage)过程中&#xff0c;会看到很多人写跑fio的脚本用minimal格式来解析&#xff0c;因为这种格式返回的结果对与脚本(shell,python)解析log非常方便.下面介绍一下这种方式下,用Python来解析log 1 一般客户会要求结果中出现一下参数的值&#xff1a; bandwidth…...

如何建设一个学校团委网站/正能量网站地址链接免费

目录 指针的指针 指针函数 函数的指针 函数指针数组 函数参数为函数指针的函数 无类型指针 malloc()函数 free()函数 const限定符 指针的指针 保存指针变量的地址 一般用在指针数组作为函数参数&#xff08;int *p[] int *p[5] int **p&#xff09; >>>…...

中国住建网查询证书/seo小白入门

iOS 可变参数(va_list&#xff0c;va_start&#xff0c;va_end) 例如&#xff1a;UIAlertView的init方法中的otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION等多个可变参数 NSString的initWithFormat:(NSString *)format, ...等多个可变参…...

北京营销网站建设公司/淘宝店铺推广

今晚……不对&#xff0c;是昨晚&#xff0c;折腾一个的小项目&#xff0c;发现自动填充的中文数据显示起来总不太美观&#xff0c;于是开始琢磨如何填充中文数据进行测试。 然而一番搜索后惊奇的发现&#xff0c;官方、以及一些非官方的文档均未提及这一功能。期间看到一篇他人…...

网站交互式/汕头seo优化培训

一、Spring Boot 相关 &#xff08;1&#xff09;SpringBoot 面试专题 什么是 Spring Boot&#xff1f;Spring Boot 有哪些优点&#xff1f;什么是 JavaConfig&#xff1f;如何重新加载 Spring Boot 上的更改&#xff0c;而无需重新启动服务器&#xff1f;Spring Boot 中的监…...

企业网站模板建设/线上营销推广公司

在布局中&#xff0c;有可能会出现这样的现象&#xff0c;就是子元素没有把父元素撑开&#xff0c;父元素出现塌陷现象&#xff0c;这个问题基本上都是由没有清除浮动造成的&#xff0c;网上的分析还是海量的&#xff0c;不过这里还是再做一下简单介绍&#xff0c;希望能够给需…...

专做蓝领招聘网站有哪些/网络推广营销软件

对于Java开发者来说&#xff0c;Spring无疑是最常用也是最基础的框架之一。&#xff08;此处省略1w字吹Spring&#xff09;。相信很多同行跟我一样&#xff0c;只是停留在会用的阶段&#xff0c;比如用Component写一个组件、用Autowired注入其他组件等等&#xff0c;但是不知道…...