java
竹木一540
这个作者很懒,什么都没留下…
展开
-
关于抢购的狂想二
我以前讨论过抢购的库存问题,我听到很多人的实现方式是得用redis加上lua实现计数操作。据说redis每秒两万次的操作不成问题。但问题是数据传输也需要时间。我以为能在本地解决就决不通过数据库解决。以下我的一个解决方案,在我看来没有百分百完美的方案,有好就有坏。1.库存表中(或商品表中)设如下字段:剩余数量,锁定数量2.用户下单时,向业务实例申请锁定资源3.业务检查本地实例资源是否够用,如果不够,向数据库申请若干资源(将锁定数量加上申请数量)4.扣除本地资源以下是伪代码class Stock{原创 2020-11-12 12:17:21 · 99 阅读 · 0 评论 -
分布式锁
网上也流传着很多分布试锁的实现方式,最近在读Redis in Action。里面也提到了分布式锁,我以前用redis实现锁,也只是实现一个简单的原子操作。并没用过太过复杂的方式,也没有实现阻塞。最近我想再写一个锁,不过当然跟一般的分布式锁不同。我的思路是:如果同一台机器多个线程判断资源有没有没占用,就没必要去redis上去查找了,直接查看本地标识。import java.util.concurrent.ConcurrentHashMap;public class MapLockSupport im原创 2020-11-07 11:39:31 · 140 阅读 · 0 评论 -
回忆多年前与C程序员共事后的总结
我曾在某大型项目组与某些高端人事共事(当然我只是个外包),从代码变量命名上可以看出,对方是做C出身,半路出家,转JAVA,除了用下划线命名之外,做C的程序员在很多细节上表现与JAVA的编程习惯不一致。不善长利用异常c语言中经常出现这样的代码/***返回:1代表成功,0代表失败***/int do_some_thing(int i ){ ....}int stat = do_some_thing(int i);if(!stat){}c语言或者像Go这样的语言中,函数经常返原创 2020-10-22 13:20:09 · 171 阅读 · 0 评论 -
程序中的时间问题
知识的盲区往往会影响到程序编程。对于只有锤子的人来说,所有问题都是钉子。缘由:前不久,一个做前端的同事联系我,他说一个时间控件接收到后端的数据后,显示时总是少了8个小时,他想用网上的个工具类,对时间进行加8的运算,以达到理想效果。我以前,在一大厂里撸代码,发现所有跟时间格式化相关的,都会减8操作后,再格式化,而且注释说明了:转成utc时间(都已经知道UTC时间了,还这样搞)。计算机的时间其实是一个长整型数,专业一点的术语叫时间戳,不同国家,或者不同地点,对同一时间的表示确不同,我现在的当前时间是.原创 2020-10-19 17:26:09 · 923 阅读 · 2 评论 -
接口标准设计与实现
我的接口标准设计与实现简介Restful协议项目中常见的方案。我的实现简介我想要在本篇博客中介绍一下我在Http Api制定上的一些实践,重点介绍api的返回格式,及实现及前端的处理流程。Restful协议网上的资料很多,不用多作介绍。优点:充分利用了Http的特性,正宗,规范。缺点:1. 实现起来很麻烦,我在spring的官方示例中看过以下代码return HtttEntity.code(HttpStatus.NO_DEFIND).body(...); //模拟代码,别当真contr原创 2020-10-17 15:09:18 · 776 阅读 · 0 评论 -
关于两道排序面试题的讨论
文章目录缘起正文题一题二扩展1 生成组织树2.查询时间段交集数据总结缘起不久前,我去一家创业公司面试,因为他们没有专业的java开发,于是请了一个颇有经验的人出了两道笔试题:1.二分查找的代码实现,2.谈谈关于软件设计原则的看法。也是比较难较难得了,很少有人会问到这些方面,特别是设计原则这块,有很多开发者都不了解这方面的知识。而第一题是很容易,但要是撸一串代码也会为难一批有十年以经验的开发者了(当然我还是有这个自信的)。在远程口试中,对方问到了两个简单的排序,我觉得这两个排序虽然简单,但很有意思。因为原创 2020-10-13 12:56:16 · 126 阅读 · 0 评论 -
code review总结
文章目录前言一.error日志二 装箱与拆箱三 没完没了的字符串四 过多的嵌套五 乱拷贝六 引用了不该引用的jar包。前言一六年,我参与了一个我有生以来的最高大尚的项目,我在项目中负责某功能计费模块的开发,尽管总个项目投入了很多人力,还有引进了很多先进的工具和管理方式,但那还是我有生以来见过最糟的项目之一一七年,我去朋友的创业公司,帮他组建团队,一九年至今年,我于一家物流公司担任架构方面的工作,在开发中,我常见那种写业务能力很强,但代码细节惨不忍睹的开发者,于是我想整理一些我见过的代码片断,并提供一原创 2020-10-08 21:56:17 · 430 阅读 · 0 评论 -
利用BlockingQueue进行批量操作
1 背景我曾接触一个项目,业务数据用Hbase存储,为了方便查询统计,采用elasticsearch作为查询库,但直接操作elasticsearch对性能有致命的影响。于是引用了rabbitmq + springstream来实现削峰操作。一开始,接收到一条消息后,我便将其插入到elasticsearch,但消费终始终太慢,于是改用调用ES批量操作的接口,且用异步多线程的方式插入。2 方案用生产者消费者的方式实现,接收到消息后,立即将消息插入到本地消息队列。另启几个线程消费线程消费消息,消费线程在消原创 2020-10-07 19:38:04 · 2377 阅读 · 0 评论 -
论jar的启动与停止方式(待修改)
nohup 服务启动与kill -9 服务停止当我们用mvn package 打包好一个spring-cloud项目的jar, 然后上传到服务器,用 java -jar xx.jar运行,当我们退出命令行,或按ctl+c时,发现服务已不在运行。于是往往会用如下命令启动nohup java -jar xxx.jar &用如下命令停止运行中的服务kill -9 12343以上命令确实能正常启动服务,还能确保服务不会因为不会因为终端退出而被终止。我相信大部会人都是这样做的。但它却存在一个致原创 2020-10-05 22:27:11 · 427 阅读 · 0 评论 -
Mybatis自定义分页插件
因为项目中常常用到分页,我又嫌弃网上流行的分页插件,所以手写了一个。以后再完善说明@JsonSerialize(using = TmsQueryJsonSerialize.class,typing = JsonSerialize.Typing.DYNAMIC)public interface Page<T> { int getPageNo(); int getPageSize(); int getTotalCount(); void setTotalCount原创 2020-10-04 14:33:42 · 428 阅读 · 0 评论 -
spring-cloud配置文件2
在上篇文章里提到了通过禁用服务发现和配置中心来方便开发,那么问题来了,如果我们要用Ribbon访问某远程服务,我们该如何做呢。虽然开发环境禁用了服务发现,无法获取服务列表,但我们可以通过配置文件为某服务配置一个静态地址。pda-sync: ribbon: listOfServers: 13.13.31.9:9509rms-route: ribbon: listOfServers: 17.11.144.30:8083以上配置了两个静态的地址,我们结合Ribbon可以直接用服务原创 2020-10-02 10:13:00 · 47 阅读 · 0 评论 -
spring-cloud配置文件随笔
在我多年工作经验中,接触到的很多分布式项目都将开发引入了无底的深渊,因为痛苦的经历太多,所以在我成为一名架构,搭建分布式架构时,我努力避开那些深渊,使团队中的业务开发人员不至于掐死我。从前年时,我开时接触微服务架构(主要是spring-cloud技术栈),综观网上流行的一些开源项目,或者有些开发者搭建微服务平台,感觉他们太过把微服务当微服务了,以至于根本就无法分模块开发。主要原因是搭建者不了解spring-cloud框架,或者经验不足,不明白开发环境与测试环境(或正式环境)解耦的重要性。我本人主张轻便开发原创 2020-09-29 11:51:04 · 147 阅读 · 0 评论