why哥被阿里一道基础面试题给干懵了,一气之下写出万字长文。 (5)

简介: why哥被阿里一道基础面试题给干懵了,一气之下写出万字长文。 (5)

怎么定义稀疏


所以,在 switch 里面,我们怎么定义稀疏呢?


文档中没有写。



文档里没有写的,都在源码里面。


于是我搞了个 openJDK,我倒要看看源码里面到底什么是 TMD 稀疏。


经过一番探索,找到了这个方法:


com.sun.tools.javac.jvm.Gen#visitSwitch


这里我不做源码解读,我只是想单纯的知道源码里面到底什么 TMD 是 TMD 稀疏。


image.png


image.png


断点时候时候各个参数如下:


image.png


标号为 ① 的地方是代表我们确实调试的是预期的程序。


标号为 ② 的地方我们带入到上面的表达式中,可以求得最终值:


image.png


hi 是 case 里面的表达式对应的最大值,也就是 2。


lo 是 case 里面的表达式对应的最小值,也就是 0。


nlabels 代表的是 case 的个数,也就是 3。


image.png


所以带入到上面的代码中,最终算出来的值 16<=18,成立,使用 tablewitch。


这就叫不稀疏。


假设我们把最后一个 case 改为 5:


image.png


image.png


最终算出来的值 19<=18,不满足,使用 lookupswitch 。


这叫做稀疏。


所以现在我们知道了到底什么是 TMD 稀疏。


在源码里面有个公式可以知道是不是稀疏的,从而知道使用什么指令。


写到这里我觉得其实我应该可以住手了。


但是我还在《Java 虚拟机规范》的文档里面挖到了一句话。我觉得得讲一下。


switch表达式支持的类型


在《Java 虚拟机规范》文档中的这一部分,有这样的一句话:


image.png




目录
相关文章
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
监控 Java 数据安全/隐私保护
阿里面试:SpringBoot启动时, 如何执行扩展代码?你们项目 SpringBoot 进行过 哪些 扩展?
阿里面试:SpringBoot启动时, 如何执行扩展代码?你们项目 SpringBoot 进行过 哪些 扩展?
|
负载均衡 架构师 Cloud Native
阿里面试:服务与发现 ,该选 CP 还是 AP?为什么?
阿里面试:服务与发现 ,该选 CP 还是 AP?为什么?
阿里面试:服务与发现 ,该选  CP 还是 AP?为什么?
|
SQL Java 数据库连接
阿里腾讯互联网公司校招 Java 面试题总结及答案解析
本文总结了阿里巴巴和腾讯等互联网大厂的Java校招面试题及答案,涵盖Java基础、多线程、集合框架、数据库、Spring与MyBatis框架等内容。从数据类型、面向对象特性到异常处理,从线程安全到SQL优化,再到IOC原理与MyBatis结果封装,全面梳理常见考点。通过详细解析,帮助求职者系统掌握Java核心知识,为校招做好充分准备。资源链接:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
647 2
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
例如,在一个有 10 个节点的系统中,增加一个新节点,只会影响到该新节点在哈希环上相邻的部分数据,其他大部分数据仍然可以保持在原节点,大大减少了数据迁移的工作量和对系统的影响。狠狠卷,实现 “offer自由” 很容易的, 前段时间一个武汉的跟着尼恩卷了2年的小伙伴, 在极度严寒/痛苦被裁的环境下, offer拿到手软, 实现真正的 “offer自由”。在 3 - 5 年的中期阶段,随着业务的稳定发展和市场份额的进一步扩大,订单数据的增长速度可能会有所放缓,但仍然会保持在每年 20% - 30% 的水平。
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
存储 算法 架构师
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
|
算法 NoSQL 应用服务中间件
阿里面试:10WQPS高并发,怎么限流?这份答案让我当场拿了offer
在 Nacos 的配置管理界面或通过 Nacos 的 API,创建一个名为(与配置文件中 dataId 一致)的配置项,用于存储 Sentinel 的流量控制规则。上述规则表示对名为的资源进行流量控制,QPS 阈值为 10。resource:要保护的资源名称。limitApp:来源应用,default表示所有应用。grade:限流阈值类型,1 表示 QPS 限流,0 表示线程数限流。count:限流阈值。strategy:流控模式,0 为直接模式,1 为关联模式,2 为链路模式。
阿里面试:10WQPS高并发,怎么限流?这份答案让我当场拿了offer