ByteDance: Clinet Developer First Interview

字节跳动客户端开发一面

总体来说一面大部分都是基础问题,但是因为我很久没用C++了,所以手写代码的时候没用写出来,结果凉凉。

1. static关键字的作用

常见问题,但是有一点回答的时候还是不太确定。那就是static修饰的函数(静态函数)一般情况下只能被定义它的源文件所调用,因为其他文件找不到它的地址。但是,如果通过间接调用,也是可以强行调用这个静态函数,只要拿到这个函数的地址。以下有两种方法:

  • 通过函数指针拿到静态函数的地址,则可以调用该函数。
  • 或者直接在定义静态函数的.c文件中来定义一个非静态函数来调用这个静态函数,然后在main函数中调用这个非静态函数即可。

不过就我个人理解,static的本意即为了限制作用域,这样虽然可以强行在别的文件中(即非定义静态函数的源文件)调用静态函数,但是并不是符合函数最初设计的。另外,extern是不能作用在static上的

2. pointer VS. reference

Here

3. C++实现智能指针

4. 有一个随机数生成器能够生成[1-5]的随机数,问如何使用它产生[1-7]的随机数生成器?

  1. 先生成一个[1-5]的随机数a,然后a-=1即可得到一个[0-4]的随机数a~(0,1,2,3,4),在生成另一个[1-5]的随机数b~(1,2,3,4,5),所以可以得到一个[1-25]的随机数c=5*a+b。例如,a=1时则c可以是6,7,8,9,10。也即是通过此操作可以获得一个1-25的均匀随机数生成器,为了采样效率更高,可以将1,2,3映射为14,5,6映射为2… 依次类推。如果得到的数大于21,则重新生成即可。
  2. 用[1-5]的随机数生成器生成3个随机数a,b,c,其中1,2 -> 0, 4,5 -> 1, 3重置。用这三个数分别表示为一个二进制位,则a,b,c三个数可以表示为[1-8]的三个数(因为&&2^3=8&&)。例如,三次生成得到的随机数分别为a=1,b=1,c=1,则最终得到的随机数为7。

如果是[0-5]的随机数生成器,则需要先+1变成[1-6],然后在减1。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 gzrjzcx@qq.com

文章标题:ByteDance: Clinet Developer First Interview

文章字数:655

本文作者:Alex Zou

发布时间:2019-11-01, 11:06:19

最后更新:2024-07-10, 03:02:36

原始链接:https://www.hellscript.cc/2019/11/01/subposts_interview/ByteDance-Clinet-Developer-First-Interview/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

有钱的捧个钱场,没钱的借钱也捧个钱场