ByteDance: Clinet Developer First Interview
字节跳动客户端开发一面
总体来说一面大部分都是基础问题,但是因为我很久没用C++了,所以手写代码的时候没用写出来,结果凉凉。
1. static
关键字的作用
常见问题,但是有一点回答的时候还是不太确定。那就是static
修饰的函数(静态函数)一般情况下只能被定义它的源文件所调用,因为其他文件找不到它的地址。但是,如果通过间接调用,也是可以强行调用这个静态函数,只要拿到这个函数的地址。以下有两种方法:
- 通过函数指针拿到静态函数的地址,则可以调用该函数。
- 或者直接在定义静态函数的
.c
文件中来定义一个非静态函数来调用这个静态函数,然后在main
函数中调用这个非静态函数即可。
不过就我个人理解,static
的本意即为了限制作用域,这样虽然可以强行在别的文件中(即非定义静态函数的源文件)调用静态函数,但是并不是符合函数最初设计的。另外,extern
是不能作用在static
上的。
2. pointer
VS. reference
3. C++实现智能指针
4. 有一个随机数生成器能够生成[1-5]的随机数,问如何使用它产生[1-7]的随机数生成器?
- 先生成一个[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
映射为1
,4,5,6
映射为2
… 依次类推。如果得到的数大于21,则重新生成即可。 - 用[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" 转载请保留原文链接及作者。