Java
文章平均质量分 50
一个非典型的程序员
我很害怕将来我有孩子时,我教给他(她)的第一句话不是爸爸或者妈妈,而是“Hello World!”
展开
-
一种复杂业务场景的解决方案(代码结构)
关注我们的接口性能,不要循环RPC、不要重复RPC、不要复杂SQL,写简洁干净的代码原创 2021-01-26 10:51:06 · 676 阅读 · 0 评论 -
MySQL死锁事件排查
#背景一次购物车线上发版后,观察到线上出现死锁(数据库为MySQL,存储引擎为InnoDB)的错误日志,日志截图如下:排查于是根据日志traceId定位是到是某个用户在请求一个购物车的查询接口,且出现死锁的前后用户对购物车只做了这一种查询请求 /api/zcy/trade/middle/carts/orderGroup,100秒内请求了12次,3次失败9次成功,失败的3次中2次是因为其他业务接口超时导致,只有1次是数据库表死锁导致,即我们上方看到的数据库死锁错误。经过确认,此次发版并没有修改该接口原创 2020-11-22 00:12:45 · 493 阅读 · 0 评论 -
深入Elastic-Job源码(版本2.1.5)
写在前面目前公司使用的作业调度工具是Elastic-Job,版本2.1.5,三月份因为失效转移配置出过一次线上事故,排查问题的过程中粗略的读了一下源码,刚好借此机会深入理解一下Elastic-Job 。总体架构注:图片来自https://github.com/elasticjob/elastic-job-lite概述Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项...原创 2020-04-30 22:51:59 · 1115 阅读 · 0 评论 -
elasticjob任务失效转移异常
elasticjob原创 2020-03-16 00:35:39 · 2265 阅读 · 1 评论 -
记一次线上CLOSE_WAIT事件
2020年3月5号14时40分,技术支持反馈有用户来电询问单据无法打印,开发人员经过日志排查,发现是连接阿里云OSS超时,经过日志分析,从3月4号16时10分开始陆陆续续出现单据打印失败,因为昨天前天均未发版,上次发版还是2月28号,因此不太可能是近期发版导致的问题。连接超时,首先想到的是联系运维架构组是否有何种外网访问限制或者OSS固有问题,但是均无答案。包括开通外网访问限制均未能解决问题。...原创 2020-03-06 01:19:17 · 398 阅读 · 0 评论 -
GC日志理解
[ParNew: 2588536K->85788K(2831168K), 0.0608460 secs] 3309635K->806939K(8074048K), 0.0611363 secs] [Times: user=0.23 sys=0.00, real=0.06 secs][ParNew: 2588536K->85788K(2831168K), 0.0608460 se...原创 2019-10-16 23:39:27 · 209 阅读 · 0 评论 -
浅拷贝与深拷贝
浅拷贝和深拷贝原创 2017-12-06 21:38:27 · 204 阅读 · 0 评论 -
实例变量/类变量与this
Java语言很强大,但有些强大的地方是值得商榷的,比如实例对象可以访问类变量。虽然Java语言允许我们通过实例对象去访问类变量或者方法(静态变量、静态方法,static关键字修饰),但是这样的写法非常不好:第一,这会使得程序员,尤其是初级的程序员产生理解上的错误,永远记住类变量只属于类,而且我们也没有任何理由要使用实例去访问类变量;第二,增加编译器解析成本,因为编译器会将实例访问转换成通过类访问。原创 2017-12-03 12:56:55 · 626 阅读 · 0 评论 -
Java集合的序列化
Java集合是如何序列化的?原创 2017-11-30 21:17:08 · 6681 阅读 · 0 评论 -
一行一行读Java源码——ArrayList
ArrayList可能是日常开发中使用频率最高的集合类型之一(另一个是HashMap),但是有些细节不细究、不常回顾的话总是会慢慢模糊,比如有一语句List<Object> objects = new ArrayList<>(); ,试问此时objects 的容量(capacity)是多大?原创 2017-12-10 12:58:00 · 403 阅读 · 0 评论 -
一行一行读Java源码
毫无疑问,Java源码是Java领域的经典之作,它既可作为Java编程范例供Java程序员学习模仿,同时熟悉这些源码也是对程序员的基本要求。熟悉源码能让我们更好地驾驭Java lib,写出更好的代码,鉴于此,于是决定边读边记录、边分享边提高。原创 2017-12-10 11:28:34 · 587 阅读 · 0 评论 -
Java Exception
Java ExceptionWhat Is an Exception?The term exception is shorthand for the phrase “exceptional event.” Definition: An exception is an event, which occurs during the execution of a program,...翻译 2018-04-10 09:14:05 · 284 阅读 · 0 评论 -
一行一行读Java源码——Iterator
迭代器我们都知道,当我们需要删除List中元素时,必须使用迭代器来操作,为什么需要使用迭代器来进行remove操作,而不能在for循环中删除?那么迭代器又是什么呢?原创 2017-12-09 15:11:37 · 436 阅读 · 0 评论 -
Java静态同步方法与非静态同步方法
静态与非静态方法是否存在竟态静态同步方法与非静态同步方法存不存在竟态条件,通俗地说就是分别调用静态同步方法和非静态同步方法的两个线程会不会同步?原创 2018-01-02 21:57:37 · 1985 阅读 · 0 评论 -
Java垃圾回收器
本文简要介绍了Java HotSpot VM包含的三种不同类型的垃圾回收器:串行回收器、并行回收器及并发回收器,并提供了一个回收器选择的入门指导。翻译 2018-01-03 21:14:58 · 265 阅读 · 0 评论 -
一行一行读Java源码——LinkedBlockingQueue
1、LinkedBlockingQueue概述LinkedBlockingQueue,顾名思义,一个链式的(linked)、阻塞的(Blocking)队列(Queue)。 Queue,首先想到的是FIFO特性。 Linked,Queue其结构本质上也是线性表,可以由链表和顺序表实现,LinkedBlockingQueue就是链表实现,ArrayBlockingQueue是顺序表实现。因Qu原创 2018-01-09 17:13:17 · 358 阅读 · 0 评论 -
Lombok错误解决
这个有可能是Lombok新手使用中最常见的错误有如下代码是引入了Lombok工具类的。@Datapublic class User { private int id; private String name; private int age; private String address; private String mobile;}@S...原创 2018-02-12 15:14:30 · 66704 阅读 · 26 评论 -
Mybatis中的一个潜在错误
真的,我很难找到一个合适的标题给它。看代码通常查询需要传递各种参数,于是我们在项目中封装了一个查询参数对象,将各种可能的查询参数封装进这个对象中,然后在mapper文件中写了一个很长where语句,使用if来判断是否有值。如下方截取的片段,初看觉得没什么问题,通常情况下,bidIds和bidId不会同时使用,我们构造查询对象的时候只会对其中一个set值。 <if tes...原创 2018-04-14 09:55:12 · 423 阅读 · 1 评论 -
解决multi modules Springboot项目的maven parent冲突
通过Springboot initializer 生成的springboot maven项目中,pom文件会包含parent标签,如下代码<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifac...原创 2018-11-14 10:56:40 · 1763 阅读 · 0 评论 -
一次程序启动异常排查———ali-phoenix和mysql-connector-java冲突
事情是这样的,一个夏日的午后,我先是提交了代码到我自己的开发分支,然后将开发分支合并到一个test分支,准备发到测试环境。先用Jenkins构建,正常,然后测试同学更新到test环境,十分钟过去了,更新仍未完成,哟嚯,多半是要凉了。打开日志,一看,果然报错了。不对呀,我的分支启动是正常的啊,本地重新启动试试,我的分支可以正常启动,于是切到test分支重新启动,果然启动失败,错误信息如下:从最...原创 2019-07-26 22:52:35 · 551 阅读 · 0 评论 -
正则表达式
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则原创 2017-06-22 22:15:23 · 264 阅读 · 0 评论 -
new对象与Spring对bean的初始化的差别
这个问题是一次我将老系统代码迁移到基于Spring构建的新系统中时遇到的,老代码中有很多地方使用了new方法来初始化对象,当时也没有特别注意,最后联调的时候发现所有new出来的对象中使用Autowired自动依赖注入的属性全都抛出了NullPointerException。什么意思呢?@ComponentClass A { ...} @ComponentClass B { ..原创 2017-11-20 22:39:14 · 3284 阅读 · 5 评论 -
关于编程的一点体会(Tips,持续更新中)
大学开始学习计算机、接触编程,然后研究生,到现在工作一年多,这么些年走过来不能说对编程有多么痛的领悟,但是一些小心得体会还是有的,或是某一时刻的突发奇想、或是自己或他人犯的错误、或是读到的好代码好文章感悟,大抵如此。这些小的东西如果没有总结记录下来,时间久了必会失传,同时也为了能够时常回顾以及交流学习,于是尝试一点一点记录下来。随着编程手艺的提高与认识的变化,我会持续更新它们。原创 2017-09-23 10:04:29 · 324 阅读 · 0 评论 -
C/C++指针和Java引用
C/C++指针 vs Java引用Java没有指针,只有引用。引用:引用是一个指向其他事物的变量,它可以用来作为该事物的别名。 指针:指针是一个存储内存地址的变量,其目的是用来指代存储在该地址中的事物。翻译 2017-07-06 00:51:14 · 667 阅读 · 0 评论 -
几种Java新建对象的方法
Java有4种方式创建对象: 1.用new语句创建对象,这是最常用的创建对象的方式。 2.运用反射手段,调用Java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。 3.调用对象的clone()方法。 4.运用反序列化手段,调用java.io.ObjectInputStream对象的read转载 2017-07-13 21:30:02 · 299 阅读 · 0 评论 -
Java常见集合一览表
Java中集合种类多,功能以及特性各异,为了便于记忆和使用,花了一些时间制作了一种Java常见集合一览表。Java常见集合一览表集合接口/类K/EV是否线程安全说明Collection接口N/AN/AN/A定义了集合的基本方法,如size、isEmpty等Vector类可为nullN/A原创 2017-06-11 21:35:59 · 1123 阅读 · 0 评论 -
Java浮点数在计算机中的表示方法(IEEE754-1985)
Java double的表示范围不是-2^63–(2^63)-1,同理float。以double为例,最高位为符号位,62-52位为指数为,51-0位为尾数,或者称有效数字位。原创 2017-06-06 23:05:55 · 1188 阅读 · 0 评论 -
Java Annotation学习笔记
作为一个早期短暂从事过C++开发工作的程序员,我个人认为Annotation可能是Java与C++语言较大的不同点之一,这也是一个前C++程序员由衷认为Java可能、或许、maybe要比C++更好用的原因之一。二十多年来,Java一直保持着更新,不断完善并与时俱进,这可能是其多年来独领编程语言之风骚的重要原因。原创 2017-07-02 21:16:17 · 295 阅读 · 0 评论 -
Java异常
在我参与过的一些Java项目、或者阅读过Java代码中,异常的使用或多或少都有点问题,有些甚至是误用。可能很多人都了解异常的基本知识,但是使用的时候往往过于随意,然而这样的随意往往并不能造成什么严重的问题,所以很多程序员,尤其是初级的程序员也就没有在意它,于是代码中总是会有那些让人不舒服的异常使用代码;另一方面,Java异常类型中包括Checked Exception(Runtime Excepti原创 2017-06-21 00:02:07 · 364 阅读 · 0 评论 -
AOP术语
Advice spring切面可以应用5种类型的通知 前置通知(Before):在目标方法被调用之前调用通知功能; 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么; 返回通知(After-Returning):在目标方法成功执行之后调用通知; 异常通知(After-throwing):在目标方法抛出异常后调用通知; 环绕通知(Around):通知包裹了被翻译 2017-06-19 23:18:38 · 218 阅读 · 0 评论 -
Java Object类型能不能强制转化为值类型
public static void main(String[] args) { boolean var = true; foo((Object)var);}public static void foo(Object value) { boolean var = (boolean)value; System.out.println(var);}如上方代码所示,函数原创 2017-06-20 22:14:39 · 5653 阅读 · 0 评论 -
什么是Tomcat以及Tomcat使用方法
什么Tomcat? The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies. The Java Servlet, JavaServer Pa原创 2017-06-19 23:13:37 · 1915 阅读 · 0 评论 -
读Java核心技术笔记
1、Java的设计者选择了不支持多继承,其主要的原因是多继承会语言本身变得非常复杂(如C++),效率也会降低(如图Eiffel)。2、对象包装器类是不可变的,即一旦构造了包装器,就不允许改变包装在其中的值。同时,对象包装器还是final,因此不能定义它们的子类。有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。通常,这些类型称为转载 2017-06-19 22:26:18 · 170 阅读 · 0 评论 -
Java有没有多继承
很多人都知道Java是单继承的,其实准确的说应该是这样的:Java的类是单继承的,即每个类只能继承一个类。但是,Java中也有多继承,接口支持多继承,即一个接口可以继承多个接口。原创 2017-07-31 14:49:21 · 1837 阅读 · 0 评论 -
Java值传递与引用传递
尽管我自认为在C/C++中就已经将这两种传递理解得很透彻了,但是不经意间这错误还是犯得彻彻底底。为此,我总结出这样的一句话:如果你想修改引用指向的内容,你需要传递引用;如果你想要修改引用本身的值,那么你需要传递引用的引用,否则那只是穿上了引用外衣的值传递。原创 2017-07-03 21:41:43 · 364 阅读 · 0 评论 -
抽象类和接口
曾经在校招的时候被问到抽象类和接口的区别和使用选择,无奈当时我主攻的是C++,因而对接口几无所知,自然也没回答上来。 前些时候看《设计模式》的,其中说到继承某个类和实现一个接口可以用两个关系来表示:is-a和has-a。也就是说,类A继承类B,表示A is a B;而类A实现接口C,意味着A has a C,可以理解为A具有什么样的能力。is-a和has-a总结的相当好,设计模式中推荐尽可能地使原创 2017-09-21 20:14:03 · 252 阅读 · 0 评论 -
Java垃圾回收过程
摘自Oracle官网的一段对于Java GC的描述翻译 2017-07-25 23:41:48 · 297 阅读 · 0 评论 -
用Java实现Spring+MyBatis的配置
个人不太习惯也不太喜欢xml风格配置spring,于是用Java配置了一个基本的spring+mybatis的项目。有需要的话,前往GitHub源码地址,并以Maven Project方式导入eclipse或其它IDE。原创 2017-08-03 13:28:47 · 430 阅读 · 0 评论 -
Java访问权限
你真的了解Java访问权限吗?类中的默认访问权限和接口中的默认是一回事吗?protected和包访问权限又有什么区别呢?原创 2017-07-30 23:46:45 · 392 阅读 · 0 评论 -
Java泛型编程与多态、重载的同与不同
从字节码看Java泛型编程与多态、重载的同与不同。原创 2017-07-23 23:53:20 · 742 阅读 · 0 评论