面试总结

面试总结

.1 两道试题

  • 使用random7()来写出一个random10()
  • void print_all_prime_less_than(int n)

.1.1 random7

我的解法,想了大概9min左右,写出正确的伪代码,但不是最优(估测的,因为和面试官交流的总时长约46min)

1 因为random7要表达出10种随机数字,第一次我的想法就是
	做一次加法random7+random7 
	但是发现这样的随机结果并不符合 “伪均匀分布”
	也就是说得到的结果是2~14,13种结果不是等可能的

2 进一步我想到了7*7=49种 等可能
	然后我就想着random7*random7,想法很快
	但是发现结果并不如我所预料的那样是49种等可能
	这尼玛就让我很心急,然后就卡在这里了
	不过后来还是强硬的撸出来一种解法:random7*random7得到的结果中 
	2=1*2=2*1
	3=1*3=3*1
	5=1*5=5*1
	7=1*7=7*1
	...
	类似的数字满足的条件是:由1~7相乘得到
	且random7*random7得到此数的结果 的可能性是2/49
	类似的数字,当时粗略一数,超过了10个
	于是解法就出来了,10个等可能(概率为2/49)的随机数字映射到1-10就可以得到random10
	
	
	
------------------------------事后诸葛亮的分割线-----------------------------
3 得到等可能结果的方法  两种
	- 3.1 构造一个元组(random7,random7),想象成一个7*7的网格点
	- - 每个点都是1/49的等可能性,每4个映射1-10的一个数字,就可以得到 等可能性为4/49 的十个随机数字了
	- 3.2 元组构造起来可能会消耗时间空间一点,那么我们可以更进一步,构造一个7进制的2位数
	- - 7^1 数位上面 是 random7-1 记做A   ; 7^0 数位上面亦是  random7-1   记做B
	- - A*7+B 会从7进制的00,一直等可能遍历到7进制的66  (其实也就是3.1的49个网格点)
	- - 当然 ,为了便于处理7进制的00~66 我们是用10进制计算得到的
	- - - 所以也就是0~48,构造出49个等概率数字之后,后面就不多说了

具体实现,略

测试,略

.1.2 print_all_prime_num

我的解,想了7min左右,写出正确的伪代码,不清楚是不是最优

def is_prime(n):
	for i in range(n^0.5):  # 开平方的意义在于......自己体会,不想写那么多字
		i = i+2 #总不能让0和1去验证 能不能被n整除吧,肯定从2开始
		if (n%i == 0): #找着一个能整除的,那就不是质数
			return false 
	#如果这个循环跑完,没返回,那n就是质数
	return true
	
#随后再从2~n进行一次遍历,每个数字i 用一次 is_prime(i) 
#把所有的质数找出来,就完事儿了,总体时间复杂度n^1.5


#当场我自己的一个改进版本,把得到的质数,存在一个数组里面
#然后 每次呢就从这个 数组 和 range(n^0.5)取交集  的结果 来对n看是否整除
#这样能把n^0.5 的时间复杂度再度大大缩短成为  近乎 常数 的时间复杂度

# 从这个角度出发,我的实现方式几乎是已经达到O(n)
# 感觉可能已经接近最优了,后面有时间再去看下 更优的 解法

.2 C++一些其他特性 & 项目经历

  • 纯虚函数 多态的实现机制 -->当时没有回答的很好,关键字就是“虚函数表

  • C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数
    
      1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。  
      2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。  
      3:多态性是一个接口多种实现,是面向对象的核心,分为类的多态性和函数的多态性。  
      4:多态用虚函数来实现,结合动态绑定.  
      5:纯虚函数是虚函数再加上 = 0;  
      6:抽象类是指包括至少一个纯虚函数的类。
      
    纯虚函数:virtual void fun()=0;即抽象类!必须在子类实现这个函数
    
    # org_article = "https://www.cnblogs.com/alinh/p/9636352.html"
    
  • 项目经历 (要有条理的描述出来整体架构 和 自己所负责的部分)

  • # 再慢慢整理吧
    
  • 指针和引用的区别 (不只是说 引用 是 常指针 这么简单) -->以下内容都有待商榷,需要逐条核实理解

  • - ”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小
    - 指针和引用的自增(++)运算意义不一样
    - 如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏
    - 指针和引用作为函数参数进行传递时的区别
    - - 这个比较复杂,一下子也不太好记下来
    
  • C++为什么要搞那四种转化,这么麻烦?

  • # todo
    

.3 自己的情况

  • 毕业为啥不直接进it? --> 没能进去
  • 在武汉挺好的 干啥想着来深圳 房价贵 --> 闯一闯 , 深圳厉害的人多
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值