前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​[c/c++后台开发面经系列]4 Zoom面经(含答案)

​[c/c++后台开发面经系列]4 Zoom面经(含答案)

作者头像
我是程序员小贱
发布2020-06-05 09:39:16
2.8K0
发布2020-06-05 09:39:16
举报
文章被收录于专栏:面试经验贴面试经验贴

嘻嘻,祝小仙女们女神节快乐! 此系列内容以及观点仅个人感受,不妥之处直接私我!目的为了大家能更好的知道面试题难度以及如何准备,希望能让大家少浪费时间寻找资料,多点时间学点干货!因为篇幅原因,大部分题目题解简洁,但有相关资料推荐进阶阅读,学会使用搜索引擎是一门艺术!望谅解! 公司岗位都是后台开发工程师,这段时间很多公司远程办公(疫情),可能不少也选择了他们产品吧(并不是打广告),据了解工作+生活比较好平衡

一 Zoom面试

一面,二面,三面时间间隔比较快,参加完笔试(1个小时),如果通过就面试!而且面试过程中基本上没有涉及语言语法知识。

1 一面(视频面40分钟)

  • 自我介绍

主要表明自己姓名,学校,为什么面这个岗位或者公司,具有XX技术,想尝试贵公司等。

  • 说说线程和进程

在 Linux 下,程序或可执行的文件是一个静态的实体,也就是一组指令的集合。进程是一个动态的实体,有自己的生命周期,既然有生命周期,那么生死需要保障,如何调度就成为很重要的一个环节。恰巧线程就成为了操作系统进程调度器的最小执行单元。画个图。

进程和线程

从这个图(灵魂画手)我们可以得出一个进程包含多个线程。那么机智的面试官就会问。

  • 为什么需要多个线程?

回答:各个线程(我们可以称作为工作线程)各自去处理自己的任务。同时在单核时代,多线程主要是为了提高 CPU 和 IO 设备的综合利用率。 举个例子:当只有一个线程工作的时候,会导致CPU计算时,IO设备空闲;进行IO操作时,CPU 空闲。可以简单地理解成,这两者的利用率最高都是 50%左右。但是当有两个线程的时候就不一样了,一个线程执行 CPU 计算时,另外一个线程就可以进行 IO 操作,这样 CPU 和 IO 设备两个的利用率就可以在理想情况下达到 100%; 多核时代: 多核时代多线程主要是为了提高 CPU 利用率。举个例子:假如我们要计算一个复杂的任务,我们只用一个线程的话,CPU 只有一个 CPU 核心被利用到,而创建多个线程,就可以让多个 CPU 核心被利用到,这样就提高了 CPU 的利用率。 面试官:多个进程也可以的呀。 回答:不同进程地址空间独立,线程共享内存如下图。同一进程的多个线程共享一份全局内存区域包括初始化数据段、未初始化数据段和动态分配的堆

进程线程资源情况

  • 死锁解释一下

我们先看看下图了解下什么是死锁。

死锁

线程A 已经成功拿到了互斥量 A,正在申请互斥量 B ,而同时在另一个 CPU 上,线程 B 已经拿到了互斥量B ,正在申请互斥量 A 。彼此占有对方正在申请的互斥量,结局就是谁也没办法拿到想要的互斥量,于是死锁就发生了。 知道了什么是死锁以后,了解死锁四大必要条件以及如何避免。 四大必要条件 互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。 请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。 不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。 循环等待条件: 若干进程间形成首尾相接循环等待资源的关系 1 避免死锁最简单的方法就是总是按照一定的先后顺序申请这些互斥 量 2 用锁来尝试,得不到锁则返回

  • 了解音视频处理相关知识吗

因为不是这个方向,但是公司业务很多是这一块,所以面试之前需要了解一下,比如音频格式,视频格式,视频编码等。所以,如果决定了面试,还是了解了解公司的主打产品吧

  • 介绍一下http与https及区别(第三次出现)

HTTPS和HTTP的区别 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。 HTTPS和HTTP的区别主要为以下四点: 一、https协议需要到ca申请证书,一般免费证书很少,需要交费。 二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。 三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

  • 项目中用过kafka,redis了解吗,简单介绍下redis和kafka

redis 1 提供高性能、原子操作内存键值对,具有高速访问能力,可用做消队列的存储,但是需要自己在上层应用实现 kafka 1 巨型存储量,支持TB甚至PB级别数据 2 高吞吐、高IO:一般配置的服务器能实现单机每秒100k条以上消息的传输 3 消息分区、分布式消费:保证消息顺序传输。支持离线和实时数据处理

  • mysql优化

主要从以下几个方面考虑 1 表的设计合理化 2 分表技术(水平分割,垂直分割) 3 读写分离 4 mysql服务器引擎升级 5 定时清除不需要的数据,进行碎片整理 6 存储过程 7 可以通过show stats了解sql执行频率,explain分析sql语句执行情况等

  • 编程题1 合并有序链表(不知道大家看了几篇,有没有发现这类型的公司题目总是这几道?)

[leetcode链表系列]4 合并有序链表

  • 还有什么可以问我的吗?

这个问题一般来说会有下文,只要不问一些敏感话题就行了,比如可以问问对于应届生的培养等。

2 二面(视频面35分钟)

忘记相隔了多少天,某一天晚上一个小姐姐打电话约时间面试。。

  • 自我介绍
  • 看你一面说过中间人攻击,你介绍一下

