日常面试题演练

百度一面:

1、实验室项目里面使用什么建模的

2、进程和线程具体的区别

根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

3、协程

Coroutine(协程)是一种用户态的轻量级线程,特点如下:
A、轻量级线程
B、非抢占式多任务处理,由协程主动交出控制权。
C、编译器/解释器/虚拟机层面的任务
D、多个协程可能在一个或多个线程上运行。
E、子程序是协程的一个特例。
不同语言对协程的支持:
A、C++通过Boost.Coroutine实现对协程的支持
B、Java不支持
C、Python通过yield关键字实现协程,Python3.5开始使用async def对原生协程的支持

4、ngnix高性能服务器,为啥高性能

Nginx是一个流行的高性能服务器,官方宣称在压力测试下可以支持5万个并发连接,而且占用内存极低。相比于其他昂贵的硬件负载均衡解决方案,Nginx是开源免费的,可以大大降低成本。本文将从一下几个方面来剖析其内部结构。

  1. 特点
  2. 进程模型

    1. 惊群效应
    2. 负载均衡
  3. 核心模块

    1. 模块分类
    2. 事件驱动模块机制
    3. 反向代理模块

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

5、输入一个URL,如何显示页面的过程

DNS解析,TCP连接, HTTP协议三个过程

6、TCP三次握手

7、为什么需要三次握手

TCP为什么不是两次握手而是三次

如果仅两次连接可能出现一种情况:客户端发送完连接报文(第一次握手)后由于网络不好,延时很久后报文到达服务端,服务端接收到报文后向客户端发起连接(第二次握手)。此时客户端会认定此报文为失效报文,但在两次握手情况下服务端会认为已经建立起了连接,服务端会一直等待客户端发送数据,但因为客户端会认为服务端第二次握手的回复是对失效请求的回复,不会去处理。这就造成了服务端一直等待客户端数据的情况,浪费资源。

8、Time_wait

TIME_WAIT(2MSL)

  1. 确保最后一个确认报文段能够到达。如果 B 没收到 A 发送来的确认报文段,那么就会重新发送连接释放请求报文段,A 等待一段时间就是为了处理这种情况的发生。
  2. 可能存在“已失效的连接请求报文段”,为了防止这种报文段出现在本次连接之外,需要等待一段时间。防止串话。

9、什么是TCP粘包

1 什么是粘包现象

  TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

10、网络模型分几个层次

OSI 七层

11、TCP,UDP的区别

记住是答出三类区别

TCPUDP区别

  • TCP面向连接(三次握手),通信前需要先建立连接;UDP面向无连接,通信前不需要连接。
  • TCP通过序号、重传、流量控制、拥塞控制实现可靠传输;UDP不保障可靠传输,尽最大努力交付。
  • TCP面向字节流传输,因此可以被分割并在接收端重组;UDP面向数据报传输。

12、流量控制和拥塞控制的区别

拥塞控制任务是确保子网可以承载所到达的流量。这是一个全局性问题,涉及到各方面的行为,包含全部的主机、全部的路由器、路由器内部的存储转发处理过程,以及全部可能会削弱子网承载容量的其他因素。

与此相反,流控制仅仅与特定的发送方和特定的接收方之间的点到点流量有关。它的任务是,确保一个高速的发送方不会持续地以超过接收方吸收能力的速率数据传输。流控制通常涉及到的做法是,接收方向发送方提供某种直接的反馈,以便告诉发送方别人一端的情形究竟怎么样。

13、TCP出现在传输层,IP在网络层

14、什么是平衡二叉树

每一个节点的左子数与右子数高度差不超过1

15、快速排序和堆排序,什么是稳定和不稳定

16、单链表如何判断有环?环的位置在哪?

17、你来实习能实习多久?

18、部门做啥的,DuerOS,人工智能操作系统,度秘事业部。

百度二面:

1、TCP协议和IP协议有什么关系

TCP是传输层,IP再网络层,TCP基于IP

2、TCP是如何保证可靠传输的

TCP 可靠传输

1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。

2、数据校验

3、数据合理分片和排序:

3、是如何确认的

 

4、发送端是如何确认需要重传哪些包的

滑动窗口机制

5、TCP和HTTP的关系,HTTP还可以基于什么传输

http属于应用层协议,tcp/ip属于传输层协议。http位于tcp上层。

6、HTTP和HTTPS的关系

HTTPs 并不是新协议,而是 HTTP 先和 SSLSecure Socket Layer)通信,再由 SSL TCP 通信。通过使用 SSLHTTPs 提供了加密、认证和完整性保护。

7、加密算法有哪些,如何理解MD5

MD5,RSA,DES

MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法

8、Linux如何创建空文件,创建目录指令,find如何查找用户名为work的文件,(答的不好)

 

9、如何调试的,GDB调试,

 

10、GDB如何打印当前进程的堆栈-(gdb) bt

 

11、如何将当前客户端的内容发送给其他客户端,如何实现的。

 

12、同时发消息,是以什么顺序发送给其他人的

 

13、同时有一万人,同时说一句话,服务器没法处理的,该怎么办

IO多路复用,线程池

14、短连接和长连接,聊天室是采取哪种连接方式。

短连接,连接一次就断开

