zoukankan      html  css  js  c++  java
  • C++/C面试题

    (1)

    按位运算只适用于字符型和整数型变量以及它们的变体,对其他数据类型不适用;

    (2)

    一般在打开网页时,需要在浏览器中输入网址,因此,需要通过网址找到访问资源的 IP 地址,从而可以把请求发送到对应的机器上,在这个过程中需要 DNS(Domain Name System, 域名系统,它是互联网上作为域名和 IP 地址相互映射的一个分布式数据库,能够使用户更 方便地访问互联网,而不用去记住能够被机器直接读取的 IP 数据串。通过主机名,最终得 到该主机名对应的 IP 地址的过程称为“域名解析”)协议;HTTP 是用于从 Web 服务器传输超文本到本地浏览器的传输协议。浏览器与服务器通过 HTTP 进行交互。HTTP 是应用层协议,在传输层是通过 TCP 来传输 HTTP 请求的。Telnet 是 Internet 远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。一般使用方法为通过终端登录到远处主机,因此,在浏览器打开网页的过程中用不到。

    (3)属于构造散函数的方法是

    常用的构造散列函数的方法有直接定址法数字分析法、平方取中法、折叠法、除留余 数法和随机数法

    1)直接定址法:取关键字或关键字的某个线性函数值为散列地址。例如,H(key)=a*key+b, 其中,a 和 b 为常数。

    2)数字分析法:假设关键字是以 r 为基数(例如以 10 为基数的十进制数)的,并且散列表中可能出现的关键字都是事先知道的,则可取关键字的若干数位组成散列地址。

    3)平方取中法:取关键字平方后的中间几位作为散列地址。

    4)折叠法:将关键字分割成位数相同的几部分,然后取这几部分的叠加和作为散列地址。
    5)除留余数法:取关键字被某个小于或等于散列表长 m 的数 p 除后所得的余数作为散 列地址(f(key) = key mod p (p≤m),m 为散列表表长)。

    6)随机数法:选择一个随机函数,取关键字的随机函数值作为它的散列地址。

    (4)

    拷贝构造函数是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他 对象的构建及初始化。拷贝构造函数的名称必须与类名称一致,函数的形式参数是本类型的 一个引用变量,并且必须是引用;

    (5)静态成员函数独立于对象而存在,无法实现多态,而且静态成员函数没有this 指针,无法找到虚函数表,所以不能将静态成员函数设计为虚函数;

    (6)函数的 inline 属性是在编译时确定的,是静态行为。而 virtual 的性质是在运行时确定的,是动态行为。

    (7)不能用返回值来区分重载函数,判断依据是: 参数类型,参数个数。

    (8)已知集合 A 和集合 B 的元素分别用不含头结点的单链表存储,函数 difference()用于求解 集合 A 与集合 B 的差集,运算结果保存在集合 A 的单链表中。例如,若集合 A={5,10,20,15,25,30},集合 B={5,15,35,25},完成计算后 A={10,20,30}。

    struct node
    {
    int value;
    node* next;
    };

    #include<stdio.h>
    #include<iostream>
    #include<stdlib.h>
    #include"difference.h"
    void difference(node** LA, node* LB)
    {
    node *pa, *pb, *pr, *q;//pr用来删除节点时候的链接
    pr = NULL;
    pa = *LA;
    while (pa)//以链表LA中的值为参考,依次与LB中元素比较
    {
    pb = LB;
    while (pb&&pb->value != pa->value)//LB链表没有到末尾且……
    pa = pa->next;
    if (pb)//找到一个相同的值,这里用非空
    {
    if (!pr)//pr用来指向相同元素的前节点,这里是头节点
    *LA = pa->next;
    else//LA的头节点在LB中没有找到相同的值,即不是头节点
    pr->next = pa->next;//
    q = pa->next;//删除相同的节点
    pa = pa->next;
    free(q);
    }
    else//LB遍历完了也没有找到相同的,
    {
    pr = pa;
    pa = pa->next;
    }
    }
    }

     (9)静态局部变量存储在进程的全局区;

    (10).有一个变量 .有一个变量 .有一个变量 int int a=0a=0 ,两个线程同时对其进行 +1 操作,每个线程加 100次操作不加锁最后 次,不加锁最后 次,不加锁最后a的值为?

    多线程(Multithreading)是指在软件或者硬件上实现多个线程的并发执行。本题中,+1 操作的执行过程如下:取出变量 a,对变量 a 执行+1 操作,把计算结果放回去。如果两个线 程中+1 操作都没有被中断,所有+1 操作都生效了,那么此时相应地对 a 执行了 200 次+1 操 作,在这种情况下,a 的值变为 200。

    由于这两个线程在对 a 执行+1 操作时,并没有加锁, 因此,有可能会导致部分+1 操作丢失。过程如下所示:

    1)线程 1 读取变量 a 的值(读取到寄存器中)为 0。

    2)线程 2 读取变量 a 的值,此时读取到的值也为 0。

    3)线程 1 对 a 执行+1 操作并放回去,此时 a 的值为 1。

    4)线程 2 也对 a 执行+1 操作并放回去,由于此时线程 2 中寄存器中 a 的值为 0,执行 +1 操作后变为 1 并放回去,此时 a 的值还为 1。

    在这种情况下,线程 1 对 a 执行+1 的操作就会丢失。因此,执行结束后,a 的最大值为 200

  • 相关阅读:
    Ubuntu 18.04.3 更改系统语言为简体中文
    Centos7.3、nginx环境下部署hugo博客
    Centos7.3 卸载 Nginx(彻底卸载) 并重新安装 Nginx(RPM源yum安装)
    Centos7.3、nginx环境下部署hexo博客(非git推送方式)
    使用阿里云对象存储OSS+PicGo搭建图床
    Hexo博客添加LiveRe评论系统
    使用 jsDelivr CDN加速Github 仓库的图片
    解决win10一开机占用内存就飙到70%的问题
    [Andriod官方训练教程]管理Activity的生命活动之停止和重启一个Activity
    [Andriod官方训练教程]支持不同的设备之支持不同的语言
  • 原文地址:https://www.cnblogs.com/hai5111/p/7602606.html
Copyright © 2011-2022 走看看