信捷电气 - C++工程师面试题(社招:3-5年工作经验)
1. char i = 1;
printf("%d",i); // char字节用printf以整数型打印出来
2. int (*a[10])int
a[10]是函数指针数组
#include <stdio.h>
#include <Windows.h> int func1(int n)
{
printf("func1: %d\n", n);
return 0;
} int func2(int n)
{
printf("fun2: %d\n", n);
return n;
} int main()
{
int (*a[10])(int) = { NULL };
a[0] = func1;
a[1] = func2;
a[0](1);
a[1](2); return 0;
}
3. malloc/free 和 new/delete的区别
相同点:都可用于申请动态内存和释放内存
不同点:
- malloc/free是C++/C语言的标准库函数,new/delete是C++的运算符。对于非内部数据类的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加malloc/free。
- 运算符new 使用起来要比函数malloc 简单得多,例如:int *p1 = (int *)malloc(sizeof(int) * length); int *p2 = new int[length];
这是因为new 内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new 在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么 new 的语句也可以有多种形式。
内部数据类型是编译器本来就认识的,不需要用户自己定义,如int,char,double
非内部数据类型不是编译器本来就认识的,需要用户自己定义才能让编译器识别,如enum,union,class、struct
运算符使用是否正确,编译器在编译扫描分析时就可以判定
库函数是已编译的代码,编译器不会编译检查,由链接器将库同用户写的代码合成exe文件
4.float变量的大小比较,能否使用if来比较,如果不可以,该怎么办
浮点数的表示是不精确的,float 和 double 都不能保证可以把所有实数都准确的保存在计算机中
#include <stdio.h> int main(int argc, char *argv[])
{
float f = 99.9f;
printf("f = %f\n", f); //f = 99.900002 return 0;
}
由于浮点数的表示是不精确的,所以不能直接比较两个数是否完全相等。一般都是在允许的某个范围内认为某个个浮点数相等,如有两个浮点数a、b,允许的误差范围为 1e-6,则 abs(a-b) <= 1e-6,即可认为 a 和 b 相等。
还有一种方法就是扩大再取整,见:判断两个float变量是否相等以及和 0 值比较方法
5. struct 对象的大小比较,能否使用if来比较或者memcpy来比较
C语言没有提供语言工具来执行此操作,需要逐个成员进行比较。
6. 用递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和.
class Solution {
public:
int num(int i) //第i位数是多少
{
if (i == 1)
return 1;
else if (i == 2)
return 1;
else
return num(i - 1) + num(i - 2);
}
public:
int sum(int i) //所有数的和
{
if (i == 1)
return 1;
else if (i == 2)
return 2;
else
return sum(i - 1) + num(i);
}
};
7. 字符型环形缓冲区的插入
8. 线程与进程的区别
- 进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
- 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
- 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
- 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
9. TCP/IP协议的流量堵塞是如何处理的, 比如在四次挥手的时候,如果服务端没有发送ack给客户端,客户端该怎么处理
https://www.cnblogs.com/liwei0526vip/p/14587300.html
https://www.cnblogs.com/muyi23333/articles/13841268.html
https://www.cnblogs.com/xiaolincoding/p/15892375.html
10. 排序的两种算法
冒泡排序和快速排序
11. 函数中值的传递有哪几种方法
值传递:
形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,
不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
指针传递:
形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作
引用传递:
形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈
中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过
栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
引用的规则:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
12. 串口通讯的参数
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配。
各个参数的介绍:串口通信参数详解
13. char ,指针, sizeof和strlen的用法
strlen计算的是字符串到'\0'位置的大小
sizeof计算的字符串占的内存大小
#include<stdio.h>
#include<string.h> int main()
{
char str[100] = {0};
strcpy(str, "abcd"); int str_len = strlen(str);
int str_size = sizeof(str); printf("strlen(str) = %d\n", (str_len)); //4
printf("sizeof(str) = %d\n", (str_size)); //100 return 0;
}
详细见:strlen和sizeof的区别
大概只记得这些了, 红色的为算法题
信捷电气 - C++工程师面试题(社招:3-5年工作经验)的更多相关文章
- 写在19年初的后端社招面试经历(两年经验): 蚂蚁 头条 PingCAP
去年(18年)年底想出来看看机会,最后很幸运地拿到了 PingCAP,今日头条的 offer 以及蚂蚁金服的口头 offer.想着可以总结一下经验,分享一下自己这一段"骑驴找马"过 ...
- win10 64bits信捷触摸屏download usb口驱动程序的安装
[问题描述] win10 64bits,信捷触摸屏开发软件,下载的时候需要安装驱动程序. 用的以前的win7 64bits的驱动程序,直接双击安装,显示无法操作注册表,需要管理员模式. 使用管理员权限 ...
- Web前端开发工程师面试题
Web前端开发工程师面试题1.说说css的优先级?2.在移动端中,常常使用tap作为点击事件,好处是?会带来什么问题?3.原生JS的window,onload与Jquery的$(document).r ...
- 转:一份基础的嵌入式Linux工程师笔试题
一. 填空题: 1. 一些Linux命令,显示文件,拷贝,删除 Ls cp rm 2. do……while和while……do有什么区别? 3. Linux系统下.ko文件是什么文件?.so文件是什么 ...
- iOS开发工程师笔试题
iOS开发工程师笔试题 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? Object-c的类不可以多重继承:可以 ...
- 北京南天软件java工程师面试题
此试题为北京南天软件java工程师面试题(部分) 一.单项选择 (1)下列关于构造方法的叙述中,错误的是(C) A.java语言规定构造方法名与类名必须相同 B.java语言规定构造方法没有返回值,但 ...
- PHP工程师笔试题
PHP工程师笔试题 提示:请将答案写在另外一张空白纸上,并在30分钟内完成. PHP 请写出include.require.include_once.require_noce的区别. include是 ...
- PCB设计工程师面试题
网上的一套PCB设计工程师面试题,测下你能不能拿90分? [复制链接] 一.填空 1.PCB上的互连线按类型可分为()和() . 2.引起串扰的两个因素是()和(). 3.EMI ...
- Java工程师笔试题整理[校招篇]
Java工程师笔试题整理[校招篇] 隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打 ...
- 珍藏版 Python 开发工程师面试试题
珍藏版 Python 开发工程师面试试题 说明:不拿到几家公司的offer,那就是卑鄙的浪费 一.Python_基础语法 1.可变与不可变类型: 2.浅拷贝与深拷贝的实现方式.区别:deepcopy如 ...
随机推荐
- OpenGauss 单机版安装
OpenGauss 单机版安装 银河麒麟的前置事项 yum -y install libaio-devel flex bison ncurses-devel glibc-devel patch rea ...
- 一个简单的科普-延迟与RT时间
一个简单的科普-延迟与RT时间 背景 发现稍微一复杂就没人看. 这次像是写一个简单的科普文章. 主要说一下网络延迟还有网络的响应时间. 这里想通过一个题目进行引申. 如果Skylink全球商用: 中国 ...
- 关于JVM指针压缩性能的研究
关于JVM指针压缩性能的研究 摘要 JVM的内存对消最小是 8bytes 所以32G内存的情况下可以使用 32位的指针就可以了. 32位就是4G 在乘以最小的内存extent 8 bytes 的出来可 ...
- [转帖]银河麒麟高级服务器操作系统V10SP1安装Docker管理工具(Portainer+DockerUI)
文章目录 一.系统环境配置 二.安装Docker 三.安装Docker管理工具 Docker管理工具之Portainer Portainer简介 Portainer安装 Portainer访问测试 D ...
- Windows 2019 standard 安装 Sqlserver 2019 Standard 时报错 不知道如何处理
Microsoft Windows [版本 10.0.17763.1] (c) 2018 Microsoft Corporation.保留所有权利. D:\>setup.exe Microsof ...
- 行云部署成长之路--慢SQL优化之旅 | 京东云技术团队
当项目的SQL查询慢得像蜗牛爬行时,用户的耐心也在一点点被消耗,作为研发,我们可不想看到这样的事.这篇文章将结合行云部署项目的实践经验,带你走进SQL优化的奇妙世界,一起探索如何让那些龟速的查询飞 ...
- 语义检索系统之排序模块:基于ERNIE-Gram的Pair-wise和基于RocketQA的CrossEncoder训练的单塔模型
语义检索系统之排序模块:基于ERNIE-Gram的Pair-wise和基于RocketQA的CrossEncoder训练的单塔模型 文本匹配任务数据每一个样本通常由两个文本组成(query,title ...
- MySQL【五】与python交互
1.安装pymysql 安装pymysql pip install pymysql 2.游标(cursor)的使用 cursor,就是一个标识,用来标识数据可以理解成数组中的下标 . 一.声明一个游 ...
- 一些提供办公效率的软件(clover、f.lux、幕布),老赞了!
1.clover 链接:http://cn.ejie.me/ Clover是由异次元的读者ejie团队开发的一款电脑窗口标签化工具.Clover是电脑中资源管理器的一个扩展程序,可以为其增加多标签页的 ...
- 8.5 C++ 继承与多态
C/C++语言是一种通用的编程语言,具有高效.灵活和可移植等特点.C语言主要用于系统编程,如操作系统.编译器.数据库等:C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统.图形用户界面 ...