竞技世界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

拜拜。

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

全部评论

相关推荐

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
分享

创作者周榜

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