每天一篇技术博客
文章平均质量分 65
Ethan3014
头发多睡眠足有妹子的程序员
展开
-
架构师的核心竞争力
相对于初级的程序员,架构师具有顶层的设计能力,更优秀的底层实现能力,以及更丰富的经验。具体来说,架构师可以根据ddd的方式,分析并给一个复杂的业务系统建模,将一个庞大的系统拆分为合适的子系统,能够清晰的定义子系统的边界以及子系统之间的交互。多年的实战经验,架构师接触过各式各样的系统,比如面相终端用户的app系统,web系统,面向内部用户的oss系统,还做过基础设施比如日志系统和路由系统,还做过业务中台。丰富的经验能够让架构师面对新的问题的时候游刃有余,迅速解决问题并提出成熟的可靠的方案。原创 2023-03-27 22:43:42 · 249 阅读 · 0 评论 -
假设面试:作为一名架构师,面对一个复杂的业务系统,如何一步步设计和实现?以公司现有业务为例
flexport作为一个货运系统,首先我们要明白我们的客户是谁,我们的客户主要是shipper和consignee,shipper主要是工厂,consignee主要是工厂或者商家。主要业务流程: shipper将货物交付给flexport,flexport联系carrier(轮船公司),将货物运送到consignee指定地点。原创 2023-03-18 11:56:06 · 605 阅读 · 0 评论 -
协作编程指南: Insepction
集体代码审查原创 2022-12-11 13:59:08 · 231 阅读 · 0 评论 -
Spring Data JDBC & Spring Data JPA
jdbc & jpa repository原创 2022-12-03 14:23:39 · 738 阅读 · 0 评论 -
Spring Data Commons
Spring data repository原创 2022-11-27 14:40:54 · 2538 阅读 · 0 评论 -
SpringFramework 之EnableCaching
EnableCaching源码分析原创 2022-11-05 18:01:50 · 588 阅读 · 0 评论 -
SpringFramework 之EnableAsync
EnableAsync注解原理原创 2022-10-30 15:41:36 · 452 阅读 · 0 评论 -
SpringFramework 之 @Transactional实现原理
@Transactional可以实现声明式的事物管理,按照对spring container的了解,那么肯定是某个BeanPostProcessor对标记有@Transactional的bean做了enchance原创 2022-10-23 11:50:39 · 673 阅读 · 0 评论 -
SpringFramework之AutowiredAnnotationBeanPostProcessor
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor原创 2022-10-17 17:51:06 · 929 阅读 · 0 评论 -
Spring Framework 之 Scope
spring Scope的原理和使用原创 2022-10-15 14:34:58 · 588 阅读 · 0 评论 -
Spring Framework 之BeanFactory and ApplicationContext
BeanFactory and ApplicationContext原创 2022-10-09 20:04:38 · 209 阅读 · 0 评论 -
@Bean与@Coponent的初始化
@Bean与@Coponent的初始化原创 2022-10-09 19:35:13 · 701 阅读 · 0 评论 -
spring-boot源码解析之DefaultListableBeanFactory
DefaultListableBeanFactory原创 2022-10-07 18:06:39 · 899 阅读 · 1 评论 -
spring-boot源码解析之AnnotationConfigServletWebServerApplicationContext
org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext原创 2022-10-04 20:45:45 · 5554 阅读 · 0 评论 -
spring-boot源码解析之SpringApplication
SpringApplication源码阅读原创 2022-10-03 12:48:46 · 1307 阅读 · 0 评论 -
spring-boot notes
spring-boot官方文档笔记原创 2022-09-11 23:17:56 · 505 阅读 · 0 评论 -
spring framework notes
spring framework官网笔记原创 2022-08-08 11:29:50 · 798 阅读 · 0 评论 -
Assignment 读写分离以及无竞争/无锁优化
assignment读写分离 & 无锁设计原创 2022-07-10 16:28:51 · 317 阅读 · 0 评论 -
spring依赖查找和依赖注入
依赖查找查找对象就是spring 容器管理的各种Bean, 包括xml bean definitionjava annotation and configurationspring内建Bean, eg:AutowiredAnnotationBeanPostProcessor手动注册BeanDefinition依赖注入可以通过依赖查找获取的所有Bean外部化配置: @Value特殊对象:BeanFactory, ApplicationContext可以看到依赖注入的范围更广..原创 2021-12-10 22:09:39 · 289 阅读 · 0 评论 -
如何在spring注册一个处理其他Bean的Bean
场景假设我们需要深度定制spring,比如我需要控制@Autowired或者@Value的执行逻辑,此时我可以:@Configurationpublic class AppConfig { @Bean public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer();原创 2021-12-10 21:48:37 · 332 阅读 · 0 评论 -
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 · 1781 阅读 · 0 评论 -
【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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
软件的设计原则,设计模式以及软件的质量属性
文章目录软件的设计设计原则设计模式软件的质量属性定义关系软件的设计ant design 设计价值观在蚂蚁的开源项目ant design的介绍中,谈到了价值观,原则和模式之间的关系:设计价值观是蚂蚁设计团队自己发明的概念(至少我没在其他地方看到过,或许是我前端经验不够丰富),但是设计原则和设计模式在软件设计领域中是非常常见的,并且蚂蚁团队对这两个概念的理解也很准确,即:设计原则是思想,用于指导软件的实现;设计模式其实就是行之有效的解决特定问题的步骤,也称为解决方案。道家思想讲究道和术,道就是原则,原创 2021-10-30 21:26:30 · 2285 阅读 · 0 评论 -
一种自定义的计算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 · 948 阅读 · 0 评论 -
嵌入式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 阅读 · 0 评论 -
maven 单元测试
指定测试对象mvn test -Dtest=Class1#method1,Class2覆盖率报告Intellij:Run -> RunXXXWithCoverage,在右上方可以看到每个目录和文件的覆盖率,还可以到每个源文件查看覆盖情况maven 命令行:jacoco原创 2021-10-23 21:58:28 · 261 阅读 · 0 评论 -
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 · 2040 阅读 · 0 评论 -
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 阅读 · 0 评论 -
postgres使用扩展模式显示数据并且显示执行时间
\x 扩展模式\timing on 显示执行时间? 帮助原创 2021-10-17 20:26:05 · 334 阅读 · 0 评论 -
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 阅读 · 0 评论 -
assignment的领域模型
文章目录为什么想到写这个背景模型对象名词解释SHIPEMNTOPERATORSETTINGASSIGNMENTevaluaterole技术实现和挑战evaluate的时机并发带来的问题解决方法去掉无效的evaluate过程缓存operator的层级结构图片源码为什么想到写这个我最近开始学习了《领域驱动设计》(英文版)这本书,书里提到,在领域专家(类似于我们的产品经理或者其他对业务很熟悉的人)和技术专家(程序员)之间,应该建立一个领域模型,作为领域专家和技术专家沟通的桥梁。这个模型的作用有很多:帮助技原创 2021-10-16 23:09:15 · 493 阅读 · 0 评论 -
PL/pgSQL and triggers
文章目录what is PL/pgSQLdollar-quoted string constantsblockvariablerowtype:recordconstantlogerror通知clientassertifcase whenloopwhileforexitcontinuefunctionout 参数procedureexceptiontriggerstrigger functiontrigger examplewhat is PL/pgSQLPL/pgSQL is a procedu原创 2021-10-15 18:24:13 · 624 阅读 · 0 评论 -
程序员的技术层级
什么是技术层级其实就跟阿里腾讯的技术层次类似,是给软件开发人员能力评定设定的标准,也是程序员进阶的指引。大厂的评级基本上是按照你对外输出的能力来评判的,也就是你能胜任的项目的复杂度,完成的速度和质量。这是以产出为导向的,毕竟产出才相对容易量化,也比较公平。但是产出其实有一定的欺骗性,产出高的不一定技术实力就强,尤其是跟当前业务不直接挂钩的能力,容易让程序员忽略自身的能力短板,导致没有形成结构化的,立体的知识体系。在脱离团队和公司以后会感到迷茫。我就从一个整体的,宏观的角度剖析一下一个程序员应有的知识体系。原创 2021-10-14 11:04:50 · 768 阅读 · 0 评论 -
微服务统一鉴权方案
user, team, role, role groupteam就是user的集合,team拥有的角色每个member都会自动拥有role group就是role的集合,user或者team拥有某个role group就表示他拥有group里面的所有角色。team的作用:批量把一个角色assign给多个userrole group的作用: 批量把多个角色assign给user统一鉴权中心authorization_service负责用户登陆,登陆成功以后发给前端token,以后所有用户的请求都携原创 2021-10-11 16:29:10 · 1006 阅读 · 0 评论 -
2020-10-23 远程办公
来源https://coolshell.cn/articles/20765.html人员素质团队管理的头等大事是找人,没有之一。很多人都会跟我说,你的这种远程团队需要很好的人。是的,没错,人很关键。远程团队需要的人的一般需要有这些特质:能独挡一面的人。这样交给他的事能独立完成,没有路能自己找路,这样可以省很多管理成本。沟通能力很强的人。一方面,他们把模糊的事能变清楚,另一方面,他能有效地说服他人。不然就会非常扯皮和消耗时间。能自管理和自驱动。不能自管理和自驱的人,会增加大量的管理和教育成本。能原创 2020-10-23 11:56:13 · 680 阅读 · 0 评论 -
2020-10-22 与程序员相关的CPU缓存知识
来源酷壳 https://coolshell.cn/articles/20793.html架构三级cache:cache linecache更新的block,最小单位,不是一个字节一个字节的更新的N way cachehash + 数组查找cache, N就是代表hash table的大小总结1,多访问本地变量2,全局共享和lock有性能影响...原创 2020-10-22 12:45:02 · 141 阅读 · 0 评论 -
2020-10-22 计时攻击 TIMING ATTACKS
来源https://coolshell.cn/articles/21003.htmlexampleboolean safeEqual(String a, String b) { if (a.length() != b.length()) { return false; } int equal = 0; for (int i = 0; i < a.length(); i++) { equal |= a.charAt(i) ^ b.charAt(i原创 2020-10-21 21:36:24 · 448 阅读 · 0 评论 -
2020-10-19 - 程序员如何把控自己的职业
TODO原创 2020-10-19 10:31:30 · 164 阅读 · 0 评论