一面和二面
自我介绍
项目的总体介绍
询问技术问题和项目的业务问题
出结果
综合测评
北京南天软件有限公司it实施工程师面试题
项目中主要职责,用过哪些技术
linux的命令和shell脚本的相关知识
kettle的使用组件
通过看智联招聘信息,得知招聘信息,目前还在等待面试,好激动。希望有机会专业面试过了,希望被录取。希望有机会专业面试过了,希望被录取希望有机会专业面试过了,希望被录取希望有机会专业面试过了,希望被录取
面试官问的面试题:北京南天软件有限公司C语言应用软件工程师面试题
1.C++源文件从文本到可执行程序的过程
预处理,产生.ii文件
编译,产生汇编.s文件
汇编,产生目标.o/.obj文件
链接,产生可执行.out/.exe文件
2.#include的顺序
若要在a.h中声明b.h中定义的变量,则在a.c文件中必须先引用b.h文件,再引用a.h文件
3. #include<>和“”的区别
<>表示标准头文件,编译器在预定义位置查找该文件
“”表示非系统头文件,查找从源文件所在路径开始,查找范围大于<>
4. 进程与线程区别
资源:线程比进程节俭。启动新的进程需要分配独立的地址空间,建立数据表来维护代码段、堆栈段和数据段。
切换效率:同一进程中的不同线程共享地址空间,线程彼此切换的时间远小于进程切换
通信:线程之间共享数据空间,进行通信时,一个线程的数据可以直接由其他线程共享。而进程之间进行数据传递必须使用进程间的通信方式进行
5.使用线程的优点
具有多任务、并发性的特点
多CPU系统更加高效
改善程序结构,长而复杂的进程可以分为多个线程,成为几个独立或半独立的部分,是的代码更易理解和修改。
6.malloc()实现方案
实质:将空闲的内存块链接起来的空闲链表
调用malloc()函数后,顺序遍历空闲链表找到满足大小需要的空闲块,将多余的部分继续链入空闲链表
调用free()函数,将用户释放的内存块连接到空闲链表上
malloc()请求延时,即将相邻的小空闲块合并为大的空闲块
从OS角度,进程分配内存的两种方式分别由两个系统调用完成:brk和mmap。这两种方式均分配的是虚拟内存,并未分配物理地址。只有在第一次访问发生缺页中断时,才由OS分配物理内存并建立映射关系。
brk将数据段的最高地址指针往高地址推
mmap是在进程的虚拟地址空间中(堆栈之间成为文件映射区域的位置)找空闲的虚拟内存
7.有了malloc()和free()为什么还要有new()和delete()
malloc()是C++/C语言的标准库函数,new/delete是C++的运算符,都可用于申请动态内存和释放内存。
非内部数据类型的对象而言,光使用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,消亡前要自动执行析构函数。Malloc/free是库函数不是运算符,不在编译器控制权限内,不能够把执行析构函数和析构函数的任务交给malloc/free,故创造新的运算符
C++需要能够完成动态分配内存和初始化工作的运算符new,一个能完成清理和释放内存工作的运算符delete
8. C++内存管理方式
栈(Stack):存放局部变量,函数参数,由编译器自动分配和释放。进出栈由计算机指令支持,分配有专门的寄存器存储栈的地址,内存空间连续有限。
堆(Heap):程序员手动分配释放(new,delete),动态分配,内存空间无限制,因此产生内存碎片。OS中有记录空闲块的链表,收到内存请求即遍历链表找到第一个符合的空间进行分配,并将节点从链表中移除。在内存空间首地址中记录本次分配的大小,用于delete释放内存空间
全局/静态存储区:全局变量和静态变量分配到该区,程序结束时自动释放,包括DATA(全局初始化区)段,BSS段(全局未初始化区)。初始化和未初始化的变量放到不同的区。BSS段在程序执行前自动清零,而DATA段在程序执行前已经为0
文字常量区,存放常量字符串,程序结束后系统自动释放
程序代码区,存放二进制代码
9. hash表实现
散列函数hash function,最常见的为f(x)=x%tablesize
碰撞问题,即不同元素的散列值相同。解决方法包括线性探测(依次后移),二次探测(用新的散列值再次散列),拉链法(直接链接在同一个地址上)
10.TCP模型以及协议
四层模型:
应用层:Telnet、FTP和e-mail
传输层:TCP和UDP
网络层:IP、ICMP和IGMP
链路层:设备驱动程序以及接口卡
11.进程间的同步方法
互斥量(mutex)
条件变量(Condition Variable)
信号量(semaphore)
一般手写就是PV操作,对应的是wait()和signal()
12.const的用途
定义只读变量即常量
修饰函数的参数和函数的返回值
修饰函数的定义体,被const修饰表示不修改成员变量的值
13. 指针和引用的区别
引用是变量的别名,内部实现是只读指针
引用只能在初始化时被赋值,其他时候值不能被改变,指针的值在任何时候都可以被改变
引用不能为NULL,指针可以
引用变量内存单元保存的是被引用变量的地址
“sizeof引用”=指向变量的大小,”sizeof指针”=指针本身的大小
引用变量在源代码中当作普通变量使用,而作函数参数时,内部传递的实际上是变量地址
14.Static作用
函数体内static变量作用范围为函数体,不同于auto变量,该变量的内存只被分配一次,因此下次调用时仍然维持上次的值
在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外的其他函数访问
在模块内的static函数只可被这一模块内的其他函数调用,适用范围限定在声明的模块内
在类的static成员变量为整个类所拥有,对类的所有对象只有一份拷贝
在类的static成员函数为整个类所拥有,这个函数不接受this指针,因此只能访问类的static成员变量
15.头文件中的endif/ifndef/define作用
防止该头文件被重复引用
16. TCP和UDP区别
TCP传输控制协议,提供面向连接、可靠的字节流服务。客户和服务器彼此交换数据前,必须双方建立一个TCP连接,之后才能传输数据。且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据端到端传输。
UDP用户数据报协议,简单的面向数据报的传输层协议。不可靠,只负责把应用程序传给IP层的数据包发送数据,不保证到达目的地。由于不需要建立连接,且无超时重发机制,因此传输速度很快。
面试比较简单了一点简单基础题,分为三轮面试
进行自我介绍认识面试 还有基础笔试
最后就是等通知
北京南天软件有限公司JAVA开发人员面试题
变量/函数的声明和定义之间有什么区别
答案:变量/函数的声明仅声明变量/函数存在于程序中的某个位置,但未为其分配内存。
询问了一些基本情况 做了自我介绍,对于英语的要求比较严格,必须过四级,问了一些项目相关的知识点等
面试官问的面试题:北京南天软件有限公司JAVA工程师面试题
问了一些项目相关的知识点等,Linux操作系统的使用一些常用命令,mysql数据库的相关语句及其优化查询等方式
(共3412条) 腾讯
(共2293条) 百度
(共1539条) 中软国际
(共146条) 北京思特奇信息技术股份有限公司
(共20条) 杭州创业软件股份有限公司
(共13条) 博彦科技
(共9条) 宁波亚德客自动化工业有限公司
(共9条) 山东电建一公司
(共9条) 徐工挖机
(共4条) 中机国际工程设计研究院有限责任公司
(共6条) 航天九院771所
(共4条) 南京诺维赞