电话+在线编程
1、自我介绍
2、在线编程:有效括号+二叉树层序遍历+动态规划
三选二
3、说一下双亲委派模型
答:JDK8以及之前的版本,双亲委派模型的工作过程主要是当一个类加载器收到类加载请求时它自己并不会先去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此。只有当父加载器反馈自己无法完成这个加载请求时,子加载器才会尝试自己去完成加载。
4、线程的生命周期
答:在线程的生命周期中,它要经过新建、就绪、运行、阻塞、死亡5种状态
5、线程同步的原理,synchronized锁的原理
答:synchronized实现同步的基础,java中的每个对象都可以作为锁。对于普通同步方法,锁是当前实例对象;对于静态同步方法,锁是当前类的Class对象;对于同步方法块,锁是synchronized括号里配置的对象。
6、平时用过线程池么?什么场景下用的线程池?线程池的大小是怎么设置的?线程池的原理?
答:线程池的原理,线程池判断核心线程池里的线程是否都在执行任务,如果不是,则创建一个新的工作线程来执行任务,如果核心线程池里的线程都在执行任务;线程池判断工作队列是否已满,如果没有满,则将新提交的任务存储在工作队列里,如果工作队列满了;线程池判断线程池的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。如果已经满了则交给饱和策略来处理这个任务。
7、设计模式有了解么?spring的单例模式的原理?
提了一下领域驱动设计模型:一句话解释技术专家和业务专家一起采用面向对象的思想来提取业务模型
8、mq有了解么?
9、mysql的默认隔离级别?mysql的优化经历?怎么查看是否有用到索引?explain的参数大致说一下?表的数据量?有接触过分库分表么?怎样分的?有了解过mycat内部的相关算法么?
答:mysql默认隔离级别RR,repeatable read。explain的参数:table:关于哪张表的分析;type:表示mysql找到所需行的方式,比如ALL,表示mysql将遍历全表以找到匹配的行;index:遍历索引树找到匹配的行;possible keys:表示mysql可能使用哪个索引在表中找到记录;key:表示mysql实际使用的索引;rows:估算的找到所需记录所需要读取的行。
使用过mycat进行分库分表
mycat相关的算法
10、redis支持哪几种数据类型?redis是怎样部署的?redis的大key怎么处理的?缓存击穿、雪崩怎么办?
答:redis支持String字符串、list列表、set集合、zset有序集合、哈希对象。redis部署方式:单点、主从、哨兵、集群
缓存穿透:查询一个一定不存在的问题,这样的请求每次都会打到数据库上去,可以缓存空值解决,如果这样的请求过多则可以使用布隆过滤器,其实很多系统都有风控所以很少出现这样的情况
缓存击穿:大量的请求同时查询一个key,然而这个key正好失效,大量请求都会达到数据库中;
a、永远不过期,在redis上不设置过期时间,这就可以保证热点key过期问题,从功能上看,不过期数据就是静态的了,在数据库数据进行修改的时候,再次进行缓存构建。唯一的缺点是线程可能访问到旧数据,对于一般互联网公司,这个缺点是可以忍受的。
b、使用互斥锁解决,第一个得到锁的线程将请求的数据再次做缓存,后面的线程来了就会直接走缓存,锁可以使用setnx
缓存雪崩:某一时刻发生大规模的缓存失效,大量的请求进来直接打到db上,简单的解决方案是缓存失效时间分散开,比如在原有的基础上增加随机值,这样缓存过期时间的重复率就会降低
redis大key问题:redis大key是指key对应的value值所占内存空间比较大.首先在实际的项目中很少会遇到大key问题,在设计之初就会避免将大key存进redis缓存。其次解决大key问题的办法如下:
单个key存储的value很大,尝试将key拆分成几个key-value,针对列表集合键同样可以分类做拆分。针对redis版本4.0之后,使用memory usage命令寻找大key,unlink命令使用了lazyfree机制把大key放到后台任务队列中,然后在后台异步删除。减少del命令带来的阻塞
11、有什么要问的吗
##################二面#########
除去在线编程大致流程一面差不多,这里记录下和一面不同的问题
1、有了解贫血模型、充血模型么?
答:失血模型:领域对象只有属性的get、set方法的纯数据类,所有的业务逻辑都有service层中完成
贫血模型:包含了不依赖于持久化的原子领域逻辑,而持久化在service层
充血模型:除了get、set方法,包含了原子领域逻辑和数据持久化的逻辑
胀血模型:很少用,去除了service层,在领域里面的领域逻辑上封装事务
2、平时有逛哪些技术网站么?
3、能接受996么?能接受在家的时候被call么?
##################三面##################
三面主要是谈项目,问一些项目中的实际问题,需要自己对项目有一定的思考,因为我面的是仓储物流岗位,所以介绍最多的项目便是之前公司做的仓储物流项目。
##################hr面##################
1、为什么要跳槽?除了尝试大厂工作还有其他原因吗?这里其实要自己平时深度思考一下,感觉hr想要从里面探知面试者是否有自己的职业规划
2、从上海换到北京有什么想法
3、期望的薪资
上午给出期望薪资提供目前的薪资证明后下午5点多的时候hr便给了回复,京东的效率还是挺快的