这篇文章先从阻塞与非阻塞,同步与异步之间的定义和关系说起,然后探讨liunx下的5种IO模型,支持非阻塞IO的select/poll/epoll系统调用的基本原理,然后通过Java代码搭建bio方式的服务端,改进服务器在并发场景下bio多线程和线程池的实现方式,最后介绍Java nio来实现一个服务器和多个客户端对话。
MySQL-SQL之索引
索引具有加快数据库服务器查询数据的速度的作用,其作用目的是为将经常作用于查询标志(比如where语句的查询条件)的列新建一个数据结构,这个数据结构的每一个元素通常包含两个信息:索引列的值和索引值所执行的数据行的地址。
MySQL-SQL之游标,触发器和事务
游标的出现使得对一个查询结果集的每一行结果能够更细粒度的操作,现在MySQL只支持在存储过程中定义存储过程。一个游标的使用过程是这样的:
- 使用
<declare 游标名 cursor for 查询语句>
定义一个游标 - 使用
<open 游标名>
打开游标准备使用 - 使用fetch语句获取结果中的一行结果到变量
<fetch 游标名 into 变量名>
- 使用
<close 游标名>
关闭游标
MySQL-SQL之视图、存储过程
例如一个用户表customers(主键为cust_id),一个用户可以有多个订单,订单表为orders(主键为order_num,外键为cust_id),一个订单有多个订单项,订单项表是orderitems(主键order_num,order_item,外键order_num,prod_id),每个订单项对应一个产品,产品表products(主键prod_id,外键vend_id),每个产品对应一个供货商(vendors表,主键vend_id),和多个评价(productnotes表,主键note_id,外键prod_id),也就是如下图所示。
MySQL-SQL之表的基本操作
Java动态代理解析
代理模式是一个高频使用的设计模式,其原因在于我们可以在不改变被代理类的情况下,提供一个和被代理类一样的代理类,并负责预处理被代理类的方法,过滤或执行被代理类的方法以及后续操作。这里所说的一样是指代理类对象可以替代被代理类对象,实现这种效果有两种,一种是代理类和被代理类实现同一个接口,另一种是代理类直接继承自被代理类,这两种方式在接下来的jdk动态代理和cglib中均有体现。在深入了解动态代理之前,我们先了解一下Java的反射机制和静态代理,其中反射机制是动态代理实现的基础。
自顶向下的Java虚拟机
最近看了《深入理解Java虚拟机》这本书,感觉书中的章节写的很零散,如果能够通过一个完整的例子将所有的知识点串联起来,将整个故事讲清楚,无疑对Java虚拟机运作原理的学习有更好的帮助,本文之所以称为自上而下的Java虚拟机是受《计算机网络:自顶向下方法》启发,想要从上层开始讲起,然后逐步了解这些我们习以为常背后Java虚拟机所做的工作,以期这篇总结能够让Java虚拟机运作的脉络更加清晰。