秋招--美团到店--java开发

一面

自我介绍,实习内容介绍

数据库了解吧? 聊一下索引
b+对比b树有什么优点呢?
什么场景用到相邻记录呢?

隔离级别
死锁,怎么解决?

java:
线程的状态
wait()进入到哪种状态
线程池,参数
或者问,什么时候会从线程池从基本大小向最大值变化?
并行与并发的区别 注意口误
设置线程池大小需要考虑哪些因素?
了解垃圾收集吗? 最新的G1垃圾收集器的过程?哪些阶段会stop the world
new一个对象,从新生代到老年代的整个过程

新生代与老年代的收集算法的区别

GC的停顿,也就是stop the world是怎么实现的吗?
参考链接

安全点轮询和触发线程中断

JVM有个叫做“安全点”和“安全区域”的东西,在发生GC时,所有的线程都会执行到“安全点”停下来。
在需要GC的时候,JVM会设置一个标志,当线程执行到安全点的时候会轮询检测这个标志,如果发现需要GC,则线程会自己挂起,直到GC结束才恢复运行。

还有另一种策略是在GC发生时,直接把所有线程都挂起,然后检测所有线程是否都在安全点,如果不在安全点则恢复线程的执行,等执行到安全点再挂起。

但是对于一些没有获得或无法获得CPU时间的线程,就没办法等到它执行到安全点了,所以这个时候只要这个线程是在安全区域的,也可以进行GC,安全区域是一段代码段,在这段代码段中对象的引用关系不会发生变化,所以这个时候进行GC也是安全的。

如果是你来实现,怎么做呢?
如何挂起所有用户线程呢?
interrupt()一定会中断线程吗?
中断的过程,java是如何实现呢?

i++ 是原子操作吗?
java中的锁? synchronizied和reentrantLock的区别
reentrantLock为何效率更高呢?

jdk1.8中synchronizied实现高性能的优化? 升级过程
偏向锁和轻量级锁的实现

现在来说reentrantLock为何效率更高呢?在竞争激烈的时候
没有锁升级的过程,还有呢?

设计模型
了解哪些?用过哪些?
写给单例模式吧

算法:
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数
如何优化呢? 位运算来做

linux用的多吗? 权限是怎么实现?

平时有什么兴趣爱好?自己写博客吗?
看博客看哪些内容?
学完了不用很快忘了呀,你觉得学习与使用之间怎么能把学到的东西变成能用的东西呢?

业界的最新技术了解吗?没怎么用是吗
git用过吧? 如何合并呢
使用dbase合并吗?

你写的这些技能都是会用吗?还是只是自己学过,看过相关书籍

Redis如何实现高性能?快手也问到

能简单介绍一下多路复用吗? 内部使用什么原理?
与其他的模型阻塞I/O,非阻塞I/O,异步I/O的区别?

了解netty吗? 聊聊你的理解

部门是美团到店,有四个业务块(酒店,到综,到餐,度假),北京业务这边有三个(度假,酒店,到餐),面试官做的是商品平台

技术栈,java相关,也有公司内部的框架,比如rpc自己研发的,消息队列
,在业界都比较通用,存储用redis,Tair(阿里开源的)

分配到哪个部门得看最后hr协调了,也看自己的需求

二面

  • 算法1
    实现一个方法,把一个字符串转换成int输出。异常情况自行处理。
    不可以使用Integer.parseInt(String)
    【1】
    “-1” -1
    “sad” -1
    “2143546546757688798709808”
#coding=utf-8
import sys
#str = raw_input()
#print str

# i,m
# 0-9 ,不能以0开头
# + -  

def parse(strs):
    if not strs: 
        print('字符串为空')
        return
    count = 1
    res = 0
    if strs[0] == '0': 
        print('字符串以0开头')
        return
    neg = 1
    if strs[0] == '+':
        strs = strs[1:]
    
    if strs[0] == '-':
        strs = strs[1:]
        neg = -1
    for i in range(len(strs)-1, -1, -1):
        if '0'<=strs[i] <= '9':
            res += (int(strs[i]) * count)
            count *= 10
        else:
            print('字符串包含特殊字符')
            return
    return res*neg

res = parse('21435465467576887987098083333')
print(res)
  • 算法2
    判断一个树是不是平衡二叉树
#coding=utf-8
import sys
#str = raw_input()
#print str
print 'Hello,World!'

def isBalanced(root):
    res = True
    
    def dfs(root):
        if not root: return 0
        left = dfs(root.left)
        right = dfs(root.right)
        if abs(left - right) > 1:
            res = False
        
        return 1 + max(left, right)
    
    dfs(root)
    return res
  • 算法3
    合并两个有序数组,如何进行优化?
#coding=utf-8
import sys
#str = raw_input()
#print str
print 'Hello,World!'

def merge(nums1, nums2):
    res = []
    i, j = 0, 0
    while i < len(nums1) and j < len(nums2):
        if nums1[i] < nums2[j]:
            res.append(nums1[i])
            i += 1
        else:
            res.append(nums2[j])
            j += 1
    if i < len(nums1):
        res += nums1[i:]
    if j < len(nums2):
        res += nums2[j:]
    return res

nums1 = [1,2,3]
nums2 = [2,3,7]

print(merge(nums1, nums2))

def merge(nums1, nums2):
    
  • 算法4
    四个人ABCD把自己的名牌放进箱子里,然后四个人从箱子中随机取出一个名牌,请问,每个人取到的名牌都不是自己的概率是多少?
    四个人 变成5个人
#coding=utf-8
import sys
#str = raw_input()
#print str

class solution:
    def __init__(self, n):
        self.n = n
        self.res = 0
        
    def check(self, path):
        for i in range(len(path)):
            if path[i] == i+1:
                #print(path)
                return False
        return True
    
    
    def permunation(self):
        def traceback(path, nums, vis):
            if len(path) == self.n:
                #print(path)
                if self.check(path):
                    self.res += 1
                return
            for num in nums:
                if num in vis:
                    continue
                path.append(num)
                vis.add(num)
                traceback(path, nums, vis)
                path.pop()
                vis.remove(num)

        nums = list(range(1, self.n+1))
        vis = set()
        traceback([], nums, vis)
        

def allTimes(n):
    res = 1
    for i in range(1, n+1):
        res *= i 
    return res

times = allTimes(4)
print(times)
obj = solution(4)
obj.permunation()
print(obj.res)
# print(notMe, times)

你可能感兴趣的:(面经,美团秋招,java开发)