竞技世界C++开发一面

#面经#

不知道是客户端还是服务端,B**S上投递的,职位描述上也没有说是客户端还是服务端,整体面试挺难,问了很多细节上的问题。

整体面试总结:盯着简历问的,简历上写什么就问什么。狠狠拷打。感觉已凉。

对话录音转文字:

00:00 说话人1(第一个面试官,对着简历上的专业技能一个一个拷打,但凡写上去的都问多,啥也没放过)

虚函数、纯虚函数有什么区别?

00:05 说话人2(我自己)

虚函数的话就是。嗯,有实现体。嗯,纯虚函数就是等于0的,就是呃类似于一个。嗯,接口吧,如果一个类实现了纯虚函数。然后,另外一个类继承了这个实现纯虚函数的类。那,另外一个类如果不实现这个纯虚函数,嗯,那它就没有办法实例化啊,必须实现纯虚函数才能实例化。嗯。

00:39 说话人1

在什么样的情况下,析构函数必须声明为虚函数?

00:45 说话人2

呃。多态情况下,因为呃,如果虚构函数不声明为虚的啊,那么在使用。嗯。父类的指针去销毁子类对象的时候就不会调用。就不会正确的调用子类的析构函数,然后这个时候就会导致内存泄露。

01:14 说话人1

在什么样的场景下面,我们需要使用虚基类?

01:19 说话人2

书集类,嗯。是指,呃,我记得class是没有办法用virtual关键字的吧。

01:33 说话人1

没有学到这一块是吧。

01:37 说话人2

顶多可能多继承的时候,可能会用虚继承吧。虚基类我好像还没有听说过。

01:43 说话人1

不是吗?

01:45 说话人2

这叫虚基类啊,那算是我们没有了解到。

02:04 说话人1

内心里提到的类型推导是。

02:08 说话人2

怎么?凹凸就是简单使用的话,就是凹凸嘛。嗯,就是变量定义或者声明的时候,一般是定义就是给它赋值的时候可以用凹凸。嗯,然后如果是函数的话,我可以把凹凸写在返回值的位置,然后这个时候我需要用。呃,一个P关键字啊。就告诉这个编译器,我要返回的这个类型,因为我不确定它返回什么类型。这个应该是在模板里面会用的比较多。

02:39 说话人1

如果你不告诉他呢?如果你不告诉他呢?

02:45 说话人2

呃,因为我用auto的情况下,就是我不知道它具体会返回什么类型。啊,一般来说就是用在模板的那个地方。这个时候需要去根据实际情况,就告诉他我的这个类型是从哪儿可以推导出来的。

03:00 说话人1

那如果说是这样的,你返回的类型里面,你不告诉他显式的返回类型,这个时候编译器如何去判断是什么类型

03:11 说话人2

嗯。我好像还没这么用过,我一般都是两个一起用的。

03:22 说话人1

智能指针。

03:25 说话人2

嗯,智能指针主要是3个,呃,Unique p tr, share p tr跟微PTR。Unique p tr是,嗯,不允许拷贝的,但是可以移动,它是独占所有权。嗯,然后PR它是通过内部的,呃,应用技术去。嗯。就是说保存现在嗯,有几个实例在引用它所管理的那块内存,如果归零的话,那它就去释放这块内存。嗯,但是会出现自己用的问题,比如说A里面有一个she p, TR指向B。B里面有个share p tr指向A,那这个时候啊,两个人都会等待对方去减少引用技术,但自己又不去释放内存。

04:10 说话人2

这个时候就是内存泄露,然后可以用weak_ptr去解决,因为weak_ptr是弱引用。嗯,就比如说我把B类里面指向A类那个share_ptr改成weak_ptr,那这个时候就可以解决自应用的问题。

04:29 说话人1

unique_ptr和share_ptr可以互相转换吗?如果可以转换的话,是单向转换还是双向转换?谁转换为谁?

04:45 说话人2

(没这么玩过,犹豫了一下)嗯,应该是单向转换是。嗯,unique_ptr转share_ptr。

04:56 说话人1

怎么样从weak_ptr中获取到share_ptr?

05:04 说话人2

嗯。这个我还不清楚。没有用过是吧?对。

05:13 说话人1

Lamdba里面的捕捉器里面的引用。有什么注意事项。

