- 博客(76)
- 资源 (8)
- 收藏
- 关注
转载 如何阅读他人的程序代码
如何阅读他人的程序代码文/王建兴 作者简介: 王建兴,清华大学资讯工程系的博士研究生,研究兴趣包括计算机网络、点对点网络、分布式网络管理、以及行动式代理人,专长则是Internet应用系统的开发。曾参与过的开发项目性质十分广泛而且不同,从ERP、PC Game到P2P网络电话都在他的涉猎范围之内。 一、读懂程序代码,使心法皆为我所用程序代码是别人写的,只有原作者才真的
2013-12-28 16:33:48 1077
转载 基础的重要性(程序员之路)
学习编程有几年了,感觉走了不少弯路,而不少的学弟学妹又在重蹈我当初的覆辙,不免有些痛心。最近在网上也看了许多前辈们的经验建议,再结合自己的学习经历在这里谈谈基础的重要性,希望帮助大家少走些弯路。什么是基础呢?就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理等课程学好,对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性
2013-12-27 21:37:16 1095
转载 思维导图MindManager基础教程
Mindjet MindManager是由美国Mindjet公司开发的一款优秀的思维导图和知识管理软件,能够帮助你将想法和灵感以清晰的树桩形式记录下来,这对梳理工作计划和规划很有帮助。 思维导图(Mind Mapping),又称心智图,俗称脑图,是一种图像式思维工具或者是一种利用图像式思考来表达思维的工具。它作为一个组织资源和管理项目的方法,可从脑图的核心分枝派生出各种关联的想法和信
2013-12-26 17:42:27 2143
转载 软件架构分解
多维度的架构分解对复杂的大规模软件系统,软件架构分解是架构设计中必不可少的关键步骤。通过分解识别架构元素,同时也是解决非功能需求的重要手段之一。本文从架构的定义出发,对架构形而上的本质给出了自己独特的理解。在架构设计上提出了架构分解过程模型和多维度多层次分解模型。0 评论:王 国波, 技术总监, 好易科技有限公司2013 年 12 月 16
2013-12-24 14:53:19 1883
转载 CMake入门指南
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者c
2013-12-23 17:03:25 706
转载 方法论、方法论——程序员的阿喀琉斯之踵
By刘未鹏–October 29, 2008Posted in:学习方法,思维改变生活以前,我认为一个事物对我没有直接用途的时候就不会去理会它,心理学上说我们都戴着自己的认知偏见的有色眼镜去有选择性地看待这个世界,纷繁的信息经过我们的认知图式过滤之后便成为少量有序的事件,所以我们都在有强烈选择性地关注一些事物和忽视另一些事物,然而,这样可能会导致丧失一些很有价值的信息,而总
2013-12-19 15:58:07 741
转载 一直以来伴随我的一些学习习惯(四):知识结构
By刘未鹏–December 5, 2008Posted in:学习方法自从建立了TopLanguage以来,发现在上面待的时间越来越多,与高手讨论问题是个粘性十足的事情,一方面,分享自己的认识是整理不成熟的想法的极好途径,另一方面,互相之间视角不同,所以往往自己忽视的地方会被别人发现。在讨论中不断精化既有的知识体系。以下这段基本上摘抄自(略有整理和添加)在 TopLa
2013-12-19 15:29:12 1219
转载 一直以来伴随我的一些学习习惯(三):阅读方法
By刘未鹏–September 17, 2008Posted in:学习方法这篇主要写一些学习(尤其是阅读)的基本方法。1.趁着对一件事情有热情的时候,一股脑儿把万事开头那个最难的阶段熬过去。万事开头难,因为从不了解到了解基本的一些事实,是一个新知识暴涨的阶段,这个时候的困难是最大的。有人熬不过去,觉得困难太大就放弃了。不过,狂热的兴趣可以抵消对困难的感觉,所以趁着
2013-12-19 15:10:46 731
转载 一直以来伴随我的一些学习习惯(二):时间管理
一直以来伴随我的一些学习习惯(二):时间管理By刘未鹏–July 20, 2008Posted in:学习方法,思维改变生活接着上次的写。1.学习和思考的过程中常问自己的几个问题:你的问题到底是什么?(提醒自己思考不要偏离问题。)OK,到现在为止,我到底有了什么收获呢?(提醒自己时不时去总结,整理学习的东西)。设想自己正在将东西讲给别人听(有声思考;
2013-12-19 14:58:45 679
转载 一直以来伴随我的一些学习习惯(一):学习与思考
By刘未鹏–July 8, 2008Posted in:学习方法,思维改变生活1. Google&Wiki(遇到问题做的第一件事情,也是学习某个东西做功课(homework)最先用到的东西。2. 看书挑剔,只看经典。如何选择经典,可以到网上做做功课,看看评价,综合分析一下。3. 做读书笔记。一是将自己阅读的时候的思考(包括闪念)总结下来,二是将书中的好例子摘
2013-12-19 14:51:11 757
转载 函数调用过程栈帧变化详解
首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置 入栈操作:push eax; 等价于 esp=esp-4,eax->[esp];如下图出栈操作:pop e
2013-12-19 11:13:18 1602
转载 详解结构体、类等内存字节对齐
先说个题外话:早些年我学C程序设计时,写过一段解释硬盘MBR分区表的代码,对着磁盘编辑器怎么看,怎么对,可一执行,结果就错了。当时调试也不太会,又根本没听过结构体对齐这一说,所以,问题解决不了,好几天都十分纠结。后来万般无奈请教一个朋友,才获悉可能是结构体对齐的事,一查、一改,果真如此。 问题是解决了,可网上的资料多数只提到内存对齐是如何做的,却鲜有提及为什么这样做(即使提,也相当简
2013-12-19 10:27:26 817
转载 SOA 的基本概念及设计原则浅议
SOA是英文词语"Service Oriented Architecture"的缩写,中文有多种翻译,如"面向服务的体系结构"、"以服务为中心的体系结构"和"面向服务的架构",其中"面向服务的架构"比较常见。SOA有很多定义,但基本上可以分... SOA是英文词语"Service Oriented Architecture"的缩写,中文有多种翻译,如"面向服务的体系结构"、"以服务为
2013-12-16 19:14:41 1214
转载 深入理解gtest C/C++单元测试经验谈
本文基于笔者的实际开发经验,言简意赅地讲解了C/C++单元测试框架gtest的主要使用方法和注意事项,并设计了若干可编译的精简示例,给出了运行效果图。既可以用作gtest的入门教程,也适合作为工作中的快速参考。AD:2013云计算架构师峰会课程资料下载Google C++ Testing Framework(简称gtest,http://code.googl
2013-12-16 18:56:56 1011
转载 编写优美的GTest测试案例
使用gtest也有很长一段时间了,这期间也积累了一些经验,所以分享一下。GTest为我们提供了便捷的测试框架,让我们只需要关注案例本身。如何在GTest框架下写出优美的测试案例,我觉得必须要做到:案例的层次结构一定要清晰案例的检查点一定要明确案例失败时一定要能精确的定位问题案例执行结果一定要稳定案例执行的时间一定不能太长案例一定不能对测试环境造成破坏案例一定独立
2013-12-16 16:56:30 823
转载 玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架
一、前言上一篇我们分析了gtest的一些内部实现,总的来说整体的流程并不复杂。本篇我们就尝试编写一个精简版本的C++单元测试框架:nancytest ,通过编写这个简单的测试框架,将有助于我们理解gtest。二、整体设计使用最精简的设计,我们就用两个类,够简单吧:1. TestCase类包含单个测试案例的信息。 2. UnitTest类负责所有测试案例的执行
2013-12-16 16:42:00 749
转载 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
一、前言“深入解析”对我来说的确有些难度,所以我尽量将我学习到和观察到的gtest内部实现介绍给大家。本文算是抛砖引玉吧,只能是对gtest的整体结构的一些介绍,想要了解更多细节最好的办法还是看gtest源码,如果你看过gtest源码,你会发现里面的注释非常的详细!好了,下面就开始了解gtest吧。二、从TEST宏开始前面的文章已经介绍过TEST宏的用法了,通过TEST宏,我们可以
2013-12-16 16:35:53 693
转载 玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数
一、前言使用gtest编写的测试案例通常本身就是一个可执行文件,因此运行起来非常方便。同时,gtest也为我们提供了一系列的运行参数(环境变量、命令行参数或代码里指定),使得我们可以对案例的执行进行一些有效的控制。二、基本介绍前面提到,对于运行参数,gtest提供了三种设置的途径:1. 系统环境变量2. 命令行参数3. 代码中指定FLAG因为提供了三种途径,
2013-12-16 16:14:10 727
转载 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
一、前言“死亡测试”名字比较恐怖,这里的“死亡”指的的是程序的崩溃。通常在测试过程中,我们需要考虑各种各样的输入,有的输入可能直接导致程序崩溃,这时我们就需要检查程序是否按照预期的方式挂掉,这也就是所谓的“死亡测试”。gtest的死亡测试能做到在一个安全的环境下执行崩溃的测试案例,同时又对崩溃结果进行验证。二、使用的宏Fatal assertionNonfa
2013-12-16 16:03:14 1030
转载 玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化
一、前言在设计测试案例时,经常需要考虑给被测函数传入不同的值的情况。我们之前的做法通常是写一个通用方法,然后编写在测试案例调用它。即使使用了通用方法,这样的工作也是有很多重复性的,程序员都懒,都希望能够少写代码,多复用代码。Google的程序员也一样,他们考虑到了这个问题,并且提供了一个灵活的参数化测试的方案。二、旧的方案为了对比,我还是把旧的方案提一下。首先我先把被测函数IsPr
2013-12-16 15:51:50 701
转载 玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制
一、前言gtest提供了多种事件机制,非常方便我们在案例之前或之后做一些操作。总结一下gtest的事件一共有3种:1. 全局的,所有案例执行前后。2. TestSuite级别的,在某一批案例中第一个案例前,最后一个案例执行后。3. TestCase级别的,每个TestCase前后。二、全局事件要实现全局事件,必须写一个类,继承testing::Environment
2013-12-16 15:01:56 781
转载 玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言
一、前言这篇文章主要总结gtest中的所有断言相关的宏。 gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。一个直观的解释就是:1. ASSERT_* 系列的断言,当检查点失败时,退出当前函数(注意:并非退出当前案例)。 2. EXPECT_* 系列的断言,当检查点失败时,继续往下执行。二、示例// int型比较,预期值:
2013-12-16 14:55:29 615
转载 玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest
一、前言本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例。 二、下载如果不记得网址, 直接在google里搜gtest,第一个就是。目前gtest的最新版本为1.3.0,从下列地址可以下载到该最新版本:http://googletest.googlecode.com/files/gtest-1.3.0.z
2013-12-16 14:28:59 634
转载 矩阵的坐标变换
绕空间任意轴的旋转变换图a:变换之前 绕空间任意轴的旋转变换:先将图形随直线(旋转轴)一起移动和旋转并使直线与某一坐标轴重合,再将图形绕直线进行旋转变换,最后将旋转变换后的图形和直线一起作相反的旋转和移动并使直线回到原来位置。具体变换步骤是: 1、平移使点(x1,y1,z1)位于坐标原点,变换矩阵是:
2013-12-16 10:34:59 5137
转载 旋转变换
绕空间任意轴的旋转变换:先将图形随直线(旋转轴)一起移动和旋转并使直线与某一坐标轴重合,再将图形绕直线进行旋转变换,最后将旋转变换后的图形和直线一起作相反的旋转和移动并使直线回到原来位置。具体变换步骤是: 1、平移使点(x1,y1,z1)位于坐标原点,变换矩阵是: 2、绕x轴旋转,使直线处在x-z平面上。为此,
2013-12-16 09:48:19 2444
转载 Linux命令英文全称
su:Swith user 切换用户,切换到root用户cat: Concatenate 串联uname: Unix name 系统名称df: Disk free 空余硬盘du: Disk usage 硬盘使用率chown: Change owner 改变所有者chgrp: Change group 改变用户组ps:Process Status 进程状态t
2013-12-15 16:16:19 730
转载 如何修改Ubuntu双系统的默认开机启动项
如何修改Ubuntu双系统的默认开机启动项|浏览:686|更新:2013-08-20 22:58|标签:启动项 1 2 3 4 5 6 7 分步阅读对于安装Ubuntu系统和windows系统(windows xp、windows Vista、windows 7等
2013-12-15 12:42:22 1467 1
转载 win7安装ubuntu-11.10-desktop双系统
已安装成功,且能正常运用。1)对要安装ubuntu的硬盘分区格式化,然后在计算机上右键--管理--磁盘管理,对该分区右键,删除卷。这样安装好的ubuntu的分区,在windows下是看不到的,但是进入ubuntu是可以访问windows的磁盘的。2)EasyBCD软件和iso镜像(我使用的是:EasyBCD 2.1.2和ubuntu-11.10-desktop-i386)3
2013-12-15 00:05:09 1043
转载 用VMware 8安装Ubuntu 12.04详细过程(图解)
图解演示环境版本:本机系统: WIN7 虚拟机:VMware Workstation 8 (英文版) 安装目标:Ubuntu Desktop 12.04 LTS (请点击这里)先下载好iso镜像文件 详细过程图解:0. 初始画面,点击“Create a New Virtual Machine”(左上Ubuntu为本人已有开发环境机,请忽略)
2013-12-14 23:11:35 798
转载 Win7中解决无法卸载/升级 VS2008、无法输入序列号的问题
Win7中解决无法卸载/升级 VS2008、无法输入序列号的问题 2011-07-27 09:21:34| 分类: 默认分类|字号 订阅网上有很多方法说通过在控制面板中卸载VS2008进入维护界面可以输入序列号进行注册,然而在Win7中经常会遇到一个错误而退出,“加载安装组建出现问题,取消安装”,“A problem has been encount
2013-12-14 19:54:06 2009
转载 接口设计
什么是接口?接口是CPU和外设之间的连接设备,用于缓存和转发数据。为什么需要接口?(1)解决主机CPU和外围设备之间的时序配合和通信联络问题 主机的CPU是高速处理器件,比如8086-1的主频为10MHz,1个时钟周期仅为100ns,一个最基本的总线周期为400ns。而外围设备的工作速度比CPU的速度慢得多。如常规外围设备中的
2013-12-13 19:17:15 1036
转载 详解大端模式和小端模式
详解大端模式和小端模式嵌入式开发交流群280352802,欢迎加入!一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯
2013-12-13 18:56:26 779
转载 内存越界访问
内存越界访问有两种:一种是读越界,即读了不属于自己的数据,如果所读的内存地址是无效的,程度立刻就崩溃了。如果所读内存地址是有效的,在读的时候不会出问题,但由于读到的数据是随机的,它会产生不可预料的后果。另外一种是写越界,又叫缓冲区溢出,所写入的数据对别人来说是随机的,它也会产生不可预料的后果。内存越界访问造成的后果非常严重,是程序稳定性的致命威胁之一。更麻烦的是,它造成的后果是随机的,表现
2013-12-13 11:25:31 6823
转载 C语言中字符数组和字符串指针分析
这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么用到过C,虽然网上这类的文章也有很多,还是决定自己在这做个小总结,也算加深下自己的印象,写了下面的测试程序:#include int main(int argc, char *argv[]){ char day[15] = "
2013-12-13 10:49:13 707
转载 基于面向对象(OO)的数据库设计模式探讨,第 2 部分
一种基于指标矩阵的数据建模的方法肖建国, 产品经理, 浪潮软件简介: 现在大型的管理系统有几千甚至上万张表,但几乎没有谁能搞清楚所有的数据结构,如何建立清晰明了的数据结构?如何让其他人对数据结构更加容易理解,本文以 “基于面向对象(OO)的数据库设计模式探讨”为基础进一步对汇总表进行分析,通过建立指标矩阵模型,“模式”化数据库建模,建立清晰可读的汇总数据模型。
2013-12-12 17:57:24 1067
转载 基于面向对象(OO)的数据库设计模式探讨 第 1 部分
采用 InfoSphere Data Architect 进行对象分层建模的方法肖建国, 产品经理, 浪潮软件简介: 面向对象(OO)和三范式(3NF)都是成熟的设计方法,本文基于面向对象设计思想和三范式数据库设计方法,提出一种实体对象分层建模的思路,其目的是设计简单明了、标准化的数据库结构,同时能够更好的支持模型驱动模型(MDA)的代码自动生成和代码复用,减少
2013-12-12 17:16:59 1318
转载 函数式思维: 函数设计模式,第 3 部分
解释器模式和扩展语言Gang of Four 的解释器设计模式 (Interpreter design pattern) 鼓励在一个语言的基础上构建一个新的语言来实现扩展。大多数函数式语言都能够让您以多种方式(如操作符重载和模式匹配)对语言进行扩展。尽管 Java™ 不支持这些技术,下一代 JVM 语言均支持这些技术,但其具体实现细则有所不同。在本文中,Neal Ford 将探
2013-12-12 12:51:31 714
转载 函数式思维: 函数设计模式,第 2 部分
相同的问题,不同的范式设计模式仅表现为一种解决问题的方法,然而,如果您主要使用的是面向对象语言,那么您可能会想到 设计模式。在本期的函数式思维 中,Neal Ford 将阐述使用传统设计模式、元编程和函数式组合处理一个常见问题(接口不兼容)的各个解决方案。每种方法都各有利弊,但是考虑解决方案的设计可以帮助您以一种新的方式来看待问题。查看本系列更多内容 | 0 评论:
2013-12-12 10:27:48 840
转载 函数式思维: 函数设计模式,第 1 部分
模式在函数世界中的表现方式与人们的普遍看法相反,设计模式存在于函数式编程中,不过它们有时在外观和行为上不同于其面向对象的模式。在本期的 函数式思维 中,Neal Ford 探究了模式在函数范式中的表现方式,展示了各种解决方案的不同之处。查看本系列更多内容 | 0 评论:Neal Ford, 软件架构师, ThoughtWorks Inc.
2013-12-12 09:45:07 798
转载 使用设计模式改善程序结构(三)
设计模式在某种程度上确实能够改善我们的程序结构,使设计具有更好的弹性。也正是由于这个原因,会导致我们可能过度的使用它。程序结构具有过度的、不必要的灵活性和程序结构没有灵活性一样都是有害的。本文将分析过度的灵活性可能造成的危害,并且结合一些实例来阐述使用设计模式改善程序结构应遵循的原则。0 评论:邓 辉, 软件工程师孙鸣 (dhui@263.net), 软件工
2013-12-11 23:36:00 658
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人