字节跳动c++云原生二面(65min)(代码片段)

MangataTS MangataTS     2022-12-16     323

关键词:

字节跳动C++云原生二面(65min)

面试问题

HTTP1.0 、1.1和2.0 的区别和差异是什么

  • 《HTTP1.0和1.1的区别》
  • HTTP1.1 默认开启长连接(keep-alive) 而HTTP1.0需要添加参数,在一定程度上减少了建立和关闭连接的消耗和延迟
  • HTTP1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能。HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,客户端接收到100才开始把请求body发送到服务器;如果返回401,客户端就可以不用发送请求body了节约了带宽。
  • HTTP1.0中认为每台服务器只有一个唯一的IP地址,因此请求头中的URL中并没有传递主机名,因此HTTP1.0没有host域,但是HTTP1.1的请求消息必须有host域(host域其实就是一个记录IP和域名的文件,可以加快解析速度)
  • 在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  • 在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  • 《HTTP1.1和2.0的区别》
  • HTTP2.0使用多路复用的技术,做到同一个连接并发处理多个请求,并且并发请求的数量也比HTTP1.1大了好几个数量级,要比HTTP1.1多建几个TCP连接的开销更小
  • HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
  • 支持服务器推送 ,为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在 浏览器明确地请求之前 ,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
  • HTTP2.0采用二进制格式传输数据

WebSocket 也是基于Http协议的对吧

WebSocket在建立连接的时候是使用的HTTP协议,建立连接之后就是自己的WebSocket协议了

HTTPS有用到过吗,HTTPS在数据传输的过程中是对称加密还是非对称加密

HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段

整体过程分为:证书验证数据传输 阶段

证书验证的时候会拿公钥做什么事情

会将公钥去加密由一个权威服务器生成的一个随机数字,然后再发送给服务器端,服务器端通过私钥解密随机数,然后服务器通过客户端传入的随机数进行构造对称加密算法,对返回结果内容进行对称加密后传输给客户端

为什么数据传输是用的对称加密

  • 非对称加密的加解密效率是非常低的,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的
  • 在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以 HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。

孤儿进程和僵尸进程简单介绍一下

  • 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。(也就是子进程的退出状态不被收集)。
  • 父进程如果不等待子进程退出,在子进程之前就结束了自己的“生命”,此时子进程就叫做孤儿进程。
    Linux避免系统存在过多孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程。
    Pid==1,init进程(初始化进程)

孤儿进程和僵尸线程怎么去避免呢

  • 《僵尸进程处理》
  • 其实在子进程退出的时候内核会发送SIGCHLD信号给父进程,我们可以捕捉SIGCHLD信号,然后在信号函数中回收子进程,即调用wait

线程之间是怎么同步的,一般有哪些方式

  • 信号量:为控制一个具有有限数量用户资源而设计
  • 互斥量:为协调共同对一个共享资源的单独访问而设计的
  • 读写锁
  • 条件变量
  • 文件互斥

详情参考此文:https://zhuanlan.zhihu.com/p/514079587

进程什么时候是在内核态什么时候是在用户态,怎么做一个切换的

从用户态到内核态的转变,需要通过系统调用来完成。比如,当我们查看文件内容时,就需要多次系统调用来完成:首先调用 open() 打开文件,然后调用 read() 读取文件内容,并调用 write() 将内容写到标准输出,最后再调用 close() 关闭文件。

系统调用会将CPU从用户态切换到核心态,以便 CPU 访问受到保护的内核内存。

系统调用的过程会发生 CPU 上下文的切换,CPU 寄存器里原来用户态的指令位置,需要先保存起来。接着,为了执行内核态代码,CPU 寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。

而系统调用结束后,CPU 寄存器需要恢复原来保存的用户态,然后再切换到用户空间,继续运行进程。所以,一次系统调用的过程,其实是发生了两次 CPU 上下文切换。

注意:系统调用过程中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程。

系统调用过程通常称为特权模式切换,而不是进程上下文切换。

详情参考此文:https://www.cnblogs.com/tsaiccj/p/15762258.html

死锁你是怎么理解的,什么情况会产生死锁

读写锁这一块你有用过吗,简单介绍一下

平常项目里面也没涉及到读写锁对吧

爬虫这一块,爬数据的时候是并发做爬取的吗,讲一下你的思路,还有你的数据是存储在哪里的?

这个项目是你单独去做的吗?看你投入了一年的时间,当时是出于什么考虑来做这一块呢?你在做的过程中有碰到过比较大的难点吗,比如真正去做一些实现的时候遇到过什么棘手的吗

刚才提到你自学了 python ,你来介绍一下Python中的闭包

你自己比较擅长哪个语言呢

