WHCSRL 技术网

去哪儿网北京Java开发一、二、HR面全部通过

10.20 一天面完三面

技术面

一面自我介绍,二面无

简要介绍项目以及项目过程中遇到的问题

项目拓展问题

  1. Redis和MySQL缓存一致性问题和解决策略(旁路缓存 / 延时双删)

  2. Redis键删除策略(定时、惰性),策略的特点和优劣(定时内存友好,惰性CPU友好)

  3. 项目用到的Redis数据结构(继续深入介绍项目)

  4. 场景:存储一件商品的信息,最适用的Redis数据结构(Hash)

  5. 缓存采用Redis的原因(内存型、速度快),如何判断比直接使用SQL查询快(AOP拦截方法进行比较)

  6. WebFilter在项目中的使用,如何检查请求数据以及检查的原因(doFilter的request参数、检查SQL敏感语句)

  7. MyBatis防止SQL注入的机制(#{}占位符),XML映射文件对应DAO接口的工作原理(全类型+接口名作为key映射对应由XML标签解析得到的MappedStatement并执行对应SQL语句)

  8. 上面说的是执行SQL语句时的工作原理,说下对接收SQL返回值的原理的了解(不太清楚,说了动态代理和拦截器,面试官说很接近)

  9. 项目中访问远程接口时使用的数据序列化传输方式(JSON)

  10. 对Dubbo的了解以及大概说说RPC的架构(特别感谢声哥的RPC项目对我的秋招项目的启发)

  11. Netty框架出现的原因(封装NIO方便编码)及其优势(基于NIO相比较传统BIO效率高、利用责任链机制实现扩展性),Netty的线程模型(主从多线程,Boss,Worker)

  12. 项目中的信道复用如何实现(存储Channel到Map作为缓存,创建连接时判断服务IP端口和序列化方式是否一致)

  13. 了解的序列化方式,展开描述Protobuf如何使用(message定义以及protoc编译等)以及与JSON的区别(可读性、序列化速度和空间占用)

  14. 项目中Zookeeper集群的部署情况和起到的作用(注册中心,引入服务声明的方式)

Java集合和数据结构

  1. HashMap底层数据结构
  2. 除链地址法以外解决Hash冲突的其他方法(开放定址、再哈希、公共溢出区,引入ThreadLocalMap的线性探测)
  3. 红黑树的特点(根节点黑、叶子节点为NIL且黑色、从根节点到叶子节点黑色节点数量一致、红色节点不能与红色节点相邻),使用红黑树的原因和优势(插入速度较快且能保证O(logn)),与AVL树的比较(AVL树要求左右子树高度差不超过1)
  4. Entry数组是否可以用链表替代(引入Hash算法,如何定位数组下标,2倍扩容原因等)
  5. 提到数组支持随机访问,深入到底层地址是如何获取到的(数组起始地址+下标偏移量)
  6. PriorityQueue底层数据结构(堆)
  7. 堆的特性(大根堆小根堆),本质属于哪种树(完全二叉树)
  8. 堆插入和删除的时间复杂度,O(logn)的话为什么不选择其他树
  9. 队列的实现方式(提到链表,还提了LeetCode算法题用两个栈去实现)
  10. 两个栈去实现队列效率差的原因
  11. 链表实现队列时入队出队的时间复杂度,O(1)是如何做到的(队头队尾指针)
  12. 栈的实现方式(数组、链表)

Java并发和操作系统

  1. 进程和Java线程的状态(创建、运行、就绪、阻塞、等待、超时等待、终止)
  2. 如何查看Java进程中线程的状态(例如查看是否死锁,使用jps,jstack命令)
  3. 如何确定线程池线程数(CPU密集型N+1,IO密集型>2N)
  4. 死锁的概念,死锁的必要条件(互斥、请求与保持、不可抢占、循环等待),大概描述下可能造成死锁的场景
  5. 描述下如何实现两个线程交替进行操作(wait/notify,Condition)
  6. sleep和wait的区别

Java基础

  1. 面向对象编程的原则(不太理解想问的是哪方面知识,说了封装、继承、多态,以及private修饰类的域、getter/setter等)
  2. static修饰符的作用(声明类变量和类方法),场景:类中存在static修饰的HashMap引用,某个实例对引用内容进行修改时对其他实例可能造成的影响(对所有实例可见)

计算机网络

  1. HTTP协议所在的层(应用),以及HTTP请求的过程在每一层用到的协议(TCP,IP等)
  2. 内网通过交换机访问外网的过程,如何得知交换机的MAC地址,ARP的流程(广播和缓存)

MySQL

  1. MySQL索引的数据结构(B+树),索引什么情况下失效(模糊查询、函数、运算符、OR、范围查询、联合索引未最左匹配)
  2. 查询语句出现慢查询时的排查和优化(EXPLAIN(Type:没用上索引,Extra:文件排序),慢查询日志,SHOW PROFILE(是否出现临时表),数据量过多(分库分表),并发量较大(主从复制、读写分离))
  3. MySQL事务的概念和作用(ACID),事务隔离级别(引入InnoDB默认隔离级别可重复读和MVCC)
  4. 场景:一段业务代码分为四个步骤:查询1万条数据,筛选出20条,插入表,提交日志。可以只在插入表添加事务吗?可以整段业务代码添加事务吗?性能方面的影响如何体现?

以上这些面试题的参考答案已经整理好了,需要的朋友可以关注微信公众号:Java团长,回复“去哪”获取~ 

HR面

  1. HR介绍公司部门架构,培养制度,询问意向部门
  2. 常规HR面问题

没有记录面试问题,基本凭印象,有些问题可能没有记住......

推荐阅读