计算机科学精彩帖子收集

linux源码

LXR 源自“the Linux Cross Referencer”,中间的“X”形象地代表了“Cross”。与 Source Navigator 类似,它也是分析阅读源代码的好工具。不同的是,它将源代码借助浏览器展示出来,文件间的跳转过程成了我熟悉的点击超链接动作。

http://lxr.linux.no/   LXR安装过程简介

linux手册

http://linux.die.net/man/

Linux每周新闻

http://lwn.net/

linux.org 可以每天读一读,顺便提高英文水平

http://www.linux.org/forums/

MIT的64位Centos6.5下载镜像

http://mirrors.mit.edu/centos/6.5/isos/x86_64/

xinu

http://www.xinu.cs.purdue.edu/

Nginx源码

http://lxr.evanmiller.org/http/source/

src/lib/libc/源码(如果只是看libc而不局限与Linux,可以到这里看)

http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/

GUN的libc源码下载

http://mirrors.ustc.edu.cn/gnu/libc/

www.sf.net  SF的C代码库(可以按编程语言等筛选)

http://sourceforge.net/directory/developmentstatus:production/language:c/os:linux/freshness:recently-updated/?q=C

xshell中文乱码

[文件]–>[打开]–>在打开的session中选择连接的那个,点击[属性] -> [终端], 编码选择为:Unicode(UTF-8),然后重新连接服务器即可。也可以在Xshell的工具栏里面点击“编码 ”按钮,选择Unicode(UTF-8)编码即可。

Makefile:2: *** 遗漏分隔符 。停止


   在 cc 或者gcc之前一定有一个table键。

罗列linux所有安装包:#pkg-config --list-all


代码阅读--Source Insight

http://www.sourceinsight.com/index.html

SI3US-205035-36448

在sourceInSight中看代码时,中文注释显示有问题,因为它不支持utf8编码
方法是:用记事本打开含有中文的文件,然后另存为ANSI编码

代码来源--acme

http://www.acme.com/software/

正则:

http://www.regexper.com/

http://www.debuggex.com/

例如:html链接的正则

<a\shref=\"(https?://[^"]+)\"[^>]*>([^<]+)<\/a>

==========================

汇编语言

Linux 汇编语言开发指南

X86汇编语言学习手记(1)

汇编代码开始的andl $-16,%esp

LINUX汇编(汇编语言程序设计读书笔记)

反推函数调用栈

函数调用栈详解(good)

链接与加载(上) — 静态链接

链接与加载(下) — 动态链接

常量、指针和变量的实现机制

30天自制操作系统笔记 作者很爱学习Linux/C

==========================

计算机组成

处理器CPU

taskset: 让进程运行在指定的CPU

上海交通大学师生制作的一个关于cache映射功能、命中率计算的教学演示程序 [很好,可以点击看目录更精彩]

7个示例科普CPU Cache

计算机博物馆

============================

Linux

#uname -a 内核信息

------------------------

#man  -k   函数        
#man  返回的数字  函数
#man -k file | grep umask

---------------------------

抓指定端口

#tcpdump -i eth0 port 80

---------------------------

#netstat -a 查看开启了哪些端口,常用netstat -an
#netstat -n 查看端口的网络连接情况,常用netstat -an
#netstat -v 查看正在进行的工作
#netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况)
#netstat -s 查看正在使用的所有协议使用情况

------------------------------

lsof的功能很多,特別提醒大家, -c,-g,-p,-u,这四个参数最有用。更详细的资料请参看:man lsof

# lsof abc.txt 显示开启文件abc.txt的进程

#lsof -p pid   查看侦听端口,lsof 常见的用法是查找应用程序打开的文件的名称和数目
# lsof -i :80 知道80端口现在运行什么程序
# lsof -c nsd 显示nsd进程现在打开的文件
# lsof -g gid 显示归属gid的进程情况
# lsof +d /usr/local/ 显示/usr/local目录下被进程开启的文件
# lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
# lsof -d 4 显示使用fd为4的进程
# lsof -i [i] 用以显示符合条件的进程情况

#lsof -i @192.168.1.10    显示了搜索与 192.168.1.10 之间的所有连接。

--------------------------------

#cat /proc/interrupts 显示中断信息

#cat /proc/2452/fd/7

#cat /proc/net/sockstat   网络套接字使用统计

#cat /proc/sys/fs/file-max   所有运行的程序同时能打开的文件总数

------------------------------------

将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩

#tar -zxvf /tmp/etc.tar.gz   解压

---------------------------------------

#vmstat 2  第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。主要通过收集VMSTAT的信息来展现服务器状况。

-----------------------内核----------------------------

内核之旅

http://linuxtoy.org/    [哈工大linux站]

Linux 系统内核的调试 [IBM文档库]

IBM Linux文档库

一种解读linux内核源码的入门方法

深入理解SetUID

Linux下缓冲区溢出攻击的原理及对策 [IBM文档库]

使您的软件运行起来: 防止缓冲区溢出 [IBM文档库]

struct rlimit介绍

防止内存泄露 Linux下用Valgrind做检查

内存调试 - MEMWATCH

Linux内核怎样获取进程任务结构

《Linux 核心》原著: David A Rusling翻译: Banyan & fifa

《Linux 核心》原著: David A Rusling翻译: 胡宁宁 毕昕 仲盛 赵振平周笑波 李群 陈怀临

Linux Used内存到底哪里去了?

从free到page cache

Linux内核引导参数简介

Linux (0.11版) 重新组装

Linux 内核源代码各个版本和一些工具

也谈Linux Kernel Hacking – 内核配置、编译与安装

如何加入Linux内核开发社区(1)

Linux Crontab 定时任务 命令详解

ubunttu下配置内核linux-3.6.7

使用 /proc 文件系统来访问 Linux 内核的内容  [IBM文档库]

使用异步 I/O 大大提高应用程序的性能

linux内核PID管理 [很好]

linux内核hlist分析

Linux内核spin_lock与spin_lock_irq分析

如何调试Linux内核

printk内核调试

linux上使用strace查看C语言级别的php源码【查看最终系统调用】

Linux下高并发socket最大连接数所受的各种限制  [很好]

完全用Linux工作

关于patch的总结,希望对不太了解的朋友有用

摘录:Linux打Patch的方法    [很好]

Linux性能监控(1)  [总结全面]    linux系统性能监控常用命令  [全面]

系统调用的实现原理  [很好]

原子操作的内核源代码剖析

--------------------------内存管理-------------------------------

内存映射文件原理探索 [很好]

Linux内存管理大图(第三稿) 

简析堆内存

Linux slab 分配器剖析 [IBM文档库]

Linux Slub分配器(一)--概述 [很好]

Linux伙伴系统(一)--伙伴系统的概述 [很好]

Linux物理内存概述

[CNT]关于自己的一个小小的slab内存分配器  [很好]

[Pthread] Linux中的内存管理(一)--Paging

[Pthread] Linux中的内存管理(二)--Layout

[Pthread] Linux中的内存管理(三)--Stack

[Pthread] Linux中的内存管理(四)--Heap(brk()和mmap())   [很好]

分段和分页  [形象]

第十讲分段与分页 (图文并茂形象)

广东工大操作系统课件  [很好]

分页存储管理  [很好]

分段存储管理  [很好]

内存管理内幕  [IBM文档库]

内存分配原理  [转帖存档]

【百度分享】频繁分配释放内存导致的性能问题的分析   [写的非常好]

内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)

malloc()_分配内存,会用到brk(用于小内存申请<=128kb,在堆上)或mmap2(用于大内存申请,一般是堆和栈中间)系统调用

内存分配的原理__Linux虚拟内存管理(glibc)_Linux的虚拟内存管理有几个关键概念_Linux 虚拟地址空间如何分布_malloc和free是如何分配和释放内存_如何查看堆内内存的碎片情况_既然堆内内存brk和sbrk不能直接释放,为什么不全部使用 mmap 来分配,munmap直接释放呢

频繁分配释放内存导致的性能问题的分析___1、缺页中断的执行过程;2、内存分配释放的原理__brk,mmap,为什么会产生内存碎片等原因

mmap内存占用问题

Linux系统调用-- mmap/munmap函数详解

Linux中brk(),sbrk(),mmap(),malloc(),calloc()的异同

-----------------------进程----------------------------

linux进程创建过程与原理

Linux启动新进程的几种方法及比较  linux编程-守护进程编写

使用ptrace跟踪进程   0号进程->1号内核进程->1号内核线程->1号用户进程(init进程)->getty进程->shell进程

linux进程创建:fork、vfork和clone联系与区别

在Linux下的进程资源的限制(struct rlimit)详解

Linux下如何知道文件被那个进程写

Linux进程地址空间

Linux系统调用--getrlimit()与setrlimit()函数详解

窥探 kernel --- 浅析do_exit [有图很好]

------------------进程间通信----------------------

Linux环境进程间通信(二): 信号(上)

Linux环境进程间通信(二): 信号(下)

Linux环境进程间通信(四)信号灯

Linux环境进程间通信(三)消息队列

Linux环境进程间通信(一)管道及有名管道

Linux环境进程间通信(五): 共享内存(上)

Linux环境进程间通信(五): 共享内存(下)

Linux 环境进程间通信(六)套接口

Linux 实时信号程序中锁的探索

UNIX 共享内存应用中的问题及解决方法

对话 UNIX: 通过共享内存进行进程间通信

在 Linux 中使用共享对象 让共享内存为您服务,而不是为您制造麻烦

Posix线程编程指南(1)

Posix线程编程指南(2)

Posix线程编程指南(3)

Posix线程编程指南(4)

Posix线程编程指南(5)

Linux 上实现双向进程间通信管道

POSIX 线程详解 一种支持内存共享的简捷工具

POSIX 线程详解,第 2部分 称作互斥对象的小玩意

POSIX 线程详解,第 3 部分 使用条件变量提高效率

IPC通信陷阱之六万五千分之一

-------------------------线程-------------------------------

可重入、线程安全、异步信号安全小结

可重入函数与不可重入函数

abort()函数不是多线程安全的,但它是异步信号安全的

POSIX 线程详解

通用线程:POSIX 线程详解,第 2部分   [很好]

spinlock自旋锁的剖析与改进

spin_lock浅析

pthread_cond_signal和pthread_cond_wait简介

浅析pthread_cond_wait

Linux线程-互斥锁pthread_mutex_t

Linux线程-终止

Linux线程-创建

Linux线程-pthread_join

Linux线程-pthread_kill

生产者/消费者

Linux下C语言的多线程编程学习

Linux下的多线程编程

-----------------------信号----------------------------

Linux进程间通信——使用信号

linux后端服务程序之信号处理

等待队列实现代码浅析

linux中信号量的分析 好

Linux Signal实现代码分析

-----------------------时间----------------------------

Linux 下定时器的实现方式分析

浅析 Linux 中的时间编程和实现原理,第 1 部分: Linux 应用层的时间编程

浅析 Linux 中的时间编程和实现原理,第 2 部分: 硬件和 GLibC 库的细节

浅析 Linux 中的时间编程和实现原理,第 3 部分: Linux 内核的工作

浅析 Linux 中的时间编程和实现原理,第 4 部分: Linux 内核的工作

Linux的timerfd分析

Linux Posix Timer实现代码分析

-----------------------文件和锁----------------------------

硬盘分区备忘(主分区,扩展分区和逻辑分区)以及Linux硬盘分区工具parted 介绍

Linux文件IO__文件系统架构层次,IO调用链,一致性和安全性,性能问题,fclose,fflush,fsync的区别 [很好很好]

O_DIRECT初认识(直接写入磁盘)

linux open 函数O_DIRECT标志位使用说明  open的O_DIRECT选项 【注意事项】

Linux 中直接 I/O 机制的介绍[图文并茂]

学习 Linux,101: 硬盘布局

Linux进程同步之记录锁(fcntl) 

浅谈无缓存I/O操作和标准I/O文件操作区别 [极好]

简析文件操作【图文并茂】

文件操作的原子性

linux文件操作(一)(遇见0425的ChinaUnix博客) 

读写锁与记录上锁(遇见0425的ChinaUnix博客)  

互斥锁与条件变量(遇见0425的ChinaUnix博客)  

Linux文件系统十问,你知道吗?  

建议性锁和强制性锁

Linux 的 splice 和sendfile系统调用

LINUX UMASK详解  

Linux下的umask函数

dup and dup2的剖析

linux stat函数讲解

Linux 的 splice 和sendfile系统调用

逻辑卷管理

Linux设备文件简介

Write的奥秘

VirtualBox怎么共享文件夹

mmap详解 [很好]

linux mmap 内存映射mmap() vs read()/write()/lseek()   [很好]

Linux 文件系统剖析   [IBM文档库]

linux C之access函数

S_ISDIR()函数

强制把系统缓存写入文件sync和fsync函数,, fflush和fsync的联系和区别    (c库缓冲-----fflush---------〉内核缓冲--------fsync-----〉磁盘)

fflush和fsync的一些总结

Iowait的成因、对系统影响及对策  [很好很深]

linux中互斥锁的分析

Linux 2.6内核中新的锁机制--RCU  [IBM文档库]

AIO 简介

日志模块的C语言实现 [很好]

fstat、stat和lstat 区别

spinlock剖析与改进

Pthreads mutex vs Pthreads spinlock

并发编程系列之一:锁的意义

-----------------------输入输出----------------------------

对STDOUT_FILENO和STDIN_FILENO的理解

-----------------------linux图形化----------------------

什么是x-window

----------------------小例子很好-------

Linux 常用C函数(用户组篇1)

Linux 常用C函数(用户组篇2)

Linux 常用C函数(文件内容操作篇1)

Linux 常用C函数(文件内容操作篇2)

Linux 常用C函数(文件操作篇)

Linux 常用C函数(内存控制篇)

Linux 常用C函数(内存及字符串操作篇1)

Linux 常用C函数(内存及字符串操作篇2)

Linux 常用C函数(字符转换篇)

Linux 常用C函数(终端控制篇)

Linux 常用C函数(环境变量篇)

Linux 常用C函数(接口处理篇1)

Linux 常用C函数(接口处理篇2)

Linux 常用C函数(时间日期篇)

Linux 常用C函数(时间日期篇2)

Linux 常用C函数(进程操作篇1)

Linux 常用C函数(进程操作篇2)

Linux 常用C函数(进程操作篇3)

-----------------------中断-------------------

中断和异常

-----------------------linux数据结构----------------------------

