一面
- 介绍项目,主要介绍在微软的实习,要注意项目讲得对方能理解
- 10亿条文件排序,外部归并,merge时堆内部排序
- 一堆运动员的成绩排序,如a:10,b:20,c:5,排序并保证新来的一个运动员也是有序的 用treemap, map底层怎么实现的,哈希表或红黑树
- 白板写代码:
//假设用一组字符串表示一个目录下的层级结构:
// 如"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"
//表示的结构为
// dir
// subdir1
// file1.ext
// subsubdir1
// subdir2
// subsubdir2
// file2.ext
}
import java.util.ArrayList;
import java.util.List;
public class Main {
class Value{
public int i = 15;
}
public static void main(String[] args) {
System.out.println(getLargestLength("dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"));
}
public static int getLargestLength(String str){
int max = 0;
if(str == null || str.length() == 0){
return max;
}
String arr [] = str.split("\n");
if(arr[0].contains("\t"))
return -1;
List<Integer> dirLength = new ArrayList<>();
dirLength.add(arr[0].length());
max = arr[0].length();
for (int i = 1; i < arr.length; i++){
int length = arr[i].replaceAll("\t", "").length();
int count = arr[i].length() - length;
if (dirLength.size() < count) {
//输入欠缺中间目录
return -1;
} else if (count == 0) {
//新的根目录
dirLength = null;
} else {
dirLength = dirLength.subList(0, count);
}
dirLength.add(length + dirLength.get(count - 1));
if (dirLength.get(count) > max){
max = dirLength.get(count);
}
}
return max;
}
}
二面
-
介绍项目
-
给一个二维数组代表会议室的预定时间区间,比如[1,2],[2,3],[1,3],则最少需要的会议室的数量为2
- 贪心 转换为一个会议室利用率最高的问题,对开始时间排序,选择下一个开始时间离结束时间最近的
-
数学题,给1-5五个数字,全排列,[12345,12354,…,54312,54321],求中间两个数的差值
-
hiveql和sql是一样的么?不一样,举例说明,并说明理由
-
hiveql数据表的join,map reduce的过程?
-
给一个整数数组[x1,x2…xi,…xn],求X+Y+Z<N的所有可能性,不能重复
- 3sum 的变体,先排序,外层循环,内层两个指针判断,如果和> N-Z,则尾指针前移
-
HTTP怎么做到有状态?
- 我们要实现的是一种web应用,实现这种应用的协议我们选择了http这种本质上是无状态的通信协议。但是事实上,我们需要我们的web应用是有状态的。所以我们加入了cookies、session等机制去实现由状态的web应用
- Web应用=http协议+session、cookies等状态机制+其他辅助的机制
-
MySQL数据库引擎,innoDB的特点?别的引擎?
- InnoDB:该存储引擎为MySQL表提供了ACID事务支持、系统崩溃修复能力和多版本并发控制(即MVCC Multi-Version Concurrency Control)的行级锁;该引擎支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空则自动从现有值开始增值,如果有但是比现在的还大,则直接保存这个值; 该引擎存储引擎支持外键(foreign key),外键所在的表称为子表而所依赖的表称为父表。该引擎在5.5后的MySQL数据库中为默认存储引擎。
- ISAM:该引擎在读取数据方面速度很快,而且不占用大量的内存和存储资源;但是ISAM不支持事务处理、不支持外来键、不能够容错、也不支持索引。该引擎在包括MySQL 5.1及其以上版本的数据库中不再支持。
- MyISAM:该引擎基于ISAM数据库引擎,除了提供ISAM里所没有的索引和字段管理等大量功能,MyISAM还使用一种表格锁定的机制来优化多个并发的读写操作,但是需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间,否则碎片也会随之增加,最终影响数据访问性能。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空间的 MyISAMPack工具。MyISAM强调了快速读取操作,主要用于高负载的select,这可能也是MySQL深受Web开发的主要原因:在Web开发中进行的大量数据操作都是读取操作,所以大多数虚拟主机提供商和Internet平台提供商(Internet Presence Provider,IPP)只允许使用MyISAM格式。
- HEAP(也称为MEMORY):该存储引擎通过在内存中创建临时表来存储数据。每个基于该存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该磁盘文件只存储表的结构,而其数据存储在内存中,所以使用该种引擎的表拥有极高的插入、更新和查询效率。这种存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,但也可以使用B树型索引。由于这种存储引擎所存储的数据保存在内存中,所以其保存的数据具有不稳定性,比如如果mysqld进程发生异常、重启或计算机关机等等都会造成这些数据的消失,所以这种存储引擎中的表的生命周期很短,一般只使用一次。
- CSV(Comma-Separated Values逗号分隔值):使用该引擎的MySQL数据库表会在MySQL安装目录data文件夹中的和该表所在数据库名相同的目录中生成一个.CSV文件(所以,它可以将CSV类型的文件当做表进行处理),这种文件是一种普通文本文件,每个数据行占用一个文本行。该种类型的存储引擎不支持索引,即使用该种类型的表没有主键列;另外也不允许表中的字段为null。
-
小英的用户数据一台机器放不下的时候,怎么办?