首页 数据库 Oracle回滚与撤销(Undo)技术:从理论到实操全解析

Oracle回滚与撤销(Undo)技术:从理论到实操全解析

在Oracle数据库中,回滚(Rollback)与撤销(Undo)是保障事务一致性、数据可恢复性的核心机制。Undo通过记录数据修改前的前镜像(Before Image),实现事务回滚、读一致性保障和故障恢复,其设计与实践直接影响数据库的稳定性和性能。

一、Undo技术核心理论
1. Undo的定义与核心作用
Undo是Oracle用于记录数据修改前状态的精简信息,与Redo(重做日志)共同构成事务完整性保障体系。Redo保障故障时事务可恢复,Undo则实现三大核心功能:

事务回滚:用户执行ROLLBACK时,通过Undo前镜像恢复数据原始状态。
读一致性:多用户并发访问时,确保查询能获取同一时间点的一致数据,避免未提交数据可见。
事务恢复:数据库实例故障后,SMON进程利用Undo数据回滚未提交的事务。
2. Undo的存储内容与生成规则
Undo数据仅记录撤销事务必需的精简信息,不同操作生成的Undo量差异显著:

Insert操作:仅记录插入记录的ROWID,回滚时通过ROWID删除记录,生成Undo量最少。
Update操作:仅记录被更新字段的旧值(前镜像),回滚时用旧值覆盖新值,Undo量居中。
Delete操作:记录整行数据,回滚时通过反向操作恢复数据,生成Undo量最多。
这一特性决定了大规模删除操作(如大批量DELETE)应分批执行并分次提交,以减少Undo空间占用和性能冲击。

3. Undo管理模式的演进
Oracle的Undo管理模式经历了从手动到自动的迭代,核心差异如下:

手动管理(Oracle 9i之前):通过手动创建、配置回滚段(Rollback Segment)管理Undo数据,需手动指定事务使用的回滚段,维护成本高。
自动管理(AUM,Oracle 9i及以后):引入自动撤销表空间(Undo Tablespace),Oracle自动分配、回收回滚段,支持动态扩展与收缩,通过初始化参数控制行为,降低维护成本。
AUM模式的核心参数包括:

undo_management:指定管理模式(AUTO为自动,MANUAL为手动)。
undo_tablespace:指定当前使用的Undo表空间。
undo_retention:事务提交后Undo数据的保留时间(秒),9iR2默认10800秒(3小时)。
undo_suppress_errors:自动模式下屏蔽不支持操作的报错(向后兼容参数)。
4. 读一致性与多版本模型
Oracle通过多版本模型(Multi-versioning Model)实现读写分离:写入不阻塞读取,读取不阻塞修改。其核心机制是一致性读(Consistent Read):

当查询执行时,Oracle会检查数据块的提交SCN(系统变更号)。
若数据块SCN晚于查询开始SCN,或数据处于未提交状态,Oracle会通过Undo表空间中的前镜像构造一致数据返回给用户。
例如:Session 2更新数据但未提交时,Session 1的查询会通过Undo中的前镜像获取原始数据,确保查询结果的一致性。

5. 关键性能指标:平均事务回滚率
平均事务回滚率(Rollback per Transaction %)是衡量Undo使用效率的核心指标,计算公式为:
[ Round(User rollbacks / (user commits + user rollbacks) ,4) \times 100% ]
该指标应接近0,若过高(如案例中38.22%),说明数据库存在大量无效操作,会严重占用Undo空间并降低性能,需排查应用逻辑或事务设计问题。

二、Undo核心机制深度解析
1. 块清除(Block Cleanouts)机制
事务提交后,Oracle需清除数据块上的事务信息(ITL槽、行级锁),分为两种模式:

快速块清除(Fast Block Cleanout):若提交时数据块仍在Buffer Cache中,直接清除ITL信息,效率极高。
延迟块清除(Delayed Block Cleanout):若数据块已写入数据文件,或修改块数量超过Buffer Cache的10%,则延迟至下次访问该块时清除。
延迟块清除可能导致查询时产生额外Redo,若Undo数据已被覆盖,还可能触发ORA-01555错误。

