• 计算机笔试基础题-收藏1


    一、进程间通信:
     1.管道(pipe)及有名管道(named pipe)
     2.信号(signal)
     3.消息队列(message queue)
     4.共享内存(shared memory)
     5.信号量(semaphore)
     6.套接字(socket)
    # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 
    # 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 
    # 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 
    # 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 
    # 信号 ( signal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。 
    # 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。 
    # 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

    二、c++的fork()函数
     一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
    fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
        1)在父进程中,fork返回新创建子进程的进程ID;
        2)在子进程中,fork返回0;
        3)如果出现错误,fork返回-1;
    在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
    题:下面的程序执行输出几个hello?
    #include<stdio.h>
    #include <unistd.h>
    int main( ) {
        fork( );
        fork( );
        fork( );
        printf(“hello
    ”);
        return 0;
    }
    正确答案: 8
    这个题目是这样的:
    fork( );
    fork( );
    fork( );
    三条创建子进程的语句,第一句fork()之后,就存在两个进程了,
    两个进程继续往下执行,同理 第二个fork()之后,就存在2*2=4个进程了,
    再继续往下,到第三个fork()之后,程序当中就已经存在2*4=8个进程了,每个进程输出一句hello

    三、数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。

    四、版本控制工具主要有三个:CVS、SVN,Git.
        参考:http://www.cnblogs.com/sujz/archive/2011/05/12/2044379.html

    五、假设一段公路上,1小时内有汽车经过的概率为96%,那么,30分钟内有汽车经过的概率为?
    1个小时内有车通过的概率是0.96,也就是说这个一个小时内没有车通过的概率是0.04。
    题目,故意给出1个小时的单位来迷惑我们。其实,我们可以把单位分解为30分钟。
    我是这么分解的:如果一个小时都没出现任何车辆,就相当于在连续的两个30分钟里面都没有出现任何车辆,
    这里每半个小时是否有车出现绝对是独立,那么我们可以设30分钟内没有车出现的概率为p,可以列出如下公式:
    x² = 0.04 解得 x=0.2 就表示30分钟内出现车辆和不出现车辆是对立事件,那么出现车辆的概率就是0.8.
     
    六、以下设计模式中,哪一项不属于结构性模式?
    引出的知识点:
    1.创建型模式
     
    前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,
    从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:
     
    简单工厂模式(Simple Factory);
     
    工厂方法模式(Factory Method);
     
    抽象工厂模式(Abstract Factory);
     
    创建者模式(Builder);
     
    原型模式(Prototype);
     
    单例模式(Singleton)。
     
    说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。
     
    2.结构型模式
     
    在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。
    对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:
     
    外观模式(Facade);
     
    适配器模式(Adapter);
     
    代理模式(Proxy);
     
    装饰模式(Decorator);
     
    桥模式(Bridge);
     
    组合模式(Composite);
     
    享元模式(Flyweight)。
     
    3.行为型模式
     
    在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,
    这里有11个具体的行为型模式可供研究,它们分别是:
     
    模板方法模式(Template Method);
     
    观察者模式(Observer);
     
    状态模式(State);
     
    策略模式(Strategy);
     
    职责链模式(Chain of Responsibility);
     
    命令模式(Command);
     
    访问者模式(Visitor);
     
    调停者模式(Mediator);
     
    备忘录模式(Memento);
     
    迭代器模式(Iterator);
     
    解释器模式(Interpreter)。

    七、如果某系统15*4=112成立,则系统采用的是几进制?
    假设采用的是x进制,根据等式有:
    (1*x1+5*x0)*4*x0= 1*x2+1*x1+2*x0
    解得x=-3或x=6
    八、
    产生死锁的原因主要是:
    (1) 因为系统资源不足。
    (2) 进程运行推进的顺序不合适。
    (3) 资源分配不当等。
    如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
    就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
    产生死锁的四个必要条件:
    (1) 互斥条件:一个资源每次只能被一个进程使用。
    (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
    (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
    (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
    这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
    一不满足,就不会发生死锁。
    死锁的解除与预防:
    理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
    解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
    定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
    的情况下占用资源。因此,对资源的分配要给予合理的规划。
    九、
    • 分布式中,一般要求的是CAP,分别为一致性,可用性,可分区性
      因为要在分布式系统中,所以我们优先保障可分区性,即P,此时C和A只能保证一个:
      如果保证了一致性,则我们的每次操作,都要求完全一致后才成功,这会严重影响可用性,
      如果保证了可用性,则无法保证一致性。 
      好像分布式系统中最常用的是最终一致性。
    • 分布式领域CAP理论
      Consistency(一致性), 数据一致更新,所有数据变动都是同步的
      Availability(可用性), 好的响应性能
      Partition tolerance(分区容错性) 可靠性
      定理:任何分布式 系统只可同时满足二点,没法三者兼顾。
      忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式 系统,而是应该进行取舍。


       

      十、

      1、RTT(Round-Trip Time): 往返时延:在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
      2、网络延迟:是指各式各样的数据在 网络介质 中通过 网络协议 (如TCP/IP)进行传输, 在 传输介质 中传输所用的时间,即从 报文 开始进入网络到它开始离开网络之间的时间。
      十一、书架一排有5个格子。现在有20本书,编号从1到20。要求20本书要摆放在同一排里,并且从左到右编号依次递减;每个格子至少有一本书;并且编号7,8,9的书籍必须在同一个格子里面。问,一共有多少种可能的摆放方法?
      法一:
      • 把7,8,9看成一本书因此共有18本书,要保证每个格子中都有书,因此可以在1到18之间的空隙中选择四个位置
        组合数 =2380
         
      • 两点:
        一 把7,8,9看成整体一本书
        二 反向思维,把书放到格子想成5个格子的4个挡板在18书之间移动即可
        故C(17,4)
      法二:7,8,9看成一本书,共有18本书,17个空隙,放入4个隔板(a,b,c,d)即分成了5份。共有17*16*15*14=57120种放法。题目又要求20本书从左到右编号依次递减,所以需保证隔板的顺序从左到右依次是a-b-c-d,
      而实际上隔板的排列共有4*3*2=24种,a-b-c-d是其中的一种,所以需要57120/24=2380 
      十二、已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key) = key%7 计算散列地址,并散列存储在散列表A【0....6】中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为?
      平均查找长度=总的查找次数/元素数
      总的查找次数: 38%7=3 (第1次出现3,无冲突,放在位置3,查找次数为1)
      25%7=4(第1次出现4,无冲突,放在位置4,查找次数为1)
      74%7=4(第2次出现4,有冲突,放在位置5,查找次数为2)
      63%7=0(第1次出现0,无冲突,放在位置0,查找次数为1)
      52%7=3(第2次出现3,有冲突,发现冲突3,4,5,故只能放到6,查找次数为4)
      48%7=6 (第1次出现6,有冲突,发现冲突6,0,故只能放到1,查找次数为3)
      1+1+2+1+4+3=12
      元素数=6
      所以:平均查找长度=12/6=2
      十三、用二进制来编码字符串“xyzwxyxx”,需要能够根据编码解码回原来的字符串,则我们最少需要多长的二进制字符串?
      xyzwxyxx:x:4位、y:2位、z:1位、w:1位
      用4、2、1、1构造哈夫曼树
       
      哈夫曼编码的问题 x出现4次 y2次 w1次 z1次
      x用0
      y用10
      w用110 
      z用111
      w和z的编码方案可以互换
      length=1*4+2*2+1*3+1*3=14
      十四、
      • 不稳定的排序算法有:快、希、选、堆。(记忆:找到工作就可以“快些选一堆”美女来玩了(并不能))
        稳定的排序算法:归并,插入排序
      • 不稳定的排序算法:选择排序 (5,7,5,3)3和5交换之后,两个5的相对顺序发
                                                        生了变化)
                                        shell排序  (1, 5, 5, 2,3, 7) 间隔序列为(3, 1), 3的时候
                                                        (1,5,7)(5,2,3)), 在间隔>1的时候会出现不
                                                           稳定
                                        快速排序    (3, 5, 5, 4 ,2, 1)
                                        堆排序       构造堆的时候时稳定的,但是在根节点与尾节点交
                                                         换之后,根节点成为了序列中最后一个,如果字
                                                         节点之一与根节点相同,则其不稳定

      • 十五、

        HTTPS那些事 用java实现HTTPS工作原理

        HTTP协议通常承载于TCP协议之上,有时也承载 于TLS( 安全传输层协议 或 SSL( 安全套接层协议Secure Sockets Layer  协议层之上,这个时候,就成了我们常说的HTTPS

        SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。


         十六、

        网络层:IP协议、ICMP协议、ARP协议、RARP协议。

        传输层:UDP协议、TCP协议。

        应用层:FTP(文件传送协议)、Telenet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议, SNMP协议, TFTP。

        物理层:RJ45、CLOCK、IEEE802.3 
        数据链路:PPP、FR、HDLC、VLAN、MAC 
        网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP
        传输层:TCP、UDP、SPX
        会话层:NFS、SQL、NETBIOS、RPC
        表示层:JPEG、MPEG、ASII
        应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
         
        SMTP:简单邮件传输协议,使用TCP连接,端口号为25,
        SNMP:简单网络管理协议,使用UDP 161端口

        十七、
        SQL:
        DML(data manipulation language)是数据操纵语言:它们是select 、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言,增删查改。 
        DDL(data definition language)是数据定义语言:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。
        DCL(DataControlLanguage)是数据库控制语言:是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。

        
         十八、HTTP
        Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的 查 , 改, 增 , 删 4个操作。到这里,大家应该有个大概的了解了,GET一般用于 获取/查询 资源信息,而POST一般用于 更新 资源信息。

        操作方式

        数据位置

        明文密文

        数据安全

        长度限制

        应用场景

        GET

        HTTP包头

        明文

        不安全

        长度较小

        查询数据

        POST

        HTTP正文

        可明可密

        安全

        支持较大数据传输

        修改数据


        十九、jvm
        两个最基本的java回收算法:复制算法和标记清理算法
         
        1-复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法
        2-标记清理:一块区域,标记要回收的对象,然后回收,一定会出现碎片,那么引出
        标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象
        两个概念:新生代和年老代
        新生代:初始对象,生命周期短的
        永久代:长时间存在的对象
        整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。
        P.S:Serial New收集器是针对新生代的收集器,采用的是复制算法
        Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理
        Parallel Scavenge(并行)收集器,针对新生代,采用复制收集算法
        Serial Old(串行)收集器,新生代采用复制,老年代采用标记整理
        Parallel Old(并行)收集器,针对老年代,标记整理
        CMS收集器,基于标记清理
        G1收集器:整体上是基于标记 整理 ,局部采用复制
         
        综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理。


        二十、上网的时候发现网页不能访问,QQ使用正常,出现此问题最可能的原因是
        QQ和使用的是传输层的UDP协议,网页访问的 http 协议是建立在 TCP 协议上的,因此QQ正常可以排除传输层以下的所有原因。因此,A,C,D不对,选B项。
        所有网页均打不开的可能原因是DNS服务器配错了,或者是指定DNS服务器故障等原因。若是特定网页打不开,可能是要访问的域名被DNS劫持、DNS污染等。
        A 网线问题
        B DNS问题
        C IP地址冲突
        D 网关错误

        
        


  • 相关阅读:
    http-proxy-middleware与express.json()的bug
    20+前端常用的vscode插件(总结推荐)
    图解翻转单向链表,超详细(python语言实现)
    pytest + allure2.x 踩坑-报告无数据
    Pycharm+pytest+allure打造高逼格的测试报告
    Appium Appium Python API 中文版
    appium模拟键盘事件
    AppiumDesktop控制手机和安卓模拟器
    Appium环境搭建超详细教程
    Fiddler抓包工具总结
  • 原文地址:https://www.cnblogs.com/JLZT1223/p/7521787.html
Copyright © 2020-2023  润新知