北京嘉楠科技面试总结-创新互联
1.const在C/C++中的作用是什么?
创新互联专注于企业营销型网站建设、网站重做改版、永州网站定制设计、自适应品牌网站建设、H5网站设计、商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为永州等各大城市提供网站开发制作服务。2.malloc/free new/delete 的区别是什么?
3.内联函数和宏定义不同
4.多态的实现
5.shell是用来干嘛的?
6.linux:给你一个名叫ABC的文件夹,如何对其进行压缩
7.linux:怎么查看当前线程信息
8.翻转链表
解答问题:1.const在C/C++中的作用是什么?在C语言中被const修饰的值是不可以进行改变的,因为const修饰的变量会存放在常量区,所以
在使用const变量之前必须先初始化。
如果const修饰的是指针,可以修饰指针指向的数据为const,或者指针本身为const,同时两者也可以同时声明。
在C++中,const修饰的类成员函数只能进行只读操作。在对函数声明时使用const进行声明,可以防止函数内部进行修改。
对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。
2.malloc/free new/delete 的区别是什么?相同点:
都是在堆上申请内存,且需要用户手动释放。
不同点:
malloc/free是函数。申请的空间不会初始化,且需要手动计算空间的大小并进行传递,当malloc返回的是void*需要进行强制转换。
内存申请失败是会返回NULL,需要进行判定是否为空。申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数。
new/delete是操作符。 申请的空间会自动初始化,不用计算空间大小,只需要在其后跟上空间的类型即可,new在内存申请失败时只需要进行异常捕获,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理。
3.内联函数和宏定义不同?内联函数(inline)在编译后展开,直接被嵌入到目标代码中去,可以进行诸如类型安全检查、语句是否正确等编译功能,不用担心因括号产生的二义性问题。inline函数一般用于比较小的,频繁调用的函数,这样可以减少函数调用带来的开销。
宏在预编译时展开,只是一个简单的文本替换,不可以进行诸如类型安全检查、语句是否正确等编译功能,需要注意因括号产生的二义性的问题。
引入inline的意义:inline有点类似于宏定义,但是它和宏定义不同的是,宏定义只是简单的文本替换,是在预编译阶段进行的。而inline的引入正是为了取消这种复杂的宏定义的。
4.多态的实现静态多态:通过函数重载实现。
动态多态:通过继承重写基类的虚函数。
5.shell是用来干嘛的?shell是操作系统的最外层,shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序。
简单来说:shell就是一个用户跟操作系统之间交互的命令解释器。
shell独立于内核,它是链接内核和应用程序的桥梁
6.linux:给你一个名叫ABC的文件夹,如何对其进行压缩?tar -zcvf ABC.file
tar -zcvf 打包压缩后的文件名 要打包的文件 参数说明:z:调用gzip压缩命令进行压缩; c:打包文件; v:显示运行过程; f:指定文件名;
7.linux:怎么查看当前线程信息其实linux没有线程,都是用进程模仿的
1. ps -ef f
用树形显示进程和线程,比如说我想找到proftp现在有多少个进程/线程,可以用
$ ps -ef f | grep proftpd
nobody 23117 1 0 Dec23 ? S 0:00 proftpd: (accepting connections)
jack 23121 23117 0 Dec23 ? S 7:57 \_ proftpd: jack - ftpsrv: IDLE
jack 28944 23117 0 Dec23 ? S 4:56 \_ proftpd: jack - ftpsrv: IDLE
这样就可以看到proftpd这个进程下面挂了两个线程。
在Linux下面好像因为没有真正的线程,是用进程模拟的,有一个是辅助线程,所以真正程序开的线程应该只有一个。
2. pstree -c也可以达到相同的效果
$ pstree -c | grep proftpd
|-proftpd-+-proftpd
| `-proftpd
3. cat /proc/${pid}/status
可以查看大致的情况
4. pstack
有些系统可以用这个东东,可以查看所有线程的堆栈
如何查看进程中各线程的内存占用情况?
用ps aux只能查看到进程,如果进程里面使用了pthread编程,用什么命令才能查询到进程里的线程资源占用?
ps aux | grep不就是了
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围: 0\leq n\leq10000≤n≤1000
要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。
struct ListNode* ReverseList(struct ListNode* pHead ) { struct ListNode* newhead = NULL; struct ListNode* cur = pHead; while(cur) { //1 保存需要头插节点的下一个节点 struct ListNode* next = cur->next; //2 将头插节点插到新链表 cur->next = newhead; newhead = cur; cur = next; } return newhead; // write code here }
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文题目:北京嘉楠科技面试总结-创新互联
本文链接:http://scyanting.com/article/ccshii.html