软件开发
文章平均质量分 69
梧桐168
程序员
展开
-
数字员工之“哑铃理论”
数字员工之“哑铃理论”原创 2023-01-04 11:14:48 · 135 阅读 · 0 评论 -
位图排序算法优化篇-永无止境
我觉得需要……需要速度!”---《Top Gun》笔者上次写了一篇位图算法实践,介绍了位图算法的概念,编写了一个代码案例并对比了快速排序算法,实践结果性能提高9倍以上,结果还是非常不错的,但正如汤姆克鲁斯在电影《Top Gun》中吐露的心声:人类对于性能的追求是永无止境的!快如剃刀的位图算法是否还有进一步优化的空间呢?答案是肯定的!再次审视分析位图算法的代码实现逻辑:就是依次遍历排序数列,以数值为索引给位图数组赋值。静心深思,大脑中很快就蹦出了优化思路:这个遍历赋值的过程是单线程操作,程序开..原创 2022-05-08 21:05:47 · 707 阅读 · 0 评论 -
位图排序算法实践
一.算法介绍排序算法是计算机专业必学的内容,教科书里介绍的像冒泡排序,插入排序,Shell排序,堆排序,快速排序等几种经典的排序算法,其中快速排序最为推荐和广为人知,其采用二分分组递归的方式,对数据巧妙而快速的排序,平均性能复杂度为N*LogN,商用的代码库一般会使用快速排序(由于其最差性能复杂度为N*N,像STL库里面的排序算法会结合插入排序和堆排序,使其最差性能复杂度也能达到NLogN)。但是除了这些教科书里面的算法,有没有其它的排序算法,排序算法的时间复杂度能不能突破理论上的极限N*LogN呢?原创 2022-05-08 20:56:50 · 142 阅读 · 0 评论 -
真正的程序员,请你站出来
<br />我们积极的对外招聘已经有四个多月了,如果要问从这次经历中有哪些收获,我只能说,我终于明白,Jeff Atwood在FizzBuzz这篇文章里说的并不是玩笑话。(译者:这篇文章里说程序员不会编程)。<br />在新成立的公司中,我们RethinkDB公司因面试过程最为苛刻而出名。这是事实——我们对面试过程不会有半点妥协。我们期望通过最大范围的筛选来建立一个高质量的开发团队。对于这个初衷,我在之前的一些文章里提到过多次。在过去的几个月里,我们遇到不少人认为我们的要求高的有些离谱,以为我们是在招聘同时转载 2010-07-19 12:46:00 · 645 阅读 · 0 评论 -
C++怎么取出系统时间
<br />//方案— 优点:仅使用C标准库;缺点:只能精确到秒级<br />#include <time.h> <br />#include <stdio.h> <br />int main( void ) <br />{ <br />time_t t = time(0); <br />char tmp[64]; <br />strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); <br />puts( tmp );转载 2010-06-13 15:01:00 · 1327 阅读 · 0 评论 -
架构--框架--设计模式的关系
<br />“设计模式”是某个局部;“框架”是程序的骨架;“架构”是局部如何组织为整体!<br />设计模式是对某一类典型问题的通用解法,它强调某一个局部的合理性。相对来说,<br />它是微观的,是老百姓的需要考虑的一些事情,是程序员或某一子模块设计师的工作任务。<br />而软件架构更关注于整体,它需要更多地从宏观上、从整体去考虑问题,因此,系统构架<br />师需要对整体系统的合理性担负负责。架构是关注各个子模块如何组织及开发,又如何交<br />互并组成我们最终需要的系统,它关注的是这些元素之间的组转载 2010-09-13 15:34:00 · 665 阅读 · 0 评论 -
JBoss 数据库连接池 Mysql Sqlserver
<br />一、配置MySQL数据库<br />1. 安装MYSQL数据库<br />2、在mysql中创建一个数据库,名字为:test;再在此库中创建一个表,表名为tree。使用脚本如下:<br />3、然后再此表中插入两条数据<br />use test;<br />insert into tree values('1','测试数据1');<br />insert into tree values('2','测试数据2');<br />4、下载并安装mySQL的JDBC驱动程序,去www.mysq转载 2010-09-28 14:50:00 · 1067 阅读 · 0 评论 -
什么是软件架构
<br />软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。 <br /> 软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个转载 2011-03-18 17:58:00 · 1063 阅读 · 0 评论 -
从重构到模式-使用策略模式扫描文件夹
在Windows程序开发中,我们经常要和文件夹打交道.而Windows也提供了一些API让我们来进行文件夹遍历访问操作。其中主要有以下几个函数:1) FindFirstFile声明:HANDLE FindFirstFile( LPCTSTR lpFileName, // file name LPWIN32_FIND_DATA lpFindFileData // databu原创 2011-11-15 16:18:26 · 969 阅读 · 1 评论 -
排序算法实践
那天阅读《代码之美》这本书的章节,写个程序试试其中的排序算法的例子,运行成功后,突然想试试和VC9自带的 STL sort函数比较一下,测试结果出乎我所料,这个例子比STL 的sort函数一般快上3~4倍之多,觉得很是奇怪,检查了一下,发现应该是debug版的原因,切换到release版再测,对于小数据STL 的sort要快很多,但是碰到大数据量(千万级别的数据)的时候,这个例子有的时候反到要快不原创 2010-05-17 10:47:00 · 641 阅读 · 0 评论 -
设计模式在FileBrowser中的几个应用
设计模式是代码重构的最终目标,在程序设计中有效的运用这项技术,可以大大提高代码的可读性和可维护性。使整个程序设计结构趋向精致完美。在我维护的FileBrowser模块中可以针对以下方面应用相应的模式。1. 使用策略模式来处理文件夹扫描操作作为网络文件浏览器,FileBrowser中自然有很多对文件夹的操作。包括计算文件夹信息,删除文件夹等,这些操作采用的都是标准的文件夹遍历的代码,只是原创 2024-07-21 08:26:21 · 940 阅读 · 1 评论 -
开发的一些想法
我之前在一家做push email 开发的老美公司,整个产品规模很大,光客户端的代码就有3百多万行代码。架构也极其的复杂。客户端几十个线程,上层是跨平台的。发送一封email的流程非常艰涩,光中间一层传递流程的函数调用深度就有18层,我戏称之为“18层地狱”。这样的程序之前一直在波兰的一家外包公司维护,现在波兰site关闭了,整个系统移交到中国这边来做。前期波兰派几名工程师过来给我们培训,从他原创 2010-05-11 11:03:00 · 682 阅读 · 0 评论 -
STL学习-Trait
// Sample2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "windows.h"#include "time.h"#include #include #include #include #include using namespace std;#def原创 2007-04-30 10:41:00 · 1256 阅读 · 0 评论 -
文件夹同步算法概述
以前为公司的产品完成过此功能,总的实现有点复杂,这里说一下大概的算法.1) 扫描本地同步目录,记录目录下所有文件.2)扫描远程同步目录,记录目录下所有文件,并发送到本地端.3) 不分大小写的排序本地/远程同步目录的文件列表。4) 通过归并比较,得到四组文件:本地仅有的文件,远程仅有的文件,本地新的文件,远程新的文件。5) 根据用户的选项,传输这四组文件。对于处理大的文件夹(3万以上),这里存在几个原创 2008-08-05 10:03:00 · 2265 阅读 · 3 评论 -
用宏来生成代码
在很多教科书里,宏作为典型的反面教材,备受诟病。确实在很多方面宏扮演着很不光彩的角色,完全应该被其它的代码方式所取代(例如const变量,函数)。但是在对于处理重复机械的代码的自动代码生成方面,宏却能发挥意想不到的作用,而且是其它方式例如函数所无法取代的。例如MFC,ATL的架构设计里就有大量的宏的应用。下面我就列举一些宏生成代码的例子。1.计算数组大小:好多时候,程序员都会混淆在计算静原创 2008-08-05 10:04:00 · 1207 阅读 · 0 评论 -
一点想法
学习了解了诸如COM+,面向对象,设计模式,“额外的中间层”。。。等技术和原理之后,感觉这些技术理论,到底都是为了达到”强内聚,弱耦合“目标。比如COM+的设计思想就是让接口与实现分离,客户端只包含接口调用的代码,不论服务端实现如何改变,客户端都无须重新编译,从而达到二进制的耦合。额外的中间层的思想,也是将变化的部分封装起来,从而降低的耦合度。使得模块易于维护扩展。。。。心中明确了这个基本思想,应原创 2008-08-05 10:09:00 · 544 阅读 · 0 评论 -
GDI 绘图的几个技巧
1. 解决屏幕闪烁的双缓冲技术:1) 将所要绘制的元素一次性绘制到后台DC,然后将后台DC拷贝到屏幕DC上.2) 重写擦除窗体背景函数BOOL OnEraseBkgnd(CDC* pDC) ,直接return tuere.2.用对象来管理GDI对象:在构造函数中创建GDI对象,在析构函数中释放.3. 脏矩形技术实现快速平滑的动画绘制,实现步骤:1)将背景窗口内容拷贝到一个内存DC中d原创 2008-08-05 10:10:00 · 2257 阅读 · 1 评论 -
数组访问注意的几个方面
1.作动态组字符串操作的时候,一定要比实际长度多分配一个结束符,并将最后一个字符设置为NULL.2.尽量使用vector来代替数组.3.尽量使用string来代替char*.4.利用for_each,generate...等STL容器算法,来代替手写的数组循环访问操作语句。5. 使用语言来计算静态数组大小, 这里有一个比较有用的宏#define NELEMS(static_array) (siz原创 2008-08-05 10:15:00 · 876 阅读 · 0 评论 -
代码重构 - 表驱动和工厂模式结合
我目前负责的模块File Browser是专门管理网络文件的软件,用户对于远程电脑文件的处理都是通过发送PDU进行的。因为支持的功能繁多,所以PDU的类型也很多,由于PDU处理机制过程比较复杂,而老的处理方法又很不灵活,导致添加新的PDU类型,以及对现有PDU类的改动比较麻烦,有牵一发而动全身的感觉。所以有必要对此机制加以优化改良。我们先看看PDU接受的过程:Fiel Browser从 ARM层得原创 2009-07-31 11:05:00 · 904 阅读 · 0 评论 -
xpcom组件开发总结
1) 安装好XPCOM Wizard。使用专门的XPCOM 开发插件,方便开发 2) 使用与Mozilla浏览器相应的开发包,这一点很重要,之前就是因为版本问题,一直试不通。 3) 将生成的dll和xpt 文件拷贝到Mozilla/components 目录 4) 使用regxpcom -x "Mozilla Path" dllname 注册控件,一定要在"Mozilla Path"上原创 2010-05-11 10:53:00 · 808 阅读 · 0 评论 -
设计模式在鼠标绘图中的应用
设计模式是代码重构的最终目标,在程序设计中有效的运用这项技术,可以大大提高代码的可读性和可维护性。使整个程序设计结构趋向精致完美。下面我就从常见矢量绘图的例子来阐述一些常见模式的运用。矢量绘图系统中,用户需要用鼠标在视图中绘制多种图形(点,折线,多边形,圆,曲线等),并对其进行编辑。我们来看看鼠标绘原创 2006-05-19 15:25:00 · 1671 阅读 · 1 评论