算法面试基本问题

一、Java

1.一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。
2.对象:对象是类的一个实例,有状态和行为。
3.类:类是一个模板,它描述一类对象的行为和状态。
4.方法:方法就是行为,一个类可以有很多方法。
5.实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
6.编写Java程序时,应注意以下几点:

  • 大小写敏感
  • 类名:每个单词的首字母应该大写
  • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
  • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。
  • 主方法入口:所有的Java 程序由public static void main(String []args)方法开始执行。
  • 在Java语言中,所有的变量在使用前必须声明
import java.io.*;  //导入包
final double PI = 3.1415926;  //final修饰常量
public class 类名{
成员/实例变量;
static 类变量;
public 返回类型 方法名(参数){
    局部变量;
    相关操作;
}
public static void main(string[] args){
    类名 对象=new 类名(“对象值”);//创建对象
    System.out.println(12+变量名+34); //输出语句
}
}

7.Char类型
(1)字符char ch = ‘a’;
(2)字符数组 char[] charArray={‘a’,’b’,’c’};
(3)创建对象char[] charArray = new char[];
(4)字符数组转字符串:toString()
8.String类型
(1)String类型不能改,String str = “hello world”;
(2)创建对象,String str = new String(charArray);
(3)字符串长度:str.length()
(4)字符串转字符数组:toCharArray()
(5)StringBuffer和StringBuilder:字符串可变,StringBuilder更快但线程不安全,用的多。

StringBuilder ss = new StringBuilder(“hello”); ss.append(“world”);//扩展
ss.replace(“world”,”word”);//替换

9.Array数组类型
(1)创建数组int[] array = new int[arraysize];array[0] = 1; array[1] = 2;
(2)创建数组并赋值 int[] array = {1,2,3,4,5};
(3)数组长度:array.length
(4)多维数组:String array[][] = new String[row][col];
10.输入Scanner

import java.util.Scanner;
Scanner sc = new Scanner(System.in); 
System.out.println("请输入你的姓名:"); 
String name = sc.nextLine(); 
System.out.println("请输入你的年龄:"); 
int age = sc.nextInt(); 
System.out.println("请输入你的工资:"); 
float salary = sc.nextFloat();

11.java虚拟机的内存如何划分的?类加载机制,类加载器,双亲委派模型?jvm调优做过没,-Xms和-Xmx分别指什么?堆,栈,永久区,GC?
答:主要划分为五个区域,方法区,本地方法栈,虚拟机栈,程序计数器,堆。大概就是这五个区域,一定要背下来。咱们的垃圾回收主要就是针对堆区来进行的,堆区又会被划分为新生代老年代
12.java的垃圾回收算法有哪些?垃圾回收器有哪些?不同的垃圾回收器有什么区别?对象什么时候进入老年代,什么时候进行FullGC?
答:垃圾回收算法有标记复制法,标记清除法 等。垃圾回收器最常被问的就是CMS和G1。scavage之类的回收器基本上不问。CMS在不同阶段使用串行或并发来做垃圾回收的,而且他和G1垃圾回收器有什么区别。
13.voliatile和synchonized有什么区别?synchonized和jdk提供的Lock包又有什么区别?volatile怎么保证可见性?synchronized和lock的区别,synchronized的底层实现?
synchronized和reentrantlock的区别。讲讲阻塞队列,volatile和synchronized为啥是非公平的
答:voliatile只能够保证可见性和有序性,不能保证原子性,synchonized是通过上锁来防治出现并发问题。jdk提供的Lock包相比于synchozied提供了更加多样化的锁机制。
14.HashMap的原理是什么?HashMap和HashTable的区别,HashMap怎么解决hash冲突,jdk1.8后对HashMap的改进?
hashmap也是一个被问烂的问题,但是我这里进行一些拓展。基本上面试官最常问的就是hashmap是如何实现的,这个网上一查就知道了。但是一些深入一点的东西,如果你能够讲的话,是会有加分的。例如hashmap如何实现动态扩容,hashmap并不是线程安全的,在哪些情况下会出现线程安全的问题?那么哪一个提供了线程安全的map?他的锁机制是如何实现的?(它的锁机制并不是简单地直接把函数给锁住,而是通过分段来治理的,还是很有意思的)
hashmap介绍先说了下自己知道JAVA的hash map的用法,python中dictionary也是用hash表实现的:首先利用hash()将key和value映射到一个地址,它通过把key和value映射到表中一个位置来访问记录,这种查询速度非常快,更新也快。而这个映射函数叫做哈希函数,存放值的数组叫做哈希表。 哈希函数的实现方式决定了哈希表的搜索效率。具体操作过程是:

  1. 数据添加:把key通过哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。
  2. 数据查询:再次使用哈希函数将key转换为对应的数组下标,并定位到数组的位置获取value。
    但是,对key进行hash的时候,不同的key可能hash出来的结果是一样的,尤其是数据量增多的时候,这个问题叫做哈希冲突。如果解决这种冲突情况呢?通常的做法有两种,一种是链接法,另一种是开放寻址法,Python选择后者。
    开放寻址法(open addressing):
    开放寻址法中,所有的元素都存放在散列表里,当产生哈希冲突时,通过一个探测函数计算出下一个候选位置,如果下一个获选位置还是有冲突,那么不断通过探测函数往下找,直到找个一个空槽来存放待插入元素

15.常用的设计模式有哪些?单例模式的实现方式?
答:这个地方你最少有说得出来单例模式、工厂模式、代理模式等,这些都是很常见的设计模式,而且这个问题也经常被问。
16.Spring的AOP、IOC作用是什么?如何实现的
答:Spring是一个java web的框架,面试官特别喜欢问。但是问spring基本上也只围绕着这几个点,第一个是AOP、IOC的作用是什么,这个问题查一下就知道了。第二个是AOP、IOC是通过什么实现的?AOP是通过代理模式来实现的,IOC是通过单例模式+工厂模式来实现的。问得比较多的是AOP的实现方式,你如果回答代理模式一般就够了。作为拓展,你可以回答里面用到了动态代理,动态代理有两种方式,一种是jdk提供的,一种是cglib。。。然后你和面试官比较一下两种动态代理的区别,我觉得也是会有加分的。
17.java的3大特性,java相关的数据结构,java对象,java的集合的继承关系,为什么不能多继承?抽象类和接口?容器
封装,继承,多态
18.java里set,Array和map等容器了解吗,它们的继承关系写一下。最顶层好像是是java.util.Collection和java.util.Map
19.String、StringBuffer、StringBuilder的区别,怎么理解String不变性
20.==和equals的区别,如果重写了equals()不重写hashCode()会发生什么
21.java和python的区别,对面向对象的理解,和面向过程相比有什么区别
22.java中为什么要写非static方法?java的序列化方式?
23.java实现多线程的方式?ConcurrentHashMap,ConcurrentHashMap怎么保证线程安全?HashTable怎么保证线程安全?HashSet的底层实现,是不是线程安全的?
24.ArrayList和LinkedList的区别
Java中的ArrayList是链表还是数组,为什么插入和删除可以O(1)
25.可重入锁的可重入性是什么意思,哪些是可重入锁
26.Java堆溢出问题怎么处理,内存泄漏和内存溢出的区别
27.什么是内部类,什么是匿名内部类
28.Java的NIO用得咋样
29.构造函数私有的情况,单例模式,protected和private的区别,final和finally的区别,java的Integer和int的区别,初始值都是啥?

