文章分类 -  note

摘要:面向对象的3个基本要素:封装、继承、多态面向对象的5个基本设计原则:单一职责原则(Single-Resposibility Principle) 其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而大大损伤其内聚性和耦合度。通常意义下的单一职责,就是指只有一种单一功能,不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因。 专注,是一个人优良的品质;同样的,单一也是一个类的优良设 阅读全文
posted @ 2013-09-25 21:05 legendmaner 阅读(151) 评论(0) 推荐(0)
摘要:作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!典型的UNIX系统都支持一个进程创建多个线程(thread)。在Linux进程基础中提到,Linux以进程为单位组织操作,Linux中的线程也都基于进程。尽管实现方式有异于其它的UNIX系统,但Linux的多线程在逻辑和使用上与真正的多线程并没有差别。1. 多线程我们先来看一下什么是多线程。在Linux从程序到进程中,我们看到了一个程序在内存中的表示。这个程序的整个运行过程中,只有一个控制权的存在。当函数被调用的时候,该函数获得控制权,成为激活(active)函数,然后运行该函数 阅读全文
posted @ 2013-09-25 20:27 legendmaner 阅读(144) 评论(0) 推荐(0)
摘要:1、题目:宿舍内有五个童鞋一起玩对战游戏,每场比赛有一些人作为红方,另外一些人作为蓝方,请问至少需要多少场比赛才能使得任意两个人之间有一场红方对蓝方和一场蓝方对红方的比赛,请写出思路。分析:更具一般性而言,舍有n个人玩对战游戏好喽,要使得任意两个人之间都发生过两种关系(虽然不雅,这里暂时称作“发生关系”)。那么要使得总的比赛次数尽可能小,则每场比赛就要使得尽量多的新的关系产生,比如,第一场比赛,假设红方有m个人,蓝方放了n-m个人,则总共产生m*(n-m)个关系,其中1nLength1){pListHeadLong=pHead2;pListHeadShort=pHead1;nLengthDif 阅读全文
posted @ 2013-09-18 13:12 legendmaner 阅读(311) 评论(0) 推荐(0)
摘要:问题描述:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?这个笔试题,很YD,因为把某个递归关系隐藏得很深.问题分析:我们先把这12个人从低到高排列,然后,选择6个人排在第一排,那么剩下的6个肯定是在第二排.用0表示对应的人在第一排,用1表示对应的人在第二排,那么含有6个0,6个1的序列,就对应一种方案.比如000000111111就对应着第一排:0 1 2 3 4 5第二排:6 7 8 9 10 11010101010101就对应着第一排:0 2 4 6 8 10第二排:1 3 5 7 9 11问题转换为,这样的满足条件的01序列有多 阅读全文
posted @ 2013-09-18 12:52 legendmaner 阅读(304) 评论(0) 推荐(1)
摘要:原文链接:http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages你可能对于 Linux 的负载均值(load averages)已有了充分的了解。负载均值在 uptime 或者 top 命令中可以看到,它们可能会显示成这个样子:load average: 0.09, 0.05, 0.01很多人会这样理解负载均值:三个数分别代表不同时间段的系统平均负载(一分钟、五 分钟、以及十五分钟),它们的数字当然是越小越好。数字越高,说明服务器的负载越 大,这也可能是服务器出现某种问题的信号。而事实不完全如此,是什么因 阅读全文
posted @ 2013-09-17 22:33 legendmaner 阅读(150) 评论(0) 推荐(0)
摘要:Linux strace命令简介strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。输出参数含义root@ubuntu:/usr# strace cat /dev/null execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars * 阅读全文
posted @ 2013-09-03 11:02 legendmaner 阅读(161) 评论(0) 推荐(0)
摘要:概述内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的、复杂的应用程序中,内存泄漏是常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当使用大量的函数对相同的内存块进行处理时,很可能会出现内存泄漏。内存泄露可以分为以下几类:1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也 阅读全文
posted @ 2013-05-24 20:05 legendmaner 阅读(3802) 评论(0) 推荐(0)
摘要:问题:有一个国家的人们只想要男孩,每个家庭都会一直要孩子,直到他们得到一个男孩。如果生的是女孩,他们就会再生一个。如果生了男孩,就不再生了。那么,多年以后男孩多还是女孩多(前提:每次生男孩儿和女孩儿的概率是一样的。)这是在一个网友的面经里见到的一道题,好像也曾经是google的面试题。 网上的答案五花八门,而且大部分是错的,即使有正确的答案,看起来也非常的难懂。下面贴出的是一个名叫“转基因大白菜”网友的答案,该答案非常简单易懂,关键是分析的角度更好,让人拍案叫绝。这道题如果单单从概率的角度或者从个体的角度去分析,其实是很困难的,因为里面出现的情况有太多种了(其实,“转基因大白菜”网友的答案可以 阅读全文
posted @ 2013-05-20 19:36 legendmaner 阅读(394) 评论(0) 推荐(0)
摘要:本文随便转载,请保留出处:http://blog.csdn.net/dylgsy/UML的类图关系分为:关联、聚合/组合、依赖、泛化(继承)。而其中关联又分为双向关联、单向关联、自身关联;下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里。1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用 阅读全文
posted @ 2013-05-04 21:56 legendmaner 阅读(126) 评论(0) 推荐(0)
摘要:第六章、亲和数问题--求解500万以内的亲和数作者:上善若水、July、yansha。出处:http://blog.csdn.net/v_JULY_v。前奏 本章陆续开始,除了继续保持原有的字符串、数组等面试题之外,会有意识的间断性节选一些有关数字趣味小而巧的面试题目,重在突出思路的“巧”,和“妙”。本章亲和数问题之关键字,“500万”,“线性复杂度”。第一节、亲和数问题题目描述:求500万以内的所有亲和数如果两个数a和b,a的所有真因数之和等于b,b的所有真因数之和等于a,则称a,b是一对亲和数。例如220和284,1184和1210,2620和2924。分析: 首先得明确到底是什么是亲和. 阅读全文
posted @ 2013-04-22 12:36 legendmaner 阅读(321) 评论(0) 推荐(0)
摘要:转:http://coolshell.cn/articles/7965.html前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的:题目:请问下面的程序一共输出多少个“-”?1234567891011121314#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){int i;for(i=0; i<2; i++){fork();printf(&q 阅读全文
posted @ 2013-04-20 16:29 legendmaner 阅读(247) 评论(0) 推荐(0)
摘要:移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。 c++中,整数分有符号数和无符号数两种,对于这两种数做左移、右移运算,稍有区别:1、如果是无符号数,不管是左移还是右移都是“逻辑移位”例如,分别对无符号数 179 做左移、右移操作的结果, 图1 逻辑左移图2 逻辑右移2、如果是有符号数,2a,如果是做左移运算,那么做的是“逻辑移位”,同 1中无符号数的左移。2b,如果是 阅读全文
posted @ 2013-04-06 16:35 legendmaner 阅读(1075) 评论(0) 推荐(0)
摘要:递归算法实际上是一种分而治之的方法,它把复杂问题分解为简单问题来求解。对于某些复杂问题(例如hanio塔问题),递归算法是一种自然且合乎逻辑的解决问题的方式,但是递归算法的执行效率通常比较差。因此,在求解某些问题时,常采用递归算法来分析问题,用非递归算法来求解问题;另外,有些程序设计语言不支持递归,这就需要把递归算法转换为非递归算法。将递归算法转换为非递归算法有两种方法,一种是直接求值,不需要回溯;另一种是不能直接求值,需要回溯。前者使用一些变量保存中间结果,称为直接转换法;后者使用栈保存中间结果,称为间接转换法,下面分别讨论这两种方法。1. 直接转换法 直接转换法通常用来消除尾递归和单向递. 阅读全文
posted @ 2013-04-03 12:34 legendmaner 阅读(1839) 评论(0) 推荐(0)
摘要:怎么算同时在线用户数,怎样在工作中预估服务器的架构是否合理,这时就需要考虑下用户的同时在线数和请求数,在实际的性能测试工作中,测试人员一般比较关心的是业务并发用户数,也就是从业务角度关注究竟应该设置多少个并发数比较合理,因此,在后面的讨论中,也是主要针对业务并发用户数进行讨论,而且,为了方便,直接将业务并发用户数称为并发用户数。(1)计算平均的并发用户数:C = nL/T(2)并发用户数峰值:C’ ≈ C+3根号C公式(1)中,C是平均的并发用户数;n是login session的数量;L是login session的平均长度;T指考察的时间段长度。公式(2)则给出了并发用户数峰值的计算方式中 阅读全文
posted @ 2013-03-20 15:13 legendmaner 阅读(1554) 评论(0) 推荐(0)
摘要:Linux系统的route命令用于显示和操作IP路由表(show/manipulatetheIProutingtable)。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置 阅读全文
posted @ 2013-03-05 10:18 legendmaner 阅读(199) 评论(0) 推荐(0)
摘要:今天忙了一天,刚把nginx装在CentOS上,出现了好多问题,快大功告成了,用本机访问虚拟机的时候却出现了不能访问的问题,查了资料以后,原来是防火墙的问题。具体情况如下: 防火墙可以ping通虚拟机,虚拟机也可以ping通防火墙。 接着检查了服务器端的80端口是否可以访问的到:telnet 192.168.131.130 80, 结果访问不到,原来果真防火墙的问题。 做如下处理: -----#/sbin/iptables/ -I INPUT -p tcp --dport 80 -j ACCEPT 然后保存: -----#/etc/rc.d/init.d/iptables save 重启... 阅读全文
posted @ 2013-01-18 22:00 legendmaner 阅读(198) 评论(0) 推荐(0)
摘要:动态规划总结1、分治算法和动态规划算法都是通过对问题进行分解,通过对子问题的求解然后进行解重构,从而实现对原问题的求解。请指出这两种算法在对问题进行分解时各自所遵循的原则。答:分治算法对问题进行分解时所遵循的原则是将待求解问题分解为若干个规模较小、相互独立且与原问题相同的子问题(不包含公共的子问题)。动态规划对问题进行分解时所遵循的原则是将待求解问题分解为若干个规模较小、相互关联的与原问题类似的子问题(包含公共的子问题),采用记录表的方法来保存所有已解决问题的答案,而在需要的时候再找出已求得的答案,避免大量的重复计算。2、动态规划算法的本质是什么,请简要阐述。答:动态规划的实质是分治思想和解决 阅读全文
posted @ 2013-01-17 15:24 legendmaner 阅读(561) 评论(0) 推荐(1)
摘要:1 1. Sed简介 2 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。 3 2. 定址 4 可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行... 阅读全文
posted @ 2013-01-15 18:11 legendmaner 阅读(241) 评论(0) 推荐(0)
摘要:原文地址http://linux.chinaitlab.com/command/815732.html近期在工作中发现,许多同事,尤其是我们的PHP开发者,基本不会用Linux/unix下的快捷方式,严重影响工作效率,所以特撰写此文,每个用法后我会详细注释。 下述所有命令在Linux/unix的shell下有效,这里以bash为主。如有出入,以你自己的服务器为准。本文所指的Linux主要指RHEL/CentOS,unix指的是FreeBSD,这也是服务器中用得最多的版本。 Ctrl + a 切换到命令行开始 这个操作跟Home实现的结果一样的,但Home在某些unix环境下无法使用,便可... 阅读全文
posted @ 2013-01-14 16:18 legendmaner 阅读(117) 评论(0) 推荐(0)
摘要:linux awk命令详解简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式 阅读全文
posted @ 2013-01-13 19:20 legendmaner 阅读(150) 评论(0) 推荐(0)