关于 error message 一点个人看法

2019年7月14日 没有评论

做技术转眼很多年了,也参与过很多系统的开发了,见过各种同事写的 error message,在我看来有些是非常典型的程序员思维,自己感觉一点问题都没,孰不知用户一头雾水,每次提出修改的时候,有些人还振振有词改不了,我提出自己修改意见之后,还有人说不行,前几天和我们半路出家的产品经理聊这个问题,今天闲来无事写一篇文章简单总结一下自己的想法,供大家讨论。

首先开宗明义:个人认为 error messge,不仅是提示用户为什么报错,他遇到了什么问题,而且是告诉用户如何解决他遇到的这个问题,所以个人最好的 error message 应该具备以下要素:

1. 准确

这个不是废话吗?如[……]

Read more

分类: 其他 标签:

关于 MySQL 和 MyBatis 易错的几个点

2019年7月8日 没有评论

由于某些不可抗拒力原因,自从开博以来断更了一个月,昨天晚上突然发现竟然解封了,今天立即写一篇小文章感谢党感谢政府感谢人民。话说,这一周有一个实习的同学,在写一个小东西的时候,发现一个问题,排序没有生效,刚好之前我也看过另外一个问题,现在算是总结一下。

1. ORDER BY 不生效

代码大概就是:


SELECT * FROM t ORDER BY "id DESC";

我们其实可以很明显的看出来这个 SQL 有问题,ORDER BY 的后面多了引号,关键是这个 SQL 报错吗?如果 id 是随便写的一个不存在的列报错吗?答案是都不报错[……]

Read more

分类: Java 标签: ,

Redis GeoHash 的一个小示例

2019年5月19日 没有评论

上周产品经理提了一个类似于 LBS 的应用,第一时间想到了忘记了之前什么时候看 Redis 的 API,发现 Redis 自 3.2 版本之后,新增了一类关于地理位置相关的 API,于是拿来测试一下,发现特别好用,写一个小例子作为笔记。

首先需要说明的是,由于我们公司的 JDK 的版本是 1.7,所以我采用的 spring-data-redis 的版本是:1.8.20.RELEASE,最新二点几的版本已经不支持 JDK 1.7,而一点几和二点几的版本的 API 有略微的差异(下面会说明,还有一点点我的小感悟),废话不多说,直接看例子:


    @Override[......]

Read more

分类: Java, Redis 标签: , ,

分享 Guava 的一些常见方法

2019年4月30日 没有评论

前几天同事分享了一些关于 Guava 的一起基础用法,我之前没用过,感觉挺好的,所以记一些常见的方法。

一. 基础工具类,字符串相关的

其实这些在 apache commons-lang3,算是重复造轮子吧,简单说一下。

1. 判断字符串是否为空,之前看到很多人自己定义,这些可能是一些老程序员吧,apache commons-lang3,Guava 的如下:


	boolean nullOrEmpty = Strings.isNullOrEmpty("");

2. 补全字符串(在前面补全和后面补全)

[......]

Read more

分类: Java 标签:

关于 CAP 理论 和 BASE 理论

2019年3月31日 没有评论

一、CAP 理论

CAP 理论是分布式计算领域公认的一个定理,是分布式架构师必须掌握的理论,目前网上关于这块的资料也很多,各种说法,其实 CAP 理论自身也是一个不断发展的过程,相比之下比较准确的说法应该是:在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。也就是说必须是相关连接并且共享数据的分布式系统才是我们讨论 CAP 的基础,另外就是 CAP 理论关注的是对数据的读写操作,而不是分布式系统的所有功[……]

Read more

分类: Java 标签: , ,

小议服务器命名

2019年2月24日 没有评论

这个问题其实不能称之为问题,给服务器命名应该算是一个常识性问题,任何人都可以想到的,其实不仅是服务器,在我们生活中的一切都有名字,如果我们生活在一个没有名字的世界中,你想想有多可怕把?但为什么写这篇文章呢?因为我们公司很奇怪,不知道是运维疏忽还是啥,每次通过跳板机登陆线上服务器,必须通过 IP 地址才行,所以每个人一定要记录自己负责的服务器的 IP 地址才可以,否则一筹莫展,但是 IP 地址,大家都懂得,不然也不会有域名的存在了,大家都通过 IP 访问互联网就好了,前几天看公众号,刚好看到知书堂有位老师写过一篇文章来说这个问题,所以转载过来,供大家给服务器命名参考,后续也会给出我自己的小建议。[……]

Read more

分类: 其他 标签: ,

MySQL sort 分页重复数据(转载)

2019年1月26日 没有评论

前两天在写一个东西的时候,测试的同学说发现一个问题,排序分页,第二页和第一页有重复数据,当时我看了一下,确实有这个问题,然后就想到几年前我就曾经遇到过这个问题,淘宝数据库内核月报上也做了说明,所以这个时候就体现出了老程序员的价值:踩过的坑多,坑坑相连也就都成了平地,考虑到很多人不知道这个问题,所以把原文转载过来,以期能够让更多的人看到,原文如下:

1. 背景

6.5 号,小编在 Aliyun 的论坛中发现一位开发者提的一个问题,说 RDS 发现了一个超级大 BUG,吓的小编一身冷汗 = =!! 赶紧来看看,背景是一个 RDS 用户创建了一张表,在一个都是 NULL 值的非索引字段上[……]

Read more

分类: MySQL 标签: ,

Maven 打包 Excel 文件损坏

2019年1月13日 没有评论

前几天在项目中遇到一个小问题,有一个 Excel 文件放在 classpath 下,通过流下载下来,本地测试的时候一点问题都没,但是部署到测试环境却不行了,说文件已损坏,然后打不开,简单代码如下:


    @RequestMapping(value = "/export", method = RequestMethod.GET)
    public void export(HttpServletResponse response) {

        ServletOutputStream servletOutputStream = null;[......]

Read more

分类: Java 标签: , ,

Java 学习之路

2018年12月31日 没有评论

前几天刷微博,看到博主 @Java大本营 发了一个图片,总结 Java 一些常见的知识点,感觉挺好,整理成文字版,发在我的个人博客,作为一个大家学习复习的文档,也欢迎有人在评论中留下各种参考资料,一下是正文。

一、基础篇
1. JVM
①. JVM 内存结构
堆、栈、方法区、直接内存、堆和栈的区别

②. Java 内存模型
内存可见性、重排序、顺序一致性、volatile、锁、final

③. 垃圾回收
内存分配策略、垃圾收集器(G1)、GC 算法、GC 参数、对象存活的判定

④. JVM 参数及调优

⑤. Java 对象模型
oop-klass、对象[……]

Read more

分类: Java 标签: ,

使用 Spring AOP 注意事项

2018年11月25日 没有评论

说实话,由于我个人某些基础不是很牢固,所以前一段时间关于 Spring Aop 踩了一个坑,其实很简单,今天就记录一下,先说结论:

不能被 Spring AOP 增强的方法:

1. 基于接口的动态代理:除 public 外的其它所有的方法,此外 public static 也不能被增强
2. 基于 CGLib 的动态代理:private、static、final 的方法,也就是只有 public 和 protected 可以,但是要注意切入点语法的配置

测试用例如下,pom 文件:


        <dependency>[......]

Read more

分类: Java 标签: