2014年5月 ’ 的文章存档

C\C++代码优化的27个建议

1. 记住阿姆达尔定律

b1

 

  • funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。
  • 所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。
  • 这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。
  • 这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。

2. 代码先保证正确,然后再考虑优化

  • 这并不意味着用8周时间写一个全功能的射线追踪算法,然后用8周时间去优化它。
  • 分多步来做性能优化。
  • 先写正确的代码,当你意识到这个函数可能会被经常调用,进行明显的优化。
  • 然后再寻找算法的瓶颈,并解决(通过优化或者改进算法)。通常,改进算法能显著地改进瓶颈——也许是采用一个你还没有预想到的方法。所有频繁调用的函数,都需要优化。

3. 我所了解的那些写出非常高效代码的人说,他们优化代码的时间,是写代码时间的两倍。

4.跳转和分支执行代价高,如果可能,尽量少用。

  • 函数调用需要两次跳转,外加栈内存操作。
  • 优先使用迭代而不是递归。
  • 使用内联函数处理短小的函数来消除函数调用开销。
  • 将循环内的函数调用移动到循环外(例如,将for(i=0;i<100;i++) DoSomething();改为DoSomething() for(i=0;i<100;i++) … }})。
  • if…else if…else if…else if…很长的分支链执行到最后的分支需要很多的跳转。如果可能,将其转换为一个switch声明语句,编译器有时候会将其转换为一个表查询单次跳转。如果switch声明不可行,将最常见的场景放在if分支链的最前面。

阅读全文

Linux的五个查找命令

作者: 阮一峰

 

最近,我在学习Linux,下面是一些笔记。

使用电脑的时候,经常需要查找文件。

在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。
阅读全文

2014年值得学习的编程语言书

经过数据分析和研究 Jobs Tractor 的 45000 个开发人员招聘职位数据,我们得到了上图的结果: 自上一年,主要的变化如下:

ggg
阅读全文

linux curl 命令详解,以及实例

linux curl是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具。
阅读全文

如何用最有创造力的方式输出42

作者:陈皓

文章来自:酷壳网

————————————————–

这篇文章来自CodeGolf.StackExchange上的《Most creative way to display 42》—— 请以最有创造力的方式输出42。于是出现了下面的这些答案(注:精彩的总是留在最后面)

人生和宇宙终级问题的答案:42

这里,需要介绍一下为什么要输出42。这时因为42是我们人生,世界乃至整个宇宙的终级答案。这要从《银河系漫游指南》(英文名:The Hitchhiker’s Guide to the Galaxy)说起。这本书是著名英国科幻小说作家Douglas  Adams所著5本银河系漫游指南系列科幻喜剧系列小说中的第一本,改编自他本人为英国广播公司第四电台(BBC Radio 4)所写的广播剧剧本。该书1979年10月12日首次由麦克米伦出版公司(Pan Books)出版,次周成为英国图书销量榜冠军,前3个月内销售超过25万本。截至2005年,这本小说已被翻译成超过30种语言在全世界发行,并且被改编为电视剧、电影、舞台剧等多种艺术形式的作品。
阅读全文

GlusterFS集群文件系统研究

作者:刘爱贵

1.      GlusterFS概述

 

GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。

a1

 

图1 GlusterFS统一的挂载点

GlusterFS支持运行在任何标准IP网络上标准应用程序的标准客户端,如图2所示,用户可以在全局统一的命名空间中使用NFS/CIFS等标准协议来访问应用数据。GlusterFS使得用户可摆脱原有的独立、高成本的封闭存储系统,能够利用普通廉价的存储设备来部署可集中管理、横向扩展、虚拟化的存储池,存储容量可扩展至TB/PB级。GlusterFS主要特征如下:
阅读全文

如何写出更好的Java代码

Java是最流行的编程语言之一,但似乎并没有人喜欢使用它。好吧,实际上Java是一门还不错的编程语言,由于最近Java 8发布了,我决定来编辑一个如何能更好地使用Java的列表,这里面包括一些库,实践技巧以及工具。