2. Undo保留策略与Guarantee模式
非保障模式(No Guaranteed):Oracle 9i默认模式,当Undo表空间不足时,会覆盖已提交事务的Undo数据,忽略undo_retention设置。
保障模式(Guarantee):Oracle 10g引入,通过ALTER TABLESPACE undotbs1 RETENTION GUARANTEE启用,强制保留undo_retention指定时间的Undo数据。若空间不足,新事务会失败而非覆盖旧数据,可有效避免ORA-01555错误。
3. Undo技术的版本演进
Oracle 9i:引入AUM自动管理模式,简化回滚段维护,新增undo_retention参数。
Oracle 10g:增强Undo保留策略,支持自动调整undo_retention(设置为0时启用),引入In Memory Undo(IMU)减少I/O开销,新增闪回版本查询与闪回事务查询。
Oracle 11g:优化回滚段命名规则(包含创建时间戳),引入闪回数据归档(Flashback Data Archive),支持Undo数据长期归档与任意时间点追溯。
三、Undo技术实操案例
1. 案例1:AUM模式下Undo表空间创建与配置
需求
创建自动管理的Undo表空间,设置保留时间为4小时,启用Guarantee模式避免Undo数据被提前覆盖。

实操步骤
创建Undo表空间
CREATE UNDO TABLESPACE UNDOTBS2
DATAFILE '/opt/oracle/oradata/test/undotbs2.dbf' SIZE 200M
AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
切换当前Undo表空间
ALTER SYSTEM SET undo_tablespace=UNDOTBS2 SCOPE=BOTH;
配置Undo保留时间与Guarantee模式
ALTER SYSTEM SET undo_retention=14400; -- 4小时(单位:秒)
ALTER TABLESPACE UNDOTBS2 RETENTION GUARANTEE;
验证配置
SELECT tablespace_name, contents, retention FROM dba_tablespaces WHERE tablespace_name='UNDOTBS2';
预期结果:RETENTION字段显示为GUARANTEE,确认配置生效。

2. 案例2:利用闪回查询恢复误删除数据
需求
某业务误删除了emp表中empno=7788的记录并提交,需通过闪回查询(Flashback Query)恢复数据。

实操步骤
确认当前SCN(系统变更号)
SELECT dbms_flashback.get_system_change_number FROM dual;
-- 假设返回SCN:12930142214
闪回查询删除前的数据
-- 尝试不同SCN找到删除前的状态
SELECT * FROM emp AS OF SCN 12929941968 WHERE empno=7788;
恢复误删除数据
-- 创建临时表存储恢复数据
CREATE TABLE emp_recov AS SELECT * FROM emp AS OF SCN 12929941968 WHERE empno=7788;
-- 将数据插入原表
INSERT INTO emp SELECT * FROM emp_recov;
COMMIT;
验证恢复结果
SELECT * FROM emp WHERE empno=7788;
关键说明:闪回查询依赖Undo数据未被覆盖,若出现ORA-01555错误,需检查undo_retention设置或启用Guarantee模式。

3. 案例3:处理ORA-01555错误(快照过旧)
问题现象
执行长查询时提示:ORA-01555: snapshot too old: rollback segment number 6 with name "_SYSSMU6$" too small,原因是Undo数据被覆盖,无法构造一致性读。

解决方案
临时解决方案:延长Undo保留时间并启用Guarantee模式
ALTER SYSTEM SET undo_retention=28800; -- 8小时
ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;
长期解决方案:扩展Undo表空间容量
ALTER DATABASE DATAFILE '/opt/oracle/oradata/test/undotbs1.dbf' RESIZE 500M;
ALTER DATABASE DATAFILE '/opt/oracle/oradata/test/undotbs1.dbf' AUTOEXTEND ON NEXT 100M;
优化查询:拆分长查询为多个短查询,减少一致性读窗口。
4. 案例4:重建过度扩展的Undo表空间
问题现象
Undo表空间因大事务过度扩展至27GB,且无法自动收缩,导致磁盘空间耗尽。

实操步骤
确认当前Undo表空间状态
SELECT file_name, bytes/1024/1024 AS size_mb FROM dba_data_files WHERE tablespace_name='UNDOTBS1';
创建新的Undo表空间
CREATE UNDO TABLESPACE UNDOTBS3 DATAFILE '/opt/oracle/oradata/test/undotbs3.dbf' SIZE 100M AUTOEXTEND ON;
切换至新Undo表空间
ALTER SYSTEM SET undo_tablespace=UNDOTBS3 SCOPE=BOTH;
等待旧Undo表空间回滚段离线
SELECT usn, status FROM v$rollstat;
-- 直至所有旧回滚段状态变为OFFLINE
删除旧Undo表空间释放空间
DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS;
四、Oracle Undo 常见问题排查手册
ORA-01555:快照过旧(Snapshot Too Old)
现象
执行查询时提示:ORA-01555: snapshot too old: rollback segment number X with name "XXX" too small,长查询、统计分析任务易触发。

