自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ethan.W

为了解决问题

  • 博客(32)
  • 收藏
  • 关注

翻译 向Linus学管理

1.1. 导言Linus Torvalds 在2004年把一篇讲"Linux内核的管理风格"的文章放在了内核源码文档里。这篇文章有意对应他以前写的关于编码 风格的文章(比如烧书仪式),也有技术人员熟悉的Dilbert卡通的影子。 Henrik Ingo 写"Open Life: The Philosophy of Open Source"一书的时候,拿这篇文章作了后记。这篇

2016-01-11 19:27:10 501

转载 Go语言 beego快速入门

你对beego一无所知?没关系,这篇文档会很好的详细介绍beego的各个方面,看这个文档之前首先确认你已经安装了beego,如果你没有安装的话,请看这篇beego安装指南最小应用一个最小最简单的应用如下代码所示:[AppleScript] 纯文本查看 复制代码01020304050607

2016-01-11 14:16:18 15283

转载 socket listen函数详解及TCP链接过程简要说明

int listen(int fd, int backlog);socket系统调用listen只被tcp 服务器使用,他做两件事:1. 将未链接的套接口转换为被动套接口,指示内核接受向此套接口的连接请求,调用此系统调用后tcp 状态机有close转换到listen.2.第二个参数制定了内核为此套接口排队的最大连接个数。关于第二个参数,对于给定的监听套接口,内核要维护两个队

2015-10-17 14:47:20 5879

转载 vim显示行号、语法高亮、自动缩进的设置

在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc 在Fedora中vim的配置文件存放在/etc目录中,配置文件名为vimrc在Red Hat Linux 中vim的配置文件存放在/etc目录中,配置文件名为vimrcset nocompatible                 "去掉有关vi一致性模式,避免以前版本的bug和局限  

2015-09-28 11:27:28 493

转载 epoll_wait 时 POLLERR 与 POLLIN 同时返回的现象解析

今天code review时,同事B对我代码中的poll()的处理做法提出了异议。于是做了些研究,还发现了一些好玩的故事。异议的代码我的代码是参考manpage写的,类似下面的做法。同事B说没有处理POLLERR、而且应当使用else if。OK。我赞同补充POLLERR的处理,但不赞同使用else if。原因:fd的读事件、写事件可能会同时到达,因此我想同

2015-09-26 15:55:33 1620

原创 ubuntu 14.04 添加新用户后无法用tab补全功能

今天在ubuntu上使用useradd新建了一个用户,发现用新建的用户登陆无法使用tab键补全,这个问题是否让人恼火,所以来解决一下。查资料后发现是因为 useradd 后默认使用的是 sh 而不是 bash shell,所以解决的方法如下:用root账户登陆机器,使用命令 chsh -s /bin/bash newUserName一劳永逸的方法:sudo vim

2015-09-23 17:32:50 3531

原创 ubuntu x64下编译出现找不到 cdefs.h / c++config.h 的问题

如遇到缺少 sys/cdefs.h 的情况,输入以下命令安装标c库sudo apt-get install  build-essential libc6-dev libc6-dev-i386如遇到缺少 bits/c++config.h的情况,输入以下命令安装gcc编译相关库sudo  apt-get  install   gcc-4.7-multilib     g++-4.7-m

2015-09-21 14:04:22 17066 1

转载 负载均衡算法

负载均衡的发展基础就是负载均衡算法。那么针对不同的服务器我们也会采用不同的负载均衡算法,因为他们所具备的和要求的功能各不相同。那么我们现在就来详细了解一下这方面的知识。希望能让大家从中得到需要的东西。服务器负载均衡算法有很多(持续性的和非持续性的),包括轮循算法、最少连接算法、响应时间算法、散列算法、最少连接失误算法,链路带宽算法等等。此外实际服务器(RealServer)可以被分

2015-09-12 11:45:23 399

转载 STL入门要点

这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。译者:karycontact:[email protected]概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离

2015-08-31 17:53:56 583

原创 printf函数的 %s 与 %c