二、C++

1.C++内存分配,堆和栈哪个快,指针引用区别,虚函数
2.结构体占多少字节
3.函数中的局部变量在内存中如何申请
4.C++的多态?如何实现多态?C++内部实现机制,指针与引用的区别
5.C11特性
6.STL中vector的低层实现(手写),resize函数、reserve函数?STL中插入的操作时间复杂度,要考虑内存复制扩充?
7.C为什么比C++快
8.set、map的查找复杂度、插入删除等
9.深拷贝,浅拷贝,写一个出来
10.智能指针的名字是啥
11.堆栈区别
12.new,malloc区别
13.纯虚函数怎么定义,用处,写一个出来
14.函数后面接const是什么意思
15.栈溢出有哪些情况
16.写一个函数指针
17.虚函数的好处?
18.静态成员,那么有什么特性?

三、PYTHON

1.python传参会改变原值吗
2.python是解释语言还是编译语言
3.xrange与range的区别,
4.Python range xrange 哪个是使用迭代器循环,哪个是先生成list再循环
5.python如何得到一个文件夹下的目录
6.python交换数字a,b
7.python对一个列表删除所有为0的数字
8.python怎么定义一个类的成员变量
9.python写一个函数,实现给定一个列表,把列表所有0移到列表最后面,其余相对顺序不变,要求时间o(n),空间o(1)
10.python写一个函数,实现有1T 的数据,10亿个不重复单词,给你一台机器,16G的内存和5T的内存,怎么统计每个单词的个数?
11.zip作用,说打包。numpy里面的list的引号是什么意思?
12.QT和python怎么结合?
13.Python 多进程
14.Python 锁

四、LINUX

1.了解Linux内核?
2.Linux命令
1)统计三个文件每行的加和,写入一个文件
3)查看某文件的大小
4)vim中怎么替换内容
5)如何找到Python的进程并杀死;
6)git常用指令,遇到冲突怎么办;
7)查看文件大小命令
8)查看文件多少行命令
9)如何后台起一个服务
10)grep命令
11)如何查看内存和cpu使用情况
3.Linux下有用C++编程吗
4.linux怎么删除一个进程?那么进程号怎么知道呢?(grep)
5.linux命令怎么查看硬盘太小?

五、操作系统

1.进程和线程的区别是什么?
答:进程是CPU分配资源的最小单元,线程是CPU调度的基本单元、一个进程可以包含多个线程等,能够理解为什么有些时候要使用线程不使用进程。因为进程启动的时候cpu需要给他分配资源,对系统压力比进程大,你可以把线程看成是轻量级的进程。
2.进程间通信的方式有什么?线程间通信的方式有什么?
答:进程间通讯可以通过socket,管道,信号,消息,共享内存等多种方式。线程间通信就比较简单了,直接共享变量也行,通过管道也行。
3.什么是缓存?有哪些缓存的更新算法?
答:缓存的更新算法用的最多的应该就是LRU。
4.多线程、多进程?python中怎么实现多线程、多进程的?python中的多线程是真的多线程吗?为什么多线程比较鸡肋?
5.线程有几种实现方式 ,解释了缺点和使用哪种更多,线程的局部变量,讲讲线程池参数?线程等待时位于哪个区域,具体讲一下?线程有哪些状态?代码实现一个线程池?为什么要用线程池,线程池的好处?
6.线程安全?
7.synchronized的底层实现
8.如果有两个进程,一个进程执行一半要求另一个进程终止,该如何操作
9.手写消费者生产者 wait notify实现
10.time_wait的两种原因?sleep和wait的区别,sleep会不会释放锁,notify和notifyAll的区别
11.什么情况会发生死锁,死锁的处理方法
12.Cookie和Session的区别,怎么防止Cookie欺骗

六、机器学习

1.线性回归和逻辑回归、传统机器学习算法
1)线性回归原理,处理步骤
2)Logistic回归能处理浮点数嘛
3)逻辑回归中sigmoid函数的好处?以及为什么用极大似然?
4)线性回归和逻辑回归的区别
5)softmax和logistic的关系,可以推导吗
6)怎么确定因变量与自变量间线性关系?
7)SVM和Logistic Regression对比

2.拟合问题、范数、方差、正则化
1)怎么避免过拟合情况
2)R方、T值对拟合的意义
3)如何发现过拟合
4)二范数有什么用,原理是什么,为什么可以防止过拟合
5)L1、L2范数,L1趋向于0,但L2不会,为什么?L1 L2范数的区别?
6)偏差、方差、距离度量公式
7)L1正则为何有稀疏性?正则化怎么选择,l1范数、l2范数;

3.缺失值、异常值、数据倾斜、数据处理
1)用的数据量是多少,数据集怎么划分的
2)做数据增强了吗,做完了数据怎么存放的
3)数据预处理怎么做的? 数据不均衡怎么处理?
4)数据量不足怎么解决、没有数据怎么办?数据争论怎么办?
5)超参数怎设置的
6)如果数据不好怎么办,数据不均衡怎么处理、只有少量带标签怎么处理
7)数据标注怎么做?
8)对数据预处理怎么填充的缺失值,
9)哪些判定为异常值
10)如何处理数据倾斜
11)对长拖尾分布的数据进行log处理的好处
12)项目里面从数据采集到最终的数据可视化,每个环节都有可能丢数据,怎么判断数据有没有丢,如果丢了如何定位到在哪一个环节丢的

4.特征选择
1)多项式组合特征对哪个模型中效果提升最大。
答:面试官说是Logistic回归里面提升最大,而且组合起来的两个特征也是想出来的,没什么理论支撑。
2)对特征含义的理解
3)传统特征有哪些(sift, surf, orb, haris),解释一下sift为何具有尺度和旋转不变性
4)对连续属性进行离散化有什么好处
5)特征维度是多少维度

5.AUC、ROC、recall、IOU
1)模型的评价指标AUC是如何计算的
2)ROC曲线的横纵坐标代表了什么含义
3)调参过程中recall达到了多少、
4)iou计算、k-means、dropout、iou和NMS怎么算,写代码?
5)精确率高、召回率低是为什么

6.LR、SVM、XGBoost模型、GBDT、boost、Adaboost
1)XGBoost模型里面参数有哪些,怎么调参的
2)XGBoost模型中对数据进行采样的好处?
3)介绍LR、SVM和XGBoost,这三个模型中哪个处理数据不平衡的Cover能力最强?
答:被面试官指出是XGBoost,号称能处理10:1的数据不平衡
4)SVM的核函数都有哪些?
5)阐述SVM原理,为何使用对偶性以及对偶性原理,SVM如何解决多分类,SVM与LR对比。
6)阐述GBDT、xgboost、lightGBM的异同,xgb的优势,lgb的优势,二者的并行如何实现
7)为什么用LR,不是0-1
8)LR手写代码
9)给你数据,进行性别分类,有:身高、体重、兴趣,注意有些特征连续,有些是离散的,怎么用LR来做
10)xgb和gbdt的区别

