蚂蚁金服Java暑期面试

一面

  • 介绍项目,主要介绍在微软的实习,要注意项目讲得对方能理解
  • 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
  • 小英的用户数据一台机器放不下的时候,怎么办?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值