2020最全面试总结-五位20k朋友的面试题汇总

1.是否可以继承String类

String类是final类故不可以继承,一切由final修饰过的都不能继承(底层为final修饰的char数组)。

2.String和StringBuffer、StringBuilder的区别

可变性:
String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。
线程安全性
String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
性能
每次对String 类型进行改变的时候,都会生成一个新的String 对象,然后将指针指向新的String 对象。StringBuffer每次都会对StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

3.HashMap和HashTable区别

1).HashTable的方法前面都有synchronized来同步,是线程安全的;HashMap未经同步,是非线程安全的。
2).HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。
3).HashTable有一个contains(Objectvalue)功能和containsValue(Objectvalue)功能一样。
4).HashTable使用Enumeration进行遍历;HashMap使用Iterator进行遍历。
5).HashTable中hash数组默认大小是11,增加的方式是old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。
6).哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替求模。

4.HashMap实现原理

具体原理参考文章:
http://zhangshixi.iteye.com/blog/672697
http://www.admin10000.com/document/3322.html

4-1.hashmap put的过程

5.Concurrenthashmap实现原理

具体原理参考文章:
http://www.cnblogs.com/ITtangtang/p/3948786.html
http://ifeve.com/concurrenthashmap/

6.Java中如何实现代理机制(JDK、CGLIB)

JDK动态代理:代理类和目标类实现了共同的接口,用到InvocationHandler接口。
CGLIB动态代理:代理类是目标类的子类,用到MethodInterceptor接口。

6-1.动态代理和静态代理的区别

6-2.如何实现动态代理,动态代理执行流程

7.多线程的实现方式

继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。

8.如何停止一个线程

参考文章:https://www.cnblogs.com/greta/p/5624839.html

9.什么是线程安全

线程安全就是多线程访问同一代码,不会产生不确定的结果。

10.如何保证线程安全

对非安全的代码进行加锁控制;
使用线程安全的类;
多线程并发情况下,线程共享的变量改为方法级的局部变量。

11.synchronized如何使用

synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
1). 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2). 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3). 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4). 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。

12.synchronized和Lock的区别

主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。Lock的锁定是通过代码实现的,而synchronized是在JVM层面上实现的,synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。Lock锁的范围有局限性,块范围,而synchronized可以锁住块、对象、类。

13.请描述一下synchronized的底层

https://www.jianshu.com/p/aae0ed5bde08

14.如何实现分布式锁

15.Java线程池技术及原理

参考文章:
http://www.importnew.com/19011.html
http://www.cnblogs.com/dolphin0520/p/3932921.html

16.java并发包concurrent及常用的类

参考文章:
并发包诸类概览:http://www.raychase.net/1912
线程池:http://www.cnblogs.com/dolphin0520/p/3932921.html
锁:http://www.cnblogs.com/dolphin0520/p/3923167.html
集合:http://www.cnblogs.com/huangfox/archive/2012/08/16/2642666.html

17.Java-JVM内存模型及各个区域的OOM,如何重现OOM

参考文章:http://hllvm.group.iteye.com/group/wiki/2857-JVM

17-1.JVM内存调优

17-2.gc回收机制和原理

18.用什么工具可以查出内存泄漏

一. Memory
Analyzer-是一款开源的JAVA内存分析软件,查找内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse
RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。
二. JProbe-分析Java的内存泄漏。
三.JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中,GUI可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。
四. JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。
五. YourKit-.NET & Java Profiling业界领先的Java和.NET程序性能分析工具。
六.AutomatedQA -AutomatedQA的获奖产品performance profiling和memory debugging工具集的下一代替换产品,支持Microsoft,Borland, Intel, Compaq 和 GNU编译器。可以为.NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持.Net 1.0,1.1,2.0,3.0和Windows 32/64位应用程序。
七.Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块
八.业界首个机器学习指导的垃圾收集日志分析工具。GCeasy具有内置的智能功能,可以自动检测JVM和Android GC日志中的问题并为之推荐解决方案 https://gceasy.io/
九.thread 线程分析工具 https://fastthread.io/

