5月底面试了一波,但是效果不尽人意。总结一下面试的情况。
面试的公司有阿里,百度,汽车之家,58(两次),链家,36氪。。。
先说问题,下一篇再来总结下答案。
阿里:
1. 了解hashmap吗?介绍一下。是不是线程安全的?concurrentHashmap和hashTable有什么区别?
2. 线程安全的集合有哪些?如果用list呢,线程安全的list有哪些呢?
3. 在开发中遇到过classNotFound和classNotDefined这类的错误吗?这些错误是如何产生的?如何解决?或者你说下什么情况下会出现这种错误。
4. 刚才谈到类的加载过程,你怎么能看到类的加载过程。
5. 在Tomcat的运行过程中,我想知道类的加载过程,容器到底加载了哪些class,如何去看?
6. 在HashMap种,使用对象作为key,需要注意什么问题?
7. NoSQL,MySQL都用过吧,他们有什么区别和关系。在什么情况下用NOsql,什么情况下用Mysql。Nosql和Mysql最关键的差异在哪里?也就是说关系型数据库和非关系型数据库最大的差别在哪里?
8. 你对事务的理解。
9. 悲观锁和乐观锁的概念介绍一下。
10. 项目种有用到dubbo是吧,你能简单介绍下dubbo的原理吗?
11. 你是否独立承担过一个项目?或者你在一个项目里面技术上有过比较大的贡献,能介绍一下吗?
12. 这个是根据项目引申过来的,如果服务器不允许你上传文件或者写文件更改文件,你如果实现将一个文件的修改内容加载到内存里?
13. 说下你项目中,你所作的一些亮点。
14. 用过MQ吗?MQ用在什么场景?如何解决消息的重复投递或者消息丢失的问题?
15. 根据你的简历,能说一下项目中你的亮点,攻克的难点,是如何成长的?有没有经历过技术难点的突破?比如性能调优啊等等。
16. A模块调用B模块,给B模块500毫秒,如果B模块没有返回,A就不要B模块的结果直接往下走。
17. 可重入锁用过吗?
18. spring AOP是如何实现的?
19. 淘宝会产生大量的订单号,如果你来设计,你会怎么设计订单号?
百度:
- JVM了解吗?类加载能说一下吗?
- 多线程了解吗?说一下线程池吧。
- Linux常用的命令了解吗?
- dubbo能大概讲一下,服务发现,故障处理吗?
- reddis了解吧,用redis主要做什么?
- 数据库和redis如何解决不一致的问题?就是一致性的问题。
- Spring AOP是如何实现的。说下原理。
- 数据库索引的数据结构。B-tree,B+tree 说一下区别。为什么使用B+tree的数据结构?
- 我新建给一个类 来继承String类可以吗?
- 值传递和引用传递有什么区别?
5.21面试总结: - zookeeper挂掉,生产者消费者还能通信吗?如果能怎么通信的?
- 手写 申明一个索引。
- sql执行慢,如何查看是否用到了索引,如何查看是否是索引导致的。
- spring如何加载上下文?如何通过一个bean的接口来加载上下文。
- spring事务,隔离级别。如何配置。
- @autowired,@resource 这两个注解的区别。
- springmvc 如何通过注解将返回的list类型转化为json类型。
- b-tree, b+tree,红黑树 介绍一下。(问了好多次)
- hashmap是是如何解决碰撞的。
- hashmap和hashtable的区别。除了线程安全,还有什么
- 读写锁,读写分离锁。
- 线程池底部调用的是什么方法。如果不用线程池,自己如何设计。线程池参数说明
- redis 销毁策略。json往redis存的话,以什么格式存。
- reentrantlock 原理,使用
- java.util.concurrent.atomic包介绍一下。
- list数组如何对存入的对象的某个字段进行排序。
- session 生命周期。sessionid存在哪里?
- 分布式锁,分布式事务。
- 事务的回滚机制。
- springmvc 三层 哪个是单例的
- redis端口号,mq端口号。
- mq是如何解决重发消息和少发消息的。
- sql like语句如何使用索引。
- dubbo 生产者消费者通信的过程。
- springaop 动态代理的模式是怎么实现的。
- zk事务顺序的一致性。
- happens-before
- Java内存模型(不是运行内存)
- cas 和atomic包
- NIO derectbuffer.
- AIO
- springmvc哪个注解可以获取url上的路径
- spring加载过程。spring 加载容器的扩展点。比如在已经加载完后,如何再加载几个bean。
- 网络攻击(CSRF、XSS)
- 红黑树、AVL树区别
- url到页面的过程
- 引擎对比(InnoDB,MyISAM)
- dubbo缺点,改进
- 线程池,线程多了怎么办?排队?
- dubbo线程池,线程模型。
- concurrenthashmap扩容时,多线程的情况。
- 如何防止http伪请求。
- 如何维护一个变量的原子性。
2018.0601面试总结 - 手写lru算法
- 手写快排算法
- 手写步数算法,给一个整数数组,每个整数代表向前跳跃的步数,求跳到最后一步需要跳几次?(动态规划问题)
- 聚簇索引非聚簇索引的区别介绍一下
- drds多维度查询。如果我分库使用id来区分的,如果我想查另个一个属性比如年龄,如何查询?
- zookper为啥有观察者
- 索引为啥用b+树
- 2个G得数据如何排序,无法一次性读入全部。
- spring加载过程
- 线程池介绍
- 多个子线程调用问题,等待每个结果,然后往下走。写出代码。
- 手写生产者消费者问题。(假如是一个生产者和一个消费者)。
- 写库问题。由于网络问题如何保证重复操作,并发环境的写操作。
- mq推送,拉取有何区别
- 如何自己设计一个rpc
- mysql如何解决幻读问题
- 线上oom了如何排查
- 线上cpu内存爆满如何排查。
以上就是面试中遇到的问题。阿里的擅长从项目中展开来问。还是要多了解基础原理。
8月19号 阿里旗下河马电话面试:
- 首先自我介绍。目前工作内容。挑几个点详细讲下,项目中有什么贡献,有深度的工作点介绍下。
- 你们管理后台的权限是怎么做的?
- 如果抛开shrio权限框架,你会如何设计权限控制。或者你讲一下shrio框架做了哪些事。(我回答得是把用户进行分组,然后抽象出系统得目录,把目录挂载到某个用户上面就是做了权限得控制。然后对方跟我说这只是系统权限模型得分析,现在只是关系,模型有了。接下来有了下面得问题)
- 权限框架是如何通过接口来对用户进行鉴权的?(我回答通过用户得唯一uid,来鉴权。
对方:那请求里面会包含这个uid嘛?
我:如果是系统用户,系统肯定会分配一个uid。
对方:你在访问系统接口中肯定有一个请求体连接,这个链接中包含了哪些参数,然后对用户进行了鉴权。
我:会包含本身得一个信息比如uid。
对方:那是不是说我在请求体中修改uid,用一个别人得uid,是不是就可以更换用户权限了?
我:那就要通过加密得方式来访问,通过uid+密钥进行加密得方式来访问,达到防治用户私自更换uid得方式来访问系统。) - shrio框架具体使用过吗?框架是在什么时候做得鉴权?(我回答是通过filter进行得鉴权)
- 那filter什么时候会被触发?
- spring MVC 从用户访问链接开始,都发生了什么,具体讲一讲关键节点(我回答了dispatcher,hadlermaping等等),都大概做了什么事情,最终落到了逻辑代码上。
- controller 中结果返回时,filter会对结果进行处理吗?
- 如果现在有这样一个需求:我现在要对返回得结果风格保持统一,每个返回得结果都包含了相同得一部分信息,比如一部分时系统信息,一部分时业务信息,该如何做?(我回答是,在返回时,调用同一个writeresponse方法,在这个方法中添加固定得系统信息。对方:不通过这种方法还有其他方法吗?我:通过过滤器来做。)
- 现在得一个需求想对所有得请求的入参和出参操作打印日志,该怎么做?(我回答用springAOP来做。对方:那你讲下springAOP吧。)
- springaop有两种代理模式了解吗?什么时候使用JDk代理,什么时候使用另外一种。
- jdk动态代理用过吗?
- activiti工作流在你项目中是怎么用的?activiti工作流是如何描述流程节点呢?你的业务中有很多状态,流程变化,这个东西activiti是如何知道的?不同的角色根据不同的状态做一些事情,activiti是如何去描述的。(我回答说是通过activiti23张表来描述的,比如回退的话,去查history表)
- 如果说我不使用activiti,针对复杂的状态流转如何去做?或者说,先不考虑很多角色,比如就一个角色,很多个状态,比如a状态到c状态,再到d状态。(我回答通表来描述,每新增一个操作,在表中就记录一下状态。这样就可以回退啊什么的。对方:你的状态变更落在了数据库里,每次状态流转前,你都会去查库,如果状态变更很频繁怎么办?是一个高并发请求怎么办?)
- 对mybatis了解过吗?为什么调用的是接口,接口的实现是通过xml的。为什么可以这么做呢?
- 分页查询是怎么做的?
- drds分库分表的原理?是根据什么分库分表的?针对哪些表去分库分表的?现在有一个订单表,预估量会很大,我想提前做分库分表,你觉得我应该用哪个字段来做分库分表?为什么?(我回答得时间点,但对方觉得不太满意)用时间点,或者订单,那我c端得查询怎么办?比如说C端用户有商品列表,他怎么查呢?如果用商品id分库分表,那不同得商品可能落在不同数据库实例上,那如果这些商品属于同一个用户怎么办?(这个问题就是说,分库分表用得一个维度,但是我查询用的另外一个维度,这个问题如何解决?)
- 单表查询时?如何优化这个查询得性能(我回答用索引)
- mysql innoDB有几种索引?索引类型有哪些?(比如主键索引,唯一索引,还有呢?)你平常建索引时,建什么类型得索引?以订单表为例,你会在哪个字段建立索引?
- 我现在查询条件有三个条件=a,=b,=c都是等于查找也就是精确查找,如果数据库有一个索引是a,那这个查询能够被优化吗?这个查询能用到索引吗?
- innodb索引有那两种数据结构?b+树,b树,有什么区别?为什么要用b+树。
- 数据库得索引是不是越多越好,为什么?我有一张表有7,8个条件,那我每个字段都加上索引可以吗?
- 数据库得锁有了解吗?
- 数据库资源得锁定是怎么锁定得?行级锁怎么使用?数据库什么时候使用行级锁,什么时候使用表级锁?我以任意得查询条件,命中了多条记录,那都是行级锁吗?
- jdk使用得什么版本?schorized在jdk6之后有哪些优化,了解吗?
- jdk8得新特性了解吗?lamda表达式了解吗?使用过吗?知道有什么好处吗?
- 方法引用了解吗?使用过吗?