摘要: 比较有名的三个web server,Windows下是IIS,而Linux/Unix下则主要为Appache HTTP Server (httpd), 另外还有一个专门为运行java code的Tomcat Server,当然是跟着java一起跨平台了。其实Appache HTTP Server也是跨平台的,比如我这两天用的就是Windows下的版本。基本概念 Apache HTTP Server,或者Apache Server,或者httpd,是一个支持Unix和Linux的,提供插件机制的Web Server。 所谓Web Server,是指用来host web sites的软件,hos阅读全文
posted @ 2012-01-08 19:32 lzprgmr 阅读(130) 评论(0) 编辑
摘要: 很早就听说过sqlite这个数据库引擎,但鉴于我一贯好逸恶劳,纸上谈兵的恶劣行径,一直没着手玩过它。记得老东家当年做CAD系统的标准库时,用的就是sqlite来存储那些标准零件 - 作为desktop版本的标准库,作为数据库安装发布到单机,sqlite的确是不二之选。并且按照sqlite支持的容量上限2TB来看,如果每个标准库零件要5M,可以存2*1024*1024/5 = 419430个,应该是足够的!这次用sqlite,主要有两个原因:最近想写一个android下微博知识管理器,对于保存离线数据,sqlite是不二之选csdn泄露的密码,把它导入数据库,一是可以做一些分析,二是可以练习一下阅读全文
posted @ 2012-01-02 16:12 lzprgmr 阅读(138) 评论(2) 编辑
摘要: 自从用了豆瓣,每每看完一部电影,或者一本书,总会在豆瓣留下几笔,对内容的理解也好,自己的感想也罢,少则用短评,多则用评论,偶尔复习浏览,整个的过程,对记忆非常有帮助,而且不怎么花时间 - 理解感想那是自然而然的事,不要去管什么格式文笔,一挥而就是了 —— 三拜九叩都做了,还怕这最后一哆嗦?但是对于技术,这方面的习惯不好 - 往往用过(试过)之后不注意记录,若干时间后又要用到,却已经忘的差不多了,又得重新来学一遍。 这些主要是一些工具,库什么的,以后就都记在博客中了,标之以[try it] 。要快速的学会使用一个新的工具,library,基本上有这么几个步骤吧:了解其基本概念:这是工具是干什么的阅读全文
posted @ 2011-12-31 11:14 lzprgmr 阅读(150) 评论(0) 编辑
摘要: 所谓头文件发布,就是在build某个工程的build过程中,把头文件发布到特定的输出目录,而依赖于此工程的代码,则需要从此特定的输出目录来include头文件。换句话说,在这种做法下,头文件与最终产生的library/binary具有同等地位,它也是build过程的一个产出。我们写C++代码,一般都是直接从source目录包含所需要的头文件的,那么为什么要使用这种头文件发布的方式呢? 我们可以先分析一下不发布头文件可能带来的问题:因为直接从source目录包含头文件,我们无法控制哪些头文件可以include,而哪些不可以。因为很多情况下,我们很可能只想对用户暴露某个层次的api,但对于用户来说阅读全文
posted @ 2011-11-20 17:37 lzprgmr 阅读(1303) 评论(2) 编辑
摘要: 两个月前的今天,离开老东家,投奔新东家,中间不带一点过渡的,这点曾经让我觉得无奈,但也偶尔让我为自己感动一把 —— 真够勤劳的~~~。 不管怎样,6年之后,我终于跳了我人生中第一个槽,。好处是,以后同学聚会,大家不会像看外星人一样盯着我,然后声音提高八度:”神马 - - -,你还在那个公司......" (注意,以上马字读4拍) 恩,还是谈谈新的环境吧。 以前,基本上是躺在windo...阅读全文
posted @ 2011-09-18 12:39 lzprgmr 阅读(583) 评论(7) 编辑
摘要: 咏菊------黄巢待到秋来九月八,我花开后百花杀。冲天香阵透长安,满城尽带黄金甲。入都------李鸿章丈夫只手把吴钩,意气高于百尺楼。一万年来谁著史,三千里外欲封侯。定将捷足随途骥,哪有闲情逐水鸥?遥指芦沟桥畔月,几人从此到瀛洲?石灰吟 ------于谦千锤万凿出深山,烈火焚烧若等闲。粉骨碎身浑不怕,要留清白在人间。元末明初造反口号------韩山童,刘福通莫道石人一只眼,挑动黄河天下反(说实话我真没理解这词到底啥逻辑,不过感觉读起来朗朗上口,而且最后三个字也挑明了主题~)阅读全文
posted @ 2011-08-27 21:56 lzprgmr 阅读(206) 评论(1) 编辑
摘要: Dooyoul是个韩国人,他有个很古代的韩国名字,翻译过来叫:郑斗悦,恩,有点像《大长今》中的某个人物了。Dooyoul是我在Autodesk时的同事,我们不是同一个team,但是去美国office的时候,让我认识了这个热情,友善、坦率的韩国人。Dooyoul保龄球玩的很酷,高尔夫据说也是江湖闻名,而且,除了韩文和英文,尽然还能读中文和日文,怎一个牛逼了得~~~我们在Novi期间,Dooyoul是我们最好的伙伴 -周末了,开车带我们出去玩,至今我还念念不忘环密西根游那次美好的经历中午了,带我们在公司周围遍尝不同的餐馆,要知道,那个乡下地方,要没个车,那是寸步难行哪下雨了,开车到hotel下面来阅读全文
posted @ 2011-07-26 21:53 lzprgmr 阅读(341) 评论(3) 编辑
摘要: 最近的一个项目,是开发一个framework,提供给公司内部不同的产品线使用。 之间遇到的一个问题,就是STL容器的使用, 而结论是不要在公共接口中传递STL容器:这里说的STL容器,但主要则是指容器,字符串类,但其实可以推广到在STL中提供的任何类型,这里说的公共接口,是指需要暴露给客户的sdk头文件,包括函数签名,或者类成员变量;也可以说,不要在暴露给客户的头文件中包含STL的头文件。原因分析为什么有这个结论,我们可以从几个方面来论述:客户端使用的STL版本可能不同因为STL作为标准库,Framework编译的时候使用的STL,与客户端编译的时候使用的STL,版本是有可能不一样的,比如Fr阅读全文
posted @ 2011-07-10 19:32 lzprgmr 阅读(2421) 评论(11) 编辑
摘要: 尾递归就是递归调用在函数的最后一步,这样的递归可以被编译器优化成类似于循环的形式,无须保存stack frame和局部变量,提高性能,一般可以通过一个accumulator参数将一个传统递归改造成尾递归, 一下是一个C++中的例子:int factorial_tail_recursion(int n, int acc){ if (n == 1) { return acc; } return factorial_tail_recursion(n-1, acc * n);}int factorial(int n){ if (n == 1) { return 1; } return n * fact阅读全文
posted @ 2011-05-31 04:30 lzprgmr 阅读(375) 评论(0) 编辑
摘要: 近来一篇<The Dark Side Of C++>在坊间广为转载,作为一个以C++为吃饭家伙的程序员,还是应该下载下来好好读一读的。 总的来讲还是总结的蛮全的,由于个人知识的限制,我读完后将其分为三类:一类是我不以为然的,觉得算不上阴暗面;一类是深有同感,深受其害;而另外一类则是还不理解,需要日后有时间的时候加以研究的。一、不以为然不断变更的标准,迫使我们需要不断更新已有代码。 作者列出了几点其实影响并不是很大(循环变量的scope;头文件后缀;名字空间)。而且,为了标准的进步,偶尔做出的妥协也是应该的吧。不断变更的style,作者举得例子是:Old and busted:for阅读全文
posted @ 2011-05-20 11:55 lzprgmr 阅读(796) 评论(12) 编辑
摘要: 前段时间遇到了一些与BFS有关的有趣的问题,在一些朋友或者资料的帮助下有所思考,发现这个简单的算法如果能应用自如,的确能发挥强大的功效,于是乎写篇博客记录一下。BFS概念很简单,此处有介绍;BFS实现也很简单,用一个queue就可以了;而它确实也是图中一个非常重要的算法,而它确实也可以用来解决一些看似与图没啥明显关系的问题。 理解广度优先搜索,关键在于理解其应用。1. 基本应用广度优先搜索算法是基于图定义的,所以最直观的应用自然就在图中:有明确的vertex和edge。 比如地图,某个地点就是vertex,而连接两个地点的路径,就是edge,假设edge长度都一样(当然,事实上这是不可能的),阅读全文
posted @ 2011-04-17 21:29 lzprgmr 阅读(2442) 评论(3) 编辑
摘要: 这是一篇自我反思,因为我总觉得自己像个没头苍蝇:感觉有很多事要做,但其实又没做什么,把自己搞得很累却又没啥大的收获。要么毫无追求,至少有个平淡的心态去享受每天的生活;要么有所追求,努力的去达成自己的目标。我不是第一种,至少还没到那个境界,所以必须是第二条路。 那么究竟是哪里出了问题:我浪费了很多时间,很多很多时间,这种浪费不仅仅是浪费,更是培养了一种逃避的心态:要做正式的事之前,先上会微博轻松一下,“准备”一下吧;对于研究、阅读资料,我们更醉心于收集资料;在这种貌似有理,实则无用的额外工作下,时间被心安理得的浪费掉了,懒惰与拖沓在不知不觉中培养起来了。这是一个正反馈,这是一个恶性循环!那么我的阅读全文
posted @ 2011-04-09 20:51 lzprgmr 阅读(21598) 评论(27) 编辑
摘要: 之前写过一篇使用COM组件的3种方法的文章:启动COM组件的三种机制,其中后来补充了一个用免注册的方式使用进程外COM组件的方法,因为只是文字补充,没有实例,可能对于怎么实现大家不是很清楚,陆续收到一些同学的信,希望能给个例子。 所以干脆补充一篇,自己也恰好复习一下。步骤大概是这样的:我有一个com.exe的进程外com组件,暴露出一个ITestObject的接口。现在CustomizedWay.exe要调用这个com组件,但不希望通过注册表那一套。 虽然微软提供了registry-free的com组件机制,但目前只支持进程内COM组件(具体参考前文),但由于我们知道一个COM组件被调用的来龙阅读全文
posted @ 2011-03-23 19:42 lzprgmr 阅读(754) 评论(5) 编辑
摘要: 原题是这样的:在校园招聘的季节里,为了能让学生们更好地了解微软亚洲研究院各研究组的情况,HR部门计划为每一个研究组举办一次见面会,让各个研究组的员工能跟学生相互了解和交流(如图1-4所示)。已知有n位学生,他们分别对m个研究组中的若干个感兴趣。为了满足所有学生的要求,HR希望每个学生都能参加自己感兴趣的所有见面会。如果每个见面会的时间为t,那么,如何安排才能够使得所有见面会的总时间最短?最简单的办法,就是把m个研究组的见面会时间依次排开,那我们就要用m * t的总时间,我们有10多个研究小组,时间会拖得很长,能否进一步提高效率?此题的官方解法是将问题转化为一个已知的图的问题:即图的最少着色问题阅读全文
posted @ 2011-03-19 14:45 lzprgmr 阅读(1943) 评论(4) 编辑
摘要: 有这么个问题:我们知道C++中有虚函数的类会有一个对应的虚函数表,那么纯虚类有虚表吗,如果有的话怎么调用纯虚函数?直觉上来讲,应该是有的。 可是既然是纯虚类,说明其对象永远不会被创建,那么维护个虚表貌似也不是很必要了。可以设计个程序来验证一下:class VirtualBase{public: VirtualBase() { // call pure virtual function through a non virtual function in base class's constructor non_virtual_fun(); } void non_virtual_fun()阅读全文
posted @ 2011-03-07 21:56 lzprgmr 阅读(678) 评论(7) 编辑
摘要: 看到有这么道算法题在博客园讨论,算法eaglet和邀月都已经设计出来了,花了点时间读了下,学到点东西顺便记录下来吧。题目是从1...n的数列中,找出总和为n的连续子数列。这里先设好算法中需要用到的关键变量:s:目标子数列的第一个元素k:目标子数列的长度那么目标子数列可以表示为(s, k)1. naive算法(n^2)最笨的,但是最容易的想到的方法,就是穷举所有的子数列:for s = 1 to n for k = 1 to n-s+1 if sum(s, k) == n output(s, k)复杂度为:n + (n-1) + (n-2) + (n-3).... = n(n-1)/2所以,其复阅读全文
posted @ 2011-03-05 17:14 lzprgmr 阅读(1397) 评论(3) 编辑
摘要: 六年啦!!!要不是公司几个一起进来的同事有心,发邮件提醒了一下,还真没注意今天是在这家公司的六周年!记得六年前初来上海,和几个同学一起在公司附近租个房子,每天一起散步上班,散步下班,哦,好像还要去买菜,何其惬意!记得六年前初进公司,一上来就是3个月的培训,每天上午上课,下午做练习,一门课程结束还要考试,何其充实!六年间,从一个学生变成一个职业程序员,但还远称不上优秀;六年间,从学生变成丈夫,然后变成父亲,但似乎还不够成熟老练;十年磨一剑,4年后,再验我这把剑锋利几何 !阅读全文
posted @ 2011-03-01 22:18 lzprgmr 阅读(739) 评论(6) 编辑
摘要: 有些递归是很容易转化成循环的,用一个循环非常直观的映射过去就是了,如求Fibonacci数列; 而有些递归却没有那么直观,甚至可能需要多个循环才能转化过去,这里举个例子:给出一个集合,如(1, 2, 3, 4),打印出该集合的所有子集分析一下问题,子集是指取原集合中的任意多个元素,转化一下问题,就是对于原集合中的任何一个元素,我们都有两个选择,包含或者不包含,所以对于n个元素的集合,其子集数为: 2*2*2... = 2^n。那么可以得出其递归算法:递归的优点是直观、易懂:写起来如此,读起来也是这样。但是每次递归都是call stack的不断叠加,对于这个问题,其需要消耗O(n)的栈空间,栈空阅读全文
posted @ 2011-02-12 08:18 lzprgmr 阅读(3078) 评论(8) 编辑
摘要: 这是在TL讨论中Liu xinyu给出的一个例子,觉得思路挺有启发的,所以整理记录一下。给定一个数组,其内容是一些随机的、不重复的正整数,如:{4, 23, 1, 8, 9, 21, 6, 12}要求找出不在数组中出现的最小的那个数,比如这个数组中未在数组中出现的最小值是:2这个问题实际应用的原型可以是一个ID分配系统,其使用一个数组来保存已分配的ID,每次回收就从数组中删除一个元素(O(n)),而分配则需要找到最小的那个可用的ID,就是这个算法要做的事情。这个问题从naive的解法到快速的解法的思路转换是十分巧妙的,当然,如果之前没有接触过类似的题,注意到这个特性应该不是一件很容易的事。设数阅读全文
posted @ 2011-02-10 09:25 lzprgmr 阅读(3924) 评论(24) 编辑
摘要: 只要是招一个技术人员,不管是初级的程序员还是高级软件工程师,技术上的考核都必不可少。很荣幸作为面试官参与过公司的一些技术面试,从中也体会到了一些东西。首先,我觉得技术面试是需要讲究技巧的,不是随随便便拉一个技术不错的人就可以,因为面试的过程是双方相互交流的过程,你需要给对方营造一个轻松的气氛,并在不断的提问与回答的过程中,进行“合理的引导”,“适时的追问”与“正确的判断”。所以我觉得一个公司的技术...阅读全文
posted @ 2011-01-23 18:17 lzprgmr 阅读(6332) 评论(31) 编辑

黄将军