今天在研究C++的时候在Mac上随手写了些例子,结果发现一个关于printf很有趣的现象:先定义一个模板:templateclass data_count{ type a; type b;public: data_count(type A,type B):a(A),b(B){} type add(){return a+b;} type sub(

2015-08-21 11:09:40 3001

原创 从更为底层的角度看C++

无意中找到一个总结的blog,写的很好,特分享一下:从汇编角度看C++如果从C语言看C++,有些C++操作真的是语法糖;但如果从汇编角度看C,也可以说C的一些操作是语法糖;其实语法糖这个词应该是中性的,语法糖让我们减少错误,提高开发效率,提供思考模型。与此同时,语法糖会让一个人打不牢根基,遇上新的技术便会觉得云里雾里的。如果放大镜看不清楚一个物体,请用显微镜看。

2015-08-19 10:53:07 583

原创 ubuntu 14.04 任务栏无法显示时间

ubuntu 14.04 若是遇到任务栏无法显示时间,首先按照以下标准步骤执行:确认已经安装日期时间指示器: apt-get install indicator-datetime 重新配置日期时间指示器: dpkg-reconfigure –frontend noninteractive tzdata 重启Unity: killall unity-panel-service一般情况下

2015-08-16 23:09:16 1864

原创 restrict 关键字 与 别名问题

最近我在忙一个扩展C语言的项目,研究的时候看到一本绝好的关于语言本身历史发展的书籍 《C++语言的设计与演化》,其中讲到C++标准化时遇到关于如何使得编译器更好优化程序的思考。首先说一下背景知识:FORTRAN语言在C++设计之初就已经大行其道了,它的速度很快,其中有一点原因使得FORTRAN这么快就是它的编译器允许做出这么一种假设:如果传递给函数两个数组参数,那么这两个数组互相是没有重叠

2015-08-12 09:57:53 662 1

转载 协程的过去,现在,未来

计算机科学是一门应用科学,几乎所有概念都是为了理解或解决实际问题而生的。协程 (Coroutine) 的出现也不例外。协程的概念,最早可以追溯到写作 COBOL 语言编译器中的技术难题。从磁带到协程COBOL 是最早的高级语言之一。编译器则是高级语言必不可少的一部分。现如今,我们对编译器了解,已经到了可以把核心内容浓缩成一本教科书的程度。然而在六十年代,如何写作高效的语言编译器是那

2015-08-07 17:22:34 1364

转载 Strace 调试程序

原文:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html简介strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪

2015-07-29 09:21:40 512

原创 利用LLVM,Clang制作自己的编译器

最近找到国外一大神做的利用LLVM和Clang写的修改源代码的例子,恰好项目需要做一个source-to-source的编译器与此相关,所以部分翻译一下这位大神的文章。原文地址: http://eli.thegreenplace.net/2014/05/01/modern-source-to-source-transformation-with-clang-and-libtooling/在

2015-07-20 22:20:23 7988 3

原创 LLVM的简单入手步骤

0.背景最近项目接触需要接触到编译器方面的东西,为的就是对现有技术体系进行语法级的加强。首先考虑的就是利用GCC完成这件事,无奈GCC模块化不及苹果的LLVM好,所以选用LLVM完成这件事。1.什么是LLVM百度上有许多相关的资料,这里推荐一篇写的很不错的文章讲述什么是LLVM,给使用者一个简单的了解。我也是从这个博客开始接触LLVM的。http://blog.csdn.n

2015-07-14 10:53:39 1113

原创 Valgrind解决 malloc assert failed 3096

在项目中一个普通的malloc语句调用中,出现malloc的内部assert错误 malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && ol

2015-07-13 11:52:32 1163

原创 利用Linux脚本+命令查看线程统计信息

最近在项目上写了个用于并行计算的线程池工具,遇到了性能瓶颈,于是求助/proc目录查看具体的线程统计数据用以优化程序

2015-07-08 11:27:47 2482

转载 Linux内核源码分析方法

Linux内核源码分析方法   一、内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内。如果要扩展自己知识的广度,我们需要

2015-06-11 09:22:01 439

转载 两种高性能I/O设计模式(Reactor/Proactor)的比较

原文: http://www.cppblog.com/pansunyou/archive/2011/01/26/io_design_patterns.html这篇文章探讨并比较两种用于TCP服务器的高性能设计模式. 除了介绍现有的解决方案, 还提出了一种更具伸缩性,只需要维护一份代码并且跨平台的解决方案(含代码示例), 以及其在不同平台上的微调. 此文还比较了java,c#,c++对各

2015-06-09 11:30:09 479

转载 Linux vmstat命令实战详解

最近需要做服务器压力测试,转一篇合适的命令指引文章,原文: http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.htmlvmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Uni

2015-05-21 15:57:02 406

原创 利用tcpdump解决无法收到组播的问题

项目上遇到一个这么的奇怪现象:一个包含有组播地址的对象,只能收到一次组播,不论这个组播是自己发送的还是别的客户端发送的,第二次变无法收到组播。 用tcpdump检查包发现这个对象不论发送多少次组播,底层协议栈只收到了一次组播包 注意第一行ubuntu.local.56752 > 239.0.0.5:12345,这是需要发送的组播地址与端口,从第一行以后再也没收到过相关的包了。在这个发送

2015-05-19 14:22:48 9903

转载 Epoll的实现代码浅析

这篇文章写的通俗易懂,特定转来。附上原文地址:https://raw.githubusercontent.com/lijie/kernel-doc/master/comment/eventpoll.c/* * 在深入了解epoll的实现之前, 先来了解内核的3个方面. * 1. 等待队列 waitqueue * 我们简单解释一下等待队列: * 队列头(wait_queue_head_t

2015-05-19 09:48:20 466

原创 巧妙获取结构体大小

在/sys/un.h中有这么一个宏:#define SUN_LEN(ptr) ((size_t)(((struct sockaddr_un *)0) ->sun_path) + strlen((ptr)->sun_path))这个宏的巧妙之处是在不需要分配内存的情况下可以获取结构各个部分(除了最后一个)的大小如:struct a{ int b; int c; int d;

2015-05-11 17:42:01 2993

原创 Android编译器优化导致的奇怪问题

最近在调试一个协程库的时候遇到奇怪的问题:在Ubuntu 10.04上调试协程一直正常,但是将协程库编译成.so文件后放入Android设备中,在应用程序中调用此库却出现强制退出的问题,刚开始遇到十分不解。 因为该协程库是利用单个线程来实现协程的,协程的栈空间其实直接分配在线程的栈空间上,于是对于这个问题我的第一直觉是可能是因为Android中Bionic库与glibc的不同而导致的。 我把这个

2015-04-23 17:47:46 1249

原创 Eclipse调试出现value optimized out的解决方法

今天在ubuntu上用eclipse调试程序时,发现有许多变量值显示为 value optimized out其实这是因为编译的时候开启了优化选项 -On (n=1,2,3),经过优化后gdb有时候不能正确的显示源代码的某些变量。解决的方法很简单,在调试的时候将编译选项-On 更改为 -O0停止优化,正式出版本的时候再开启优化以提升性能

2015-04-16 10:41:03 5255

转载 Linux 下手动编译动态库(.so)

A shared library (also known as a shared object, or as a dynamically linked library) is similar to a archive in that it is a grouping of object files. However, there are many important differences.The

2015-03-26 14:47:01 559

原创 如何写出高质量程序

建立子程序的原因: 1.避免代码重复,若两段子程序内编写相似的代码,即意味着代码分解出现了错误,在这种情况应该把子程序重复的代码抽出,另外做出一个基类,然后将两个子程序不同的代码放入派生类中,或者将重复的代码放入另外一个子程序中 2.隐藏顺序:如果两个操作有相互依存的顺序关系,那么应该将两个操作放入一个子程序中,这样在调用的时候就可以避免一个操作依赖另外一个操作的问题 3.

2015-03-13 23:50:56 574

原创 非阻塞I/O

最近在做服务器上协程的一些工作,遇到了一些问题,在这里分享一下.背景:当我们需要自己在用户空间进行协程的调度的时候,不得不对一些I/O等待型的操作进行特殊的处理,常见的这些操作有:connect/accept, read/write, send/recv等.一种思路便是先用select/poll/epoll对相关的fd进行对应的事件询问,如果fd已经就绪就直接调用库调用,若否则进行调度,例如:

2015-03-06 22:32:15 602

原创 防御式编程

防御式编程:这个概念其实来源于驾驶员,简单来说,当你开车上路的时候要时刻保持警觉,假设路上你遇到的每一辆车都有可能向你撞过来造成危险。在coding里面,要假设每个输入都不一定符合设计之初的假设,要使用一定的语句对输入进行限定。尽量做到”垃圾进,什么都不出“。 使用防御式编程常见的语句有:断言和错误处理语句断言:assert(condition)功能语句是一种可以保证其condition为真的语

2015-03-03 22:34:16 1456 4

原创 代码大全:启程

## 开始 ##去年7月份毕业后开始工作,开始了程序员的职业生涯。以前学生时代并无接触太多业界中专业性很强的东西,直到看了Steve McConnell 的代码大全2后才发现原来软件是这样被研发出来的。以前我一直只把读书笔记记录在有道笔记中,后来发现把笔记放在博客中才可以让自己温故而知新,故现在一点一滴地把笔记搬运过来,并结合自己工作中有限的经验聊聊实际和理论的结合。 图片来源于百度

2015-03-01 10:31:51 711

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除