你对云原生感兴趣,那么Golang有尝试去做过一些学习吗

数据库这一块你了解的多吗,比如像MYSQL,包括像一些关联查询,一些高级的SQL语句什么的,还有索引什么的

比如数据量比较大的情况,比如说你朋友发现我某一个SQL执行的时候比较慢,你觉得如果他执行比较慢的,可能有哪些原因?你怎么去排查定位呢?

索引的回表的操作一般在什么情况发生

volatile这样的关键字的作用是干什么的

你平常和同学做项目的合作过程中你是怎么去写作的,怎么分工的或者是做一个拆解的,谁去做这个事儿

因为你涉及到一些比如参加一些比赛的话,比赛是有人去主导,比如说一些比如参会,你们是主动自己去参加的吗

如果你过来实习的话,比如说给你一个比如说任务或者一个方向,但这一块相对来说又自己比较陌生,你一般会怎么去做?

你有关注哪些云原生的方向或者项目吗?K8s这一块的话有了解过吗?

代码

想了2min,给了一个 N 3 N^3 N3 的思路,先预处理前缀和面积,然后枚举正方形的左上角,以及边长

实现后,面试官问我能不能用动态规划做,当时感觉是可以的,然后想了10min,用 d p [ i ] [ j ] dp[i][j] dp[i][j] 表示 ( i , j ) (i,j) (i,j) 点作为正方形的右下角的点的最大正方形的长度 ,发现规律如果左上角三个正方形的面积相等,而面积相等就等价于边长相等就恰巧是我们的 d p dp dp 状态,那么就能合成更大的一个正方形

d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] + 1 dp[i][j] = dp[i-1][j-1] + 1 dp[i][j]=dp[i1][j1]+1

如果不相等的话,那么就是从三个正方形中选一个最小的加一来合成

d p [ i ] [ j ] = m i n ( d p [ i − 1 ] [ j − 1 ] , m i n ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) ) + 1 dp[i][j] = min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1])) + 1 dp[i][j]=min(dp[i1][j1],min(dp[i1][j],dp[i][j1]))+1

当时脑子有点昏,不相等我就直接让他等于 1 1 1 了,面试官说有事,我的思路没问题,细节还需要注意下,然后就run了,现在想来真就差一点

#include<bits/stdc++.h>
using namespace std;
#define N 500
int dp[N][N];
int n,m;
vector<char> matrix[N];
int main()

    cin>>n>>m;
    for(int i = 0;i < n; ++i) 
		for(int j = 0;j < m; ++j) 
            cin>>matrix[i][j];
    
    memset(dp,0,sizeof dp);
    int ans = 0;
    for(int i = 0;i < n; ++i) 
        for(int j = 0;j < m; ++j) 
            if(matrix[i][j] == '1') 
                if(dp[i][j] == dp[i][j+1] && dp[i][j] == dp[i+1][j] && dp[i][j+1] == dp[i+1][j])
                    dp[i + 1][j + 1] = dp[i][j] + 1;
                else
                    dp[i + 1][j + 1] = min(dp[i][j],min(dp[i+1][j],dp[i][j+1])) + 1;
            

            ans = max(ans,dp[i+1][j+1]);
        
    
    pritnf("%d\\n",ans);
    
    return 0;

成都精灵云c++二面(hr面,30min)(代码片段)

成都精灵云C++二面(hr面,30min)一、面试官问你目前有实习经历吗没有手上还有其他公司的offer吗没有说一说你获得的奖项吧ICPC、蓝桥杯、CCCC、计算机博弈等各类竞赛的国奖和省奖对自己的发展方向有什么要... 查看详情

字节跳动+百度+阿里巴巴高频面试题之链表专题(代码片段)

...巴巴二面原题)2、判断单链表是否是回文结构。(2019年字节跳动二面原题)3、删除一个有序单链表中的重复节点。(2019年字节跳动二面原题)4、复杂链表的复制。(2020年百度二面原题)1、逆置一个单链表。OJ链接:https://leet... 查看详情

揭秘字节跳动云原生sparkhistory服务uiservice

本文是字节跳动数据平台数据引擎SparkSQL团队针对SparkHistoryServer(SHS)的优化实践分享。*文|字节跳动数据平台—数据引擎—SparkSQL团队*在字节跳动内部,我们实现了一套全新的云原生SparkHistory服务——UIService,相比开源的SHS,UIServ... 查看详情

第三十八期字节跳动后台开发二面凉经

简历上写了C++和golang,所以两个语言都涉及了一面:golang如何设计一个生产者消费者的模型对channel和goroutine的理解字符串实现减法快速排序c++虚函数进程的通信方式死锁二面:Linux的几个操作找出二叉树中的某路径,使其和为定... 查看详情