05:27 说话人2

呃,就是lambda表达式对吧。

05:34 说话人1

嗯。

05:40 说话人2

(这个多少有点懵逼了,)这个。我目前没有遇到特别要注意的。

05:55 说话人1

捕捉的是一个指针。

05:58 说话人2

呃,引用捕捉一个指针吗?还是就单纯捕捉一个指针?

06:05 说话人2

单纯捕获一个指针。

06:09 说话人2

如果是局部变量的话,可能会出问题。

06:13 说话人1

局部变量出问题是吗?

06:19 说话人1

如果说我在现在当前的线程一你。

06:27 说话人1

去升。就是去执行了那个。

06:39 说话人2

嗯,那这不就是我这个提示。

06:42 说话人1

你猜猜。

06:51 说话人2

嗯,你是在一个线程里面创建了兰姆达表达式,然后丢到了另外一个线程。嗯,那你。嗯。啊,那也就是病发了。那就需要注意考虑问题。

07:05 说话人1

不考虑并发。这个问题聚焦到。问题聚焦到lamdba捕获的注意事项上面。

07:17 说话人2

嗯。如果你之前的那个线程它结束了的话,那那块儿内存不就已经释放掉了吗?就是你引用捕捉的,或者是用指针的那块儿。那这个时候再去访问,不就会出问题?

07:34 说话人1

嗯,所以就是这个。移动语义。

07:42 说话人1

Std::forward()和std::move()分别使用在什么?

07:46 说话人2

嗯,move是把一个左值转换为右值。forward是啊,完美转发就是说啊,我用了forward之后,那么这个参数它是左值就会保持保持左值的属性啊,右值就会保持右值的属性。

08:09 说话人1

如果说给他。给他加了右值了以后。

08:21 说话人2

嗯,右值的话更相当于一个临时的变量或者说。嗯,没有办法取地址的。嗯,而且它本身只能出现在等号的右边,不能出现在左边,就是你没有办法把另外的值赋给一个右边个例吧。

08:38 说话人1

我举个实际的场景,一个函数有两个参数。第二个参数是又子。在函数的内部使用它有区别吗?

08:52 说话人2

呃,左直引用和右直引用本身都是左直。嗯。

08:59 说话人1

有区别吗?在这个函数的内部去使用这两个。

09:05 说话人2

嗯。没有区别。

09:09 说话人1

那他为什么要有一个。

09:14 说话人2

如果是左直引用的话,那他就可以修,嗯,也不一定说可以去修改。

09:24 说话人2

(应该是想问左值引用和右值引用的区别,但是这里已经开始紧张了,完全没get到意思)嗯,那这块我还不太了解,我还是没有很清楚你说的那种情况。

09:35 说话人3

好吧。

09:37 说话人1

模板你学到什么程度?

09:40 说话人2

嗯。

09:41 说话人1

是简单了解,还是很熟悉,还是说精通。

09:44 说话人2

还是精通?也不能说精通吧?嗯,差不多算熟悉。

09:53 说话人1

嗯,知道是吧?

09:59 说话人2

嗯,对。

09:59 说话人1

那匹配失败不是一种错误,怎么理解?

09:59 说话人2

(已经不知道在问什么了。。。开始瞎猜)嗯。因为我可以有很多个,比如说对一个模板我可以去。嗯,特化它,比如全特化或者偏特化,这个时候匹配的时候应该是优先匹配。嗯,全套话版本,然后再去匹配偏套话版本,然后都没匹配到,再去匹配默认的那个版本。然后如果这个时候再匹配不到的话,那就是那就是有问题了。

10:26 说话人1

嗯,我这我给你举个时间案例,比如说。嗯,一个类似。每一个构造的板都模的形,他都有可能不一样。我如何去,呃,通过参数去找到正确的?还一个Co函数。

10:48 说话人2

呃,是参数个数不一样吗?

10:51 说话人1

嗯,都有可能。假设,假设参数各是一样的情况下。假设就一个参数啊。

10:59 说话人2

嗯,就是说我有多个构造函数,然后他们给你简化一下。

11:04 说话人1

简化一下。两个构造函数,两个构造函数,一个是布尔小布尔类型的,一个是int类型的。啊嗯,你在外面去传一个传参的时候,如何去正确的匹配到这对应的构造函上面?

