`
文章列表
Tengine是淘宝开发的基于nginx的应用服务器,反向代理服务器。它兼容nginx的所有配置,并且在其上增加了很多实用的功能,例如动态模块加载,集成lua语言进行扩展等,在性能方面有了比较大的改进。下面是Tengine独有的部分功能,查看全部等前往官网,地址是http://tengine.taobao.org/。 一、Tengine部分特性 1.nginx -m 查看所有已经加载的模块,static说明已经安装的,shared说明是动态安装的; 2.nginx架构是模块化的,除了主模块,其他模块都需在安装时进行编译安装,也可在安装后进行编译安装; 3.tengine完全兼容ngi ...
    MySQL的索引实现由很多种实现,包括hash索引,B+索引,全文索引等,本文只讨论B+树索引。 为什么使用B+树索引? 1.评价一个索引好坏主要看IO的访问次数,B+树红黑树来说,树高很小(出度很大)即可以有效降低IO的访问次数。B+数的高度h=logd(n),d越大,h越小,查询效率越高。相对B树,B+树d可以很大,因为非叶子节点不存储数据,只存储key,在一个存储页上可以存储更多的key值。在每个页上可以存储更多的key,即d很大。 2.外存按照页进行逻辑划分,页大小固定,当读入外存数据时,会根据局部性原理每次会预读连续的多页数据到内存。B+树的叶子节点是存储是连续和有序 ...

一个简单的php例子

    博客分类:
  • php
    最近工作中要快速开发个小程序,简单的提供http服务,解析参数,并且存到数据库,同事建议不用java,使用php来完成。果然开发十分快速,从一点不懂到开发完成两个小时。 个人感觉php有如下特点: 1.弱类型语言,没有变量类型,数据类型有字符串,整数,浮点数,数组,对象等; 2.php只能开发服务器程序,不能开发桌面程序; 3.php没有程序包的概念; 4.php执行热部署,运维比较方便。   代码如下: <?php  //解析http参数 header("Content-Type: text/html;charset=utf-8"); ...
    使用shell脚本编写程序定时查询数据库,根据数据库结果发送短信和邮件。定时任务使用crontab实现,具体实现如下。 1. crontab 定时执行任务 crontab -e进行编辑,使用方法类似于vi, 例子:0 * * * * bash /home/work/opt/nginx/sbin/nginx_log.sh 2. 完整脚本 #!/bin/bash if [ $# -lt 2 ] then         echo "params error";         exit; fi #创建日志文件 LOG_FILE_NAME=&quo ...
    通过SVN的分支功能,实现同套代码进行测试和上线,有效提高开发自动化和上线质量。     qa在客户端执行部署脚本(xxx.sh tagxxx),部署脚本能够执行中间机上的远程脚本实现从SVN下载指定分支代码,编译,打包,发送部署 ...
1.tail -f filename 将文件最后内容显示出来。适用于查看动态改变内容的文件。 2.netstat -nl|grep 8080 查看某个端口是否被占用。 3.jps 查看所有java进程及进程号。 4.ps aux|grep java 5.top 实时查看进程运行状态的命令。 6.lsof -i:  查看 ...
      Java线程是Java执行的基本单元,单线程程序编写比较简单,但是处理效率不高。随着CPU核心数量的增加和对程序高性能的要求,多线程编程也成为必然的趋势。       Java提供了至少三种实现线程的方式,一种是Runnable,一种是Thread,还有一种是线程池的方式。 1.Runnable方式: Thread t = new Thread(new Runnable(){ public void run(){ //do something... }   }); t.start(); 2.Thread方式: Thread t = new Thread(){ ...
    Java的IO模型分为BIO,NIO和AIO,本文重点介绍BIO,NIO。只从原理角度介绍,比较他们的异同和各自特点,分析linux提供的IO系统调用及Java NIO实现原理。并且介绍一下NIO具体实现netty框架。 1.Linux IO模型和系统调用     Linux系 ...

TCP状态详解(转)

    博客分类:
  • TCP
CLOSED: 表示初始状态。 LISTEN: 表示服务器端的某个SOCKET处于监听状态,可以接受连接。 SYN_SENT:在服务端监听后,客户端SOCKET执行CONNECT连接时,客户端发送SYN报文,此时客户端就进入SYN_SENT状态,等待服务端的确认. SYN_RCVD: 表示服务端接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的AC ...
  *Lock ReentrantLock Condition         ReentrantLock可以实现synchronized关键字的功能,还可以实现停止等待线程执行,定时停止等待线程执行,通过投票获取锁等操作。在高并发条件下,相比Synchorized具有更好的性能表现。ReentrantLock ...
       使用场景:不论什么时候,只要您将编写的变量接下来可能被另一个线程读取,或者您将读取的变量最后是被另一个线程写入的,那么您必须进行同步。Java同步机制大概可以分为三种,synchronized和volatile;ReentrantLock和Condition;和automic和concurrent包下具有原子性操作的类。   1.synchronized和volatile   volatile修饰符,表示变量每次读取和修改时候都从主内存中进行,不会进行产生脏读。volatile修饰基本数据类型,对于涉及到自身的操作并不是原子的,可能出现问题,例如i++,i=i+1;原子 ...
Java垃圾收集器     概述   说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史远远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语 ...
java内存分为堆内存,永久存储区(方法区)内存,栈内存(虚拟机栈,程序计数器,本地方法栈)等。     堆内存分为新生代,老生代,新生代分为eden区,survivor0,survivor1区,堆内存由XX:Xmx,XX:Xms设置。新生代内存由XX:Xmn设置或者XX:NewSize;XX:MaxNewSize设置。     永久存储区用来存储class类,常量等信息,由XX:PermSize或者XX:MaxPermSize设置。     栈内存是每个线程都有一个栈,栈大小是有XX:Xss设置的,相等条件下xss越小,生成的线程数量就越多。     GC分为yong gc 和full gc, ...
一、部署1.从https://github.com/alibaba/RocketMQ下载安装包。2.tar -xf ***.tar 解压tar包。安装git yum install git3.echo $JAVA_HOME 确认安装java环境变量。4.export JAVA_HOME='*****' 设置环境变量。5.安装nameserver,打开安装路径的bin目录,执行 nohup mqnamesrv & 命令。6.设置环境nameserver环境变量,export NAMESRV_ADDR=192.168.0.1:9876。7.设置RocketMQ的的安装位置环境变量ROCKA ...
Global site tag (gtag.js) - Google Analytics