Java小知识点

1、java有哪些类加载器?

启动类(Bootstrap)加载器 BootClassPathHolder: 加载<JAVA_HOME>/lib下的jar包

扩展类(Extension)加载器ExtClassLoader:加载<JAVA_HOME>/lib/ext下的jar包

系统类(System)加载器AppClassLoader:加载我们自己项目中写的java文件编译而成的class文件,位于target/classes下

2、int和Integer有什么区别?

Integer是int的包装类,int则是java的一种基本数据类型,Integer的默认值是null,int的默认值是0;
JavaBean中我们应尽量使用Integer,打个比方,学生成绩如果用int,缺考怎么表示,0?那考0分的呢;-1?也可以,但没有null直观;

3、你在项目中如何保证缓存和数据库的一致性?

只要有引入缓存的地方,都不可能保证强一致性,所以这里的一致性是指最终一致性。

方法很多,最常用的就是延时双删,先删除缓存,再操作数据库,完事儿再删除一次缓存。

第二次删除缓存是为了避免 在第一次删除缓存之后,到操作数据库完成之前,这期间有新的查询过来,导致再次把旧数据生成缓存

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

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

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

最大值是2的31次方-1,即2147483647,最大值+1等于-2147483648

6、关于mybatis的缓存机制

mybatis有一级缓存和二级缓存

一级缓存作用于单个session,默认开启,无需手动使用;

二级缓存作用于整个mapper,默认开启,但需要手动使用;

如何使用二级缓存:在你的*Mapper.xml文件中添加cache标签即可。

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值