Kernel阅读手记之slab 

kernel阅读手记之内存池 

kernel阅读手记之vmalloc 

kernel阅读手记之kmalloc     

kernel阅读手记之页面分配和释放            

linux中的链表  

深入分析 Linux 内核链表  

struct stat结构体简介  

Linux slab 分配器剖析  

Linux 内存管理 -- 高端内存的映射方式

-----------------------链接与加载 动态库 静态库----------------------------

从程序员角度看ELF-译文

从程序员角度看ELF+objdump  

Linux 动态库剖析  

静态库  

Linux进程地址空间的一步步探究  

Linux下C程序进程地址空间布局  

Linux下静态库和共享库的制作方法  

Linux动态库(.so)搜索路径

LINUX动态链接库高级应用

LINUX系统中动态链接库的创建与使用

Linux下静态库_库的基本概念 [很好]

在Linux使用GCC编译C语言共享库  很好

-----------------------GCC和编译----------------------------

How to Build a GCC Cross-Compiler[技术含量很高]

GCC "-fomit-frame-pointer"编译选项的含义

Introduction to PIC - (Position Independent Code)

编译GNU/Linux共享库, 为什么要用PIC编译?

GCC编译优化指南

Glibc Binutils GCC 安装指南

深入理解软件包的配置、编译与安装

gcc中-pthread和-lpthread的区别

GCC 中的编译器堆栈保护技术

GCC编译的背后( 预处理和编译 汇编和链接 )

----------------网络编程----------------------

socket阻塞与非阻塞,同步与异步、I/O模型 (很好)

socket编程原理   

大端模式与小端模式、网络字节顺序与主机字节顺序 (经典)

(摘录)sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

[gcc编程] socket编程——sockaddr_in结构体操作

套接字地址结构

accept非阻塞方式

socket-accept

Linux/Unix网络编程指南(Socket 编程)

实现自己的http server 

自己动手写 HTTP Server

六款小巧的HTTP Server[C语言]

Linux网络协议栈(一)——Socket入门(1)

Linux网络协议栈(一)——Socket入门(2)

提高 Linux 上 socket 性能

高性能网络编程,第 1 部分: 最大程度地利用您的网络资源

高性能网络编程,第 2 部分: 加快客户机和服务器的处理速度

-------------------linux TCP/IP协议栈------------------------------------

tcp/ip协议栈研究-tcp数据包接收(1)

tcp_ip协议栈源码分析-ip数据包接收

linux tcp/ip协议栈研究--ip包的转发和本地传递

初探Linux网络协议栈

linux已经不存在惊群现象

了解 TCP 系统调用序列  [IBM文档库]

高性能网络编程(一)----accept建立连接

高性能网络编程2----TCP消息的发送

高性能网络编程3----TCP消息的接收

-----------------------------------------------------------------

LVS

LVS+Keepalived
lvs 和 keepalived的有什么区别
lvs+keepalived和haproxy+heartbeat区别

------------------ljianhui的专栏-------------------------

Linux 之 我最常用的20条命令

Linux数据管理——文件锁定

Linux 文件操作——系统调用和标准I/O库

Linux进程间通信——使用消息队列

Linux进程间通信——使用流套接字

------------------------TCP/IP-------------------------

HTTP详解(1)-工作原理

HTTP详解(2)-请求、响应、缓存

Tcpcopy简介与实战

网易wangbin(TCPcopy)

TCP/IP 协议分析(整理+转帖)

TCP_NODELAY详解

Linux内核: 修改TCP/IP调优参数

浅谈TCP/IP网络编程中socket的行为

tcp协议丢包的问题
TCP 仍会掉包

浅谈TCP优化 [很好]

socket编程基础3(和TCP/IP的关系)

socket编程基础2(socket API函数介绍)

----------------select和poll----------------------

select系统调用与FD_SET,FD_ISSET,FD_ZERO

linux socket的select函数例子

select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET

FD_SET,FD_ISSET

FD_ISSET read 后程序被阻塞

