- 博客(232)
- 收藏
- 关注
原创 架构师的核心竞争力
相对于初级的程序员,架构师具有顶层的设计能力,更优秀的底层实现能力,以及更丰富的经验。具体来说,架构师可以根据ddd的方式,分析并给一个复杂的业务系统建模,将一个庞大的系统拆分为合适的子系统,能够清晰的定义子系统的边界以及子系统之间的交互。多年的实战经验,架构师接触过各式各样的系统,比如面相终端用户的app系统,web系统,面向内部用户的oss系统,还做过基础设施比如日志系统和路由系统,还做过业务中台。丰富的经验能够让架构师面对新的问题的时候游刃有余,迅速解决问题并提出成熟的可靠的方案。
2023-03-27 22:43:42 249
原创 假设面试:作为一名架构师,面对一个复杂的业务系统,如何一步步设计和实现?以公司现有业务为例
flexport作为一个货运系统,首先我们要明白我们的客户是谁,我们的客户主要是shipper和consignee,shipper主要是工厂,consignee主要是工厂或者商家。主要业务流程: shipper将货物交付给flexport,flexport联系carrier(轮船公司),将货物运送到consignee指定地点。
2023-03-18 11:56:06 605
原创 SpringFramework 之 @Transactional实现原理
@Transactional可以实现声明式的事物管理,按照对spring container的了解,那么肯定是某个BeanPostProcessor对标记有@Transactional的bean做了enchance
2022-10-23 11:50:39 672
原创 SpringFramework之AutowiredAnnotationBeanPostProcessor
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor
2022-10-17 17:51:06 928
原创 Spring Framework 之BeanFactory and ApplicationContext
BeanFactory and ApplicationContext
2022-10-09 20:04:38 209
原创 创建自定义BeanPostProcessor和BeanFactoryPostProcessor
创建自定义BeanPostProcessor和BeanFactoryPostProcessor
2022-10-05 16:06:15 538
原创 spring-boot源码解析之AnnotationConfigServletWebServerApplicationContext
org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext
2022-10-04 20:45:45 5549
原创 spring依赖查找和依赖注入
依赖查找查找对象就是spring 容器管理的各种Bean, 包括xml bean definitionjava annotation and configurationspring内建Bean, eg:AutowiredAnnotationBeanPostProcessor手动注册BeanDefinition依赖注入可以通过依赖查找获取的所有Bean外部化配置: @Value特殊对象:BeanFactory, ApplicationContext可以看到依赖注入的范围更广..
2021-12-10 22:09:39 289
原创 如何在spring注册一个处理其他Bean的Bean
场景假设我们需要深度定制spring,比如我需要控制@Autowired或者@Value的执行逻辑,此时我可以:@Configurationpublic class AppConfig { @Bean public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer();
2021-12-10 21:48:37 332
原创 spring @PostConstruct以及循环依赖的bean
@PostConstruct/** * The <code>PostConstruct</code> annotation is used on a method that * needs to be executed after dependency injection is done to perform * any initialization. This method must be invoked before the class * is put int
2021-12-09 11:24:33 1779
原创 【The Clean Code Blog】roots
originalhttp://blog.cleancoder.com/uncle-bob/2021/09/25/roots.htmlstoryBob炫富。15岁:和小基友Tim每个星期都去Digital Equipment Corporation玩,然后遇到了PDP-820岁:在Teradyne Applied Systems工作,使用M365,其实就是一个升级版的PDP-864岁(2015年):在IPAD上手写了一个PDP-8的模拟器。纯粹是吃饱了没事干。然后在这个模拟器上实现了Euler 4
2021-11-18 17:53:11 167
原创 【The Clean Code Blog】Functional Duplications
Originalhttp://blog.cleancoder.com/uncle-bob/2021/10/28/functional-duplication.htmlstory马丁老爷子又在捣鼓他的《太空大战》(space war)游戏。玩着玩着游戏挂了,初步排查是游戏出现了两个在地理位置上完全一致的基地(base)。按理说不应该出现这种情况,因为基地不会移动,只要基地在创建的时候没有地址冲突,以后不管怎么玩都不应该有。那么问题出现在哪里呢?functional programming基地的位置虽
2021-11-17 15:05:45 3694
原创 java Repeatable annotations
Repeatable annotaionsjava8 开始支持,对某个字段或者类上面的多个Anno,会自动转换成Annosexample@PropertySource("a")@PropertySource("b")class A {}等价于@PropertySources(["a"])class A {}支持重复注解的annotation必须说明自己支持重复注解并且指明重复注解类@Target(ElementType.TYPE)@Retention(RetentionPolic
2021-11-06 16:15:06 222
原创 spring 注解
spring把注解玩得很溜,自定义component主要通过注解(比如@Repository会生成对应的实现类),继承(inherits TypeFilter实现自定义过滤自动配置),接口(实现CommandRunner在启动时运行)向spring 传递信息。spring自定义了很多注解新特性并且为之实现了对应的解析。注解合成@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Spri
2021-10-31 16:15:33 111
原创 软件的设计原则,设计模式以及软件的质量属性
文章目录软件的设计设计原则设计模式软件的质量属性定义关系软件的设计ant design 设计价值观在蚂蚁的开源项目ant design的介绍中,谈到了价值观,原则和模式之间的关系:设计价值观是蚂蚁设计团队自己发明的概念(至少我没在其他地方看到过,或许是我前端经验不够丰富),但是设计原则和设计模式在软件设计领域中是非常常见的,并且蚂蚁团队对这两个概念的理解也很准确,即:设计原则是思想,用于指导软件的实现;设计模式其实就是行之有效的解决特定问题的步骤,也称为解决方案。道家思想讲究道和术,道就是原则,
2021-10-30 21:26:30 2285
原创 一种自定义的计算java对象hash值的方式
HashCodejava Object对象自带hashCode函数,默认所有对象的hashCode都不相等。但是java自带的原始类型更改了hashCode的计算方式,所以所有对象的hashCode都可以是基于基本类型的hashCode组合Lomboklombok的EqualsAndHash拥有我们要求的绝大多数特性:1,自动扫描字段2,可配置的过滤字段但是又个业务要求是,不关心集合数据类型的元素的顺序,这用lombok达不到自定义hash实现1,自动扫描字段2,可配置的过滤字段3,不关
2021-10-25 16:27:45 947
原创 嵌入式tomcat
tomcat服务器tomcat作为一个可执行程序,通过给它提供配置文件以及servlet handler class来运行。这时候服务器的配置由配置文件完成,代码逻辑由你的servlet完成。这时候整个程序的控制权在tomcat服务器手里,它来读取你的服务配置和servlet handler。程序的入口和运行流程由tomcat server决定。tomcat librarytomcat是用java写的,本身也提供了java api。那么我们可以通过创建一个org.apache.catalina.sta
2021-10-24 16:36:01 1787
原创 maven 单元测试
指定测试对象mvn test -Dtest=Class1#method1,Class2覆盖率报告Intellij:Run -> RunXXXWithCoverage,在右上方可以看到每个目录和文件的覆盖率,还可以到每个源文件查看覆盖情况maven 命令行:jacoco
2021-10-23 21:58:28 261
原创 bazel使用指南
什么是bazelBazel is an open-source build and test tool similar to Make, Maven, and Gradle. It uses a human-readable, high-level build language. Bazel supports projects in multiple languages and builds outputs for multiple platforms. Bazel supports large code
2021-10-22 18:28:34 2037
原创 postgres array 循环
DO $$DECLARE name_iter integer;BEGIN FOREACH name_iter in ARRAY ARRAY[1,2,3] LOOP RAISE NOTICE 'name %', name_iter; END LOOP;END;$$ LANGUAGE plpgsql;
2021-10-17 20:36:34 819
原创 postgres FILTER函数实现多重过滤和窗口函数实现分组topn
背景假设有一张学生成绩表create table student_scores ( id BIGSERIAL PRIMARY KEY, name varchar, subject varchar, exam varchar, score int);DO $DO$ DECLARE name_var student_scores.name%type; subject_var student_scores.subject%type; exam_var student_sco
2021-10-17 14:09:56 1558
原创 assignment的领域模型
文章目录为什么想到写这个背景模型对象名词解释SHIPEMNTOPERATORSETTINGASSIGNMENTevaluaterole技术实现和挑战evaluate的时机并发带来的问题解决方法去掉无效的evaluate过程缓存operator的层级结构图片源码为什么想到写这个我最近开始学习了《领域驱动设计》(英文版)这本书,书里提到,在领域专家(类似于我们的产品经理或者其他对业务很熟悉的人)和技术专家(程序员)之间,应该建立一个领域模型,作为领域专家和技术专家沟通的桥梁。这个模型的作用有很多:帮助技
2021-10-16 23:09:15 493
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人