面试题整理

java基础:
0、synchornized和volatile的区别,以及如何使用?
1、synchornized与lock区别?
2、volatile关键字有什么用处?
3、HashMap底层数据结构是什么?扩容机制是如何实现的?HashMap怎么解决碰撞问题的?
4、设计模式有哪些?你实际使用过哪些?
5、ConcurrentHashMap 底层如何实现的?
6、ArrayList ,Vector,LinkedList 区别?
7、注解的原理是什么?
8、java中有哪些集合类?

8、创建线程的方式有哪些?
9、线程池的几个核心参数是什么?
10、线程池中线程数量变多,说下运行的过程?
11、如何配置线程池参数?
12、讲一下jvm内存模型?
13、Java内存区域和内存模型二者区别?
14、什么是双亲委派机制?
15、JVM内存溢出了,如何排查问题?
16、常见的垃圾回收器有哪些?cms和G1区别?
17、怎么做JVM调优?
18、怎么理解分布式和微服务,为什么要拆分服务,会产生什么问题,怎么解决这些问题?
19、怎么理解幂等性,有遇到过实际场景么,怎么解决的,为什么用redis,redis过期了或者数据没了怎么办
20、kafka是怎么保证高可用性的,讲讲它的设计架构,为什么读写都在主分区,这样有什么优缺点
21、Linux如何查看日志,为什么?
22、反爬虫的机制,有哪些方式?
23、负载均衡怎么做的呢,有哪些策略?
24、讲一下常见编码方式?
25、utf-8编码中的中文占几个字节;int型几个字节?
26、静态代理和动态代理的区别,什么场景使用?
27、Java中实现多态的机制是什么?
28、什么是深拷贝和浅拷贝?
29、死锁的四个必要条件?
30、怎么避免死锁?
31、断点续传的实现?
32、什么是 java 序列化?什么情况下需要序列化?
33、throw 和 throws 的区别?

开源框架:
1、spring中IOC和AOP怎么理解?分别用了哪些设计模式?
2、简要描述Spring Bean生命周期?
3、BeanFactory&FacotryBean的区别?
4、Spring Cloud组件有哪些,自己对哪个最了解,讲解一下?
5、Spring是如何解决循环依赖的问题的?比如A autowired B,Bautowired A,内部是如何是如何实现的?
6、自定义注解?

数据库:
1、简要描述SQL语句执行过程?
2、mysql的索引引擎、存储引擎,有哪些,有什么区别?
3、sql优化思路?
4、最左前缀原则是什么?
5、mysql持久化机制是什么?
6、binlog、redolog、undolog,有什么区别?
7、是否用过分库分表,主流分库分表中间件是如何选型的?
8、添加索引的缺点?
9、亿级的数据必须使用like进行查询,如何优化?
10、回表的概念?
11、InnoDb的事务隔离级别?
12、MySql的锁有哪些?

8、redis为什么这么快?
9、Redis的5种基础数据类型及其对应数据结构?
10、redis和memcached、mongodb的区别
11、缓存雪崩、缓存穿透、缓存击穿,概念是什么,如何解决呢?
12、怎么保证缓存和数据库中的数据的一致性?
13、Redis持久化机制有哪些?
14、AOF和RDB区别?AOF和RDB都如何使用?
15、redis的高级用法了解哪些,都用在什么场景?
16、redis的缓存淘汰机制?
17、分布式锁如何实现?
18、如何使用Redis处理热点数据?

数据结构:
1、有哪些常见的树形结构?分别属于二叉树还是多叉树?
2、红黑树有什么特点?
3、B树有什么特点?
4、B+树有什么特点?
5、树、链表、数组,查询时间复杂度分别是多少?

网络协议:
1、网址栏输入网址,按下回车之后发生了什么?
2、三次握手的过程?
3、session 和 cookie 有什么区别?
4、说一下 session 的工作原理?
5、什么是 XSS 攻击,如何避免?
6、什么是 CSRF 攻击,如何避免?
7、为什么不建议使用长链接?使用大量长连接,会有什么问题?
8、七层模型都有哪些?四层模型有哪些?五层模型有哪些?
9、get 和 post 请求有哪些区别?
10、如何实现跨域?

中间件:
1、Apollo有接触吗?
2、ElasticJob有接触吗?
3、MyCat有了解吗?
4、sharding-jdbc有了解吗,它和MyCat有什么区别?