核心成因
Undo数据被覆盖:事务提交后,Undo数据未满足undo_retention时间就被新事务覆盖(非Guarantee模式下)。
延迟块清除:查询触发延迟块清除时,需读取Undo获取提交SCN,但Undo数据已丢失。
sqlldr直接加载(direct=true):加载数据不产生Undo,Cached Commit SCN导致访问时出错。
排查步骤
检查Undo核心参数配置:
show parameter undo; -- 查看undo_management、undo_retention、undo_tablespace
select tablespace_name, contents, retention from dba_tablespaces where tablespace_name like 'UNDO%'; -- 确认是否启用Guarantee模式
分析Undo表空间状态:
select file_name, bytes/1024/1024 as size_mb from dba_data_files where tablespace_name='UNDOTBS1'; -- 查看表空间大小
select usn, rssize/1024/1024 as rssize_mb, hwmsize/1024/1024 as hwmsize_mb from v$rollstat; -- 查看回滚段占用
统计事务提交/回滚情况:
select name, value from v$sysstat where name in ('user commits', 'user rollbacks'); -- 计算回滚率
跟踪块清除行为(可选):
alter system set event="10203 trace name context forever" scope=spfile; -- 重启数据库后生效,生成块清除跟踪文件
解决方案
调整undo_retention参数(需确保Undo表空间足够):
alter system set undo_retention=28800; -- 设为8小时(根据业务最长查询时间调整)
启用Undo保留Guarantee模式:
alter tablespace undotbs1 retention guarantee;
扩展Undo表空间或取消自动扩展限制:
alter database datafile '/opt/oracle/oradata/undotbs1.dbf' resize 500M;
alter database datafile '/opt/oracle/oradata/undotbs1.dbf' autoextend on next 100M;
优化查询与事务:
拆分长查询为多个短查询,减少一致性读窗口。
大批量DELETE/UPDATE操作分批执行并分次提交。
避免sqlldr直接加载:改用常规加载模式(direct=false),或加载后立即备份Undo数据。
Undo表空间过度扩展且无法收缩
现象
Undo表空间占用磁盘空间过大(如数十GB),即使无大事务也无法自动收缩,导致磁盘空间耗尽,触发ORA-1653(表空间无法扩展)。

核心成因
AUM模式特性:Oracle自动管理Undo表空间时,只动态扩展回滚段,不主动收缩已分配的空闲空间。
大事务影响:曾执行大批量数据操作,导致回滚段过度扩展,后续无足够压力触发收缩。
配置不当:Undo表空间启用自动扩展(autoextend on),且无最大大小限制。
排查步骤
确认表空间占用情况:
select tablespace_name, sum(bytes)/1024/1024/1024 as gb from dba_data_files group by tablespace_name having tablespace_name like 'UNDO%';
检查回滚段状态(是否有超大回滚段):
select usn, name, rssize/1024/1024/1024 as gb, shrinks from v$rollstat a, v$rollname b where a.usn=b.usn order by rssize desc;
验证自动扩展配置:
select file_name, autoextensible, maxbytes/1024/1024 as max_mb from dba_data_files where tablespace_name like 'UNDO%';
解决方案
重建Undo表空间(推荐,彻底释放空间):
-- 1. 创建新Undo表空间
create undo tablespace undotbs2 datafile '/opt/oracle/oradata/undotbs2.dbf' size 100M autoextend on next 50M maxsize 1000M;
-- 2. 切换至新表空间
alter system set undo_tablespace=undotbs2 scope=both;
-- 3. 等待旧表空间回滚段离线(状态变为OFFLINE)
select usn, status from v$rollstat;
-- 4. 删除旧表空间
drop tablespace undotbs1 including contents;
临时解决方案(不重建表空间):
取消自动扩展:alter database datafile '/opt/oracle/oradata/undotbs1.dbf' autoextend off;
手动收缩数据文件(需表空间有足够空闲):alter database datafile '/opt/oracle/oradata/undotbs1.dbf' resize 1000M;
长期预防:
初始配置合理的Undo表空间大小,避免无限制自动扩展。
监控大事务,提前拆分执行。
回滚段损坏(ORA-00600 [4194])
现象
数据库启动失败或运行缓慢,告警日志提示ORA-00600: internal error code, arguments: [4194], [X], [Y],SMON进程持续尝试恢复回滚段,CPU占用过高。

