问题梳理

reeantrantlock 原理

synchronized

早期是重量级锁,用户态转成核心态,效率低。

后来优化了。java6后优化了。

  • 自适应自旋
  • 锁消除
  • 锁粗话
  • 轻量级
  • 偏向锁
  • 重量级

自旋锁与自适应自旋锁

  共享数据的锁定持续时间短,切换线程不值得。

  线程执行循环,不让出CPU。

  自旋java6后默认开启。

  java6后,引入自适应自旋锁,自旋的次数不确定。

锁消除

虚拟机的优化,对运行上下文,确定不能竞争的锁,就把锁删除掉。

StringBuffer sb = new StringBuffer();
sb.append("112233");

这种,单线程操作,是没有锁的在jvm里。

锁粗话

扩大锁范围,避免加锁和解锁。

锁升级

同一线程多次获得,锁就偏向锁 ;偏向锁,当前线程ID == markWorkId时 ,就可以直接访问

场景:-》

第二个线程加入锁的争用,就升级轻量级。适用交替执行。

场景:-》

同一时间访问同一个锁,就会升级为重量级锁。

 Reentrantlock 重入锁

java5开始引入。

lock()  后要 uncock()

公平: 锁给等待时间最久的线程。 synchronized不公平。公平吞吐量不高。

可以设置等待时间。

 

Lock方法,底层调用unsafe的park()方法   unsafe: 在任意内存位置出读写数据。

 

公平锁 会在获得锁时,判断aqs队列是否有,有的话优先队列中的。

非公平锁,就是直接cas,state为0直接获得锁。

CAS

AtomicInteger 底层基于unsafe

 

CompletableFuture类

 

线程池丢弃策略

  

 

策略模式  装饰器模式   模板模式

https://www.cnblogs.com/jiangym/p/17590157.html

resource和autowired区别

  1. 如果是spring容器,两个等价。

不同点:

autowired 先在spring容器中找以bean为类型的Bean实例,如果找不到或者找到多个,则通过fieldName来找。

resource相反。

直白来说

@Autowired

A a  这时先匹配A, 如果A有多个实现类,则找@Component中名为a的,如果找不到就报错。

 

@Resource

B b  则先找b,如果B有多个实现类,b还匹配不到@Component中名,则在B的实现类中找到多个,则报错。

 

  1. @Autowired 可以在构造器上,resource不可以。
  2. autowired是spring的;resource是jdk的;

 

循环依赖

https://www.cnblogs.com/jiangym/p/17545169.html

 

spring相关问题

  1.  ioc、aop的概念
    1. IOC:通过控制反转。我们可以把对象交给容器管理。我们在想使用的时候从容器中取。
      1. 不用关心引用bean的实现细节,不用创建多个bean,bean修改对使用方无感知。
      2. pojo形成BeanDefinition注入到springContainer后,由ApplicationContext调用。
    2. AOP:面向切面编程。在bean实例的初始化完成,进行后续的beforeInstantiation中生成代理。
      1. jdk动态代理,不能代理没有接口的类。
      2. cglib代理。代理没有接口的类。
      3. 缓存、日志
  2. 基于字段的依赖注入有什么不好
    1. 最好用setter注入,也可用构造器注入。基于字段的注入容易npe
  3. bean初始化流程
    1. AbstractApplicationContext#refresh
    2. BeanFactoryPostProcessor
    3. InitializingBean
    4. beanPostProcessor
    5. 销毁
  4. springboot3新特性
    1. jdk17最低;
    2. aot编译(预先编译)加快程序启动;
    3. spring native对云原生友好。
  5. spring事务传播机制
    1. required;required_new;
    2. supported; not_supported
    3. mandatory 
    4. never
    5. nested
  6. beanFactory和Factorybean区别
  7. spring常见的使用方式
  8. spring开启事务
    1. 编程式事务、
      1. 手动开启、提交和回滚
    2. 声明式事务
      1. @Transational注解
      2. 没有侵入,管理简单
      3. 最小力度只能在方法上
  9. spring设计模式说几个
    1. ioc是工厂模式
    2. aop代理模式
    3. 单例模式:spring的一些bean
  10. spring循环依赖的解决
  11. 事务失效的原因有哪些
    1. 修饰非public方法
    2. 参数propagation错误
    3. 在一个类中调用,和private一回事,没有办法走到代理服务。
    4. 异常被捕获
    5. 数据库引擎不支持事务
  12. 怎么让一个bean优先加载
    1. dependsOn
  13. aop什么场景下会失效
  14. springboot和spring区别
    1. springboot简化了开发和部署,用于快速开发。
      1. 自动配置
      2. 内嵌web服务器
      3. 约定大于配置
  15. 问什么不要直接用@Async
    1. simpleAsyncTaskExecutor这个线程不是池,不会复用线程。

 

 

什么样的对象能可达性分析 作为根

(1). 虚拟机栈中引用的对象。

(2). 方法区中的类静态属性引用的对象。

(3). 方法区中常量引用的对象。

(4). 本地方法栈中native方法引用的对象。

 

 

CMS常用参数

 

 

 

索引覆盖 但排序字段不在索引内 会回表吗

订阅binlog 三种log都存什么

binlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。

场景是主从复制和数据恢复。

 

redolog :一个是内存中的日志缓冲(redo log buffer),另一个是磁盘上的日志文件(redo log file)

mysql每执行一条DML语句,先将记录写入redo log buffer,后续某个时间点再一次性将多个操作记录写到redo log file。

redo log是InnoDB特有的

 

undo log主要记录了数据的逻辑变化,

比如一条INSERT语句,对应一条DELETE的undo log,

对于每个UPDATE语句,对应一条相反的UPDATE的undo log,

这样在发生错误时,就能回滚到事务之前的数据状态

 

分库分表都在什么时候用

垂直划分业务,分库

水平分表,降低单表数据量。

索引优化

 

redis

https://www.cnblogs.com/jiangym/p/15839229.html

MQ

对于消息可靠性、消息顺序性等原理

消息堆积、消息丢失等问题解决经验

 

 

战报牌迁移

优惠券抢券功能,及怎么防刷的。

 

todo

Elasticsearch

高性能分布式搜索引擎;

数据存储在多节点上。

索引划分为多个分片;

全文索引;倒排索引;把词对应的文件存储下来

索引优化;

高效存储引擎;

异步请求处理;

内存存储,es使用了内存存储技术。

 

ZooKeeper

分布式配置管理;集群管理,master选举,负载均衡,

CP的分布式系统,牺牲可用性。

Spring源码

数据库锁机制

具有 SQL 调优、分库分表、索引优化、数据库灾备

Kafka原理与rocketMq的对比 消息可靠性,顺序性,nacos,zookeeper深入研究。

hbase

 

 

Mysql常用版本及特点

redis常用版本及特点

springboot版本及特点 熟悉框架实现原理和优缺点

多线程技术和数据库的调优经验;对JVM有深入理解,精通JVM性能调优

掌握Mysql数据库相关原理;熟悉NoSQL(Redis,MongoDB等)

nginx配置

 

posted @ 2023-09-21 22:38  CodingOneTheWay  阅读(14)  评论(0编辑  收藏  举报
回到顶部