项目设计:
1、设计一个"微信摇一摇"模块,讲一下需要记录什么数据,使用什么技术实现?
2、设计一个"秒杀系统",讲一下如何实现,使用哪些技术,有什么注意点?
3、设计一个"社交模块",要求能够实现A的好友圈,与B的好友圈,进行交集,查询共同好友,讲下大致思路?
4、设计一个"电梯模型系统",全市包括"住宅"、“公寓”、"写字楼"等建筑,安装电梯时,需要进行参数计算,使用开发的系统进行相关数据统计,使全市电梯耗能最低。将一些需要收集哪些数据?

其他:
1、你项目有什么难点?
2、最近有在学习什么?有没有学习规划?
3、对哪块源码感兴趣呢?
4、用几个关键词形容下自己?
5、你是怎么针对面试,进行查漏补缺的?
6、你觉得哪些特质适合这个岗位?
7、有过这类软件的开发经验吗?
8、如果面试通过了,会有顾虑不接受offer吗?
9、对个人薪资,有什么期望?

MySQL思考问题:

1、MySQL 建立了业务字段索引,也建立了主键字段索引,当没命中任何一个索引时,查询的数据是怎么获取的呢?(查询不走索引就是遍历主B+树)
2、“N叉树”的N值在MySQL中是可以被人工调整的么?(5.6以后可以通过page大小来间接控制)
3、没有主键的表,有一个普通索引。怎么回表?(没有主键的表,innodb会给默认创建一个Rowid做主键,rowid就是聚集索引)
4、查看索引数的结构,比如多少个层,多少节点?(如果要精确的,就要解数据文件,这个工具可以看看 https://github.com/jeremycole/innodb_diagrams)
5、页分裂的概念,当主键自增时,为什么不会出现页分裂?(往后追加就好了)
6、在建立联合索引的时候,如何安排索引内的字段顺序(我们的评估标准是,1、索引的复用能力;2、考虑的原则就是空间)
7、索引下推和回表,有什么区别?(“select * from tuser where name like ‘张%’ and age=10 and ismale=1” MySQL 5.6之前,建立联合索引后,通过索引下推,需要根据业务索引找到主键id,再校验age是否等于10;MySQL 5.6 引入的索引下推优化,在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数)
8、事务隔离 -> 事务回滚记录 -> 为什么建议你尽量不要使用长事务(1、事务回滚记录过大,占用空间;2、占用锁资源,也可能拖垮整个库)
9、InnoDB搜索引擎下,更新一条单表SQL,记录日志操作几次磁盘?批量更新一批单表数据,操作几次磁盘?(3次redolog两次 binlog 1次;并发更新的时候会合并写)
10、物理日志redo log和逻辑日志binlog,其中的“物理”、“逻辑”如何理解?(逻辑日志可以给别的数据库,别的引擎使用,已经大家都讲得通这个“逻辑”;物理日志就只有“我”自己能用,别人没有共享我的“物理格式”;)
11、数据库锁分类(全局锁、表级锁、行级锁;全局锁就是对整个数据库实例加锁,全局锁的典型使用场景是,做全库逻辑备份)
12、要删除一个表里面的前10000行数据,有以下三种方法可以做到,你会选择哪一种方法呢?为什么呢?(选第二种,第一种容易引起长事务,第三种容易引起锁冲突)
第一种,直接执行delete from T limit 10000;
第二种,在一个连接中循环执行20次 delete from T limit 500;
第三种,在20个连接中同时执行delete from T limit 500。
13、优化器选择问题,select * from t where (a between 1 and 1000) and (b between 50000 and 100000) order by b limit 1;索引两个单字段:a、b。如何解决优化器选择索引问题?(1、采用force index强行选择一个索引;2、把“order by b limit 1” 改成 “order by b,a limit 1”;3、删掉索引b)
14、InnoDB的redo log写满了,会出现什么现象?(更新数据暂停,将redo log中数据,处理一部分,留出部分空间再继续进行,业务感受是有几率性的;)
15、为什么用B+树,不用B树?1、页大小 -> 引发树高;2、B+树不高,稳定性更好;3、链表结构,页加载过程,是加载前一页&后一页,速度比较快;

你可能感兴趣的:(java,面试,架构)