- 博客(18)
- 收藏
- 关注
原创 String.match 优化
查看 String 源码时发现:调用 matches 方法时,在内部 为正则表达式创建了一个 Pattern 对象,却只用了一次。之后就可以进行垃圾回收了。// String 这是String 的 matches 方法public boolean matches(String regex) { return Pattern.matches(regex, this); }// Patternpublic static boolean matches(String r
2021-12-01 21:50:59
798
原创 一次重构经历
改造前一次开发需求,看到了某位前辈写的一段极糟心的代码。大致是长下面这个样子 if (resident.getCustomerName() == null) { resident.setCustomerName(""); } if (resident.getPhone() == null) { resident.setPhone(""); } if (resident.getBirthday
2021-11-15 16:00:56
500
原创 一条sql优化引起的回忆
回忆又感悟了新东西,想起来在 上家 看到的一段sql where id < xxx limit 10前端传上次 记录最小id 过来查询,同样达到了分页的效果LIMIT offset, length 中的offset值过大 SQL查询语句会非常缓慢 SELECT * FROM `table_name` limit 100000,10;SELECT * FROM `table_name` ORDER BY `id` DESC limit 100000,10;SELECT *
2021-11-10 21:31:31
794
1
原创 DDD理解
贫血领域对象只用作数据载体,问没有行为和动作贫血症和失忆症业务代码复杂时,封装了大量的方法,原本的代码意图会逐渐不明显,这种情况称为贫血症引起的失忆症解决复杂和大规模软件的武器可以被粗略地归为三类:抽象、分治和知识。分治 分而治之,高内聚 低耦合抽象 对业务领域问题的抽象知识 DDD 可以认为是知识的一种分治一般有两种手段,mvc 代码结构 或者 业务领域通过业务维度来划分DDD提供了这样的知识手段,让我们知道何时去抽象出界限上下文以及如何去分治DDD的界限上下文完美匹配微服务拆
2021-06-18 17:48:45
500
原创 4-BeanFactoryPostProcessor
BeanFactoryPostProcessorBeanFactory 的 后置处理器bean 创建之前执行BeanDefinitionRegistryPostProcessor执行时机,先执行 BeanDefinitionRegistryPostProcessor . postProcessBeanDefinitionRegistryspring 容器的 refresh() 创建刷新 1、prepareRefresh(); 1.initPropertySources(); 初始化属性
2021-06-08 21:05:54
219
原创 3-spring的声明式事务底层源码分析
百度定义:以方法为单位,进行事务控制,抛出异常,事务回滚。最小的执行单位为方法,决定执行成败是通过是否抛出异常来判断的,抛出异常即执行失败;声明使用事务@EnableTransactionManagement容器启动时,注入两个类AutoProxyRegistrar往下跟 发现注入了这个类InfrastructureAdvisorAutoProxyCreatorInfrastructureAdvisorAutoProxyCreatorextends AbstractAdvisor
2021-06-08 21:03:13
139
原创 2-AOP
简书https://www.jianshu.com/p/5aa33f1b9c3d?utm_campaign=harukipublic interface Aware { }@Componentpublic class Light implements ApplicationContextAware, BeanNameAware,EmbeddedValueResolverAware { private ApplicationContext applicationContext;
2021-06-08 20:56:58
136
原创 接口和抽象类的区别
相同点:1、都不能被实例化2、接口的实现类 和 抽象类的 子类只有完全实现 了 接口和 抽象类的 方法 才能被实例化不同点:1、接口关键字是 interface 、 抽象类 是 abstract class2、单继承 多实现3、抽象类可以有抽象方法也可以没有、可以有具体的实现方法也可以没有,接口只能有抽象方法 public abstract 公开抽象,并且变量 必须是 public static final ,并且必须初始化4、抽象类强调的是行为,接口强调的是功能;抽象类往往用来表征对问题
2021-05-20 21:43:33
94
原创 spring-1、基础及组件使用
Spring 是一种开源轻量级框架,是为了解决企业应用程序开发复杂性而创建的,Spring 致力于解决 JavaEE 的各种解决方案,而不仅仅于某一层的方案;贯穿于表现层、业务层、持久层,然而并没有取代已有框架,只是以高度的开放性,与已有框架进行整合;目标:1、让现有的技术更容易使用。1、促进良好的编程习惯。坚持一个原则:不重复造轮子。已经有较好解决方案的领域,绝不重复性实现。比如:对象持久化和OR 映射,Spring 只对现有的JDBC,Hibernate等技术提供支持,使之更容易使用,
2021-05-10 21:19:54
194
原创 6、并发安全
类的线程安全定义,怎么才能做到类的线程安全?栈封闭变量在方法内部申明;这些变量都处于栈封闭;栈是线程私有的(安全);无状态类内部无任何成员变量;让类不可变让状态不可变 所有包装类都不可变 ;1、对于一个类来讲,所有的成员变量应该是私有的,同样的只要有可能, 所有的成员变量应该加 final 关键字;2、不提供任何可修改成员变量的方法,同时,成员变量也不做为方法的返回值;Akka 框架volatile保证类的可见性;最适合一个线程写,多个线程读的情景;( ConcurrentH
2021-02-05 16:18:07
223
原创 5、线程池
什么是线程池?为什么要使用线程池?1、降低资源的消耗,降低线程创建和销毁的资源消耗2、提高响应速度,避免创建销毁消耗时间;3、提高线程的可管理性实现一个我们自己的线程池1、线程必须在池子已经创建好,并且可以保持住,要有容器保存多个线程2、线程还能接受外部的任务并且运行;JDK中的线程池和工作原理ThreadPoolExecutor ,jdk所有线程池实现的父类各个参数的含义int corePoolSize, 核心线程数, < corePoo
2021-02-03 21:31:32
165
原创 3、显示锁和AQS
3、显示锁和AQS原子操作CASatom(不可分割)什么是原子操作?如何实现原子操作?synchronized 基于阻塞的锁机制 可以实现,但会引发以下问题1、被阻塞的线程优先级很高2、拿到锁的线程一直不释放锁怎么办?3、大量的竞争,消耗CPU,同时带来死锁或者其他安全问题。CAS的原理利用了现代处理器都支持的CAS指令,循环这个指令,直到成功为止;CAS(Compare And Swap),指令级别保证这是一个原子操作;三个运算符: 一个内存地址 V 、 一个期望值 A
2021-01-12 12:01:01
171
原创 4、并发容器
ConcurrentHashMapHash散列,哈希:把任意长度的输入通过一种算法(散列),变换成固定长度的输出,这个输出值就是散列值;属于压缩映射,容易产生哈希冲突;常见算法直接取余,md4、md5、sha 哈希算法,摘要冲突解决办法:开放寻址再散列链地址法HashMap线程为什么不安全put操作会引起死循环,hashMap里的entry链表产生环形的数据结构,entry的next 永远不为null;https://www.cnblogs.com/wfq9330/p/9
2020-10-10 17:06:11
250
原创 2、线程的并发工具类
线程间协作轮询:难以保证及时性;资源开销大等待和通知wait();notify();/ notifyAll(); 对象上的方法等待和通知的标准范式等待方:1、获取对象的锁;2、循环里判断条件是否满足,不满足调用 wait 方法;3、条件满足执行业务逻辑;通知方:1、获取对象的锁;2、改变条件;3、通知所有等待在对象的线程;等待超时模式实现一个连接池假设 等待时间时长为 T ,当前时间 now + T 以后超时long overtime = now + T ;long r
2020-08-31 17:48:11
186
原创 1、线程基础、线程之间的共享和协作
基础概念:cpu核心数 和 线程数的关系:1:1;超线程技术 - > 1:2cpu时间片轮转机制:rr调度,上下文切换什么是进程和线程:进程:程序运行资源分配的最小单位,进程内部有多个线程,多个线程共享这个进程的资源;线程:CPU调度的最小单位,澄清并行和并发:并发:与时间单位相关;单位时间内可以处理事情的能力;并行:同一时刻,可以处理事情的能力;高并发编程的意义,好处和注意事项:意义1、可以充分利用CPU 的资源;2、加快用户...
2020-08-26 17:34:46
187
原创 单例模式
采取一定的方法在整个软件系统中,对某个类 只能存在一个对象实例,并且该类只提供一个取得该对象实例的方法(静态);注意事项和细节说明:1.单例模式保证了系统内存中该类只存在一个对象;节省了系统资源;对于一些需要频繁创建修改的对象,使用单例模式可以提高系统性能;2.当想实例化一个单例类的时候 必须要使用获取相应对象的方法,而不是new ( );3.单例模式使用的场景:需要频繁的创建和销毁的对象;创建对象时,耗时过多或耗费资源过多(重量级对象),但又经常使用的对象、工具类对象、频繁访问数据库或文件的
2020-08-05 11:31:15
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