面试题1
计算机网络重要知识点总结 面试必备
https://blog.csdn.net/u011225629/article/details/45224279
C语言面试专用题库
1. C/C++笔试面试经典题目一
https://wenku.baidu.com/view/51dc37cd77eeaeaad1f34693daef5ef7ba0d1211.html
100条经典C语言笔试题目
面试技巧、简历书写、项目经验
https://blog.csdn.net/qq_42280739/article/details/83927218
https://xiaozhuanlan.com/achieve_offer
零、后加补充:
1. sizeof
typedef union {long i; int k[5]; char c;} DATE;
typedef union {double i; int k[5]; char c;} DATE2;
DATE 32位下20字节,64位下24字节,因为long类型决定DATE的对齐值
DATE2 24位
struct data { char cat; DATE cow; char dog;};
64位下struct data为40字节,因为DATE是8字节对齐,会影响到data
一、一般题
1. 进程和线程的差别
进程是程序的一次执行。线程可以理解为进程中执行的一段程序。
进程间是独立的,表现在内存空间、上下文环境上。线程运行在进程空间中。线程属于进程,当进程退出时该进程中所产生的线程都会被强制退出。线程占用的资源少于进程所占用的资源。
操作系统以进程为单位,分配系统资源(堆区、BSS段、数据段、代码段等),所以进程是资源分配的最小单位。
线程存在于进程中,是操作系统调度执行的最小单位。
进程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源(如资源计数器,寄存器和栈),但是它与同属一个进程的其他线程共享进程所拥有的全部资源。
进程有自己的地址空间,线程使用进程的地址空间,也就是说,进程里的资源,线程都是有访问权限的,比如堆、栈、静态存储区等。
线程有自己的栈,但这个栈仍然是使用进程的地址空间,只是这块空间被线程标记为栈。没有线程都有自己私有的栈,这个栈是不可以被其他线程所访问的。
进程所维护的是程序所包含的资源(静态资源),如:地址空间,打开的文件句柄集,文件系统状态,信号处理handler等。
线程所维护的是运行相关的资源(动态资源),如:运行栈,调度相关的控制信息,待处理的信号集等。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护,而进程正好相关
2. tcp和udp的区别
tcp是传输控制协议,提供的是面向连接、可靠的字节流服务。tcp提供超时重传、丢弃重复数据、检验数据、流量控制等功能,保证数据可靠的从一端传到另一端。
udp是用户数据报协议,是一个简单的面向数据报的传输层协议,不提供可靠性。
3. 划分子网
如果把一个网络40.15.0.0分成两个子网,第一个子网是40.15.0.0/17,那么第二个子网将会是_D_.
A: 40.15.1.0/17 B: 40.15.2.0/16 C:40.15.100.0/17 D: 40.15.128.0/17
如何将一个网络分为两个子网、如何通过已知IP和子网掩码计算其同一网段的主机IP
4. 在子网210.27.48.21/30种有多少个可用地址?分别是什么?
210.27.48.21/30代表的子网的网络号是30位,即网络号是210.27.48.21 & 255.255.255.251=210.27.48.20,此子网的地址空间是2位,即可以有4个地址:210.27.48.20,210.27.48.21,210.27.48.22,210.27.48.23.第一个地址的主机号(host number/id)是0,而主机号0代表的是multicast地址.最后一个地址的最后两位是11,主机号每一位都为1代表的是广播(broadcast)地址.所以只有中间两个地址可以给host使用.其实那个问题本身不准确,广播或multicast地止也是可以使用的地址,所以回答4也应该正确,当然问的人也可能是想要你回答2
5.
float a = 1.0f;;
cout << (int)a << endl; //1
cout << (int&)a << endl; //1065353216
float b = 0.0f;
cout << (int)b << endl; //0
cout << (int&)b << endl; //0
6. 求最小公约最大公倍数
https://blog.csdn.net/foreverling/article/details/46011421
最大公约数:辗转相除法
最小公倍数: 两数相乘再除以最大公约数
7. 数组排序算法
https://www.cnblogs.com/guanshan/p/guan028.html
快速排序
http://www.sohu.com/a/246785807_684445
https://blog.csdn.net/nrsc272420199/article/details/82587933
void quickSort(int arr[], int begin, int end)
{
int left = begin;
int right = end;
int val = arr[begin];
if (begin >= end) //判断条件必须是这样,比如2 3 4 或者 3 2 1 6
return;
while (left < right)
{
while ((left < right) && (arr[right] >= val))
right--;
if (left == right) //这里就可以退出了。不然会发生错误
break;
arr[left++] = arr[right];
while ((left < right) && (arr[left] < val))
left++;
if (left == right) //这里就可以退出了。不然会发生错误
break;
arr[right--] = arr[left];
}
arr[left] = val;
quickSort(arr, begin, left - 1);
quickSort(arr, right + 1, end);
}
8. 二分查找
while (left <= right) 这句话总是不变的
{
middle = (left + right) / 2;
if (arr[middle] > key) 这句话也总是对的,但要考虑这里需不需要加上=号
{
right = middle -1;
}
else
left = middle +1;
}
这里考虑返回的是right还是left
构造时如果不好判断,可以考虑正常情况下,是返回left还是right,再把特殊的那个合进去,从而确定该归于哪个。
比如:
查找最后一个等于或者小于key的元素
考虑1 2 3 查找比4小的,返回right
再考虑 1 2 3 查找小于等于2的情况
9. 15道使用频率极高的基础算法题
https://blog.csdn.net/foreverling/article/details/45891029
10. 把一个int型数组中的数字拼成一个串,这个串代表的数字最小;
qsort 的函数原型是
void qsort(voidbase,size_t num,size_t width,int(__cdeclcompare)(const void*,const void*));
各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针
先将数字转换成字符串存在数组中,在通过qsort排序,在排序用到的比较函数中,将要比较的两个字符串进行组合,如要比较的两个字符串分别是A,B,那么组合成,A+B,和B+A,在比较A+B和B+A,返回strcmp(A+B, B+A),经过qsort这么一排序,数组就变成从小到大的顺序了,组成的数自然是最小的。
//把一个int型数组中的数字拼成一个串,是这个串代表的数组最小
#define MaxLen 10
int Compare(const void* str1,const void* str2)
{
char cmp1[MaxLen*2+1];
char cmp2[MaxLen*2+1];
strcpy(cmp1,*(char**)str1);
strcat(cmp1,*(char**)str2);
strcpy(cmp2,*(char**)str2);
strcat(cmp2,*(char**)str1);
return strcmp(cmp1,cmp2);
}
void GetLinkMin(int a[],int len)
{
char** str=(char**)new int[len];
for (int i=0;i<len;i++)
{
str[i]=new char[MaxLen+1];
sprintf(str[i],"%d",a[i]);
}
qsort(str,len,sizeof(char*),Compare);
for (int i=0;i<len;i++)
{
cout<<str[i]<<" ";
delete[] str[i] ;
}
delete[] str;
}
void GetLinkMinTest()
{
int arr[]={123,132,213,231,321,312};
GetLinkMin(arr,sizeof(arr)/sizeof(int));
}
二、找规律题一般
1. 求一个字符串中连续出现次数最多的子串
https://blog.csdn.net/foreverling/article/details/46883515
2. 找出所有最长连续重复子串及其个数
https://blog.csdn.net/foreverling/article/details/46888863
3. 输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及其首字符的位置
https://blog.csdn.net/kaitankedemao/article/details/26357465
三、找规律体麻烦
1. 统计0到n之间1的个数
https://blog.csdn.net/foreverling/article/details/46892309
计算4 000 000 000以内的最大的那个f(n)==n的值,函数f的功能是统计0到n之间所有数字中1的个数和
https://blog.csdn.net/ancientmoondjay/article/details/62049282
上一篇: naturalWidth与naturalHeight获取图片原始大小
下一篇: 面试题合集VUE
推荐阅读