宝子们,你们要的面试题续集终于来啦~

很多小伙伴反馈过,以前这篇 Java核心知识点精心整理 太长了,打开时页面都要卡一下
所以为了提升阅读体验,这次的面试题会分成若干小章节,每章只装十道题~

开始吧!!

1、java有哪些类加载器?

  • 启动类(Bootstrap)加载器 BootClassPathHolder: 加载<JAVA_HOME>/lib下的jar包

  • 扩展类(Extension)加载器ExtClassLoader:加载<JAVA_HOME>/lib/ext下的jar包

  • 系统类(System)加载器AppClassLoader:加载我们自己项目中写的java文件编译而成的class文件,位于target/classes下

2、int和Integer有什么区别?

Integer是int的包装类,int则是java的一种基本数据类型,Integer的默认值是null,int的默认值是0;
JavaBean中我们应尽量使用Integer,打个比方,学生成绩如果用int,缺考怎么表示,0?那考0分的呢;-1?也可以,但没有null直观;

3、你在项目中如何保证缓存和数据库的一致性?

记住一句话,只要有引入缓存的地方,都不可能保证强一致性,所以这里的一致性是指最终一致性

方法很多,最常用的就是延时双删,先删除缓存,再操作数据库,完事儿再删除一次缓存

第二次删除缓存是为了避免 在第一次删除缓存之后,到操作数据库完成之前,这期间有新的查询过来,导致再次把旧数据生成缓存

4、如果你发现某个接口响应很慢,该怎么排查?

导致接口响应慢的原因太多了:网络、应用层、数据库事务、服务器自身、慢sql等

逐个来说

  • 网络:对于单个请求来讲,网络因素影响其实很小,除非网络挂了导致请求超时才能意识到;而对于大批量请求,每个请求慢10ms,请求多了,时间也就长了,这种情况可以检查下你的应用部署机和数据库机地理位置是不是隔得很远,比如一个在华东一个在西南,地理距离也会对请求响应时间产生影响,请求量越大越明显;
  • 应用层:就是我们敲的controller、service那些代码,这一层出问题很好解决,因为代码毕竟都是我们敲的嘛,一看日志就大概知道什么原因,最多的就是出现死循环(当然一旦出现死循环也不只是响应慢那么简单了);代码逻辑写的差点其实不会太影响性能,现在的cpu执行效率你尽管放心,再怎么优化也顶不了少一次io;
  • 数据库事务:检查下你的数据库是不是卡事务了,导致锁了很多表;
  • 服务器自身:服务器是不是卡了,cpu是不是炸了,内存是不是满了;
  • 慢sql:这一层出问题的几率很大,同一组查询结果,由于sql不同,耗时能相差几百上千倍,可以通过查看sql执行计划来排查问题,详见 mysql执行计划解析

5、调用ReentrantLock的lock方法后,如果当前线程没有获取到锁,它会怎么办?

不管是公平锁与否,都会进入clh队列,但是注意,线程不会在获取锁失败后立马入队,在真正入队之前会多次尝试再次获取锁,尝试次数跟是否公平锁有关:

公平锁

先tryAcquire尝试获取锁,如果失败,执行acquireQueued,acquireQueued内部会再次执行tryAcquire尝试获取锁,如果再失败,就入队;

非公平锁

先cas尝试获取锁,如果失败,执行tryAcquire再次尝试获取锁,如果还失败,执行acquireQueued,acquireQueued内部会再次执行tryAcquire尝试获取锁,如果再失败,入队;

6、判断一块内存空间是否会被垃圾回收器回收的标准有哪些?

  • 对象的引用被赋值为null,并且后面不再调用
  • 对象的引用被重新分配了内存空间
  • 对象的引用被赋予了新值

7、redis的持久化机制

所谓持久化机制就是保证 redis 挂掉再重启后,可以恢复数据

快照(默认)

默认开启,无需设置,有个参数 save m n,这表示m秒内进行了n次写操作就进行备份,而且可以设置多组,满足不同场景;这里备份有两种,一个是save(阻塞),一个是bgsave(异步),还有一种是自动化,redis的快照是采用bgsave;

AOF(AppendOnlyFile:只追加文件)

需手动开启,在redis.conf中开启appendonly,默认是no,改为yes,生成的日志文件名默认为appendonly.aof,可以修改,然后配置appendfsync,有三个选项,always、everysec和no:
默认是everysec,表示每秒同步一次,性能和数据可靠性都能兼顾,最坏情况会丢失不到2秒的数据;
no表示平时不进行同步,只会在redis关闭或者aof被关闭时同步,性能最佳,但是丢数据风险高;
always表示每次写操作都会同步,性能差,但是丢数据风险低;

8、Java变量的本质是什么?

String str = new String("123");

我们常说的变量,也就是上面这个str,其实就是个内存地址,真正的String对象在堆上

9、ConcurrentHashMap在jdk1.8相对于之前版本有什么区别?

1.7

基于Segment数组和HashEntry,Segment继承自ReentrantLock,懂了吧,它自然就有了锁的基本功能;每个Segment数组中都有多个HashEntry,我们的数据都存在HashEntry里面,每次需要修改数据时,先对HashEntry所在的Segment加锁,其它Segment不受影响,分段锁就是这么来的;

1.8

整体实现很像HashMap,在它基础上引入了synchronized,和大量的CAS操作,以及大量的volatile关键字,所以1.8中ConcurrentHashMap的优势在于锁的粒度更小;

10、mysql支持哪些索引结构?

这是从navicat中截的图,有眼睛的小伙伴可以看到mysql支持B+树和hash
但是!!!
其实我们只能建BTREE索引,hash索引是不能人为创建的,mysql官方文档中有提到

