上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 58 下一页
  2014年2月28日
摘要: 1、TCP通信是可靠的,UDP通信是不可靠的。TCP是怎么保证通信可靠的呢?2、实际项目中,用到串口通信,也要保证通信可靠,TCP的道理应该也是一样的。3、通信之前,三次握手。可以这样认为:a、甲问乙一个问题;b、乙回答甲的问题,同时问甲一个问题;c、甲再回答乙的问题。这样证明二者连接正常了,可以进行数据传输了。4、通信是可靠的,也就是说,甲如何确认乙收到了自己发的信息? 甲乙通信的信息中有两个字段,SendNum和AckNum,SendNum表示向对方问第几个问题,AckNum表示收到了对方的问题,回答对方第几个问题。注意:这种回答方式很特殊,别人问什么,我就把问题重复一边作为回答。5、甲. 阅读全文
posted @ 2014-02-28 18:55 Andy Niu 阅读(945) 评论(0) 推荐(0) 编辑
  2014年2月25日
摘要: 1、开始编写代码时,不要过多考虑效率,而应该首先考虑逻辑的清晰性和代码的可读性。2、后期通过测试找到效率的瓶颈所在,而不是靠猜测。然后,针对性地去解决。也就是80%的时间去解决这20%的代码。 阅读全文
posted @ 2014-02-25 20:16 Andy Niu 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 1、首先考虑new operator,new operator 可以认为做了三件事情:a、调用operator new分配一块内存;b、在这块内存上调用构造方法构造对象;返回指针。2、operator new的声明如下: void* operator new(size_t size) 和C中的malloc一样,operator new只负责分配内存。3、考虑,string* ps = new string("hello"); 相当于做了下列事情: a、void* memory = operator new (sizeof(string)); b、在*memory上面,调用s 阅读全文
posted @ 2014-02-25 20:05 Andy Niu 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 原文:http://www.cnblogs.com/ifaithu/articles/2657663.htmlC#C++C多线程面试1.static有什么用途?(请至少说明两种)1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用2.引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针 阅读全文
posted @ 2014-02-25 19:21 Andy Niu 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 原文:http://blog.csdn.net/dongfengsun/article/details/1541926①链表反转单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:struct linka {int data;linka* next;};void revers 阅读全文
posted @ 2014-02-25 19:19 Andy Niu 阅读(663) 评论(0) 推荐(0) 编辑
摘要: 1、考虑UPint 的加法+,UPint a, b, result; 为了使result = a+10; result= 10+a; 都能通过编译,操作符重载如下: const UPint operator+(const UPint& lhs, const UPint& rhs); 注意:不能使用成员操作符,否则result= 10+a;编译错误,因为隐式类型转换不能转换为this指针。2、在result = 10+a;调用的过程中,10会隐式转换为UPint(条件是UPint单一形参构造方法不是explicit),这导致临时对象的产生,效率降低。3、怎么解决这个问题呢? 增加 阅读全文
posted @ 2014-02-25 19:15 Andy Niu 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 1、考虑++(--的情况是一样的),前置是累加然后取出,后置是取出然后累加。2、重载方法根据形参表的不同区分,问题来了,前置和后置形式都没有形参,因此没法区分。怎么办? 对于后置增加一个形参int,在方法内并不使用这个形参,因此去掉形参名。3、考虑UPint(unlimited precision int)类,对于前置,返回引用,实现如下: UPint& UPint::operator++() { *this+=1; return *this; }4、考虑后置,后置返回老的对象。为了保证前置和后置的结果一致性,和代码的复用,使用后置调用前置。如下: const UPint... 阅读全文
posted @ 2014-02-25 18:54 Andy Niu 阅读(641) 评论(0) 推荐(0) 编辑
摘要: 1、C++对于真假值表达式采用“骤死式”评估方法,比如&&,||。 if( p!=NULL&& strlen(p)>10) 如果p为NULL,后面的strlen不会被执行。 if(index upper) 如果index += -= *= /= %= ^= &= |= > >>= = && || ++ -- , ->* -> () []7、对于允许重载的操作符,必须有个好理由,才去重载。 阅读全文
posted @ 2014-02-25 18:29 Andy Niu 阅读(839) 评论(0) 推荐(0) 编辑
  2014年2月24日
摘要: 1、对于内置类型,x = x+y 与x+=y的结果相同。2、x=x+y 与 x+=y的结果相同,但二者做的事情差别很大。 a、x=x+y做的事情:方法内有个局部对象,值为x+y,返回局部对象,返回值是个临时对象,这个临时对象赋值给x。 b、x+=y做的事情:直接在x上操作,修改x的内容,并返回x的引用。3、从上面的分析可以知道,操作符复合形式(+=)比单独形式(+)效率高很多,复合形式避免了局部对象和临时对象的构造和析构,以及对x的copy赋值。4、为了避免重复代码和保持代码的一致性,应该让+调用+=,如下: template const T operator+(const T& l. 阅读全文
posted @ 2014-02-24 21:03 Andy Niu 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 1、在类中可以访问private成员包括两层含义:可以访问this指针的private成员;可以访问同类对象的private成员。2、这里的String可以认为是个资源管理类,内部有个char指针,在堆上分配对象,而且对于String应该是深复制,不是复制指针,而是要复制指针指向的内容。String类的定义(头文件): 1 #ifndef String_H_ 2 #define String_H_ 3 class String 4 { 5 public: 6 String(const char* src); 7 String(const String& rhs); 8 String&a 阅读全文
posted @ 2014-02-24 19:51 Andy Niu 阅读(374) 评论(0) 推荐(0) 编辑
上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 58 下一页