中间人攻击

首先它是指攻击者与通信两端分别建立联系,使得通信双方认为在和私密的连接与对方通信,但事实上整个会话都被攻击者控制。其详细过程。 1) 客户端发送请求到服务端,请求被中间人截获。 2) 服务器向客户端发送公钥。 3) 中间人截获公钥,保留在自己手上。然后自己生成一个【伪造的】公钥,发给客户端。 4) 客户端收到伪造的公钥后,生成加密hash值发给服务器。 5) 中间人获得加密hash值,用自己的私钥解密获得真秘钥。同时生成假的加密hash值,发给服务器。 6 ) 服务器用私钥解密获得假密钥。然后加密数据传输给客户端。

  • 内存泄漏怎么处理的

这里介绍一个工具Valgrind。它是Linux下仿真调试工具的集合。其内核模拟了cpu环境并提供服务给其他工具。这些工具类似插件,辅助完成特定的内存调试任务(自己去装了尝试用用更深刻)。

  1. Valgrind体系结构

Valgrind工具集

  1. 结构详述

插件名称

功能

Memcheck

检测开发中绝大数内存错误使用情况。比如未初始化的内存或者使用已经释放的内存

Callgrind

收集程序运行时数据,简历函数调用关系图

Cachegrind

检查程序中缓存出现的问题,可以给用户提供Cache丢失次数等来方便优化程序

Helgrind

检查多线程程序中的竞争问题

Massif

堆栈分析器。测量程序在堆栈使用了多少内存。

Extension

利用core提供的功能,自己编写特定内存调试工具。

  • Makefile简单介绍下

我们一切的努力都是为了更快的完成工作,出现了Makefile是一样的道理。Makefile关系到了整个工程的编译规则。一个工程中的源文件不计其数,其按*类型、功能、模块*分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。后续会说docker的dockerfile也是同样的道理。 (后台回复makefile获取实践手册)

  • gdb调试使用过吗,多线程调试怎么弄

(后台回复gdb领取gdb调试手册)

  • 看你用过大数据框架,介绍介绍(这里推荐一下http://dblab.xmu.edu.cn/)

Apache Spark

Apache Flink

核心实现

Scala

java

编程接口

Java,Python,R语言,Scala

DataSet API支持java、scala和python。DataStream API支持Java和Scala

计算模型

基于数据片集合的微批量处理模型

基于操作符的连续流模型

优缺点

流式处理有延时 支持秒级计算,实时性不好

流式计算与Storm性能相当,支持毫秒级计算 实时性非常好

  • 进程间的通信(第三次遇见)

答出一共有哪几种,优点/缺点是什么,最快又是什么,也可以从一中方式为突破点,从内核角度阐述更为与众不同了!

进程间通信方式

描述

管道pipe

半双工通信方式,数据单向流动,只能在父子进程中使用。

命名管道FIFO

半双工方式,但是允许非父子关系通信

消息队列

大小有限,存放在内核中的链表,建立好好用用ipcs命令。消息队列克服了信号传递信息少、管道只能承载无格式字节流等缺点

共享存储

一块内存,多个进程可以访问,共享内存为最快IPC方式。通过和信号量等来解决进程间的同步问题。

信号量

计数器,控制多个进程对共享资源的访问,不错的同步手段。

信号

通知机制的完美实现,某个进程有事件发生时通知处理。

  • 介绍几个常用的网络程序分析工具(Linux命令)

网络程序分析工具

命令名称

命令功能

示例

vmstat

实时输出系统各种资源使用情况比如进程信息,内存使用等

vmstat 5 2(每隔5s输出一次结果,一共输出2次)

netstat

网络信息统计工具。

netstat -nat| grep ip:port(查看连接状态)

mpstat

实时监测多处理器系统每个cpu使用情况

mpstat -P ALL 5 3(每隔5s输出一次结果,输出三次)

lsof

列出当前系统打开的文件描述符工具

lsof -c httpd(查看httpd使用了哪些描述符)

tcpdump

网络抓包工具(参考界面的wireshark)

tcpdump dst port 12345(抓取进入端口13579的数据包)

nc

快速构建网络连接

nc -C ip+port(连接服务器并发送信息)

4 总结

这次面试同样基本上从简历出发+公司业务特点出发。所以面之前了解了解公司相关业务(一点点也行,说明你是用心的),对自己简历上的东西一定不能弄虚作假。另外请记下以下几点:

  • 公司招你去是干活了,不会因为你怎么怎么的而降低对你的要求标准。
  • 工具上面写代码和手撕代码完全不一样。
  • 珍惜每一次面试机会并学会复盘.
  • 对于应届生主要考察的还是计算机基础知识的掌握,项目要求没有那么高,是自己做的就使劲抠细节,做测试,这样你就知道会遇到什么问题,遇到什么难点,如何解决的。当被问到的时候就可以侃侃而谈了。
  • 非科班也不要怕,怕了你就输了!一定要多尝试。

参考链接:

http://www.redis.cn/

http://kafka.apache.org/

https://www.nowcoder.com/discuss/150059?type=0&order=0&pos=8&page=0

https://zhuanlan.zhihu.com/p/62025258

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是程序员小贱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 Zoom面试
    • 1 一面(视频面40分钟)
      • 2 二面(视频面35分钟)
        • 4 总结
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档