7.神经网络、激活函数、CNN、卷积、池化
1)CNN的原理和核心?讲一下CNN,每个层,及作用?
2)卷积如何进行、为何有效?
3)11卷积的作用?
4)卷积反向传播过程?反向传播求导,给了个例子链式求导,pool如何反向传播,反向传播过程中池化层怎么接受后面传过来的损失的
5)tensorflow\caffe怎么实现的知道么,Tensorflow中卷积操作是怎样实现
6)网络结构参数,损失函数怎么定义,假如网络不收敛,你会采取哪些措施
7)两个矩阵,2
3和33矩阵,拼成一个23的,tensorflow怎么操作
8)softmax loss,全连接的作用,GD、SGD、mini batch GD的区别
9)depth conv?计算一层的参数量、计算量?计算经过卷积操作后的feature map大小?卷积层参数量
10)dropout和batch normalization
11)如何用到CNN的?比如用CNN解决了一个原先算法无法解决的问题,还是说刚上来就用CNN?
12)激活函数sigmoid,优缺点?激活函数?权重初始化方法都有哪些?为什么不用sigmoid而用relu吗?做出了哪些改进?
13)梯度消失与梯度爆炸的产生原因,如何避免?
14)优化器有哪些,怎么演进的,平时怎么用,如何调参数
15)什么情况下可停止迭代

8.LSTM、GRU、RNN
1)梯度消失和梯度爆炸,LSTM中如何解决
2)选择了什么RNN网络,优化器是什么,效果怎么样,数据来源
3)LSTM、GRU、RNN的原理以及差别

9.resnet
1)resnet,mobilenet比较分析特点
2)resnet好处,resnet第二个版本做了哪些改进
3)VGG16和resnet152哪个参数量多
4)残差网络梯度怎样计算的,为什么这里梯度不会消失,推导一下

10.bn层
1)bn层详解,优点以及如何反向传播,怎么求导
2)BN的作用,有哪些BN算法,为什么能达到XX的效果
3)BN层的moving——mean怎么求得
4)BN层怎么计算
5)BN层,先加BN还是激活,有什么区别
6)解决Overfitting、regulation的方法:regulation,我才总结下了,大致主要聊了2点:
1)dropout,介绍dropout的概念啊,问了下train和test阶段的不一样过程细节
主要讲了下test把active function的输出都乘以P,这样就把train和test的输出期望都scale到了一个range,这样才是更加准确的
2)Batch Normalisation:BN,BN的原理,问什么好,好在哪里?
1.降低了样本之间的差异,scale到(0,1)
2,降低了层层之间的依赖,主要体现在前一层的输出是下一层的输入,那么我们把所有数据都scale到了(0,1)的distribution,那么降低了层层之间的依赖关系,从而使数据更加准确

11.优化算法:牛顿法,共轭梯度法,拟牛顿

12.inception
1)inception的结构画一下
2)inception里面多通路并列有什么作用
3)inception v1-v4的区别、改进
4)介绍一下momentum
5)inception网络,主要用来解决什么问题,如何减少参数量

13.分类、标签
1)给你一个场景超市,需要上万种物品目标定位检测、识别,需要细粒度分类,如何处理
2)如何划分一级标签、二级标签的?人工还是?
3)分类,既有河流,又有建筑,怎么做。多标签识别怎么做?
4)有个类别总是错分到其他类怎么办
5)1000个视频,无标签,怎么分类预测
6)数据中有20%的噪声,标签不准确,怎么解决这个问题?
eg.找对噪声不敏感的模型建模,or看predict的值,把接近cutoff值的图拿出去看看

14.问答题+情景题
1)你认为深度学习是最好的方法吗?那你觉得哪些时候不能使用深度学习
给你一个烤箱,你需要识别烤箱中的食材,怎么去做?
2)模型不好怎么办,效果不行,烤箱设备升级,照明、摄像头位置等提高,但是原有的模型准确率却下降了。怎么办
3)权重怎么设置,做了哪些改进,提升
4)各种数据的channel是指什么意思
5)如何评估模型
场景题,有很多正例,没有负例,然后有很多未标注数据,尽可能的从这些数据中寻找负例(我是从聚类、最近邻以及异常点检测的思路去想。one-class-svm应该也是可以的)。场景题回答的好是很关键的,其余的都可以背下来,但是只有这部分才会考你对算法的理解和对问题的处理方式。

15.anchor
1)anchor设置的意义?
2)anchor的正负样本比是多少

16.图像处理
1)霍夫变换、直方图
2)相似度衡量尺度
3)图像特征提取方式
4)人脸识别,如何输出标签
5)mat申请一个图像矩阵后怎么释放内存
6)图像旋转、旋转矩阵、像素点怎么填充
17.目标检测算法、切割字符
1)rcnn系列到yolo,yolo与ssd的区别
2)ssd如果做道路上汽车的检测应该怎么改进比较合适
3)如何切割字符,网络结构的选择
4)faster rcnn
5)ROI层是怎么实现的,怎么做的映射
6)求感受野
答:1.你知道感知野吗?什么作用?你知道卷积的作用吗?你用过池化层吗?有哪些?
当时一脸懵逼,感知野是神马啊?最后再次确认了感知野其实就是在多个kernel做卷积的时候的窗口区域,就是3个33等于1个77的感知大小。
卷积的作用是提取特征,前面的卷积提取类似于人眼能识别的初步特征,后面的卷积是能够提取更加不容易发现但是真实存在的特征。
Pooling 用过,max pooling, average pooling, global average pooling。再问这个两个分别有什么用?
max pooling我蠢到说提取最有特征的特征,其实就是最具有代表性的特征;average pooling提取的是比较general 的特征;global average pooling用来分类的,因为后面网络的加深,full connected layer参数太多了,不容易训练,为了快速准确得到结果,采用global average pooling,没有参数,但是得到的分类效果跟FC差不多。
7)边缘检测算法sobel算法,拉普拉斯算子、canny算子

17.传统的视觉算法
1)sift、orb、S3D
2)图像的特征提取有哪些算法,适用范围、优缺点吗?

18.PCA
1)SVD分解
2)二维平面,一堆散点,找一个条拟合的直线
3)二维平面,一堆散点,找分布函数

