面试题目及答案.docx
- 文档编号:3692533
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:11
- 大小:22.84KB
面试题目及答案.docx
《面试题目及答案.docx》由会员分享,可在线阅读,更多相关《面试题目及答案.docx(11页珍藏版)》请在冰豆网上搜索。
面试题目及答案
JAVA语言基础
1、Java有sizeof这种东西吗?
为什么没有?
【答案】没有,因为每种数据类型无论在什么机器上,大小都是一致的。
2、类成员有几种访问权限?
各是什么含义?
默认是什么权限?
【答案】四种:
package,public,private,protected,默认是package权限
3、类有几种访问权限?
各是什么含义?
public权限的类有什么要求?
【答案】两种:
包权限和public权限,一个文件只能有一个public权限的类,而且类名必须和文件名一致。
4、实现类的static方法的时候有什么限制?
为什么?
【答案】只能访问static变量和方法。
5、关键字:
final,finally,finalize都是用在什么地方的?
【答案】final表示不能改变的东西,finally是异常处理里面的必做内容,finalize是类的终结处理函数
6、为什么对String进行一些操作的时候,往往是使用StringBuilder或者StringBuffer?
【答案】为了减少内存占用,因为StringBuilder/StringBuffer进行字符串操作的时候,不产生新的String对象
7、java中的内存泄漏一般是由于什么情况导致的?
java内存一般分为几个部分,如何进行内存回收,如果判断一块内存可以回收?
java内存回收有哪几种方式,大约描述一下?
【答案】一般为全局变量的内存没有清空导致,或者ThreadLocal等保留的变量没有及时clear导致,回答的有道理即可;虚拟机内存分为方法区,堆,栈。
java虚拟机在内存不够用的时候会自动进行内存回收,在应用程序空闲时,也会进行回收,或者程序手工调用GC。
判断是否可以回收,最朴素的为引用计数的方法,但是无法解决循环引用的问题。
一般的虚拟机采用从根结点进行遍历的方式,判断一个引用是否可以回收。
能够回答到新生代,旧生代,以及对应的机制即可。
理解串行回收,并行回收,并发回收等的特点和区别即可。
8、Java的类有析构函数吗?
为什么没有?
finalize()函数在何时会被调用到?
为什么需要finalize()函数?
【答案】没有析构函数,因为有gc机制。
Finalize函数在要进行gc的时候会被调用到。
使用这个函数是因为要在finalize函数中作内存释放的工作,因为有的内存可能是通过jni分配的,需要清理掉。
9、一个比较复杂的类,创建对象的时候,按照什么顺序完成如下工作?
【答案】
A、调用父类构造函数
B、按照声明的顺序调用成员的初始化方法
C、调用本类的构造函数
10、List,Set,Queue有什么共性,各自有什么特点?
各举一个实现他们的具体类。
【答案】他们继承于collection接口,List是按照插入的顺序保存对象(ArrayList,LinkedList),Set不能有重复的元素(HashSet,TreeSet,LinkedHashSet),Queue按照先入先出的规则处理其中保存的对象(LinkedList,PriorityQueue)
11、迭代器的作用,如何获得一个容器类的迭代器?
【答案】迭代器可以使得用相同的方法遍历或者选择容器中的对象而不用关心容器的底层结构。
通过调用容器(collection类的容器)的iterator方法可以获得这个容器类的迭代器。
12、JAVA的线程调度机制是怎样的?
【答案】Java的线程机制是抢占式的,也就是虚拟机为每个系统都提供时间片,根据优先级的不同,分配的时间片也不同。
13、关键字synchronized修饰类的方法时的作用,synchronized起作用的内部机制是什么?
【答案】synchronized为防止资源冲突提供了内置的支持,如果一个任务处于一个标记为synchronized方法的调用中,那么在这个线程从这个方法返回之前,所有其他药调用类中任何标记synchronized方法的线程都会被阻塞。
实现的内部机制是因为所有对象都自动含有一个单一锁。
14、如何创建一个临界区?
【答案】
synchronized(某个对象)
{
...//临界区代码
}
C&C++语言基础
1、构造函数中的初始化列表有什么作用?
(5分)
【答案】有4个用途:
初始化const成员,初始化引用成员,调用基类的构造函数初始化基类,调用成员对象的构造函数初始化成员对象。
2、构造函数是否可以是虚函数,是否可以调用虚函数?
(5分)
【答案】构造函数不可以是虚函数,但是可以调用虚函数,但是其实调用的只是本类的版本,而不是子类的版本。
3、什么是“引用”?
申明和使用“引用”要注意哪些问题?
【答案】引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。
申明一个引用的时候,切记要对其进行初始化。
引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。
声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。
不能建立数组的引用。
4、static、const、volatile、typeof关键字的用途描述(附上,实践中的示例描述)
Static:
静态函数、静态变量、静态类成员
Const:
const变量,const指针、const函数
Volatile:
多线程共享变量
Typeof:
获取类型值
简单的概念描述,给一般分;可以结合具体应用,则较好;
5、malloc/free&new/delete的区别是什么?
i.编译时,New可以根据对象的类型,自动决定对象的大小;而malloc需要显式指定需要分配空间的大小。
ii.New返回指向正确类型的指针,不必进行强制类型转换;而malloc返回void*,必须进行强制类型转换,可能带来错误
iii.用new生成对象时,会调用构造函数,用malloc则不会;同样,用delete删除对象时,会调用析构函数,用free则不会.
iv.如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。
如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。
因此,new/delete必须配对使用,malloc/free也一样
6、Struct与class的区别是什么?
包括如下:
i.关于默认访问权限:
class中默认的成员访问权限是private的,而struct中则是public的。
关于继承方式:
class继承默认是private继承,而struct继承默认是public继承
7、指针和引用的区别是什么?
i.指针可以定义而不初始化,引用定义时必须初始化。
ii.指针初始化后还可以被重新赋值,引用初始化后不可以引用另外一个对象。
iii.指针可以自增自减来读写数据,如*(p++),引用不可以。
iv.没有NULL引用,必须确保引用是和一块合法的存储单元关联。
算法和程序设计
提交人
题目类型
v
题目1双数组求交
两个数组,元素为int数据,长度分别为A和B,每个数组内部无重复元素,无序。
求两个数组的交集。
可使用内存无限,要求给出时间复杂度
参考答案
方法很多样
1直接穷举,O(A*B)
2排序后归并O(Alog(A)+Blog(B)+A+B)
3排序后二分
4hash
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
1除了直接穷举外,能够想出1-2种方法
2能够正确给出时间复杂度
3能够给出方法优劣的评价
题目2快速排序
这是一套题目的3个子问题,难度依次递进:
问题1:
描述快排的基本思想并进行编码,以及一个典型的应用。
问题2:
快排可以应用在链表上么?
如果可以,请详细描述
问题3:
除了快排,还有其他的排序可以在链表上达到O(lnN)的复杂度么?
要求空间复杂度尽可能低。
如果有,请给出思想。
参考答案
解答1:
参考数据结构教材。
典型应用:
求第N大或者第N小的数。
解答2:
快排可以应用在链表上。
每次迭代需要两个指针,一个指向比pivot大的结点的链表,一个指向比pivot小的结点的链表,然后合并。
解答3:
还可以使用归并排序,逻辑比较复杂,需要考虑临时指针的使用,每个临时指针在过程中多次复用,否则会消耗大量的空间。
具体参考stl中list的排序算法。
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
问题一:
考察基本的数据结构
问题二:
考察变通能力。
教材上不会讲list上的快排
问题三:
考察思维扩展能力,list的归并排序需要考虑空间的占用,尤其如何合理使用临时指针。
面试至今,没见到过面试人能解决该问题。
提交人
题目类型
题目3最大子数组
给定一个长度为n的数组,求和最大的子数组;
得到答案后,可将数组扩展为n×n的二维矩阵,求和最大的子矩阵
参考答案
问题1是一个动态规划问题,求解算式是Ret(n)=max{Ret(n-1),以n-1结尾的最大值+V[n],V[n]}其中Ret(n-1)为以1开始的长度为n-1的数组中最大子数组和;
问题2是问题1的延续,只需把二维矩阵转换为一维数组,方法是a=1...n,c=a...n,遍历使用一维,把a..c的列加起来成了一维的了
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
1.对动态规划的理解和灵活使用;
2.具有较好分析和解决问题的能力
1.题目4判断重复元素
一个数组A[N],包含取值为[1,N]的元素,请判断是否有重复元素
参考答案
解法:
1、Sum(1…N)!
=sum(A[0],A[N-1])则重复
2、hash记数法
3、排序后再判重
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
逻辑思路,对时间和空间复杂度的分析
题目5:
数组调整
1.输入一个整数数组,调整数组中数组的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,要求时间复杂度为O(n)
参考答案
维护两个指针,第一个指针指向数组的第一个数字,只向后移动,第二个指针指向最后一个数字,只向前移动。
当第一个指针指向数字为偶数,且第二个指针指向数字为奇数时,交换数字,并移动两个指针。
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
对算法的理解,并非只想到简单机械的从头到尾遍历一个数组来实现一个目标。
题目6:
大数据处理
有一个100G的文件存放在分布式平台,每行有10列,如何得到按第3列排序的文件?
参考答案
1)以第三列为key进行map分发,所有数据分发到一个桶,利用框架的特点进行排序。
此方法可行,但一个reduce处理100G数据,效率极低。
2)以第三列为key进行map分发,按照key的大小分发到不同的桶,使得所有数据按桶号有序,而桶内的排序利用框架完成。
此方法速度快,但如果分桶不均,会变得很慢。
3)仍然使用b方法,但通过先验知识得到第三列的分布,从而据此均匀分桶。
分布的获得可以利用历史数据,也可以用当前数据,在排序前先进行一次map-reduce,得到分布。
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
1)是否理解map-reduce处理的整个过程。
2)是否能利用每个reduce的排序功能进行分布式排序。
3)是否理解partition的意义和重要性,并提出解决分桶不均的办法。
机器学习与数据挖掘(开放类型)
题目1用户建模
可以从哪些方面对用户建模,以便向用户推荐合适的广告?
需要哪些挖掘方法、数据源?
参考答案
比较开放,
想到的用户特征越多、挖掘/学习方法可操作性越强越好,
通过不断追问挖掘/学习方法细节了解其掌握程度
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
1问题分解思路
2常用挖掘/学习方法的掌握,如不同分类、聚类、关联、组合学习等方法
题目2关键字推荐算法
有A1~A1010个广告商,每人买了一组词。
第A11个广告商,自己也买了一组词。
如何给他推荐新的词?
广告商角度的信息:
广告商的行业,自我描述,网站,等等。
词角度的信息:
被谁买过,网民搜索的频率
参考答案
1.答出1-2种推荐算法为佳
2.能够利用上广告商维度的信息,利用相似的广告商喜欢相似的词
3.能够利用上该广告商自己的信息,即买了一些词后,它会更倾向买类似的词。
4.能够利用上网民的信息,在推荐时考虑到受网民的欢迎程度。
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
1.答出1-2种推荐算法为佳
2.能够利用上广告商维度的信息,利用相似的广告商喜欢相似的词
3.能够利用上该广告商自己的信息,即买了一些词后,它会更倾向买类似的词。
4.能够利用上网民的信息,在推荐时考虑到受网民的欢迎程度。
5.选用正确的机器学习算法
例如相似判断时采用KNN或者聚类,或者相似度度量,推荐时采用常用推荐算法和分类算法。
题目3svm算法考察
Svm(支持向量机)算法考察
1svm基本原理
2优势和劣势
3和kernelmethod的联系
4linear和kernelmethod的区别
参考答案
1.能够答出结构风险最小化和经验风险最小化,凸规划等svm原理部分。
2.小样本上的优势
3.能够答出为什么要做kernelprojection,有哪些kernel,效果有什么差异
4.能够答出linear和kernel的区别,性能上的优劣等等。
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
1原理部分,能够清晰的表述svm基本原理
2对kernelmethod有清楚认识
3对svm应用中的优劣点有理论认识,有尝试,有体会。
能给出改进和规避建议。
题目4如何识别B2B,B2C,C2C等广告类型
如何设计算法,识别B2B,B2C,C2C类广告,以及如何评估准确,召回。
参考答案
开放式问题,无固定答案
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
能提到一些常用的文本分类方法即可,如SVM,naïvebayes等
另外可能有一些其他方法,如人肉构造categorytermlist,利用搜索引擎摘要,甚至使用开源分类软件等。
。
。
总之考察其是否有涉及策略方面的学习经历。
题目5点击影响因素分析
对于搜索广告:
1.影响用户是否点击广告的因素有哪些
2.如何利用这些信息来改进广告展现提高收入
3.如何提高用户体验
参考答案
1.从广告属性、页面环境、用户状态等方面分析,考虑时间、地域等环境因素
2.考虑这些因素之间的组合关系,广告与页面的语义相关性,广告与用户兴趣相关性
3.与一次收入相关的是价格和点击率,利用历史展现点击信息进行点击率预估,通过优化(点击率*价格)来促使收益优化;
4.与一天收入相关的还有流量和预算,利用历史展现消费信息进行流量和预算估计,通过投放规划来促使全局收益优化
5.与用户体验相关的是点击率,优化用户体验可以提高点击率的权重,可以对排序方式进行变形
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
1.考察分类和归纳能力,
2.考察问题的抽象能力
3.能理解贪心和全局优化的区别
4.了解权重调整的一般方法
题目6点击率预估算法
对于网盟广告或搜索广告:
如何预估广告的点击率
参考答案
1.后验统计
2.Bayes方法
3.回归
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
1.首先得明确是谁的点击率:
p(click|ad,user,page/query,…)
2.算法方面主要看知识面和应用能力,有相关经验可以更细节考察
a)能提出至少一种方法
b)理解概率方法的一般假设和局限性
c)如果提出回归方法,则需能理解回归分析的主要步骤和应用场景,理解模型的参数估计方法和模型解释
d)如果提出逻辑斯蒂回归,则需能理解逻辑斯蒂回归与线性回归的差异
题目7
(1)假设我们现在可以拿到两天访问点评的ip,以及该ip访问的次数,怎么建立一个模型来描述哪些ip发生了比较剧烈的变化(可以理解为突增和突降)
(2)如果某一天,发现点评的访问量出现了比较强烈的上涨,通过什么样的数据分析可以定位找到原因
参考答案
(1)方法一:
设某个ip在两天访问量分别是x1,x2,可以利用(x2-x1)/x1来描述变化,需要注意的是x1=0的特殊处理。
方法二:
分段处理。
对于不同的区段,突增模型可以定义的不一样(就是解决x1比较小的时候,突增、突降的特殊处理的一个扩展)。
其中,区段突增函数的定义可以根据处于该区段的ip的变化对(x1,x2),构建模型得到(比如找boxplot图野值的方法)
(2)历史同期是否有该行为?
------可能是节日导致
是否有集中的ip访问?
--------可能是遭到攻击
是否有某些query带来了突增?
----------热门词现象(凤姐)
主要考察点(被面试人越能抓住这些点,则说明对题目把握越到位)
数学建模能力,数据分析能力
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面试 题目 答案