北京智点时空科技有限公司面经

base:北京市海淀区

岗位:后端工程师(Python+go)

薪资:转正后8000 英语六级过了+500 周末双休 朝九晚六

只有一面 面试时间:79分钟

1、介绍一下二分查找算法

2、介绍一下冒泡排序算法

3、单链表如何逆置(我说的用栈,但是不对,交换指针即可,还是题练少了)

4、链表和数组的区别

5、栈和队列的区别

6、介绍一下二叉堆

7、介绍一下哈夫曼编码

8、介绍一下TCP协议

9、TCP、IP、HTTP分别在协议的哪一层 (我全回答的应用层 这道题错了)

10、什么是dns

11、什么是网关、有什么作用

12、子网掩码的作用

13、TCP和UDP的区别

答:TCP 和 UDP 区别:

1. 连接

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。

2. 服务对象

  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对多的交互通信

3. 可靠性

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议,具体可以参见这篇文章:如何基于 UDP 协议实现可靠传输?(opens new window)

4. 拥塞控制、流量控制

  • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

5. 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

6. 传输方式

  • TCP 是流式传输,没有边界,但保证顺序和可靠。
  • UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

7. 分片不同

  • TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。

14、GET请求和POST请求的区别,POST拿来作查询可以吗

答:根据 RFC 规范,GET 的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 请求携带数据的位置一般是写在报文 body 中,body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。

如果从 RFC 规范定义的语义来看:

  • GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。所以,可以对 GET 请求的数据做缓存,这个缓存可以做到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如nginx),而且在浏览器中 GET 请求可以保存为书签
  • POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。所以,浏览器一般不会缓存 POST 请求,也不能把 POST 请求保存为书签

所以:

GET 的语义是请求获取指定的资源。GET 方法是安全、幂等、可被缓存的。

POST 的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 不安全,不幂等,(大部分实现)不可缓存。

注意, 上面是从 RFC 规范定义的语义来分析的。

但是实际过程中,开发者不一定会按照 RFC 规范定义的语义来实现 GET 和 POST 方法。比如:

  • 可以用 GET 方法实现新增或删除数据的请求,这样实现的 GET 方法自然就不是安全和幂等。
  • 可以用 POST 方法实现查询数据的请求,这样实现的 POST 方法自然就是安全和幂等。

曾经有个笑话,有人写了个博客,删除博客用的是 GET 请求,他觉得没人访问就连鉴权都没做。然后 Google 服务器爬虫爬了一遍,他所有博文就没了。。。

如果「安全」放入概念是指信息是否会被泄漏的话,虽然 POST 用 body 传输数据,而 GET 用 URL 传输,这样数据会在浏览器地址拦容易看到,但是并不能说 GET 不如 POST 安全的。

因为 HTTP 传输的内容都是明文的,虽然在浏览器地址拦看不到 POST 提交的 body 数据,但是只要抓个包就都能看到了。

所以,要避免传输过程中数据被窃取,就要使用 HTTPS 协议,这样所有 HTTP 的数据都会被加密传输

15、常见的HTTP状态码

16、介绍一下Cookie

17、什么是跨域

18、线程和进程的区别

19、进程之间如何通信

20、操作系统如何管理虚拟内存,介绍一下虚拟内存(他说很多人都不会这个)

21、python的列表和元祖的区别

22、什么是python的装饰器

23、介绍一下python类方法、 实例方法 和 静态方法

24、a==b 和 a is b的区别

25、介绍可变变量和不可变变量

26、介绍深拷贝和浅拷贝

27、介绍一下python的列表推倒式

28、介绍一下三元表达式(我把python的和js的搞混了 最开始会的是:condition?true:false)

29、什么是GIL(Global Interpreter Lock),他有什么用

30、列表如何去重

31、python如何实现单例模式

全部评论
已Oc
点赞 回复
分享
发布于 2023-11-29 00:16 四川
看到你的面经投了一下,跟你问的问题一毛一样 公司不大,八股文还挺多
点赞 回复
分享
发布于 2023-12-01 20:16 上海
滴滴
校招火热招聘中
官网直投

相关推荐

安徽省移动公司 IT部门 一年税前14w
点赞 评论 收藏
转发
1 16 评论
分享
牛客网
牛客企业服务