19.爬虫讲讲原理、深度学习模型、迁移学习、视频分类难点有哪些
20.HMM与CRF的原理,差别,是全局最优还是局部最优以及为什么。
21.你知道attention起源是用在哪里?pixel还是frame,是soft还是hard
22.那untrimmed和trimmed,你认为untrimmed的难点是什么?
23.监督信息是什么?无监督学习了解哪些?
24.action proposal?
25.小网络mobilenet、shuffleNet怎么实现
26.蒙哥特洛方法
27.GAN、DCGAN、opencv、pre train
28.BM25
29.如何构建倒排索引?如何加速查询,WAND算法细节?倒排索引的log时间合并?如何评价一次query,设计一个机器学习模型,如何设计这样的模型,如何提取feature,用什么模型 ?如何做查询补全 Trie?设计一个查询缓存?如何对倒排索引进行空间压缩,我先说了OptPForDelta?
30.如何选择最优分裂点,抽样,然后算
31.阐述word2vec的原理,为何使用哈弗曼树,如何构建哈夫曼,负采样的原理。
32.对于一个取值较多的类别变量在不能进行onehot的情况下如何使用
33.ID3树用什么指标选择特征
34. boosting和bagging在不同情况下的选用
35. DBSCAN原理和算法伪代码,与kmeans,OPTICS区别
36. EM算法推导,jensen不等式确定的下界
37. xgboost和lightgbm的区别和适用场景
38. DNN的梯度更新方式
39. apriori,KM算法,匈牙利算法,模拟退火,贪婪,蚁群对比,
40. xgb,rf,lr优缺点场景
41. 是否写过udf,问udaf,udtf区别和一些细节
42. 问推荐算法,fm,lr,embedding
43. 算法题,10亿个32位正整数,求不同值,只给1GB内存
44. 算法题: topK给出3种解法
推荐系统的大概步骤,解决冷启动
45. 用mapreduce实现10亿级以上数据的kmeans
46. rf和gbdt基分类器区别,里面的决策树分别长啥样,怎么剪枝
47. lightgbm优势,Wod2vec公式 ,FM公式 ,LR公式,softmax公式
48. 神经网络为啥用交叉熵。 交叉熵公式
49. 注意力公式,注意力模型的原理
50. 特征如何降维
51. 决策树有哪些选择最优划分节点的方法?有了信息增益为什么还提出了增益比?
52. 模型评价标准,RMSE\ROC\AUC等等
53. 决策树分类和回归时候有哪些区别
54. 介绍阿尔法狗的原理
55. 胶囊网络
56. 推荐算法
57. 分类模型评价标准有哪些?追问,AUC可以用于多分类模型么?
58. LR和SVM的区别,当聊到损失函数,问分别是什么?hinge损失函数里面的z是什么?
59. 决策树里面的分类树怎么选择划分属性,给了两个属性分布情况,问选择哪个?
60. 决策树做回归时候划分点怎么选择?
61. LSTM对于RNN的改进地方在哪?解决了RNN的什么问题?(梯度弥散)
62. 那么RNN的梯度爆炸怎么解决?
63. LSTM的结构,里面的遗忘门是一个数值还是向量?维度是多少?
64. 补充一个还有LSTM你用的优化方法是哪个,我说是Adam,他问还有哪些,我说SGD等等,他问GD和SGD的区别了
65. 解释一下AUC(ROC的面积),从概率上面的解释一下?
66. 解释一下交叉熵
67. 解释一下模型训练里面的偏差和方差对于训练的意义?
68. 用了gcc没?
69. bagging和boosting的区别
70. 手推逻辑回归
71. 场景分析题,如何对新闻进行实效性分析,怎么挖特征
72. lstm.每个门的公式还会写吗?
73. 特征选择,特征工程,随机森林是怎样重要筛选特征
74. RF/XGboost/GBDT区别,树模型如何处理缺失值和连续值,模型融合stacking
75. 用过什么聚类算法, 什么时候需要用聚类?
76. 神经网络了解过吗, 讲一下权值共享
77. 生成式模型与判别式模型的区别?
78. 贝叶斯是什么?
79. bn为什么能加快收敛速度。bn解决了什么问题?bn是怎么计算的?基于什么计算的?训练和测试的时候有什么不同?测试时候的均值和方差是怎么来的?
80. 池化层的作用?池化层反向传播的时候是怎么计算的?
81. 神经网络不断发展的趋势是什么?向着什么方向发展?
82. 正则化有哪些方法?
83. 为什么输入网络之前数据要做归一化?
84. 如何加快收敛速度。
85. SVM为什么能够求解对偶问题,求解对偶问题为什么和原问题一样?为什么要求解对偶问题?svm的公式是什么?如果线性不可分怎么办?
86. kkt条件具体是什么?
87. 极大似然函数和极大后验函数是啥?
88. relu有什么缺点。
89. 具体解释adam,二阶矩是什么?为什么要用二阶矩?
90. 凸函数是什么,有什么良好的性质?极值是什么?
91. k个独立高斯同分布随机变量的结果是?
92. 推导softmax的梯度,和tanh的梯度(求导~)
93. 特征与模型的相关性如何计算与表示;
94. 深度学习特征的hash搜索算法时间复杂度;
95. lightgbm的特性以及学习函数;
96. Adaboost学习策略;
97. 决策树种类以及分裂方式;
98. RF与lightgbm的区别;
99. precision和recall的定义和公式;
100. 不平衡数据集的适用指标有哪些;
101. AUC、ROC的定义、实际意义、画法; 画ROC曲线,依照曲线上某点解释意义;
102. 除了修改mercy,还可以用哪些方法来处理不平衡数据集;
103. 写贝叶斯公式,解释先验、似然、后验;
104. 写vc dimension的公式,解释其意义、作用;
105. 简单介绍神经网络和CNN,介绍一下CNN对NN的改进之处;
106. 介绍inception、VGG、Resnet;
107. 为什么VGG要使用小的kernel代替大kernel;
108. 支持向量机SVM:在整体框架上,首先要知道SVM的学习策略是间隔最大化,可形式化为一个凸二次规划,等价于正则化的hinge损失函数的最小化问题,最后通过SMO方法解决接下来可根据李航的统计学习方法或者周志华的机器学习的SVM章节从头开始回忆细节。可根据以下问题串联算法原理细节。
109. 函数间隔和几何间隔的区别? 分类超平面可表示为wx+b,y为分类类别(1/-1),其中函数间隔(function margin)为y(wx+b),可代表距离超平面的远近即为对样本分类的确信程度。此时会显易见想到如果成比例改变w,b,虽然没有改变分离超平面但是会增加函数间隔,所以需要对分离超平面进行规范化即除以||w||,得到几何间隔。
110. 怎么得到svm目标函数?基本思想为相近样本点使其最大间隔化,这样确保距离超平面很近的点能有足够大的区分度。即为最大化样本(xi,yi)之间的最小几何间隔。实际上以上思想是对数据结构化分布做了描述。
111. 什么是kkt条件? 什么是支持向量? 将含由不等式的约束问题通过拉格朗日法得到了无约束问题,此时得到了KKT条件,通俗来将有以下几个条件
(1)拉格朗日式L对各个参数求导为0
(2)等式约束f(xi)为0
(3)拉格朗日系数alpha>=0
(4) 拉格朗日系数alpha 与不等式约束式子g(xi)的乘积=0
可由以上可的,当alpha>0 时,g(xi) =0即其解x向量就是支持向量这里同时说明支持向量机只依赖于alpha>0的样本点,其他样本点对其没有影响,说明支持向量对噪音不敏感
4、 什么是松弛变量?
所有训练样本并不是线性可分的,意味着不能满足函数间隔 大于等于1。为了提高容错率使得函数间隔加上松弛变量 sigm且sigm>=0 。对于每个松弛变量需要支付代价,则改变目标函数+C sum(sigm),其中C为惩罚系数,C越大表示误分类的个数越少。
5、 为什么推到成对偶形式?
(1) 对偶问题更容易求解
(2) 能够自然的引入核函数,进而推广到非线性问题
6、核函数的作用是什么?有哪些核函数?如何选择核函数?
(1) 什么是核函数?
特征函数为将欧式空间映射到希尔伯特征空间, 核函数K(x,z)就为特征函数的内积。
核技巧为只定义核函数K(x,z),不定义映射函数, 通过核函数直接计算映射函数的内积。
2 核函数的作用?
将低维的欧式空间映射到高唯特征空间,将线性不可分在高维特征空间中变得线性可分,在svm中拉格朗日对偶问题中的内积xixj 可以用核函数代替 。核函数可将两组数据映射为核空间内的两个点,看两个点之间的距离判断是否为同一分布。
3 有哪些核函数?
1)高斯核函数RBF: 其嵌入空间(embedding space)非常丰富,使得原空间的不同分布能够映射到不同的点.
核函数能将连续函数空间填满的kernel叫做general kernel.
2)多项式核函数:多项式函数不是general kernel. 因为更高阶的多项式不能由低阶多项式的线性组合构成
3)字符串核函数(string kernel function):核函数不仅定义在欧式空间,还定义在离散数据集合. 字符串核函数是定义在字符串集合上的核函数
7、 模型的优缺点?
优点:
1 、基于结构风险最小化原则,正则化的合页损失函数(当样本被正确分类且函数间隔(确性度)>1 的时候损失
数为0,否则损失函数为1-y(wx+b)),有更好的泛化能力
2 、在对偶问题上可以使用核技巧,避免了高维空间的复杂映射
3 、SVM问题是凸二次规划函数,可以求得全局最优解
缺点 1 、有较大的空间消耗,主要是储存训练样本与核函数,适用于训练小样本
· 逻辑回归 LR
1、为什么可以用(要用)sigmoid 函数?
(1) 为什么可以用: Sigmoid函数定义了逻辑回归的条件概率,<w,x>的内积代表数据属于正类(y=1)的确信度。<w,x>越大则x属于正类的确信度越大。由于建模需求,需要将<w,x>从整个实数空间映射到条件概率P(y=1|w,x),Sigmoid 函数单调递增能反映确信度,并且能够将实数空间(-无穷,+无穷)映射到(0,1)区间内,能表示概率意义,更加直观。
(2) 为什么要用:指数分布具有最大熵的性质,即在满足前提假设下的分布,分布越均匀越好.在逻辑回归中认为P(Y|x)服从伯努利二分布,并且P(y|x)=f(wx),可根据最大熵的性质推出sigmoid函数。
2、 逻辑回归对于多分类怎么做?
P(y=k|x)的概率分布,等价于softmax,计算在哪类的概率值高。
3、逻辑回归能否解决非线性分类?
(1)非线性超平面可通过变换替换,使得超平面关于新变量线性。
(2)逻辑回归不是wx+b这样的形式,需要变换为有内积的对偶形式,再利用核技巧。但LR对偶形式系数不稀疏,但是svm对偶形式系数是稀疏的,所以当线性可分会选择svm
4、逻辑回归有哪些应用场景?
在特征很多的场景,比如上亿
· 决策树
1、 如何生成决策树?
决策树思想:表示给定特征条件下的条件概率分布,分类即将该节点分到条件概率大的一边,决策树是一个递归选择最优特征的过程,特征将训练机划分成子集,在当前条件下该状态是最好的分类 1)若子集能被正确分类,则构造叶节点 2)若自己没有完全被正确分类,则对自己选择新的最有特征(递归过程) 终止条件:直到所有训练子集能被正确分类
2、 决策树属性选择的方法?
1)信息增益
2) 信息增益比
3、什么是ID3 ID4.5 CART?
特征分裂准则:信息增益(熵H(Y)-条件熵H(Y|X) :即已知特征X后Y的信息量减少的程度
ID4.5:由于信息增益选择取值较多的特征问题,使用信息增益比进行矫正
CART分类回归树,回归树特征选择标准为最小化平方误差,分类树则为吉尼系数,吉尼系数越大不确定性久越大。
4、 决策树如何后减枝?
损失函数为C(T)+a|T| ,其中C(T)是训练数据的预测误差,|T|为叶子结点的个数,a为权衡模型复杂度的系数。
对树任意内部节点,计算以t为单节点的损失函数 与 t为根节点的损失函数,并且由此计算减枝后整体损失函数减少程度。
5、 决策树的优缺点?
缺点:(1)噪音对决策树生成影响很大,我们所希望的分类器对噪音是健壮的。( 2)决策树是基于贪婪算法,难以找到全局最优
优点:(1)对数据类型和缺失值,离群点鲁 (2)可解释性很强,抽取分类规则路径
6、决策树的适用场景
中小型数据集,适合小特征量。若特征量过多则可能被剪枝。
· 决策树集成算法
1、 什么是adaboost?
Adaboost是提升方法的一种特例,其算法主要思想为:
(1) 、一个弱分类器在每一轮训练过程中改变数据的权值分布,即提高前一轮被分类器分错类的样本的权值
(2)、将多个弱分类器组合成一个强分类器,即加大分类误差小的弱分类器的权值
算法模型为加法模型,不能直接用SGD优化方法更新权重,故用前向分步算法更新权重。
2、 什么是GBDT?
重点是新的模型是在之前模型的残差往梯度方向走
3、什么是xgboost?
(1) 为什么xgboost是对误差进行建模?
xgboost是集成学习boosting框架下的学习算法,因为特征空间是用分段函数去逼近的,所以采用additive training去学习我们的模型。additive training 是第t轮的模型预测=第t-1轮的模型预测+新的函数f(t),新的函数就是我们所学习的,其中q为叶子索引代表树的结构,w为叶子结点的权重,所以新函数为特定的叶子结点的权重
(2) 如何学习新函数
通过最小化目标函数得出新函数,目标函数是基于结构风险最小化原则,目标函数=误差拟合+模型复杂度
对误差拟合函数二阶泰勒展开,对模型复杂度包含(叶子结点数 和 叶子结点权重)
最后通过对目标函数求导 得到最优权重(该权重与一阶与二阶信息有关) 以及 已知权重下的目标函数(打分函数)
(3) 如何生成xgboost?
选取最优特征,在最优特征下寻找最佳属性分割点,评判标准为类似于吉尼系数形式,递归生成树
(4)xgboost有哪些参数?
-学习率 eta :学习率越小,迭代次数越多。
-最小孩子权重 min-child-weight:控制叶子结点中二阶导数和的最小值,即样本的数量越少(由于h大约均在0.01附近),越容易过拟合
-最大深度 max_depth
-最大叶子结点数 max_leaf_node
-后剪枝参数gamma
-L2参数lambda
-L1参数alpha (控制模型复杂度)
-样本随机采样 subsample;列采样比例 colsample_bytree
(5)xgboost 有哪些优点?
-树节点分裂方法,利用近似算法,二阶导数为权重值的分位数作为切分点
-自动学习特征缺失值的方向
-列抽样(借鉴随机森林),行抽样
-学习率(eta)的shrinkage,增加迭代次数
-自定义损失函数
-特征预排序
(6)xgboost和gbdt的区别?
1)GBDT是以CART作为基分类器,xgboost支持线性分类器,其中线性分类器的xgboost相当于正则化的逻辑回归(分类问题)或
线性回归(回归问题)
2)GBDT的目标函数含有一阶信息,xgboost的目标函数含有二阶信息,最小化目标函数可得关于函数空间f(t)的梯度迭代或牛顿迭代,
牛顿法能更快的收敛。同时xgboost加入了正则项,控制了模型的复杂度。
(7) Lightgbm对xgboost有哪些改进?
-Histgram算法 将浮点型数值离散为K个,统计离散值的累积量,遍历直方图找最优特征分裂点
-直方图加速:叶子结点的直方图可由父亲结点的直方图与兄弟结点的直方图做差得到
-leave wise 选取信息增益最大的叶子结点继续分裂(容易过拟合,利用max_depth参数控制)
· 深度学习
(1) 什么是卷积网络?什么是vgg16-19 ?
vgg16有同样大小卷积核3
3和2*2池化层,最后三层为全连结,全连结耗参数,卷积耗时间,在每次卷积后均有Relu激活函数进行非线性映射。
(2) 为什么多次小核要好于一次大核?
增强非线性映射
(3) 什么是ResNet?
神经网络存在退化现象(degradation),即会随着深度增加达到饱和后,再持续增加深度准确率下降(测试集和训练集准确率均下降,故不是过拟合).
为了解决这个问题,引入了残差但愿,一个残差单元学习的目标为输入和输出的差别H(x)-x,而不是完整的输入H(x)
分布式
1.Hadoop
1)原理、搭建hadoop集群的规模,进行过哪些操作
2)Hadoop 1x Hadoop2x
3)hadoop的序列化方式,Avro,parquet,transient关键字
2.HBase
1)HBase的优势,为什么使用了HBase、设计rowkey?
2)wal是干啥用的,为啥要有这个东西存在,cap理论
3)hbase为什么查询速度快
4)hive sql怎么转换成底层的MapReduce程序,以及shuffle的过程
5)region是怎么回事,怎么划分的,怎么定位的,写操作是怎么样的,什么情况下会刷写?HBase region切分后数据是怎么分的?
6)为什么项目选用hbase
7)Hbase读写流程,数据compact流程
3.HDFS
1)HDFS写数据过程介绍
2)hdfs文件上传流程
3)hdfs的容错机制
4)client和HDFS文件的读写过程,延迟太高,怎么解决
5)这个就要了解的详细点,是怎么存数据的,怎么对数据分块的,怎么读取数据的,都有什么控制的节点,各自都是做什么用的等等。断电的话怎么办,哪些数据丢失
6)Hdfs读写流程,数据checkpoint流程
4.Hive
1)改造hive表后怎么进行数据一致性校验的,有没有自动化流程
2)怎么解决hive数据倾斜问题,混洗是干啥的,如何解决数据倾斜
3)Hivesql怎么转化为MapReduce任务
5.MapReduce
1)MapReduce的过程,map,shuffle,reduce这些
2)map阶段运行特别慢怎么办
3)分片怎么读的,为什么用快排,换别的行不行,多路归并怎么实现的,环形缓冲区怎么实现的。
6.yarn
1)yarn的结构、抢占
2)yarn的状态机和epoll
3)yarn的公平调度器和容量调度器和FIFO
4)yarn在什么层面调度,和k8s和mesos有什么区别
5)yarn里面机器崩了,怎么让任务接着算
7.Spark
1)spark架构、程序的运行流程、调优
2)mysql、spark中的join原理。
3)spark中几种partitioner、水塘抽样?
4)spark工作机制,哪些角色,作用
5)spark yarn模式下的cluster模式和client模式有什么区别
6)一个application提交运行的过程,画图?介绍Spark,client提交application后,接下来的流程,driver,yarn怎么通讯
7)spark怎么划分stage,rdd的宽依赖和窄依赖,spark的调度过程,TaskScheduler如何调度任务的?task资源分配、任务调度、master计算资源分配?spark rdd、dataframe、dataset区别 ?spark里面有哪些参数可以设置,有什么用
8)Spark的shuffle是什么样的,怎么优化的。
9)Hadoop的MR和Spark有什么区别,为什么Spark有优势?两者的代码风格?
Sparkshuffle和hadoopshuffle原理、对比?
10)手写word count
11)RDD的懒加载怎么回事,RDD怎么更新,RDD都有什么操作,区别是?
12)groupbykey,reducebyke有什么区别。
13)分区的算法,池塘抽样等。
14)Spark standalone模型、yarn架构模型(画出来架构图)
15)Spark算子(map、flatmap、reducebykey和reduce、groupbykey和reducebykey、join、distinct)原理
16)Sparksql自定义函数、怎么创建dateframe
17)Sparkstreaming项目多久一个批次数据
18)hashpartitioner与rangePartitioner的实现
8.hashMap和hashTable
1)介绍hashMap 和hashTable,有什么区别
2)Hashmap 扩容
3)hashmap的底层和hashmap怎么解决hash冲突
9.Zookeeper
1)Zookeeper 实现了cap的哪些
2)zookeeper怎么保证原子性,怎么实现分布式锁
3)原理、如何保证一致性的
4)zk是如何判断session超时,connection超时的。如何触发回调。
5)zookeeper是如何选举新的Active Namenode
6)Zookeeper脑裂问题,HA中的选举过程,如何防止脑裂,为什么需要fencing,SSH连不上怎么办?
10.Kafka源码
1)kafka broker的源码里面的类,以及这个类的主要方法,用的什么设计模式
2)数据接入的时候,怎么往kafka topic里面发的,用的什么方式,起了几个线程,producer是线程安全的吗
3)kafka集群有几台机器,怎么确定你们项目需要用几台机器,有评估过吗,吞吐量测过吗
4)spark streaming是怎么跟kafka交互的,spark streaming从kafka中读数据的两种方式,具体代码怎么写的,程序执行流程是怎样的,这个过程中怎么确保数据不丢
5)kafka监控是怎么做的,kafka中能彻底删除数据吗,怎么做的
6)kafka如何保证高吞吐的,了不了解kafka零拷贝,具体怎么做的
7)Kafka复制机制、分区多副本机制
8)kafka存储模型与网络模型
11.实时计算
1)时序数据库opentsdb,跟其它的时序数据库对比过
2)为什么用kafka stream做实时计算,而不是用spark或者flink,kafka sql和spark sql了解过吗
12.海量数据的Count问题(单机),如果把大文件hash成不同的小文件,此时小文件装不下某个key对应的数据,该怎么办
13.内存调度是什么怎么调度的,如果考虑CPU怎么调度的。如何实现隔离的,Control group 和Namespace是怎么回事
14.通信
1)RM和NM的交互,如何分配任务的
2)客户端和NN的通信过程,和DN的通信过程
15.大CPU大内存,网卡超烂,如何优化? 强制本地化,选高压缩的序列化格式,核心就是尽量减少网络IO。
16.一个加载在内存里的HashMap,Key和Value全是int,从硬盘读进来只做查询不做修改,不考虑查询效率,尽可能提高空间效率,稍微考虑一下时间效率。
17.checkpoint的过程?各种分布式计算框架的区别 ?flink?storm如何处理反压,如何保证流的可靠性的?
18.大数据算法
1)10亿个int查重,讲思路,布隆过滤,mapreduce,bitmap,算法的复杂度说说
2)在一个不断产生的流式数据中,如何保证每次取到的数据尽可能的随机。
3)topk问题 :100个数,如何打乱,要求最乱。
计算机网络
1.计算机网络分层—ISO/OSI模型和TCP/IP协议簇模型