11:23 说话人2

嗯。指定类型要么就是指定类型,或者是谁指定啊?外面指定肯定是外面使用的时候还要去指定吗?呃,你传的变量的类型应该是确定的。

11:37 说话人1

嗯,然后呢,在模板里面怎么样去判断。嗯,怎么样去匹配。

11:44 说话人2

啊,你是一个类,生成了两个模板,然后对应两个构造函数。嗯。那你如果传布尔型的话,其实他也能跟int型进行匹配。为什么呢?因为布尔可以转T,但是会优。

11:59 说话人1

就代表着它是一样的嘛。

12:01 说话人2

呃,但是会肯定会优先匹配布尔,因为已经有呃已有的实限了,那就会优先匹配布尔。如果没有布尔类型的这个版本啊,它就会匹配int。

12:11 说话人1

你能肯定吗?嗯。

12:13 说话人2

那肯定。

12:15 说话人1

你能肯定小布和英特尔,它都是属于英特?

12:21 说话人2

嗯。

12:25 说话人2

负尔值不就是0和1嘛,那本质上不还是int?

12:29 说话人1

我说这是小波,不是大波。

12:32 说话人2

小布洱。

12:36 说话人2

小布尔C加加里面不就一种布尔类型吗?

12:43 说话人1

行,你可以理解为就只有一个小布偶的,你确定他一定就是类型吗?

12:48 说话人2

呃,也就是在。

12:52 说话人1

在匹配的时候,他一定会去那么匹配吗?

12:56 说话人2

嗯。嗯,他肯定会先匹配布尔类型,然后再去尝试匹配int类型。

13:01 说话人4

嗯。

13:07 说话人1

他这个时候匹配会出现歧义吗?

13:10 说话人2

嗯。

13:13 说话人2

会有歧义。

13:15 说话人1

那既然是有歧义的话,那如何去那如何做到精确匹配呢?

13:20 说话人2

嗯,精确匹配。

13:26 说话人2

那你就要判断类型吧。

13:29 说话人1

啊,这些。

13:30 说话人2

嗯。但是C加加里面好像没有判断类型的方法。嗯。

13:35 说话人1

没有判断类型的方法吗?(被面试官质疑了,应该是有的,但是用的少,没想到)

13:38 说话人2

嗯。加个中间层吧,加个中间层萃取一下。(还想说类型萃取呢,也是胡言乱语)

13:44 说话人1

加一个什么样的。

13:46 说话人2

嗯,加一个。封装过的中间层就是。嗯。匹配你传的那个参数。

13:57 说话人1

匹配什么呢?嗯。

14:00 说话人2

比如说你传入的参数如果是。嗯,布尔类型的就是一个,嗯。中间层就是一个嗯单的模板类,这个模板类里面有一个。嗯,怎么说呢。嗯,布尔或者int。就是有两个实现,两个模板,两个实现。嗯,然后你要是传int,那就匹配int那个。你要是传布尔,就匹配布尔那个。

14:33 说话人1

还有别的思路吗?

14:34 说话人2

嗯,目前没有别的思路了。

14:42 说话人1

std::bind。呃,绑定的那个参数,他的那个站位有严格的要求吗?

14:54 说话人2

嗯。有顺序要求

14:59 说话人1

就是有序要求是吧?

15:00说话人2

对。

15:02说话人1

你确定吗?

15:04 说话人2

呃,因为你绑嗯,办的绑定的时候不是可以传固定的参数值吗?嗯,然后你在那个位置传固定参数值的话,那么这个位置的参数就固定下来了。然后你可以在呃那个需要呃空余的那个位置呃去塞一个占位符。嗯,那这个不就是有顺序要求的。

15:27 说话人1

呃,在绑定位置的同时,还能携带其他的参数吗?

15:31 说话人2

嗯。另外加参数是吧?

15:33 说话人1

对。可以在任意位置加吗?

15:40 说话人2

嗯,我还没试过另外加参数呢。应该是不能加的吧。

15:48 说话人1

Std::function()。它支持。里面来支持哪一些可以传入的参数啊?

15:59 说话人2

嗯,Lambda或者是已经有的函数。嗯。嗯,仿函数。

16:08 说话人1

啊,还有呢,嗯。