Linux 内核的排队自旋锁(FIFO Ticket Spinlock
Ticket spinlocks

linux-3.4.2之poll机制分析

按键驱动程序之poll机制实现

Poll机制分析(转韦东山)

--------------------------------------

epoll

Linux2.6内核epoll介绍(0.1版本)  [很好]

使用多线程还是用IO复用select/epoll? epoll 或者 kqueue 的原理是什么?

linux 网络编程【五】 非阻塞通信epoll

epoll使用详解(精髓)

如何使用 epoll? 一个 C 语言实例

网络编程--IO模型示例

socket阻塞与非阻塞,同步与异步、I/O模型

我读过的最好的epoll讲解

Linux Epoll介绍和程序实例

linux epoll用法

学习写epoll的示例代码

file-max与ulimit的关系与差别
/proc/sys/fs/file-max

epoll_create, epoll_ctl和epoll_wait

使用epoll进行高性能网络编程[翻译]

高并发的epoll+线程池,业务在线程池内

多线程epoll

epoll和select I/O模型研究

linux下的常用I/O模型

多进程服务器中,epoll的创建应该在创建子进程之后

epoll+多进程实现简单的服务器端

Linux网络编程一步一步学-epoll同时处理海量连接的代码

EPOLL+FIFO多进程通信简单示例

epoll精髓

一个epoll/aio/eventfd结合使用的简单例子

linux下epoll模型accept并发问题

linux AIO (异步IO) 那点事儿 [转]

----------tcpdump-------------------

基于tcpdump实例讲解TCP/IP协议

Linux tcpdump命令详解

TCP三次握手及四次挥手详细图解

tcpdump抓包分析详解(转载)

Tcpcopy简介与实战

---------------------------------------------------

监控

Linux下Nagios的安装与配置

使用Cacti监控你的网络(二)- Cacti的安装

RSync实现文件备份同步

-----

zabbix

http://www.zabbix.com/

CentOS上安装Zabbix

企业应用监控利器-ZABBIX

运维生存时间 【安装使用PDF】

==========================

算法和数据结构

一致性哈希算法及其在分布式系统中的应用

一致性哈希PHP实现flexihash版 [很好]

海量数据处理算法—Bit-Map

数据结构多媒体演示

使用SquirrelMQ打造一个千万级数据更新量的应用

B树的实现

由浅入深探究mysql索引结构原理、性能分析与优化

How browsers work--Behind the scenes of modern web browsers (前端必读)

跨越千年的RSA算法

伸展树的点点滴滴

动态规划那些事

线性时间排序算法

算法系列---回溯算法

扔鸡蛋问题详解(Egg Dropping Puzzle)

MySQL索引背后的数据结构及算法原理

跳跃表(数据结构)

SkipList跳表基本原理

跳表(Skip List)的介绍以及查找插入删除等操作

Skip List(跳跃表)原理详解与实现

SkipList 跳表

Win32 环境下的堆栈

海量存储系列之七

关于位图索引

位图索引(Bitmap Index)——索引共用 [很好]

堆的相关操作-最大堆,最小堆,堆排序,优先队列等

Oracle编程高手箴言:位图索引(Bitmap Index)的故事

教你如何迅速秒杀掉:99%的海量数据处理面试题[很好]

字符串相关算法问题 [很好]

C语言单链表实现19个功能完全详解[还可以]

Unique索引优化实践

位运算符及其应用

海量数据处理 算法总结

海量数据处理算法—Bit-Map

海量数据处理算法—Bloom Filter

Trie树:应用于统计和排序

白话经典算法系列之六 快速排序 快速搞定

递归与尾递归总结

=============================

C语言


编写你的第一个垃圾收集器

ldd命令原理与使用

FastCGI开发者套件

C调用C++静态库

C和C++之间库的互相调用

C如何调用C++的库

为什么不常见include .c文件 [如果是include .c文件 在make文件中不能包含被include文件了否则编译不过去]

C/C++数组名与指针区别深入探索  [很好]

void指针  [总结的很到位]

结构体 数组名与指针区别 [很好]

《Understanding and Using C Pointers》要点先睹为快 [很好]

断言(C++大师Andrei Alexandrescu的文章)

如何定义全局变量

《C解毒》征询意见帖

C语言头文件的使用 [很好]

浅谈c语言中的字符串

50道编程题之字符串的事

C语言的变量的内存分配

typedef 心得

typedef用法小结[很好]

typedef的四个用途和两大陷阱[很好]

函数类型和函数指针类型

恼人的函数指针(一)

const限定修饰符用法总结(常量,指针,迭代器,函数参数,成员函数)

Linux C 函数手册

开源C代码

缓冲区溢出深入理解

shellcode之一:栈溢出 (很好)

shellcode之二:简述漏洞提权

初探编译器static、const之实现原理

Permanent Link to 跨越千年的RSA算法

C语言再学习之 setjmp与longjmp

日志模块的C语言实现  [还可以]

如何实现一个malloc [张洋 很全面]

指针传递内存深入探讨(一)

堆:快乐和痛苦

谁动了我的cpu——oprofile使用札记

使用 google-perftools 剖析程序性能瓶颈

const常量、指向常量的指针和常量指针

C 语言中的指针和内存泄漏

C语言字符串库函数的实现 [很好]

卓越的教练是如何训练高手的?

Linux下程序设计____命令行参数的获取argc,argv的解析(getopt的使用)

C语言函数内部改变指针本身  [很好]   改变指针内容只能用指针的指针

C语言中的作用域和生存周期   for循环定义的局部变量在循环结束后就没了

c语言中常常用到的宏

老罗的缤纷天地

C/C++ Volatile关键词深度剖析

--------------------libcurl-----------------------------

http://curl.haxx.se/libcurl/

libcurl使用心得  (不错)

libcurl应用:如何把下载内容写入内存

libcurl教程(不错)

libcurl教程(不错)

linux c libcurl的简单使用

----------------gcc----------------------------

GCC 中的编译器堆栈保护技术

AT&T的malloc实现--malloc的基础和本质 (很好)

glibc的malloc--更多的改进

malloc的可重入性和线程安全性

关于Linux平台malloc的写时拷贝(延迟分配)

----------------内存对齐----------------------

内存对齐 [很好]

内存对齐原理(讨论的很好)

cache浅析

关于cache line

如何高效的访问内存   [讲内存对齐很透彻]

---------------内存池slab分配器-----------------------------------

基于C语言的内存池的设计与实现  [讲mempool内存池实现]

一个仿照Nginx的内存池

内存池的实现(二)

内存池的实现(一)

一个简单的内存池的实现

内存池设计与实现

C++ 应用程序性能优化,第 6 章:内存池

dlmalloc解析连载完整word文档

http://blog.csdn.net/lenky0401

lenky0401个人博客 

http://lenky.info/

内存池技术畅想

漫步Facebook开源C++库folly(1):string类的设计

动态内存分配(malloc/free)简单实现--隐式空闲链表

基于C语言的内存池的设计与实现  (有图很好)

Glib中slab内存管理算法实现(一)【转】  很好

Glib中slab内存管理算法实现(二)【转】

Glib中slab内存管理算法实现(三)【转】

glib的slab算法实现学习

-----------------Tcmaloc和jemalloc--------------------------------

TCMalloc与Malloc对比

TCMalloc:线程缓存的Malloc

优化的内存访问TCMalloc

tcmalloc官方说明汉化 [无暇]

2012年tcmalloc学习笔记之一 [很好]

Tcmalloc源码简单分析(1)

让Redis使用TCMalloc,实现高性能NOSql服务器

jemalloc源码解读(一)内存页的地址

jemalloc源码解读(四)长度对齐算法

jemalloc源码解读(五)内存布局

更好的内存管理-jemalloc

==================================

C++

C++ Primer 学习笔记 [很全]

==================================

lua

【转贴】通过例子学习Lua

==================================

Nginx

Nginx官网第三方模块  

Emiller's Guide To Nginx Module Development

深入理解Nginx:模块开发与架构解析(陶辉)

轻量级HTTP服务器Nginx(Nginx性能优化技巧)

使用Google PerfTools 优化Nginx

Nginx 内存池(pool)分析   [图画的非常好]

nginx源码学习----内存池 [很好]

nginx(engine x) 源代码分析  徐景(rainx), 王晓哲(chaoslawful) [很好]

ncx_mempool 轻量级内存池 [很好]

github: ncx_mempool [很好]

ncx_mempool源码分析[很好]

nginx slab内存管理   [很好]

红黑树与小根堆性能对比(java)

Emiller的Nginx模块开发指南中文版

--------------------------Nginx开发从入门到精通-----------------------------------

初探nginx架构

--------------------------阿里集团数据平台-------------------------------------------

Nginx的master和worker进程间的通信

Nginx源码分析-内存池 

Nginx进程管理之master进程  

Nginx进程管理之worker进程 

Nginx源码分析-Epoll模块  

Nginx源码分析-事件循环  

Nginx的connections数组  

Nginx事件驱动的初始化  

--------------------------张洋(Nginx模块开发入门)---------------------------------

Nginx模块开发入门

--------------------------淘雕梁---------------------------------------------------------

nginx中cache的设计和实现(一)  nginx对静态文件cache的处理 Nginx配置文件解析详解  nginx的upstream分享  nginx对keepalive和pipeline请求处理分析

nginx中request buf的设计和实现  nginx的启动流程分析(二)  nginx的启动流程分析(一) nginx中if命令的设计和实现  nginx中http request处理的流程

nginx中slab分配器的实现  nginx中处理http header详解(1)  nginx中处理http header详解(2)  nginx中处理stale event  nginx源码剖析

nginx中if命令的设计和实现  nginx对TCP_CORK/TCP_NOPUSH的使用  nginx least_conn 模块源码剖析

nginx中upstream的设计和实现(一)  nginx中upstream的设计和实现(二)  nginx中upstream的设计和实现(三)

--------------------------jizhao----------------------------------

Nginx基础数据结构分析-ngx_buf_t  Nginx基础数据结构分析-ngx_list_t  Nginx基础数据结构分析-ngx_chain_t  

Nginx基础数据结构分析-ngx_hash_keys_arrays_t  Nginx基础数据结构分析-ngx_hash_combined_t

Nginx基础数据结构分析-ngx_pool_t   Nginx基础数据结构分析-ngx_array_t   Nginx超时机制  ngx_snprintf说明

-----------------------阿波(livelylittlefish)--------------------------

nginx源码分析—内存池结构ngx_pool_t及内存管理  nginx源码分析—数组结构ngx_array_t  nginx源码分析—全局变量ngx_cycle的初始化  nginx源码分析—模块及其初始化  

nginx源码分析—hash结构ngx_hash_t(v1.0.4)  nginx源码分析—core模块callback  nginx源码分析—信号初始化  nginx源码分析—如何发送信号  

-------------------------编程De(jzhlin)------------------------

Nginx 源码分析-- 内存池(pool)的分析 一  Nginx 源码分析-- 内存池(pool)的分析 二  Nginx 源码分析-- 内存池(pool)的分析 三  

Nginx 源码分析-- 浅谈对模块module 的基本认知  Nginx 源码分析-- ngx_array、ngx_list基本数据结构  Nginx 源码分析-- ngx_string 的一些简单分析  

Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 一  Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 二

-----------------------可乐爱上咖啡(marcky)----------------------------

Nginx源码分析-数组  nginx源码分析-链表  Nginx源码分析-启动初始化过程(一)  Nginx源码分析-启动初始化过程(二)  Nginx源码分析-内存池

Nginx源码分析-进程管理之master进程  Nginx源码分析-进程管理之worker进程  Nginx源码分析-master和worker进程间的通信
Nginx源码分析-事件驱动的初始化  Nginx源码分析-事件循环  Nginx源码分析-connections数组  Nginx源码分析-Epoll模块

----------------------风去无痕(fll369)-----------------------------

nginx中slab实现    Nginx共享内存  nginx进程通信--共享内存  nginx进程通信  nginx进程模型

nginx配置文件解析  nginx模块解析  nginx事件机制  nginx socket初始化  nginx建立连接

-------------------------lengzijian--------------------------

nginx 源码学习笔记(一)——初识nginx helloworld模块 

nginx 源码学习笔记(六)——nginx基本数据结构  nginx 源码学习笔记(七)——内存分配相关源码分析  

nginx 源码学习笔记(八)——基本容器——array数组 nginx 源码学习笔记(九)——基本容器——queue

nginx 源码学习笔记(十)——基本容器——ngx_hash nginx 源码学习笔记(十一)——基本容器——ngx_list

nginx 源码学习笔记(十二)——基本容器——ngx_buf

nginx 源码学习笔记(十三)——文件读写和配置文件读取 nginx 源码学习笔记(十四)—— 全局变量ngx_cycle

nginx 源码学习笔记(十五)—— ngx_master_process_cycle 多进程(一)   nginx 源码学习笔记(十六)—— ngx_start_worker_processes子进程创建

nginx 源码学习笔记(十七)—— ngx_worker_process_cycle子进程执行 

nginx 源码学习笔记(二十)—— event 模块(一)  nginx 源码学习笔记(二十一)—— event 模块(二)    

nginx 源码学习笔记(二十二)—— event 模块(三) ——epoll模块  nginx 源码学习笔记(二十三)—— event 模块(四) ——timer红黑树

-------------------钟超Michael · 个人技术笔记--------------------------------

Nginx源码完全注释(1)ngx_alloc.h / ngx_alloc.c  解剖Nginx·模块开发篇(1)跑起你的 Hello World 模块!

-------------------但行好事 莫问前程(simohayha)--------------------------------

nginx的进程模型   nginx的内存管理  nginx中request请求的解析   nginx的filter的处理 nginx中锁的设计以及惊群的处理

nginx中handler的处理(一)  nginx中handler的处理(二) nginx中的output chain的处理(一)  nginx中的output chain的处理(二)

----------------------从这里开始(coder2012)-----------------------------

Nginx学习笔记(三) Nginx基本数据结构  Nginx学习笔记(二) Nginx--connection&request  Nginx学习笔记(七) 创建子进程  

Nginx学习笔记(六) 源码分析&启动过程  Nginx学习笔记(五) 源码分析&内存模块&内存对齐  Nginx学习笔记(四) 源码分析&socket/UDP/shmem

----------------------浪湾(langwan)-----------------------------

nginx源代码分析  Nginx源代码分析-ssi模块处理(一)  Nginx源代码分析-ssi模块处理(二)  Nginx源代码分析-ssi模块处理(三)

-----------------------那一剑的风情(fqing)----------------------------

nginx源码分析之开篇 nginx源码分析之模块化  nginx源码分析之设计之美  nginx源码分析之事件机制  nginx源码分析之配置图解

-------------------------bollaxu--------------------------

Nginx Proxy Cache的slab page内存缓存机制 Nginx的HTTP请求处理   Nginx的upstream模块和反向代理(一)   Nginx的upstream模块和反向代理(二) 

Nginx spinlock互斥锁 Nginx Proxy Cache分析 Nginx事件处理(epoll) 

--------------------李子的博客(lifeibo)-------------------------------

Nginx源码分析之变量 Nginx中slab分配大内存的陷阱 Nginx问题定位之监控进程异常退出

--------------------yjf512-------------------------------

nginx的HTTP模块编写  nginx的http模块开发--一个验证url参数的例子  nginx模块_使用gdb调试nginx源码  nginx源码学习资源(不断更新)

--------------------那谁-------------------------------

Nginx0.7.61代码分析(一)–写在前面的话以及进程模型分析  Nginx0.7.61代码分析(二)–worker子进程之间的负载均衡  Nginx0.7.61代码分析(三)–事件处理  Nginx0.7.61代码分析(四)–处理超时连接  Lighty与Nginx的比较分析  内存池及其他  

----------------------江南烟雨---------------------------

Nginx学习之十三-负载均衡-IP哈希策略剖析  Nginx学习之十一-Nginx启动框架处理流程   Nginx学习之二-配置项解析及编程实现

----------------------程序员的自我修养---------------------------

nginx源码学习----内存池  哈希表的C实现(一)  哈希表的C实现(二)  Mina框架研究(1)

-------------------Dmee的专栏-----------------------------

TCP协议经典rfc主题总结

关于异步,同步,阻塞与非阻塞

缓存服务器设计与实现(一)

关于nginx中upstream机制的思考

再谈nginx变量(一)

关于nginx中upstream机制的思考

------------------杂家--------

Nginx源码剖析之内存池,与内存管理

NGINX原理分析之SLAB分配机制 [图文并茂]

Nginx 内存池抽取

nginx源码剖析(3)----nginx中的内存池(简化去掉日志)

Nginx内存池实现源码分析

nginx的共享内存和锁,以及消息机制

nginx网络层分析

Nginx模块开发(一) 

Nginx模块开发入门 

===================================

redis

http://redis.io/

Redis 命令参考[汉化]

Redis 命令参考[汉化和上面一样的,做个备份]

通讯协议(protocol)

Protocol specification[原文]

Redis学习手册(目录) [不错,命令例子很多,排版也不错]

--------------twemproxy代理---------------------

https://github.com/twitter/twemproxy

Twemproxy源码分析(一)启动过程

twemproxy分析

twemproxy for redis使用说明及简单分析

Twemproxy – Twitter 开源的 Redis proxy

twemproxy简介

----------------------------------

https://github.com/huangz1990

Redis资料汇总专题

Redis内存存储结构分析 (淘宝搜索技术博客) 【很好很全】

Redis运行流程源码解析  (事件分析完整参开之三)[很好]

redis的IO事件驱动库原理和实现

Redis内存使用优化与存储 [很好]

Redis学习手册(事务)

Redis 事务实现原理分析  [很好]

阿里云计算运维部高级工程师阮若夷:Redis深入浅出  [很好]

Redis采用不同内存分配器碎片率对比 [很好]

Redis内存容量的预估和优化 [很好 讲jemalloc]

Redis协议解读与实现

redis.conf中文版(基于2.4)

深入浅出redis事件框架

redis/ae总结 [还可以,事件机制总结的很全]

Redis为什么不使用Libevent或者Libev

为啥 redis 使用跳表(ziplist)而不是使用 red-black?

redis是个单线程的程序,为什么会这么快呢?

深入理解Redis主键失效原理及实现机制[很好]

redis分析

Redis源码学习之【事件机制】

Redis事件驱动库

redis源码分析-为什么set性能高于get

redis的事件库

Redis源码解析(1)——源码目录介绍

Redis zmalloc

Redis源码分析:内存分配操作

深入剖析Redis RDB持久化机制

Redis 事务实现原理分析

解密Redis持久化

Redis ziplist内部结构分析

当Redis内存用尽时会做何处理?

Redis rdb dump的问题

Redis源码分析:内存管理

------------------Redis设计与实现---------------------------------

Redis 设计与实现

Redis 设计与实现(字典)  (很好)

redisObject 数据结构,以及 Redis 的数据类型

Redis设计与实现--跳跃表

-----------------------麦子迈------------------------------------

解读Redis ae事件驱动库

解读Redis dict核心数据结构

解读Redis中ziplist、zipmap、intset实现细节

解读Redis运行核心循环过程

Redis核心解读-从Master到Slave的Replicantion

Redis核心解读–类型系统解构

Redis核心解读–数据持久化过程与RDB文件

Redis核心解读–AOF与REWRITE机制

Redis核心解读–Slow Log

Redis核心解读–事务(Multi和CAS)的实现

Redis核心解读–pubsub(发布者-订阅者模式)的实现

Redis核心解读–集群管理工具(Redis-sentinel)

Redis集群的讨论及WheatRedis说明

--------------------curve--------------------------------

Redis源码解析1 - 程序框架

Redis源码解析2 - Dict结构

Redis源码解析3 - Object

Redis源码解析4 - 数据类型之 String & List

-----------------(董的博客)----------------------

Redis源码研究—代码整体架构   (事件分析完整参开之一)[很好]

Redis源码研究—哈希表 

----------------------用Bollger记录技术之路的点滴...------------------------------

Redis系列(一)---启动流程分析

Redis系列(二)---如何接受客户端请求并调用处理函数

Redis系列(三)---事件处理细节分析及epoll介绍

----------------------------运维和开发----------------------------------

redis源代码分析 – hash table  

redis源代码分析 – event library  (事件分析完整参开之二)[很好]

redis源代码分析- replication 

redis源代码分析 – persistence  

redis源代码分析 – protocol 

redis内存容量的预估和优化   (剖析set)

----------------------------Aegeaner的专栏-----------------------------

Redis源代码分析之七:事件驱动库分析——Ae  [很好]

Redis源代码分析之一:内存管理——Zmalloc

Redis源代码分析之二:散列表——Dict(上)

Redis源代码分析之三:散列表——Dict(下)

Redis源代码分析之四:Unix底层网络通信——Anet

Redis源代码分析之六:Redis执行流程

---------------------olylakers-------------------------------

Redis代码阅读3--Redis网络监听(1)   [很好]

Redis代码阅读3--Redis网络监听(2)

Redis代码阅读3--Redis网络监听(3) 

Redis代码阅读2--Redis数据结构之链表

Redis代码阅读1--Redis启动原理

---------------------------淘宝核心系统团队博客-------------------

Redis zipmap内存布局分析

Redis skip list结构分析

------------------------------igloo1986-------------------

【redis源码】(九)Redis

【redis源码】(八) Intset.c

【redis源码】(七)Dict.c

【redis源码】(六)Ae.c

【redis源码】(五)Ziplist

【redis源码】(四)Adlist

【redis源码】(三)Zipmap

【redis源码】(二)Sds

【redis源码】(一)Zmalloc

-------------------------------------刘浩de技术博客-----------------------

跳表(skiplist)的代码实现

redis源码笔记 - serverCron

redis源码笔记 - initServer

redis源码笔记-ae_epoll.c

redis源码笔记-ae.c

redis源码笔记-dict.c

redis源码笔记-sds

redis源码笔记-redis.conf

redis源码笔记-adlist

===================================

LevelDB

http://dirlt.com/leveldb.html

LevelDB关键实现图解

【朗格科技】LevelDb日知录

数据分析与处理之二(Leveldb 实现原理)  [很好]

===================================

thttpd

thttpd官网

thttpd安装

轻量型thttpd+php5

thttpd轻量级web服务器(HTTP/1.1和简单的CGI支持)

搭建 thttpd 服务器

thttpd源码小分析

thttpd源码小分析之Reactor pattern

thttpd代码分析编译错误

thttpd源码剖析

thttpd源代码阅读笔记

thttpd 2.25b源码分析

php-5.3,php-5.4的thttpd2.25b补丁,及编译方法

------------------------------------------------

libevent和libev网络库

http://libevent.org/

libevent源码浅析: http库  libevent源码浅析: 事件处理框架  libevent源码浅析: 定时器和信号 libevent源码浅析: 主要的结构体

libevent源码分析

libevent-book

libevent源码分析

Programming with Libevent

libevent结构分析

----------------libev---------------------

libev入门

libev库的用法

libev 设计分析

libev ev_io源码分析

用libev的c语言版本实现简单的网络通信服务器

libev:libevent的挑战者

=====================

PHP

gdb 调试PHP

PHP中spl_autoload_register函数的用法

PHP实现MVC开发得最简单的方法——单点入口

自己动手写PHP MVC框架

可变函数  匿名函数

PHP回调函数的实现方法

如何调试PHP的Core之获取基本信息

PDO防注入原理分析以及使用PDO的注意事项

腾讯PHP面试题

PHP动态实例化对象并向构造函数传递参数

PHP哈希表碰撞攻击原理

php缓存与加速分析与汇总  

确保 PHP 应用程序的安全

PHP-Valgrind的介绍

php 引用传递、引用返回和取消引用以及unset

PHP包含文件(require/include/require_once/include_once/__autoload/spl_autoload_xxx)分析总结

PHP中判断变量为空的几种方法

PHP 类型比较表

使用 Zend Opcache 加速 PHP

PHP 源代码分析

BigPipe学习研究 很好

php多线程解决之stream_socket_client

rose pipe–一次对http技术的伟大革新实现

名站技术分析 — facebook奇特的页面加载技术

Linux crontab 命令介绍

php5.3 PHP5.4 PHP5.5 新特性(一)

用PHP实现简单的控制反转(IOC) 依赖注入(DI),用JSON配置文件   [很好]

php之aop实践   php老鸟

在PHP里利用魔术方法实现准AOP

PHP系列学习之AOP

https://github.com/phpredis/phpredis [phpredis扩展]

-----------------PHP扩展----------------------------

如何编写PHP扩展   用C/C++扩展你的PHP

用C语言写PHP扩展 (基础)

用C语言扩展PHP功能 (数据库操作)

快速开发一个PHP扩展(黑夜路人)

编写PHP扩展三步曲之一 (很好)

PHP Extension开发基础

PHP扩展开发:第一个扩展

用 SWIG 构建 PHP 扩展

PHP内核探索:zend_parse_parameters函数

Zend API:Zend_parse_parameters

原文:http://devzone.zend.com/public/view/tag/Extension
Part I: Introduction to PHP and Zend
编写扩展I -  PHP和Zend起步
Part II: Parameters, Arrays, and ZVALs
编写扩展_II - 参数、数组和ZVALs
Part II: Parameters, Arrays, and ZVALs [continued]
编写扩展_II - 参数、数组和ZVALs[继续]
Part III: Resources
编写扩展_III - 资源

PHP本地缓存扩展pcache

--------------laruence-----------------------

采用PHP实现”服务器推”技术的聊天室

关于PHP你可能不知道的-PHP的事件驱动化设计

加速PHP的ECHO

深入理解PHP原理之Opcodes

深入理解PHP原理之异常机制

再一次, 不要使用(include/require)_once

Yar – 并行的RPC框架(Concurrent RPC framework)

YAR 并行RPC框架研究 很好

-----------------------------------------------------------

YII

Yii PHP 框架分析 (一)    Yii PHP 框架分析(二)      Yii PHP 框架分析(三)       Yii PHP 框架分析(四)

-----------------------------------------------------------

PHP的MVC框架哪一个性价比最高?yii2 还是 thinkphp

==================================

Javascript

浏览器中的内存泄露

浏览器中的内存泄露(续)

http://www.gruntjs.net/docs/getting-started/

大公司里怎样开发和部署前端代码   作者个人博客https://github.com/fouber/blog

百度web前端研发部 http://fex.baidu.com/

百度无线web研发部 http://mweb.baidu.com/

-----------------------------------------------------------

Ajax

深入浅出JSONP--解决ajax跨域问题 [很好]

说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;
2、不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>);
3、于是可以判断,当前阶段如果想通过纯web端(ActiveX控件、服务端代理、属于未来的HTML5之Websocket等方式不算)跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理;
4、恰巧我们已经知道有一种叫做JSON的纯字符数据格式可以简洁的描述复杂数据,更妙的是JSON还被js原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据;
5、这样子解决方案就呼之欲出了,web客户端通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件(一般以JSON为后缀),显而易见,服务器之所以要动态生成JSON文件,目的就在于把客户端需要的数据装入进去。
6、客户端在对JSON文件调用成功之后,也就获得了自己所需的数据,剩下的就是按照自己需求进行处理和展现了,这种获取远程数据的方式看起来非常像AJAX,但其实并不一样。
7、为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

