首页 文章 精选 留言 我的

精选列表

搜索[组织重构],共10002篇文章
优秀的个人博客,低调大师

AI 驱动企业钓鱼攻击演化与组织防御机制重构研究

生成式人工智能技术大幅降低网络钓鱼攻击的实施门槛,传统依靠拼写错误、生硬语句识别钓鱼欺诈的经验判断方式逐步失效。攻击者借助人工智能不仅能够批量生成符合行业语境、语法严谨的钓鱼邮件、短信,还可以利用 AI 代理开展多轮交互式社会工程欺骗,进一步放大商业场景下的欺诈风险。Vertech 发布的行业预警案例显示,具备多年业务经验的企业从业人员同样会被 AI 代理主导的虚假对话欺骗,这表明企业防御逻辑必须完成底层切换,不能继续把员工主观辨别消息真伪作为主要防御手段。本文以该行业公开预警报告为基础,剖析 AI 钓鱼攻击在内容质量、媒介形态、交互模式三个层面发生的关键变化,分析中小企业面对新型钓鱼威胁的现实困境,论证独立跨渠道核验机制在 AI 欺骗环境下的核心价值,同时厘清员工安全意识培训的作用边界。研究表明,单纯依靠技术检测或者单纯依靠员工培训,均不足以抵御 AI 赋能的钓鱼攻击,企业需要将制度流程、身份核验、技术防护、人员认知训练结合,构建以流程约束为核心的综合防御体系。反网络钓鱼技术专家芦笛指出,AI 抹平钓鱼文本的显性缺陷之后,企业网络安全的薄弱点已经转移到业务流程层面,防御重心应当从 “辨别消息真假” 转向 “对高风险业务动作建立强制校验”。本文客观剖析现有防御路径的局限,为不同规模的商业机构应对 AI 钓鱼威胁提供可落地的分析框架。

优秀的个人博客,低调大师

Tomcat 总体架构-源码组织

