研发效率破局之道阅读总结(2)流程优化
研发效率破局之道阅读总结(2)流程优化
Author: Once Day Date: 2025年4月15日
一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…
漫漫长路,有人对你微笑过嘛…
全系列文章可参考专栏: 程序的艺术_Once-Day的博客-CSDN博客
注: 本文内容摘抄于原文,文中"我"代表原作者【葛俊】大佬视角。
参考文章:
- 研发效率破局之道
文章目录
- 研发效率破局之道阅读总结(2)流程优化
- 1. 如何实践方法论
- 2. 如何聚焦于开发
- 3. 持续集成和持续开发
- 4. git分支管理
- 5. 全栈开发
1. 如何实践方法论
方法论实施效果不好,关键在于没用好。
在学习方法论的时候,我推荐使用类似美国著名作家、企业顾问西蒙斯 · 涅克(Simon Sinek)总结的 Why-How-What 黄金圈法则。
参见下图:最中间的一个圆是 Why,也就是这个方法论的目标,是要解决一个什么问题; 第二个圆是 How,也就是这个方法论的基本原则、指导思想;最外层的圆是 What,也就 是这个方法论的具体实践。
在使用一个方法论的时候,一定要从内往外看。中心的目标一般错不了。比如,敏捷的目标就是快速应对变化。原则的通用性就差一些,你需要在理解的基础上挑选适合自己的。比如,敏捷中有一条原则是“面对面交谈是最好的沟通方式”,就不一定适合你的团队。 具体的实践,就更要小心,切忌生搬硬套。
在引入实践的时候,我的建议是逐步优化已有的开发流程和框架,甚至只给出原则,让团队 成员逐步摸索并最终找到合适的方法。
- 衡量每一个时间段成果的标准,应该是价值假设方面的进展。也就是说,你的工作应该让你学习到如何更好地给用户提供价值,而不是开发了多少功能。
- 使用最小可行性产品(Minium Viable Product,MVP)来帮助学习。这里的关键点是,要以探索价值为出发点设计产品,最快地验证你的假设,功能要尽量少, 能够使用就可以。
- 让功能尽快地流动,说白了就是快速开发。问题发现得越晚,修复代价越高,这已经是常识。要做到快速开发,开发人员需要尽量把功能拆分,同时做好一个提交之后尽快提交。
- 让节点之间的联动更加顺畅,可以通过对关键流程的自动化、工具之间的网状互联, 以及节点之间的融合来实现。在具体实践上,个人代码上线后,在和他人的代码集成时容易 出现问题,这时就可以使用 CI/CD(持续集成 / 持续交付)流水线来自动化代码集成过程。
- 节点间的融合,也是为了保证节点间的联动顺畅。也就是模糊节点间的边界,让功能在节点之间的流动更顺畅。在这一方面,我见到比较有效的方式是:职能团队提供平台和工 具,让全栈工程师能够自己处理端到端的工作。比如,测试团队提供测试平台和工具,运维团队提供运维平台和工具,这些平台和工具可以通过服务化自助使用。
- 发现整个流程中的瓶颈,并解决它们。
Facebook 在流程方面的实践,给我最大的一个感受就是,以实用主义的态度,从原则出发,灵活优化流程。在 Facebook 的几年时间里,我并没有听到很多新方法论的时髦术语,但是公司的很多实践却和这些方法论的原则是一致的,甚至是超前这些方法论的。
2. 如何聚焦于开发
代码入库之前的开发活动,主要包括编码、调测调优、静态检查、自动化测试、代码审查 等。这是开发者编写代码的步骤,自然是提高研发效能的关键环节。
提高开发者编写代码的效能,关键在于让开发者不受阻塞、不受不必要的干扰,从而全身心地聚焦在产品开发上。我把这种不受阻塞的开发状态叫作持续开发。
要让开发者聚焦于开发,就必须把研发流程中可以自动化的步骤尽量自动化。因为一般不可能完成所有步骤的自动化,所以我推荐的方式是:分析关键路径上的活动,以及耗时较长的活动,然后投入精力优化这些步骤。
提高开发环境的获取效率:把整个开发环境的获取,进行服务化、自助化。也就是说, 开发者可以自助地申请获取环境,不需要 IT 部门的人员介入。可以提供机器镜像和配置脚本,通过镜像让每一台新机器拥有最基本的设置,比 如 CPU、操作系统、基本软件,然后通过脚本实现基本配置,比如网络设置、软件更新 等。
规范化、自动化化本地检查:本地检查是指,开发者在开发机器上进行的验证,比如语法检查、规范检查、单元测试、沙盒搭建等。我推荐的方式是,根据团队实际情况,找到合适的工具和配置进行这些检查,并 让团队成员统一使用。
建设并自动化代码入库前的检查流程:建设并自动化代码入库前的检查流程,是持续集成前的必要工作,也可以看作是持续集成的 一部分。
提供快速反馈,促进增量开发:提供快速反馈,进行增量开发指的是,能够快速验证已经完成的开发工作,说白了就是边开 发边验证。包括灵活使用各种 Linter 和测试、建设并优化沙盒环境、使用实时检查工具。
代码集成越晚发现问题就越晚。这正是产品上线的最后关头合并混乱, 产品质量差、返工率高的一个重要原因。
3. 持续集成和持续开发
代码入库和入库后的 3 种持续工程方法:
- 持续集成(Continuous Integration, CI),在团队协作中,一天内多次将所有开发人员的代码合并入同一 条主干。
- 持续交付(Continuous Delivery, CD),在短周期内完成软件产品,以保证软件保持在随时可以发布的状态。
- 持续部署(Continuous Deployment, CD)。每一个代码提交,都构建出产品直接部署给用户使用。
4. git分支管理
Facebook 的分支管理和发布策略:一种基于主干的开发方式,也叫作 Trunk-based。在这种方式中,用于开发的长期分支只有一个,而用于发布的分支可以有多个。所有的开发人员基于 master 分支进行开发,提交也直接 push 到这个分支上。基于主干开发模式中,在需要发布的时候会从 master 拉出一条发布分支,进行测试、稳定。在发布分支发现问题后,先在 master 上修复,然后 cherry-pick 到发布分支上。
Git-flow 工作流:有两个长期分支:一个是 master,包含可以部署到生产环境的代码;另一个是 develop,是一个用来集成代码的分支,开发新功能、新发布,都从 develop 里拉分支。此外,它还有 3 种短期分支,分别是新功能分支、发布分支、热修复分支,根据需要创建,当完成了自己的任务后就会被删除。
Fork-merge: Fork-merge 是在 GitHub、GitLab 流行之后产生的,具体做法是:每个开发人员在代码 仓服务器上有一个“个人”代码仓。这个“个人”代码仓实际上就是主代码仓的一个 clone。
开发者对主代码仓贡献代码的步骤如下:
- 开发者产生一个主代码仓的 fork,成为自己的个人代码仓;
- 开发者在本地 clone 个人代码仓;
- 开发者在本地开发,并把代码推送到自己的个人代码仓;
- 开发者通过 web 界面,向主代码仓作者提出 Pull request;
- 主代码仓的管理者在自己的开发机器上,取得开发者的提交,验证通过之后再推送到主代码仓。
总结来说,尽量减少长期分支的数量,代码尽早合并回主仓,方便使用 CI/CD 等方法保证主仓代码提交的质量,是选择分支策略的基本出发点。
5. 全栈开发
DevOps,Development 和 Operations 的组合词,是一种重视“软件开发人员 (Dev)”和“IT 运维技术人员(Ops)”之间沟通合作的文化、活动或惯例。 通过自动化“软件交付”和“架构变更”的流程,使得软件的构建、测试、发布更加快捷、频繁和可靠。
SRE,全称是 Site Reliability Engineer ,网站可靠性工程师,是一个职位,是软件工程师和系统管理员的结合,主要目标是创建可扩展且高度可靠的软件系统。
目标、利益不一致,是导致开发团队和运维团队矛盾的首要问题,所以想办法让它们的目标、利益变得一致,是整个 DevOps 中最重要的一条。因为只有协调好了目标和利益,他们才有动力去解决问题。实现这个原则的一个最主要的方法,我称之为“全栈开发”。
全栈开发就是让工程师不再只是对某一个单一职能负责,而是对最终产品负责。
注: 本文内容摘抄于原文,文中"我"代表原作者【葛俊】大佬视角。
相关文章:
研发效率破局之道阅读总结(2)流程优化
研发效率破局之道阅读总结(2)流程优化 Author: Once Day Date: 2025年4月15日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…...
解决PIP 安装出错ERROR: cp310-cp310-manylinux_2_28_x86_64.whl is not a supported wheel
ERROR: torch-2.8.0.dev20250325cu128-cp310-cp310-manylinux_2_28_x86_64.whl is not a supported wheel on this platform. 可以 pip debug --verbose | grep manylinux | grep cp310 WARNING: This command is only meant for debugging. Do not use this with automation f…...
b站golang后端开发一面
go和其他语言的对比 Golang(也称为Go语言)是一种静态类型、编译型语言,由Google开发,以其简洁、高效和强大的并发处理能力著称。 Golang的设计哲学强调简洁明了。与Python类似,Go语法简洁,易于学习和编写。…...
Vue3 SSR Serverless架构革命:弹性计算与量子加速
一、全维度Serverless SSR架构 1.1 蜂巢式弹性调度系统 1.2 冷启动时间优化表 优化策略Node.js冷启(ms)Deno冷启(ms)Bun冷启(ms)裸启动1800960420预编译二进制650380210内存快照预热22016090WASM实例池15011075量子状态预载453832 二、边缘渲染协议升级 2.1 流式SSR响应协议…...
深度大脑:AI大模型的设计与运行原理
AI大模型的设计与运行原理涉及多个复杂环节,以下是系统化的总结,结合核心要点与补充细节: 一、AI大模型的设计 1. 深度神经网络架构 Transformer:取代RNN/CNN,解决长程依赖问题。核心组件: 自注意力机制…...
Python网络编程从入门到精通:Socket核心技术+TCP/UDP实战详解
引言 网络编程是构建现代分布式系统的核心能力,而Socket作为通信的基石,其重要性不言而喻。本文将从零开始,通过清晰的代码示例、原理剖析和对比分析,带你彻底掌握Python中的Socket编程技术,涵盖TCP可靠连接、UDP高效…...
使用CMake生成Opencv对应库文件
opencv环境配置:版本3.4/3.2(OpenCV-3.4.3) CMake:3.12.1 D:\OpenCv\opencv\build\x64\vc16\bin路径添加至环境变量中 CMake环境配置: D:\Install_QT\bin路径添加至环境变量中(path中即可) QT5环境变量配置:…...
MySQL 数据库备份和恢复全指南
MySQL 是一款常用的开源数据库系统,在日常运维中,数据备份和恢复是系统管理的重要一环。本文将细致介绍 MySQL 两大备份方案—— mysqldump 和 XtraBackup,包括备份方式、恢复步骤、定时脚本、远程备份和常见问题处理方案。 一、mysqldump 备…...
关于我的服务器
最近我买了台腾讯云服务器,然后新手小白只会用宝塔。。。 安装完之后默认的端口是8888,打开面板就会提示我有风险。然后 我改了端口之后,怎么都打不开。 于是 学到了几句命令可以使用: //查看端口是否已经修改成功 cat www/se…...
spring面试题
1,如何理解spring boot中的starter Starter是一种简化依赖管理和自动配置的核心机制,能快速集成特定功能模块,无需手动配置复杂依赖和xml文件。 依赖简化:将某个功能模块所需的所有依赖打包成一个“一站式”依赖,开发…...
python setup.py学习
Python-setup进阶打包命令 Python-setup进阶打包命令_python setup-CSDN博客 packages 需要处理的包目录(包含__init__.py的文件夹),这里通常使用 find_packages(),它默认在和setup.py同一目录下搜索各个含有 __init__.py的包。…...
最简单的使用SDL2 播放原始音频数据程序
author: hjjdebug date: 2025年 04月 15日 星期二 14:02:05 CST description: 最简单的使用SDL2 播放原始音频数据程序 文章目录 1.最简单的播放音频的程序是什么样子的?2. 怎样用SDL 来编写音频播放器代码?2.1 SDL播放音频核心代码:混音函数2.2 先看看音频播放的可能的两种框…...
利用IDEA开发Spark-SQL
创建子模块Spark-SQL,并添加依赖 创建Spark-SQL的测试代码: 运行结果: 自定义函数: UDF: UDAF(自定义聚合函数) 强类型的 Dataset 和弱类型的 DataFrame 都提供了相关的聚合函数, …...
随身Wi-Fi能跑PCDN?
随身WiFi可以用于运行PCDN(点对点内容分发网络),但存在技术限制和潜在风险,需谨慎操作。 可行性分析 技术基础 随身WiFi本质是便携式无线路由器,具备网络接入和分发能力,理论上可配置为PCDN节点。 部分用户…...
Google-A2A协议全面解析:一文掌握Agent-to-Agent协议的核心与应用
前言: 在当今人工智能技术飞速发展的时代,智能体(Agent)已悄然融入我们生活的各个角落。无论是个人智能助手,还是企业的自动化工具,各类AI代理的应用愈发广泛。但目前这些智能体之间大多处于孤立状态&…...
jmeter压测工具出现乱码
然后 prev.setDataEncoding(“utf-8”)...
大模型训练显存压缩实战:ZeRO-3 vs 梯度累积 vs 量化混合策略
一、显存瓶颈的本质与挑战 大模型训练面临的核心矛盾是模型参数量指数级增长与GPU显存容量线性提升之间的鸿沟。以175B参数模型为例,其显存消耗主要来自三个方面: 参数存储:FP32精度下需700GB显存梯度缓存:反向传播产生的…...
WPS JS宏编程教程(从基础到进阶)-- 第七部分:JS对象在WPS中的应用
目录 第7章 JS对象在WPS中的应用7-1 对象创建的几种方法从零理解对象:数据收纳盒两种基础创建方式代码解析表 7-2 对象属性的查、改、增、删像操作Excel单元格一样管理属性1. 点操作符(静态键名)2. 中括号操作符(动态键名…...
网络编程(UDP)
server:服务器 # import socket # # 传递udp协议参数 # sk socket.socket(typesocket.SOCK_DGRAM) # # # 绑定ip及端口 # sk.bind(("127.0.0.1",8080)) # # print("等待客户端发送消息") # # # 直接发送 # msg,addr sk.recvfrom(1024) # # print(msg.d…...
深入讲解 CSS 选择器权重及实战
1. 权重计算规则详解 CSS 选择器的优先级由 三元组 (x, y, z) 决定,比较规则如下: 选择器类型权重值 (x, y, z)示例ID 选择器x 1#header → (1,0,0)类/伪类/属性y 1.active, :hover元素/伪元素z 1div, ::before 比较规则:从左到右逐级比…...
Mysql的查询
1.Mysql的基本查询 语法:select*from 表名;代表查询所有数据的所有列 SELECT * FROM classinfo; SELECT * FROM studentinfo; select 字段1,字段2.....from 表名;查询数据的指定字段 查询studentinfo表的学生姓名和年龄 SELECT stuname,age FROM stu…...
RaabitMQ 快速入门
🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步!!&…...
LLM: 探索LLM视觉缺陷
文章目录 前言一、Constructing MMVP Benchmarks1、CLIP-blind pair 二、MMVP-VLM bench1、Model size influence2、correlation between CLIP MLLMs 三、Mixture of Features1、Additive MoF Experiment2、Interleaved MoF Experiment 总结 前言 在使用多模态大模型时候是否会…...
常用的 SQL 语句分类整理
以下是常用的 SQL 语句分类整理,覆盖数据查询、操作、表管理和高级功能,适用于大多数关系型数据库(如 MySQL、PostgreSQL、SQL Server): 目录 一、数据查询(DQL) 1. 基础查…...
Go之defer关键字:优雅的资源管理与执行控制
在Go语言中,defer关键字是处理资源释放、错误恢复和代码逻辑清理的利器。它看似简单,却隐藏着许多设计哲学和底层机制。本文将深入剖析defer的执行原理、使用场景和常见陷阱,助你掌握这一关键特性。 一、defer基础:延迟执行的本质…...
T1结构像+RS-fMRI影像处理完整过程记录(数据下载+Matlab工具箱+数据处理)
最近需要仿真研究T1结构像RS-fMRI影像融合处理输出目标坐标的可行性。就此机会记录下来。 为了完成处理,首先需要有数据,然后需要准备对应的处理平台和工具箱。那么正文开始~ (1)下载满足要求的开源数据 去OpenNEURO https://open…...
Flowable进阶-网关、事件和服务
网关 并行网关 并行网关允许将流程拆分为多个分支,也可以将多个分支汇集到一起。并行网关的功能是基于流入流出的顺序流。fork分支:用于任务的开始。并行后所有外出的顺序流,为每个顺序流都创建一个并发分支。 join汇聚:用于任务…...
【三维重建与生成】GenFusion:SVD统一重建和生成
标题:《GenFusion: Closing the Loop between Reconstruction and Generation via Videos》 来源:西湖大学;慕尼黑工业大学;上海科技大学;香港大学;图宾根大学 项目主页:https://genfusion.sibowu.com 文章…...
常见的爬虫算法
1.base64加密 base64是什么 Base64编码,是由64个字符组成编码集:26个大写字母AZ,26个小写字母az,10个数字0~9,符号“”与符号“/”。Base64编码的基本思路是将原始数据的三个字节拆分转化为四个字节,然后…...
有序二叉树各种操作实现(数据结构C语言多文件编写)
1.先创建tree.h声明文件( Linux 命令:touch tree.h)。编写函数声明如下(打开文件 Linux 操作命令:vim tree.h): //树的头文件位置 #ifndef __TREE_H__ #define __TREE_H__ //节点 typedef struct node{int data;//数据struct node* left;//记录左侧子节…...
Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置
作者:濯光、翼严 Kubernetes 配置管理的局限 目前,在 Kubernetes 集群中,配置管理主要通过 ConfigMap 和 Secret 来实现。这两种资源允许用户将配置信息通过环境变量或者文件等方式,注入到 Pod 中。尽管 Kubernetes 提供了这些强…...
特殊文件以及日志——特殊文件
一、特殊文件 必要性:可以用于存储多个用户的:用户名、密码。这些有关系的数据都可以用特殊文件来存储,然后作为信息进行传输。 1. 属性文件.properties(键值对) (1)特点: 都只能…...
Spark-SQL核心编程语言
利用IDEA开发spark-SQL 创建spark-SQL测试代码 自定义函数UDF 自定义聚合函数UDAF 强类型的 Dataset 和弱类型的 DataFrame 都提供了相关的聚合函数, 如 count(), countDistinct(),avg(),max(),min()。除此之外&…...
jdk 安装
oracle官网 : Java Archive | Oracle 中国 export JAVA_HOME/Users/xxxxx/app/services/x86jdk/jdk1.8.0_431.jdk/Contents/Home export PATH$JAVA_HOME/bin:$PATH 华为镜像网站:Index of java-local/jdk...
Missashe考研日记-day21
Missashe考研日记-day21 1 专业课408 学习时间:4h学习内容: 今天先把昨天学的内容的课后习题做了,整整75道啊,然后学了OS第二章关于CPU调度部分的内容,这第二章太重要了,以至于每一小节的内容都比较多&am…...
双重路由引入的环路,选路次优的产生以及解决方法
描述 在R2,R3上双向引入ospf,以及rip,R5修改静态的优先级为180,在ospf中引入该静态路由 路由分析 选路次优问题 R5引入了静态路由,优先级是150 R2->R5->100.1.1.0,优先级是150 R3->R4->100.1.1.0,优先级是150 R3->R4->R5->100.1.1.0,优先级是150 R2-…...
环境变量概念以及获取环境变量(linux下解析)
目录 1 基本概念 2 常见的环境变量 3 查看环境变量方法 4 和环境变量相关的命令 5 环境变量的组织方式 6 通过代码如何获取环境变量 6.1 命令行参数 6.2 环境变量 7 通过系统调用获取或设置环境变量 1 基本概念 环境变量(environmentvariables)⼀般是指在操作系统中用来指…...
删除win11电脑上的阿尔巴尼亚输入法SQI
删除电脑自带的阿尔巴尼亚输入法 这个输入法在系统中并不显示,但是有时候会出现在右下角显示,删除这个输入法的流程如下,暂时没发现反复! 第一步:打开注册表: winR打开运行,输入 regedit 第二…...
目标检测与分割:深度学习在视觉中的应用
🔍 PART 1:目标检测(Object Detection) 1️⃣ 什么是目标检测? 目标检测是计算机视觉中的一个任务,目标是让模型“在图像中找到物体”,并且判断: 它是什么类别(classif…...
npm和npx的作用和区别
npx 和 npm 是 Node.js 生态系统中两个常用的工具,它们有不同的作用和使用场景。 1. npm(Node Package Manager) 作用: npm 是 Node.js 的包管理工具,主要用于: 安装、卸载、更新项目依赖(包&a…...
OpenCV 图形API(36)图像滤波-----形态学操作函数morphologyEx()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 执行高级形态学变换。 该函数可以使用腐蚀和膨胀作为基本操作来执行高级形态学变换。 任何操作都可以原地进行。在处理多通道图像时,…...
Python入门到精通6:CSS网页美化入门1
CSS(层叠样式表)是网页设计的核心语言之一,它让我们的网页从单调的结构变得生动美观。今天,我将带大家快速了解CSS的基础知识,包括基本概念、引入方式、选择器、字体与文本样式以及调试工具的使用。 1. CSS基本概念 …...
【深入C++多态:基于消息解析器的设计、实现与剖析】
深入C多态:基于消息解析器的设计、实现与剖析 前言多态代码示例代码结构C多态的核心知识点多态的底层机制深入剖析多态的设计模式总结 前言 在C面向对象编程中,多态(Polymorphism)是实现灵活性和扩展性的核心特性,允许…...
Dockerfile 文件常见命令及其作用
Dockerfile 文件包含一系列命令语句,用于定义 Docker 镜像的内容、配置和构建过程。以下是一些常见的命令及其作用: FROM:指定基础镜像,后续的操作都将基于该镜像进行。例如,FROM python:3.9-slim-buster 表示使用 Pyt…...
Redis--持久化
一、持久化 Redis支持RDB和AOF两种持久化机制持久化功能有效地避免因进程退出造成数据丢失问题, 当下次重启时利用之前持久化的文件即可实现数据恢复。 二、RDB RDB 持久化是把当前进程数据⽣成快照保存到硬盘的过程,触发 RDB 持久化过程分为手动触发和…...
Markdown学习
Typora下载 Typora教程 标题 井号加空格——回车即可形成标题,几级标题几个井号。 字体 斜体——前后各一个*,回车 粗体——前后各两个*,回车 既斜体又粗体——前后各三个*,回车 删除线——前后各两个~(波浪号…...
Vulhub-DarkHole靶机通关攻略
下载链接:https://www.vulnhub.com/entry/darkhole-1,724/ 扫描ip arp-scan -l扫描端口 nmap 192.168.112.144 -p-扫描目录 dirsearch -u http://192.168.112.144/有一个登录页面,还有一个upload目录,但是还没有找到上传点 先注册一个用…...
UniRig ,清华联合 VAST 开源的通用自动骨骼绑定框架
UniRig是清华大学计算机系与VAST联合开发的前沿自动骨骼绑定框架,专为处理复杂且多样化的3D模型而设计。基于强大的自回归模型和骨骼点交叉注意力机制,UniRig能够生成高质量的骨骼结构和精确的蒙皮权重,大幅提升动画制作的效率和质量。 UniR…...
深入解析 sklearn 中的 LabelEncoder:功能、使用场景与注意事项
标题:深入解析 sklearn 中的 LabelEncoder:功能、使用场景与注意事项 摘要: LabelEncoder 是 sklearn 中用于类别标签编码的重要工具,能够将离散的类别型标签转换为模型可识别的数值格式。本文详细解析 LabelEncoder 的核心功能…...
红帽Linux网页访问问题
配置网络,手动配置 搭建yum仓库红帽Linux网页访问问题 下载httpd 网页访问问题:首先看httpd的状态---selinux的工作模式(强制)---上下文类型(semanage-fcontext)---selinux端口有没有放行semanage port ---防火墙有没有active---…...