19.Java内存管理及回收算法

参考文章:http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html

20.Java类加载器及如何加载类(双亲委派)

参考文章:
https://www.ibm.com/developerworks/cn/java/j-lo-classloader/(推荐)
http://blog.csdn.net/zhoudaxia/article/details/35824249

21.Springbean的加载过程(推荐看Spring的源码)

参考文章:
http://geeekr.com/read-spring-source-1-how-to-load-bean/
https://blog.csdn.net/qq_35927300/article/details/109598123(推荐)

22.Springbean的实例化(推荐看Spring的源码)

参考文章:
http://geeekr.com/read-spring-source-two-beans-initialization/
https://blog.csdn.net/qq_35927300/article/details/109598123(推荐)

23.Spring如何实现AOP和IOC(推荐看Spring的源码)

参考文章:http://www.360doc.com/content/15/0116/21/12385684_441408260.shtml

24.Springbean注入方式

参考文章:http://blessht.iteye.com/blog/1162131

25.Spring的事务管理

参考文章:http://blog.csdn.net/trigl/article/details/50968079

26.Spring事务的传播特性

参考文章:http://blog.csdn.net/lfsf802/article/details/9417095

27.springmvc原理

参考文章:http://blog.sina.com.cn/s/blog_7ef0a3fb0101po57.html

28.如何理解分布式锁

参考文章:
http://blog.csdn.net/zheng0518/article/details/51607063
http://blog.csdn.net/nicewuranran/article/details/51730131

29.深度优先和广度优先算法

推荐看书籍复习!可参考文章:
http://blog.163.com/zhoumhan_0351/blog/static/3995422720098342257387/
http://blog.163.com/zhoumhan_0351/blog/static/3995422720098711040303/
http://blog.csdn.net/andyelvis/article/details/1728378
http://driftcloudy.iteye.com/blog/782873

30.排序算法及对应的时间复杂度和空间复杂度

推荐看书籍复习!可参考文章:
http://www.cnblogs.com/liuling/p/2013-7-24-01.html
http://blog.csdn.net/cyuyanenen/article/details/51514443
http://blog.csdn.net/whuslei/article/details/6442755

31.B+树

参考文章:http://www.cnblogs.com/syxchina/archive/2011/03/02/2197251.html

32.hash算法及常用的hash算法

参考文章:http://www.360doc.com/content/13/0409/14/10384031_277138819.shtml

33.产生死锁的必要条件

参考文章:http://blog.sina.com.cn/s/blog_5e3604840100ddgq.html

34.死锁预防

参考文章:http://blog.sina.com.cn/s/blog_5e3604840100ddgq.html

35.数据库事务隔离级别

参考文章:http://blog.csdn.net/fg2006/article/details/6937413

35-1.数据库四大特性

36.乐观锁和悲观锁

参考文章:http://www.open-open.com/lib/view/open1452046967245.html

37.SQL注入的原理,如何预防

参考文章:https://www.aliyun.com/zixun/content/3_15_245099.html

38.数据库索引的实现(B+树介绍、和B树、R树区别)

参考文章:
http://blog.csdn.net/kennyrose/article/details/7532032
http://www.xuebuyuan.com/2216918.html

39.SQL性能优化

参考文章:
http://database.51cto.com/art/200904/118526.htm
http://www.cnblogs.com/rootq/archive/2008/11/17/1334727.html

40-1.数据库索引的优缺点以及什么时候数据库索引失效

参考文章:
http://www.cnblogs.com/mxmbk/articles/5226344.html
http://www.cnblogs.com/simplefrog/archive/2012/07/15/2592527.html
http://www.open-open.com/lib/view/open1418476492792.html
http://blog.csdn.net/colin_liu2009/article/details/7301089
http://www.cnblogs.com/hongfei/archive/2012/10/20/2732589.html

40-2.组合索引

41.mysql分库分表

42.springboot加载过程