应用层 提供OSI用户接口和服务
表示层 为应用层进程提供格式化的表示和转换数据服务。数据的压缩,解压缩,加密和解密等
会话层 管理不同主机上各进程间的对话
1)会话管理:允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。半双工、单工、全双工2)会话流量控制:提供流量控制和交叉会话功能。
3)寻址:使用远程地址建立会话连接。域名地址
4)出错控制:从逻辑上讲,会话层主要负责数据交换的建立、保持和终止,但实际的工作却是接收来自传输层的数据,并负责纠错。会话控制和远程过程调用均属于这一层的功能。但应注意,此层检查的错误不是通信介质的错误,而是磁盘空间、打印机缺纸等高级类的错误。
传输层 向用户提供可靠的、端到端的差错和流量控制,保证报文的正确传输。
1)传输连接管理:提供建立、连接和拆除传输连接的功能。提供“面向连接”和“面向无连接”两种服务
2)处理传输差错:提供可靠的“面向连接”和不可靠的“面向无连接”的数据传输服务、差错控制和流量控制。
3)监控服务质量
网络层 将数据分成一定长度的分组,将分组穿过通信子网,从信源选择路径后传到信宿。路由选择、拥塞控制。
1)寻址:MAC地址转IP地址
2)交换:规定不同的交换方式。常见的交换技术有:线路交换技术和存储转发技术,后者包括报文转发技术和分组转发技术。
3)路由选择
4)源节点到目的节点间流量控制,从而进行拥塞控制,差错检测
数据链路层 将数据分成一个个数据帧,以数据帧为单位传输。有应有答,遇错重发。

