decaywood's Blog


只要有足够的意义和理由,突破已有的原则就可以认为是一种创新
  • 博客已累计录入 48 篇文章
  • 导航升级,全新的浏览体验
  • 极大的优化了动画特效性能
  • github错误校正可以使用了
  • 夜间模式已经可以使用,点击右上角切换
  • 点击侧边栏标签分类阅读文章
  • 博客兼容移动设备,可使用手机和平板阅读

Maven 资源文件的相关配置

Resources Configurations of Maven

Maven 资源文件的相关配置 构建 Maven 项目的时候,如果没有进行特殊的配置,Maven 会按照标准的目录结构查找和处理各种类型文件。 src/main/java和src/test/java 这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是...

《数据库索引设计与优化》 -- 读书笔记

DB Index Design and Optimization -- Reading Notes

DECLARE CURSOR41 CURSOR FOR SELECT CNO, FNAME FROM CUST WHERE LNAME = :LNAME AND CITY = :CITY ORDER BY FNAME 星级是如何给定的 如果与一个查询相关的索引行是相邻的,或者相距足够靠近的话,那这个索引就可以被标记上...

Linux 内存映射(mmap)

Linux Memory Mapping

概述 mmap()系统调用在调用进程的虚拟地址空间中创建一个新内存映射,映射分为两种: 文件映射:文件映射(内存映射文件) 将一个文件的一部分直接映射到调用进程的虚拟内存中。一旦一个文件被映射之后就可以通过在相应的内存区域中操作字节来访问文件内容了。映射的分页会在需要的时候从文件中自动加载。这种映射也被称为,基于文件的映射,或内存映射文件 匿名映射:一个匿名映射没有对应的文件...

如何理解 MySQL 的执行计划

How to Understand the Execution Plan of MySQL