中科创达c++二面(hr面,30min,offer)(代码片段)

中科创达C++二面(hr面,30min,offer)面试官问自我介绍技术面已经过去一周了,你对技术面试的总体感觉怎么样呢问一下,你现在秋招的面试的进程怎么样了呢目前收到了多少offer呢?你目前最满... 查看详情

中科创达c++二面(hr面,30min,offer)(代码片段)

中科创达C++二面(hr面,30min,offer)面试官问自我介绍技术面已经过去一周了,你对技术面试的总体感觉怎么样呢问一下,你现在秋招的面试的进程怎么样了呢目前收到了多少offer呢?你目前最满... 查看详情

我经历的字节跳动后台开发实习二面,面试官说叫我补补操作系统和算法(代码片段)

因为热爱所以坚持,因为热爱所以等待。熬过漫长无戏可演的日子,终于换来了人生的春天,共勉!!!在一面过了9天之后开始了,二面,这一次不同,是一个看起来就,嗯,看起来就... 查看详情

字节跳动java后端开发一二面,心态爆炸

一面10.27 (58min)1.子网掩码存在的目的是什么,有什么作用? 2.哪些协议是基于UDP3.HTTP无状态,如何标注用户身份4.服务端通过哪个字段告诉客户端cookie的5.jwt原理6.HTTP如何保证安全传输7.HTTPS加密过程8.假如说我在你隔壁宿... 查看详情

提速10倍!深度解读字节跳动新型云原生sparkhistoryserver

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群前不久,在6月29日Databricks举办的Data+AISummit上,火山引擎向大家首次介绍了UIMeta,一款致力于监控、分析和优化的新型云原生SparkHistory... 查看详情

成都精灵云c++二面(hr面,30min)(代码片段)

成都精灵云C++二面(hr面,30min)一、面试官问你目前有实习经历吗没有手上还有其他公司的offer吗没有说一说你获得的奖项吧ICPC、蓝桥杯、CCCC、计算机博弈等各类竞赛的国奖和省奖对自己的发展方向有什么要... 查看详情

成都精灵云c++一面(20min)(代码片段)

...个类里面只有十个虚函数,那么这个类的大小是多少字节8个字节你说说什么是模板,什么情况下会使用到模板宏函数有用到过吗,它和模板有什么区别哈希表有用到过吗,简单介绍一下它的原理&# 查看详情

成都精灵云c++一面(20min)(代码片段)

...个类里面只有十个虚函数,那么这个类的大小是多少字节8个字节你说说什么是模板,什么情况下会使用到模板宏函数有用到过吗,它和模板有什么区别哈希表有用到过吗,简单介绍一下它的原理&# 查看详情

字节跳动抖音android客户端实习3+1面经(已oc)(代码片段)

前言今日份收到一个粉丝分享来得字节抖音客户端的实习面经,他自己说这次没有面试成功的话,可能还在经历迷茫的找工作。机遇巧合通过学长的内推,前往字节跳动进行了面试。我就废话不多说了,直接进入... 查看详情

2020春招字节跳动二面(代码片段)

1.new和malloc的区别2.c++11新特性编程实现shared_ptr;3.模板实例化和特化实例化:通过用具体值代替模板中的参数,从而产生普通类,函数或者成员函数的过程。隐式实例化:Add(a,c),a的类型是int,c的类型是int。显式实例化:Add(a,... 查看详情

海能达c++一面(技术面20min)(代码片段)

...3;+一面(技术面、20min)前言一面通过了,二面需要去成都线下,但是学校封校了,出去可能回不来了,所以就拒掉了二面(不支持线上二面差评)面试官问自我介绍你的这个tinyweb做完了吗,... 查看详情

海能达c++一面(技术面20min)(代码片段)

...3;+一面(技术面、20min)前言一面通过了,二面需要去成都线下,但是学校封校了,出去可能回不来了,所以就拒掉了二面(不支持线上二面差评)面试官问自我介绍你的这个tinyweb做完了吗,... 查看详情

深信服c++二面(技术面50minoffer)(代码片段)

深信服C++二面(50min)一、问面试官首先是自我介绍有没有做过的什么项目可以聊一聊的聊项目balabala(15min)select多路复用如果来一个请求是怎么处理的select的优点是什么呢?缺点是什么呢?有更好... 查看详情

深信服c++二面(技术面50minoffer)(代码片段)

深信服C++二面(50min)一、问面试官首先是自我介绍有没有做过的什么项目可以聊一聊的聊项目balabala(15min)select多路复用如果来一个请求是怎么处理的select的优点是什么呢?缺点是什么呢?有更好... 查看详情