这次下午两点的时候面试:
进去后首先是让先介绍一下自己以及项目. 然后让我画一下项目的架构图以及目录结构, 问为什么这么设计.
再下来就问一些比较基础的像MVC的执行流程是怎么样的, 无非就是dispatherServlet 和解析器之间的传递么
再下来直接问我 JVM的类加载过程以及 新生代Eden区 和ServivorFrom 以及ServivorTO区的问题, 例如: 什么时候MinorGC会触发, 讲一下这块的流程. 然后是什么时候新生代的数据会转移到老年代.
再接下来就问我一些算法. 我当时就懵了 , 兄弟我面的职位没那么高级啊. 反正这块没答上来.
然后问我多线程这块,先是问线程池是通过什么创建的 Executors 然后问创建线程池的4种方式以及各自的区别包括问了下NewFix线程池的参数含义,然后出了几个题
1: Syncronized
Class a {
Syncronized void aaa (){}
Syncronized static void bbb (){}
}
通过两个线程,一个调用aaa方法一个调用bbb方法,问线程调用了bbb方法后 aaa方法还能进入吗.
2: 有字符串123456789这样的, 有两个线程同时执行,实现一下一次循环遍历出123456789 例如 t1线程结果是1 t2线程结果是2 再是t1 = 3这样的.
3: 这个就不是线程题了, 一个字符串 abcddcba 写一个代码证明 这个字符串是对称的.
数据库这块问题: sql优化 讲一下b+tree b-tree 在mysql中的区别,数据库存储引擎,包括存储的文件结构,sql执行流程,本地事务如何执行的等等,反正这块问的很细. 这个应该是我吹的最完美的了
spring的话问了MVC的执行流程 也就是->dispatherServlet 问了mybatis的一些底层
IO这块没有问到.
dubbo没有问, 就直接问的你们的分布式事务是怎么处理的.....
最后,看了下我简历,让我回去了, 后面知道是 我以往的项目都简单, 觉得不能胜任吧. 给我气死了都, 面了三个多小时......
下面这些就是我整理的一些面试题
1.集合
ArrayList 基于数组实现 通过数组copy扩容 特点:读取效率高
LinkedList 基于node实现链式链接 node中记录当前的值和前后node节点 特点:插入删除效率高
Vector 线程安全,强同步的arraylist
Stack 栈 对Vector功能性的封装 先进后出
Queue 队列 基于数组实现 先进先出
HashMap 基于数组+链式结构实现 加载因子:0.75 阀值=数组容量*加载因子 如果容量超过阀值,自动扩容2倍
1.7和1.8的区别 (红黑树)
HashTable 线程安全的hashmap 不接受null值
LinkedHashMap HashMap的子类,记录顺序的hashmap,其中的entry记录了上一节点和下一节点,双向链式结构
HashSet 基于hashmap实现的不可重复的集合
LinkedHashSet HashSet的子类,记录顺序的hashset,同样是双向链表
juc中的常用并发工具如ConcurrentHashMap(支持并发的hashmap)等.
2.jvm
内存分配 1内存如何分配
垃圾回收 1什么样的对象会回收 2什么时候回收 3各代回收算法 4各垃圾回收器区别
jvm优化 1常用参数 堆大小Xmx Xms 永久带大小-XX:permGen 老年代年轻带比例 对象年龄参数 垃圾回收器选择参数等
类加载机制 反射
jdk常用工具 jstack jstat jmap等(会问处理过什么问题,例如cpu负载高问题查找)
3.多线程
线程基础 1如何实现线程创建 2线程各种状态 3线程中的常用方法(例如sleep和wait的区别)
线程池 Executor框架 常用线程池fixThreadPool,singleThreadPool,cacheThreadPool的实现原理和区别 schedulerThreadPool延迟线程池
实现线程池的工具 阻塞队列blockingqueue,没容量的队列syncronisedqueue,延迟队列delayqueue等
说说java中的锁
4.mysql
索引类型 如何建索引 如何使用索引 索引的数据结构hash,btree,b+tree
sql优化 explain
主备同步原理:binlog
5.缓存
memcache,redis区别,使用场景
一般深入问memcache的不多 主要问redis
1.redis支持的数据结构
2.redis特性:如串行,原子性
3.redis常用命令
4.redis使用场景
6.消息
1.activemq,rabbitmq,rocketmq,kafka这些消息使用过哪些?又什么区别?
2.这些mq的原理.
3.mq使用场景.
7.io,nio
问的不多,简单了解一下就行
8.搜索
lucence,solr,es使用过哪些?说说原理.
9.数据结构及算法
1.算法:查找算法 排序算法
2.数据结构:各种树(二叉树,搜索树,平衡树等)
10.常用设计模式
1.单例 7种写法
2.工厂
3.动态代理
4.责任链模式
5.装饰器模式
6.适配器模式
11.网络通信协议
1.网络协议5层
2.http和https区别
3.tcp,udp 三次握手,四次挥手
4.http中包含什么
5.是否用过抓包工具
12.常用框架:spring,dubbo
说说ioc和aop的原理(ioc bean工厂 aop 动态代理实现 2中方式 实现接口采用Proxy和InvocationHandler 未实现接口通过cglib实现)
说说dubbo原理 为什么使用dubbo
微服务的优缺点 服务治理是什么
13.linux常用命令.生产环境问题定位. 这个也不会...只会最基础的命令
数据库这块的问题:
1.如何保证库存不超卖的解决方案 这个老师讲过,答上来了
2.抢红包方案设计
3.你之前的哪个项目最熟悉,说说这块的设计,有什么亮点,如果让你现在重新设计你会怎么办 这个就随便乱吹了~
4.有一个500G大文件,文件中每行是一个数字,写一个main方法对文件排序
5.有一个6000W行的订单表,现在有个需求,查询一个人的前100个订单,如何设计 这个我真不会了~~ 经验有限 完全想不到...
架构这块的问题, 我就是在这边挂了......
分布式消息队列:如果让你实现一个消息队列,该如何架构设计,说一下思路
分布式搜索引擎:1.es工作过程,如何实现分布式 2.es在数据量很大情况下们如何提高查询效率
高并发高可用架构解决方案:1.如何限流,降级 2.缓存如何使用,使用不当会有什么后果 3.如何熔断,熔断架构又哪些,说说原理
数据库分库分表:1.如何分库分表 2用过哪些分库分表框架如sharding 3.如何解决分库分表主键冲突的问题
分布式事务:如何实现分布式事务?数据一致性问题如何解决?如何补偿
系统吞吐量:怎么提高吞吐量?用过什么压测工具?之前做过的系统的并发性能如何?tps qps最高多少?
总结
这次面完之后, 也也发现了一些地方在讲的时候,感觉也没有理解,又有点讲不清的感觉, 准备再闭关再造一下,再准备好好梳理一下, 争取下次能面的好点,也希望大家能面到一份自己心仪的工作...