常见的服务器调用堆栈
自顶向下调用 $是内部类的意思 $$是由 Lambda 生成的内部类的意思。当然 Spring 的 CGLIB 可以自己控制 naming pattern。 内部类生成的类名后往往带有一个数字,这个数字表示编译器生成这个内部类的顺序 Thread.run() ThreadPoolExecutor$Worker.run() ThreadPoolExecutor.runWorker() Netty.DefaultServerHandler.run() Netty.DefaultServerHandler.handleRequest() ThriftServerPublisher$MTProccessor.process() Thrift 接口$Processor.方法名() com.sun.proxy$Proxy 数字.方法名() XXXServiceImpl$$EnhancerBySpringCGLIB$$1fb0b39f.被拦截的方法 ThriftInvoker.invoker() RhinoLimiterFilter.filter() ThriftInvoker.invoke...
高性能 MySQL
译者序 MySQL 最初是放在 LAMP 里一起讨论。 淘宝网最初使用 LAMP 架构,使用 MySQL 4.0。03 年底改用 IOE,从 08 年开始又筹划去 IOE。09 年的时候 MySQL 的架构也从垂直拆分改成水平拆分。2012 年 MySQL 的单库已经有了 6.5 万的 QPS。 本书是 mysqlperformanceblog.com 的几个专家(同样也是 percona 的创始人)的作品,对于 InnoDB/XtraDB 等存储引擎的性能优化和诊断方法有很深入和详细的介绍。 推荐序 作者在性能优化领域工作多年,这本书诞生于 MySQL 还没有什么可扩展性和可测量性的时代,直到现在这些方面已经有了长足的进步。说到合理的方法,他们简直把这件事当成了科学,首先定义需要解决的问题,然后通过合理的猜测和精确的测量来解决问题。 性能优化 = 定义问题 + 猜测 + 测量 要关注: 吞吐量 响应时间 吞吐量 = 线程数/响应时间 追求新技能,如排队理论对性能的影响。 MySQL 的架构和历史 MySQL 能够应用的场景: 嵌入到应用程序中 数据仓库 内容索引 部署软件...
Spring IOC
总体的类图 spring-Ioc classDiagram %% BeanFactory 继承体系 class BeanFactory { +getBean() +isSingleton() +containsBean() +isTypeMatch() } class HierarchicalBeanFactory { +getParentBeanFactory() +containsLocalBean() } class ListableBeanFactory { +getBeanNamesForType() +getBeansOfType() +getBeanNamesForAnnotation() +getBeansWithAnnotation() } c...
Spring 与数据库
Java 执行事务的过程 1.获取连接 Connection con = DriverManager.getConnection() 2.开启事务con.setAutoCommit(true/false); 在 Spring 事务里(如 DataSourceTransactionManager 的 doBegin 方法)里,总是会显式地 con.setAutoCommit(false);(不然哪有事务可言)。 3.执行CRUD 4.提交事务/回滚事务 con.commit() / con.rollback(); 5.关闭连接 conn.close(); 本文涉及到的类型的类图 Spring 的事务管理核心类型和流程 DataSource 不同的数据源诞生不同的 DataSource。默认的 TransactionManager 本身是期待一个名叫“datasource”的数据源的。 FactoryBean 不同的 DataSource 装入不同的 FactoryBean,比如 JPA 的 EntityManagerFactory。 PlatformTransaction...
软件方法
建模带来竞争优势。 前言 “唱曲的名家,唱到极快处,吐字依然干净利落”。 不能站在别人的肩膀上看得更远,只是摘抄别人的观点,无意义。要有足够的积累,和深度的思考。 涉众(stakeholder)往往会做而不会定义,把不同类型的涉众放在一起访谈时,只会剩下在场军衔最高那个人的意见。 需求变更的时候,要注意涉众利益角度分析。 项目的流程步骤: 寻找老大 揣摩愿景 业务建模 系统用例 需求规约 分析模型 设计开发 只有一个领域(核心域)的知识是系统能在市场上生存的理由。 拿来主义要摒除门户之见,不关注流派和风格,着力于细节和应用。 建模与 uml 利润 = 需求 - 设计 需求:提升销售 设计:降低开发维护成本 几种弊习: 从需求直接映射设计,会得到大量的重复代码。 从设计出发来定义需求,会得到一堆假的“需求”。 从涉众视角对系统功能分包会得到需求包。 子系统是基于内部视角根据系统部件的耦合和内聚情况进行切割。 需求 设计 卖的视角 做的视角 具体 抽象 产品当项目做 项目当产品做 设计源于需求,高于需求 建模工作流 业务建模:描述组织...
交易系统模型设计
交易系统.xmind
Spark SQL 原理
Spark SQL的发展历程 为了给熟悉的 RDBMS 但又不理解 MapReduce 的技术人员提供快速上手的工具,Hive 应运而生,他是当时唯一运行在 Hadoop 上的SQL-On-Hadoop 工具。 但是 MapReduce 计算过程中大量的中间磁盘落地过程消耗了大量的 I/O,降低的运行效率,为了提高 SQL 的执行效率,大量的 SQL-On-Hadoop工具开始产生,而 Shark 是其中一个表现较为突出的项目。 Shark是伯克利实验室 Spark 生态环境的组件之一,它主要修改了内存管理,物理计划和执行三个模块,值得它能运行在 Spark 的引擎上,从而提高 SQL 查询的效率。 但是随着 Spark 的发展,Shark 对 Hive 过多的依赖制约了 Spark 的设计理念和各个组件之间的相互继承,所以 Spark 团队停止了对 Shark 的开发,提出了 SparkSQL 项目。 因为摆脱了Hive 的过度依赖,Spark SQL在数据兼容性,性能优化和组件扩展等各个方面都得到了极大的方便和发展。 提出了 SparkSQL 项目之后,SQL On Spar...
《枪炮、病菌和钢铁》札记
先发未必先到,关键性的因素可能在中后半段才起作用。 代差很可怕,代差带来的结果是压倒性的,难以逆转和抗拒的。 直接因素是什么,终极因素是什么?点在哪里,面是什么? 地久天长的力量:群体的理解是深刻的,但对更大的事物的理解是盲目的-更地久天长的东西往往更大,而更大的东西越需要接力赛式的理解。这就是得天独厚的意义。 天造地设的差异,往往影响非常深刻。有些东西的潜力很大,有些东西的潜力很小。有些东西的潜力易于发觉,因为盲区很小;而有些东西的潜力难于发觉,需要更长的时间来观察-如果这一过程没有被外来的其他力量所中断的话。 两拨农民,都是文盲。一拨农民的祖先长期和从驯化动物得来的病菌作斗争,带有免疫力和另一拨农民作者,对另一拨农民是灭顶之灾-欧洲的拓殖者就是这样消灭美洲的原住民的,这样的军队才是最可怕的。从这个角度来看,被保护得很好的群体,未必能够在历史长河中获胜,因为他们不知道竞争力差异也许来自一个意想不到的维度。 安娜卡列尼娜法则:关注导致失败的因素更重要,导致失败的因素比想象中多。 熊不可养太大,养到一岁就就可以小心为妙了-俄罗斯人恐怕不同意。 纬度对生物的影响,比经度要大,从最南...
Unix 常用命令
Unix 常用命令全景指南 本文系统梳理 Unix/Linux 环境下的高频命令,从命令行语法基础到生产环境实战,覆盖文件操作、文本处理、系统监控、开发工具四大场景。 目录 命令行基础 文件与目录操作 文本处理三剑客 系统与资源监控 开发环境工具链 磁盘扩容实战 命令行基础 命令行参数的三元素 Unix 命令行由三种基本元素组成:选项、位置参数和子命令。 基本结构 1command [options] [positional_arguments] 选项(Options) 以 - 或 -- 开头的参数,用于修改命令行为: 类型 格式 示例 短选项 - + 单个字母 -a, -v, -h 长选项 -- + 单词 --help, --verbose 带参数的选项 -n value 或 --name=value -n namespace, --port=8080 短选项支持合并书写:ls -la 等价于 ls -l -a。 位置参数(Positional Arguments) 不带连字符的参数,其含义由出现的位置决定: 123cp source_file...
Spring AOP 笔记
AOP 全景概览 核心问题定义 面向切面编程(Aspect-Oriented Programming,AOP)的核心目标是将横切关注点(Cross-cutting Concerns)从业务逻辑中分离出来。横切关注点是指那些散布在系统多个模块中的通用功能,如日志记录、事务管理、安全检查、性能监控等。在传统的面向对象编程中,这些功能往往需要在多个类中重复实现,导致代码冗余和耦合度增加。AOP 通过将这些横切关注点模块化为切面(Aspect),在不修改原有业务逻辑代码的情况下,实现对目标对象的增强。 核心概念速查表 概念 定义 Aspect 切面,横跨多个类的模块化关注点,通常由多个 Pointcut 和 Advice 组成 JoinPoint 连接点,程序执行过程中的特定位置,在 Spring AOP 中通常指方法执行点 Pointcut 切点,匹配 JoinPoint 的谓词表达式,定义 Advice 在何处执行 Advice 通知,切面在特定 JoinPoint 执行的动作,包括 Before、After、Around、AfterReturning、Af...












