• 面面面试三


    介绍一下Java的八种基本数据类型。

    byte short int long float double char boolean

    讲一下你常用的集合。

    ArrayList

    ArrayList类型的最大容量。

    最大容量为Integer.MAX_VALUE - 8 2^31 - 8 21亿多

    SocketIO编程用过吗,介绍一下。(不会)

    ThreadLocal用过吗,介绍一下。

    项目中的ThreadLocal用作获取登录后用户的信息。它首先就是实现put get remove 三个方法,在用户登录后

    放进ThreadLocal中,需要的时候get,get完进行remove。

    如果不进行remove会造成内存泄露

    内存泄露:之后都不用的东西一直留在内存中。

    线程的状态。

    新建、就绪、运行、等待、销毁

    sleep和wait的区别。

    • sleep 是Thread 类的静态本地方法,wait 则是Object 类的本地方法。
    • 最主要是sleep()不释放同步锁,而wait()释放同步锁,使得其他线程可以使用同步控制块或者方法。
    • sleep 一般用于当前线程休眠,或者轮循暂停操作,wait 则多用于多线程之间的通信。
    • wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。
    • sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常。

    Java中锁的升级(讲的synchronized和Lock锁)。

    讲一下Spring中bean的生命周期。

    什么时候Spring的事务会失效?

    • 访问权限问题,比如private,

    • 方法用final修饰

    • 没有被spring管理

    • 方法内部调用

    • 表不支持事务

    • 没有开启事务

    • 多线程调用

    • 自己吞了异常

    • 手动抛出了别的异常

    • 自定义了回滚异常

    Mybatis用过吗?讲一下mybatis的优缺点(扯到了mybatis-plus)。

    Mybatis和Mybatis-plus的区别。

    就跟MyBatisPlus的官网首页所说,他们的关系就是魂斗罗中的小红和小蓝,基友搭配,效率翻倍!

    区别的话MP提供了很多的额外插件,比如说分页插件,代码生成器等等,还内置了很多基本的增删改查方法

    使用条件构造器也可以准确快速的构建sql

    但是MP不支持多表查询,还是需要写MyBatis源生的mapper来进行操作!

    Redis用过吗,谈谈过期键的删除策略。(还没复习到,随口说的,很心虚)

    redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合使用。

    惰性删除是指,某个键值过期后,此键值不会马上被删除,而是等到下次被使用的时候,才会被检查到过期

    此时才能得到删除。

    定时删除是:每隔一段时间执行一次删除操作,并通过限制删除操作执行的时长和频率,来减少删除操作对cpu的影响

    Dubbo用过吗。(不会)

    RabbitMQ用过吗。怎么确保消息可靠性。(还没复习到,随口说的,很心虚)

    讲一下MySQL的存储引擎和它们的区别。

    MyISAM和InnoDB的区别

    InnoDB支持事务,MyISAM不支持

    InnoDB支持聚集索引,MyISAM支持非聚集索引

    InnoDB是行锁,MyISAM是表锁,粒度大,并发情况下效率低

    MySQL为什么不能每列都用索引。

    每一列都用索引的话那还要索引干啥???!!!

    MySQL为什么索引会失效。

    可能是操作不当。

    不过大多数是引擎认为不走索引效率更高,导致索引失效

    谈谈SQL优化。

    1、通过慢查日志等定位那些执行效率较低的SQL语句

    2、explain 分析SQL的执行计划

    3、show profile 分析

    4、trace

    5、确定问题并采用相应的措施

    • 类型,是否用大范围的类型装了一个小范围的数据,如年龄,tinyint的255就够了,用不上int或bigint
    • 尽量不要用null,用null会影响效率
    • 能用整型就不要用字符型,因为字符集在各个国家不太相同,需要进行字符集排序,消耗较大
    • 避免在where子句中使用or来连接条件
    • 使用varchar代替char
    • 使用explain分析你SQL执行计划
    • 优化like语句:不要使用%xx
    • 避免在索引列上使用内置函数

    怎么查看SQL语句执行效率。

    • **步骤1、**观察,至少跑一天,看看生产的慢sql情况;
    • **步骤2、**开启慢查询日志,设置阈值,比如超过5秒钟就是慢sql, 并将它抓取出来;
    • **步骤3、**explain+慢sql分析;
    • 步骤4、show profile;(推荐)
    • 步骤5、运维经理或dba,进行sql数据库服务器的参数调优;(不推荐)

    MySQL怎么让索引生效。

    避免一些使索引失效的操作…

    使用最左匹配

    覆盖索引查询覆盖到的字段

    避免使用select *

    避免使用not in not exsits

    避免查询使用函数、计算

    避免where中使用or

    避免模糊查询的时候使用左边设置%

  • 相关阅读:
    [android studio] cannot find declaration to go的解决方法
    计算机中的编码问题
    ARM系列之ARM多核指令WFE、WFI、SEV原理
    深度学习之基于Python+OpenCV(DNN)性别和年龄识别系统
    11 | docker-compose 的使用
    计算机竞赛python区块链实现 - proof of work工作量证明共识算法
    [附源码]java毕业设计网上书店的设计
    hadoop宕机的处理方法
    JAVA小游戏 “拼图”
    【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)
  • 原文地址:https://blog.csdn.net/qq_45830289/article/details/126430805