核心成因
异常关闭数据库:使用shutdown abort强制关闭,导致Undo段事务信息不一致。
Undo表空间损坏:存储介质故障、文件丢失导致回滚段数据损坏。
回滚段过度使用:长时间未提交的大事务导致回滚段异常。
排查步骤
查看告警日志定位损坏回滚段:
tail -f $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log
日志中会显示“Undo Segment X Onlined”或“SMON: about to recover undo segment X”。
确认回滚段状态:
select segment_name, tablespace_name, status from dba_rollback_segs where status<>'ONLINE';
检查Undo表空间文件完整性:
select name, status from v$datafile where tablespace_name like 'UNDO%';
解决方案
标记损坏回滚段并强制启动数据库:
-- 1. 修改初始化参数文件(init<sid>.ora)
_corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$' -- 填入告警日志中损坏的回滚段名称
-- 2. 用修改后的参数文件启动数据库
startup pfile=init<sid>.ora
重建Undo表空间:
-- 1. 创建新Undo表空间
create undo tablespace undotbs_new datafile '/opt/oracle/oradata/undotbs_new.dbf' size 100M;
-- 2. 切换表空间
alter system set undo_tablespace=undotbs_new;
-- 3. 删除损坏的旧表空间
drop tablespace undotbs_old including contents;
清理参数文件:
-- 移除_corrupted_rollback_segments参数,生成新spfile
create spfile from pfile;
shutdown immediate;
startup;
数据一致性检查:
启动后执行全库导出(exp/expdp),重建数据库并导入数据,避免残留不一致。
块清除相关性能问题
现象
事务提交后查询仍有延迟,AWR报告显示“consistent gets”过高,或出现短暂锁等待,跟踪文件显示大量“Block cleanout”记录。

核心成因
延迟块清除:大批量操作后提交,数据块已写出到文件,需下次访问时清除ITL信息和锁标记。
快速块清除限制:修改块数量超过Buffer Cache的10%,超出部分无法快速清除。
排查步骤
查看块清除相关统计:
select name, value from v$sysstat where name like '%cleanout%';
启用10203事件跟踪块清除过程:
alter system set event="10203 trace name context forever" scope=spfile;
shutdown immediate;
startup;
分析数据块ITL状态:
alter system dump datafile <file_id> block <block_id>; -- 转储疑似块,查看ITL信息
解决方案
优化提交策略:
大批量操作分批次提交,每次提交块数量不超过Buffer Cache的5%。
提交后主动访问数据块(如执行全表扫描),触发快速清除。
调整Buffer Cache大小:
增大Buffer Cache,减少数据块频繁写出,提升快速清除比例。
避免长时间未提交事务:
及时提交或回滚事务,减少ITL槽占用和延迟清除压力。
闪回查询失败(ORA-00376/ORA-01466)
现象
执行闪回查询(as of scn/timestamp)时提示:

ORA-00376: file X cannot be read at this time(Undo表空间离线)
ORA-01466: unable to read data - table definition has changed(表结构变更)
核心成因
Undo数据丢失:Undo表空间离线、数据被覆盖或文件损坏。
表结构变更:闪回时间点后表被修改(如添加字段、删除分区)。
SCN无效:指定的SCN超出Undo数据保留范围。
排查步骤
检查Undo表空间状态:
select tablespace_name, status from dba_tablespaces where tablespace_name like 'UNDO%';
alter tablespace undotbs1 online; -- 若离线则启用
验证SCN有效性:
select dbms_flashback.get_system_change_number from dual; -- 当前SCN
select first_change#, next_change# from v$archived_log; -- 归档日志中的SCN范围
确认表结构变更记录:
select object_name, operation, timestamp from dba_objects where object_name='EMP' and object_type='TABLE';
解决方案
启用闪回数据归档(Oracle 11g+):
-- 1. 创建归档表空间
create tablespace fbra datafile size 200M segment space management auto;
-- 2. 创建闪回归档区(保留1个月)
create flashback archive dataarchive tablespace fbra retention 1 month;
-- 3. 为表启用归档
alter table emp flashback archive dataarchive;
恢复Undo数据:
若Undo表空间损坏,通过RMAN恢复或使用冷备份还原。
调整闪回时间点:
选择表结构未变更、SCN有效的时间点重新查询:
select * from emp as of scn 12929941968; -- 替换为有效SCN
Undo参数配置不当
现象
Undo管理异常,如:

