- 博客(75)
- 资源 (2)
- 收藏
- 关注
原创 为你的Archlinux Chromium安装flash插件
wiki.archlinux.org Browser_plugins中说到,Chromium不再支持官方软件仓库中的flashplugin。需要到aur.archlinux.org/packages/chromium-pepper-flash下载这个pepper-flash。直接git https://aur.archlinux.org/chromium-pepper-flash.git
2015-09-18 15:31:02
5311
转载 深入浅出:进程、线程、协程、同步、异步、回调(转载)
进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生?在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享《Python中的进程、线程、协程、同步、异步、回调》。一、上下文切换技术简述在进一步之前,让我们先回顾一下各种上下文切换技术。
2015-09-14 00:06:44
2477
转载 Copy On Write和fork、vfork(很容易理解的图解)
转自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.htmlCOW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复
2015-09-14 00:01:16
1389
原创 求两个字符串的最长连续公共子串
这个问题和求公共子序列LCS是类似的问题,相比之下,更加简单,因为要考虑连续性。同样的,我们也可以用动态规划法求解,用一个数组C[m+1][n+1],C[i][j]代表字符串的前i个Mi和另一个字符串的前j个Nj的最长连续公共子串的长度。假设两个字符串M[0...m-1]和N[0...n-1]C[i][j] = 0, i=0或者j=0; C[i][j] = C[i-1][j-1
2015-08-30 00:16:44
991
原创 C语言变量存储区域 进程内存布局
C程序中,内存通常分为几个大区:共享存储区、栈区、堆区、全局静态区、文字常量区,此外还有程序代码区,其中,全局静态区又可以分为全局非初始化区和全局初始化区,从具体程序中来看,初始化和非初始化的全局OR全局静态OR局部静态变量,其地址相差并不远,但还是可以看到明显的非初始化和初始化有分隔。关于初始化和非初始化的问题,我们一般认为全局变量、static变量在不显示初始化时都会默认初始化,这是肯定的
2015-08-28 15:54:25
1445
原创 UNIX网络编程8 从图中了解TCP协议在Linux内核中的实现
Packet Reception图1展示了一个新的包从网线进入到用户应用的路径。Linux 内核使用一个sk buff数据结构来描述每个packet。当一个packet到达网卡NIC时,它调用DMA引擎将packet放进内核内存中通过存储在一个环形buffer的空的sk buffs叫做rx ring。一个进入的packet如果环形缓冲区满了则被丢掉。当一个packet在较高协议层被
2015-08-27 21:00:00
729
原创 UNIX网络编程7 利用tdpdump理解socket相关函数和数据包的时序
本次测试的主要原因是不了解connect() accept()和三次握手的先后顺序。为了能够方便获得时序关系,在程序关键点都插入了printTimeLog()打印出时间戳和日志信息,并且在服务端listen()和accept()之间插入长时间的sleep(),在客户端connect()和send()之间也插入一定时间的sleep(),然后一次启动tcpdump和server以及client,根据程
2015-08-27 20:51:47
1089
原创 UNIX网络编程6 从tcpdump了解到的TCP/UDP发送限制和缓冲区问题
本节主要解决的问题:MTU和TCP/UDP一次发送的大小限制,read/write 或者 send/recv返回时机和数值,内核发送和接收缓冲区大小,未解决通告窗口win大小和发送包长length的关系,内核TCP再往下层的实现未关注。一些结论:首先明白,用户空间缓冲区就是指你的程序中存放原始数据的和用于接收数据的char数组,内核空间的tcp收发缓冲区有默认值,也会自动动态地增加
2015-08-27 20:43:32
1886
转载 UNIX网络编程0 IP头,TCP头,UDP头,MAC帧头定义
转自 http://www.cnblogs.com/li-hao/archive/2011/12/07/2279912.html一、MAC帧头定义/*数据帧定义,头14个字节,尾4个字节*/typedef struct _MAC_FRAME_HEADER{ char m_cDstMacAddress[6]; //目的mac地址 char m_cSrcMac
2015-08-26 10:35:06
924
转载 C语言变量声明内存分配
转自:http://www.cnblogs.com/emanlee/archive/2009/04/12/1434278.html一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap) — 在内存开辟另一块
2015-08-21 22:08:15
449
转载 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete
转自 http://blog.youkuaiyun.com/u014401044/article/details/390339651、安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件。这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get install vim vim-scripts vim-doc其中vim-scripts是vim的一些基本
2015-08-21 20:54:47
536
原创 使用python进行系统资源使用率监控
Linux系统下:静态指标信息:名称描述单位所在文件mem_total内存总容量KB/proc/meminfodisks磁盘相关信息--disks.size磁盘总容量KB
2015-08-18 16:30:33
4971
原创 UNIX网络编程5 一些相似函数的比较和使用
1. bzero和memsetbzero是传统BSD函数,属于POSIX标准,使用头文件string.h,bzero无返回值,推荐使用memset替代bzero。bzero(&servaddr, sizeof(servaddr));memset(&remote_addr, 0, sizeof(remote_addr));2. perror和stderrperror和st
2015-08-18 15:13:58
609
原创 UNIX网络编程4 使用epoll
使用:http://blog.chinaunix.net/uid-20384806-id-1954307.html优点:http://blog.youkuaiyun.com/wangpengqi/article/details/9933011源码分析 http://blog.youkuaiyun.com/chen19870707/article/details/42525887 int epo
2015-08-18 10:33:51
608
原创 字符串匹配——KMP算法
字符串匹配的问题是:在主串中匹配模式串,并返回匹配到模式串的起始位置。 蛮力搜索O(m*n)的时间复杂度,重复匹配步骤太多。KMP算法的核心是发现模式串中的“前缀=后缀”,避免在模式串j位置发生匹配失败时还要回退到0位置开始匹配。 发现“前缀=后缀”,只需要将模式串向前移动合适的位置,跳过了重复匹配前缀的步骤。所以,KMP算法使用了一个next数组来保存模式串中的前缀=后缀的最大的k值,n
2015-08-17 17:36:44
560
原创 最长公共子序列LCS和字符串编辑距离
最长公共子序列问题是求两个字符串中出现的出现的相同的有先后次序的字符集合(可以不连续),连续的公共子序列是公共子串问题。参考 http://www.cnblogs.com/huangxincheng/archive/2012/11/11/2764625.html解决方案是动态规划算法,明白递推公式即可快速写出代码,动态规划算法就是解决子问题重叠的场景,不断利用子问题的最优解,所以一般会用到辅助
2015-08-17 11:06:03
1688
原创 设计模式——抽象工厂
参考:http://www.cnblogs.com/xing901022/p/4034813.html抽象工厂的主要意图:隐藏对象的创建过程,提供对象的使用接口模式结构AbstractFactory 提供创建对象的接口。ConcreteFactory 提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。AbstractProduct 提供对象的使用接口。
2015-08-16 23:19:55
484
转载 8天学通MongoDB——索引操作(转)
序:《8天学通MongoDB》对于入门来说还是不错的,当然只是对于操作而言,对于MongoDB的原理,并没有研究。http://www.cnblogs.com/huangxincheng/category/355399.html基础入门、细说增删查改、细说高级操作都是基础,自不必说,下面主要转载索引操作、主从复制、分片技术、运维技术。8天学通MongoDB——索引操作
2015-08-16 11:34:37
475
原创 UNIX网络编程3 使用select()
select函数必需的头文件:和。这个函数允许进程指示内核等待多个事件(任何描述符字准备好读或写或有异常条件待处理)中的任一个发生,并仅在事件发生或经过某指定的时间后才唤醒进程。所以调用select的进程会在这个函数阻塞,等待事件发生或者超时。函数原型:select(int maxfdp, fd_set *readset, fd_set *writeset, fd_set *excep
2015-08-14 10:49:45
549
原创 UNIX网络编程2 理解select、poll、epoll原理
三者实现原理对比分析select, poll, epoll都是IO多路复用的机制,上文中提到的多路复用主要是以select为例,select和poll大同小异,因为select和poll的实现有明显的缺点,所以在Linux2.5.44中引入了新的处理大批量句柄的API——epoll,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。这里还是要强调,I/O多路复用机制的目的是应对大量的
2015-08-13 17:48:06
1543
原创 UNIX网络编程1 理解同步、阻塞、非阻塞、异步网络I/O
本文侧重的是网络I/O,如blocking、non-blocking、I/O multiplexing(event driven I/O)、signal-driven(不常用)、 asynchronous这几种UNIX网络编程中提到的模型。wiki中的Asynchronous I/O认为,asynchronous I/O和non-blocking I/O是一个意思,都是指一种I/O处理形式:在
2015-08-12 16:22:38
1059
原创 汇总一些网络相关的基础概念
TCP/IP参考模型:四层,自下而上分别是:主机到网络层->网络互联层->传输层->应用层。对应OSI七层模型:(物理层、数据链路层)->网络层->传输层->(会话层->表示层->应用层)每一层的数据单元:(比特->帧)->包packet带IP头->段segment带TCP/UDP头->(数据、消息、报文message) TCP/IP协议格式:报文封装格式:Ethernet
2015-08-12 15:55:18
561
原创 监控与性能分析系列:3)systemtap
原理:SystemTap允许用户编写和重用一些简单的脚本来深入检查一个运行的Linux系统的活动。这些脚本可以用来提取数据、过滤数据和统计数据以快速和安全的方式,使得对复杂性能问题的诊断成为可能。SystemTap背后的基本思想是事件,并且还有给他们绑定的handlers。当SystemTap运行脚本,它监控定义的事件,当该事件发生时,Linux内核就运行相应的handler作为一个快速子
2015-08-12 09:12:03
1843
原创 监控与性能分析系列:2)netstat、ss对比使用
从下面这个图来看,netstat和ss都是网络相关的监控,netstat在协议栈中每一层都可以做监控统计:TCP、路由表、网络接口、协议等,但是在Linux中,netstat已经不为推荐,取而代之的是ss。 1)netstat参数和使用常用参数-anplt-a 显示所有活动的连接以及本机侦听的TCP、UDP端口-l 显示监听的server port-n 直接使用IP
2015-08-12 08:59:53
11163
原创 监控与性能分析系列:1)strace和ltrace跟踪对比同一个socket应用程序
本文简单对比一下strace和ltrace的使用和输出信息。首先编写一个简单的socket服务端和客户端,服务端用父进程来监听listenfd,将请求connfd交给fork出的子进程来处理,主要代码如下:客户端主要代码如下: strace和truss用来跟踪一个进程的系统调用或信号产生的情况,strace -f -o server.strace ./echoser
2015-08-12 08:48:14
1980
原创 Eclipse启动计时插件
Eclipse版本如下:Eclipse Java EE IDE for Web Developers.Version: Kepler Service Release 2Build id: 20140224-0627不需要下载额外的Eclipse for RCP and RAP DevelopersFile->New->Plug-in Project
2015-08-10 10:40:46
2882
原创 JVM学习:使用visualGC调优Eclipse启动过程
最近在学习JVM,了解了一些关于JVM的内存分配和垃圾回收的知识,其中有有一个实战是优化Eclipse的启动,从类加载时间、JIT编译时间、垃圾收集时间三个方面做了优化,简单、综合性强,可以加深对JVM的理解,所以这里对其进行验证。 硬件和操作系统环境:java版本(HotSpot虚拟机):Eclipse相关信息:原始的启动配置:最大永久代空间是25
2015-08-10 10:33:37
1043
原创 Java基础的一些博客
UML建模相关:http://blog.youkuaiyun.com/tianhai110/article/details/6339565用例图、类图、序列图等。 黑马程序员系列文章 http://blog.youkuaiyun.com/hlhakey/article/month/2015/07new、this、super、final关键字IO流InputStream/OutputStream、R
2015-07-21 19:31:24
382
转载 (转)继承、重载、覆盖、多态
http://blog.chinaunix.net/uid-375137-id-2413340.html 1、继承(inheritance) 一旦你已经创建了一个定义了对象一般属性的超类,该超类可以被继承以生成特殊用途的类。每一个子类只增添它自己独特的属性。这是继承的本质。Java 不支持多超类的继承。 超类变量可以引用子类对象(运行时确定) 2、重载(over
2015-07-18 12:53:08
577
转载 (转)JVM的内存区域划分
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程:
2015-07-16 17:42:47
506
原创 从链表操作理解C++传指针的问题
一般在函数调用时传入的参数有传值和传引用之分,传引用自不必说,理解上不会有太大问题,传指针容易对传值还是传引用产生混淆,实际上它还是传值,具体的,传指针可以理解为分两种情况(自我理解,不太准确,但是比较形象):把 *指针 传递给 *指针,把 *指针的地址传递给 **指针。当把 *指针 传递到函数中的*指针时,确保该指针指向有效的地址空间,则函数就可以通过指针操作那个地址空间;当把 *指针的地址 传
2015-07-12 23:12:31
764
原创 git遇到的诡异错误: Failed connect to github.com:443
为什么会说Failed connect to github.com:443是一个诡异的问题?乍一看,写明了无法连接到github.com,ping也不通,但是获取到了github的IP(192.30.252.131),而且ping其他网站如baidu.com是通的。更让人意想不到的是网关可以git,但是本机却不能git。然后就陷入了挣扎中。。。iptables挣扎:停掉本机iptables
2015-07-11 15:24:19
105588
6
原创 关于buffer overflow detected 程序崩溃的思考
我是在使用别人源码(DBT2 benchmark)的时候,编译成功一运行就出现了这个问题。本以为像这种开源的软件应该没什么bug,但是仔细想想,buffer overflow暗示着指针操作内存不当导致程序崩溃。。。遇到问题后,首先百度了一下,很多篇博客也提到了相同的问题,解决方案几乎都是针对什么ubuntu gcc版本,查看一下自己的gcc版本是4.4而且yum源最新,
2015-07-09 08:45:51
22813
原创 使用MYSQL benchmark - DBT2 Benchmark Tool遇到的问题
MYSQL Server是5.6版本下载DBT2 Benchmark,编译安装,按照README-MYSQL中的步骤来操作。需要由aclocal、autoheader、autoconf、automake,以及mysql、mysql-libs、mysql-devel。$ ./congigure --with-mysql$ make$ sudo make install 安装好da
2015-07-08 21:18:48
2541
翻译 sar/sysstat:10个非常有用的监控UNIX/Linux性能的sar用例
http://www.thegeekstuff.com/2011/03/sar-examples/使用sar可以实时监控Linux系统的多项性能指标如CPU、Memory、I/O等。sar是sysstat包的一部分。本文主要介绍怎样安装和配置sysstat包(包含sar),如何用sar监控以下的Linux性能统计:1. 聚合的CPU使用率2. 单个的CPU使用率3. 内存使
2015-07-07 22:20:04
2497
转载 Linux运维基础采集项
转自小米开源监控open-falcon,http://book.open-falcon.com/zh/faq/linux-metrics.html做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑。所以,依靠强大的监控系统,收集尽可能多的指标,意义重大。但哪些指标才是有意义的呢,本着从实践中来的思想,各位工程师在长期摸爬滚打中总结出来的经验最有价值。在各位运维工程师长期的工作实践中,
2015-07-07 15:23:49
5748
转载 C++重载operator = 和初始化 =
class Box{public: int a; //重载了 = 操作符,只有在赋值时才会调用,初始化时调用的是构造函数 Box& operator=(int x){ a = x; return *this; } /* //如果要这样:Box box=10,必须定
2015-07-06 10:17:40
785
转载 C++ Virtual详解
http://www.cnblogs.com/xd502djj/archive/2010/09/22/1832912.htmlVirtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base
2015-07-06 09:15:03
399
转载 C++类型转换关键字 *_cast<type> (expression)
在C/C++语言中用(type)value(在C++中还可以采用type(value))来进行显示类型转换(explicit type conversion),常常又被称为强制转换。这种转换的正确性完全掌握在程序员手中,传统上强制转换往往被过度使用,成为C++程序犯错的一个主要根源。 为了减少强制转换的副作用,并且在查错时使程序员能够快速定位强制转换,在标准C++中新增加了4个关键字*
2015-07-06 09:06:44
695
vim插件和配置 for Linux 自动补全 IDE
2015-08-22
vim for Windows 集成环境 IDE 自动补全 tags
2015-08-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人