跨域请求解决方法(JSONP, CORS)

Ajax直接请求普通文件存在跨域无权限访问的问题。解决方法有JSONP,Flash等等。

JSONP
我们发现,Web页面上调用js文件时不受是否跨域的影响,凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>。
那就是说如果要跨域访问数据,就服务端只能把数据放在js格式的文件里。恰巧我们知道JSON可以简洁的描述复杂数据,而且JSON还被js原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据。
然后客户端就可以通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件。客户端在对JSON文件调用成功之后,也就获得了自己所需的数据。这就形成了JSONP的基本概念。
允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

HTML5安全:CORS(跨域资源共享)简介

以前要实现跨域访问,可以通过JSONP、Flash或者服务器中转的方式来实现,但是现在我们有了CORS。

CORS与JSONP相比,无疑更为先进、方便和可靠。
1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS(这部分会在后文浏览器支持部分介绍)。

AJAX POST&跨域 解决方案 - CORS

JSONP 的工作原理是什么?

很简单,就是利用<script>标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。
当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形如:     <script src="http://www.example.net/api?param1=1&param2=2"></script>     
并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。     
第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:     callback({"name":"hax","gender":"Male"})     这样浏览器会调用callback函数,并传递解析后json对象作为参数。
本站脚本可在callback函数里处理所传入的数据。    
补充:“历史遗迹”的意思就是,如果在今天重新设计的话,也许就不会允许这样简单的跨域了嘿,比如可能像XHR一样按照CORS规范要求服务器发送特定的http头。

JSONP是一种非正式传输协议,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,
这样客户端就可以随意定制自己的函数来自动处理返回数据了。

==================================

mysql

orzdba工具使用说明   [非常好用重要]

MySQL线上常见故障剖析  [很好]

mysql二进制文件(binlog)的应用

LINUX上MYSQL优化三板斧

利用NetScaler和自行编写的健康检查脚本,完美解决多台MySQL Slave数据库的负载均衡  [张宴]

利用Navicat导出修改表sql

MySQL第三方复制工具 --- Tungsten-Replicator

Tungsten Replicator 的安装 2.0.4 2.0.6

Tungsten Replicator 是一种MySQL复制引擎,类似于MySQL 自身的replication,基于日志复制模式,不同的是 Tungsten 通过Extractor控件读取mysql主库的binlog 解析成自己的日志格式--THL(Transaction History Log), 在从库上通过Applier控件写入数据库。

第三方数据复制引擎--Tungsten-Replicator 主要特点:
1 支持高版本MySQL向低版本复制,5.1-->5.0 
2 支持跨数据库系统的复制,MySQL->PgSQL ,MySQL->MongoDB
3 支持多主库向单台Slave的复制,Multi-Master-->Slave 
4 G-Replicator提取数据的更新记录写到MySQL 队列表Queue;基于这个队列,可以为其他应用服务提供便利

https://code.google.com/p/tungsten-replicator/

BlackHole :黑洞引擎

如何选择MySQL存储引擎

MySQL BlackHole 存储引擎使用

高性能mysql(基于复制架构)(多图)高性能mysql(基于复制架构)(多图)

高性能Mysql主从架构的复制原理及配置详解

Amoeba官网

MySQL 分区表

=================================

搜索技术

sphinx

亿级数据的高并发通用搜索引擎架构设计 [张宴]

基于Sphinx构建准实时更新的分布式通用搜索引擎平台 [张宴]

搜索引擎技术之概要预览

-----------------------------------------------

Lucene

Lucene原理与代码分析 [很好]

Lucene 原理与代码分析完整版 [很好]

http://wiki.apache.org/lucene-java/HowTo

二、lucene3.5的查询语法

一个最简单的Lucene例子

=================================

memcached

关于Memcache内存管理模型的理解  [很好]

memcached内存管理(1) ----------------slabs [很好]

memcached内存管理(2) ----------------items

memcached内存管理(3) ----------------assoc

memcached完全剖析–1. memcached的基础

memcached全面剖析–2.理解memcached的内存存储 [很好]

memcached全面剖析–3.memcached的删除机制和发展方向

memcached全面剖析–4. memcached的分布式算法

memcached全面剖析–5. memcached的应用和兼容程序

Memcache内存分配策略

Memcached源码分析之内存管理篇

memcache slabs  [好]

微博高并发场景下的分布式缓存架构  [好]

Memcached源码分析(线程模型)

memcached的通讯层分析

memcache 线程模型

memcached采用的网络模型

memcache connect queue

memcached源码学习-内存管理机制slab allocator[好]

memcached源码学习-多线程模型[好]

memcached源码学习-hashtable

Memcached 内存管理(一)

memcached内存分配及回收初探 - 01

memcached浅析-韩建华 [好]

memcached源代码分析 [好]

memcached分析--主架构解析

memcached之slab

memcached工作原理与优化建议

memcached参数中文解释

Memcached FAQ(2) 集群架构方面的问题 [准确]

Memcached内存管理机制浅析

memcached深度分析

Memcached 结构分析 [很全面]

memcached slabs内存分配算法详解

Memcached数据被踢(evictions>0)现象分析

memcache源码分析之items

memcache源码分析之assoc

memcache源码分析之命名空间stats

memcache源码分析之slabs [很好]

Memcached 1.2 内存模型分析(zz)

深入分析Memcached的线程接入模型---上

深入分析Memcached的线程接入模型---中

深入分析Memcached的线程接入模型---下

Memcached源码学习——线程模型

memcached源码学习——协议

C C++ 内存池分析 二 ncx_pool

C C++ 内存池分析一 POCO Memcached

C C++ 内存池分析 三 淘宝tair K-V 内存数据库 mem_pool

memcached server LRU 深入分析  [还不错]

==================================

存储

存储博文精选专辑

经典论文翻译导读之《Google File System》

图片服务器架构演进

==================================

FastDFS

FastDFS 安装及使用

FastDFS FAQ

FastDFS分布式文件系统点滴记录2 --  架构概述

FastDFS分布式文件系统点滴记录3 -- 网络模型、libevent框架使用

FastDFS分布式文件系统点滴记录4 -- tracker 、storage 入口分析

FastDFS分布式文件系统点滴记录5 -- upload上传机制剖析1

FastDFS分布式文件系统点滴记录5  -- upload上传机制剖析2

FastDFS分布式文件系统点滴记录5 -- upload上传机制剖析3

FastDFS分布式文件系统点滴记录6 -- download下载机制剖析

FastDFS源码阅读笔记(一)

FastDFS源码阅读笔记(二)

FastDFS源码阅读笔记(三)

FastDFS源码解析1-概述

fastdfs源码分析2-storage主流程

fastdfs源码分析3-tracker主流程

fastdfs 源码分析4-tracker的选主和心跳机制

分布式文件系统FastDFS架构剖析

==================================

TFS

TFS 源码分析 写文件操作 Client端

--------------bingfox的专栏---------------

TFS数据块同步推送分析

TFS文件系统格式化分析

TFS文件系统数据服务器启动加载分析

TFS文件系统写文件分析

TFS文件系统策略分析

=================分布式理论===================

CAP原理

CAP定理 [wiki]

以两军问题为背景来演绎Basic Paxos【最形象,paxos和两军问题,不是说paxos解决了两军问题,只是借用两军问题的背景来演绎paxos。】

一步一步理解Paxos算法【黑夜路人 画图不错】

Paxos算法细节详解(一)--通过现实世界描述算法【很好】

在最初的第二阶段,议题是先入为主的,谁先占了先机,后面的proposer在第一阶段就会学习到这个议题而修改自己本身的议题,因为这样没职业操守,才能让一致性得到保证,这就是paxos算法的一个过程。原来paxos算法里的角色都是这样的不靠谱,不过没关系,结果靠谱就可以了。该算法就是为了追求结果的一致性。

Paxos在大型系统中常见的应用场景

Paxos是一个分布式选举算法就够了。
1. database replication, log replication等, 如bdb的数据复制就是使用paxos兼容的算法。Paxos最大的用途就是保持多个节点数据的一致性。
2. naming service, 如大型系统内部通常存在多个接口服务相互调用。
3.config配置管理
4.membership用户角色/access control list, 比如在权限设置中,用户一旦设置某项权限比如由管理员变成普通身份,这时应在所有的服务器上所有远程CDN立即生效,否则就会导致不能接受的后果。
5. 号码分配。通常简单的解决方法是用数据库自增ID, 这导致数据库切分困难,或程序生成GUID, 这通常导致ID过长。更优雅的做法是利用paxos算法在多台replicas之间选择一个作为master, 通过master来分配号码。当master发生故障时,再用paxos选择另外一个master。


Yahoo!开源的ZooKeeper [5]是一个开源的类Paxos实现。它的编程接口看起来很像一个可提供强一致性保证的分布式小文件系统。对上面所有的场合都可以适用。但可惜的是,ZooKeeper并不是遵循Paxos协议,而是基于自身设计并优化的一个2 phase commit的协议,因此它的理论[6]并未经过完全证明。但由于ZooKeeper在Yahoo!内部已经成功应用在HBase, Yahoo! Message Broker, Fetch Service of Yahoo! crawler等系统上,因此完全可以放心采用。

如何浅显易懂地解说 Paxos 的算法?

CAP原理与最终一致性

CAP理论以及Eventually Consistent 解析

关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究

两阶段提交协议(two phase commit protocol,2PC)

分布式系统的CAP理论

CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。
但其实分区不是你想不想的问题,而是始终会存在,因此CA的系统更多的是允许分区后各子系统依然保持CA。
CP without A:如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。
很多传统的数据库分布式事务都属于这种模式。
AP wihtout C:要高可用并允许分区,则需放弃一致性。
一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。

分布式系统的BASE理论

BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

基本可用(Basically Available)
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。


软状态( Soft State)
软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。
分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。


最终一致性( Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。


ACID和BASE的区别与联系
ACID是传统数据库常用的设计理念,追求强一致性模型。BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。


ACID和BASE代表了两种截然相反的设计哲学
在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此ACID和BASE又会结合使用。

CAP原理和BASE思想

分布式领域CAP理论,
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性

定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。

关系数据库的ACID模型拥有 高一致性 + 可用性 很难进行分区:
Atomicity原子性:一个事务中所有操作都必须全部完成,要么全部不完成。
Consistency一致性. 在事务开始或结束时,数据库应该在一致状态。
Isolation隔离层. 事务将假定只有它自己在操作数据库,彼此不知晓。
Durability. 一旦事务完成,就不能返回。
跨数据库事务:2PC (two-phase commit), 2PC is the anti-scalability pattern (Pat Helland) 是反可伸缩模式的,JavaEE中的JTA事务可以支持2PC。因为2PC是反模式,尽量不要使用2PC,使用BASE来回避。

BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性:
Basically Available基本可用。支持分区失败(e.g. sharding碎片划分数据库)
Soft state软状态 状态可以有一段时间不同步,异步。
Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时高一致。


简单了解分布式系统

集中式系统用一句话概括就是:一个主机带多个终端。

在《分布式系统概念与设计》一书中,对分布式系统做了如下定义:
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统
简单来说就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。

分布式系统的一致性探讨

分布式领域CAP理论告诉我们,任何一个分布式系统都无法同时满足Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性) 这三个基本需求。最多只能满足其中两项。 但是,一个分布式系统无论在CAP三者之间如何权衡,都无法彻底放弃一致性(Consistency),如果真的放弃一致性,那么就说明这个系统中的数据根本不可信,数据也就没有意义,那么这个系统也就没有任何价值可言。所以,无论如何,分布式系统的一致性问题都需要重点关注。

有的架构师还说在某些场景中可以牺牲一致性呢?
通常这里说的放弃一致性指的是放弃数据的强一致性。

强一致性
当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。
弱一致性
系统并不保证续进程或者线程的访问都会返回最新的更新过的值,可能保证在某个时间级别之后,可以让数据达到一致性状态。
最终一致性
弱一致性的特定形式。
在没有后续更新的前提下,系统最终返回上一次更新操作的值。
在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。DNS是一个典型的最终一致性系统。