InnoDB utilizes hash indexes internally for its Adaptive Hash Index feature
贴心翻译:InnoDB内部利用哈希索引实现其自适应哈希索引功能

只有mysql认为应该建hash索引的时候才会建,不信的话你建个hash索引保存,会发现变成了BTREE

再来个冷知识,hash索引全称:innodb_adaptive_hash_index,翻译成人话就是 innodb自适应hash索引,懂了吧


续集传送门 那些让面试官直呼内行的Java知识点(二)

如文中有错,请及时指出~

ok我话说完

那些让面试官直呼内行的Java知识点(一)相关推荐

  1. 那些让面试官直呼内行的Java知识点(二)

    接上一篇 那些让面试官直呼内行的Java知识点(一) 其实此系列并非全是Java知识点,但都是作为Java语言开发者应该掌握的,好兄弟不骗好兄弟~ 1.mysql中char和varchar有什么区别? ...

  2. 漫画:什么是B+树,B+树层数计算(面试官直呼内行)

    文章目录 1.什么是B+树 2.B+树层数计算(面试官直呼内行) 1.什么是B+树 一个m阶的B树具有如下几个特征: 1.根结点至少有两个子女. 2.每个中间节点都包含k-1个元素和k个孩子,其中 m ...

  3. 不会吧,不会吧,全网最细汉诺塔讲解,不会有人不知道吧。面试官直呼内行,看完只想默默找水喝(C语言)

    最干hanoi,看完直呼口干舌燥 Hanoi(汉诺塔问题) 一.什么是汉诺塔 二.分析 1.移动过程 2.应用思想+函数雏形 3.部分代码 三.总代码 四.递归调用 OVER Hanoi(汉诺塔问题) ...

  4. 手写HashMap,快手面试官直呼内行

    手写HashMap?这么狠,面试都卷到这种程度了? 第一次见到这个面试题,是在某个不方便透露姓名的Offer收割机大佬的文章: 这--我当时就麻了,我们都知道HashMap的数据结构是数组+链表+红黑 ...

  5. Spring MVC和Spring Boot有什么区别? 这样答,面试官直呼666

    Spring MVC和Spring Boot有什么区别? 这样答,面试官直呼666 作为初级程序员,这样的问题在面试中,也被问到过,随着越来越了解,发现以前自己答的真水. 一般的回答 ​ 先来说说我以 ...

  6. Spring 事务失效的 8 大场景,面试官直呼666...

    前几天发了一篇文章里面有一个关于事务失效的问题: 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景? 其中有个热心粉丝留言分享了下,我觉得总结得有点经验,给置顶了: ...

  7. 老司机都在用的浏览器,体积小功能齐全,直呼内行

    现在市面上的浏览器简直是多不胜数,虽然数量多,但是好用的并不多.尤其是某些大厂的浏览器,无用的功能越来越多,越来越臃肿,体积也越来越大,使用体验还不好,有时候甚至不如一些小众浏览器.今天给大家安利2款 ...

  8. 微信8.0重磅更新,QQ直呼内行

    昨天微信就发布了iOS 8.0,可以在App Store 进行更新,安卓的还要等等.版本号终于从 7 升级到 8,不难看出这将是微信近两年变化最大的版本. 升级 iOS 微信到 v8.0 版后,第一次 ...

  9. 面试官:哪些原因会导致JAVA进程退出?

    面试官:哪些原因会导致JAVA进程退出? 无外乎三种情况. linux的OOM killer杀死 JVM自身故障 jvm的OOM导致进程退出(很罕见,我至今没遇见过) 引言 linux的OOM kil ...

最新文章

  1. C#获取数据库表信息,列信息
  2. JAVA中流水账的实现_流水账式java基础Summary
  3. 【BZOJ3630】[JLOI2014]镜面通道 几何+最小割
  4. live555 源码分析:RTSPServer 组件结构
  5. LeetCode 32. 最长有效括号(栈DP)
  6. 检索函数retrieve
  7. asp.net mysql 读写分离_[ASP.net教程]SqlSugar ORM已经支持读写分离
  8. [列联相关] 列联系数计算及假设检验
  9. excel 两组数据交点_让科研人相见恨晚的技巧,用Excel做柱状图、箱型图及数据分析!(转载自ZSCI)...
  10. 易方达、鹏华、京东数科基金投顾访谈
  11. python库中文手册_Python3.8.1标准库参考中文手册(The Python Library Reference) 高清pdf版...
  12. java 32位无符号整数_Java中32位无符号数的取法
  13. 下、Hadoop环境搭建——通过Xshell6连接VMware正式配置Hadoop
  14. Vue 下载本地静态资源static文件夹
  15. 欢乐喜剧人宋晓峰吟诗大全
  16. 现实迷途 第二十章 峰回路转
  17. ionic安卓打印终极解决方案,支持USB打印
  18. java tomcat 404配置_在Tomcat中配置404自定义错误页面详解
  19. Spring Boot 2.0 配置图文教程
  20. CSS 开源资源大全收集

热门文章

  1. 性能测试平台搭建及简单使用(jmeter分布式+influxdb2.0+grafana)附性能测试报告
  2. Linux 启动时间优化实战,2.41 秒启动应用!
  3. 不支持IE8及以下版本
  4. werfault进程使用CPU率高
  5. Windows 在目录中搜索哪个文件中有指定字符串
  6. css实现图片自动渐变切换、element-plus 的修改el-table的(边框线为虚线、表头样式)
  7. jsonp无X-Requested-With 及其深扒
  8. 广域网(WAN)简介
  9. 通读Docs - 《OPL1000 自学整理教程》
  10. 2020-07 前端技术汇总