华为OD面经

文章讨论了如何判断代码质量,包括可读性、可扩展性和可复用性。提到了String类不可被继承,因为它是final的。ConcurrentHashMap的底层实现结合了Node数组、链表和红黑树,并使用synchronized和CAS确保并发安全。此外,介绍了CAS并发原语的工作原理以及红黑树的特性。还涉及了索引的B+树结构、线程池核心线程数的设计考量,以及MyBatis的一级缓存和二级缓存机制。
摘要由CSDN通过智能技术生成
1、怎么判断一段代码写的是比较好的?或者说怎么保证写的代码质量

可读性、可扩展性、简洁性、可复用性

2、String是否继承

String(public final class String)不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。

3、ConcurrentHashMap的底层结构

         ConcurrentHashMap底层是Node数组+链表+红黑树的数据结构来实现,当链表长度大于8时,链表自动转为红黑树;并发控制使用synchronized代码块和CAS来操作。

4、CAS

        CAS(Compare-And-Swap)是比较并交换的意思,它是一条 CPU 并发原语,用于判断内存中某个值是否为预期值,如果是则更改为新的值,这个过程是原子的。

 CAS机制当中使用了3个值:内存值V,旧的预期值A,计算后要修改的新值B

5、红黑树
(1)节点是红色或黑色
(2)根是黑色
(3)叶子节点(外部节点,空节点)都是黑色,这里的叶子节点指的是最底层的空节点(外部节点),null节点才是叶子节点,null节点的父节点在红黑树里不将其看作叶子节点
(4)红色节点的子节点都是黑色
        红色节点的父节点都是黑色
        从根节点到叶子节点的所有路径上不能有 2 个连续的红色节点
(5)从任一节点到叶子节点的所有路径都包含相同数目的黑色节点

6、索引的底层结构

        索引的底层是B+树,B树中的每个节点上存储有数据和下一个节点的内存地址,B+树中的节点只有叶子节点存储数据,其他节点上只有下一个节点的内存地址。

7、线程池的核心线程数设计应该从哪些方面考虑?

        线程正常运行进行计算操作,认为线程在单位时间内的CPU使用率为100%;线程进行IO操作的时候,认为线程是挂起的;

        如果IO操作需要95ms,计算操作需要5ms,为了保证CPU的使用率为100%,那么需要的线程数为 总的任务时长/计算时长,为20个,如果是N核CPU,那么线程数应该为20N。

        现在考虑服务器每秒响应进程请求次数(QPS),上面整个任务进程的处理时长为100ms,那么CPU每秒可以处理进程次数为10,那么N个CPU的服务器可以处理请求的次数为200N,这个是理想的请求次数,具体还是需要根据实际考虑。

8、一级缓存和二级缓存
一级缓存

默认开启,是sqlSession级别的,sqlSession关闭,缓存就清空,增删改会刷新缓存

一级缓存就是一个map

缓存失效的情况

(1)查询不同的东西

(2)增删改操作,可能会改变原来的数据,所以必定会刷新缓存

(3)手动清理

(4)查询不通的Mapper.xml

二级缓存

Mapper文件中加入<cache/>标签即可

二级缓存也称为全局缓存,基于namespace级别的,即在一个Mapper.xml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值