IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 那些让面试官直呼内行的Java知识点(二) -> 正文阅读

[Java知识库]那些让面试官直呼内行的Java知识点(二)

接上一篇 那些让面试官直呼内行的Java知识点(一)
在这里插入图片描述
其实此系列并非全是Java知识点,但都是作为Java语言开发者应该掌握的,好兄弟不骗好兄弟~

1、mysql中char和varchar有什么区别?

都是用来存字符串,但是:

  • char长度固定,最大长度255,实际长度小于设置长度时用空格补齐,举个栗子,char(5),如果你实际存的字符串是"abc",那么mysql在存储时会在abc后面加两个空格来补齐,即"a b c _ _",在你拿数据时,这两个空格又会被抹去,你得到的数据依然是abc三个字符;适合用来存身份证号、手机号等固定长度的数据;
  • varchar长度不固定,设置的长度是指最大长度,最大65535,存多少就是多少,如varchar(100),只要长度小于100的字符串都能存进去,字符串多长就用多长,不会追加空格;

2、java里Integer的最大值是多少?最大值+1等于多少?

最大值是2的31次方-1,即2147483647
在这里插入图片描述
最大值+1等于-2147483648
在这里插入图片描述

3、java是怎么保证finally里面的代码能够顺利执行的?

编译器在编译的时候,会把finally里面的代码复制多份,分别放在try和catch内所有能够正常执行以及异常执行逻辑的出口处,最直观的就是我们可以在字节码文件里看到很多份finally内部代码;
如下面这段代码
在这里插入图片描述
在这里插入图片描述

4、关于mybatis的缓存机制

mybatis有一级缓存和二级缓存

  • 一级缓存作用于单个session,默认开启,无需手动使用;
  • 二级缓存作用于整个mapper,默认开启,但需要手动使用;
    在这里插入图片描述

如何使用二级缓存:在你的*Mapper.xml文件中添加cache标签即可,如下图
在这里插入图片描述

5、导致线程阻塞的原因有哪些?

  • 主动调用Thread.sleep(1000)方法:暂时放弃对cpu的使用,不会释放锁,睡眠时间到了后直接进入就绪态,拿到cpu时间片立即执行;
  • 主动调用Thread.yield()方法:向调度系统表明当前线程愿意放弃其对处理器的使用;
  • 遇到Object类的wait()方法:放弃当前持有的锁,进入等待状态,直到有其他线程将其唤醒;
  • 遇到Thread类的join()方法:当线程t调用在当前线程内部调用join时,当前线程会陷入阻塞,直到线程t执行完;
  • cpu时间片用完:线程调度是由操作系统控制,同一个系统里面线程那么多,cpu不可能只执行你这一个线程,所以每个线程在执行前都需要先拿到cpu时间片,用完后进入就绪态,再次拿到时间片即可开始执行;

6、java如何实现 “一次编译、处处运行” ?

当然是靠jvm啦~

我们敲的代码最终都会被编译成字节码,对项目打包其实打包的也是字节码;
而Java程序(Java程序其实就是一个字节码包)运行需要依赖jvm环境,不管什么平台,jvm规范都是同一套,所以我们的Java程序只要打包成字节码后,不管在哪里运行效果都是一样的

7、mysql事务有哪些特性?

mysql事务有ACID四大特性,我直接借用《高性能mysql》中的原话吧(网上这方面的资料多如牛毛,送兄弟们一句话,这些纯文字性的概念最好还是看官方的,因为每个人理解都不一样,我把我理解的内容讲给你听,你最后听到的可能并不是我想让你听到的,消息在传递过程中很容易失真,自己理解的才是最原始的,别听网上那些叼毛胡说)

下面这个转账场景是很经典、很能阐述事务特性的例子,好好捋捋
在这里插入图片描述
在这里插入图片描述
8、mybatis插入一条数据,怎么获得这条数据的id?

比如你插入一个user对象

userMapper.insert(User user);

在insert标签上加个配置

<insert id="insert" parameterType="User" keyProperty="id" useGeneratedKeys="true">

然后 新插入user的id会赋到你传入的user对象,通过user.getId()就能拿到了

当然 你先insert进去再select出来拿id也不是不行

9、redis如何管理过期的key?

redis采用 定期 + 惰性 删除的方式来管理key

redis会周期性地扫描当前所有key,发现过期的立即清除,这招叫 定期删除;
但是这样有个问题,扫描间隔太长的话,可能导致某些key多存活一个周期;太短的话,又会很影响性能,所以除了定期扫描,redis在使用某个key时会先校验key是否过期,如果过期直接删除,这招叫 惰性删除

10、什么是逻辑删除?有什么优缺点?

逻辑删除是指在删除数据库中数据时,通过修改一个额外字段来标识该数据是否被删除,而不真正从磁盘上删除数据

如下,0表示未删除,1表示已删除,查询时只需要判断是0还是1就知道该数据是否已删除
在这里插入图片描述
拿mysql来讲

优点:

1、当数据量大了以后,删除数据会造成b+树重排序,如果删除操作频繁会很影响mysql整体性能,有好兄弟肯定想说,插入也会导致重排序啊,但是插入我们避免不了的呀;
2、数据留着万一以后想做点统计啥的就很方便;

缺点:

1、数据量大了以后,很影响查询性能;
2、占用磁盘空间

优缺点五五开吧,实际开发中还是看业务需要


如文中有错,请及时指出~

ok我话说完

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 20:59:25  更:2022-02-14 21:00:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:01:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码