关于分布式事务、两阶段提交协议、三阶提交协议

分布式事务是指会涉及到操作多个数据库的事务。其实就是将对同一库事务的概念扩大到了对多个库的事务。目的是为了保证分布式系统中的数据一致性。

二阶段提交:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。
两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。
二阶段提交还是有几个缺点的:
1、同步阻塞问题。执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。
2、单点故障。由于协调者的重要性,一旦协调者发生故障。参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题)
3、数据不一致。在二阶段提交的阶段二中,当协调者向参与者发送commit请求之后,发生了局部网络异常或者在发送commit请求过程中协调者发生了故障,这回导致只有一部分参与者接受到了commit请求。而在这部分参与者接到commit请求之后就会执行commit操作。但是其他部分未接到commit请求的机器则无法执行事务提交。于是整个分布式系统便出现了数据部一致性的现象。
4、二阶段无法解决的问题:协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。

三阶段提交有两个改动点。
1、引入超时机制。同时在协调者和参与者中都引入超时机制。
2、在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。
也就是说,除了引入超时机制之外,3PC把2PC的准备阶段再次一分为二,这样三阶段提交就有CanCommit、PreCommit、DoCommit三个阶段。

相对于2PC,3PC主要解决的单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的信息之后,他会默认执行commit。而不会一直持有事务资源并处于阻塞状态。但是这种机制也会导致数据一致性问题,因为,由于网络原因,协调者发送的abort响应没有及时被参与者接收到,那么参与者在等待超时之后执行了commit操作。这样就和其他接到abort命令并执行回滚的参与者之间存在数据不一致的情况。

无论是二阶段提交还是三阶段提交都无法彻底解决分布式的一致性问题。只有一种一致性算法,那就是Paxos,所有其他一致性算法都是Paxos算法的不完整版。

并行和并发需要不同的工具

NoSQL数据库笔谈

事务和两阶段提交

NoSQL反模式 - 文档数据库篇

数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

大话Sheepdog 1 – 智能节点管理

大话Sheepdog 2 – 对象缓存

分布式锁服务器

Chubby:面向松散耦合的分布式系统的锁服务   [谷歌原文翻译]

分布式系统领域经典论文翻译集

Bigtable:结构化数据的分布式存储系统

HBase vs Cassandra:我们迁移系统的原因[文章老 但是分布式理论说的还可以]

构建可伸缩,高性能的互联网应用

高性能IO设计的Reactor和Proactor模式

==================================

由于Java的内容太多了,单独一贴计算机科学精彩帖子收集--JAVA和分布式专栏

Java

jdk下载

http://openjdk.java.net/projects/jdk8/

------------Eclipse----------------------

eclipse颜色插件 color theme

myeclipse配置jdk

Eclipse自动部署项目到Tomcat的webapps下的有效方法   【重要,一定要看】

Eclipse自动部署项目到Tomcat的webapps下的有效方法   [和上面一样,纯备份]

Eclipse调试Java的10个技巧

Java heap dump触发和分析(转)

使用$JAVA_HOME/bin/jmap -dump来触发, Eclipse Memory Analyzer是一个快速并且功能强大的Java heap分析器,能够帮助你查找内存泄漏和减少内存消耗。

Eclipse debug技巧

Eclipse调试Java代码

Eclipse中的条件断点

最详细eclipse汉化插件安装教程

Eclipse怎样配置struts2?[成功配置]

在Eclipse中配置Struts2

一、Eclipse helios 配置struts2图解

Eclipse下搭建Struts2环境

在Eclipse中配置Struts2项目(二)  [讲了JDK,和Tomcat的配置以及struts虽然是2007年写的不过很好]

eclipse中配置jdk

Eclipse.ini的相关说明

eclipse配置java虚拟机的方法

全面认识Eclipse中JVM内存设置

MyEclipse设置默认的JSP页面打开方式

Myeclipse中如何更改jsp默认的打开方式

Java Code Review清单

-------------JVM-------------------------

jvm内存映像分析   好东西

一个优秀的Java程序员必须了解GC机制   一个优秀的Java程序员必须了解GC机制 原文

1.最基本的建议就是尽早释放无用对象的引用。 
2.尽量少用finalize函数。finalize函数是Java提供给程序员一个释放对象或资源的机会。但是,它会加大GC的工作量,因此尽量少采用finalize方式回收资源。 
3.注意集合数据类型,包括数组,树,图,链表等数据结构,这些数据结构对GC来说,回收更为复杂。另外,注意一些全局的变量,以及一些静态变量。这些变量往往容易引起悬挂对象(dangling reference),造成内存浪费。 
4.当程序有一定的等待时间,程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。使用增量式GC可以缩短Java程序的暂停时间。

Java中三个引用类SoftReference 、 WeakReference 和 PhantomReference的区别

理解StrongReference,SoftReference, WeakReference的区别

StrongReference 是 Java 的默认引用实现,  它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时 GC 执行后将会被回收
WeakReference, 顾名思义,  是一个弱引用,  当所引用的对象在 JVM 内不再有强引用时, GC 后 weak reference 将会被自动回收
SoftReference 与 WeakReference 的特性基本一致, 最大的区别在于 SoftReference 会尽可能长的保留引用直到 JVM 内存不足时才会被回收(虚拟机保证), 这一特性使得 SoftReference 非常适合缓存应用

虚引用主要用来跟踪对象被垃圾回收器回收的活动。

理解 Java 的 GC 与 幽灵引用    Java 中一共有 4 种类型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference (传说中的幽灵引用)

java中的4种reference的差别和使用场景(含理论、代码和执行结果)

JVM调优:选择合适的GC collector (一)

HotSpot VM GC 的种类

Java GC 调试手记

GC学习笔记 总结很完整

JVM 垃圾回收算法  【图文非常好】

1.标记—清除算法(Mark-Sweep)
标记—清除算法包括两个阶段:“标记”和“清除”。在标记阶段,确定所有要回收的对象,并做标记。清除阶段紧随标记阶段,将标记阶段确定不可用的对象清除。
2.复制算法(Copying)
复制算法是把内存分成大小相等的两块,每次使用其中一块,当垃圾回收的时候,把存活的对象复制到另一块上,然后把这块内存整个清理掉。
3.标记—整理算法(Mark-Compact)
标记—整理算法和标记—清除算法一样,但是标记—整理算法不是把存活对象复制到另一块内存,而是把存活对象往内存的一端移动,然后直接回收边界以外的内存。
4.分代收集(Generational Collection)
分代收集是根据对象的存活时间把内存分为新生代和老年代,根据个代对象的存活特点,每个代采用不同的垃圾回收算法。新生代采用标记—复制算法,老年代采用标记—整理算法。

线程TLAB区域的深入剖析

(1) 堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的
(2) Hotspot JVM为了提升对象内存分配的效率,对于所创建的线程都会分配一块独立的空间TLAB(Thread Local Allocation Buffer),其大小由JVM根据运行的情况计算而得,在TLAB上分配对象时不需要加锁,因此JVM在给线程的对象分配内存时会尽量的在TLAB上分配,在这种情况下JVM中分配对象内存的性能和C基本是一样高效的,但如果对象过大的话则仍然是直接使用堆空间分配
(3) TLAB仅作用于新生代的Eden Space,因此在编写Java程序时,通常多个小的对象比大的对象分配起来更加高效。
(4) 所有新创建的Object 都将会存储在新生代Yong Generation中。如果Young Generation的数据在一次或多次GC后存活下来,那么将被转移到OldGeneration。新的Object总是创建在Eden Space。

JVM介绍  【非常全面,图文】

浅析Java虚拟机结构与机制 【全面】面向GC的Java编程

对象都是在堆上分配的吗?

典型的对象不再堆上分配的情况有两种:TLAB和栈上分配。

编写内存效率的java代码-面向GC 【阿里沐剑】

GC最喜欢这种小而短命的对象。让对象的生命周期尽可能短,例如在方法体内创建,使其能尽快地在YoungGC中被回收,不会晋升(romote)到年老代(Old Generation)。
小对象的分配,会优先在线程私有的 TLAB 中分配,TLAB中创建的对象,不存在锁甚至是CAS的开销。TLAB占用的空间在Eden Generation。
当对象比较大,TLAB的空间不足以放下,而JVM又认为当前线程占用的TLAB剩余空间还足够时,就会直接在Eden Generation上分配,此时是存在并发竞争的,所以会有CAS的开销,但也还好。
当对象大到Eden Generation放不下时,JVM只能尝试去Old Generation分配,这种情况需要尽可能避免,因为一旦在Old Generation分配,这个对象就只能被Old Generation的GC或是FullGC回收了。
GC算法在扫描存活对象时通常需要从ROOT节点开始,扫描所有存活对象的引用,构建出对象图。
不可变对象对GC的优化,主要体现在Old Generation中。
Hotspot JVM为了提高YoungGC的性能,避免每次YoungGC都扫描Old Generation中的对象引用,采用了卡表(Card Table) 的方式。
在一个非常大的方法体内,对一个较大的对象,将其引用置为null,某种程度上可以帮助GC。大部分情况下,这种行为都没有任何好处。
System.gc()在JVM启动参数中如果允许显式GC,则会触发FullGC。
Never use Thread.yield()。
Never use System.gc()。除非你真的需要回收Native Memory。
由于Native Memory只能通过FullGC(或是CMS GC)回收,所以除非你非常清楚这时真的有必要,否则不要轻易调用System.gc(),且行且珍惜。
另外为了防止某些框架中的System.gc调用(例如NIO框架、Java RMI),建议在启动参数中加上-XX:+DisableExplicitGC来禁用显式GC。
这个参数有个巨大的坑,如果你禁用了System.gc(),那么上面的3种场景下的内存就无法回收,可能造成OOM,如果你使用了CMS GC,那么可以用这个参数替代:-XX:+ExplicitGCInvokesConcurrent。
如果对象很小,那么分配的开销本来就小,对象池只会增加代码复杂度。
如果对象比较大,那么晋升到Old Generation后,对GC的压力就更大了。
从线程安全的角度考虑,通常池都是会被并发访问的,那么你就需要处理好同步的问题,这又是一个大坑,并且同步带来的开销,未必比你重新创建一个对象小。
对于对象池,唯一合适的场景就是当池中的每个对象的创建开销很大时,缓存复用才有意义,例如每次new都会创建一个连接,或是依赖一次RPC。
即使你真的需要实现一个对象池,也请使用成熟的开源框架,例如Apache Commons Pool。
另外,使用JDK的ThreadPoolExecutor作为线程池,不要重复造轮子,除非当你看过AQS的源码后认为你可以写得比Doug Lea更好。
如果可以在方法内声明的局部变量,就不要声明为实例变量。
除非你的对象是单例的或不变的,否则尽可能少地声明static变量。

成为JavaGC专家Part I — 深入浅出Java垃圾回收机制

成为JavaGC专家Part II — 如何监控Java垃圾回收机制

JVM性能优化, Part 1 ―― JVM简介

JVM性能优化, Part 2 ―― 编译器

JVM性能优化, Part 3 垃圾回收

JVM 性能优化, Part 4: C4 垃圾回收

JVM性能优化, Part 5:Java的伸缩性

JVM并发机制的探讨——内存模型、内存可见性和指令重排序

深入理解JDBC的超时设置

Java编译时与运行时

Java Web Services问题集锦

深入理解JVM内幕:从基本结构到Java 7新特性

Java对象内存结构

如何增强JAVA的I/O性能

JVM垃圾回收机制

深入Java虚拟机之虚拟机体系结构

高手详细介绍JVM是什么?

什么是内存泄漏

Java内存泄露与WeakHashMap

主要有两种情况导致内存泄露:
1、如果Map本省有强引用存在的话,Map中对象即时不被JVM中的任何地方应用到,也不会被回收。
2、如果没有适当的管理,这个Map容器很容易失控,不断的增长。
要避免上面的两种情况,可以在对象不在使用的时候,将它从Map中移除。这就需要容易管理者构造一个清理的函数给对象调用者使用,或者使用一个监听器模式。
然而,这可能不适合某些特定的场景,比如交互式的扩展API。添加这样的函数会使得使用者的API变得更加复杂,增加类之间的耦合度,不好。
一个更简洁当实用的方法是使用一个Map的Key作为ID来标记缓存对象,这时Map不再需要GC来回收对象,而是使用编码逻辑,定期对容器进行检查,对Map进行清理,清除不需要的对象,保持Map容器的容量。
WeakashMap提供一个更优雅的方法解决这个问题。使用WaekHashMap实例化Map。当使用者不再有对象引用的时候,WeakHashMap将自动被移除对应Key值的对象。
正如Java API中对WeakHashMap的描述—-这个容器将不再保护key,不防止对应的key被GC回收。

Java垃圾回收(GC)精华 分代图画的好

深入理解JVM内幕:从基本结构到Java 7新特性

JVM详解 Java虚拟机原理与优化[非常好]

深入JVM [非常好]

深入Java核心 Java内存分配原理精讲

深入Java底层:内存屏障与JVM并发详解

java中Class对象详解

JVM如何判断类相同

JVM系列一:JVM内存组成及分配

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。

JVM系列二:GC策略&内存申请、对象衰老

JVM系列三:JVM参数设置、分析

JVM参数调优,无停滞实践 

1:建议用64位操作系统,Linux下64位的jdk比32位jdk要慢一些,但是吃得内存更多,吞吐量更大。
2:XMX和XMS设置一样大,MaxPermSize和MinPermSize设置一样大,这样可以减轻伸缩堆大小带来的压力。
3:调试的时候设置一些打印参数,如-XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log,这样可以从gc.log里看出一些端倪出来。
4:系统停顿的时候可能是GC的问题也可能是程序的问题,多用jmap和jstack查看,或者killall -3 java,然后查看java控制台日志,能看出很多问题。有一次,网站突然很慢,jstack一看,原来是自己写的URLConnection连接太多没有释放,改一下程序就OK了。
5:仔细了解自己的应用,如果用了缓存,那么年老代应该大一些,缓存的HashMap不应该无限制长,建议采用LRU算法的Map做缓存,LRUMap的最大长度也要根据实际情况设定。
6:垃圾回收时promotion failed是个很头痛的问题,一般可能是两种原因产生,第一个原因是救助空间不够,救助空间里的对象还不应该被移动到年老代,但年轻代又有很多对象需要放入救助空间;第二个原因是年老代没有足够的空间接纳来自年轻代的对象;这两种情况都会转向Full GC,网站停顿时间较长。第一个原因我的最终解决办法是去掉救助空间,设置-XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0即可,第二个原因我的解决办法是设置CMSInitiatingOccupancyFraction为某个值(假设70),这样年老代空间到70%时就开始执行CMS,年老代有足够的空间接纳来自年轻代的对象。
7:不管怎样,永久代还是会逐渐变满,所以隔三差五重起java服务器是必要的,我每天都自动重起。
8:采用并发回收时,年轻代小一点,年老代要大,因为年老大用的是并发回收,即使时间长点也不会影响其他程序继续运行,网站不会停顿。
9:因为没有用到救助空间,所以年老代容易满,CMS执行会比较频繁。我改善了一下,还是用救助空间,但是把救助空间加大,这样也不会有promotion failed。

