自我介绍,实习内容介绍
数据库了解吧? 聊一下索引
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协调了,也看自己的需求
#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)
#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
#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):
#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)