随笔分类 -  Java基础

千重要,万重要,基础最重要
摘要:JDK SPI是什么 最近工作中听几个同事说了好几次SPI这个名词,虽然和我没关系,但是心里默默想还是学习一下,不然下次和我说到SPI,连是什么都不知道那就尴尬了。 所以SPI是什么呢?SPI全称Service Provider Interface,在Java中还是一个比较重要的概念,是Java提供 阅读全文
posted @ 2019-09-01 11:37 五月的仓颉 阅读(6638) 评论(9) 推荐(7) 编辑
摘要:起因 6.1大促值班发现的一个问题,一个rpc接口在0~2点用户下单高峰的时候表现rt高(超过1s,实际上针对性优化过的接口rt超过这个值也是有问题的,通常rpc接口里面即使逻辑复杂,300ms应该也搞定了),可以理解,但是在4~5点的时候接口的tps已经不高了,耗时依然在600ms~700ms之间 阅读全文
posted @ 2019-06-09 23:14 五月的仓颉 阅读(24204) 评论(17) 推荐(27) 编辑
摘要:为什么使用logback 记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是我自己主导的项目,日志框架基本都换成了logback,总结一下,logback大约有以下的一些优点: 内核重写、测试充分、初始化内存加载更小,这一切让logb 阅读全文
posted @ 2018-04-01 00:02 五月的仓颉 阅读(70242) 评论(14) 推荐(51) 编辑
摘要:简单回顾门面模式 slf4j是门面模式的典型应用,因此在讲slf4j前,我们先简单回顾一下门面模式, 门面模式,其核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。用一张图来表示门面模式的结构为: 门面模式的核心为Facade即门面对象,门面对象核心为几个点: 知道所 阅读全文
posted @ 2018-03-22 23:03 五月的仓颉 阅读(162788) 评论(20) 推荐(116) 编辑
摘要:原文地址http://www.cnblogs.com/xrq730/p/7003082.html,转载请注明出处,谢谢 前言 一年半前写了一篇文章Spring3:AOP,是当时学习如何使用Spring AOP的时候写的,比较基础。这篇文章最后的推荐以及回复认为我写的对大家有帮助的评论有很多,但是现在 阅读全文
posted @ 2017-06-19 00:26 五月的仓颉 阅读(19150) 评论(21) 推荐(30) 编辑
摘要:前言 最近一直在看Spring源码,其实我之前一直知道AOP的基本实现原理: 如果针对接口做代理默认使用的是JDK自带的Proxy+InvocationHandler 如果针对类做代理使用的是Cglib 即使针对接口做代理,也可以将代理方式配置成走Cglib的 之后要看AOP源码了,Proxy+In 阅读全文
posted @ 2017-04-03 14:49 五月的仓颉 阅读(46378) 评论(10) 推荐(29) 编辑
摘要:模块间调用 在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种: (1)同步调用 同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法继续往下走。这种调用方式适用于方法b()执行时间不长的情况,因为b( 阅读全文
posted @ 2017-02-23 20:12 五月的仓颉 阅读(66661) 评论(16) 推荐(49) 编辑
摘要:ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: 如果以后要用到LinkedList了,可能有些朋友就会用一样的方式去遍历LinkedList了: 请记 阅读全文
posted @ 2016-02-14 22:53 五月的仓颉 阅读(20061) 评论(11) 推荐(24) 编辑
摘要:前言 本文来自方腾飞老师《Java并发编程的艺术》第一章。 并发编程的目的是为了让程序运行得更快,但是并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题、死锁的问题,以及受限于硬件和软件的资源限制问 阅读全文
posted @ 2016-02-11 21:26 五月的仓颉 阅读(14944) 评论(6) 推荐(4) 编辑
摘要:什么是Socket Socket的概念很简单,它是网络上运行的两个程序间双向通讯的一端,既可以接收请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递。 所以简而言之,Socket就是进程通信的端点,Socket之间的连接过程可以分为几步: 1、服务器监听 服务器端Socket并不定位具体 阅读全文
posted @ 2016-01-05 21:50 五月的仓颉 阅读(3399) 评论(5) 推荐(0) 编辑
摘要:前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。 这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。 阅读全文
posted @ 2015-12-20 23:25 五月的仓颉 阅读(87816) 评论(68) 推荐(93) 编辑
摘要:Unsafe 简单讲一下这个类。Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。 这个类尽管里面的方法都是public的,但是并没有办法使用它们,JDK API文档也没有提供任何 阅读全文
posted @ 2015-11-19 19:20 五月的仓颉 阅读(24195) 评论(15) 推荐(38) 编辑
摘要:前言 Java的部分有基础、设计模式、IO、NIO、多线程,之后有时间还会把集合这部分补上去,这么多内容里面,难免有一些知识点遗漏,本文主要是讲解这些遗漏的知识点。这些知识点,不是特别大的难点,所以没有必要专门写一篇文章讲解;但是这些知识点,也不是一两句话就说得清楚的,所以放在这里。查漏补缺系列文章 阅读全文
posted @ 2015-11-01 16:33 五月的仓颉 阅读(2451) 评论(2) 推荐(1) 编辑
摘要:前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的。本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口、代理内容,生成代理 阅读全文
posted @ 2015-10-28 21:59 五月的仓颉 阅读(6787) 评论(6) 推荐(6) 编辑
摘要:前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,我的说法是这样的: 这个观点,在现在看来,是要进行代码优化的一个原因,但不全对。在机械工艺发展的今天,服务器动辄8核、16核,64位CPU,代码执行效率非常高,StringBuilder替换Strin 阅读全文
posted @ 2015-10-25 21:59 五月的仓颉 阅读(67149) 评论(70) 推荐(63) 编辑
摘要:前言 在Java中,子类继承父类,类实现接口是属于常识性的内容了,作为一个Java程序员应该也比较熟悉。不过子类继承父类,类实现接口中还是有一些小细节值得注意一下,本文就从个人工作、学习中入手,总结一些细节性的内容,以更进一步地掌握继承、实现的关系。现在只是写一些目前碰到的内容,以后只要想到了、碰到 阅读全文
posted @ 2015-10-21 09:38 五月的仓颉 阅读(4169) 评论(0) 推荐(1) 编辑
摘要:接口interface的作用 接口是对于行为的抽象,在小项目、小设计中接口带来的好处可能不会特别明显,但是项目一旦庞大起来,接口的优势就很明显会体现出来了: 1、对于一个庞大的项目,从设计的角度来说,接口的存在可以帮助理清楚业务,利用接口不仅可以告诉开发人员需要实现哪些业务,而且也将命名规范限制住了 阅读全文
posted @ 2015-10-20 20:42 五月的仓颉 阅读(2655) 评论(1) 推荐(4) 编辑
摘要:枚举 枚举是一个小功能,但是却带来了大方便。一个星期有七天,我们平时定义这七天为常量的时候,会这么写: 有了枚举之后,就可以换一种写法了: 这就定义了SUNDAY~SATURDAY的枚举了,使用枚举类型代替了常量,还提供了比常量更多的方法。枚举类型适用的数据有以下特点: 1、枚举值之间是有内在关联的 阅读全文
posted @ 2015-10-18 22:21 五月的仓颉 阅读(2823) 评论(10) 推荐(2) 编辑
摘要:异常概述 异常也称为例外,是在程序运行过程中发生的并且会打断程序正常执行的事件,比如算术异常、空指针异常、文件找不到异常。所以在程序设计时,必须考虑到可能发生的异常事件,并做出相应的处理。这样才能保证程序可以正常运行。 Java的异常处理机制也秉承着面向对象的基本思想,在Java中,所有的异常都是以 阅读全文
posted @ 2015-10-16 22:06 五月的仓颉 阅读(2729) 评论(3) 推荐(2) 编辑
摘要:内部类 最后一个语法糖,讲讲内部类,内部类指的就是在一个类的内部再定义一个类。 内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功,就会生成两个完全不同的.class文件了,分别是outer.class和outer$inner.c 阅读全文
posted @ 2015-10-14 21:25 五月的仓颉 阅读(4270) 评论(9) 推荐(1) 编辑