Orca ORM的开发状态和技术路线

3 月 11 日
阅读 2 分钟
33
近期主要在编写框架的核心逻辑,已支持H2和MySQL数据库,这两天成功把它在Spring Boot应用程序中运行起来了。最主要的技术挑战,即“循环关联的JOIN”,已得到解决。解决这一挑战所花的时间比预期多很多(重做了N次),因此整个项目进度都延后,但是以后都是坦途了。现在要做的是打磨粗糙边缘和添加实用功能,具体而言是做...

企业应用平台的六大引擎

2 月 29 日
阅读 3 分钟
153
由于技术的进步,现代企业应用无需从头开始开发,而可以利用企业应用平台,通过组件化、低代码乃至无代码的方式来构建,以获得更高的质量、性能和交付速度。本文提出企业应用平台的一种以元数据为中心的、基于六大引擎的架构。平台以元数据和业务领域为中心,六大引擎环绕着中心,为企业应用的开发提供强大的赋能。有人...

给程序员的新年礼物

1 月 1 日
阅读 1 分钟
202
2024年来临之际,给大家带来一款新型的Java ORM框架(按现有设计,有望支持其他语言)作为新年礼物,名叫Orca。还在开发中,之后继续更新开发进度。

背压的本质

2023-09-05
阅读 3 分钟
863
我们搞技术要培养见微知著的能力,用逻辑分析和构造来代替经验主义。例如“背压”(back-pressure)的话题就可以从很简单的模型出发,通过一步步的推导来完善解决方案。

数据流水线的成本自适应算子

2023-08-31
阅读 5 分钟
983
如今我们构建很多的数据流水线(data pipeline)来把数据从一处移动到另一处,并且可以在其中做一些转换处理。数据的移动是有成本的,对此成本的优化可以为数据流水线的拥有者带来成本效益。

动手写Amazon SQS客户端

2023-08-20
阅读 13 分钟
986
Amazon SQS是AWS上主流的消息队列服务,按理说它是有SDK的,那么为什么还要自己编写客户端呢?因为它提供的SDK太简单,就几个Web API,没有办法直接用。我们具体来说一说。

索引选择度:高性能SQL的关键

2022-07-31
阅读 8 分钟
2.2k
一般普遍认为索引能提高SQL性能,但这并不总是成立, 因为只有高效的索引才能真正提高SQL性能。事实上,过多的索引甚至会减慢写操作的速度。我们之前的文章讨论了一个低效的索引是如何拖慢系统性能的,但那里的示例是不常用的GIN索引。这一次,我们介绍的示例是低效的BTREE索引。在这两种示例中,高性能SQL的共同关键都...

少即是多:从分钟级提升到毫秒级的PostgreSQL查询

2022-06-03
阅读 10 分钟
2.8k
使用更多的索引并不一定能提升数据库性能。“少即是多”的原则也适用于数据库领域。本文将介绍我们通过少用索引使一个PostgreSQL查询提速几千倍,从分钟级提升到毫秒级的经验。

递归、迭代和动态规划:以九宫格键盘为例

2022-06-01
阅读 7 分钟
1k
给定一个从数字到字母的映射表:1 => [a, b, c], 2 => [d, e, f], 3=> [g, h, i], ......,实现一个函数List<String> calculate(String input),若用户输入任意的数字串,要依据映射表转换每一个数字,返回所有可能的转换结果。例如,若输入“12”会得到ad, ae, af, bd, be, bf, cd, ce, cf这9个结果;若输...

生产就绪的算法:以随机句子为例

2021-08-08
阅读 16 分钟
1.6k
题意为:输入一个句子(即一个单词序列)和一个预期长度,需从输入句子随机抽取单词组成一个新句子(只是一个单词序列,不考虑语法),新句子的单词数量等于预期长度。随机抽取的具体规则为:随机取一个单词作为首个单词加入新句子,每当新句子加入一个单词,对于这个单词在输入句子中的所有出现位置,随机选择一个出现...

数据库主键适合用UUID吗?

2021-07-12
阅读 4 分钟
4.2k
为什么想到用UUID做数据库主键呢?考虑如此场景,有多个生产环境各自运行,有时要从一个环境导数据到另一个环境,因此要求主键不冲突,自增整数不能满足要求。搞个中央发号器服务如何?很多互联网公司都这么做了。但对于以上场景,那就需要各个生产环境依赖同一个发号器服务了,难以跨数据中心乃至跨地域。其实这需要一...

我的2019与2020

2020-12-31
阅读 2 分钟
1.2k
我自己也没空做AI,这一年主要在做权限管理系统,这系统可复杂了,基于规则的、行列级粒度的权限控制,提供多种多样的API给业务团队,任务多,难度大,发动大伙一起做才做完。

CDI和Spring的主要差异

2020-12-19
阅读 2 分钟
3.9k
继上一篇文章《Java元注解meta-annotation与依赖注入》,我又探索了两大依赖注入技术体系CDI和Spring的关系。Spring实现了CDI规范吗?相信大家也会有这种问题。

Java元注解meta-annotation与依赖注入

