Thread Pool Executor 运行细节
先说说线程池本身, 由于线程资源本身在计算机中比较昂贵, 创建和销毁都有相当的开销, 所以在一些处理简单但是并发量大的场景使用一个请求对应一个线程的是不明智的选择. ThreadPoolExecutor是Java中线程池的一种实现. 构造函数如下: ...
先说说线程池本身, 由于线程资源本身在计算机中比较昂贵, 创建和销毁都有相当的开销, 所以在一些处理简单但是并发量大的场景使用一个请求对应一个线程的是不明智的选择. ThreadPoolExecutor是Java中线程池的一种实现. 构造函数如下: ...
比较Raft算法和Paxos算法之后,确实能感受到Raft算法更加接近正常人的思维逻辑, Paxos反而比较专业? 本文会说一些Raft算法实现上的一些考量, 我目前还没有正式开始开发Raft的实现. 文中所有的内容仅供参考. ...

有一段时间没有玩过GALGAME了. 所以就去尝试玩了Kanon. 总之就是, 非常后悔.
CMU Database System 15-445/645 储存 Part 1 数据库存储的数据在 FS(File System) 中是以 块(Block) 的方式表示的. 实际上你很可能已经见到过了,在MySQL中的数据库就是以一切Block文件的方式存储的. 这篇文章会告诉你目前常见的数据库存储方式. 最开始用Tuple Storage来尝试改善数据库的存储结构. ...
半年前在研究HashMap的时候已经学习过红黑树的规则原理了. 不过现在又遇到就忘记是怎么实现的了.(只知道这玩意是用来平衡树的) 这次就把这个数据结构做一个了断. 性质 性质1:每个节点要么是黑色,要么是红色。 性质2:根节点是黑色。 性质3:每个叶子节点(NIL)是黑色。 性质4:每个红色结点的两个子结点一定都是黑色。 性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。 满足这5个性质就能保证红黑树是平衡的. ...
这是 MIT 6.824 课程GFS部分的一些总结. GFS (Google File System) 是Google为了管理海量数据而开发的一个分布式文件系统. 直接进入正题. 在GFS中文件是以Chunk的形式存储。所谓的Chunk是一个储存块。一个Chunk的大小为64MB.一个文件会分为多个Chunk.储存在不同的服务器里。当然也会有2-3份Chunk的拷贝。 ...
第一代分布式系统采用的是中心化的系统,对于存贮大量数据的分布式系统来说它的缺点就是中央节点成为了整个个分布式系统的单点故障. 第二代分布式系统,节点之间通行采用的是广播,每个节点都向自己相连的所有节点进行询问,被询问的节点如果不知道这个文件在哪里,就再次进行广播……如此往复,直至找到所需文件。请求变多就意味着会产生广播风暴,这会严重占用带宽和系统资源。 ...
LOW 1if( isset( $_POST[ 'Submit' ] ) ) { 2 // Get input 3 $target = $_REQUEST[ 'ip' ]; 4 5 // 没有任何过滤 6 // 直接运行 ping $param 7 8 // 可以尝试运行各种奇怪的命令组合 9 // 输入 localhost && ls 10 11 // Determine OS and execute the ping command. 12 if( stristr( php_uname( 's' ), 'Windows NT' ) ) { 13 // Windows 14 $cmd = shell_exec( 'ping ' . $target ); 15 } 16 else { 17 // *nix 18 $cmd = shell_exec( 'ping -c 4 ' . $target ); 19 } 20 21 // Feedback for the end user 22 echo "<pre>{$cmd}</pre>"; 23} Medium 1if( isset( $_POST[ 'Submit' ] ) ) { 2 // Get input 3 $target = $_REQUEST[ 'ip' ]; 4 5 // Set blacklist 6 // 黑名单式过滤 7 $substitutions = array( 8 '&&' => '', 9 ';' => '', 10 ); 11 12 // 然而过滤的并不严谨 13 // 使用 localHost &&& ls 14 // 或者管道?(Linux) 15 // localhost | ls` 16 17 // Remove any of the charactars in the array (blacklist). 18 $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); 19 20 // Determine OS and execute the ping command. 21 if( stristr( php_uname( 's' ), 'Windows NT' ) ) { 22 // Windows 23 $cmd = shell_exec( 'ping ' . $target ); 24 } 25 else { 26 // *nix 27 $cmd = shell_exec( 'ping -c 4 ' . $target ); 28 } 29 30 // Feedback for the end user 31 echo "<pre>{$cmd}</pre>"; 32} High 1if( isset( $_POST[ 'Submit' ] ) ) { 2 // Get input 3 $target = trim($_REQUEST[ 'ip' ]); 4 5 // 过滤的更猛了 6 // Set blacklist 7 $substitutions = array( 8 '&' => '', 9 ';' => '', 10 '| ' => '', 11 '-' => '', 12 '$' => '', 13 '(' => '', 14 ')' => '', 15 '`' => '', 16 '||' => '', 17 ); 18 19 // 然而只过滤一遍 20 // localhost |||| 21 22 // Remove any of the charactars in the array (blacklist). 23 $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); 24 25 // Determine OS and execute the ping command. 26 if( stristr( php_uname( 's' ), 'Windows NT' ) ) { 27 // Windows 28 $cmd = shell_exec( 'ping ' . $target ); 29 } 30 else { 31 // *nix 32 $cmd = shell_exec( 'ping -c 4 ' . $target ); 33 } 34 35 // Feedback for the end user 36 echo "<pre>{$cmd}</pre>"; 37}