- 博客(18)
- 资源 (1)
- 收藏
- 关注
原创 搜索引擎倒排索引表压缩:gamma编码
搜索引擎的倒排索引表所占的空间很大,对倒排索引表进行压缩显得非常必要。由于倒排索引表中存储的全部都是数字,对其进行压缩有着专门的方法,Gamma编码就是其中的一种。Gamma编码是一种基于位的变长编码……
2015-03-08 22:48:40
3175
1
原创 Java Map在遍历过程中删除元素
Java中的Map如果在遍历过程中要删除元素,除非通过迭代器自己的remove()方法,否则就会导致抛出ConcurrentModificationException异常。这么做的原因是为了保证迭代器能够尽快感知到Map的“结构性修改“,从而避免不同视图下不一致现象。
2015-01-22 19:19:14
36628
原创 Java enum枚举是怎么回事
通过定义枚举,可以保证需要使用该枚举的地方,参数一定是该枚举的成员,同时增强代码的可读性。enum不过是Java语言为我们提供的一个语法糖[1](什么是语法糖?),方便我们定义常量。通过enum关键字定义的实际上是一个类,只不过编译器会保证这个类继承自Enum,并且会给这个类自动的加入一些成员。
2014-12-20 17:12:36
1780
原创 字符编码那些事儿(UTF-8,GBK,Unicode,ASCII)(二)
为什么文字会有这么多种编码呢,其中的原因大概有很多,从计算机的角度来看,主要是存储所占的长度、是否易于编码和解码等。为了让大家比较直观的看到不同编码对字符长度的影响,下面以字符串“abc袁心玥”为例,说明一下。新建一个txt文档,里面的内容为“abc袁心玥”,按不同的编码保存,查看文件的大小属性我们将看到以下结果。字符集文件大小说明
2014-10-22 18:33:07
993
原创 字符编码那些事儿(UTF-8,GBK,Unicode,ASCII)(三)
字符解码错误是否是可逆的我们讨论更加常见的乱码问题。Web开发中经常会遇到乱码问题,对于初学者来说乱码问题非常恼人。以Java语言为例,如果我们通过Java抓取一个网页的文本,打印之后发现是乱码,我们能否通过String newStr = new String(oldStr.getBytes("oldcharset"), "newcharset")的方式得到正确的字符串?Java
2014-10-22 18:31:37
1147
转载 字符编码那些事儿(UTF-8,GBK,Unicode,ASCII)(一)
什么是字符编码以下内容超过99.9%来自于:http://blog.chinaunix.net/uid-24118190-id-75277.html准中版权,请直接阅读原文。ASCII:早期的计算机只支持英文,为此ANSI制定了ASCII字符表:用一个字节的低7位表示字符,可以表达128个;当字节的高位为1时,表示的是扩展ASCII字符,ANSI并没有为它们指定标准。ANSI字
2014-10-22 17:48:40
868
原创 C语言socket send()数据缓存问题
send()函数默认情况下会使用Nagle算法,Nagle算法通过将未确认的数据存入缓冲区直到积攒到一定数量一起发送的方法,来减少主机发送零碎小数据包的数目。所以如果send()函数发送数据过快的话,该算法会将一些数据打包后统一发出去。如果不了接这种情况,接收端采会遇到看似很奇怪的问题,比如成功recv()的次数与成功send()的次数不相等,在这中情况下,接收端可以通过recv()的返回值是否为
2014-05-02 16:57:31
4145
原创 MPI程序的任务分解方法
用MPI编写并行程序时,任务分解是很重要的一部分,如何把T个任务(T块数据,T行矩阵等)分给P个进程,实现负载均衡,是需要好好考量的问题。分解任务时需要解决两个问题:1.给出一个进程p,如何得知要处理的任务是哪些2.给出一个任务t,如何得知它是由哪个进程处理的(这里的p和t都是从0开始计数。)一个好的任务分配,应该能够保证这两种计算都能高效完成。下面讨论三种分配方式。这里只讨论T>
2014-04-30 20:40:15
3140
原创 C语言socket UDP广播的发送和接收示例
server.c通过UDP广播的形式向网段的指定端口发送广播信息client.c绑定到指定端口,并阻塞接收广播内容然后打印出来程序非常简单,不过有一点需要注意,那就是setsockopt()函数的使用。使用不当很可能会出问题。通过SO_REUSEADDR选项可以实现端口号的重用,SO_BROADCAST选项表示要发送的是广播信息,optval参数要给合理的初始值(这里是1),否则很可能会发
2014-04-28 22:14:07
19970
2
原创 通过互斥锁实现数组多线程互斥插入示例
本例演示了多线程互斥的向StringBuffer中插入字符的情况,能够保证插入字符的完整性(不重复,也不丢失),但是不保证顺序。需要注意的几个地方:pthread多线程程序编译的时候要加入-lpthread链接库,本例的编译命令可以是$ gcc main.c -lpthread为了能够通过jion函数等待所有线程结束,需要通过threadsHold[]数组记录每个线程的线程号由于p
2014-04-25 14:23:22
1949
原创 linux alarm函数使用
alarm函数讲解unsigned int alarm(unsigned int seconds)函数函数作用:在seconds秒之后向调用alarm()的进程发送一个SIGALRM信号。1.如果指定seconds是0,表示取消正在等待的alarm,如果在等待时间结束之前有其它事件到来,alarm也将被取消。2.对于一个进程而言,只有最近的依次alarm()调用是有效的。alarm
2014-04-14 21:53:45
3436
原创 java代码抓取网页
从指定的url抓取网页,思路很清晰,使用java.net.URL得到url对应的二进制流,然后就可以像操作普通文件那样操作这个流了。下面的例子演示了从百度抓取一个搜索网页,将网页存入到文件当中;同时,还对网页进行了简单的分析,得到了检索结果的数量。不过在分析网页内容的时候不可避免的要处理编码问题,因为从url读取的时候是字符流,网页上字符的编码是多样的,如果直接用java默认的字符集,十有
2014-04-13 10:26:49
1038
原创 htop 内存使用率计算
inux下的内存CPU等资源的使用情况可通过解析伪文件系统/proc中的相关文件获得。htop就是通过解析该目录下的/proc/meminfo文件得到CPU的核数以及动态的使用情况。通过cat /proc/meminfo命令可以查看该文件内容,非常直观,这里不多解释。可通过如下代码计算内存的使用率:
2014-04-04 11:21:33
2250
原创 htop CPU使用率计算
linux下的内存CPU等资源的使用情况可通过解析虚拟文件系统/proc的相关文件获得。htop就是通过解析该目录下的/proc/stat文件得到CPU的核数以及动态的使用情况。可通过cat /proc/stat命令查看该文件内容,下面是该文件中的第一行,以及每个量对应的意义:cpu 148627 236 41339 2372383 38801 0 1500
2014-04-04 10:31:07
3097
1
原创 htop源码中的Hashtable
这里的Hashtable其实是hashmap,实现的是int型到void*的映射。Hashtable结构的简单演示如下图:
2014-04-03 17:50:28
674
原创 C语言面向对象编程
面向对象编程是一种思想,只要运用这种思想,用C语言也能写出面向对象的程序。我们可以把C语言的结构体看成是面向对象语言中的类,结构体里可以有属性和成员函数(函数指针)。这样就能用C语言写出面向对象的序了。代码如下:#include#include// 定义两个函数类型typedef void(*SetFunc)(void*, int, int, char*);typedef voi
2014-04-03 17:13:59
692
原创 linux下的getch模拟(无回显读取字符)
我们知道getchar()函数可以读取一个字符,但是必须在按下回车键之后字符才会从缓冲区送给程序。如何在linux终端里实现无回显读取字符呢?下面的代码给出了一个简单有效的实现。#include#include#includeint main(){ int input; struct termios save, current; tcgetattr(0, &save);// 得到
2014-04-02 17:42:11
3831
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人