16:11 说话人2

其他的好像没了吧。三种对,嗯。

16:16 说话人1

那你,嗯。现在用function多还是用lamdba多?

16:22 说话人2

呃,lamdba西。因为lamdba更方便。

16:28 说话人1

多线程。做线程和做进程有什么区别?

16:33 说话人2

嗯。多线程和多进程啊,如果是多进程的话。嗯,应该是通过fork,然后就是在Linux下,那就是通过fork去呃分离出来一个子进程。然后这个是候通过判断它的呃返回值,通过判断fork的返回值是确定父进程还是子进程。然后,嗯。多进程的话,应该是每个进程都有一份自己的变量。嗯,如果是多线程,那么多个线程共享进程内的一些变量。

17:09 说话人1

嗯。然后多,如果是多线程之间,线程与线程之间要。消息发送怎么办?

17:20 说话人2

嗯。可以通过临界区。啊,县城的通信可以通过临界区。

17:30 说话人1

你那你说的是资源共享。

17:32 说话人2

还是说的是什么?呃,资源共享,资源共享也差不多可以用来腾讯。

17:39 说话人1

我说的是从进程A。发生的某一件事情。然后呢,他要将这个事件。发给事件啊。和数据发给指定的某个线程。

17:55 说话人2

嗯。

17:59 说话人2

要发送数据,嗯,消息队列。

18:04 说话人1

要将数据发给指定的线程怎么办?

18:07 说话人2

发给指定的线程(思考。。。不知道怎么回答了)。

18:11 说话人1

嗯,就是只知道对端的线程ID。

18:17 说话人2

我还没这么玩过。嗯,对。

18:21 说话人1

那进程之间怎么通信呢?

18:27 说话人2

可以通过socket,然后也可以通过信号。嗯嗯,也可以通过信号量啊,然后共享内存。嗯,管道。对,目前就已知这些,你你用过哪种。嗯,管道用过,然后。啊,其他的应该都没用过。

18:51 说话人1

嗯。你能介绍一下你使用的管道是怎么用的吗?

18:56 说话人2

管道的话,就是在linux下创建,呃,我记得有一个系统调用可以创嗯,创建一个管道,就是一个数组,你需要提供一个已经。呃,Int类型的初始化好的数组,这个数组长度只有2,呃,然后去使用那个系统调用。啊,这个时候就会把数组初始化成管道,嗯,0和1两个位置,一个是读端,一个是写端。然后,通过你初始化好的这个呃之后的这个管道,然后后面你fork了之后,你可以往管道里面读写数据。

19:28 说话人4

嗯。

19:29 说话人1

通过管道来进行多进程之间的通讯是吧?如果说你刚才提到了,你反复的提到了几次,一个fork。嗯,如果说主进程。如果说子进程崩了怎么办?

19:46 说话人2

嗯,子进程崩了。嗯。

20:02 说话人2

(问懵了,其实可以用信号处理函数处理的,但是已经紧张想不起来了)我目前还不知道到底要怎么处理。

20:06 说话人1

那如果主进程崩了呢?

20:10 说话人2

主进程,嗯。

20:11 说话人1

主进程了会产生什么后果?嗯,然后应该怎么处理?

20:15 说话人2

主进程崩了,如果子进程不收尸的话,那就是。啊,孤儿进程。孤儿指定成孤儿,因为父亲进程崩溃了。

20:28 说话人1

有谁会接管他们吗?

20:29 说话人2

呃,会呃,linux下的话会有一个。呃。ID为0的进程吧,好像是,嗯。

20:37 说话人1

ID为0的进程,这个进程是谁呢?

20:40 说话人2

嗯。Systemd.我如果没记错的话。

20:45 说话人1

能确认吗?

20:47 说话人2

嗯,确认吧。

20:49 说话人1

嗯。

20:52 说话人1

看过一些linux下面这些书籍吧。

20:55 说话人2

对对。

20:56 说话人1

是不是看过这一些方面的一些资料对吧。

20:59 说话人2

嗯,看过一些。

21:06 说话人3(另一个面试官,开始拷打项目)

太。我看您有一个项目是基于任务流的网络框架,嗯,这个是从头到尾自己写的吗?

21:17 说话人2

嗯,对。

21:19 说话人3

