Java
文章平均质量分 78
JobsandCzj
Java工程师;中间件研发工程师
展开
-
圆角按钮--继承自JButton
该按钮继承子JButton,圆角,颜色渐变,有透明度,而且可以自己设置这些参数。import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.GradientPaint;import java.awt.Graphics;import java.awt.Graphics原创 2016-06-17 20:03:14 · 4770 阅读 · 2 评论 -
Java中的四大引用(强引用,弱引用,软引用,虚引用)
引用这个概念经常被提及,今天总结一下。强引用强引用即(StrongReference)我们最常使用的引用,A a=new A()。这个a就是一个强引用。软引用即(SoftReference),Object obj = new Object();SoftReference sf = new SoftReference(obj);obj = null;sf.g原创 2017-05-09 11:22:36 · 678 阅读 · 0 评论 -
ThreadLocal原理解析
ThreadLocal从这个名字大概就能听出它是干啥的,差不多就是将一个变量绑定到一个线程上,解决一些并发问题并且使代码变得更优雅。那它是怎么将变量绑定到线程上的呢?我们先看Thread类源码,/* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal c原创 2017-05-19 13:35:37 · 446 阅读 · 0 评论 -
Java中的多线程常用方法
多线程一直是Java的一个重点和难点,前两天小结了一下。synchronized和Lock我们都知道ArrayList是非线程安全的,就拿它开刀。下面这个程序简单地展示了synchronized和Lock的用法。package temp.test;import java.util.ArrayList;import java.util.List;import java.util.原创 2017-05-11 20:11:57 · 629 阅读 · 0 评论 -
自己实现的一个简易Spring框架(IoC+AOP)
IoC和AOP是Spring的核心,可以说没有他们就没有庞大的Spring家族。我也是心血来潮,自己动手写了一个简易的Spring框架。可以通过使用注解来实现IoC容器和AOP。先说IoC部分吧。源码下载:http://download.csdn.net/detail/jobsandczj/9841126IoC先定义了两个注解@MyBean和@MyAutowired,用来标记Bean和原创 2017-05-12 21:25:47 · 1496 阅读 · 5 评论 -
Executor框架相关类及原理
在并发编程中,经常会用到Executor这个框架,Executor就是Runnable和Callable的调度容器,今天我就来总结一下几个常用的类及相关原理。Runnable这个在多线程里几乎无所不在,连Thread类都是它的实现类。publicinterface Runnable { /** * When an object implementing inte原创 2017-06-06 13:21:05 · 579 阅读 · 0 评论 -
ServiceLoader原理解析
最近在公司的项目里看到了ServiceLoader这个类,就好奇地去了解了一下。我们都知道,根据一个类去找它的父类或者接口那很简单。毕竟类加载的时候,相关信息都加载进去了。但反过来就不简单了,那就是根据接口去找所有实现类。这个类主要作用就是加载某个接口的实现类。类似的功能,我以前用注解的形式实现过。就是扫描包,然后根据注解信息判断是否是某个类的子类,然后进行加载。但这显然是个不大好的方法,原创 2017-07-11 16:58:50 · 1633 阅读 · 0 评论 -
Java并发编程-活跃度问题
在讲问题前,我先说明一下什么是活跃度?一个并发应用及时执行的能力称作活跃度。我主要讲死锁问题,顺带介绍一下饥饿,弱响应性和活锁。死锁死锁这个词大家都听过,我先来罗列一下产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用原创 2017-06-25 21:46:31 · 842 阅读 · 0 评论 -
CopyOnWriteArrayList与ConcurrentHashMap原理解析
CopyOnWriteArrayList这两个都是非常常用的并发类,先从CopyOnWriteArrayList讲起。这个类我们从名字可以看出,他是在进行写操作时进行复制,因而其它线程进行读操作时不会出现并发问题。它的实现也很简单,我们来看一段简单源码:public boolean add(E e) { final ReentrantLock lock = this.lock;原创 2017-07-13 22:49:22 · 1276 阅读 · 0 评论 -
Java枚举类型详解(原理+用法)
可以这么说,Java的枚举类型本来是不存在的,但Java发了个"语法糖",就有了枚举类型。Java从JDK1.5开始支持枚举,通常一个特性如果在一开始没有提供,在语言发展后期才添加,会遇到一个问题,就是向后兼容性的问题。像Java在1.5中引入的很多特性,为了向后兼容,编译器会帮我们写的源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这个术语原创 2017-03-02 09:37:00 · 1302 阅读 · 2 评论 -
数据库唯一序列号生成方案
首先,我们得知道为什么需要制定数据库唯一序列号生成方案,难道MySQL的主键自增长不好用吗?当然不是。由于现在的业务数据量越来越大,有时候将数据放在一张表里,压力非常大,所以要进行分库分表。一旦进行了分库分表,用MySQL自带的自增长主键就会有问题了。如何保证生成一个唯一的不重复的主键,这是一个严肃的问题。 我今天介绍一种方案,也是我公司的实现方案之一。几个模块如下: 1. 先定义一张表,原创 2017-12-22 14:49:23 · 8614 阅读 · 0 评论 -
Java中的IO技术简介
Linux网络IO模型简介1.阻塞IO模型2.非阻塞IO模型3.IO复用模型4.信号驱动IO模型5.异步IOIO多路复用技术Java的IO发展简史BIO伪异步IONIOAIO四种IO的对比[最好列出表格]...原创 2018-06-30 17:33:23 · 1124 阅读 · 0 评论 -
自己实现一个简易的SpringMVC
上回实现了一个简易的Spring,那就顺便实现一些SpringMVC吧。自己实现的架构比较简单,下面简单介绍一下。源码下载:http://download.csdn.net/detail/jobsandczj/9844308实现思路及工作流程:定义一个DispatcherServlet,用来做请求入口。初始化时,去读取配置文件,获得Controller的包,然后“注入”Controll原创 2017-05-17 10:13:09 · 869 阅读 · 0 评论 -
Java中的深拷贝与浅拷贝
Java中有两种拷贝方式一种是浅拷贝,一种是深拷贝。两者的区别也很好阐述:浅拷贝它只是简单拷贝对象成员的引用,而深拷贝则会重新生成一个对象副本。当然String这些对象比较特殊。举个实例:(注意看注释)package clone;public class Teacher implements Cloneable { public String name; public int原创 2017-05-01 10:05:59 · 435 阅读 · 0 评论 -
Spring的Ioc容器简单实现
Spring作为当前最优秀的框架之一,可以说和它名字一样,为这个行业带来了春天。它之所以这么强大,很重要的一个原因就是它把对象之间的依赖关系转而用配置文件来管理,也就是依赖注入机制。而实现这种机制的关键,就是Ioc(Inversion of Control)容器。今天我就用Java代码简单实现一下Ioc容器。先展示一下架构图解:基本思路:1.解析xml文件2.根据XML配置原创 2017-04-14 23:17:54 · 591 阅读 · 0 评论 -
java注解(Annotation)
java的注解是java5.0版本引入的,我们在使用框架时也经常见到它的身影。JDK自身提供的一个非常常见的注解就是@Override,他能告诉编译器这是一个重载方法,若父类不存在该方法,编译器就会报错。但你重载一个方法却不用这个注解,也是完全不影响运行结果的。 那什么是java注解呢?Java提供的一种源程序中的元素关联任何信息和任何元素的途径和方法。下面我讲几种关于注解的分原创 2016-08-24 23:15:05 · 536 阅读 · 0 评论 -
java大数处理类
ACM经常会遇到要处理大数,而java对此有一些比较好的封装类。package ACM;import java.math.BigDecimal;import java.math.BigInteger; import java.math.MathContext;import java.math.RoundingMode;import java.text.DecimalFormat;原创 2016-09-26 12:22:30 · 431 阅读 · 0 评论 -
过滤器,监听器和struts2拦截器
貌似是老生常谈了,但我相信还是有很多初学者不知道他们的区别,今天在此再做一个小结,来说说他们各自的特点以及相互之间的区别。过滤器: 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的Web资源处理。请求信息在过滤器链中原创 2016-11-18 14:54:01 · 597 阅读 · 0 评论 -
Java IO流分析整理
Java中的流,可以从不同的角度进行分类。按照数据流的方向不同可以分为:输入流和输出流。按照处理数据单位不同可以分为:字节流和字符流。按照实现功能不同可以分为:节点流和处理流。 输出流: 输入流:因此输入和输出都是从程序的角度来说的。字节流:一次读入或读出是8位二进制。字符流:一次读入或读出是1转载 2016-05-02 20:41:37 · 402 阅读 · 0 评论 -
爬虫抓取BestCoder的比赛排名
爬虫是个非常有意思的东西,它是根据网页上的文件结构来抓取相应内容的技术。由于最近ACM省赛在即,我负责统计做题,所以便用java写了个抓取BestCoder比赛情况的爬虫程序。先来说说爬虫的几种抓取策略。抓取策略 在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面原创 2016-04-17 20:51:35 · 2101 阅读 · 0 评论 -
Java通过位运算实现10-16进制转换
import java.util.*;public class Hexadecimal {public static void main(String[] args){char[] contain = new char[100];int N,cou;Scanner cin = new Scanner(System.in);while(cin.hasNextI原创 2015-09-21 17:08:47 · 2420 阅读 · 0 评论 -
Java实现插入排序
听说Java很牛逼 闲着自学了一下 玩了玩插入排序 废话不多说 直接上代码import java.util.Scanner;public class Insert_Sort_Try {public static void main(String[] args){Scanner cin = new Scanner(System.in);int N,temp原创 2015-09-20 14:39:58 · 405 阅读 · 0 评论 -
Java的静态方法继承相关
import java.util.*;public class Homeworks { public static void fun() { System.out.println("Father"); } public void Haha() { System.out.println("FatherHaha"); } public static void main(St原创 2016-04-22 13:28:38 · 537 阅读 · 1 评论 -
Java代码执行顺序总结
这个问题可能每个小伙伴学习Java的时候都遇到过,但恐怕很多时候都没重视。举个栗子来讲解,栗子有一部分copy了别人的代码。。父类:package test;public class Father { public Father() { System.out.println("Father Constructor is running"); } public Father(i原创 2017-03-02 09:53:53 · 1793 阅读 · 0 评论 -
java反射机制小结
java的反射机制一直是java的一块重要内容,掌握它对日后的框架学习会有很大的帮助。 我们先来看看什么是反射机制。反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的原创 2016-08-20 10:44:04 · 451 阅读 · 0 评论 -
模仿JDK实现动态代理
代理模式是一个非常常用的设计模式,而动态代理更是魅力无穷。额,不熟悉代理模式的请自行了解,一直想写一篇总结设计模式的博文,但一直拖沓着。。。日后再说。这是类目录:Moveable是一个接口,Car实现这个接口。InvocationHandle是一个接口,TimeHandler实现这个接口。与JDK类似的实现的好处是可以将增强方法单独写在一个类里,增强了灵活性,降低了耦合度。原创 2017-02-25 10:20:28 · 518 阅读 · 0 评论 -
JVM的BUG!?Java类静态初始化里启线程,居然导致main函数阻塞!!!
先来看这个代码是咋写的public class Lazy { public static boolean init = false; static { Thread t = new Thread(() -> init = true); t.start(); try { t.join(); ...原创 2019-07-20 21:55:05 · 705 阅读 · 1 评论