题目很全
选择题 不定项
C++基础知识 指针 引用 const
操作系统 磁盘
数据结构 最短路径问题
网络 http tcp
估算题 4.5亿个用户 保存状态需要多少内存
简答题
1.sql语句的编写 很长
2.说明栈和堆的区别
编程题:
1.蛇形矩阵
2.给定一个字符串,可以删除部分字符,求最大回文字符串
基础很重要 光拼刷题是没用的 要理解 要研究 额 吃完午饭 就通知我来面试了从OS层说起吧。
OS都有加载程序的功能,一个可执行文件(比如exe,com等)内部都是机器指令(cpu相关的)和数据,所以可执行文件和OS以及编译器是密切相关的,不同的OS下不同的编译器产生的可执行文件都不尽相同。不同的平台上其格式大概有elf,pe,coff等。大致都是段的形式来表示。而OS的功能就是读懂这些文件然后完成从磁盘文件到内存的映射工作,也就是适当的时候把文件的内容搬到内存适当的位置;
OS加载的过程就是进程创建的过程,进程创建完毕后,会找到“入口函数”去执行;
进入入口函数后就等于进入了运行库,因为入口函数就是运行库的一部分;
入口函数开始初始化运行程序和程序的运行环境,比如堆的初始化,I/O初始化,线程的准备,全局变量等的初始化;
下一步就进入程序的主体,也就是调用main函数部分。
main函数执行结束后又回到入口函数,此时入口函数要进行一些清理工作。
清理完成后执行一个系统调用来kill掉进程。
OK,一个可执行文件的整个执行周期就结束了。
对于c语言,运行库叫crt(c runtime),linux下的crt为glibc,它的程序入口函数为_start,是由汇编语言实现的,包含在crt1.o这个目标库文件里。在windows下crt为msvc crt,它的入口函数是mainCRTStartup。对于每个程序,链接过程都会给你的可执行程序加进一些运行库目标文件,这样才保证你的程序是一个独立的可执行体。正式这些“额外”的代码把你的main函数调用起来的。
一般在链接程序的时候须指定入口函数名。
下面的一个回复:
可执行文件是由我的代码 经过编译-连接-生成出来的
链接过程是加入一些运行库文件.dll以保证程序是独立的可执行体,运行库里面一般是一些头文件中常用到的函数,还包含有入口函数,windows下它叫crt
所以生成可执行文件就和我的编译器有关,所以说编译器不是世界统一的,一种语言在不同的公司会有不同的编译器,而且有不同的版本,所以虽然大体的一个编程语言是不变的,可其中多少因为编译器的问题而有所出入
OS和编译器共同作用产生自己的可执行文件,而可执行文件里面都是机器指令,也就是比汇编还低层的最高效率的语言
然而机器指令还是根据OS的不同而在执行上有所差异(是说是不同OS只能读适合自己的机器指令吗?),否则万物皆可移植。
而后OS读取可执行文件中的机器指令,创建进程,找到入口函数,找到main函数,所有机器指令执行完毕,返回入口函数,杀进程。
再谢前辈写的这篇文章,望回复。