详细介绍Java的内存管理与内存泄露

JVM的垃圾回收机制详解和调优

走进JVM,浅水也能捉鱼!

浅析JVM内存结构和6大区域

你必须知道的5个JVM命令行标志

JVM中的Hello World

JVM内存模型及垃圾收集策略解析

JVM调优总结(三)-基本垃圾回收算法

JVM调优总结(五)-分代垃圾回收详述1

JVM调优总结(六)-分代垃圾回收详述2

JVM调优总结(十)-调优方法

Java性能优化[3]:垃圾回收(GC)

JVM GC调优一则--增大Eden Space提高性能

虚拟机故障处理工具

JDK中的bin目录下有很多工具,这些工具可以用来检测虚拟机运行情况以及cpu,内存,线程等的监控,比如jps、jstat、jinfo、jmap、jhat、jstatck等。

-------------Java基础-------------------------

jdb可以调试线上程序类似GDB

HashMap实现原理分析

JAVA学习笔记 -- Vector, ArrayList, Array

Vector这个类是thread safe的。就是说,多线程同时调用同一个Vector的方法不会造成数据的混乱。而ArrayList不是thread safe。所以,如果是多线程的程序,多使用Vector,这样不需要自己维护concurrency。
数据的增长模式不一样。无论是Vector还是ArrayList,内部都是用一个Array来实现的,这就意味着,一旦数据越来越多超过了原来Array的容量的时候,Vector和ArrayList都需要扩充Array来满足新的数据。Vector每次扩充的时候都增长一倍,就是说新的Array的size是旧的Array的size的2倍。而ArrayList每次扩充,它的Array的size只增加50%.
最后,如果程序对于性能要求很高的话,Vector和ArrayList最好哪个都别用,而使用原始的Array。

JAVA学习笔记 -- ”诡异“的List和Array转换

asList()这个函数返回的不是一个”完整的“List对象,而是一个视图(View)。这意味着如果我们改变array中的元素,那么list中的元素也会相应的改变。实际上,array和list指向的是同一组数据。
但是,toArray()这个函数又不存在这个问题。toArray()返回的是一个”safe“的数组。意思就是toArray()会将List中的数据通过值传递的方式拷贝到新的数组中,List中的数据和新创建的数组中的数据不存在引用。如果改变list中的元素,不会影响到array中的数据。
很有趣吧,看上去是一个双向的转换,但其实asList()和toArray()在语义上有着很大的差别。

不简单的JAVA内部类

有了内部类事件驱动模式就非常的容易实现,内部类最大的好处就是它能够达到和多重继承一样的效果。

WeakHashMap 用法和原理

在《Effective Java》一书中第六条,消除陈旧对象时,提到了weakHashMap,即在我们使用短时间内就过期的缓存时最好使用weakHashMap,它包含了一个自动调用的方法expungeStaleEntries,这样就会在值被引用后直接执行这个隐含的方法,将不用的键清除掉。
注意:WeakHashMap并不是你啥也干他就能自动释放内部不用的对象的,而是在你访问它的内容的时候释放内部不用的对象。你只put了没有get过,这个值是永远都存在的。

由于WeakHashMap是在有操作的情况下才会去执行expungeStaleEntries(),将entry中对value的引用释放。

WeakHashMap理解

如何创建不可变(Immutable)的Java类或对象

Java替代C语言的可能性

jdk7新特性

java servlet实例

throw与throws区别

Java基本开发环境搭建

深入理解Java HelloWorld

Servlet 3特性:异步Servlet

Java反射教程

Java Beans序列化缓存  

对象序列化为何要定义serialVersionUID的来龙去脉【很好】

动态绑定 vs 静态绑定

探究内存泄露—Part1—编写泄露代码  探究内存泄露—Part2—分析问题

如何写一个不可变类?  为什么String类是不可变的?

深入理解Java中的final关键字

equals与”==”的区别

clone方法是如何工作的

什么是静态(static)?什么是静态方法,静态变量,静态块和静态类?

Java字符串问题Top10

java中final的意义

java中静态代码块的用法 static用法详解

HashMap和Hashtable的区别  HashMap的工作原理  HashMap和Hashtable的区别

Java遍历Map的两种实现方法

类在什么时候加载和初始化

Eclipse的调试功能的10个小窍门

对比Java.nio 和 Java.io
NIO新功能Top 10

Java NIO原理和使用

Log4j 2 介绍&
Log4j 2.x架构

有效处理Java异常三原则

Java集合框架问题集锦

浅谈WebLogic和Tomcat

Java 集合系列目录(Category)  [很好]

java中length,length(),size()区别

让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别

response.sendRedirect和request.getRequestDispatcher().forward什么时候用哪个

请说明Request和Session的生命周期

request和session的生命周期

转发和重定向的区别

java 重定向和转发的区别

ArrayList的使用方法

java enum(枚举)使用详解 + 总结

Java抓取网页数据(原网页+Javascript返回数据)

request.getParameterValues与request.getParameter的区别  

request.getParameterValues(String   name)是获得如checkbox类(名字相同,但值有多个)的数据。   接收数组变量 ,如checkobx类型    
request.getParameter(String   name)是获得相应名的数据,如果有重复的名,则返回第一个的值 . 接收一般变量 ,如text类型

如何取得wap和web用户的真实IP  [很好]

表现层、持久层、业务层    持久层概述

浅谈序列化与反序列化的理解

Java序列化机制和原理

java 字节流与字符流的区别  [很好]

ClassNotFoundException和NoClassDefFoundError的区别

Integer类介绍

Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)

Java中的java.math.BigDecimal的使用

Set 不重复实现原理

session和cookie的关系

Java 单例模式详解

java面试题及答案(基础题122道,代码题19道)

Java运行时异常与一般异常以及错误的异同 [很好]

Servlet激活器和缺省Servlet    Servlet激活器

理解java.util包--容器相关

java当中float以及double数据类型的掌握

在《Effective Java》这本书中也提到这个原则: float和double只能用来做科学计算或者是工程计算; 在商业计算中我们要用java.math.BigDecimal。

Java的4种代码块  java“块”的研究  javastatic块

非阻塞队列 和 阻塞队列

一次php和java的性能比拼

在相同的硬件下,如果单个jvm不能完全发挥硬件的性能,通过多个jvm的集群可以,而且会超过php。

http://www.anarres.org/projects/jperf/ 

一个完美哈希函数(PHF)的java实现,不过没说是否最小的(MPHF)。

对所以key事先已知,key不再变化的静态字典,(M)PHF能节省内存,同时保持或提高查询时间。

Java性能优化[2]:字符串过滤实战

Java新手进阶:细说引用类型

Google Guava Collections 使用介绍

消除Java应用中的Exception开销

抛异常最大的消耗在于构造整个异常栈的过程,如果你的栈很深,特别是用了一些框架的话,这个开销基本是不可忽视的,
最大开销的地方在这里,当你去new一个Exception的时候,会调用父类Throwable的构造函数,Throwable的构造函数中会调用native的fillInStackTrace(),这个方法就会构造整个异常栈了。
要优化这个地方,最简单的方案有两种:

1、去掉异常栈构造
2、去掉异常

---------------------Java线程--------------------------------------------------

Java 理论与实践: 正确使用 Volatile 变量

Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。

Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。
要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
对变量的写操作不依赖于当前值。
该变量没有包含在具有其他变量的不变式中。

与锁相比,Volatile 变量是一种非常简单但同时又非常脆弱的同步机制,它在某些情况下将提供优于锁的性能和伸缩性。
如果严格遵循 volatile 的使用条件 —— 即变量真正独立于其他变量和自己以前的值 —— 在某些情况下可以使用 volatile 代替 synchronized 来简化代码。然而,使用 volatile 的代码往往比使用锁的代码更加容易出错。

【Java线程】volatile的适用场景

把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性(atomicity)和 可见性(visibility)。
原子性意味着个时刻,只有一个线程能够执行一段代码,这段代码通过一个monitor object保护。从而防止多个线程在更新共享状态时相互冲突。
可见性则更为微妙,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的。
如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或不一致的值,这将引发许多严重问题。

 

volatile 变量不能用作线程安全计数器。虽然增量操作(x++)看上去类似一个单独操作,实际上它是一个由(读取-修改-写入)操作序列组成的组合操作,必须以原子方式执行,而 volatile 不能提供必须的原子特性。
实现正确的操作需要使x 的值在操作期间保持不变,而 volatile 变量无法实现这点。(然而,如果只从单个线程写入,那么可以忽略第一个条件。)

volatile的适用场景
模式 #1:状态标志
也许实现 volatile 变量的规范使用仅仅是使用一个布尔状态标志,用于指示发生了一个重要的一次性事件
而如果使用 synchronized 块编写循环要比使用 volatile 状态标志编写麻烦很多。由于 volatile 简化了编码,并且状态标志并不依赖于程序内任何其他状态,因此此处非常适合使用 volatile。
这种类型的状态标记的一个公共特性是:通常只有一种状态转换;shutdownRequested 标志从false 转换为true,然后程序停止。

【Java线程】锁机制:synchronized、Lock、Condition

java synchronized详解

---------------------Java json---------------------------------------

Json:JSON net.sf.json

--------------------Java泛型相关----------------------------

java 泛型详解  [很全面]
Java使用泛型编程提取类名上T类型
JAVA 泛型 - Class<T>
java泛型T.class的获取

-----------------------JTA-------------------------------------------

JTA 深度历险 - 原理与实现

JTA入门

-----------------------JNDI-----------------------------------------------

初识JNDI

Java命名和目录接口(Java Naming and Directory Interface ,JNDI)是用于从Java应用程序中访问名称和目录服务的一组API。命名服务即将名称与对象相关联,以便能通过相应名称访问这些对象。而目录服务即其对象具有属性及名称的命名服务。 
命名或目录服务允许您集中管理共享信息的存储,这在网络应用程序中很重要,因为它可以使这类应用程序更加一致和易于管理。例如,可以将打印机配置存储在目录服务中,这样所有与打印机相关的应用程序都能够使用它。

读完这个我懂了JNDI 

java 关于Lookup的用法

JNDI全面总结

-------------------Apache Commons-----------------------------------------------

common-lang工具类

Apache Commons Pool试用小记

Apache Common Pool的使用

Apache Common Pool包括很多已经实现的Pool,常用的Pool有GenericObjectPool,GenericKeyedObjectPool。

Apache Commons-Pool 源码分析

Commons-Pool首先定义了池管理方面的API,并考虑了多线程,多种数据结构,内容不足等情况。
其次它为我们提供一个同时管理多个池的解决方案。
留给使用者,主要就是PoolableObjectFactory与KeyedPoolableObjectFactory。
只要使用者将对象的生成,销毁,验证,激活与钝化做好,做到完善,没有歧义(比如什么样的状态算是激活,什么是钝化后的状态),那剩下的就可以放心的交给Commons-Pool来管理你的池了。
最好的一个例子也算是官方例子吧,就是Commons-DBCP(数据库连接池)。


采用对象池化的本意,是要通过减少对象生成的次数,减少花在对象初始化上面的开销,从而提高整体的性能。然而池化处理本身也要付出代价,因此,并非任何情况下都适合采用对象池化。
Dr. Cliff Click在JavaOne 2003上发表的《Performance Myths Exposed》中,给出了一组其它条件都相同时,使用与不使用对象池化技术的实际性能的比较结果。他的实测结果表明:
 
对于类似Point这样的轻量级对象,进行池化处理后,性能反而下降,因此不宜池化;
对于类似Hashtable这样的中量级对象,进行池化处理后,性能基本不变,一般不必池化(池化会使代码变复杂,增大维护的难度);
对于类似JPanel这样的重量级对象,进行池化处理后,性能有所上升,可以考虑池化。
 
根据使用方法的不同,实际的情况可能与这一测量结果略有出入。在配置较高的机器和技术较强的虚拟机上,不宜池化的对象的范围可能会更大。不过,对于像网络和数据库连接这类重量级的对象来说,目前还是有池化的必要。
基本上,只在重复生成某种对象的操作成为影响性能的关键因素的时候,才适合进行对象池化。如果进行池化所能带来的性能提高并不重要的话,还是不采用对象池化技术,以保持代码的简明,而使用更好的硬件和更棒的虚拟机来提高性能为佳。

------------------------------------------------------------------

JMS

JMS是一系列的接口及相关语义的集合,通过这些接口和和其中的方法,JMS客户端如何去访问消息系统,完成创建、发送、接收和读取企业消息系统中消息。

深入浅出JMS(一)——JMS简介

-------------------------------------------------------------------

JMX

(对 JVM 和系统的监测,Sun 公司也在其 Java SE 5 版本中,正式提出了 Java 管理扩展(Java Management Extensions,JMX)用来管理检测 Java 程序(同时 JMX 也在 J2EE 1.4 中被发布))

JMX 入门例子

Java SE 6 新特性: JMX 与系统管理

【JMX】1. 什么是JMX、JDK中的JMX实现

JMX是一种JAVA的正式规范,它主要目的是让程序且有被管理的功能

------------------------------------------------------------------

JPA

http://www.objectdb.com/

JPA入门例子(采用JPA的hibernate实现版本)

-----------------------------------------------------------------

Netty

Netty简介

本质:JBoss做的一个Jar包
目的:快速开发高性能、高可靠性的网络服务器和客户端程序
优点:提供异步的、事件驱动的网络应用程序框架和工具,统一的API,适用于不同的协议(阻塞和非阻塞)
通俗的说:一个好使的处理Socket的东东

如果没有Netty?
远古:java.net + java.io
近代:java.nio
其他:Mina,Grizzly

