设计模式工厂模式将对象的创建逻辑封装在一个工厂类中,而不是直接实例化,使得创建对象的过程与使用对象的过程分离使用场景: 日志记录:选择记录位置 本地、网络存储 数据库访问:切换数据库 协议选择 单例模式一个类只有一个实例,并且提供访问这个对象的方式 生成唯一ID 计数器 代理模式通过引入一个代理对象来控制对原对象的访问,代理对象在客户端和目标对象之间充当中介,负责将客户端的请求转发给目标对象,同时在转发请求前后进行额外的处理。 AOP 火车票代售 与适配器模式区别:适配器改变...
操作系统写时复制 Copy-On-Write 多个进程或线程可以共享相同的数据副本,直到某个进程或线程尝试修改数据时,才真正执行拷贝(而不是在一开始就创建多个副本)。 这样可以减少不必要的复制提高内存利用率和性能。 适用场景 操作系统进程管理(fork):提高进程创建效率,减少内存消耗。 高并发读、多线程安全集合(CopyOnWriteArrayList):适用于读多写少的场景。 数据库 MVCC:提高数据库事务的并发性能。 网路TCP三次握手 第一次握手:客户端发送SYN请求,给服...
Kafka依赖zookeeperkafka4.0才完全删除zk Kafka如何保证消息不丢失生产者:设置重试次数retries = 3消费者:手动提交offset Kafka不丢消息acks = all副本数replication.factor >= 3最少写入几个副本min.insync.replicas > 1replication.factor = min.insync.replicas + 1 Kafka 如何保证消息不重复消费消...
Mysql隔离级别 级别 描述 READ UNCOMMITTED 读未提交 存在脏读 READ COMMITTED 读已提交 不可重复的读,解决脏读 REPEATABLE READ 可重复读 存在幻读 SERIALIZABLE 串行化 解决幻读 幻读:当某个事物在读取某个范围内的记录时,另一个事务又在该范围内插入新的记录,当之前的事务再次读取该范围的记录时,会产生幻行。 REPEATABLE READ能否解决幻读?能解决“普通的幻读” 查询(SELECT...
SpringSpring bean容器的生命周期 Spring容器根据配置中的bean定义实例化bean Spring使用依赖注入填充所有属性 如果bean实现BeanNameAware接口,则工厂通过传递bean的id来调用setBeanName() 如果bean实现BeanFactoryAware接口,工厂通过传递自身的实例来调用setBeanFactory() 如果存在与bean关联的任何BeanPostProcessors,则调用preProcessAfterInitializat...
Java基础Double和BigDecimal的区别Double使用二进制浮点表示法,存储小数点会丢失精度BigDecimal采用字符串存储小数值,用整数运算模拟浮点运算,用BigInteger存储数值,scale存小数位数用BigDecimal要避免double直接转换 为什么要有包装类型泛型只能使用引用类型,基本类型无法转成引用类型,集合不存基本类型 怎么深拷贝 实现Cloneable接口并重写clone()方法 序列化和反序列话 手动递归复制 HashMap原理底层使用数组+链表+...
测试markdown格式
出现SSL握手异常时,由于证书未包含IP地址。解决方法包括通过代码信任所有或制作一个包含IP的证书。具体步骤为:安装依赖包,创建证书存放目录及配置文件,生成公钥私钥和证书。进入nginx或tomcat服务器以支持IP访问。若需JKS文件,可通过转换生成。
在`applicationContext.xml`中配置事务增强时,只有将切入点表达式指向`service`层,事务才能在`service`层正确回滚。如果希望`controller`层的事务也能回滚,需要在`spring-mvc.xml`中配置切入点指向`controller`层。然而,将事务配置在`spring-mvc.xml`中针对`service`层则无效。因此,事务的回滚生效位置与其配置文件及对应切入表达式的配置有关。