物理层

4.TCP连接需要几次握手?几次分手?为什么两次握手不行
TCP连接需要三次握手,四次分手。这两个数字是一定一定要记住的。
背后为什么要三次握手,为什么要四次分手,你可以去了解一下,如果能够和面试官说出来会有加分,面试官不一定会问。

5.当你输入域名访问一个网站的时候,背后的过程是什么?
这个问题是比较开放的。
第一步就是域名解析,域名解析的话你可以说一下域名缓存在哪些地方,然后如果你域名在本地没有缓存的话,是如何通过DNS来进行域名解析的,如果你的DNS服务器上没有保存那个域名,那你的DNS服务器将如何处理来得到这个域名的ip。
第二步就是说一下TCP连接的三次握手的过程。
其他拓展内容有很多可以说,看你知识储备。例如你可以说通过CDN来进行访问加速。也可以说目前网站基本上都是前后端分离的,访问的时候会先访问反向代理服务器进行负载均衡之类的

6.什么是https协议?https协议用到了哪种密钥?
https是在http上面套了一层ssl,用来实现安全连接。
用到的密钥有对称密钥和非对称密钥。目前基本上大一点的网站,都会使用https,这里面涉及的知识点也不是很多,但是过程相对来说会复杂一点,感兴趣的话可以去看一下。
基本上就是有数字证书,然后把对称密钥作为消息内容,通过非对称密钥来进行传输。之后双方的通信就通过对称密钥来进行解密就行了。
7.什么是socket?
socket是用来进行网络通信的,java里面已经有封装好这个类了,分为客户端和服务器,通过ip+端口来进行访问。
如果没有用过socket的话,建议你到网上找一个demo,跟着写一下,你基本上就知道socket怎么用了,算是比较简单的。

