实在智能JAVA实习一面
八股
1.自我介绍
2.说一下java的锁(synchornized + ReentrantLock)
3.在java中他们都被使用到了哪些场景中 哪些组件中
4.concurrentHashmap 1.7和1.8并发上有什么区别(1.7锁分段,1.8锁节点,sychornized + CAS)
5.都是什么锁?(1.7 ReentrantLock,1.8 sychronized)
6.说一下JVM
JVM是java虚拟机,实现了java一次编译,多次运行,实现了跨平台;
JVM 是 Java 程序运行的核心环境,它把 .class 文件加载到内存,进行字节码解释或者 JIT 编译,同时负责内存管理和垃圾回收。
7.说一下垃圾回收机制
这种让你讲一下XX概念,可以先从宏观的角度去讲清楚概念,再展开一些通用的方案,最后寻求面试官建议,可以将一些具体的细节,比如
垃圾回收的话一般我们指的就是一种动态的内存管理机制,在 Java 中是 JVM 这一层负责实现的,常见的 GC 相关的概念大体可以分为这几类
比如如何判断垃圾对象的,如引用计数,可达性分析、三色标记法 balbal
如何对垃圾对象进行回收的算法,标记清除,标记整理 balbal
在 JVM 层不同 JDK 版本,默认的 GC 也会一些差异,常见的 GC 垃圾回收器有 xxx xxx
8.多标、漏标现象了解吗
(多标:原本应被回收的白色对象,被错误的标记成了黑色的存活对象,从而导致这个对象没有被GC,产生了浮动垃圾,影响不大
漏标:原本应该是黑色的存活对象,但是没有被正确的标记上,导致被错误的GC,影响很大
CMS中解决漏标:增量更新,G1中解决漏标:原始快照)
9.如何自定义一个starter
(添加springboot依赖、实现自动配置、创建配置类入口文件)
10.mysql有几种日志
11.所有的存储引擎都有这三种日志吗 (myISAM没有undo redo 只有binlog)
12.这三种日志都是拿来干嘛的
13.你知道redolog的二阶段提交吗
(二阶段提交是为了更新mysql过程中,保证redolog和binlog数据一致性的一种手段
分为三个阶段:prepare阶段、binlog持久话、commit)
14.innodb引擎的索引结构
15.建立一个a,b,c索引,在b + 树上是怎么存储的,或者是它为什么一定要遵循最左前缀匹配原则
(a,b,c联合索引,只会创建一个索引树,叶子节点存放这三个字段+id值,但是是按照a,b,c这个顺序存储的,在构建的时候,会先按照a排序,a相同再按照b,b相同再按照c排序,所以要求你在where查询的时候,要包含最左边索引。)
16.如果一个字段是status 它的值只有0和1,这种情况你觉得要不要加索引
(正常情况下像男女这种字段,数据库中数据量各占差不多一半,加索引后mysql查询的时候因为过滤不掉太多数据,mysql优化器就直接走全表扫描了,这种情况加索引反而会有存储上的压力。
但是假如这两个字段区分度很大,比如任务类型的表,5%的数据都是待执行的任务,95%都是已完成的任务,那我们加索引,还是可以大大提高查询效率的。)
这种情况大部分直接就说区分度不大不走索引了,但是我觉得这种特例说一下可能会加分,当然有的面试官也可能觉得你话多
17.说一下各个版本的http
(http1.0:tcp+短连接,效率很差
http1.1: 默认长连接、请求管道化、新增host字段
http2.0: 支持请求和响应的并发传输、头部压缩+二进制格式提升传输效率、支持服务器主动推送资源
http3.0:传输协议不同,tcp->udp、quic协议建立连接更高效、网络切换时不需要重新建立连接)
18.假设MQ,通过路由方式进行消费,不是广播,由于上游业务流量突增导致消息堆积,怎么处理,注意是生产环境,上游已经疯狂告警了,现在怎么办
(这种线上故障排查整体回答思路:降级->解决->避免
降级:因为是路由形式,可以直接加机器扩容消费者实例,增加消费能力,快速把堆积的任务消费掉。
解决:临时止血解决后,接下来就是排查代码里哪里出现的问题导致的消息积压,比如可以提升消费者消费速度、降低生产者生产速度、清理过期消息、调整配置增加topic
避免:举一反三,故障后问题复盘,组会复盘)
实习部分略
反问:公司做什么的->给企业做rpa,agent
烤面筋~烤面筋~三元一串,五元两串