这篇文章在GitHub上也有。你可以随时在上面贡献或者添加你自己的Java使用技巧或者最佳实践。

  • 编码风格
    • 结构体
      • builder模式
    • 依赖注入
    • 避免null值
    • 不可变
    • 避免过多的工具类
    • 格式
      • 文档
      • Stream
  • 部署
    • 框架
    • Maven
      • 依赖收敛
    • 持续集成
    • Maven仓储
    • 配置管理
    • 遗失的特性
      • Apache Commons
      • Guava
      • Gson
      • Java Tuples
      • Joda-Time
      • Lombok
      • Play framework
      • SLF4J
      • jOOQ
    • 测试
      • jUnit 4
      • jMock
      • AssertJ
  • 工具
    • IntelliJ IDEA
      • Chronon
    • JRebel
    • 校验框架
    • Eclipse Memory Analyzer
  • 资源
    • 书籍
    • 播客

编码风格

传统的Java编码方式是非常啰嗦的企业级JavaBean的风格。新的风格更简洁准确,对眼睛也更好。
阅读全文

MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

文/何登成

导读:  

来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解InnoDB存储引擎实现的多版本控制技术(简称:MVCC)。

基本知识

假设对于多版本控制(MVCC)的基础知识,有所了解。MySQL数据库InnoDB存储引擎为了实现多版本的一致性读,采用的是基于回滚段的协议。

行结构

MySQL数据库InnoDB存储引擎表数据的组织方式为主键聚簇索引。由于采用索引组织表结构,记录的ROWID是可变的(索引页分裂的时候,Structure Modification Operation,SMO),因此二级索引中采用的是(索引键值, 主键键值)的组合来唯一确定一条记录。

无论是聚簇索引,还是二级索引,其每条记录都包含了一个DELETED BIT位,用于标识该记录是否是删除记录。除此之外,聚簇索引记录还有两个系统列:DATA_TRX_ID,DATA_ROLL_PTR。DATA _TRX_ID表示产生当前记录项的事务ID;DATA _ROLL_PTR指向当前记录项的undo信息。
阅读全文

十佳最受欢迎的编程语言 你擅长几个?

保持领先是任何软件工程师面临的最大挑战之一。那么哪种编程语言的需求最经久不衰?

我们统计了一些在2014年仍能保持竞争力的编程语言,下面按照排名一一道来。

10. ASP.NET

ASP.NET是服务器端的Web应用程序框架语言,目的是为Web开发制作设计动态网页。它是由微软开发的,该语言允许程序员构建动态的web站点,web应用程序和web服务。2002年1月首次发布的.NET Framework1.0版本,是对微软的动态网页技术(ASP)的继承和扩展。ASP.NET建立在公共语言运行时(CLR)的基础上,且程序员可以使用任何支持.NET语言编写ASP.NET代码。

我们可以在w3schools学习ASP.NET语言。
阅读全文

请放下你的无效社交

有一次在北大讲座,遇到一位学生问我,“老师,你说学习重要,还是经营人脉重要?”看着他一脸大杂烩的表情,我先拿出本子记下了这个问题,然后告诉他说,这是个比较大的话题,我会仔细写篇文章放在网上的,然后给了他我的博客地址。而后又补了一句,“相信我,所谓的人脉就算重要,也根本没他们说的那么重要”。你愿意与什么样的人成为朋友?让我们细说从头。先动脑思考一下,你愿意与什么样的人成为朋友?

从幼儿园开始,每个人就都已经有一些选择朋友的原则——尽管并不自知。事实上,资源分布的不均匀,必然造成人与人之间的某种依附关系。

观察一下,就可以看到事实:幼儿园里玩具多的孩子更容易被其他孩子当作朋友。那么,玩具最多的孩子朋友最多么?答案并非肯定。如果你像我一样有机会、也恰好愿意多花一点心思与那个玩具最多的孩子交谈的话,你也很快就会发现,在他心目中,与所有成年人一样,朋友被划分为“真正的朋友”和“一般的朋友”。以下我们姑且把那个玩具最多的孩子叫做“小强”。
阅读全文