这个写这个框架。是想解决什么问题啊?

21:24 说话人2

嗯,主要是学习Linux下的,它那个网络就是网络操作,包括数据的收发。嗯,因为如果是。单纯Linux加变长的话,就要用那个socket嘛。就是那个提供的系统调用啊,这个时候其实也挺麻烦的。啊,然后还需要处理他的。呃,各种各样的参数,然后有这个。啊,TCPDP啊,这种的还需要做区分。然后我就自己封装了一遍。嗯。

21:57 说话人3

那您这个框架,您觉得比较适合做哪一类的业务呀?

22:03 说话人2

(已经)

嗯。因为是基于任务流的啊,如果是确定性的任务的话,是可以嗯,使用这个框架的,就是。呃,它可以嗯,自己去设置任务的先后顺序,包括并行和串行。嗯,对对,设计好了之后,就可以让他直接呃,整个的所有任务一起执行。它就会按照顺序执行。嗯。

22:29 说话人3

能举个具体的例子吗?

22:31 说话人2

嗯。比如说,呃,就单纯的HTTP吧。嗯,如果我要使用HTP去传文件的话。呃,文文文件比较小,那么单个ATP应该就是可以实现,嗯,就是可以去把单个文件传上去啊。如果是文件比较大的话,还需要设计一段连续传。啊,那这个时候我就可以创建一个任务。啊然后啊当有请求,比如说他要上传文件的时候啊,我去接收它上传上来的文件,然后它还有断点续传啊,我需要去记录它当前传了多少。啊,这是啊一个任务。然后这个任务它嗯,由于它接收到网络了之后,它会创建一个就是封装好的任务,然后给上层。

23:20 说话人2

啊,然后上层往这个任务里面去添加逻辑。嗯,然后这个任务执行完成了之后,它会嗯可以设置另外一个任务,嗯,去接收下一个嗯,就是分片儿的文件。嗯,对。

23:39 说话人3

它和普通的上传文件上传的这种。请求应答式的区别在哪儿?

23:49 说话人2

(问懵了,胡言乱语中)

嗯。普通的文件上传的话,嗯,因为你是要接收数据的嘛。嗯,然后啊,你不知道这个文件,嗯,就是下一次它那个断点来是什么时候,然后嗯是能监听到的,但是嗯需要去不停的访问,就是呃上传之后这个断点的它这个信息啊,就是我肯定有一个变量要存在,现在存存嗯就是传了多少。啊,然后是哪个IP传的。那这个需要绑定的。啊,如果使用任务的话,那么这个呃任务本身它携带这些数据。啊就不需要去啊当然也是需要设置的。啊,就不需要去,呃,就是底层那么麻烦。

24:35 说话人3

负载均衡是怎么做的呀?

24:37 说话人2

啊负载均衡是啊。假如说我是server端,就是啊,我是客户端嘛,就是我连接了其他目标啊。我只能保证我这边到其他目标的这个连接数量是均衡的。嗯,就比如说百度吧,呃,如果是进行百度那个域名的解析的话,会解析到多个IP啊,这个时候我会啊平均分配这个连接数。啊,就是请求它的,呃,不同的I IP的那个连接数大致是均衡的。呃,底层如果要实现的话,大致就是。嗯,连接池,然后呃,每个连接的话,它有当前的连接数。嗯,然后会去均衡它。(这里连接池其实也是胡扯的,应该是负载均衡组,有对应的实现,太紧张已经开始胡言乱语了)

25:26 说话人3

我可以理解,这个框架的server端是可以部署多个的,是吧?

25:31 说话人2

嗯。(这里应该没听清)

25:32 说话人3

如果可以通过负载均衡到不同的server上。

25:37 说话人2

呃,Server端应该是只有一个的。就是如果你是就是。负载的话,只是说连接数量相对均衡的这种负载。

25:49 说话人2

只有一个server,他需要。

25:54 说话人2

呃。我是说,就是你作为客户端的时候,你去连其他的server,这个时候你可以嗯,尽可能的保证对,尽可能保证连接是均衡的。

26:08 说话人3

哦,您的意思是这个负载均衡是在客户端上。不是在这个server的

26:11 说话人2

对。

26:18 说话人3

缓存怎么做的?

26:20 说话人2

