2017美团秋招面试

美团一面

1.手写插入排序.

我当时写的

public void insortSort(ElemType[] A){
    int length = A.length;
    for(int i = 0; i < length; i++){
        int j = 0;
        for(j = 0; j < i; j++){
            if(A[i] <= A[j]){
                break;
            }
        }
        ElemType temp = A[i];
        for(int k = i; k >= j; k--){
            A[k] = A[k-1];
        }
        A[j] = temp;
    }

}

书本上的写法:

//数据存放在1-n中
public void insortSort(ElemType[] A,int n){
    int i,j;
    for(int i = 2; i <= n; i++){
        if(A[i] < A[i-1]){
            A[0] = A[i];
            for(j = i-1; A[0].key < A[j].key; j--){
                A[j+1] = A[j];
            }
            A[j+1] = A[0];
        }
    }
}

2.你觉得哪些方面是你擅长的?

回答:集合,多线程

3.开始问多线程和集合问题,你知道哪些集合?

ArrayList、HashMap、BlockingQueue;

4.BlockingQueue满了怎么办?

BlockingQueue中有两个ReentrantLock变量(takeLock和putLock),实现了读写分离。同时又有对应的两个条件Condition对象,notEmpty=takeLock.newCondition()和notFull=putLock.newCondition()。
生产者在往BlockingQueue中放入元素的时候,有四种方式:add、offer、put、offer(E,long,TimeUnit).

如果BlockingQueue满了的话,add会直接抛出异常、offer不阻塞,不抛异常,返回boolean值表示插入是否成功、put会阻塞、offer(E,long,TimeUnit)会等待一定时间。
实际上add就是掉了offer,如果返回false,再抛出异常。

put方法是如何阻塞的?
put方法在队列满的时候,会调用notFull的await方法,等待条件被满足,只有当消费者从队列中取出元素后,会调用notFull的signal方法,唤醒等待的生产者线程。

Signal的时候锁已经释放了会怎么样?

抛异常:IllegalMonitorStateException

5.ArrayList的初始容量是多少?为什么?

很自信的回答:初始容量是10。面试官反复问我你确定?见鬼。
问为什么我就不知道了。估计没有答案。

6.HashMap的hash函数是怎么设计的?

我当时的第一反应是想要问题HashCode的函数是怎么实现的吗。
现在回想起来,估计是想问HashMap中是如何计算Hash值。

HashMap中的Hash算法是使用拉链法,首先,通过对key的hashcode来计算key所对应的位置,HahsMap对求余
计算index的方式做了优化,采用按位与的操作,因为HashMap的容量始终都是2的整数幂,所以index肯定是0-2n-1,任何一个Hashcode和2n-1按位与,肯定落在0-2^n-1上。

接着又问有哪几种解决Hash冲突的方法?
1.开放定址法(线性探测、平方探测、再散列、伪随机序列法)
2.拉链法

还问了这些方法的使用场景?

6.Http头部有哪些字段?

下面列举以下常见的:

通用首部 作用
Connection 连接管理字段
Cache-Control 缓冲控制字段
Transfer-Encoding 指定报文主体的传输编码格式
实体首部 作用
Content-Type HTTP主体内容类型
Content-Length HTTP主体内容长度
Content-Encoding HTTP主体内容编码方式

如果设置了Transfer-Encoding,Content-Length就会被忽略
Transfer-Encoding指的是传输的编码方式(分块传输)
Content-Encoding指的是内容的编码方式

请求头 作用
Accept 设置接受的内容类型
Accept-Charset 设置接受的字符编码
Accept-Encoding 设置接受的编码格式
Authorization 设置HTTP身份验证的凭证
Host 表示请求的主机和端口,HTTP1.1中必须包含这个字段
Cookie 设置服务器Set-Cookie的内容
Referer 设置前一个页面的地址
User-Agent 用户代理(浏览器)的字符串值
响应头 作用
Server 服务器内容信息
Location 客户端重定向的URI

7.Cookie和Session的区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

Session的实现方式:
1.利用Cookie
2.URL重写
3.表单隐藏

8.HTTP状态码

状态码 说明
200 客户端请求成功
302 临时跳转,跳转的内容由Location字段指定
400 客户端请求有语法错误,不能被服务器识别
401 未授权
403 服务器收到请求,但是拒绝提供服务
404 请求的资源不存在
500 服务器发生不可知的错误

9.项目深入问的时候被怼的很厉害。需要挖掘一下项目的深度。

美团二面

1.你所知道的性能指标有哪些?

GC、数据库查询时间(qps)、请求的响应时间(RT)、CPU使用率、MEM使用率

2.手写SQL语句:

订单表Order:orderid,userid,productid,quantity.
查询购买产品id为99的且数量超过10的用户id

select userid from order 
where productid = 99
group by userid
having count(quantity) > 10

SQL语句是怎么样的一个执行过程?

数据库连接池的配置

3.HTTP请求的执行过程

    1. 域名解析
    1. 发起TCP的3次握手
    1. 建立TCP连接后发起http请求
    1. 服务器端响应http请求,浏览器得到html代码
    1. 浏览器解析html代码,并请求html代码中的资源
    1. 浏览器对页面进行渲染呈现给用户

你知道HTTPS的原理吗

4.NativeHook的实现(项目)

5.LinkedHashMap的Key是否可以为空?

LinkedHashMap的继承了HashMap,并且在HashMap的实现基础上,对HashEntry增加了before和after指针,用来保存插入顺序(或访问顺序)。因此LinkedHashMap的Key是可以为空的。

6.线程池的实现。创建线程池需要哪些参数?

corePoolSize,maxPoolSize,keepAliveTime,unit,workQueue,threadFactory(忘记了),rejectedHandler

当线程数达到corePoolSize的时候,怎么做?

任务会被放入workQueue,如果workQueue满了,而且线程数没有达到maxPoolSize,会新建线程。

7.设计模式

适配器、装饰者、桥接模式、策略模式

8.手写单例模式

写了一个静态内部类,延迟加载。

public class Singleton{
    private Singleton{}
    
    public Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
    
    private static SingletonHolder{
        private static Singleton INSTANCE = new Singleton();
    }
}

延迟加载有什么作用?

当创建一个对象的开销特别大的时候,而且程序中可能并不会用到这个对象。

9.考查命令:

查看日志中最后100行中出现“error”的次数

日志分析(已经被问到2次)

cat log | grep -c “error”

Java程序高CPU问题排查

top -H -p {PID} 显示高CPU的进程的所有线程号,获得线程号
printf "%x\n" {tid} 将10进制的tid转化为16进制
最后打印线程的堆栈信息:
jstack pid |grep tid -A 30

查看服务器打开的连接

netstat -nplt

10.如何控制多个线程的顺序执行?

美团三面(技术leader)

1.画一下你们的项目技术架构

2.你们的Agent的实现原理

3.Tomcat类加载器是怎么工作的,看过源码吗?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容