无法切换Undo表空间,提示ORA-30019。
undo_retention设置不生效,Undo数据提前被覆盖。
手动管理模式下无法创建回滚段。
核心成因
undo_management参数冲突:自动模式(AUTO)下执行手动管理操作(如指定回滚段)。
undo_suppress_errors参数设置错误:自动模式下屏蔽了不支持操作的报错,导致配置无效。
参数未生效:修改动态参数后未重启数据库(部分参数需重启)。
排查步骤
查看完整Undo参数配置:
show parameter undo; -- 重点检查undo_management、undo_tablespace、undo_suppress_errors
验证参数生效状态:
select name, value, isdefault, issys_modifiable from v$parameter where name like 'undo%';
解决方案
修正参数配置:
-- 切换为自动管理模式
alter system set undo_management=AUTO scope=spfile;
-- 指定有效Undo表空间
alter system set undo_tablespace=UNDOTBS1 scope=both;
-- 禁用错误屏蔽(推荐)
alter system set undo_suppress_errors=FALSE scope=both;
重启数据库使参数生效:
shutdown immediate;
startup;

站星网

在Oracle数据库中,回滚(Rollback)与撤销(Undo)是保障事务一致性、数据可恢复性的核心机制。Undo通过记..

为您推荐

向商界大佬一样管理技术工作 - 以团队换将+技术重构为例

背景我们虚拟一个背景:你是一个技术团队 Leader, 近期正在主导"去IOE", "国产替代", "信创" 等技术重构工作. 但是在紧要关头, 一名下属因不可抗力离职, 并且因为之前"开源节流", 其所负责部分技术无备岗.这时候, 我..

密钥管理—密钥生命周期对应的技术和流程

密钥管理是安全的密码算法的前置条件,如果没有安全的过程来处理密钥,那么使用密码技术就没有任何意义。密钥管理是什么?密钥管理是密码机制和真实系统安全性之间的接口,因此必须根据特定应用或组织的需要进行定制..

天天写业务代码,如何成为技术大牛?

不管是开发、测试、运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己。然而"梦想是美好的,现实却是残酷的",很多..

程序员如何讲清楚技术方案

最近在评审技术方案,和代码review的时候,遇到刚入行的同学们,很多都讲不清楚技术方案。具体表现是:上来不说需求,直接说算法实现。台下一头雾水,根本不知道设计方案是否合理。描述完需求后,又直接看代码,看表..

如何学习新技术

我总是感觉自己在盲目的学习一些看上去很火热的技术。比如 React Native,Flutter 等等。我家里堆了各种编程语言的入门书籍,有 Go 的,有 Erlang 的,有 c++ 的,还有 JavaScript 和 CSS。我到现在都搞不懂这个事情..

码农晋升为技术管理者后,痛并快乐着的纠结内心

有一个非常有趣的现象:据说大部分的技术管理者,在其从程序员转为管理岗位的时候,都是在领导或公司的要求下,被动的推到管理岗位上的,并非是自己当初有强烈意愿、主动去选择管理岗的。这种被动的比例还不低,高达..

十年技术进阶路

前言该篇文章是我第一次跟DTCC合作编写的,整篇文章大概8000字,可能花您15分钟阅读。我和DTCC的韩楠老师,共花7了天时间,每天把该文章打磨到晚上12点,在这非常感谢编辑老师的负责与付出。这篇也是我分享里为数不..

传统线程技术中创建线程的两种方式

传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法;二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread。这两种方式大部分人可能都知道,但是为什么这样玩就..

一个技术管理者的苦逼【技术管理漫谈】

希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,谢谢关注。角色转变 从工程师转技术管理这两年,好比头马变成车夫,除了角色认知的转变,还要看方向,定计划。不仅仅是自己拉好车的事情,..

技术团队管理者的问题视角

团队基建考虑的因素- 人心稳定性- 团队技能分布:(每个人熟悉的技术栈,技能)- 团队职业规范方向:(谁去当架构师、技术专家、技术经理、交互专家)- 合作意识:(工程师的积极性:主动问询,共同协商)- 团队规范..

技术实力的本质是什么?