8.什么是IO,什么是NIO,什么是AIO,什么是netty框架?
如果我上面那个问题,你自己有到网上找一个例子去写一下,你就会发现在socket在读取消息的时候阻塞的。
这里有一个概念,阻塞。如果你不知道什么是阻塞函数的话,需要去了解一下。
NIO就是非阻塞IO,用来解决上面读取消息的时候会阻塞的问题。在jdk1.4左右引入的,是通过selector、buffer、通道等组件来实现的,具体实现原理我觉得还是需要有所了解的。
AIO就是异步非阻塞IO。咱们上面说的NIO是同步阻塞IO。AIO是异步的,NIO是同步的。同步和异步是什么区别我有点讲不清楚,如果这个你不懂自己去查一下资料。异步基本上就是通过回调来实现的。AIO是在jdk1.7左右引入的,面试官问AIO一般也会问得比较少。
netty是用来实现非阻塞IO的一个框架,这个作为拓展点,感兴趣可以去了解一下。我在面试阿里的时候被问到过,其他公司还没问过。
9.虚拟内存,底层如何实现
10.对UDF的理解,写UDF的目的,代码怎么写的
数据结构
左神讲解、剑指offer和leetcode
算法题中的重点应该是动态规划,主要是因为动态规划如果你能够找得到状态转移方程的话,那么代码行数会比较少的。
最简单的就是各种排序,难一点就是各种剑指offer的类型题,跟深入一些的话,动态规划,消费者生产者模式,手写一个线程池等等
1.数组和链表
1)什么时候适合插入,什么时候适合查找,为什么?插入和删除用链表还是数组?
2)从求组中找出唯一出现一次得数
3)如何最快的在循环有序数组中查找某个值
4)有一个数组,
(1)其中有一个数出现次数超过半数,找到这个数?
(2)其中有两个数出现次数都超过了30%,找到这两个数?
5)链表反转,链表排序
6)最大和子数组
7)二维数组中的查找
8)链表中环的入口,链表找公共节点,链表找环
9)求数组中连续子数组的最大和
10)两个数组,找全局中间数那个
11)最大连续子数组
12)数组有序,但是循环右移了几位,问新数组中原数组起始位子的下标是多少
13)给数组,找到加起来是100的一组数
14)数组n个正整数,每个数值不超过n-1,有一个重复的数,找出那个重复的数
15)有一个数target,一个数组,数组中两个数的和是这个target,请找到这两个数
16)给定一个单链表,一个数x,然后你把这个单链表改成前面是比x小,后面是大于等于x的顺序,然后每个部分仍然保持原来链表的顺序
17)单链表判断是否有环,以及判断环入口
18)二维有序数组的二分查找某个数
19)合并两个无序链表成为有序链表
20)找相交链表的交点
21)两个有序数组,求其中位数,然后改进时间复杂度
22)有序数组的二分查找(重复数字返回第一个)
23)两条链表求第一个公共节点
24)数组的全排列
25)在一个有序数组中查找一个数,怎么最快:二分法 O(logn)
26)在一个无序数组中查找第k大的数字,怎么最快
2.树
1)树的先序遍历,中序遍历,后序遍历
2)二叉树,二叉搜索树,二叉平衡树,红黑树
3)如何判断一个树是否符合查找树的规则
4)二叉树前/中/后序遍历的非递归,二叉树的层次遍历
5)二叉树的最大高度,递归/非递归
6)求二叉树的深度
7)广度优先可以用来求二叉树的深度嘛?
8)找一棵二叉搜索树里面给定两个节点的公共祖先
9)二叉树相加,是否子结构
10)判断一个二叉树是否为二叉搜索树。优化空间
11)给一个二叉搜索树,和一个区间,删掉不在区间内的节点
12)找到二叉树每一层的最大值
3.图
1)图的广度优先搜索算法,深度优先搜索算法。
2)图的最短路径问题
4.矩阵
1)二维矩阵相乘
2)二维矩阵,行、列皆有序,用O(M+N)查找一个数是否存在
3)求二位矩阵中连通1的最大区域
4)矩阵左上走到右下最短路径多少种,如果中间有路障呢
5)矩阵找数 剑指offer原题
5.集合
1)如何最快的找出两个集合中的交集,提出用哈希表的方法,问了这种方法的复杂度,然后又问如果这两个集合都特别大,不能再内存中构建哈希表该如何做?
6.队列/栈
1)用队列实现栈的功能
2)两个栈实现一个队列(剑指原题)
3)如何实现一个栈,支持动态扩充
4)如何用链表实现一个栈,
5)如何实现一个栈,O(1)获取最小值,get_min
6)堆和栈的访问哪个更快
7.字符串
1)字符串中第一个只出现一次的字符
2)输出字符串中字符的所有排列
3)输入两个字符串,输出它们合并排序后的结果
4)n位字符串,循环右移m位,要求时间复杂度线性,空间复杂度为o(n)
5)反转字符串
6)字符串转数字
8.排序问题和查找问题
1)归并排序—小顶堆
2)二分查找
3)快排的时间复杂度和空间复杂度,最优情况和最差情况分别是多少,是稳定排序吗,快排为什么快
答:快排的时间复杂度和空间复杂度?平均多少?最差多少?还有那些排序的时间复杂度是O(nlogn)?知道排序中的稳定性吗?我:快排的时间复杂度我记很清楚是O(nlogn),空间复杂度是O(1),平均就是O(nlogn),最差是O(n^2),退化成了冒泡排序;此外还有时间复杂度为O(nlogn)的还有堆排序和归并排序;排序的稳定性知道是在排序之前,有两个元素A1,A2,A1在A2之前,在排序之后还是A1在A2之前。
4)写个快排,为什么要用三数取中法,好处是什么
5)堆排序
6)25个小车 速度未知,只有五个跑道,如何最快选出最快的五个车
9.编程题
1)找出正整数中的偶数,并输出相加后的数
2)输入n和b,找到1到n中被b整除的个数
4)给年月日,判断是方面第几天。
5)小球从100米下落,每次回弹一半距离,第几次落地后的总距离。
6)斐波那契数列,求数字数组中最长的斐波那契数列长度
7)被围绕的区域,leetcode第130题
8)跳台阶问题
9)路径问题,leetcode上63题和64题
10)使用最小花费爬楼梯,leetcode746题
11)输入n个整数,找出其中最大的k个数
12)给一个整数数组和一个目标值,找出数组中和为目标值的两个数
13)最长公共子序列,最长回文子串, 最大子序列和,判断是否是回文数,用两种方法
14)一篇英文文章,统计单词频率,得到频率最高的那个单词
15)给一组整数,无序,在不改动原数组的基础上,请找出1000个位置连续的数,使其和为10万。
16)那如果是不限制个数,只要使其和为10万就可以的数。
17)给10x10的棋盘,扫雷,随机放置10个点作为雷,如何保证随机放置?
18)只有一条语句,判断数n是不是2的幂
19)筛子六个面,每个面的概率不一样,要求实现一个掷筛子的函数
20)手写直方图代码
21)一个1-n的数,少了一个,找出来 ; 一个1-n,少了两个数,找出来
22)计算1-100的质数和
23)给数字N,表示以后N对括号,求所有可能的合法括号,判断括号是否合法
24)强盗抢东西
25)快速找到一个数字的开五次方根
26)一个数,0-1024,最多几次找到这个数
27)52张牌,摸5张牌,求顺子的概率,允许不同花色
28)翻转中间由各种符号隔开的字符串
29)从右边看被遮挡的二叉树,求露出的node
30)名人问题,给出最优解法
31)单调函数求零点 (简单的二分法)
32)编辑距离,求两个数的汉明距离
33)TopK
34)IP地址 32位int存储
35)01矩阵找出最大面积的由1组成的矩形(lintcode 510-hard)
36)I love you转换成you love I?只允许申请O(1)的额外空间
37)不用math中的取平法差,判断一个自然数是不是可以开方(时间复杂度尽量低)
38)求根号n
39)九宫格输入法怎么实现单词提示(比如输入a,提示advertise) 什么数据结构实现?
40)ax=b,求x的方法。(求逆矩阵,如果不可逆怎么办。什么情况下可逆。
41)硬币2元,3元,5元,给定金额,输出最少需要多少硬币
42)00!末尾有几个0
43)矩阵迷宫问题(动态规划)
44)一万个数去排序,用什么方法比较好,随机顺序。当N很小时,快速排序慢,归并排序快,N很大时,无序,堆排序快,有序,快速排序快
45)写一个buffer,带有读和写操作,写是从每次读的后一个位置开始?写完后开始询问如何保证线程安全,写一下?如何实现写读安全,两个读的时候不加锁
46)写一个实际场景的算法,trigger和alarm的时间关系
47)两个语料库,一个千万级别,一个万级别,返回万级别中的词条有没有出现在千万级别的语料库中,考虑时间复杂度空间复杂度等,词典树(多叉树)
48)循环移动,一个数组,给定移动第几位,以及右移多少位,若移动到数组尾部则从头来
49)数组查找题,升序数组,旋转一下,在旋转数组中查找有没有目标数字,二分法
50)给定一个字符串,给定一个很多子串的集合,求满足能完整无重叠的拼成字符串的所有集合?题修改为求用最小子集的拼成字符串的集合
10.智力题
1)8升水,有一个5L的杯子和3L的杯子,怎么得到4升水
2)一头母牛每年生一头小母牛,每头小母牛从第四年开始,每年也会生一头小母牛,写个公式求第n年会有多少头牛
3)一张圆桌子,我和面试官轮流往桌子上放硬币(随便放),直到桌子放不下为止,最后一个放硬币的人赢,如果我先放,怎么保证我肯定赢
4)50个红球和50个黑球往两个桶里放,然后自己去抽,怎么样才能使抽到红球的概率最高
5)54张牌,分3组,大王小王同在一组的概率
6)设随机变量X1,X2,…Xn相互独立,且都服从(0,θ)上的均匀分布。求U=max{X1,X2,…Xn}数学期望
7)推理:三个连续数,大于6,其中两个是质数,问第三个一定能被6整除
8)概率题,抽蓝球红球,蓝结束红放回继续,平均结束游戏抽取次数
9)概率题,5000个黑球5000个白球,每次摸两个,如果同色,放一个黑球进去,如果不同色,放一个白球进去,求最后剩一个黑球的概率
10)1000瓶水有一瓶毒药,需要几只小白鼠(10只,二进制编码)
11)马匹赛跑,25匹马,5个跑道,没有计时器,要找出前三名,最少要比多少场,答案是7
12)概率题,三个硬币,一个正正,一个反反,一个正反,随机取了一枚,抛出是正面,求背面也是正面的概率
11.设计题
1)一个停车场有一些大车位和小车位,大车只能停大车位,小车既能停大车位又能停小车位,实现这种场景下的调度系统
2)一个市有9个消防站,现在要新增3个消防站,这3个消防站应该放在哪里
3)如何节省空间,存放最小值,如果有多个,不想多次存放
4)用map计数,但是需要O(logN)的复杂度查找;用数组计数,空间复杂度更大用数组计数,空间复杂度更大;设置结构体,除了value,还有一个count值,计数。即前面已经用了链表,节点结构体含有,value,count,next;
5)42亿排好序的QQ号,找到其中某个
6)如何查找一个文件夹下所有文件的大小和,用什么数据结构,我说用树,然后遍历,遍历用后序比较节约时间,最后访问根节点

12.动态规划和分治的区别与联系,各自适应哪些情况
1)背包问题:了解动态规划么,一个书包体积是V,有若干个m V的物体,最后让书包最重,把方法和递推公式说一下

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页