15、那你的聊天室采用短连接,连接的客户端又断开了,那你怎么发送数据给其他客户端的。

16、实验室项目介绍。

17、你有什么问题问我。


 

头条IES抖音部门

头条的面试效率贼高,一周offer!面试的算法题是最难的,变态那种,LFU !

阿里云

发现就记录了两轮面试的记录,其他的还是合在一起吧。其实一直没对阿里报太大希望,拿到头条offer了,很佛系,管你那么多,面得过就去,面不过就拉倒,感觉有了一个offer之后,自己就可以稳中带皮的面试,哈哈~~不过阿里的面试轮次非常多,居然面了6轮,太累。得知交叉面的时候,感觉也是很震惊,自己评级居然还挺高。

阿里巴巴二面:

1、介绍一下web服务器的架构和实现(语速慢点)

2、智能指针(等面试官说完话在回答)

weak_point, share_point, unique_ptr

3、http里面列举几个消息头,最常用的消息头。

 

4、为什么不使用多进程形式?

 

5、nginx

 

6、get文件返回和二进制文件返回有什么区别

 

7、主进程和工作线程中,epoll对套接字的复用是如何做的。

 

8、线程的套接字和主进程的套接字是如何作用的

 

9、华为挑战赛讲一下,做了多久。

 

10、实验室项目,技术层面上讲

 

11、做题目多线程归并排序

 

阿里交叉二面:

1、项目遇到什么问题

2、介绍智能指针,weak_ptr一般怎么使用?

 

3、项目实现了HTTP的GET方法,有办法可以拓展到实现POST方法吗?

 

4、GET和POST幂等性,为什么POST不幂等?

 

5、POST可以获取数据吗?

 

6、聊天室程序有何问题?

 

7、分离读写流?为什么采用父子进程?应该是并行关系(这个不好,最好删掉)

 

8、实验室项目的介绍?具体做了什么东西?

 

9、如何衡量疏散预案的好坏的?

 

10、你有什么问题问我吗?

 

腾讯IEG一面

1、UTF8和GD2312的区别

 

2、一个汉字在GD2312中是几个字节表示的

 

3、Linux进程栈和堆的空间如何分配和释放的

 

4、进程栈和线程栈的区别

 

5、线程栈是在哪里分配的

 

6、TCP是如何处理粘包的问题

统一消息头,拆分包

 

7、malloc的内存分配方式

 

8、二叉树找公共祖先,只有root节点和两个节点指针。

 

9、无序的整数数组,使得奇数在前面,所有的偶数都在后面。


 

网络通信:

TCP粘包怎么产生的,有什么应对措施以及每种措施的优缺点。

 

设计模式:

项目中是否用到了设计模式,了解哪些设计模式,能举个例子么。

 

C++相关:

一个空类编译器会自动生成哪些函数;

 

类静态成员函数的特点、静态成员函数可以是虚的么。

 

C++多态是怎么体现的,派生类的内存分布,多重继承的虚函数表有几个;

 

拷贝构造函数以及深拷贝和浅拷贝的区别;

 

堆和栈的区别;

 

new具体是怎么开辟内存的(底层实现);

 

C++11中智能指针有哪些及其优缺点,shared_ptr是怎么释放内存的;

 

vector扩容的方式及底层实现方法,vector可以存放任意类型的数据结构么(比如结构体、类等等);

 

计算机组成原理:

32位系统最大支持多大的内存,为什么只能支持这么大的,这个32位具体指的是什么;

 

Linux相关:

linux软链接和硬链接的区别;

 

linux文件系统包含哪些种类,ext文件系统用什么数据结构实现的;

 

算法题:

二叉树前序遍历的非递归实现;

 

如何判断链表是否有环;

 

一大堆字符串,里面有很多重复的,找出来并删除;

 

1.程序为什么会要有堆段、栈段?

 

2.为什么内核用rbtree,不用其他树结构?

红黑树的增删改查都是O(logN)

3.hashMap的复杂度比rbtree要小,为啥epoll采用rbtree?

涉及到遍历操作,HashMap不均匀

4.tcp的粘包,对于二进制数据传输,如何采用通用的办法解决粘包问题

 

5.函数模板与类模板的区别

 

6.如何改造redis,让redis具有关系型数据库的功能

 

7.证明快排的复杂度,写了递推式和画了递归树,问还有其他方法么

 

8.epoll在内核中的处理是一个怎样的流程,能否画出状态转换图

 

9.海量数据处理,这种题一般都有套路的(bitmap、先分类分割再归并、bloomfilter)

bitmap,MapReduce,布隆过滤器bloomfilter

 

10.signal的handler的可重入性的讨论

 

11.如果一个类的所有函数都声明为虚函数,可以吗 ?有什么问题吗?

 

12.read和fread区别,进程crash之后,内核中的缓冲区会怎么样?用户的缓冲区呢?

 

13.说说谷歌的BBR拥塞控制算法

 

14.dns为什么用udp?udp不是不可靠协议么?(成功被唬住)

 

15.使用STL时候,C++编译出错会出现一大堆错误,大多数时候还定位不准,为啥会这样?

 

16.你对我们公司有什么了解(哈哈哈哈哈 ,送命题)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值