• 日志规范总结

    生产和测试环境中需要日志来记录、跟踪和分析系统的运行状态,但是有太多带有杂讯的日志又会影响跟踪,甚至可能对系统的运行带来影响。如果生产环境里运行的程序没有日志,会让问题定位变得异常艰难。但冗余的日志打印又会让日志看起来杂乱无章,从日志里发现不了问题可能的原因。所以我们打印日志要达到以下目标: 1. 对程序运行情况的记录、跟踪、分析和归档; 2. 在必要时可详细了解程序内部的运行状态、运行的必要信息,方便排查和分析; 3. 对系统性能的影响尽量小;

    3
    2416
    172KB
    2019-04-26
    50
  • Intellij Idea快捷键

    一、 IDEA内存优化(秒开的快感!!) 因机器本身的配置而配置:\IntelliJ IDEA8\bin\idea.exe.vmoptions // (根据你的配置变大!!) ----------------------------------------- -Xms2048m -Xmx2048m -XX:MaxPermSize=512m -ea -server -Dsun.awt.keepWorkingSetOnMinimize=true --------------------- Ctrl+Shift + Enter,语句完成 Ctrl+[ OR ],可以跑到大括号的开头与结尾 Alt+Insert,可以生成构造器/Getter/Setter等 Ctrl+W,选择整个单词,或括号内 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关闭文件

    0
    834
    17KB
    2019-04-26
    43
  • Git常用命令

    Git 常用命令使用 1)、本地库初始化 git init 2)、设置签名 作用:区分不同开发人员的身份。 说明:这里设置的签名和登录远程库(代码托管中心)的账户没有关系。 a)、项目级别签名: git config user.name [AAA] git config user.email [邮箱地址] 签名信息位置:cat .git/config b)、系统级别签名: git config --globaluser.name [AAA] git config --global user.email [邮箱地址] 签名信息位置:cd ~ 、cat .gitconfig 3)、基本操作 a)、查看状态: git status(查看工作区、暂存区的状态) b)、添加操作: git add 文件名(将工作区新建/修改的内容添加到暂存区) c)、提交操作: git commit -m “commit message” 文件名(将暂存区的内容提交到本地库)

    0
    997
    75KB
    2019-04-26
    18
  • 深入理解Java虚拟机 JVM高级特性与最佳实践(第二版)

    目录: 前言 第一部分 走近Java 第1章 走近Java 1.1 概述 1.2 Java技术体系 1.3 Java发展史 1.4 Java虚拟机发展史 1.4.1 Sun Classic Exact VM 1.4.2 Sun HotSpot VM 1.4.3 Sun Mobile-Embedded VM Meta-Circular VM 1.4.4 BEA JRockit IBM J9 VM 1.4.5 Azul VM BEA Liquid VM 1.4.6 Apache Harmony Google Android Dalvik VM 1.4.7 Microsoft JVM及其他 1.5 展望Java技术的未来 1.5.1 模块化 1.5.2 混合语言 1.5.3 多核并行 1.5.4 进一步丰富语法 1.5.5 64位虚拟机 1.6 实战:自己编译JDK 1.6.1 获取JDK源码 1.6.2 系统需求 1.6.3 构建编译环境 1.6.4 进行编译 1.6.5 在IDE工具中进行源码调试 1.7 本章小结 第二部分 自动内存管理机制 第2章 Java内存区域与内存溢出异常 2.1 概述 2.2 运行时数据区域 2.2.1 程序计数器 2.2.2 Java虚拟机栈 2.2.3 本地方法栈 2.2.4 Java堆 2.2.5 方法区 2.2.6 运行时常量池 2.2.7 直接内存 2.3 HotSpot虚拟机对象探秘 2.3.1 对象的创建 2.3.2 对象的内存布局 2.3.3 对象的访问定位 2.4 实战:OutOfMemoryError异常 2.4.1 Java堆溢出 2.4.2 虚拟机栈和本地方法栈溢出 2.4.3 方法区和运行时常量池溢出 2.4.4 本机直接内存溢出 2.5 本章小结 第3章 垃圾收集器与内存分配策略 3.1 概述 3.2 对象已死吗 3.2.1 引用计数算法 3.2.2 可达性分析算法 3.2.3 再谈引用 3.2.4 生存还是死亡 3.2.5 回收方法区 3.3 垃圾收集算法 3.3.1 标记-清除算法 3.3.2 复制算法 3.3.3 标记-整理算法 3.3.4 分代收集算法 3.4 HotSpot的算法实现 3.4.1 枚举根节点 3.4.2 安全点 3.4.3 安全区域 3.5 垃圾收集器 3.5.1 Serial收集器 3.5.2 ParNew收集器 3.5.3 Parallel Scavenge收集器 3.5.4 Serial Old收集器 3.5.5 Parallel Old收集器 3.5.6 CMS收集器 3.5.7 G1收集器 3.5.8 理解GC日志 3.5.9 垃圾收集器参数总结 3.6 内存分配与回收策略 3.6.1 对象优先在Eden分配 3.6.2 大对象直接进入老年代 3.6.3 长期存活的对象将进入老年代 3.6.4 动态对象年龄判定 3.6.5 空间分配担保 3.7 本章小结 第4章 虚拟机性能监控与故障处理工具 4.1 概述 4.2 JDK的命令行工具 4.2.1 jps:虚拟机进程状况工具 4.2.2 jstat:虚拟机统计信息监视工具 4.2.3 jinfo:Java配置信息工具 4.2.4 jmap:Java内存映像工具 4.2.5 jhat:虚拟机堆转储快照分析工具 4.2.6 jstack:Java堆栈跟踪工具 4.2.7 HSDIS:JIT生成代码反汇编 4.3 JDK的可视化工具 4.3.1 JConsole:Java监视与管理控制台 4.3.2 VisualVM:多合一故障处理工具 4.4 本章小结 第5章 调优案例分析与实战 5.1 概述 5.2 案例分析 5.2.1 高性能硬件上的程序部署策略 5.2.2 集群间同步导致的内存溢出 5.2.3 堆外内存导致的溢出错误 5.2.4 外部命令导致系统缓慢 5.2.5 服务器JVM进程崩溃 5.2.6 不恰当数据结构导致内存占用过大 5.2.7 由Windows虚拟内存导致的长时间停顿 5.3 实战:Eclipse运行速度调优 5.3.1 调优前的程序运行状态 5.3.2 升级JDK 1.6的性能变化及兼容问题 5.3.3 编译时间和类加载时间的优化 5.3.4 调整内存设置控制垃圾收集频率 5.3.5 选择收集器降低延迟 5.4 本章小结 第三部分 虚拟机执行子系统 第6章 类文件结构 6.1 概述 6.2 无关性的基石 6.3 Class类文件的结构 6.3.1 魔数与Class文件的版本 6.3.2 常量池 6.3.3 访问标志 6.3.4 类索引、父类索引与接口索引集合 6.3.5 字段表集合 6.3.6 方法表集合 6.3.7 属性表集合 6.4 字节码指令简介 6.4.1 字节码与数据类型 6.4.2 加载和存储指令 6.4.3 运算指令 6.4.4 类型转换指令 6.4.5 对象创建与访问指令 6.4.6 操作数栈管理指令 6.4.7 控制转移指令 6.4.8 方法调用和返回指令 6.4.9 异常处理指令 6.4.10 同步指令 6.5 公有设计和私有实现 6.6 Class文件结构的发展 6.7 本章小结 第7章 虚拟机类加载机制 7.1 概述 7.2 类加载的时机 7.3 类加载的过程 7.3.1 加载 7.3.2 验证 7.3.3 准备 7.3.4 解析 7.3.5 初始化 7.4 类加载器 7.4.1 类与类加载器 7.4.2 双亲委派模型 7.4.3 破坏双亲委派模型 7.5 本章小结 第8章 虚拟机字节码执行引擎 8.1 概述 8.2 运行时栈帧结构 8.2.1 局部变量表 8.2.2 操作数栈 8.2.3 动态连接 8.2.4 方法返回地址 8.2.5 附加信息 8.3 方法调用 8.3.1 解析 8.3.2 分派 8.3.3 动态类型语言支持 8.4 基于栈的字节码解释执行引擎 8.4.1 解释执行 8.4.2 基于栈的指令集与基于寄存器的指令集 8.4.3 基于栈的解释器执行过程 8.5 本章小结 第9章 类加载及执行子系统的案例与实战 9.1 概述 9.2 案例分析 9.2.1 Tomcat:正统的类加载器架构 9.2.2 OSGi:灵活的类加载器架构 9.2.3 字节码生成技术与动态代理的实现 9.2.4 Retrotranslator:跨越JDK版本 9.3 实战:自己动手实现远程执行功能 9.3.1 目标 9.3.2 思路 9.3.3 实现 9.3.4 验证 9.4 本章小结 第四部分 程序编译与代码优化 第10章 早期(编译期)优化 10.1 概述 10.2 Javac编译器 10.2.1 Javac的源码与调试 10.2.2 解析与填充符号表 10.2.3 注解处理器 10.2.4 语义分析与字节码生成 10.3 Java语法糖的味道 10.3.1 泛型与类型擦除 10.3.2 自动装箱、拆箱与遍历循环 10.3.3 条件编译 10.4 实战:插入式注解处理器 10.4.1 实战目标 10.4.2 代码实现 10.4.3 运行与测试 10.4.4 其他应用案例 10.5 本章小结 第11章 晚期(运行期)优化 11.1 概述 11.2 HotSpot虚拟机内的即时编译器 11.2.1 解释器与编译器 11.2.2 编译对象与触发条件 11.2.3 编译过程 11.2.4 查看及分析即时编译结果 11.3 编译优化技术 11.3.1 优化技术概览 11.3.2 公共子表达式消除 11.3.3 数组边界检查消除 11.3.4 方法内联 11.3.5 逃逸分析 11.4 Java与CC++的编译器对比 11.5 本章小结 第五部分 高效并发 第12章 Java内存模型与线程 12.1 概述 12.2 硬件的效率与一致性 12.3 Java内存模型 12.3.1 主内存与工作内存 12.3.2 内存间交互操作 12.3.3 对于volatile型变量的特殊规则 12.3.4 对于long和double型变量的特殊规则 12.3.5 原子性、可见性与有序性 12.3.6 先行发生原则 12.4 Java与线程 12.4.1 线程的实现 12.4.2 Java线程调度 12.4.3 状态转换 12.5 本章小结 第13章 线程安全与锁优化 13.1 概述 13.2 线程安全 13.2.1 Java语言中的线程安全 13.2.2 线程安全的实现方法 13.3 锁优化 13.3.1 自旋锁与自适应自旋 13.3.2 锁消除 13.3.3 锁粗化 13.3.4 轻量级锁 13.3.5 偏向锁 13.4 本章小结 附  录 附录A 编译Windows版的OpenJDK 附录B 虚拟机字节码指令表 附录C HotSpot虚拟机主要参数表 附录D 对象查询语言(OQL)简介 附录E JDK历史版本轨迹

    0
    0
    16.66MB
    2019-04-26
    5
  • 麦肯锡 金字塔原理

    《金字塔原理》这本书是训练思考、使表达呈现逻辑性的实用宝典,也是麦肯锡40年经典培训教材。本书介绍了一种在文章中能够清楚地展现逻辑思路的有效方法,可以说掌握了金字塔原理,写文章时就能够重点突出、逻辑清晰。 ——· 关于作者 ·—— 这本书的作者是芭芭拉·明托,她毕业于哈佛大学,是麦肯锡公司第一位女咨询顾问。她在麦肯锡公司工作期间总结出了一套理论就是金字塔原理。她曾经为美国、欧洲和亚洲众多企业及哈佛大学、斯坦福大学等世界名校讲授金字塔原理40余年,受到社会各界人士的一致好评。 ——· 本书金句 ·—— 1.对于读者来说,最容易理解的行文顺序是:先理解主要的、抽象的思想,后理解次要的,为主要思想提供支撑的思想。 2.在金字塔结构中,总结句就是对下一个层次上的思想的提炼和概括。因此,总结句要避免使用“缺乏思想”的句子。 3.你写文章的结构必定是只能支持一个思想,也就是概括了所有思想的主要思想。这个思想应当就是你要表达的核心观点,所有在这个思想以下的思想要符合越往下越具体、越往下越详细,并且都对你要表达的核心观点起着解释和支撑的作用。 4.建立逻辑树的方法,既可以寻找解决方案,也可以检验各个组的观点。 ——· 核心内容 ·—— 一、什么是金字塔结构?如何构建金字塔结构? 金字塔结构的文章必定是符合这三个规则:第一,每组中的思想必须按照逻辑顺序去组织;第二,每组中的思想必须属于同一种逻辑范畴;第三,文章中任何一个层次上的思想必须是对下一个层次思想的概括总结。 读者很容易接受用金字塔结构组织的思想:先从金字塔的最顶端开始,沿着各个分支向下走。首先表达的主要思想,使读者对作者的观点产生某种疑问,而下一层次上的思想将回答这些疑问。通过这种不断地疑问和回答式的交流,读者就可以了解文章中的所有思想。 如果作者事先能够将传达给读者的思想进行归类和概括,并且按照金字塔结构一样自上而下的顺序去呈现,读者就能够更容易理解作者要表达的思想。 知道金字塔的结构之后,我们该如何构建金字塔呢?作者提出了两种方法:一种是自上而下法,另一种是自下而上法。 我们先来看自上而下法。自上而下法分为六个步骤:第一个步骤是提出主题思想,也就是写出你想要表达的核心观点是什么;第二个步骤是设想读者的主要疑问;第三个步骤是写出这些疑问的答案;第四个步骤是说明主题思想的背景;第五个步骤是与读者进行疑问和回答式的对话。也就是对于读者可能存在疑问的地方进行回答;第六个步骤是对于读者的疑问,重复地进行疑问和回答式的对话。 说完了自上而下法,我们再来看自下而上法。第一个步骤是列出所有的要点。在这个步骤,你要尽可能多地写下你想要表达的要点;第二个步骤是找出逻辑关系。在列出的所有要点中,思考它们之间存在的逻辑关系;第三个步骤是得出结论。 二、逻辑顺序的分类以及如何概括中心思想? 首先,你要找出将这些思想联系起来的逻辑框架,并确定逻辑顺序。 1、时间顺序。时间顺序可能是最容易理解的一种逻辑顺序,因为这种顺序是将思想分组时使用最多的一种。在按照时间顺序分组的思想中,你要按照采取行动的顺序,先第一步再第二步,第二步完了再第三步……依次表述达到某种结果必须采取的行动。 2、结构顺序。结构顺序就是当你使用示意图、照片、图形等想象某事物的顺序。 3、程度顺序。程度顺序也称重要性顺序,是你对具有某种共同特点而被聚集在一起的事物所采用的顺序。 当你确定每一组的思想都按照一定的逻辑顺序划分好了,下一步需要做的就是概括总结出各组思想的隐含意义,也就是所谓的概括思想。 总结句要避免使用“缺乏思想”的句子。当你需要概括行动性思想时,你可以直接总结采取行动后取得的成果。当你需要概括描述性思想时,你要说明这些思想具有的共同点的意义。 三、如何界定问题和结构化分析问题? 界定问题的步骤是: 1、界定问题的框架。你可以按照以下四个步骤来界定问题的框架。第一个步骤是展开问题的基本部分;第二个步骤是确定你的解决方案处于什么阶段,是已经提出来了,还是已经被接受了;第三个步骤是提出适当的疑问;第四个步骤是检查金字塔结构是否回答了疑问。 2、展开问题的各要素。你需要确定4个要素以后才能界定问题,进而找出解决方案。这4个要素分别是切入点、困扰、现状和目标。 3、发掘读者的疑问,也就是为了解决问题必须要做什么。最常见的问题有:不知道如何从现状到目标;知道如何从现状到目标,但不敢肯定是否正确;知道从现状到目标的正确方案,但是不知道具体怎么实施等。 分析问题的步骤是: 1、使用诊断框架。设计诊断框架的方法有三种:呈现有形的结构、寻找因果关系和归类分组。为了找出产生问题的原因,可以使用其中的一种或几种方法建立诊断框架。 2、收集信息资料。开始收集资料,证明导致产生这个问题的就是这些原因或者不是这些原因。只有假设自己找到了产生问题的原因,才能更好地提出解决问题的方案。 3、使用逻辑树。逻辑树就是不断地问“我们能做什么”和“我们应该做什么”,然后将得出的答案也就是解决方案全部写出来。将各种可能方案从逻辑上展开以后,计算相关的收益和评估每种方案的风险,以便确定一套最终的行动方案。

    0
    0
    11.68MB
    2019-04-26
    27
关注 私信
上传资源赚积分or赚钱