zoukankan      html  css  js  c++  java
  • 第一次面试-尚德(卒)

      毫无经验的一次面试,笔经面经全没过,也未曾复习,狠狠的摔了一跤!

      一、有关栈的插入、查询要求编写代码(数据结构)

      二、TCP、UDP区别(转载http://zhangjiangxing-gmail-com.iteye.com/blog/646880

      TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次对话才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:我想给你发数据,可以吗?,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:可以,你什么时候发?,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:我现在就发,你接着吧!,这是第三次对话。三次对话的目的是使数据包的发送和接收同步,经过三次对话之后,主机A才向主机B正式发送数据。
    详细点说就是:
      TCP三次握手过程
      1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:

      我想要和你通信;你可以用哪个序列号作为起始数据段来回应我. 

      2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事: 

      我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我

      3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了

      这样3次握手就完成了,主机A和主机B 就可以传输数据了.
      3次握手的特点
      没有应用层的数据
      SYN这个标志位只有在TCP建产连接时才会被置1
      握手完成后SYN标志位被置0

      TCP建立连接要进行3次握手,而断开连接要进行4次

      1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
      2  主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
      3 由B 端再提出反方向的关闭请求,将FIN置1
      4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
      由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础
      名词解释
      ACK  TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段
    都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.
      SYN  同步序列号,TCP建立连接时将这个位置1
      FIN  发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1
      TCP的包头结构:
      源端口 16位
      目标端口 16位
      序列号 32位
      回应序号 32位
      TCP头长度 4位
      reserved 6位
      控制代码 6位
      窗口大小 16位
      偏移量 16位
      校验和 16位
      选项  32位(可选)
      这样我们得出了TCP包头的最小长度,为20字节。

      UDP(User Data Protocol,用户数据报协议)
      (1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
      (2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
      (3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
      (4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
      (5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
      (6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
      我们经常使用ping命令来测试两台主机之间TCP/IP通信是否正常,其实ping命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
      UDP的包头结构:
      源端口 16位
      目的端口 16位
      长度 16位
      校验和 16位

      小结TCP与UDP的区别:
      1.基于连接与无连接;
      2.对系统资源的要求(TCP较多,UDP少);
      3.UDP程序结构较简单;
      4.流模式与数据报模式 ;
      5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

      三、linux基本命令。强调了mount挂载文件开机挂载文件是否还在。

      常用指令

    ls          显示文件或目录

         -l           列出文件详细信息l(list)

         -a          列出当前目录下所有文件及目录,包括隐藏的a(all)

    mkdir         创建目录

         -p           创建目录,若无父目录,则创建p(parent)

    cd               切换目录

    touch          创建空文件

    echo            创建带有内容的文件。

    cat              查看文件内容

    cp                拷贝

    mv               移动或重命名

    rm               删除文件

         -r            递归删除,可删除子目录及文件

         -f            强制删除

    find              在文件系统中搜索某文件

    wc                统计文本中行数、字数、字符数

    grep             在文本文件中查找某个字符串

    rmdir           删除空目录

    tree             树形结构显示目录,需要安装tree包

    pwd              显示当前目录

    ln                  创建链接文件

    more、less  分页显示文本文件内容

    head、tail    显示文件头、尾内容

    ctrl+alt+F1  命令行全屏模式

     

      系统管理命令

    stat              显示指定文件的详细信息,比ls更详细

    who               显示在线登陆用户

    whoami          显示当前操作用户

    hostname      显示主机名

    uname           显示系统信息

    top                动态显示当前耗费资源最多进程信息

    ps                  显示瞬间进程状态 ps -aux

    du                  查看目录大小 du -h /home带有单位显示目录信息

    df                  查看磁盘大小 df -h 带有单位显示磁盘信息

    ifconfig          查看网络情况

    ping                测试网络连通

    netstat          显示网络状态信息

    man                命令不会用了,找男人  如:man ls

    clear              清屏

    alias               对命令重命名 如:alias showmeit="ps -aux" ,另外解除使用unaliax showmeit

    kill                 杀死进程,可以先用ps 或 top命令查看进程的id,然后再用kill命令杀死进程。

     

      打包压缩相关命令

    gzip:

    bzip2:

    tar:                打包压缩

         -c              归档文件

         -x              压缩文件

         -z              gzip压缩文件

         -j              bzip2压缩文件

         -v              显示压缩或解压缩过程 v(view)

         -f              使用档名

    例:

    tar -cvf /home/abc.tar /home/abc              只打包,不压缩

    tar -zcvf /home/abc.tar.gz /home/abc        打包,并用gzip压缩

    tar -jcvf /home/abc.tar.bz2 /home/abc      打包,并用bzip2压缩

    当然,如果想解压缩,就直接替换上面的命令  tar -cvf  / tar -zcvf  / tar -jcvf 中的“c” 换成“x” 就可以了。

     

      关机/重启机器

    shutdown

         -r             关机重启

         -h             关机不重启

         now          立刻关机

    halt               关机

    reboot          重启

      四、循环队列优点

      1、循环队列的优点:
      可以有效的利用资源。用数组实现队列时,如果不移动,随着数据的不断读写,会出现假满队列的情况。即尾数组已满但头数组还是空的;循环队列也是一种数组,只是它在逻辑上把数组的头和尾相连,形成循环队列,当数组尾满的时候,要判断数组头是否为空,不为空继续存放数据。
      2、循环队列的缺点:
      循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列是"空"是"满"。
      3、拓展知识:
      为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列。

      五、hashmap和hashtable区别

     六、linklist和Arraylist区别

  • 相关阅读:
    关于jetty服务器默认首页和端口设置
    yum提示Another app is currently holding the yum lock; waiting for it to exit...
    21.线程池ThreadPoolExecutor实现原理
    20.并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解
    19.并发容器之BlockingQueue
    18.一篇文章,从源码深入详解ThreadLocal内存泄漏问题
    17.并发容器之ThreadLocal
    16.并发容器之CopyOnWriteArrayList
    15.并发容器之ConcurrentLinkedQueue
    14.并发容器之ConcurrentHashMap(JDK 1.8版本)
  • 原文地址:https://www.cnblogs.com/NoPeach/p/8040174.html
Copyright © 2011-2022 走看看