背景今天,我们来讨论一个问题:技术实力的本质究竟是什么?在工作中,你可能会遇到,为什么他的实力不如我,他却可以晋升?在面试中,你可能会遇到,我把系统性能优化了10倍,为什么面试官还是看不上我?为什么?到..

什么是VoidZero?Vue和Vite之父尤雨溪成立的技术公司

VoidZero是一家由Vue和Vite之父尤雨溪成立的技术公司,主要致力于解决JavaScript工具链的碎片化、依赖复杂以及性能瓶颈问题,通过提供一个统一、高性能的开发工具链来改善开发者的开发体验。优点分析统一性:VoidZer..

深入浅出Oracle-DBA入门、进阶与诊断案例免费下载

目前市场上的Oracle书籍普遍存在的问题是模式单一,要么只讲基础知识,要么侧重代码编程实例,要么针对具体的版本特性(Oracle8i/Oracle9i/Oracle10g等),要么缺少实践应用检验,很少能对Oracle相关知识进行全面深..

初次走上技术管理岗位的思考总结

初次走上管理岗位的技术骨干,总是有很多困惑。为什么比以前写代码还累?怎么让任务安排更合理?为什么总有下属不愿意进步,每天得过且过?诸如此类的问题,本文并不能都给出解决方法。本文的目的是抛砖引玉,如果诸..

桌面应用开发常用技术栈

开发电脑桌面应用可以使用多种技术栈,具体选择取决于开发者的需求和偏好。以下是一些常见的技术栈:前端开发技术栈:通常使用桌面应用开发框架,如Electron、Qt、JavaFX等。前端开发语言可以选择JavaScript、TypeSc..

.NET哪些技术已经淘汰了

从2023年12月15日的最新情况来看,.NET已经淘汰的技术主要有以下几类:.NET Framework 4.8之前的版本:.NET Framework 4.8是.NET Framework的最后一个版本,于2019年11月发布。微软已经宣布,将于2023年11月10日停止..

.NET架构师技术要求:掌握.NET平台和架构设计能力

作为一个.NET架构师,你需要具备以下技术要求:精通.NET平台:作为.NET架构师,你应该对.NET平台和相关技术栈有深入的理解,包括.NET Framework和.NET Core。你应该熟悉.NET编程语言,如C#,以及相关的.NET开发工具..

如何进行.NET应用程序的性能优化?请谈谈你在性能优化方面的经验和使用的技术

.NET应用程序的性能优化是确保应用程序在响应时间、吞吐量和资源利用方面具有良好性能的关键任务。以下是一些我在性能优化方面的经验和使用的技术:代码优化:优化代码可以改善应用程序的性能。这包括避免不必要的循..

.NET哪些技术栈值得学习?

.NET 是一个开源的跨平台开发框架,它提供了丰富的技术栈,可以满足各种开发需求。以下是一些值得学习的 .NET 技术栈:Web 开发:.NET 提供了用于构建 Web 应用程序的多种技术栈,包括 ASP.NET Core、Blazor 和 ASP...

一名技术主管应该是创作者

今天看了一本书叫做《黑客与画家》。它里面提到一个很重要的概念就是黑客(优秀的程序员)是一名建筑师,而不是一名工程师。传统的主管和互联网的Leader这两者有什么区别呢?关键点在于建筑师是思考做什么,而工程师..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制
塔尊佛教网|借视频之舟,渡烦恼之海 Tazun.Cn佛教音乐网 - 海量佛乐、梵呗、禅音在线试听与下载经书网 - 以音声作佛事,聆听与观想的修学园地 jingshu.net佛教导航 - 开启智慧之旅,连接十方法缘 | fjdh.org.cn智慧莲华 - 赋能寺院数字化升级,打造智慧弘道平台趣知道 - 提问与分享,人人都是知识分享家 | Quzhidao.Com地藏孝亲网--南无大愿地藏王菩萨给农网地藏经顺运堂 - 专业家居风水布局,八字命理分析,助您家宅兴旺,运势亨通弘善佛教网-传播正信正知佛法的佛教网站国学在线 - 国学网,国学学校,国学经典,国学地图品读名篇佳句,涵养诗意人生 - 古诗词网哦嘿养殖网 - 热门乡村养殖发展项目_养殖技术知识分享生死书 - 佛教文化传承与生命智慧探索平台地藏论坛-佛教网络净土_佛法综合社区生死书生死书