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

时间: 2024-11-13 10:02:34

C++/C面试题的相关文章

【转】嵌入式软件工程师经典笔试题

嵌入式软件工程师经典笔试题 > 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中 有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3).

10个常见的Node.js面试题

如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. 在进入正文之前,需要提前声明两点: 这些问题只是Node.js知识体系的一个局部,并不能完全考察被面试者的实际开发能力. 对现实世界开发中遇到的问题,需要的是随机应变与团队合作,所以你可以尝试结对编程. Node.js面试题列表 什么是错误优先的回调函数? 如何避免回调地狱? 如何用Node来监听8

.NET教程:.NET 面试题之IEnumerable

.NET教程,今天给大家介绍的是:.NET 面试题之IEnumerable ,这是在面试的时候可能会碰到的一道题目,这道题的注解分为了两个部分,这一篇是第一部分! 什么是IEnumerable? IEnumerable及IEnumerable的泛型版本IEnumerable是一个接口,它只含有一个方法GetEnumerator.Enumerable这个静态类型含有很多扩展方法,其扩展的目标是IEnumerable. 实现了这个接口的类可以使用Foreach关键字进行迭代(迭代的意思是对于一个集合

java 19 - 9 finally有关的面试题

1 /* 2 * 面试题: 3 * 1:final,finally和finalize的区别 4 * final:最终的意思,可以修饰类,成员变量,成员方法 5 * 修饰类,类不能被继承 6 * 修饰变量,变量是常量 7 * 修饰方法,方法不能被重写 8 * finally:是异常处理的一部分,用于释放资源. 9 * 一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了 10 * finalize:是Object类的一个方法,用于垃圾回收 11 * 12 * 2:如果catc

java面试题大全

java面试笔试题大汇总     第一,谈谈final, finally, finalize的区别. 最常被问到. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统). 第四,&和&&的区别. 这个问得很少. 第五,HashMap和Hashtable的区

【面试】iOS 开发面试题(二)

1. 我们说的oc是动态运行时语言是什么意思? 答案:多态. 主要是将数据类型的确定由编译时,推迟到了运行时. 这个问题其实浅涉及到两个概念,运行时和多态. 简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法. 多态:不同对象以自己的方式响应相同的消息的能力叫做多态.意思就是假设生物类(life)都用有一个相同的方法-eat; 那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法. 也就是不同的对象以自己的

JAVA常见面试题及解答-java开发

JAVA常见面试题及解答 Java的垃圾回收总结  浅谈Java中的内部类 1)transient和volatile是java关键字吗? 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多

链表面试题Java实现【重要】

本文包含以下内容: 1.单链表的创建和遍历 2.求单链表中节点的个数 3.查找单链表中的倒数第k个结点(剑指offer,题15) 4.查找单链表中的中间结点 5.合并两个有序的单链表,合并之后的链表依然有序[出现频率高](剑指offer,题17) 6.单链表的反转[出现频率最高](剑指offer,题16) 7.从尾到头打印单链表(剑指offer,题5) 8.判断单链表是否有环 9.取出有环链表中,环的长度 10.单链表中,取出环的起始点(剑指offer,题56) 11.判断两个单链表相交的第一个

Android-异步任务介绍及面试题

Android-异步任务 一 什么是AsyncTask Android为了减低异步操作的开发难度,结合Handle和线程池,提供了AsyncTask.AsyncTask就是一个封装过的后台任务类, 顾名思义就是异步任务,他具有可以在后台执行耗时操作,同时可以将 执行的进度与UI进行同步的优点 因为Handle实际上就是两个线程之间的桥梁,但是数据的传递是单向的 Handle机制如下图: 而AsyncTask机制如下: 二 如何使用AsyncTask AsyncTask定义三种泛型类型Params

Java面试题全集(中)

这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet. 补充:Sun Microsystems公司在1996年发布Servlet技术就是为了和CGI进行竞争,Servlet是一个特殊的Java程