1、都是Trustin Lee的作品,Netty更晚;
2、Mina将内核和一些特性的联系过于紧密,使得用户在不需要这些特性的时候无法脱离,相比下性能会有所下降,Netty解决了这个设计问题;
3、Netty的文档更清晰,很多Mina的特性在Netty里都有;
4、Netty更新周期更短,新版本的发布比较快;
5、它们的架构差别不大,Mina靠apache生存,而Netty靠jboss,和jboss的结合度非常高,Netty有对google protocal buf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi);
6、Netty比Mina使用起来更简单,Netty里你可以自定义的处理upstream events 或/和 downstream events,可以使用decoder和encoder来解码和编码发送内容;
7、Netty和Mina在处理UDP时有一些不同,Netty将UDP无连接的特性暴露出来;而Mina对UDP进行了高级层次的抽象,可以把UDP当成"面向连接"的协议,而要Netty做到这一点比较困难。

-----------------------------------------------------------------

OSGI

基于 OSGi 和 Spring 开发 Web 应用

-------------------------------------------------------------------

Disruptor

Disruptor原理剖析

Java并发框架剖析--Disruptor_51CTO.COM

剖析Disruptor:为什么会这么快?(三)伪共享

剖析Disruptor:为什么会这么快?(一)锁的缺点

剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充

剖析Disruptor:为什么会这么快?(四)揭秘内存屏障

------------------------------------------------------------------

dom4j

dom4j解析和处理xml文档

dom4j学习总结(一)

dom4j学习总结(二)

使用Dom4j解析XML

----------------------听课笔记----------------------------------

方立勋java学习笔记 [经典]

方立勋Java Web听课笔记--Tomcat

方立勋Java Web听课笔记--Servlet

方立勋Java Web听课笔记--Request--Response对象

方立勋Java Web听课笔记--Cookie---Session

方立勋Java Web听课笔记--JSP

方立勋Java Web听课笔记--JavaBean

方立勋Java Web听课笔记--sql增删改查

方立勋Java Web听课笔记--JDBC对MYSQL的应用preparedStatement和Statement的区别

方立勋Java Web听课笔记JDBC--分页、三种连接池DBCP/C3P0/TOMCAT自带的连接池

方立勋Java Web听课笔记JDBC续-可滚动的结果集-批处理-事务-JDBC执行存储过程

方立勋Java Web听课笔记十四日知识点回顾-自动获取主键-resultSet结果集的滚动

方立勋Java Web听课笔记-DBUtils-QueryRunner-ReslutSetHandler-JDBC多表操作

方立勋Java Web听课笔记-文件上传和下载-ServletFileUpload-解决上传中文乱码问题

方立勋Java Web听课笔记-ServletFilter过滤器-FilterChain过滤器链Filter生命周期

方立勋Java Web听课笔记-映射Filter-Decorator(装饰器模式)-利用Filter对数据压缩(GZIP

方立勋Java Web听课笔记-JavaWeb总结

-----------------Java EE容器---------------------------------

四大Java EE容器(Tomcat、JBoss、Resin、Glassfish)之简单比较

----------------apache commons包简介----------------------------

commons.apache.org

apache commons包简介

--------------------------------------------

并发编程网 - ifeve.com

Java字节码浅析(—)
Java字节码浅析(二)

面向GC的Java编程

JVM 实用参数-5 新生代垃圾回收

-------------------------性能分析----------------------------------

Java 性能分析工具

全功能的Java剖析工具(profiler)

常用Java Profiling工具的分析与比较

tomcat 产生heapdump文件配置

Yourkit Java Profiler 使用说明

性能分析软件之yourkit入门介绍

利用JProfiler对应用服务器内存泄漏问题诊断

Java几款性能分析工具的对比

Yourkit Java Profiler 使用说明

Yourkit Eclipse 3.5 plugin installation
Yourkit 使用说明

性能分析软件之yourkit入门介绍

BTrace使用总结

动态跟踪Java代码的执行状况工具--BTrace

jstat的使用方法 -- 分析JVM的使用情况

-----------------------------------------------------

protostuff

protostuff 是一个支持各种格式的一个序列化Java类库,包括 JSON、XML、YAML等格式。

http://code.google.com/p/protostuff/

java的序列化lib protostuff

Java序列化框架自测

java内置的序列化方式性能 protostuff

我们这样做Java Profiling

Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发

在Android 开发中使用Protobuf的实践和经验分享

protobuf简介

Protobuf最好的入门教程

开源点评:Protocol Buffers介绍

---------------------------------------------------------

dyuproject

dyuproject 包含一个基于Servlet的REST框架、OpenID 2.0 的RP实现、oauth 1.0a consumer and service provider, json-ioc

---------------------------------------------------------

MessagePack

是一个基于二进制高效的对象序列化Library用于跨语言通信。MessagePack主要用于结构化数据的缓存和存储:

1.存在Memcache中,因为它比json小,可以省下一些内存来,速度也比json快一些.2.存在可以持久化的Key-val存储中。

msgpack

新型序列化类库MessagePack,比JSON更快、更小的格式

--------------------------------------------------------

jedis

Redis的Java客户端 Jedis

Jedis 2.1在线文档API [不错]

--------------------------------------------------------

Maven

中心仓库地址http://search.maven.org

maven常见问题问答

maven 教程一 入门

Maven实战(一)安装与配置

Maven实战(二)构建简单Maven项目

Maven实战(三)Eclipse构建Maven项目   [很好]

Maven实战(四)生命周期

Maven实战(五)坐标详解

Maven实战(六)依赖

Maven实战(七)settings.xml相关配置

Maven常用命令

Maven使用

Maven2的配置文件settings.xml

maven 配置篇 之 settings.xml

Maven3实战笔记01环境配置与使用入门

Maven3实战笔记02坐标和依赖--1

Maven3实战笔记02坐标和依赖--2

Maven3实战笔记03Maven仓库

Maven3实战笔记04Maven的生命周期和插件

Maven3实战笔记05仓库依赖解析与插件解析

Maven3实战笔记06聚合

Maven3实战笔记07继承

Maven3实战笔记08Maven反应堆

Maven3实战笔记09Maven的私服-Nexus常用功能

Maven3实战笔记10使用Maven进行测试

Maven3实战笔记13Maven Profile定制化构建

Maven3实战笔记14Maven生成项目站点

Maven3实战笔记16Maven总结

为你的maven2项目配置资源库

Maven3 安装使用(一)

Maven3 安装使用(二)

Maven3 安装使用(三)--搭建公司局域网maven服务器

Windows 下Nexus搭建Maven私服

---------------------------------------------------------

Struts

使用Maven创建struts2工程(注解版)

---------------------------------------------------------

Hibernate

Hibernate使用技巧

Spring Framework Tutorial – Hello World

---------------------------------------------------------

Spring

Spring 注解学习手札

Spring三种实例化Bean的方式

Spring2.5依赖注入方式(DI)

使用Maven配置spring

Spring Bean的作用域

Spring中ApplicationContext的三种不同实现

spring每次getBean(),获得的是否是同一个实例

Spring bean的Scope分析

Spring学习--Bean的scope

spring scope="prototype" 学习笔记

Spring ClassPathXmlApplicationContext和FileSystemXmlApplicationContext

掌握Spring中bean的生命周期

spring bean的生命周期

Spring 3.0 注解注入详解

Spring集合注入

--------------------------------------------------------

iBatis/MyBatits

iBatis简单入门教程

===========函数式编程======================

Haskell

Haskell 几乎无痛苦上手指南

为什么业界很少使用 Haskell?

也许,照耀大地的永远是在众恒星中普普通通的太阳,人们永远不会知道在宇宙的某个角落里曾经诞生过一颗绝美无比的小星星。

--------------------------------------------------------

Scheme

Scheme 语言概要(上)

Scheme 语言概要(下)

与Scheme共舞

Scheme语言简明教程

=================================

Hadoop

HDFS原理分析:基本概念

从HDFS看分布式文件系统的设计需求

小议Hadoop HDFS Balancer

Hadoop 新 MapReduce 框架 Yarn 详解

Hadoop Hive与Hbase整合

你的flume-ng的第一篇博客

Flume 1.4.0 User Guide

Oozie简介

NoSQL反模式 - 文档数据库篇

利用Cloudera实现Hadoop

Hadoop Streaming 编程 [董西成]

Hadoop Streaming

Hadoop中一个distcp

HBase安装笔记一Hadoop

Hadoop中国用户组(HCUG)[北京]2013第1次[总第1次]线下交流活动  [视频]

Hadoop2.2.0安装配置手册

hdfs: 一个分布式文件系统(一)    [易懂]

hdfs: 数据流(二)    [易懂]

从wordcount 开始 mapreduce (C++\hadoop streaming模式)    [易懂]

MapReduce工作原理图文详解

更快、更强——解析Hadoop新一代MapReduce框架Yarn

H-MapReduce源码解析

HDFS之SequenceFile和MapFile

HBase之Java API

Hadoop简介(1):什么是Map/Reduce

mapreduce编程模型

MapReduce 编程模型概述

彻底了解mapreduce核心Shuffle--解惑各种mapreduce问题

学习Hadoop不错的系列文章

Hadoop集群(第9期)_MapReduce初级案例

Hadoop集群(第8期)_HDFS初探之旅

------------------------------------------------

Hbase

hbase 介绍

HBase技术介绍

Hadoop集群(第7期)_Eclipse开发环境设置

HBase 源码本地调试

Apache HBase快照介绍

为Hbase建立高可用性多主节点

HBase安装笔记

大数据处理的基础环境(三)——HBase集群搭建

================================

Zookeeper

ZooKeeper Java Example

Distributed Coordination with Zookeeper

ZooKeeper-李建斌[很好很全]

zookeeper学习记录[很好]

分布式服务框架 Zookeeper -- 管理分布式环境中的数据

zookeeper学习记录  [很好]

ZooKeeper系列之二:ZooKeeper数据模型、命名空间以及节点的概念

利用ZooKeeper服务实现分布式系统的配置数据同步

架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)

架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)

zookeeper原理与安装

分布式网站架构后续:zookeeper技术浅析

Google利器之Chubby  [非常好懂]

Apache Zookeeper入门1

HBase安装笔记一Zookeeper

ZooKeeper安装与操作实例

大数据处理的基础环境(一)——zookeeper集群环境搭建

zookeeper的集群模式下的安装和配置

zookeeper 集群安装(单点与分布式成功安装)摘录

Zookeeper 的学习与运用

--------------Cassandra-------------------------------

cassandra入门 框架模型 总结

分布式 Key-Value 存储系统:Cassandra 入门


==================================

Storm

flume+kafka+storm+mysql 数据流

实时计算storm流程架构总结

Storm-0.9.0.1版本安装部署

Storm集群安装部署步骤【详细版】

Storm与Spark、Hadoop相比是否有优势

Storm与Spark、Hadoop相比是否有优势?
Storm与Spark、Hadoop这三种框架,各有各的优点,每个框架都有自己的最佳应用场景。
所以,在不同的应用场景下,应该选择不同的框架。

Storm是最佳的流式计算框架,Storm由Java和Clojure写成,Storm的优点是全内存计算,所以它的定位是分布式实时计算系统,按照Storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。
Storm的适用场景:
1)流数据处理
Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。
2)分布式RPC。由于Storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式RPC框架来使用。

SparkSpark是一个基于内存计算的开源集群计算系统,目的是更快速的进行数据分析。Spark由加州伯克利大学AMP实验室Matei为主的小团队使用Scala开发开发,类似于Hadoop MapReduce的通用并行计算框架,Spark基于Map Reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的Map Reduce的算法。
Spark的适用场景:
1)多次操作特定数据集的应用场合
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。
2)粗粒度更新状态的应用
由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如Web服务的存储或者是增量的Web爬虫和索引。就是对于那种增量修改的应用模型不适合。
总的来说Spark的适用面比较广泛且比较通用。

Hadoop是实现了MapReduce的思想,将数据切片计算来处理大量的离线数据数据。Hadoop处理的数据必须是已经存放在HDFS上或者类似HBase的数据库中,所以Hadoop实现的时候是通过移动计算到这些存放数据的机器上来提高效率。
Hadoop的适用场景:
1)海量数据的离线分析处理
2)大规模Web信息搜索
3)数据密集型并行计算

=================================

Kafka消息队列

Kafka 起步

Apache Kafka系列之Kafka介绍

Apache Kafka系列之Kafka设计细节

Big Data Architecture Kafka FlumeNG Storm HBase 张鑫 [很好]

大数据处理的基础环境(四)——kafka环境搭建

Kafka学习笔记

Kafka开发环境搭建

Kafka分布式环境搭建

分布式消息系统Kafka初步

kafka第四篇--快速入门(如何使用kafka)

快速理解Kafka分布式消息队列框架

分布式消息队列(Message Queue)系统:kafka

RabbitMQ和kafka从几个角度简单的对比

flume-ng+Kafka+Storm+HDFS 实时系统搭建

==================================

RabbitMQ

RabbitMQ源码解析前奏系列

==================================

ZeroMQ

高性能的通讯库-zeroMQ的几个高性能特征

==================================

Thrift

PHP通过Thrift操作Hbase

thrift的使用介绍

thrift 轻松实现多语言跨服务器通信

开源点评:Protocol Buffers介绍

php实现的thrift socket server

Apache Avro 与 Thrift 比较

==================================

Scala

使用SBT构建Scala应用

==================================

scribe

Scribe安装

==================================

Android

Android 内存剖析 – 发现潜在问题

=================================

Swift语言

Apple Swift编程语言入门教程

=================================

.NET

一个简单的.NET MVC 实例

================================

Ruby on  Rails

Ruby on Rails 實戰聖經

Ruby on Rails 指南

================================

其他服务器开发

网站加速--服务器编写篇(上)
网站加速--服务器编写篇 (下)

网站加速--动态应用篇 (上)
网站加速--动态应用篇 (下)

lighttpd1.4.18代码分析(一)--watcher,worker模型

Tokyocabinet/Tokyotyrant文档大合集

Tokyo Cabinet 安装

请注意Tokyo Tyrant (ttserver)在大数据量下的不稳定

kmemcache源码浅析

乱谈服务器编程

HAProxy内存池实现源码分析

Best Practices for Speeding Up Your Web Site

MongoDB源码概述——内存管理和存储引擎

NetBeans的远程Linux C开发实践

Apache 2.2 中文手册

千万级并发实现的秘密:内核不是解决方案,而是问题所在