43.doubbo和springcloud的区别

44.JAVA原子类-及内部原理

45.redis

参考文章:https://www.cnblogs.com/javazhiyin/p/13839357.html

46.mybatis缓存机制详解

mybatis提供了缓存机制减轻数据库压力,提高数据库性能

mybatis的缓存分为两级:一级缓存、二级缓存

一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效

二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的

参考文章:https://www.cnblogs.com/winclpt/articles/7511672.html

47.springcloud常用组件

润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。

Ribbon,客户端负载均衡,特性有区域亲和、重试机制。

Hystrix,客户端容错保护,特性有服务降级、服务熔断、请求缓存、请求合并、依赖隔离。

Feign,声明式服务调用,本质上就是Ribbon+Hystrix

Stream,消息驱动,有Sink、Source、Processor三种通道,特性有订阅发布、消费组、消息分区。

Bus,消息总线,配合Config仓库修改的一种Stream实现,

Sleuth,分布式服务追踪,需要搞清楚TraceID和SpanID以及抽样,如何与ELK整合。

独挑大梁,独自启动不需要依赖其它组件。

Eureka,服务注册中心,特性有失效剔除、服务保护。

Dashboard,Hystrix仪表盘,监控集群模式和单点模式,其中集群模式需要收集器Turbine配合。

Zuul,API服务网关,功能有路由分发和过滤。

Config,分布式配置中心,支持本地仓库、SVN、Git、Jar包内配置等模式,

每个组件都不是平白无故的产生的,是为了解决某一特定的问题而存在。

Eureka和Ribbon,是最基础的组件,一个注册服务,一个消费服务。

Hystrix为了优化Ribbon、防止整个微服务架构因为某个服务节点的问题导致崩溃,是个保险丝的作用。

Dashboard给Hystrix统计和展示用的,而且监控服务节点的整体压力和健康情况。

Turbine是集群收集器,服务于Dashboard的。

Feign是方便我们程序员些更优美的代码的。

Zuul是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点IP端口信息,加强安全保护的。

Config是为了解决所有微服务各自维护各自的配置,设置一个统一的配置中心,方便修改配置的。

Bus是因为config修改完配置后各个结点都要refresh才能生效实在太麻烦,所以交给bus来通知服务节点刷新配置的。

Stream是为了简化研发人员对MQ使用的复杂度,弱化MQ的差异性,达到程序和MQ松耦合。

Sleuth是因为单次请求在微服务节点中跳转无法追溯,解决任务链日志追踪问题的。

这里附上一个spring cloud组件总结链接:https://blog.csdn.net/yejingtao703/article/details/78331442/

48.netty相关面试题

参考文章:https://baijiahao.baidu.com/s?id=1669639041722396699&wfr=spider&for=pc

49.最后附上VIP学习视频(需要的朋友自取):

spring解读源码:https://pan.baidu.com/s/1zaL1mlwuVvTqmd32hZkHrg 提取码: txpn
深入理解Java内存模型JMM与内存屏障: https://pan.baidu.com/s/1M9EjvjYQ0UPfjlWfzGcqcQ 提取码: dbu2
并发编程精髓之剖析ThreadLocaL.zip: https://pan.baidu.com/s/1BSZa3koAKR38agkk5J-2uA 提取码: eq2t
吃透动态代理 一堂课解密Spring AOP源码.zip: https://pan.baidu.com/s/157tjEjFkdYW_qAIFvOJMWw 提取码: dnx4
千万级并发架构优化策略~限流.zip: https://pan.baidu.com/s/1sqp1LEgVFA6r6ns9oVjWIQ 提取码: zwu6
双十一技术拾遗,怎么让缓存稳如磐石?.zip: https://pan.baidu.com/s/1J73DVuXQcRXj2vIYokV0Hw 提取码: tdr3
快速搞定RabbitMq中间件.zip: https://pan.baidu.com/s/1QQchQFTbk_-ls6wNU-e5FQ 提取码: jddv

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值