- 博客(74)
- 资源 (28)
- 收藏
- 关注
原创 java中的NIO
简介从JDK1.4开始,java中提供一个种叫NIO(Non-Blocking IO)的IO处理机制。与以往的标准IO机制(BIO,Blocking IO)不同的是,新的机制把重点放在了如何缩短抽象与现实之间的距离上面。NIO中提出了一种新的抽象,NIO 弥补了原来的BIO的不足,它在标准 Java 代码中提供了高速的、面向块的I/O。NIO的包括三个核心概念:缓冲区(Buffer)、通道(Chan
2016-11-29 18:39:13 686
原创 java中的注解(Annotation)
简介 注解,java中提供了一种原程序中的元素关联任何信息、任何元素的途径的途径和方法。注解是那些插入到源代码中使用其他工具可以对其进行处理的标签。注解不会改变程序的编译方式。java编译器会对包含注解与不包含注解的代码生成相同的虚拟机指令。在java中,注解是被当做修饰符(如public/static之类)来使用的。注解与注释注释是供人看的,注解是供程序调用的。一种是程序员写给另一个程序员的
2016-11-28 14:33:40 437
原创 junit4备忘录
简介JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 测试用例不是用来证明你(的逻辑)是对的,而是用来证明你(的断言)没有错。junit3与junit4区别在JUnit3中需要继承TestCase类,JUnit4不需要继承任何类;在JUnit3中需要覆盖TestCa
2016-11-26 21:34:13 409
原创 java中的内存模型
概述在java中应为不同的目的可以将java划分为两种内存模型:gc内存模型。并发内存模型。gc内存模型java与c++之间有一堵由内存动态分配与垃圾收集技术所围成的“高墙”。墙外面的人想进去,墙里面的人想出来。java在执行java程序的过程中会把它管理的内存划分若干个不同功能的数据管理区域。如图:整体上。分为三部分:栈,堆,程序计数器,他们每一部分有其各自的用途;虚拟机栈保存着每一条线程的执行程
2016-11-22 16:57:28 347
原创 一篇文章带你了解监控告警设计
“哎哎,XX,很多客服反馈这个业务挂了怎么回事,赶紧看看。” 正在安安静静写代码的你心头一颤,出问题了。赶紧打开业务链接看看,真出问题了,怎么办,怎么查问题?一脸闷逼。据说现代医学始于听诊器的发明,医生凭借该物收集放大从各个器官发出的声音以诊断问题。我一直喜欢把我们做后台做业务的,称之为在快速飞行的飞机上修零件。边飞边升级。。在飞机上有各种各样的仪表盘指示着各个模块的运行情况。如果没有这些...
2019-03-26 11:18:49 1589 1
原创 深入Java源码理解线程池原理
程序运行,其本质上,是对系统资源(CPU、内存、磁盘、网络等等)的使用。如何高效的使用这些资源是我们编程优化演进的一个方向。今天说的线程池是对CPU的利用的优化手段。网上有不少介绍如何使用线程池的文章,那我想说点什么呢?我希望查看线程池原理,明白池化技术的基本设计思路。遇到其他相似问题可以解决。池化技术何为池化技术,简单点来说,就是提前保存大量的资源,以备不时之需。在资源有限的情况下,该技术...
2018-10-08 11:21:22 273
原创 【180425】统一配置中心
对于配置文件,我们不陌生,它提供我们可以动态修改程序运行能力。引用别人的一句话就是: 系统运行时(runtime)飞行姿态的动态调整我可以把我们的工作称之为在快速飞行的飞机上修理零件。我们人类总是无法掌控和预知一切。对于我们系统来说,我们总是需要预留一些控制线条,以便在我们需要的时候做出调整,控制系统方向(如灰度控制、限流调整),这对于拥抱变化的互联网行业尤为重要。对于单机版,我们称...
2018-04-25 22:34:18 913
原创 【180414】分布式锁(redis/mysql)
单台机器所能承载的量是有限的,用户的量级上万,基本上服务都会做分布式集群部署。很多时候,会遇到对同一资源的方法。这时候就需要锁,如果是单机版的,可以利用java等语言自带的并发同步处理。如果是多台机器部署就得要有个中间代理人来做分布式锁了。常用的分布式锁的实现有三种方式。 + 基于redis实现(利用redis的原子性操作setnx来实现) + 基于mysql实现(利用mysql的inno...
2018-04-14 17:28:12 751
翻译 [译文]greenlet:轻量级并发程序
原文:https://greenlet.readthedocs.io/en/latest/博客地址:http://www.jianshu.com/u/5a327aab786a背景greenlet包是Stackless的衍生产品,它是一个支持微线程(叫tasklets)的CPython版本。Tasklets运行在伪并发模式下(通常在一个或少许的OS级别的线程),他们通过“channels”来交互数据。
2017-02-11 12:03:09 580
原创 2016年,我对爬虫的总结
都说年末了,该给自己写写总结了。今天我想谈一谈的是我在公司这一年多里的负责的部分工作—爬虫。做了这么久的爬虫,是该写点什么,留下点什么。在我所负责的这一段时间了。我总结了一下大概有以下几类爬虫设计思想。简单服务器定时爬虫客户端爬虫 lua解析javascript解析服务器离线爬虫下面在来细聊以下。服务器-定时简单爬虫在最开始的时候,我们做的就是这个。这应该是最简单的爬虫了。搜索引擎搜出来
2017-01-15 14:40:12 818
原创 java中的AIO
简介jdk7中新增了一些与文件(网络)I/O相关的一些api。这些API被称为NIO.2,或称为AIO(Asynchronous I/O)。AIO最大的一个特性就是异步能力,这种能力对socket与文件I/O都起作用。AIO其实是一种在读写操作结束之前允许进行其他操作的I/O处理。AIO是对JDK1.4中提出的同步非阻塞I/O(NIO)的进一步增强。关于NIO,之前的一篇文章可以看看:java中的N
2016-11-30 20:19:42 447
原创 java虚拟机故障处理工具
概述给系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。java开发人员可以在jdk安装的bin目录下找到除了java,javac以外的其他命令。这些命令主要是一些用于监视虚拟机和故障处理的工具。这些工具包括: 名称 主要作用 jps JVM process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程。通常是本地主机 j
2016-11-23 13:10:35 752
原创 查找-基于DFA的KMP字符串匹配
概述 基于DFA的KMP算法。是根据DFA状态转换表来实现。下面是java实现的代码理论关于kmp理论部分 1. 《算法》第4版。关于KMP算法讲解。 2. http://www.aichengxu.com/view/801445。 3. github上的某一种代码实现。可用于中文匹配的代码package StringSearch;import java.util.ArrayList;imp
2016-10-18 18:56:27 506
原创 字典树与三向字典树-java实现
引言用java实现的单词树与三向单词树。理论参考:单词查找树(Tries)Trie—单词查找树代码(java)package org.hirudy.practice;/** * @author: rudy * @date: 2016/08/15 * * 单词树,三向单词树 * */public class TriePractice { /** * 单词树类
2016-08-15 18:01:12 810
原创 红黑树-java实现
引言根据《算法》第4版。编写红黑树。理论参见:浅谈算法和数据结构: 八 平衡查找树之2-3树浅谈算法和数据结构: 九 平衡查找树之红黑树这些也是参考的《算法》特性红黑数事实上就是特殊的二叉排序树。 红黑树是一种具有红色和黑色链接的平衡查找树,同时满足: - 红色节点向左倾斜 - 一个节点不可能有两个红色链接 - 整个书完全黑色平衡,即从根节点到所以叶子结点的路径上,黑色链接的个
2016-08-15 11:56:06 341
原创 排序-java实现的选择/插入/希尔排序
引言用java实现的选择排序、插入排序、希尔排序。代码(java)package org.hirudy.practice;/** * @author: rudy * @date: 2016/08/10 * 选择排序,插入排序,希尔排序的java实现 */public class SortPractice { /** * 获取调用函数的函数名称 * @return
2016-08-11 09:11:25 322
转载 【转】PHP并发IO编程之路
原文链接:http://rango.swoole.com/archives/508一、引言并发IO问题一直是服务器端编程中的技术难题,从最早的同步阻塞直接Fork进程,到Worker进程池/线程池,到现在的异步IO、协程。PHP程序员因为有强大的LAMP框架,对这类底层方面的知识知之甚少,本文目的就是详细介绍PHP进行并发IO编程的各种尝试,最后再介绍Swoole的使用,深入浅出全面解析并发IO问题
2016-07-16 13:53:08 776
原创 python中嵌入lua解析器
一、引言上一周应该某个特殊需求。需要在服务器端搭建一个lua执行环境。lua本身又是嵌入语言。在语言本身上又一定的局限性。所以我打算把lua嵌入到python/java中。做调研的时候,java的嵌入较为麻烦,出现了各种问题。后来确定用python来作这个环境。这样能用上python 的协程、多线程。这里说说python中嵌入lua的问题。二、环境建立python中又一个扩展叫lupa。这个扩展用于
2016-07-15 14:48:14 6314 4
原创 PHP进程及进程间通信
一、引言进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。换句话说就是,在系统调度多个cpu的时候,一个程序的基本单元。进程对于大多数的语言都不是一个陌生的概念,作为”世界上最好的语言PHP”当然也例外。二、环境php中的进程是以扩展的形式来完成。通过这些扩展,我们能够很轻松的完成进程的一系列动作。 - pcntl扩展:主要的进程扩展,完成进程创建于等待操作。 - posix扩展:完成
2016-07-15 13:33:47 1311
原创 php中curl_multi函数集的用法
一、引言这段时间比较忙,已经很久没有写博客了。今天我就来聊聊我关于curl_multi_*函数集的使用心得,关于http请求的问题。当我们用户php发起一个http请求的时候。我们会首先想到用什么?没错,我们会创建curl来请求。当我们在一次执行中需要发起多个http请求呢。这简单,对每一个URL发起一次url请求。请求玩第1个再请求第2个….这就完了?哪我们还说个啥。官网链接:http://php
2016-07-15 13:30:33 635
原创 最大子序列和(4种方式)
一、问题描述输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:序列:-2 11 -4 13 -5 -2,则最大子序列和为20。序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。二、PHP代码实现/** * 找出最大子序列和 */// 方法一、 最暴力的方法 O(N^3)function find
2015-12-22 19:10:50 599
转载 vmware中的3种网络模式:桥接、NAT(地址转换)、host-only
不同虚拟交换机应用在不同的联网模式Bridged、NAT、host-only三种模式,下面分别介绍其具体分配:VMnet0:这是VMware用于虚拟桥接网络下的虚拟交换机;VMnet1:这是VMware用于虚拟Host-Only网络下的虚拟交换机;VMnet8:这是VMware用于虚拟NAT网络下的虚拟交换机;VMnet2~VMnet7及VMnet9:是VMware
2015-12-13 21:18:52 3744
原创 PHP就业情况分析
概括 之前看到一篇分析“数据挖掘”的就业情况,我就想着自己也做一份关于PHP的就业情况。(自知代码粗浅,大牛求放过~) 数据源来源于拉钩的前450条PHP招聘信息;工具使用window10,python2.7,IDE PyCharm 4.5。 关于“数据挖掘”的分析连接如下:http://mp.weixin.qq.com/s?__biz=MjM5MTYwMjI3Mw==&mid=400
2015-11-02 00:02:42 1056
原创 (5)mysql优化之MyISAM表锁
概述 MyISAM存储引擎只支持表锁,mysql的表锁有两种模式:读锁和写锁。他们的兼容关系是(对myisam的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写操作*)和(对myisam的写操作,则会阻塞其他用户对同一表的读和写操作),读写操作是串行的。如何加表锁 MyISAM在执行查询语句(select)前,会自动给涉及的所有表加上读锁。在执行更新操作(update,delete
2015-06-03 18:12:39 816
原创 (4)mysql优化之数据库表设计优化
概述在数据库设计过程中,用户可能会经常遇到这样的问题:1.表里面的字段到底该设置多长合适?2.是否应该把所有表都按照第三范式来设计?优化表的数据类型1.语法表的数据类型参见链接: http://blog.csdn.net/pursuing0my0dream/article/details/44729707在mysql中,我们可以使用函数 procedure analyse()对数据库中的表进行分析
2015-06-01 14:51:03 834
原创 (3)mysql优化之sql语句优化
概述该篇主要介绍一些常用的sql优化技巧sql优化1.select * from table_name where;建议将*改为需要的列。这对速度不会有明显的影响,主要考虑节省内存。2.like语句一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。3.不要在列上进行运算,无法运用索引select * f
2015-05-31 16:52:36 738
原创 (2)mysql优化之使用索引优化查询
概述 索引是数据库优化中最常用的也是最重要的手段之一。该篇看看索引的分类,使用场景,不能使用的场景等。索引分类 索引是在mysql存储引擎中实现的,而不是在服务器层实现的。索引每种存储引擎的索引不一定相同。mysql支持4种索引:B-tree索引:最常见索引,大部分引擎都支持B树索引。full-text索引:全文索引。hash索引:只有memory引擎支持。R-Tree索引:空间索引是m
2015-05-30 22:54:07 696
原创 (1)mysql优化之sql性能问题定位
概述我们面对一个问题的时候,首先是发现问题,然后才是解决问题。在这篇文章中,主要解决如何定位问题。解决方法1.通过show status了解各种sql执行频率show status [like 'com_%'];Com_xxx表示每个xxx语句执行的次数。 具体参数,参见: http://lxneng.iteye.com/blog/451985 http://www.sandzhang.com
2015-05-29 11:19:23 1157 2
转载 PHP session垃圾回收机制
概述 由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效。当一个有效请求发生时,PHP会根据全局变量 session.gc_probability/session.gc_divisor(同样可以通过php.ini或者ini_set()函数来修改) 的值,来决定是否启动一个GC(Garbage Collector)。默认情况下,session.gc_p
2015-05-29 09:33:36 596
原创 一致性哈希算法
概述我们的memcache客户端(这里我看的spymemcache的源码),使用了一致性hash算法ketama进行数据存储节点的选择。与常规的hash算法思路不同,只是对我们要存储数据的key进行hash计算,分配到不同节点存储。一致性hash算法是对我们要存储数据的服务器进行hash计算,进而确认每个key的存储位置。常规hash算法的应用以及其弊端 最常规的方式莫过于hash取模的方式。
2015-05-21 15:36:59 815
原创 归并排序
概述 归并排序-顾名思义通过递归和合并的方式排序无序数列。归并排序是基于一种被称为“分治”(divide and conquer)的策略。 归并排序先分解无序数列到每一个无效数列为一个元素时候,该无序数列就是有序数列,然后一步步回退合并每一个有序数列理论http://blog.csdn.net/morewindows/article/details/6678165 http://bubkoo.
2015-05-19 15:54:44 735
原创 堆排序
概述 堆常用来实现优先队列,在这种队列中,待删除的元素为优先级最高(最低)的那个。在任何时候,任意优先元素都是可以插入到队列中去的,是计算机科学中一类特殊的数据结构的统称 堆的定义:最大(最小)堆是一棵每一个节点的键值都不小于(大于)其孩子(如果存在)的键值的树。大顶堆是一棵完全二叉树,同时也是一棵最大树。小顶堆是一棵完全完全二叉树,同时也是一棵最小树。注意:堆中任一子树亦是堆。以上讨论
2015-05-19 14:14:53 1246
原创 选择排序
概述 选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。 选择排序是根据找到无序数列中的最大或最小值插入到有序序列尾部来排序理论http://blog.csdn.net/feixiaoxing
2015-05-18 15:45:55 625
原创 冒泡排序及快速排序
概述 冒泡排序法的基本思想:(以升序为例)含有n个元素的数组原则上要进行n-1次排序。对于每一躺的排序,从第一个数开始,依次比较前一个数与后一个数的大小。如果前一个数比后一个数大,则进行交换。这样一轮过后,最大的数将会出现称为最末位的数组元素。第二轮则去掉最后一个数,对前n-1个数再按照上面的步骤找出最大数,该数将称为倒数第二的数组元素……n-1轮过后,就完成了排序。 快速排序是冒泡排序的一
2015-05-18 15:35:51 705
原创 插入排序
概述 插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。 如果输入数组已经是排好序的话,插入排序出现最佳情况,其运行时间是输入规模的一个线性函数。如果输入数组是逆序排列的,将出现最坏情况。平均情况与
2015-05-18 15:23:16 782
原创 哈希表算法
概述 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。理论http://b
2015-05-14 15:58:52 756
原创 二叉排序树
概述 二叉排序树又称“二叉查找树”、“二叉搜索树”。二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。理论参考http://www.cnblogs.com/zhuyf87/archive/2012/11/09/2763113.h
2015-05-12 16:01:12 647
原创 折半查找算法
概述 二分查找法主要是解决在“一堆数中找出指定的数”这类问题。而想要应用二分查找法,这“一堆数”必须有一下特征:存储在数组中有序排列所以如果是用链表存储的,就无法在其上应用二分查找法了。(曽在面试被问二分查找法可以什么数据结构上使用:数组?链表?)至于是顺序递增排列还是递减排列,数组中是否存在相同的元素都不要紧。不过一般情况,我们还是希望并假设数组是递增排列,数组中的元素互不相同。理论参见:
2015-05-10 14:39:00 938 2
原创 kmp字符串模式匹配算法
概述 kmp算法我觉得有两个关键点:1.计算模式字符串的部分匹配表(这时候,自己跟自己比较)2.匹配主串时候,主串字符只遍历一遍,匹配时候,根据模式串的部分匹配表计算模式串应该移动的位置。kmp算法时间复杂度为O(m+n);下面我实现的算法代码(PHP)理论关于kmp理论部分,这篇文章写得好:http://kb.cnblogs.com/page/176818/。我就不再赘述了。计算部分匹配表fun
2015-05-08 09:08:42 829
原创 PHP无限极分类
概述 在实际工作中,经常要用到无限极分类。如导航表等等。到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱,代码很多,那些都不靠谱,还是自己捣鼓捣鼓无限极分类了。下面介绍两种无限极分类:递归,使用引用数据准备//初始化原始数据(id=>编号,name=>显示名称,pid=>父级目录id,sort=>排序顺序)$data[1] = array('id'=>'1','name'=>'一
2015-04-30 18:21:51 793
精通css:高级web标准解决方案(第2版)
2015-01-27
构建高性能WEB站点-后端篇
2015-01-27
javascript的mvc ,大型应用开发
2015-01-27
web浏览器工作原理
2015-01-27
HTML5与CSS3权威指南
2015-01-27
Zend API:深入 PHP 内核
2015-01-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人