开篇 这篇文章主要是将Tomcat的架构图从源码角度解析了一下,基本上就是把图和源码串联起来。 Tomcat 总体架构 Tomcat 总体架构 Catalina - 入口 Catalina对象包含Server对象变量,在初始化过程中通过Digester注入Server来实现。 protected Server server = null public class Catalina { protected boolean await = false; protected String configFile = "conf/server.xml"; protected ClassLoader parentClassLoader = Catalina.class.getClassLoader(); // Catalina包含StandardServer对象 protected Server server = null; protected boolean useShutdownHook = true; protected Thread shutdownHook = null; protected boolean useNaming = true; protected boolean loaded = false; } Server - StandardServer StandardServer实现了Server接口和Lifecycle接口,核心变量如下: port字段存储<server>标签的port属性 shutdown字段存储<server>标签的shutdown属性 Service services[]存储Server标签子标签的<Service>标签对象 private Service services[] = new Service[0] public final class StandardServer extends LifecycleMBeanBase implements Server { public StandardServer() { super(); // 省略相关代码 } // 省略相关代码 // 对比server.xml中<server>标签的内容的port private int port = 8005; // 维护Service的对象, private Service services[] = new Service[0]; private final Object servicesLock = new Object(); // 对比server.xml中<server>标签的内容的shutdown private String shutdown = "SHUTDOWN"; // 省略相关代码 } Service - StandardService StandardService实现了Server接口和Lifecycle接口,核心变量如下: Connector connectors[] 变量保存监听的Connector对象。 ArrayList<Executor> executors 变量保存多线程对象Executor对象。 Engine engine变量保存Service标签内部的Engine对象。 Mapper mapper变量保存Mapper对象。 MapperListener mapperListener变量保存MapperListener对象。 public class StandardService extends LifecycleMBeanBase implements Service { private String name = null; private Server server = null; protected final PropertyChangeSupport support = new PropertyChangeSupport(this); // 保存Service标签下的Connector对象 protected Connector connectors[] = new Connector[0]; private final Object connectorsLock = new Object(); // 保存Service的线程池Executor对象 protected final ArrayList<Executor> executors = new ArrayList<>(); // 保存Service的Engine对象 private Engine engine = null; private ClassLoader parentClassLoader = null; protected final Mapper mapper = new Mapper(); protected final MapperListener mapperListener = new MapperListener(this); Engine - StandardEngine StandardEngine实现了Server接口和Lifecycle接口,核心变量在基类ContainerBase: 基类ContainerBase的HashMap<String, Container> children保存<Host>对应的对象。 基类ContainerBase的Realm realm对象保存<Realm>标签对应的对象。 基类ContainerBase的Pipeline pipeline保存调用链并保存Valve对象。 public class StandardEngine extends ContainerBase implements Engine { public StandardEngine() { super(); // 省略相关代码 } private String defaultHost = null; private Service service = null; private String jvmRouteId; } public abstract class ContainerBase extends LifecycleMBeanBase implements Container { // 保存Host对象 protected final HashMap<String, Container> children = new HashMap<>(); protected int backgroundProcessorDelay = -1; protected final List<ContainerListener> listeners = new CopyOnWriteArrayList<>(); protected Cluster cluster = null; private final ReadWriteLock clusterLock = new ReentrantReadWriteLock(); protected String name = null; protected Container parent = null; protected ClassLoader parentClassLoader = null; protected final Pipeline pipeline = new StandardPipeline(this); // 保存Realm对象 private volatile Realm realm = null; private final ReadWriteLock realmLock = new ReentrantReadWriteLock(); protected boolean startChildren = true; private Thread thread = null; private volatile boolean threadDone = false; private int startStopThreads = 1; protected ThreadPoolExecutor startStopExecutor; } Host - StandardHost StandardEngine实现了Server接口和Lifecycle接口,部分变量在基类ContainerBase: appBase 变量保存Host标签的appBase。 autoDeploy 变量保存Host标签的autoDeploy。 unpackWARs 变量保存Host标签的unpackWARs。 基类ContainerBase的变量HashMap<String, Container> children保存Context变量。 基类ContainerBase的Pipeline pipeline保存调用链并保存Valve对象。 public class StandardHost extends ContainerBase implements Host { public StandardHost() { super(); pipeline.setBasic(new StandardHostValve()); } private String[] aliases = new String[0]; private final Object aliasesLock = new Object(); private String appBase = "webapps"; private volatile File appBaseFile = null; private String xmlBase = null; private volatile File hostConfigBase = null; private boolean autoDeploy = true; private String configClass = "org.apache.catalina.startup.ContextConfig"; private String contextClass = "org.apache.catalina.core.StandardContext"; private boolean deployOnStartup = true; private boolean deployXML = !Globals.IS_SECURITY_ENABLED; private boolean copyXML = false; private String errorReportValveClass = "org.apache.catalina.valves.ErrorReportValve"; private boolean unpackWARs = true; private String workDir = null; private boolean createDirs = true; private final Map<ClassLoader, String> childClassLoaders = new WeakHashMap<>(); private Pattern deployIgnore = null; private boolean undeployOldVersions = false; private boolean failCtxIfServletStartFails = false; } public abstract class ContainerBase extends LifecycleMBeanBase implements Container { // 保存Context对象 protected final HashMap<String, Container> children = new HashMap<>(); protected int backgroundProcessorDelay = -1; protected final List<ContainerListener> listeners = new CopyOnWriteArrayList<>(); protected Cluster cluster = null; private final ReadWriteLock clusterLock = new ReentrantReadWriteLock(); protected String name = null; protected Container parent = null; protected ClassLoader parentClassLoader = null; protected final Pipeline pipeline = new StandardPipeline(this); // 保存Realm对象 private volatile Realm realm = null; private final ReadWriteLock realmLock = new ReentrantReadWriteLock(); protected boolean startChildren = true; private Thread thread = null; private volatile boolean threadDone = false; private int startStopThreads = 1; protected ThreadPoolExecutor startStopExecutor; } Context - StandardContext StandardEngine实现了Server接口和Lifecycle接口,部分变量如下: 在context容器中可以定义非常多的属性,详细内容见官方手册。 wrapperClass:实现wrapper容器的类,wrapper用于管理该context中的servlet,该类必须实现org.apache.catalina.Wrapper接口,如果不指定该属性则采用默认的标准类。 基类ContainerBase的Pipeline pipeline保存调用链并保存Valve对象。 public class StandardContext extends ContainerBase implements Context, NotificationEmitter { // 省略相关代码 private String wrapperClassName = StandardWrapper.class.getName(); private Class<?> wrapperClass = null; } Wrapper - StandardWrapper StandardWrapper实现了StandardWrapper接口用以处理servlet请求。 public class StandardWrapper extends ContainerBase implements StandardWrapper, Wrapper, NotificationEmitter { protected static final String[] DEFAULT_SERVLET_METHODS = new String[] {"GET", "HEAD", "POST" }; public StandardWrapper() { super(); swValve=new StandardWrapperValve(); pipeline.setBasic(swValve); broadcaster = new NotificationBroadcasterSupport(); } protected long available = 0L; protected final NotificationBroadcasterSupport broadcaster; protected final AtomicInteger countAllocated = new AtomicInteger(0); protected final StandardWrapperFacade facade = new StandardWrapperFacade(this); protected volatile Servlet instance = null; protected volatile boolean instanceInitialized = false; protected int loadOnStartup = -1; protected final ArrayList<String> mappings = new ArrayList<>(); protected HashMap<String, String> parameters = new HashMap<>(); protected HashMap<String, String> references = new HashMap<>(); protected String runAs = null; protected long sequenceNumber = 0; protected String servletClass = null; protected volatile boolean singleThreadModel = false; protected volatile boolean unloading = false; protected int maxInstances = 20; protected int nInstances = 0; protected Stack<Servlet> instancePool = null; protected long unloadDelay = 2000; protected boolean isJspServlet; protected ObjectName jspMonitorON; protected boolean swallowOutput = false; protected StandardWrapperValve swValve; protected long loadTime=0; protected int classLoadTime=0; protected MultipartConfigElement multipartConfigElement = null; protected boolean asyncSupported = false; protected boolean enabled = true; private boolean overridable = false; protected static Class<?>[] classType = new Class[]{ServletConfig.class}; private final ReentrantReadWriteLock parametersLock = new ReentrantReadWriteLock(); private final ReentrantReadWriteLock mappingsLock = new ReentrantReadWriteLock(); private final ReentrantReadWriteLock referencesLock = new ReentrantReadWriteLock(); } Executor - StandardThreadExecutor Tomcat自定义Executor接口,继承自juc包下的Executor接口,增加getName()接口。 public interface Executor extends java.util.concurrent.Executor, Lifecycle { public String getName(); void execute(Runnable command, long timeout, TimeUnit unit); } Tomcat自定义ThreadPoolExecutor类,继承自juc包下的ThreadPoolExecutor接口,重写execute()方法。 public class ThreadPoolExecutor extends java.util.concurrent.ThreadPoolExecutor { private final AtomicInteger submittedCount = new AtomicInteger(0); private final AtomicLong lastContextStoppedTime = new AtomicLong(0L); private final AtomicLong lastTimeThreadKilledItself = new AtomicLong(0L); private long threadRenewalDelay = Constants.DEFAULT_THREAD_RENEWAL_DELAY; public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, handler); prestartAllCoreThreads(); } public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); prestartAllCoreThreads(); } public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, new RejectHandler()); prestartAllCoreThreads(); } public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, new RejectHandler()); prestartAllCoreThreads(); } @Override public void execute(Runnable command) { execute(command,0,TimeUnit.MILLISECONDS); } public void execute(Runnable command, long timeout, TimeUnit unit) { submittedCount.incrementAndGet(); try { super.execute(command); } catch (RejectedExecutionException rx) { if (super.getQueue() instanceof TaskQueue) { final TaskQueue queue = (TaskQueue)super.getQueue(); try { if (!queue.force(command, timeout, unit)) { submittedCount.decrementAndGet(); throw new RejectedExecutionException("Queue capacity is full."); } } catch (InterruptedException x) { submittedCount.decrementAndGet(); throw new RejectedExecutionException(x); } } else { submittedCount.decrementAndGet(); throw rx; } } } } Tomcat的StandardThreadExecutor实现Lifecycle接口并实现自定义的Executor接口。 StandardThreadExecutor的executor对象是自定义的ThreadPoolExecutor对象。 自定义的ThreadPoolExecutor对象是在startInternal()方法内部初始化,自定义线程工厂以及任务队列。 StandardThreadExecutor实现了自定义Executor接口并在execute()方法执行自定义ThreadPoolExecutor的方法。 public class StandardThreadExecutor extends LifecycleMBeanBase implements Executor, ResizableExecutor { protected int threadPriority = Thread.NORM_PRIORITY; protected boolean daemon = true; protected String namePrefix = "tomcat-exec-"; protected int maxThreads = 200; protected int minSpareThreads = 25; protected int maxIdleTime = 60000; protected ThreadPoolExecutor executor = null; protected String name; protected boolean prestartminSpareThreads = false; protected int maxQueueSize = Integer.MAX_VALUE; protected long threadRenewalDelay = org.apache.tomcat.util.threads.Constants.DEFAULT_THREAD_RENEWAL_DELAY; private TaskQueue taskqueue = null; public StandardThreadExecutor() { //empty constructor for the digester } @Override protected void initInternal() throws LifecycleException { super.initInternal(); } @Override protected void startInternal() throws LifecycleException { taskqueue = new TaskQueue(maxQueueSize); TaskThreadFactory tf = new TaskThreadFactory(namePrefix,daemon,getThreadPriority()); // 自定义ThreadPoolExecutor executor = new ThreadPoolExecutor(getMinSpareThreads(), getMaxThreads(), maxIdleTime, TimeUnit.MILLISECONDS,taskqueue, tf); executor.setThreadRenewalDelay(threadRenewalDelay); if (prestartminSpareThreads) { executor.prestartAllCoreThreads(); } taskqueue.setParent(executor); setState(LifecycleState.STARTING); } @Override public void execute(Runnable command, long timeout, TimeUnit unit) { if ( executor != null ) { executor.execute(command,timeout,unit); } else { throw new IllegalStateException("StandardThreadExecutor not started."); } } @Override public void execute(Runnable command) { if ( executor != null ) { try { executor.execute(command); } catch (RejectedExecutionException rx) { //there could have been contention around the queue if ( !( (TaskQueue) executor.getQueue()).force(command) ) throw new RejectedExecutionException("Work queue full."); } } else throw new IllegalStateException("StandardThreadPool not started."); } } Connector & ProtocolHandler & AbstractEndpoint Connector的核心变量如下: 协议处理接口ProtocolHandler protocolHandler。 Coyote adapter 的 Adapter adapter。 public class Connector extends LifecycleMBeanBase { public Connector() { this(null); } public Connector(String protocol) { setProtocol(protocol); ProtocolHandler p = null; try { Class<?> clazz = Class.forName(protocolHandlerClassName); p = (ProtocolHandler) clazz.getConstructor().newInstance(); } catch (Exception e) { log.error(sm.getString( "coyoteConnector.protocolHandlerInstantiationFailed"), e); } finally { this.protocolHandler = p; } protected Service service = null; protected boolean allowTrace = false; protected long asyncTimeout = 30000; protected boolean enableLookups = false; protected boolean xpoweredBy = false; protected int port = -1; protected String proxyName = null; protected int proxyPort = 0; protected int redirectPort = 443; protected String scheme = "http"; protected boolean secure = false; private int maxCookieCount = 200; protected int maxParameterCount = 10000; protected int maxPostSize = 2 * 1024 * 1024; protected int maxSavePostSize = 4 * 1024; protected String parseBodyMethods = "POST"; protected HashSet<String> parseBodyMethodsSet; protected boolean useIPVHosts = false; protected String protocolHandlerClassName = "org.apache.coyote.http11.Http11NioProtocol"; // 协议处理接口 Coyote protocol handler. protected final ProtocolHandler protocolHandler; // Coyote adapter. protected Adapter adapter = null; protected String URIEncoding = null; protected String URIEncodingLower = null; private Charset uriCharset = StandardCharsets.UTF_8; protected boolean useBodyEncodingForURI = false; protected static final HashMap<String,String> replacements = new HashMap<>(); static { replacements.put("acceptCount", "backlog"); replacements.put("connectionLinger", "soLinger"); replacements.put("connectionTimeout", "soTimeout"); replacements.put("rootFile", "rootfile"); } } ProtocolHandler的核心变量如下: ProtocolHandler的内部包含AbstractEndpoint<S> endpoint负责监听连接。 public abstract class AbstractProtocol<S> implements ProtocolHandler, MBeanRegistration { private static final StringManager sm = StringManager.getManager(AbstractProtocol.class); private static final AtomicInteger nameCounter = new AtomicInteger(0); protected ObjectName rgOname = null; private int nameIndex = 0; private final AbstractEndpoint<S> endpoint; private Handler<S> handler; private final Set<Processor> waitingProcessors = Collections.newSetFromMap(new ConcurrentHashMap<Processor, Boolean>()); private AsyncTimeout asyncTimeout = null; }

优秀的个人博客,低调大师

关于索引组织表IOT

摘自oracle高效设计: create table t( a int, b int, c int, primary key (a,b))organization index; create index t_idx_c on t(c); set autotrace traceonly explain set autotrace traceonly explainselect a, b from t where c = 55; 执行计划----------------------------------------------------------Plan hash value: 2046116080 ----------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 39 | 1 (0)| 00:00:01 ||* 1 | INDEX RANGE SCAN| T_IDX_C | 1 | 39 | 1 (0)| 00:00:01 |---------------------------------------------------------------------------- Predicate Information (identified by operation id):--------------------------------------------------- 1 - access("C"=55) Note----- - dynamic sampling used for this statement 注意执行计划没有table access by rowid,IOT表的逻辑rowid位于索引结构中,主键值已经存在rowid里面。 修改c为非NULL,执行: SELECT ROWID, t.* FROM t; 执行计划----------------------------------------------------------Plan hash value: 339099436 ----------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 101 | 9595 | 1 (0)| 00:00:01 || 1 | INDEX FULL SCAN | T_IDX_C | 101 | 9595 | 1 (0)| 00:00:01 |---------------------------------------------------------------------------- Note----- - dynamic sampling used for this statement 可以发现作索引全扫描T_IDX_C 就可以获得结果集。

优秀的个人博客,低调大师

企业架构 - 组织角色和技能

Scrum开发会有PO、Scrum Master和开发团队三个角色,那么开发企业架构又是由哪些角色组成的呢?每种角色又需要什么技能才能够承担架构的工作呢?本篇介绍一下在架构开发中角色和技能要求,以便大家在实施TOGAF时知道谁来做,需要具备或提高哪些技能。 软件开发管理就比较复杂,架构开发管理就更复杂了,由于还没有具体实践过,暂时还没有这些内容的深入了解和细化,以下介绍大部分来自于TOGAF的架构能力框架。 新兴的企业架构师角色 在TOGAF 或非 TOGAF:在 RUP 之上扩展企业架构中介绍了一下企业架构师角色。 企业架构师是思想带头人、幻想家和行业专家。在大多数公司里,这是个新的角色,它将项目经理、解决方案架构师和业务分析人员的技能与执行的直觉联合起来。 许多 IT架构师视角的普遍局限是他们是成熟的程序设计人员,并且目光易于局限于内部。虽然,这不完全是架构并设计“全局性”解决方案的障碍,但是,它是“构架”企业环境中不那么理想的特征。企业架构师可能更加外向,并且善于利用专业的、工作的,甚至与业务所有者、业务领导、同事和客户之间的关系来说明、从架构地角度描述,并且帮助执行企业远景。 企业架构师的职责常常与城市规划者对比,而建筑架构师的职责更容易与IT 架构师角色联系起来。建筑架构师强调其推理的技能,而企业架构师角色常常强调类似于侦探的感应技能。 然而,高层次的企业架构师视角不意味着该角色脱离用户群体。反之,企业架构师必须帮助客户了解他们真正的需求,并且在解决方案的实现过程中与客户合作。与此同时,企业架构师必须能够在直接参与实现的实践方面之前的抽象层次上观察他或她的领域。如 IBM 的 David Jackson所认为的,企业架构师应该“能够了解业务问题及业务领域,并且向技术人员说明,还能够了解技术领域并向业务人员说明技术可能性”。 很重要的是,企业架构师扮演架构治理(常常在分类的业务和技术角色之间共享的功能,或者更糟,仅仅被忽略)中的关键角色。架构治理是为所有企业和项目架构活动提供环境和框架的粘合剂。 TOGAF Roles 架构委员会(Architecture Board Members):我感觉类似与IPD的IPMT,由总监级或资深产品专家组成,属于管理决策层,最好是4-5个固定成员。 架构发起人(Architecture Sponsor) 架构经理(Architecture Manager) 企业架构师(Enterprise Architecture) 业务架构(Business Architecture) 数据架构(Data Architecture) 应用架构(Application Architecture) 技术架构(Technology Architecture) 程序员或项目经理(Program and/or Project Managers) IT设计师(IT Designer) 其它(And many others) 技能分类 通用技能(Generic Skills): 领导力、团队协作、人际关系等 业务技能和方法(Business Skills & Methods): 业务案例、业务流程、策略计划等 企业架构技能(Enterprise Architecture Skills): 建模、构建块涉及、应用和角色设计、系统集成等 程序和项目管理技能(Program or Project Management Skills): 管理业务变更、项目管理方法和工具等 IT通用知识(IT General Knowledge Skills): brokering applications, asset management, migration planning, SLAs, etc. IT技术(Technical IT Skills): 软件工程、安全、数据交互、数据管理等 法律知识(Legal Environment): data protection laws,contract law procurement law, fraud, etc. 掌握级别(Proficiency Levels) 每种角色对各种技能的要求是不一样的,为了各自的掌握程度,定义了四种级别:不要求、了解、熟悉、精通 角色和技能定义 通用技能(Generic Skills) 业务技能和方法(Business Skills & Methods) 企业架构技能(Enterprise Architecture Skills) 程序和项目管理技能(Program or Project Management Skills) IT通用知识(IT General Knowledge Skills) IT技术(Technical IT Skills) 法律知识(Legal Environment) 通用角色(Generic Role) 架构师的角色能够汇总如下: 明白和解释需求(Understand and interpret requirements): 参考我的BABOK系列blog 生成有用的模型(Create a useful model) 验证、提炼和扩充模型(Validate, refine, and expand the model) 管理架构(Manage the architecture): 在架构开发期间,持续沟通共享架构,并不断完善架构 企业架构师主要特点(Key Characteristics of an Enterprise Architect) 有产品设计的技能和经验(Skills and Experience in Producing Designs) An enterprise architect must be proficient in the techniques that go into producing designs of complex systems, including requirements discovery and analysis, formulation of solution context,identification of solution alternatives and their assessment,technology selection, and design configuration. 技能面广,并且对一两个领域深入(Extensive Technical Breadth, with Technical Depth in One or a Few Disciplines) An enterprise architect should possess an extensive technical breadth through experience in the IT industry. This breadth shouldbe in areas of application development and deployment, and in the areas of creation and maintenance of the infrastructure to support the complex application environment. Current IT environments are heterogeneous by nature, and the experienced enterprise architect will have skills across multiple platforms, including distributed systems and traditional mainframe environments.Enterprise architects will have, as a result of their careers, skills in at least one discipline that is considered to be at the level of a subject matter expert. 方法驱动(Method-Driven Approach to Execution) Enterprise architects approach their job through the consistent use of recognized design methods such as the TOGAF ArchitectureDevelopment Method (ADM). Enterprise architects should have working knowledge of more than one design method and be comfortable deploying parts of methods appropriate to the situation in which they are working working. This should be seen in the body ofdesign work the enterprise architect has produced through repeated successful use of more than one design method. Proficiency in methodology use is in knowing what parts of methods to use in a given situation, and what methods not to use. 项目全开发过程的经验(Full Project Scope Experience) While enterprise architects are responsible for design and hand-off of the project to implementors, it is vital that they have experience with all aspects of a project from design through development, testing, implementation, and production. This scope of experience will serve to keep enterprise architects grounded in the notion of fitness-for-purpose and the practical nature of system implementation. The impact of full project scope experience should lead the enterprise architect to make better designdecisions, and better inform the trade-offs made in those decisions. 领导力(Leadership) Communication and team building are key to the successful role of the enterprise architect. The mix of good technical skill andthe ability to lead are crucial to the job. The enterprise architect should be viewed as a leader in the enterprise by the ITorganization, the clients they serve, and management. 个人和专业技能(Personal and Professional Skills) The enterprise architect must have strong communications and relationship skills. A major task of the enterprise architect is to communicate complex technical information to all stakeholders of the project, including those who do not have a technical background. Strong negotiation and problem-solving skills are also required. The enterprise architect must work with the projectmanagement team to make decisions in a timely manner to keep projects on track. 一个或多个行业经验(Skills and Experience in One or More Industries) Industry skill and experience will make the task of gathering requirements and deciding priorities easier and more effective for the enterprise architect. Enterprise architects must understand the business processes of the enterprise in which they work, and how those processes work with other peer enterprises in the industry. They should also be able to spot key trends and correctflawed processes, giving the IT organization the capability to lead the enterprise, not just respond to requests. The mission ofthe enterprise architect is strategic technical leadership. 通过上面的技能要求能看出来,架构师就是架构师,要求就是高。一个公司牛人就不多,牛的架构师就更不多了,又要让大家在一起做一个统一的架构,怪不得企业架构难做啊,继续努力...... 其他 Enterprise Architects – What attributes do you look for? 本文转自 jingen_zhou 51CTO博客,原文链接:http://blog.51cto.com/zhoujg/518630,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册