LD 科技fs
hashmap,hashtable,currenthashmap
(1)HashTable和HashMap一样底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低
(2)ConcurrentHashMap对整个桶数组进行了分段,HashMap和HashTable没有
(3)ConcurrentHashMap在jdk1.7(1.8的变化在下面会介绍)每一个分段上都用锁进行保护(16个段),从而让锁的粒度更精细一些,并发性能更好,而HashMap没有锁机制,不是线程安全的
HashMap 是一个非线程安全的集合类,适用于单线程环境。它允许 null 键和 null 值。其底层数据结构是数组+链表+红黑树,当链表长度超过一定阈值时会转换为红黑树,以提高查询效率。
HashTable 是一个线程安全的集合类,适用于多线程环境。它不允许 null 键和 null 值。其底层数据结构是数组+链表。由于所有方法都使用 synchronized 关键字进行同步,因此效率较低。
ConcurrentHashMap 是一个高效且线程安全的集合类,适用于高并发环境。它不允许 null 键和 null 值。其底层数据结构在 JDK 1.7 中是数组+链表,采用分段锁机制;在 JDK 1.8 中是数组+链表+红黑树,采用 CAS 和 synchronized 机制。
redis 保存方式rdb
:指定的时间间隔对快照进行存储,
redis 的 aof
:每一个收到的写命令都通过write函数追加到文件中。
如何防止穿透和雪崩。
pgsql如何配置分布式事务
1. 两阶段提交协议(2PC)
准备阶段
2. 使用Citus扩展
安装Citus
定义分布式表
执行sql语句
3. 其他方法
数据库的连接如何管理
- Navicat
- Idea 能自动补全、纠错
- DataGrip 能自动补全、纠错
如何判断sql是高效的。
- 避免使用SELECT *
- 使用UNION ALL代替UNION
- 小表驱动大表
- 批量操作
- 多用LIMIT
- 控制索引的数量 5 个内
- 选择合理的字段类型
- 提升GROUP BY的效率
- 索引优化
数据库的表范式
第一范式(1NF)
第一范式要求数据表中的所有属性都是不可再分的数据项,即数据表中的每个列都应该是原子的。例如,一个包含商品名称和数量的列应拆分为两个独立的列。
第二范式(2NF)
第二范式在满足第一范式的基础上,要求每个非主属性完全依赖于主键,而不能部分依赖于主键的一部分。换句话说,非主属性必须完全依赖于主键,而不是仅依赖于主键的一部分。例如,一个学生成绩表中,学生ID和课程ID组成联合主键,成绩应完全依赖于这两个字段,而不是仅依赖于其中一个字段。
第三范式(3NF)
第三范式在满足第二范式的基础上,要求非主属性不依赖于其他非主属性,即消除传递依赖。例如,一个学生信息表中,性别描述应依赖于性别代码,而性别代码依赖于学生ID,这种传递依赖应通过拆分表格来消除。
常见的设计模式有哪些?
单列模式、工厂模式、观察者模式、外观模式、模板方法模式、状态模式
单例模式实现方式有几种?
饿汉式 懒汉式 双重检查锁 静态内部类 枚举
springcloud有没有定制化
- 自定义配置:使用Spring Cloud Config或Spring Boot的配置管理。
- 自定义负载均衡器:如使用Spring Cloud LoadBalancer代替Ribbon(参考引用[3])。
- 自定义服务发现:例如,使用Consul或Eureka之外的注册中心。
- 自定义API网关:如Spring Cloud Gateway的过滤器或路由定制。
- 自定义断路器:如Hystrix或Resilience4j的配置。
- 自定义Feign客户端:如引用[2]中的Feign接口降级处理类。
- 安全定制:如Spring Cloud Security的定制。
- 数据管理定制:如分布式事务处理。
- 与云原生集成:如定制Kubernetes部署。
rabbbitmq的持久化机制
| 持久化类型 | 实现方式 | |
|---|---|---|
| 交换器的持久化 | 指定Durability参数为durable实现 | |
| 队列的持久化 | 指定Durability参数为durable实现 | |
| 消息的持久化 | 通过消息的投递模式来实现,属于代码层面上的。可以控制每一条消息是否久化。 |
springmvc controler多例还是单例。
:默认是单例
如何变成多例
:注解@Scope("prototype"),将其设置为多例模式。
spring作用域有哪些类型?
singleton、prototype、request、session、application(在整个Web应用的生命周期内,Spring容器只会创建一个Bean实例。适用于存储全局的配置数据等。)和websocket(每一个新的WebSocket会话中都会被创建一次。适用于WebSocket通信场景。)
controler的作用域是什么?
singleton、prototype
介绍IOC和AOP
IOC:控制反转
控制 :指的是对象创建(实例化、管理)的权力
反转 :控制权交给外部环境(Spring 框架、IoC 容器)
AOP:
AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种延续。
。IOC有哪些相关设计模式?
工厂模式、单例模式、策略模式、装饰者模式
将一个类声明为一个bean的注解
在 Spring 框架中,可以通过多种注解将类声明为 Spring 管理的 Bean。这些注解不仅简化了配置,还能根据不同的应用场景提供特定功能。
@Component 是最基础的注解,用于将一个普通的 Java 类声明为 Spring Bean。它适用于任何层次的组件,Spring 容器会自动扫描并实例化被标注的类。
@Repository 专用于数据访问层(DAO),除了具备 @Component 的功能外,还能将数据访问异常转换为 Spring 的 DataAccessException 类型,便于统一异常处理。
@Service 用于业务逻辑层,标注的类通常包含核心业务逻辑。它是 @Component 的特化版本,语义更明确,便于开发者理解代码结构。
@Controller 适用于 MVC 模式中的控制层,负责处理 HTTP 请求并返回视图。通常与 @GetMapping、@PostMapping 等注解配合使用。
@RestController 是 @Controller 和 @ResponseBody 的组合,专用于 RESTful Web 服务。它的返回值会直接写入 HTTP 响应体,通常以 JSON 格式返回数据。
@Configuration 用于声明配置类,配置类中可以通过 @Bean 注解定义具体的 Bean 实例,替代传统的 XML 配置文件。
@ComponentScan
注解autowire和resource的区别
@Autowired 属于Spring内置的注解,默认的注入方式为bytype(根据类型进行匹配),就是说会优先根据接口类型去匹配并注入Bean(接口的实现类)。当一个接口存在多个接口实现类的话,byType这种方式就无法正确注入对象了。因为这个时候Spring会同时找到多个满足条件的选择,默认情况下,它自己不知道选择哪一个。这种情况下,注入方式会变为byName(根据名称进行匹配),这个名称通常及时类名(首字母小写)
通过 @Qualifier 注解可以显式指定名称而不是依赖变量的名称
@Resource数据JDK提供的注解,默认注入方式为byName。如果无法通过byName匹配到对应的Bean,注入方式会变为byType
@Resource两个常用的属性:name(名称)、type(类型)。若仅指定name属性则注入方式为byName,若仅指定type属性则注入方式为byType,如果同时指定name和type,则注入方式为byType+byName。
spring bean的生命周期有哪些。
- 实例化
- 属性填充
- 初始化
- 使用
- 销毁
spring bean是否安全?
Spring框架中的Bean是否安全,取决于其作用域和状态
prototype作用域下,不存在资源竞争问题,不存在线程安全问题
singleton作用域下,IOC容器只有唯一的bean实例,可能会存在资源竞争问题。若bean有状态,就存在线程安全问题(有状态:是指具有实例变量的对象,可以保存数据)
mybatis,如何做切面
在 MyBatis 中实现切面编程通常涉及以下几个步骤:
- 定义切点(Pointcut):指定切面的作用范围,例如,可以定义一个切点来匹配所有的 Mapper 接口或特定注解标记的方法。
- 编写通知(Advice):根据切点定义的范围,编写相应的前置通知(Before)、后置通知(After)、返回通知(AfterReturning)、异常通知(AfterThrowing)和环绕通知(Around)。
- 日志记录:在环绕通知中,通过获取执行的 SQL 语句并记录到日志中。这通常需要通过 MyBatis 提供的 API 来获取 BoundSql 对象,该对象包含了最终执行的 SQL 语句和参数。
- 异常处理:在异常通知中,可以捕获方法执行过程中的异常,并进行相应的处理,如记录错误日志等。
mybatis 如何在sql加条件
使用 where标签包裹,if 标签里 写条件,标签中间再使用 And + 其他条件
- 本文标签: Java
- 本文链接: http://119.91.109.247:8443//article/128
- 版权声明: 本文由张亚东原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权