六道漫步

唯有编程能使我忘记ACG,唯有ACG能使我忘记编程.

分布式环境中是否允许枚举作为返回值

《阿里巴巴JAVA开发手册》禁止枚举作为返回值的规定的看法

使用枚举作为返回值可能造成的问题其实大家都知道就是客户端和服务端版本不一致的话,会造成反序列化异常. 于是《阿里巴巴JAVA开发手册》对于这个问题的处理办法就采取了尽量避免异常出现,所以禁止定义枚举为返回值. 首先,枚举不作为返回值,那么作为替代品只能是返回code. 那么本地系统收到了一个未定义的code,该怎么处理呢? 想来想去,无非有两种情况: 1.本地系统根本没用到这个...

关于Java Checked Exception机制的思考

读王垠《Kotlin和Checked Exception》引发的思考

一、程序设计语言中的异常机制 一般来说程序设计语言的异常机制主要分为两种,一种是以C语言为代表机制的错误码,一种是异常对象机制(多返回值语言可用多返回值模拟异常对象机制,可视作相同机制). 1.错误码机制 (一)含义 错误码机制主要以C语言为代表. 错误码机制就是指对于一个函数执行时发生的错误情况,使用函数本身的返回值返回事先约定好的特殊值,以此通知函数的调用者发生了异常的情况. 事实上...

debug记录:eclipse违反java8方法引用规范的bug

由一个eclipse bug学习java8方法引用规范

今天,在公司项目中修复一个Bug时遇到了百思不得其解的事情. 事情的起源是测试上报了一个Bug,这个Bug的操作很简单,在测试环境下确实存在,但是在本地的开发环境中无法复现. 于是我首先怀疑开发环境和测试环境的代码版本不同导致了这种事情.但是一系列操作之后,我确认了并不是测试环境与本地开发环境的代码版本区别. 由于服务器上的日志无法准确定位出错位置,显然Bug出在我没有预料的地方.我只...

关于Java单继承机制与多接口机制设计的思考

由Java8对interface增加default方法引发的Java继承体系设计的思考

Java的单继承(extends)机制与多接口(interface)机制 一、含义 众所周知,Java中的继承体系是单继承的,即只能继承一个类(Class). 也就是说一个类只会有一个父类(Parent Class),如果不断追溯一个类的父类,将该类和其所有超类(Super Class)用类关系图展示,那么将会是一个线型的类关系图. 然而无论是在现实世界中还是在代码世界中,都确实存在一个...

debug记录:图标加载与tomcat的session机制引发的bug

由请求资源路径错误和火狐浏览器的网络请求显示自动过滤引发的debug血案

前几天,被分到修一个线上项目存在已久的闪退bug. 该闪退bug特点: 1.只在线上环境出现,本地的环境不出现该bug. 2.只在某个浏览器被打开后,第一次进入登录页,登录该项目时出现. 即闪退后再登录,第二次开始进入登录页(无论是否同一标签页)均不会出现闪退. 3.补充:使用的运行环境服务器是tomcat. 该bug的这些特点给debug造成了极大的麻烦. 关于这种闪退的bug...

debug记录:连接池和事务引发的bug

JUnit4测试框架中报数据库连接已关闭错误的一次debug

这两天在工作中遇到一个BUG. 项目里有一个定时计算任务,主要功能就是从原始数据表计算汇总一些数据然后更新到汇总表.这个定时任务是多线程同时进行计算更新的,因为要汇总的数据包括很多家企业的以天为单位的数据,单线程执行太耗费时间. 由于项目并没有为这个定时计算任务做允许手动执行的功能,所以项目在test中做了一个测试方法用作手动执行定时任务. 然而在计算任务跑完后控制台报错了如下错误: ...

单例模式中的多线程

以单例模式入手了解多线程环境

单例模式(Singleton Pattern) 一、设计模式(Design pattern) 一个程序员应该不会对设计模式这个词感到陌生. 设计模式其实就是有经验的程序员在软件开发过程中面临的一般问题的解决方案的归纳和总结,能被归纳总结后留下来的,自然是被认为比较好的解决方案. 从某种意义上来说,设计模式其实说明了语言的不足和缺陷,语言没能够把这些抽象集成到语言中. 理想的语言应该是...

浏览器同源策略及跨域方案

浏览器同源策略及跨域方案

如何实现ajax的跨域请求,这几乎是所有前端面试的必问内容,即使是后端被问到的几率也不低. 最近针对这个问题进行了比较全面的了解,本篇文章总结了相关内容. 想要理解跨域,就得从”同源策略”开始说起. 一、同源策略 1.目的 什么是同源策略,目的是为了什么? 我们都知道的是web环境是一个公开的环境,数不胜数的网站无法一一经过详细的审核.那么我们就无法避免恶意网站的存在. 试想一下...

关于复合索引和单列索引

关于复合索引和单列索引

之前,在上一篇博客《项目性能优化实践和SQL优化总结》中,我提到了可优化sql之一就是没有正确使用复合索引的sql. 这篇博客就总结一下复合索引和单列索引的相关内容. 复合索引(a,b,c)在作用上约等于(a),(a,b)(a,c)(a,b,c)合一.即查询条件中有首字段存在才会使用该索引. 除非所有记录a字段的值只有很少的几种,数据库才可能会在实质上默认b字段为首字段,跳过a字段进行扫...

项目性能优化实践和SQL优化总结

项目性能优化实践和SQL优化总结

最近,由于项目某些功能被客户投诉速度太慢,我被分配任务负责优化这些功能的性能,并且主导进行一次项目整体的性能优化. 我接到任务后,首先要做的就是先找出这些功能中主要耗时的部分. 为了达到这个目的,自然要上性能分析软件,这里我采用的是YourKit Java Profiler. 在性能分析软件中,展示了各个层级各个方法的耗时,自然是比较容易的找出了主要耗时部分. 在找到主要耗时部分后,...