================================

监控

配置snmp服务,安装mrtg流量监控

使用Cacti监控你的网络(一)- Cacti概述及工作流程

使用Cacti监控你的网络(二)- Cacti的安装

===============================

网络安全

数字签名是什么?

Web安全测试之XSS

常见的hash函数 :-D 非常经典!!

HMAC-MD5算法原理及实现

HMAC

HMAC算法安全性浅析

基于SHA-256的HMAC文件校验器

淘宝全站HTTPS 百万页面改造技术细节大起底

https原理  原文:图解HTTPS 【画图不错】

RSA性能是非常低的,原因在于寻找大素数、大数计算、数据分割需要耗费很多的CPU周期,所以一般的HTTPS连接只在第一次握手时使用非对称加密,通过握手交换对称加密密钥,在之后的通信走对称加密。

我的理解

1.客户端发起请求,服务器给公钥A+;

2.客户端拿到公钥A+,用A加密随机数B-发给服务器;

3.服务器用私钥A-解密随机数B-,得到B-,给客户端回馈;

4.客户端用B-加密信息发给服务器;

5.服务器用B-解密信息。

HTTPS证书生成原理和部署细节

HTTPS原理 【写的很好】

客户端发出安全会话请求(会同时将自己支持的一套加密规则发送给服务器)
服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给客户端。证书里面包含了服务器地址,加密公钥,以及证书的颁发机构等信息。
客户端获得服务器CA证书之后浏览器要做以下工作:
用已知的CA列表来验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示,让用户选择自担风险。
如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机对称密钥,并用证书中提供的公钥加密。
使用约定好的HASH算法计算握手消息,并使用生成的随机对称密钥对消息进行加密,最后将之前生成的所有信息发送给服务器。
服务器接收客户端发来的数据之后要做以下的操作:
使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
使用对称密钥加密一段握手消息,发送给客户端。
客户端解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前客户端生成的随机对称密钥并利用对称加密算法进行加密。


证书的合法性是通过证书的颁发机构权威性保证的。这引出了一个问题:怎么确保是合法的颁发机构呢?


系统有配置所谓的权威机构,就是CA root,这是安装系统时就配置在电脑上。(所以不要随便安装盗版操作系统,也不要随便安装不受信任的证书)
权威机构有级联性,即,如果证书是被机构B认证的,而机构B的证书被CA root认证,则证书也是受信的。这就是所谓的证书链(certification chain)


证书的常见格式


PKCS标准体系
X509为最常见的实现
证书最常见的后者名:cer, p12, crt, p7b
HTTPS一般使用的加密与HASH算法


对称加密算法:AES,RC4,3DES。速度快,但需要双方交换或者保存密钥,风险大。
非对称加密算法:RSA,DSA/DSS。不需要双方交换或者保存密钥,但是速度奇慢。
HASH算法:MD5,SHA1,SHA256。
一般来说服务器使用RSA非对称加密算法来生成公钥和私钥(CA证书)。
但是RSA性能是非常低的,原因在于寻找大素数、大数计算、数据分割需要耗费很多的CPU周期,所以一般的HTTPS连接只在第一次握手时使用RSA非对称加密,通过握手交换对称加密密钥,在之后的通信走对称加密。


HTTPS其实是两个过程来的


客户端通过CA证书认证服务器是否合法
双方交换对称密钥的过程(由客户端发起,具体是前面提到的5个步骤)
在每一个步骤,都有可能被伪造和欺骗。


第一个过程可以伪造证书来欺骗,所以强烈建议只安装信任机构颁发的证书(浏览器不会提醒风险的那种)。
比如12306要求安装它自己制造的证书,如果安装了,12306就能伪装google,不装12306,他就伪装不了。所以是有风险的。
第二个过程如果服务端私钥泄漏了,那么也交换私钥的过程虽然是用服务器公钥加密,也相当于明文传输了,这时候证书就可能被伪造。随后的通信过程当然也无安全可言。
此时,CA需要更换私钥和公钥,并申明所有下级CA和使用者的证书过期(revocation list)。随后,把所有过期证书重新用新的私钥签名。
在第二个过程中,很容易出错的一个步骤是步骤三:
客户端获得服务器CA证书之后浏览器要做以下工作: 
1. 用已知的CA列表来验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示,让用户选择自担风险。 
2. 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机对称密钥,并用证书中提供的公钥加密。 
3. 使用约定好的HASH算法计算握手消息,并使用生成的随机对称密钥对消息进行加密,最后将之前生成的所有信息发送给服务器。

使用fiddler模拟http请求

SSL协议详解

HTTPS那些事(二)SSL证书(转载)

SSL证书可以向CA机构通过付费的方式申请,也可以自己制作。

证书以证书链的形式组织,在颁发证书的时候首先要有根CA机构颁发的根证书,再由根CA机构颁发一个中级CA机构的证书,最后由中级CA机构颁发具体的SSL证书。
我们可以这样理解,根CA机构就是一个公司,根证书就是他的身份凭证,每个公司由不同的部门来颁发不同用途的证书,这些不同的部门就是中级CA机构,这些中级CA机构使用中级证书作为自己的身份凭证,
其中有一个部门是专门颁发SSL证书,当把根证书,中级证书,以及最后申请的SSL证书连在一起就形成了证书链,也称为证书路径。
在验证证书的时候,浏览器会调用系统的证书管理器接口对证书路径中的所有证书一级一级的进行验证,只有路径中所有的证书都是受信的,整个验证的结果才是受信。


根证书是最关键的一个证书,如果根证书不受信任,它下面颁发的所有证书都不受信任。操作系统在安装过程中会默认安装一些受信任的CA机构的根证书,可以在“运行”里面运行“certmgr.msc”启动证书管理器

===============================

OAuth

OAuth 2.0系列教程(十一) 客户端证书请求和响应

OAuth 2.0系列教程(十) 资源拥有者密钥证书授权请求和响应

OAuth 2.0系列教程(九) 契约请求和响应

OAuth 2.0系列教程(八) 授权码授权

OAuth 2.0系列教程(七) 请求和响应

OAuth 2.0系列教程(六) 端点

OAuth 2.0系列教程(五) 授权

OAuth 2.0系列教程(四) 客户端类型

OAuth 2.0系列教程(三) 角色

OAuth 2.0系列教程(二) 综述

OAuth 2.0系列教程(一)引言

================================

前端开发

http://www.igvita.com/  [老外个人站点技术和牛]

浏览器的工作原理:现代网络浏览器幕后揭秘 - HTML5 Rocks

Web 前后端分离的意义大吗?

这两年业界说的前后端分离,是限于偏展示类的系统(用A代替),而不是应用、管控类Web项目(用B代替),在B类项目里,前后端是天然分离的,对此,除了少部分后端开发人员,基本所有人的认识都是一致的。


讨论A类项目的前后端分离。
这个问题的核心在什么地方呢,在于模板的与数据结合的位置,以及,模板的控制权在谁手里。
经过这两年的讨论,基本上我们可以达成的共识就是:模板应当由前端人员去控制,
主要原因有两方面:- 性能优化(尤其是外部资源的管理与发布,请求合并等等)- 协作的顺畅性(已形成模板的界面片段的返工等问题)那么,模板到底应该在什么地方跟数据结合?
这个问题就比较折腾了,有部分人尝试像B类项目那样,使用js模板,然后在浏览器端执行,这是存在一些问题的,比如说seo不友好,首屏性能不够,尤其对于首页DOM量很大的电商类网站,差距很明显。


所以我们还是得把主要的模板放在服务端来执行。
在这个过程中,阿里作了一些尝试,那就是引入Node层,在这一层把模板与数据进行合成,然后浏览器拿到的就是生成好的HTML了,但也不是所有HTML都是这么生成好的,还是会有一些内容等到了浏览器之后,再用js去加载和生成。
所以这一定会是一个混合方案,同一个系统中存在两种模板,一种在服务端执行,一种在浏览器中执行,互为补充。
至于说这个方案中,是否中间层一定要是node,我觉得无所谓,只要是能正常做web项目的东西都可以,这个还是要看所在企业的技术积累方向,
当然node做这块是有一些优势的,比如对前端人员的语言友好性,前后端模板的通用性等等,但这些都是细节,重点还是整体方案和流程。

从MVC到前后端分离

我们输入的是AJAX请求,输出的是JSON数据,市面上有这样的技术来实现这个功能吗?答案是REST。

浅谈Web缓存

页面的缓存状态是由header决定的,header的参数有四种:
一、Cache-Control:
    1、max-age(单位为s)指定设置缓存最大的有效时间,定义的是时间长短。当浏览器向服务器发送请求后,在max-age这段时间里浏览器就不会再向服务器发送请求了。

2、s-maxage(单位为s)同max-age,只用于共享缓存(比如CDN缓存)。
比如,当s-maxage=60时,在这60秒中,即使更新了CDN的内容,浏览器也不会进行请求。也就是说max-age用于普通缓存,而s-maxage用于代理缓存。如果存在s-maxage,则会覆盖掉max-age和Expires header。
3、public 指定响应会被缓存,并且在多用户间共享。也就是下图的意思。如果没有指定public还是private,则默认为public。
4、private 响应只作为私有的缓存(见下图),不能在用户间共享。如果要求HTTP认证,响应会自动设置为private。
5、no-cache 指定不缓存响应,表明资源不进行缓存
但是设置了no-cache之后并不代表浏览器不缓存,而是在缓存前要向服务器确认资源是否被更改。因此有的时候只设置no-cache防止缓存还是不够保险,还可以加上private指令,将过期时间设为过去的时间。
6、no-store 绝对禁止缓存,一看就知道如果用了这个命令当然就是不会进行缓存啦~每次请求资源都要从服务器重新获取。
    7、must-revalidate指定如果页面是过期的,则去服务器进行获取。这个指令并不常用,就不做过多的讨论了。
二、Expires
    缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。也就是说,Expires=max-age + 请求时间,需要和Last-modified结合使用。
但在上面我们提到过,cache-control的优先级更高。 Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。
三、Last-modified 
        服务器端文件的最后修改时间,需要和cache-control共同使用,是检查服务器端资源是否更新的一种方式。
当浏览器再次进行请求时,会向服务器传送If-Modified-Since报头,询问Last-Modified时间点之后资源是否被修改过。
如果没有修改,则返回码为304,使用缓存;如果修改过,则再次去服务器请求资源,返回码和首次请求相同为200,资源为服务器最新资源。
四、ETag
        根据实体内容生成一段hash字符串,标识资源的状态,由服务端产生。浏览器会将这串字符串传回服务器,验证资源是否已经修改

================================

协程

Golang适合高并发场景的原因分析

风格之争:Coroutine模型 vs 非阻塞/异步IO(callback)  协程

说说一个新的老概念coroutine

Coroutine实现有感

Coroutines in C
在C语言中实现coroutine

Lua coroutine 不一样的多线程编程思路

Coroutine介绍

进程线程以及协程

-----------------------------------------

SEDA架构

SEDA: An Architecture for Highly Concurrent Server Applications

SEDA架构笔记  SEDA架构

SEDA性能优化的分析和模拟

SEDA介绍与分析

适于互联网的SEDA高并发架构

---------------------------------------

Rest 面向资源的架构

rest

REST wiki

REST是什么

---------------------------------------

SOA

Dubbo是阿里巴巴SOA服务化治理方案的核心框架

-------------------------------------

架构

知名互联网公司网站架构图

Bitmap的秘密

===============================

视频

HTTP Live Streaming (HLS) 不错的视频直播技术

M3U8文件简介

M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。

===============================

代码阅读工具

使用doxygen为C/C++程序生成中文文档(上)

doxygen使用详解

代码阅读分析工具Understand 2.0试用

Notepad++文本比较插件:Compare

=================================

编译原理

怎样写一个解释器 [王垠]

王垠的「40 行代码」

理解Continuation和CPS(Continuation Passing Style)

JavaScript中的后续传递风格

我和Google的故事

一些中文编程语言

太极语言

=================================

计算机网络

DNS 查询的工作原理

阿里为什要推出alidns? 有哪些好用的dns?  很好的讲了架构

=================================

编码解码

Base64编码及其作用

Base64 介绍及作用

=================================

HTTP协议

HTTP协议 (一) HTTP协议详解

HTTP协议 (二) 基本认证

HTTP协议 (三) 压缩

HTTP协议 (四) 缓存

HTTP协议 (五) 代理

HTTP协议 (六) 状态码详解

HTTP协议 (七) Cookie

[Fiddler教程]

12306在线买火车票为什么需要安装根证书

=================================

代码分析

linux环境下 C++性能测试工具 gprof + kprof + gprof2dot

http://code.google.com/p/gperftools/

关于gperftools

Google performance Tools (gperftools) 使用心得

使用 cloc 统计代码行数   [cloc统计代码非常好]

sublime_text2    可以画图

Graphviz+doxygen  对象调用图

=================================

Oracle

Oracle索引——索引类型

=================================

Sqlserver

查看sqlserver的端口号

======================

微信开发

微信公众平台开发入门教程

=================================

goagent软件使用:

http://tieba.baidu.com/p/2276442741

==================================

PowerDesigner

PowerDesigner逆向获取数据库字典文件
PowerDesigner连接MySQL,建立逆向工程图解 
powerdesigner连接mysql,并导出其数据模型的方法

PowerDesigner 概念数据模型(CDM) 说明

===============================

Notepad++

Notepad++插件使用技巧

代码格式化插件:UniversalIndentGUI

===============================

SVN

svn的merge使用例子  [很好]

R​e​v​i​e​w​b​o​a​r​d​+​S​t​r​i​c​t​R​e​v​i​e​w​S​c​r​i​p​t​使​用​方​法​图​解

使用Jenkins搭建持续集成(CI)环境

SVN - 主干/分支 [很好]

================================

Git

Git 版本控制

http://pcottle.github.io/learnGitBranching/?demo

================================

综合

量子恒道 [重在数据分析 storm/hbase等]

欢迎访问HUFAN的blog -- 工作笔记

余旭

================================

好书

《Self-Service Linux》

http://book.douban.com/subject/2666819/

机械工业出版社:计算机科学丛书

电子工业出版社:国外计算机科学教材系列

清华大学出版社:世界著名计算机教材精选

国外经典教材·计算机科学与技术

 国外计算机科学经典教材

高等教育出版社:国外优秀信息科学与技术系列教学用书  

中国电力出版社:国外经典计算机科学教材

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页