首先做一下自我介绍,非科班
1、堆和栈的区别是什么?
答:首先在操作系统中,栈的内存增长是向下的,堆是向上的,栈的内存分配是操作系统支持的数据结构,操作系统中具有专门的寄存器存储栈指针,以及有相应的硬件指令去操作栈内存分配,堆是程序员通过系统调用库函数对堆内存进行分配存储。栈内存速率比堆快,但是栈默认的大小比堆小很多,vs中一般默认为1M,但是大小可以在编译器中设置,堆内存比较大,一般会达到4G。相比来说一般大块内存会更多在堆上分配。
2、那堆为什么默认4G,是什么决定的?
答:这个大小和虚拟内存有关,应该是2^32计算的。
3、那我一般机器上插内存条16G,而虚拟内存只有4G,岂不是浪费?
答:应该是和多核多CPU有关?我也不太清楚
4、一个进程的地址和物理地址之间的关系是什么?
答:进程上CPU,CPU能够访问到的是进程中记录的逻辑地址,如果是页式内存管理方案,则逻辑地址包括,页号和页内偏移量,页号可以在页表中查询得到物理内存中划分的页框号,页框号+CPU基址寄存器值(进程在内存中的起始地址),结果再拼接上页内偏移量就可以得到对应的实际物理地址。
5、这样有什么更快的方法去计算物理地址?
答:有一个TLB快表,可以去记录,但是具体机制不清楚。
6、HTTP消息的header都有哪些?
答:HTTP分为请求消息和响应消息,请求消息格式:请求方法+URL+协议版本 ;响应消息格式:状态响应码+协议版本;根据请求方式不同,消息header也不同。
7、在浏览器中输入URL,发生的事情都有什么?
答:输入URL后,首先URL=协议+域名+服务器上的资源位置,因为在通信子网中是通过IP为标志进行分组转发,因此需要通过DNS进行解析出IP,封装HTTP消息请求下发到传输层,在传输数据之前需要双方简历TCP链接,链接建立完成后,根据TCP协议进行首部封装,然后下发到网络层根据IP协议进行IP数据单元封装,到数据链路层根据ARP协议对IP进行转换为MAC地址,然后加帧首帧尾巴,进行帧封装,然后到物理层转为bit流进行通信传输到目的主机,自底向上进行解封装到达应用层,根据资源位置,在服务器上查询到web对象,将HTML文档加到响应消息返回给客户端浏览器。
8.那得到了服务器返回的内容后,还做了些什么,这个只是协议建立通信的过程?
答:应该是HTML文档中的标签格式对页面进行渲染。(勉强问不可能直接渲染吧?还做了什么? 这个不清楚了)
9、HTTPS和HTTP的区别是什么?
答:HTTPS在HTTP明文传输的基础上加了SSL层进行加密数据传输。
10、SSL建立连接的过程是什么,说一下?
答:首先客户端向服务器发送自身的SSL版本以及加密参数给服务器,服务器返回自己的SSL版本和参数以及数字证书包括了服务器的公钥,客户端生成浏览器会话秘钥通过公钥进行加密返回给服务器,服务器通过私钥解密出会话秘钥,客户端再发送一个报文通知服务器以后通过该会话秘钥进行加密传输,并发送加密报文表示我方SSL链接建立完成,服务器也回复相同的表示自己也建立连接完成。
11、数字证书怎么验证?
答:数字证书也是别的机构颁发给网站,也是加密过的,需要客户端通过公钥对它解密来验证它的有效性合法性,是否过期等信息。
12、TCP和UDP的区别是什么?
答:TCP是传输控制协议,是面向字节流的可靠传输,通过分组编号,确认应答,超时重发,流量控制和拥塞控制机制保证数据分组正确有序完整的传输到接收方,UDP是用户数据包协议,不具有TCP的以上机制来保证可靠传输,是以数据报的形式发出,从最下层发出后,它认为发送成功,是不具有保序 正确和完整传输的性质。
13、P2P传输是什么?我发送数据只有你的IP,并没有你的主机号,是怎么讲数据发送到你主机?
答:我理解就是端到端传输,你首先是将数据发送到我的局域网的出口网关路由,然后进入内网,在局域网中是通过交换机进行Mac地址进行转发,识别到对应的主机。(对方不满意)
14、出个题目(智力题):一亿个数据,找出前10000个
回答topK。建立10000个元素的最大堆。。
OK那不问这个问题了,重新一个问题:一个隧道100个灯,一百个人,分别都是1-100编号,人进去按灯开关,灯编号除尽人编号,则人按开关。请问100个人全部进出隧道,最后结果是多少盏灯是亮的?
答:(我听错了以为是人编号除尽灯编号)然后人进入后对人的编号因数分解,得到的因数编号落到哪个编号上对哪个编号进行计数,最后对每个编号进行计数判断奇偶性,基数则是亮,偶数灭。但是结果没想出来。
15.那写个程序吧:写二叉树对称性判断。
写完了。。。OK那我们结束面试吧。
我问:那智力题的结果是啥?
面试官:这个你不能对人编号因数分解,是对等编号分解吧。
最后也没说结果是什么 就挂了视频。
然后过了一会HR打电话说不合适岗位,再见。