zoukankan      html  css  js  c++  java
  • 华为一些笔试题~~~~零散总结

    什么样的  二叉树  前序  和中序  遍历的结果  一样??

    前序:根结点,前序遍历左子树,前序遍历右子树 
    中序:中序遍历左子树,根结点,中序遍历右子树
    因此二者遍历结果若相同,应该是整个二叉树中每个结点都没有左孩子,只有右孩子。
    即前序和中序遍历变为:
    前序:根结点,前序遍历右子树
    中序:根结点,中序遍历右子树

    申请内存失败 要不要释放指针
    free()释放的是指针指向的内存!注意!释放的是内存,不是指针!这点非常非常重要!
    指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!
    只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。因此,前面我已经说过了,
    释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。非常重要啊这一点!
    参考http://blog.csdn.net/netanimals/article/details/6530787
    内存申请失败的正确处理
    http://www.vimer.cn/2010/01/c%E4%B8%ADnew%E7%94%B3%E8%AF%B7%E5%86%85%E5%AD%98%E5%A4%B1%E8%B4%A5%E7%9A%84%E6%AD%A3%E7%A1%AE%E5%A4%84%E7%90%86.html
    复制代码
    // malloc 的写法
    char* buffer = (char*)malloc(1024);
    if(buffer) {
        printf("malloc success!
    ");    
    }
    free(buffer);
    
    // new的写法
    try {
        char* buffer = new char[1024];
    }
    catch(...) {
        printf("operator new error!
    ");
    }
    delete []buffer;
    复制代码
    对于malloc方式申请的内存,通过是否是零指针区别;
    对于new方式申请的内存,通过C++异常机制处理。
    http://www.cnblogs.com/pure/archive/2013/02/17/2914798.html


    TCP和UDP在同一节点可以有相同的端口
    http://hi.baidu.com/xp2xp3/item/575a23d8a7229ea16cce3f48

    网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。 

          按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种标识符。为此,TCP/IP协议提出了协议端口(protocol   port,简称端口)的概念,用于标识通信的进程。 

    
    

          端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序(即进程)通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接收,相应进程发给传输层的数据都通过该端口输出。在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问之。 

    
    

          类似于文件描述符,每个端口都拥有一个叫端口号(port   number)的整数型标识符,用于区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。 

    
    

          端口号的分配是一个重要问题。有两种基本分配方式:第一种叫全局分配,这是一种集中控制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于众。第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己与该端口号联系起来(绑扎)。TCP/IP端口号的分配中综合了上述两种方式。TCP/IP将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。因此,每一个标准服务器都拥有一个全局公认的端口(即周知口,well-known   port),即使在不同机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。TCP和UDP均规定,小于256的端口号才能作保留端口。

    
    

     

    
    

     

    
    

    · 再讨论一下,一个服务器监控一个端口,比如80端口,它为什么可以建立上成千上万的连接?

    
    

     

    
    

       首先, 一个TCP连接需要由四元组来形成,即(src_ip,src_port,dst_ip,dst_port)。当一个连接请求过来的时候,服务端调用accept函数,新生成一个socket,这个socket所占用的本地端口依然是80端口。由四元组就很容易分析到了,同一个(src_ip,src_port),它所对应的(dst_ip,dst_port)可以无穷变化,这样就可以建立很多个客户端的请求了。


    基于UDP的文件传输协议:
    简单文件传输协议 (TFTP,Trivial File Transfer Protocol)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务端口号为69。
    简单文件传输协议,它基于UDP协议而实现。它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
    具体详看:http://baike.baidu.com/view/10368905.htm

    优势

    
    
    尽管与FTP相比TFTP的功能要弱得多,但是TFTP具有两个优点:
    
    
    1)TFTP能够用于那些有UDP而无TCP的环境;
    
    
    2)TFTP代码所占的内在要比FTP小。
    
    
    尽管这两个优点对于普通计算机来说并不重要,但是对于那些不具备磁盘来存储系统软件的自举硬件设备来说TFTP特别有用。
    
    

    相同点

    
    
    TFTP协议的作用和我们经常使用的FTP大致相同,都是用于文件传输,可以实现网络中两台计算机之间的文件上传与下载。可以将TFTP协议看作是FTP协议的简化版本。
    
    

    不同点

    
    
    1)TFTP协议不需要验证客户端的权限,FTP需要进行客户端验证;
    
    
    2)TFTP协议一般多用于局域网以及远程UNIX计算机中,而常见的FTP协议则多用于互联网中;
    
    
    3)FTP客户与服务器间的通信使用TCP,而TFTP客户与服务器间的通信使用的是UDP;
    
    
    4)TFTP只支持文件传输。也就是说,TFTP不支持交互,而且没有一个庞大的命令集。最为重要的是,TFTP不允许用户列出目录内容或者与服务器协商来决定哪些是可得到的文件。

    1000个数字中挑出前5个最小的数,用堆排序好,还是用SHELL,或是其他的排序方法?
    同意扫描一编的方法。
    扫一次,变量1)5个的数组,放最小的5个。2)2个普通变量,一个放最小里面最大的数值,一个放最小里面最大的数的位置。扫描到比他大的,就覆盖掉。
    然后把5个排序,用什么算法都行,反正不会影响到复杂度的。

    Big Endian与Little Endian区别

    在设计计算机系统的时候,有两种处理内存中数据的方法。一种叫为little-endian,存放在内存中最低位的数值是来自数据的 最右边部分(也就是数据的最低位部分)。比如一个16进制数字0x12345678,在内存存放的方式如下:

           低地址 ------------------> 高地址        #################################################### 值    #0111,1000 #0101,0110 # 0011,0100  #  0001,0010  #        #################################################### 地址 #      100        #     101        #          102       #      103          #
           ####################################################

     另一种称为big-endian,正好相反,存放在内存中最低位的数值是来自数据的最左边边部分(也就是数据的最高为部分)。  比如一个16进制数字0x12345678,在内存存放的方式如下:

           低地址 ------------------> 高地址        ####################################################  值   # 0001,0010  #0011,0100 # 0101,0110  #  0111,1000  #        #################################################### 地址 #       100         #     101         #        102        #        103         #        ####################################################

    从上面的例子可以看到,采用big endian方式存储数据是符合我们人类的思维习惯的

    big endian:是指低地址存放最高有效字节(MSB:Most Significant Byte, 最高有效字节), little endian:则是低地址存放最低有效字节(LSB:Least Significant Byte, 最低有效字节)

    谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。 IBM, Motorola(Power PC), Sun的机器一般采用大端(big endian)方式存储数据。而x86系列则采用 little endian方式存储数据

    是Little Endian还是Big Endian与操作系统和芯片类型都有关系。 具体情形参考处理器手册。

    http://blog.csdn.net/wyzxg/article/details/5349896



    HUAWEI求职之路,可以看看
    http://peixun.zixiangtx.com/content.asp?id=711
  • 相关阅读:
    Java面试题—初级(4)
    Java面试题—初级(3)
    Java面试题—初级(2)
    Java面试题—初级(1)
    在ESXi使用esxcli命令強制关闭VM
    重置mysql的root密码
    通过RHN网站给RHEL打补丁
    Linux命令之rhn_check
    一键GHOST
    Http错误大全
  • 原文地址:https://www.cnblogs.com/fickleness/p/3259482.html
Copyright © 2011-2022 走看看