嗯,双向链表加一个map。就是链表里面,双向链表里面是有序的。嗯,就是。嗯,使用次数最多的应该是在前面,然后后面是使用次数最少的,或者说是啊,应该是最近的,最近使用的是链表头,然后一直没有使用的会靠近链表尾。啊,然后会有一个map去存,就是我当前的链表节点啊,它的对应的K和value。啊,如果我要获取K的话,那我就先去呃map里面找,找到这个节点之后返回,然后把它移到列表头。啊如果是删除的话,我就需要。

26:58 说话人2

嗯。嗯,正常来说应该是不需要删除。应该是我往里面塞数据的时候,我往缓存里面塞数据,那么缓存满了,这个时候我会把尾部删掉,然后往头部加。大致就是这样。

27:20 说话人3

看您下面提到了一个。Good with group.过读常用的几个API有哪几个?

27:33 说话人2

嗯。首先是创建的时候就是wait group, 然后呃,我需要常用的是wait()和done(),因为wait是等待done() 的话就是我初始化的时候不是给了一个int值嘛,就是说你比如说每个线程。嗯,每个线程都在结束的时候调用done()函数啊,这个时候就会奇数减1。所有线程都执行完了之后,计数数就归零了,那这个时候,Wait(), 嗯,就可以正常执行,否则的话,Wait, 就一直等一直等待。

28:09 说话人3

说一下future和promise。

28:18 说话人3

啥情况?

28:19 说话人2

嗯。?

这里正回答问题呢,突然短线了,还是我这边不知道原因,突然把麦和摄像头全给关了,面试官那边没问题,我能看到也能听到。但是他们看不到我,不知道啥情况。用的钉钉会议,可能是BUG。

然后我又手动打开了麦和摄像头。。。

28:24 说话人2

不知道,我不知道刚刚什么情况,突然就断了。和promise。

28:35 说话人2

嗯,也相当于一种消息传递吧。嗯,就是说我可以在promise里面。我通过promise获取到future,然后把这个promise传给呃需要用的线程。然后这个线程在合适的时机把变量值塞到promise里面,然后我在外面可以用future去get。然后获取到这个变量值。

29:01 说话人3

除了future和promise之外,如果我们想实现类似的机制,还有其他的办法吗?

29:08 说话人2

嗯。

29:12 说话人2

就是通过技术了。核心其实是技术。然后。嗯,就是wait down的时候就减一,wait时候加一嘛。

29:29 说话人3

要考虑线程安全吗?

29:32 说话人2

呃,当然是需要考虑线程安全的。

29:38 说话人2

怎么做呢?呃。枷锁,嗯,或者是原子操作。

29:47 说话人3

能具体说过吗?怎么加锁原子操作怎么?

29:51 说话人2

嗯,如果是加锁的话,嗯,因为你假设说我调用了done(),就表示我要计数减1啊,这个时候我应该让那个内部的计数器减1。就嗯,减1的时候肯定是要加锁的。呃,然后。嗯。嗯。初始化的时候,我应该是给了一个初始值。嗯,那wait()的时候就是呃,一直去读取这个计数器的值,然后如果归零的话,就可以继续执行。

30:24 说话人3

你刚提到一直读取这个值,是需要一直占用CPU去循环吗?

30:29 说话人2

嗯。可以用条件变量去。呃,间接的唤醒就是。哦是我去读的时候,我去看它等不等于0,如果不等于0的话,这个时候先。呃,睡眠,然后,嗯,我done() 的时候可以用条件变量去通知这个wait嘛

30:58 说话人3

如果我们要看一个mysql 查询语句的执行计划。(可能是因为简历上写了mysql事务,所以才会这么问)

31:05 说话人2

查询的执行计划。呃,是查询语句对吗?嗯,这个我还没操作过。

31:16 说话人3

MYSQL常见的存储引擎有哪些?

31:20 说话人2

嗯。用过的有InnoDB,然后其他的我还没过。

31:37 说话人3

可是在买斯库里我们希望实现。如果。再见。存在则更新组件存在的数据,不存在则插入用什么一块。

31:51 说话人2

嗯。不存在则插入,存在的话需要更新。Update.?

32:11 说话人3

redis持久化的方式有几种?

32:14 说话人2

