1. 结构体、共用体、类
C++中结构体与类的区别:
结构体中的成员访问权限不声明时候默认是 public 的,而类是 private
值得注意的地方是 C++中结构体内是可以有析构函数的。而C中的结构体与C++中不同之处有很多。
结构体和union的区别:
1.struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的。一个struct变量的总长度等于所有成员长度之和。在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。
2.对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。
2.在for循环的最后一个条件中 ++i 和 i++的区别
i++由于是在使用当前值之后再+1,所以会需要一个临时变量来转储,而++i则直接+1,不存在这样的问题。
但是现在的编译器都会进行优化,所以实际的效果是一样的。
3. 寻找1-n中缺失的X
在从1到n的n个数字以无序的状态排列,并且缺少了其中的一个数X,现在要求找出缺失的这个数字。
1.可以分别计算1-n的n项和,以及缺失数字后的n-1项的和,并求出它们之间的差。这个差值即为缺失的数字。
缺点是当n很大时,可能出现内存溢出的状况。
2.利用位运算,异或。使用循环
for(int i=1; i<=n; ++i)
sum=(inumber[i]);
这和在一个数组中只有一个数字是单独的一个,剩下的数字都成对存在, 是一个道理。成对存在的数字在异或的过程中已经为0了,最后剩下的数字就是单独存在的那个。
3.可以用哈希表,访问一个数字就将相应的置为1.最后遍历一遍哈希表,为0的那个就是缺失的那个。
4.寻找1-n中缺失的X、Y
假定我们迷失的数字是S1,S2。那么我们全部异或之后得到的就是S1S2的值。分析一下就可以知道,S1!=S2,也就是说S1S2!=0; 这样也就是说S1S2的这个值有二进制位有一位是1,那么我们就可以把这些所有的数字分成2组,一组这个二进制位是1,另一个这个二进制位是0的来重新做异或。这样就可以把其中一个S1求出来了,那再S1(S1^S2)一下,S2也就得到了。
5. 100个人报数
100个人列队报数,报单数的离队,留下的再依据报数,单数的再离队,这样重复多少次,直至最后只留下一个人,请问此人在第一次报数时是第几号?
探寻规律发现,每次留下的都应是上一次报数中的偶数项,即每次离队后,2的倍数必然会留下。最后剩下的应该是1~100中2n的最大值,即报数6次后留下第64号。
6.计算机网络7层结构
应用层
与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:telnet,HTTP,FTP,NFS,SMTP等。
表示层
这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。
会话层
它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。
传输层
这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。
网络层
这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。
数据链路层
它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。
物理层
OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。
7.TCP和UDP的异同
详见
http://liangjiabin.com/blog/2015/03/difference-between-tcp-vs-udp-protocol.html