2020-12-19
阅读 2 分钟
1.3k
注意到Java的依赖注入DI规范(起初以为是CDI规范,然后发现是DI规范)有个叫@Qualifier的注解,用于当一个interface或base class有多个实现类时,能选择其中一个实现。如不用这一注解,一般的(按类型)注入就会报错说“不知道要在多个实现中选哪一个”。这一注解可以放在一个自定义注解上(例如@MyPreferredImplementatio...

代码要不要写注释?

2019-08-24
阅读 1 分钟
2.6k
当注释内容与代码的实际作用不一致时,注释就是错误的:// copy node to new positionmoveNode(node, position);

论文解读:Design patterns for container-based distributed systems

2019-03-18
阅读 2 分钟
4.3k
论文认为,继OOP(面向对象编程)所引领的软件开发革命之后,如今似乎在分布式系统开发中也发生着一场相似的革命:基于容器化组件构建的微服务架构。

MapReduce精髓

2019-02-28
阅读 2 分钟
1.9k
map: 把输入数据集切分成很多份(1份可包含很多records),传给map函数做转换处理(每次处理1条record,得出1条结果),结果集被输出到文件

我的2017与2018

2019-02-21
阅读 1 分钟
1.2k
写了这些博客:Kotlin框架巡礼轻境界的可用性与性能优化记缓存穿透、雪崩、热点与Redis解读 Kotlin/Native 技术预览版解决Gradle传递性依赖冲突关于Kotlin语法的异议JVM JIT编译能改变某些反射的执行结果

谈一谈自动编程

2019-01-15
阅读 1 分钟
2.6k
在自动产生程序之前,先要知道需求是什么吧?要能把需求准确地描述给机器,这就需要一种需求描述语言。假如我们制造了这种需求描述语言,它进一步发展,越发规范,成为了一种DSL(领域特定语言)。嗯,这就变成了DSL编程。

JVM JIT编译能改变某些反射的执行结果

2017-09-28
阅读 3 分钟
2.9k
某个测试服务器试图通过反射来修改static final变量的值,出现了时灵时不灵的现象。 开发环境无法重现。这是怎么回事呢? 先介绍背景知识 一般认为,static final常量会被编译器执行内联优化,即它的值会被内联到调用位置。 这对于如下方式初始化的字面常量有效: {代码...} 但对于如下方式初始化的运行时常量无效: {代...

关于Kotlin语法的异议

2017-09-01
阅读 3 分钟
4k
情况 Lambda的表示法是{ ... } ,例如: {代码...} 若函数的唯一或最后一个参数是函数类型,可以不需要用括号围住这个参数,这样就能随手写出这样漂亮的DSL: {代码...} 但是就不能像C/Java/Scala一样用花括号把代码组织成普通代码块了,而是必须调用run函数,这是Kotlin开发组的一种取舍: {代码...} {代码...} {代码.....

解决Gradle传递性依赖冲突

2017-04-10
阅读 2 分钟
24.1k
小知识:SLF4J是一个日志接口库,Logback是一个日志实现库,logback-classic能桥接SLF4J和Logback。小知识:传递性依赖是指项目所直接依赖的库又间接依赖了更多的库,例如Spring依赖CGLib。

解读 Kotlin/Native 技术预览版

2017-04-06
阅读 1 分钟
4.4k
很高兴Kotlin在前两天发布了Kotlin/Native的Tech Preview版本。Kotlin/Native能把Kotlin编译成机器码,也就是C/C++、Go和Rust的层次,于是这个领域又添一位竞争对手。

缓存穿透、雪崩、热点与Redis

2017-04-03
阅读 2 分钟
15.6k
《Redis架构之防雪崩设计》这篇文章(下文称之为“原文”)写得非常好,全面概括了大规模系统可能面对的缓存穿透和缓存雪崩等问题,可以看出是一线实战经验的精华总结,非常适合大家学习。

轻境界的可用性与性能优化记

2017-03-31
阅读 2 分钟
2.4k
问题 昨天凌晨1点多,可能是V友太热情,或者爬虫太勤奋,轻境界的服务器宕机了,悄悄地,没有留下错误日志。 我上午收到用户反馈,赶快先重启服务器压压惊,再来分析原因。 连错误日志都没有,这是什么程度的问题呢? 最大的可能性是 JVM内存不够用 或 线程数过多。需要调整相关参数。 另外还需要让服务器能自动恢复。 ...

Kotlin框架巡礼

2017-02-12
阅读 10 分钟
11.8k
首先要说明,Kotlin支持你所知道的所有Java框架和库,包括但不限于Spring全家桶、Guice、Hibernate、MyBatis、Jackson等,甚至有人在用Kotlin写Spark大数据程序,因此Kotlin不需要专门的框架。因此,为Kotlin开发框架的人,都是怀着满满的爱!

我的2016

2016-12-31
阅读 1 分钟
1.8k
一些事件: 今年终于养成了记日记的习惯 上线了“轻境界” 每个月都在轻境界发表了文章,其中《JVM并发编程模型览》历经两年终于完成 考到了驾照 每日俯卧撑数量达到150 开源项目: 完善了Answerer (主要能自动生成跨类型的bean copier代码) 完善了TraceSonar (分析method调用关系) 创建了Hasta (主要能运行时生成跨类型的...

JVM并发编程模型览

2016-11-27
阅读 7 分钟
5.3k
本文介绍和点评JVM上的Thread, Thread Pool, Future, Rx, async-await, Fiber, Actor等并发编程模型。本人经验有限,难免粗陋,还请高手多多指教。

Kotlin + Spring Boot服务端开发

2016-10-31
阅读 7 分钟
15k
著名IDE厂商JetBrains开发的基于JVM的静态类型编程语言,声称100% interoperable with Java。Kotlin是由工程师设计的,各种细节设计非常切合工程师的需要。语法近似Java和Scala,且已活跃在Android开发领域,被誉为Android平台的Swift。

Java如何获取泛型的实际类型?

2016-08-24
阅读 1 分钟
6k
有人问以下情况如何得到泛型参数的实际类型: {代码...} 由于Java的类型擦除,没有办法获取,APIService不知道它被赋予了User。 但可以变通一下: {代码...} 对应的类定义是: {代码...} Kotlin, Scala等基于JVM的语言具有reified generics,能方便地获取实际类型。