嗯。有一个定时的持久化,还有一个是。嗯,具体的名字我不记得了,还有一个,嗯。

32:26 说话人2

嗯,好像是会先存到内存里面,然后再从内存里面啊往磁盘里面去写啊还有一种嗯,混合的就是两种方式一起用。

32:38 说话人3

Redis的集成方案有了解过吗?有哪些啊?

32:43 说话人2

嗯。

32:48 说话人2

具体的我还没有了解过。主要是没有自己部署。

32:55 说话人3

就是我看您有个性能测试,大概是18000加的Q,PS, 这是测的是纯。嗯。

33:05 说话人2

对。HTTP.

33:08 说话人3

对。

33:13 说话人3

12、线程是指服务器有12个处理线程还是有12个客户端线程?嗯。

33:20 说话人2

我是在自己电脑上测,就是起了个服务器,然后再用WRK去测啊。我自己的电脑是6核12线程的。

33:29 说话人3

这个是这个框架的性能的极限了吗?

33:33 说话人2

嗯,目前我测的应该是性能的极限了。

33:36 说话人3

有些分析为什么只能到一个。

33:40 说话人2

呃,还没有分析过。

33:46 说话人3

如果只是单纯本机的请求,应答应该不止一万八吧?

33:51 说话人2

嗯。我因为我只有一台电脑,所以还没有办法分开测。

33:56 说话人3

电脑配置是六核心八GB?

33:56 说话人2

对(其实是6核12线程,面成这样,已经无力反驳了)

34:04 说话人3

行,我的问题差不多了,您有什么想了解或者想问的吗?

34:07 说话人2

嗯,一共是有几面?一共一共几次面试?

34:15 说话人3

3次吧,3次分应该。

34:17 说话人2

那其他的我就没有想要了解了。

34:21 说话人3

那没有其他的,咱今天就先到这儿。

34:24 说话人2

好的。

34:25 说话人3

嗯,好行谢谢,好拜拜拜拜。

34:31 说话人2

拜拜。

挂断会议后:哎。老实了,被问蒙了,老实了。

全部评论
感觉问的真的多啊
点赞 回复 分享
发布于 04-11 23:17 北京
米哈游感兴趣的可看主页帖子 可看简历 春招进度巨快!!!!!
点赞 回复 分享
发布于 04-11 16:45 上海
你这录音可以发给ai整理一下
点赞 回复 分享
发布于 04-10 23:29 辽宁

相关推荐

04-07 13:43
四川大学 Java
爱吃香菜的无尾熊服了...:春招真搞笑了 二月份到现在天天刷boss 官网开的都没几个 有一段大厂实习 学历2本9硕 到现在只面过京东字节 不知道今年咋这么难 秋招大厂没机会 春招更是连面试都没有
点赞 评论 收藏
分享
1.说一下你的断点续传怎么实现的?2.分片出错了怎么办?3.CRC校验和MD5校验有啥区别?性能 准确 错误率3.如果串改,攻击 你怎么解决?4.你的分片 怎么保证有序5. 你的文件上传 如何保证文件上传对了的?6. 你说说map 和hashmap的区别7.不考虑范围查询的话 红黑树和hash表有什么区别8. hash冲突你知道吗? 怎么解决?9. 你知道的hash算法有哪些?10.hash 算出来的是什么 是内存地址吗?举个例子1234 怎么hash的11.你知道的排序算法有哪些 ?12.快排实现复杂度是多少  最坏 最好 平均? 为什么平均还是nlogn  怎么算的13.快速排序 的 平均时间复杂度的计算方法14.红黑树 应用 方面 介绍一下 不考虑区间搜索和Key的有序性,关心 KV 映射,哈希表和红黑树的适用场景和局限性15.对于字符串而言有什么好的哈希方法16.举个例子对字符串 1234 的哈希方法,是怎么计算的17.unordered_map 重新计算哈希 后是怎么映射的 rehash 怎么操作 rehash 复杂度会不会很高?18.哈希校验的哈希冲突怎么解决?19.CRC和MD5怎么比较置信度 ?20.分片顺序 分片完整性 文件完整性 怎么校验21.http3的前向纠错机制22.网络不稳定的情况下,分片怎么做校验是否丢失分片的情况? 怎么维持网络稳定性
柠檬微趣一面26人在聊
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务