IT 常见面试题总结

001:static的定义和用法

A:static的定义:它是C++中很常见的修饰符、它被用来控制变量的存储方式和可见性。static被引入以告知编译器,将变量存储在静态存储区而不是栈上空间,static它会把变量的可见范围限制在编译单元中,使它成为一个内部链接,它的反义词为extern。

B:static的用法:静态成员是静态存储的,必须对其进行初始化。在类中定义静态成员可以实现多个对象之间的数据共享。在函数体内定义静态变量,此变量只能在这个函数内使用。在函数体外,模块内定义静态变量,此变量只能在模块体内被使用。

002:const的定义和用法

A:const的定义:const常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。

B:const的用法:在 c程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值等3个用处。在c++程序中,它还可以修饰函数的定义体,定义类中某个成员为常态函数,即不改变类中的数据成员。被const修改的东西都要受到强制保护,可以预防意外的变动,能提高程序的健壮性。

003:inline的定义和用法

A:inline的定义:是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。C++中引入它的主要原因是用它替代C中表达式形式的宏定义

B:inline的用法:一般用于两种情况1)一个函数不断被重复调用2)函数只有简单的几行,且函数内不包含for、while、switch。关键字inline必须与函数定义体放在一起才能使用函数成为内联,仅将inline放在函数声明前面不起任何作用。

004:请简述深拷贝和浅拷贝的定义:

如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。

005:如果程序在运行中因内存错误而崩溃,有哪几种可能的原因:

A:内存泄漏 B:内存越界访问 C:野指针 D:访问空指针 E:引用未初始化的变量 F:不清楚的指针运算 G:结构图成员顺序发生变化 H:结构体大小变化

I:分配释放不配对 J:返回指向临时变量的指针 K:试图修改常量 L:误解传值和传引用 M:重名符合 N:栈溢出 O:字节顺序 P:多线程共享变量没有用valotile修饰

006:面向对象和面向过程的定义:

A:面向对象:软件开发的方法,是一种对现实世界理解和抽象的方法,是计算机编程发展到一定阶段的产物。面向对象=对象+类+继承+通信,如果一个系统使用这个4个概念设计和实现,则我们称该系统为面向对象。

B:面向过程:是一种以过程为中心的编程思想,这些都是以什么正在发生为目标进行编程,不用于面向对象是谁在受影响。

C:面向对象的作用:维护简单、可扩充性、代码重用

007:面向对象的三大特性:封装性、继承性、多态性

A:封装性:

B:继承性

C:多态性:简单的说就是“一个接口,多种方法”,即允许将子类类型的指针赋值给父类类型的指针。多态性一般都是通过虚函数、抽象类、覆盖、模板来实现。

008:用递归算法判断数组a[n]是否为一个递增数组

bool charge(int p[],int n)  
{  
   if(n==1)  
    return true;  
   else  
   {  
       if(p[n-1]>p[n-2])  
    {  
        return charge(p,n-1);  
    }  
    else   
     return false;  
   }  
}  

009:局域网一般由三部分组成:网络服务器、工作站、通信设备

010:IP地址一般由:网络号和主机地址

011:引用的定义和作为函数参数传递的作用:

A:引用就是一个变量的别名,对引用的操作和对变量操作完全一样。

B:引用作为函数参数传递,能够保证参数传递过程中不产生副本,提供传递效率,且通过const的使用,保证传递的安全性

012:函数strcmp和函数strcpy的区别:

int strcmp(char* src,char* dst) :比较两个字符串是否相等,当src==dst返回0,当src<dst返回负数,当src>dst返回正数

char* strcpy(char*src,char*dst):字符串拷贝函数

013:写一个简单的函数,将一个十六进制字符串转化为数字(大小不超过整形)

#include<iostream>
using namespace std;
long int hex2int(const char * srcStr) {
	char * dst;
	if (srcStr[0] == '0'&&srcStr[1] == 'x') {
		return strtol(srcStr, &dst, 0);
	}
	else
	{
		return strtol(srcStr, &dst, 16);
	}
}
int main() {
	char *myHex = "0x11";
	char *myHex2 = "11";
	cout << hex2int(myHex)<<endl;
	cout << hex2int(myHex2);
}

输出为:17 17

0014:写个函数判断整数是否是对称数

int is_duichen(int data)
{
    int tmp, new_data;
    
    tmp = data;
    new_data = 0;
    while(tmp)
    {
        new_data = new_data*10 + tmp/10;
        tmp = tmp/10;
    }
    
    if(new_data == data)
    {
        printf("%d is duichen \n", data);
        return 0;
    }
    else
    {
        printf("%d is NOT duichen \n", data);
        return -1;
    }
}
015:圆圈上顺时针排列着1,2,3……n这n个数,从1开始,顺时针隔一个拿走一个(1最先被拿走,下一个是3被拿走),问最后剩下是哪一个数?
分析:约瑟夫环的问题
n=1:1
n=2:2
n=3:2
n=4:4
n=5:2
n=6:4
n=7:6
n=8:8
n=9:2
n=……
发现当n=(2^k)+1,K>0,的时候,最后剩下的都是2.
假如:(2^k)+1<n<(2^(k+1)+1),要剩下(2^k)+1个数,就需要先去掉n-((2^k)+1)个数,
按题意,每两个数擦掉一个数,所以擦掉n-((2^k)+1)个数,需要擦掉的数是:2*(n-((2^k)+1)),
所以下一个起始的就是2*(n-((2^k)+1))+1
,所以剩下的就是2*(n-((2^k)+1))+1+1;代码实现如下:
#include<iostream>
#include <math.h>
using namespace std;
int yuesefu(int num[],int n,int k) {

	if(n==1){
		return 1;
	}else if(n==2){
		return 2;
	}else if(n>2)
	{
		return 2 *(n -(pow(2,k)+1)) + 1+1 ;
	}
}

int main() {
	int num[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
	//因为   2^4-1+1<12<2^4+1,所以k=3
	cout<<yuesefu(num,12,3);
}
016:怎么定义动态数组:
int len;
cin >> len;
//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
int *p = new int[len];









“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

Antares_SANTALEN

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值