牛客面试题库(7)

文章探讨了Redis中的zset数据类型,指出其与set的区别在于有序性及score分数,并介绍了其底层实现。同时,讨论了Java中的static修饰符用法,线程的六种状态以及ThreadLocal的概念和实现原理。此外,还提到了SpringBoot常用注解和bean的生命周期。最后,对比了synchronize和lock在锁定机制上的差异。
摘要由CSDN通过智能技术生成

请你说说Redis的数据类型中的zset,它和set有什么区别?底层是怎么实现的?

zset:有序不可重复,底层数据结构ziplist(压缩链表)和skiplist(跳表),有序主要多了一个维度,score分数,根据score字段排序,元素个数小于128,所有元素长度小于64字节,就使用ziplist,否则就是用skiplist,有索引的列表

set:无序不可重复,底层数据结构整数集合insethashtable

说说static修饰符的用法

一个类包含变量、方法、构造方法、代码块、内部类,注意static不能修饰构造方法,其余都可以修饰;类加载完毕,即使没有创建对象也可以使用static修饰的部分,注意静态方法不能使用thisthis属于实例,需要创建对象后才能使用,静态优先对象存在

说说线程的状态

有六种状态:

  • 新建(new):线程被创建但未调用start方法
  • 运行(runnable):这个状态分为两种,就绪和运行,就绪还在等分配CPU时间片,运行得到CPU时间片执行任务
  • 阻塞(blocked):线程执行同步代码时,需要获取锁,但此时锁已经被其他线程获取,需要等待锁的释放
  • 等待(waiting):线程需要等待其他线程唤醒
  • 有限等待(timed waiting):有限等待,到达一定时间自动醒来
  • 终结(terminated):线程执行完run方法,或者异常后退出run方法

说说你对ThreadLocal的理解

线程变量,用来隔离多线程下的共享变量,保证变量线程安全,即每个线程拥有资源副本

实现原理:每个ThreadLocal都有一个内部类ThreadLocalMap,它能存储键值对信息,set方法首先根据当前线程获取ThreadLocalMap(返回thread.threadLocals),然后以ThreadLocal对象本身作为key,值为变量副本存入ThreadLocalMapget的也是首先根据当前线程获取ThreadLocalMap,以ThreadLocal对象本身作为key获取变量副本,ThreadLocal使用完需要删除,否则会出现内存泄露问题,因为线程一直不销毁,变量副本一直存在

public class Thread{
    ThreadLocal.ThreadLocalMap threadLocals = null;
}

ThreadLocalMap getMap(Thread t) {
	return t.threadLocals;
}

说说SpringBoot常用的注解

@SpringBootApplication:启动类上面的注解,包含@EnableAutoConfiguration、@SpringBootConfiguration、@CompetentScan

@RestController

@RequestMapping

@Autowire

@Qualifier:和@Autowire一起使用,指定bean的名称

@Value

@PostMapping

@GetMapping

@PutMapping

@DeleteMapping

@RequestBody

@PathVariable

@RequestParam

@Mapper

@Service

@Bean

@Competent

@Configuration

说说bean的生命周期

创建、初始化、调用、销毁

创建bean:有三种方法

  • 构造函数,通过反射调用构造函数
  • 静态工厂
  • 实例工厂

自定义初始化方法:编写一个初始化方法,在方法上添加@PostConstruct注解

自定义销毁方法:编写一个销毁方法,在方法上添加@PreDestroy注解

synchronize和lock有什么区别

synchronize:关键字;作用在静态方法、普通方法、代码块;代码执行完或异常自动释放锁;获取不到锁一直等待

lock:接口;只能作用在代码块;需要在finally手动释放锁;可以设置获取锁的超时时间

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值