Java复盘高途二面部分问题

new一个对象涉及到哪些内存区域?

比如写了一行代码:A a = new A(),涉及到的内存区域如下:

  1. 方法栈:引用a存放于对应的方法栈里
  2. 堆:new A()在堆上创建了一个类A的实例
  3. 方法区:类A的类信息、常量、静态变量等存储于方法区

除了new一个对象会涉及到对象的创建之外,还有什么方式会创建对象?

new、反射、反序列化、Object的clone方法

慢sql是什么?如何排查项目里的慢sql

  1. 慢sql顾名思义是指查询时间较长的sql语句。
    这个时间多长才算慢呢,每个业务或者每个公司的定义可能都不一样,mysql的慢查询日志有个参数叫做long_query_time,这个参数定义了多长时间视为慢查询,默认是10秒,但是怎么可能等待一个sql等10秒!!!!一般都是毫秒级别的吧。
    • 开启慢查询日志:# 是否开启慢查询日志,1表示开启,0表示关闭 slow_query_log=1,要设置参数long_query_time,一般可设置为1
    • 使用监控工具来监控慢查询:比如skywalking
    • 使用explain分析执行计划,查看sql是否命中索引,explain各个字段含义:
列名含义
idselect查询的序列标识符
select_typeselect关键字对应的查询类型
table查询的表名
partitions匹配的分区,对于未分区的表,值为null
type表的访问方法
possible_keys可能用到的索引
key实际用到的索引
key_len所选索引的长度
ref当使用索引等值查询时,与索引作比较的列或常量
rows预计要读取的行数
filters按表条件过滤之后,留存的记录数的百分比
Extra附加信息

详细可以参考这篇文章 MySQL执行计划
重点关注type和key这两列,type常见的值有ref、range、all等,分别表示用到了普通索引、索引范围查询和全表扫描;key的话就是列出实际用到的索引字段。

大型项目如何应对可能出现的异常,比如空指针等

我回答的是写一个拦截器,像spring mvc里可以写一个handler来统一处理控制器返回的所有异常(当然也可以处理指定的异常类),面试官说这种只能处理http内的异常,如果不是http协议呢,比如mq这种?
这个我也不太清楚,后面想了想写个注解拦截也可以吧

mybatis-plus是如何提供单表的增删改查的

我们知道,使用mybatis的时候,即使是很简单的单表操作也需要写对应的xml文件和对应的sql语句,这样很麻烦,但是mybatis-plus为我们提供了单表的基础CRUD操作,不再需要手动写xml,可以像调用对象方法那样完成对数据库的操作。
这一切都得益于mybatis-plus中的BaseMapper接口
在这里插入图片描述
这里提供了多种单表的CRUD操作,可以看到,BaseMapper是基于mybatis的Mapper动态代理实现的,这也应证了官方说的,myabtis-plus只是在myabtis的基础上做了增强。运行的时候myabtis-plus会动态生成BaseMapper的实现类,通过java的反射机制来调用相应的操作方法,这些方法在实现时会自动生成对应的sql语句,然后通过mybatis的sql执行引擎去执行。

  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值