字节一面试题分享

自我介绍

Java中什么是不可变类,如何设计不可变类?

String是不可变的;

除了string还有哪些不可变类?

所有基本类型的包装类都是不可变类

不可变类:使用private修饰,不提供setter方法

Java中常用的集合?

ArrayList、Vector、LinkedList、HashSet、TreeMap、HashMap、HashTable、ConcurrentHashMap;分别解释各个类的数据结构和区别

LinkedBlockQueue的实现原理?

put和take实现原理?

入队和出队可以同时操作吗?可以。通过出队锁和入队锁实现

线程池几大核心参数?几大组件?

任务和线程池参数的阈值的关系?

线程池的常见的拒绝策略?

new一个线程池,核心线程数多大比较合适?,有没有调过?

io计算型和cpu计算型

volatile有哪些特性?

可见性、有序性

有序性如何保证? 内存屏障

单例模式的懒汉式,如何保证线程安全?

双重检测法如何使用

为什么使用volatile修饰单例对象?

禁止指令重排序找

为什么双重检测法中为什么有两个if?不要第二个if会怎么样?

RenntratLock如何实现?

state和aqs队列 node(线程名、头指针)

Node节点的状态?

公平锁和非公平锁是怎样?

非公平锁中;会进行cas操作,成功持有锁,没有成功,则过一段时间再去cas操作

RenntratLock提供的Condition释放的原理?

线程之间想要通信?

wait、notify(notifyAll)、join、countdownlatch、cyclibarrier

JVM相关:

JVM内存结构

线程私有:虚拟机栈、本地方法栈、程序计数器

线程共享:堆、元空间

元空间比较重要的区域:常量池

常量池的作用?

字符串常量池:String a = new String("a"); 创建几个对象?

参考:Java String字符串比较问题_秒怂_z-CSDN博客_java string 比较

使用常量池的方法:intern方法 和 显示赋值给一个变量

intern方法 在jdk1.7和jdk1.8中区别?

常量池中放一个字符串“a”的常量;在堆中创建一个对象;返回把引用返回。

String s1= "a"

String s2= "b"

String s3 = "ab"

String s4 = s1 + s2 ->相当于new String对象,append(a).append(b).toString()

String s5 = "a" + "b" ->编译时是做的常量池的拼接

s3 == s4 -> false

s3 == s5 -> true

垃圾回收算法?优缺点?

标记清除算法

复制算法

标记整理算法

垃圾回收工作的机制?

堆分为几个区域?年轻区、老年代

区域比例?

年轻代使用什么算法?

创建的对象首先放到哪个区域?什么时候会放入到老年代?什么时候触发垃圾回收?

晋升年龄默认最大是15

cms默认是多少?cms是老年代回收器和阈值没有关系;年轻代晋升到老年代,默认需要15次;

CMS使用场景和目标?

目标:减少stw

工作原理:初始标记、并发标记、重新标记、并发清理

有STW阶段:初始标记和重新标记

一次会把垃圾清空干净吗?在并发清理阶段会产生浮动垃圾,只能到下次进行清理

cms什么时候退化?

空间不足时,cms使用标记清除算法,会产生很多的碎片,如果老年代没有连续的内存空间,实际上4m放不下,此时触发一次gc,此时会触发失败,此时就会退化成单线程垃圾回收器,垃圾回收时间比较慢

mysql

msql中的索引数据结构

使用b+数

为什么不使用红黑树?

因为红黑数需要平衡、红黑数子节点只有两个节点,深度变深后会进行多次的磁盘io操作,降低性能

为什么不使用b树?

b树每个节点存放索引+数据,b+只有叶子节点才存储数据。--》数据大小一定情况下,存的节点越多,磁盘io次数会越少?

联合索引?

a,b,c建联合索引,此时会建几个索引表?

建立三个索引:a ab abc

分析一下语句会不会走索引?

select * from test where a=? and b =? and c = ?;

select * from test where a =? and c = ? and b = ?;

select * from test where a= ? and b> ? and c=?; -> 走 a、 ab索引

select * from test where a!=?; ->不走索引吗?

select * from test where b=? and c= ?;不走索引吗?

最后推出索引的匹配原则:最左匹配原则

Spring传输特性有哪些?

参考:看完就明白_spring事务的7种传播行为_gnixlee的博客-CSDN博客_事务的传播行为

required:如果存在事务上下文,则加入该事务,否则开启一个新事务

supports:如果存在事务上下文,则加入该事务,否则以非事务执行

mandatory:如果存在事务上下文,则加入该事务,否则抛出异常

requries_new:总是开启一个新事务,如果存在事务上下文,则把这个事务挂起;两个事务互相不影响

not_supported:总是以非事务执行,有事务上下文则被挂起

never:总是以非事务执行,有事务上下文则抛出异常

nested:外层事务失败,则内层事务也会回滚;但是内层事务失败不会影响外层事务,只会回到外层事务的保存点

Spring的事务隔离级别?

参考:Spring事务传播属性和隔离级别 - Eunice_Sun - 博客园

默认级别:使用数据库默认隔离级别:mysql使用可重复读级别

读未提交:产生【脏读】

读已提交:解决【脏读】

可重复读:解决【不可重复读】

序列化:解决【脏读】

mysql事务的四个特性:

原子性、一致性、隔离性、持久性

cap理论、base理论?

https://www.cnblogs.com/stateis0/p/9062123.html

项目中使用:ap和最终一致性

设计题:

使用redis实现消息队列?

https://www.cnblogs.com/-wenli/p/12777703.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值