十道腾讯软件开发工程师面试题

Q

一、OSI模型有几层?

二、说说C++的多态?为什么使用虚函数比非虚函数耗费的时间更多?

三、有一个全局变量int a=0,现在两个线程各自循环执行100次a++操作,问最后a的值是多少?

四、对于海量数据,用什么数据结构存储用户搜索的高频关键词比较合适?比如,当用户输入“黄”字,输入框要自动显 示“黄晓明”,“黄蓉”,“黄山”,“黄鹤楼”等提示,但是能存储的量很有限,所以需要选择恰当的数据结构。(我先后说 了数组和堆,似乎都被否决了)

五、智力题:一片草地的草每天匀速地长,m只羊花p天能吃完,n只羊花q天能吃完,问现在k只羊花多少天能吃完?( 记不清m,p,n,q,k的具体数值了,总之是根据已有的两个条件列出二元一次方程组来求解)

六、手写快速排序程序。快排的复杂度是多少?给定1组数1,4,5,5,8,9,7,在快排过程中这两个5是否会被交换?

七、简述怎样用两个栈实现一个队列的功能?只需实现入队、出队。

八、你想打开电视看世界杯,结果发现电视黑屏完全没反应,应该怎么检测故障?

九、写一个函数判断一个字符串里的小括号、大括号是否匹配。例如,输入为”(){}”时输出为true,输入为“{(aa)}”时输出为true,输入为“({)}”时输出为false。

(我用一个栈来存储,对字符串从左往右扫描,遇到左括号就压进栈里,遇到右括号就判断是否跟栈顶元素匹配,如果不匹配就让整个函数直接返回false,如果匹配就取出栈顶元素。注意右括号始终不会进栈。扫描完后如果栈不为空就说明还有多余的左括号,返回false;否则返回true。)

十、如果AB*C=DE,DE+FG=HI,其中从A到I这9个字母代表9个不同的数字,求这9个数字分别是多少。

A

2

多态不说。
虚成员函数的位置和非虚成员函数的在在内存存放的位置不一样,虚函数在虚表,虚表多的话,寻找一个虚函数就需要遍历所有虚表,但是成员函数可以直接通过偏移而得到。

3

这是个 线程锁 的问题。答 200 你就坑了。

4

关键词 倒排索引

7

队列:先进先出
栈:后进先出

准备2个栈Sa,Sb, 数据 12345
下面来模拟队列的 12345顺序入队,12345顺序出队 效果:
12345-> Sa压栈: 12345
Sa出栈-> 54321
54321-> Sb压栈: 54321
Sb出栈-> 12345

8

看毛世界杯,今年欧洲杯

9

10

第一反应 排列组合 然后就是python了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#! usr/bin/env python
# coding: utf-8
import itertools

arr = list(itertools.permutations(range(1, 10), 7))

"""
nine numbers: 1,2,3,4,5,6,7,8,9

calc AB*C=DE,DE+FG=HI
"""



def func(nums):
a, b, c, h, i, f, g = nums
if (a * 10 + b) * c == (h * 10 + i) - (f * 10 + g):
de = (a * 10 + b) * c
d, e = int(str(de)[0]), int(str(de)[1])
if all([x not in nums for x in [d, e]]):
print("%s%s*%s=%s%s,%s%s+%s%s=%s%s" %
(a, b, c, d, e, d, e, f, g, h, i))
return True


for item in arr:
if func(item):
break

Vito wechat
欢迎关注我的公众号:VitoStackBlog。