MySQL的逻辑体系结构 最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具都有类似的架构。比如连接处理、授权认证、安全等等。 第二层架构是MySQL比较有意思的部分。大多数MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有内置函数(例如:日期、时间、数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。 第...

MySQL 索引

The Index of MySQL

索引(在MySQL中也叫做键)是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能,除此之外,本章还将讨论索引其他一些方面的有用的属性。索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但当数据量逐渐增大时,性能则会急剧下降。 不过,索引却经常被忽略,有时候甚至被误解,所以在实际案例...

Linux 虚拟内存管理

Linux Virtual Memory Management

Linux,像多数现代内核一样,采用了虚拟内存管理技术。该技术利用了大多数程序的一个典型特征,即访问局部性(locality of reference),以高效使用CPU和RAM(物理内存)资源。大多数程序都展现了两种类型的局部性。 空间局部性(Spatial locality)是指程序倾向于访问在最近访问过的内存地址附近的内存(由于指令是顺序执行的,且有时会按顺序处理数据结构)。 ...

Epoll 对IO多路复用所做的优化总结

The optimization of IO multiplexing by Epoll

先看一下 Linux C 库中的 epoll API int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event *events,int maxevents, in...

Linux 中的调度策略

The Scheduling Policy in Linux

##linux内核的三种主要调度策略: SCHED_OTHER 分时调度策略 SCHED_FIFO 实时调度策略,先到先服务 SCHED_RR 实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先级决定调度权值。分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优...

JVM中的逃逸分析

Escape analysis in JVM

逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术。基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他地方中,称为方法逃逸。例如: public static StringBuffer craeteStringBuffer(String s1, String s2) { String...

Tornado 剖析

The Analysis of Tornado

Tornado 是 FaceBook 开源的一款非阻塞的 web 服务器,具有极强的可拓展性,能够极大程度的利用计算机的CPU资源。与其他主流 Web 服务器框架不同的是,Tornado是非阻塞的。得益于框架底层基于epoll(linux)或者kqueue(macOS、freeBSD)的应用,Tornado 每秒能够同时处理数千个长连接,这也是 Tornado 的一个显著的特点。在实时消息推...

Tornado 的服务器实现

The Implementation of Tornado Server

Tornado 的服务器实现 Tornado 的 HTTPServer 是一种单线程的非阻塞服务器实现,继承自 TCPServer 基于 Tornado 的事件循环实现 IOLoop,HTTPServer和TCPServer的类结构: class TCPServer(object): def __init__(self, io_loop=None, ssl_options=Non...

Java 开源实用类库排名

The Rank of Java OpenSource Lib

在Java中,有很多比较实用的类库,他们通常都定义了一系列具有常见功能的方法。本文总结了最常用的Java中的实用类以及他们的最常用的方法。无论是类和类中方法都是按照流行程度来排序的。 本文中列出来的类及方法都是经过大量实践的常用类库及方法,我们可以直接拿过来用。当然,这些方法实现的功能我们自己都能实现,但是既然已经有很成熟的方法可以供我们使用了,那么就无需自己定义了。很多类和方法通过他们的...

大型网站架构演化历程

The Changing of Large-scale Websites Architecture

大型网站的挑战主要来自庞大的用户,高并发的访问和海量数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得棘手。大型网站架构主要就是解决这类问题。 本文内容大部分来自《大型网站技术架构》,这本书很值得一看,强烈推荐。 大型网站系统的特点 高并发,大流量 需要面对高并发用户,大流量访问。Google 日均 PV 35 亿,日 IP 访问数 3 亿;腾讯 QQ ...

Java异常进阶

Java Exception Advanced

在使用Java编写应用的时候,我们常常需要通过第三方类库来帮助我们完成所需要的功能。有时候这些类库所提供的很多API都通过throws声明了它们所可能抛出的异常。但是在查看这些API的文档时,我们却没有办法找到有关这些异常的详尽解释。在这种情况下,我们不能简单地忽略这些由throws所声明的异常: public void shouldNotThrowCheckedException() {...

Vim 简明教程

Vim tutorial

从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截然不同的方式:命令目录(鼠标或者键盘驱动),组合键(通常通过control键(CTRL)和alt键(ALT)组成)或者鼠标输入。Vim和vi一样,仅仅通过键盘来在这些模式之中切换。这就使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的...

如何优雅的处理异常

How to handle with the Java Exception

Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮、易于调试。异常之所以是一种强大的调试手段,在于其回答了以下三个问题: 什么出了错? 在哪出的错? 为什么出错? 在有效使用异常的情况下,异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出,如果你的异常没有回答以上全部问题,那么可能你没有很好地使...

Javac编译与JIT编译2「转」

Javac & JIT compiling 2

JIT的起源 上一篇文章Javac编译与JIT编译简略讲述了Java compiler(javac)。可以看出javac和C的compiler不一样, 并不是直接将 Java 的源代码 编译成成处理器的指令。 相反地,它产生的是统一规格、与机器 binary 格式无关的 bytecode。 在执行期,JVM 会逐条解释执行 bytecode, 这是为什么 Java 在跨平台上会这么成功的主...

关于Java异常时return语句的执行顺序

About The Order of Execution of Return When Exceptions Throwed

finally代码块的语句在return之前一定会得到执行 如果try块中有return语句,finally代码块没有return语句,那么try块中的return语句在返回之前会先将要返回的值保存,之后执行finally代码块,最后将保存的返回值返回,finally代码块虽然对返回值进行修改也不影响返回值,因为要返回的值在执行finally代码块之前已经...

Javac编译与JIT编译「转」

Javac & JIT compiling

编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现。很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScript),而下面的那条分支就是传统编译原理中从源代码到目标机器代码的生成过程。 如今,基于物理机、虚拟机...

函数式编程之高阶函数

higher-order function

高阶函数,又称算子(运算符)或泛函。在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数: 以一个或者多个函数作为参数 以一个函数作为返回结果 在程序语言中,高阶函数是一等公民(与普通变量一样,可存储,可传递)。以JavaScript语言为例,高阶函数的典型当属Array中的map、reduce以及filter函数了,所有这些函数遵循高阶函数的定义。然而,简单地展示几个...