
Java
文章平均质量分 71
Jet_Green
github:https://github.com/jet0605
展开
-
Java虚拟机内存存储结构以及GC回收算法的浅析
JVM内存结构:堆:存放所有new出来的东西。GC堆是Java虚拟机所管理的内存中最大的一块内存区域,也是被各个线程共享的内存区域。堆被分为新生代和老年代。方法区:存储虚拟机加载的类信息,常量,静态变量,各个内存共享的内存区域。默认大小为16mb,最大值为64mb虚拟机栈:描述的是Java方法执行的内存模型。每一个方法被执行的时候,都会创建一个“栈帧”,用于存储局部变量表,操作栈,方法出口等。本地...原创 2018-06-05 17:08:16 · 306 阅读 · 0 评论 -
子类继承父类各自静态区和非静态区和构造方法的执行顺序
首先引入一个问题: 子类在继承父类的时候,父类的静态区,非静态区,构造方法,子类的静态区,非静态区,构造方法的执行顺序是怎么样的。 写一个简单的demo来验证一下: 父类:public class Father { static{ System.out.println("这是父类静态区"); } { System.out.print...原创 2018-08-03 09:50:39 · 580 阅读 · 0 评论 -
手写mybatis(适合初学者)
近期学习了如何手写简易的mybatis,网上的博客的代码多多少少有些问题,运行不起来,本篇博文保证你百分百能运行和理解mybaits。 首先我觉得这张图用来理解mybatis很易懂。 然后是本次demo的流程图 demo运行环境 IntelliJ IDEA,jdk1.8,mysql 运行代码步骤 1.创建user数据库(主键id,name属性) 2.修改SimpleExcut...原创 2018-08-07 19:53:52 · 1163 阅读 · 0 评论 -
Java设计模式——责任链模式
今天总结谈一谈java设计模式中的责任链模式。 应用场景: servlet中的filter dubbo中的filter mybatis中的plugin 这3个框架在实现责任链方式不尽相同 UML图 实现的简单demo,这里用公司请假来实例。 Jet请假,首先由主任审批,不在主任审批范围内就交给上级一直到符合为止。 请假类:public class LeaveRequ...原创 2018-08-03 10:51:23 · 327 阅读 · 0 评论 -
算法之动态规划(爬楼梯)
动态规划的概念通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。动态规划的基本思想若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量: 一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同...原创 2018-08-13 15:39:35 · 4219 阅读 · 1 评论 -
手写实现Spring IOC
Spring中有两大核心内容: 一.IOC 二.AOP 今天我手写实现了IOC,来总结一下IOC的原理和实现方式首先IOC底层所用到的技术 1>xml配置文件 2>dom4j解析xml 3>工厂设计模式 4>反射 5>内省 首先看一下IOC demo的流程图 运行环境 1.jdk1.8,IntelliJ IDEA ps(如果报错报找不到...原创 2018-08-08 19:48:23 · 496 阅读 · 0 评论 -
Java设计模式-策略、委派、模板、原型模式总结
今天学习了下Java设计模式中的策略模式、委派模式、模板模式、原型模式。 做一个学习小结。委派模式:委派模式和代理模式其实差不多。委派模式注重的结果而代理注重的是过程, 例子interface I { void f(); void g(); } class A implements I { public void f() { System...原创 2018-08-20 09:46:11 · 1249 阅读 · 0 评论 -
ThreadLocal———存放线程的局部变量的容器
前言ThreadLocal直译为“线程本地”或“本地线程”,如果真的这么认为,那就错了。其实它就是一个容器,用于存放线程的局部变量,应该叫ThreadLocalVariable(线程局部变量)才对。定义ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值得存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询...原创 2018-08-20 17:07:13 · 638 阅读 · 0 评论 -
动态代理两种实现方式(jdk动态代理和CGLib动态代理)
前言关于动态代理和静态代理,我这篇博文https://blog.youkuaiyun.com/Jet_Green/article/details/81198691中写的很详细,这里主要写jdk的动态代理和CGLib动态代理的区别和优化。JDK动态代理首先定义个hello接口:public interface Hello { void say(String name);}然后...原创 2018-08-20 17:46:37 · 379 阅读 · 0 评论 -
利用notify和wait方法实现suspend和resume(附带jstack和jps查看线程运行状态)
suspend和resume的废除查阅java api 可以发现suspend和resume已经被标注为废弃方法。原因其实也不是很复杂,因为suspend在导致线程暂停的同时不会去释放任何资源,直到在对应线程上执行了resume操作,被挂起的线程才能继续,从而其他所有阻塞在相关锁的线程也可以继续执行,但是,如果resume操作意外的在suspend操作前就执行了,那么被挂起的线程很难再去执行。...原创 2018-09-01 14:27:09 · 370 阅读 · 0 评论 -
Java并发模式—Future模式
FutureFuture模式是多线程开发中非常常见的一种设计模式,它的核心思想是异步调用。当我们需要调用一个函数方法时,如果这个函数执行很慢,那么我们就要进行等待。但有时候,我们可能不急着要结果。因此,我们可以让被调者立即返回,让它在后台慢慢处理这个请求。对于调用者来说,则可以先处理一些其他任务,在真正需要数据的场合再去尝试获得需要的数据。对于Future模式来说,虽然它无法立即给出你...原创 2018-09-08 11:39:59 · 361 阅读 · 0 评论 -
Java无锁的实现——原子变量
概述对于并发控制来说,锁是一种悲观的策略。它总是假设每一次的临界区操作会产生冲突,因此,必须对每次操作都小心翼翼。如果有多个线程同时访问临界区资源,就宁可牺牲性能让线程进行等待,所以说锁会阻塞线程执行。 而无锁采用的是一种乐观的策略,它会假设对资源的访问是没有冲突的,既然没有冲突,所以不用等待。遇到冲突,无锁采用的策略是一种叫做CAS的技术来鉴别线程冲突。CASCAS全称为compil...原创 2018-09-11 10:09:00 · 513 阅读 · 5 评论 -
走进分布式Java开发(一)—Java NIO
走进分布式Java开发(一)—Java NIO概述何为NIO,百度百科上的解释为:java.nio全称java non-blocking IO(实际上是 new io),是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。为所有的原始类型提供(Buffer)缓存支持。字符集编...原创 2018-09-27 11:21:56 · 373 阅读 · 0 评论 -
线程循环运行demo
线程循环运行demo (用notify-wait实现线程通信的小demo总结)Java在创建线程的时候,如果需要你去让一个线程循环执行10次你会怎么做?for(int i = 0; i < 10; i++){ thread.start();}第一次接触线程的人可能会这么去写,但是在Java中start方法只能执行一次。如果你这么写,将会发生这种错误。...原创 2018-10-15 15:14:13 · 363 阅读 · 0 评论 -
Java中的锁
Java中的锁Lock锁Lock锁介绍JavaSE 5之后,并发包中新增了Lock**接口(以及相关实现类)锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁,虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的编写性,但是却拥有了锁获取与释放的可操作性、可中断性以及超时获取锁**等多种synchroni...原创 2018-08-14 17:42:41 · 373 阅读 · 0 评论 -
Java反射和内省机制的区别
很多人了解Java发射机制,但是今天我在学习springIOC(依赖注入)的原理的时候,注意到了一个词叫做内省机制 那么我就在想这个内省机制是什么呢? WiKi上的解释是:在计算机科学中,内省是指计算机程序在运行时(Run time)检查对象(Object)类型的一种能力,通常也可以称作运行时类型检查。 不应该将内省和反射混淆。相对于内省,反射更进一步,是指计算机程序在运行时(...原创 2018-08-06 15:02:01 · 878 阅读 · 0 评论 -
手写实现Spring AOP
Spring IOC、AOP可谓是spring中两大王牌 上次我们手写了IOC,那么今天我们来手写一下AOP 感谢这篇博主的手写AOP博文(https://blog.youkuaiyun.com/qq_35704236/article/details/79997182) 我是学习他的写法,然后将一些我不懂的代码进行了注释解释,应该可以更加适合小白学习吧。一.准备首先我们都知道Spring AOP...原创 2018-08-09 16:58:10 · 3205 阅读 · 4 评论 -
Java快速排序和归并排序区别和实现
快速排序与归并排序的概念: 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 ...原创 2018-06-05 14:11:52 · 2922 阅读 · 2 评论 -
RXJava入门总结以及简易Demo
Rxjava由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎在android开发框架中:RxJava+Retrofit+MVP+Dagger2(主流框架)中Rxjava是对网络连接处理和图片加载处理非常好用的异步操作方法,类似于Android中的AysncTask、HandlerRxjava的模式类似于Java的观察者模式被观察者:Observ...原创 2018-07-12 11:55:12 · 1528 阅读 · 0 评论 -
hashtable对字符串的碰撞以及源码解析(非常适合新手理解hashtable)
首先我从网上摘抄了三个典型的例子,非常适合来介绍hashtable对字符串的碰撞。第一个例子,去除字符串数组中中多余的字符串。ps(建议现在还在用eclipse IDE的可以试试IntelliJ IDEA) 代码如下:import java.util.Enumeration;import java.util.Hashtable;public class Main { pub...原创 2018-07-24 11:18:00 · 550 阅读 · 0 评论 -
Java并发编程的重要以及难点(个人总结一)
在学习Java并发编程的过程是要注意以下几点: 1.java并发的三个特性 2.volatile、synchronized、lock,重入锁、读写锁的区别。 3.线程间的通信机制 4.线程池 5.阻塞队列 6.ConcurrentHashMap原理以及几个方法运用 7.sleep、wait、Thread.join的区别 这篇博文主要就是围绕这七点进行总结1.java并发的三个特...原创 2018-07-24 17:44:15 · 1600 阅读 · 0 评论 -
Java设计模式之静态代理和动态代理
代理模式要用定义的方式描述可能要写一大串,简单的描述一下把。比如说一个班级有40个学生,一个班上,一个老师,学生开学要交学费,不可能一个个学生跑到老师面前交学费吧。说大一点,全校学生要交学费,不可能所有人跑到校长面前交学费吧。这个时候代理模式孕育而生,班级中可以选取班长作为代理者收取班上学生的学费,然后上交给老师,然后老师可以做为学生的代理者将学费交到学校,这样一说是不是要简单理解一点了。下面...原创 2018-07-25 11:05:37 · 263 阅读 · 0 评论 -
Java类的加载机制和加载方法浅析
什么是类的加载1.概述Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Ja...原创 2018-07-20 09:59:52 · 246 阅读 · 0 评论 -
Java的类的反射机制和运用浅析
java的反射机制可以说是java开发框架的灵魂所在。 在本篇博客中,我会结合别人大牛博客上所说和自己的理解浅谈反射机制的理解和IOC和反射机制的关系。反射机制的概念主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。 反射是Ja...原创 2018-07-20 10:58:47 · 215 阅读 · 0 评论 -
一个死锁的简易好理解的Demo
package 死锁demo;public class DeadLock implements Runnable{ boolean lockFormer; static Object o1 = new Object(); static Object o2 = new Object(); DeadLock(boolean loackFormer){ ...转载 2018-07-20 11:29:41 · 457 阅读 · 0 评论 -
Java创建单例模式最常用的创建方法——双重检查创建单例模式
双重检查创建单例模式这是最常用的单例创造模式,也是框架中广泛运用的单例建造模式,也是比较好的单例创造模式。废话不多说,直接上代码/** * * @author jet * 双重检查创建单例模式 */public class Singleton { private static volatile Singleton singleton; private Sing...原创 2018-07-20 11:34:32 · 214 阅读 · 0 评论 -
“森林”——数据结构中各种树的总结
二叉树定义 二叉树是每个结点最多有两个子树的树结构。 性质 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点 二叉树的子树有左右之分,次序不能颠倒 二叉树的第i层至多有2^{i-1}个结点 深度为k的二叉树至多有2^k-1个结点 对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。满二叉树定义: 一棵深度为k,且有2^k-1个节...原创 2018-07-27 09:14:13 · 2773 阅读 · 2 评论 -
Java设计模式——观察者模式
观察者模式是Java开发中常用的一种开发模式 我前面一篇关于RXjava的博文,同是也是理解观察者模式的一篇博文。 观察者模式在事件监听,事件总线是最关键的一种设计模式。 观察者模式可以用这张图简单理解下: UML关系图: 下面通过一个demo来介绍的实现观察者模式 首先是被观察者接口:/** * 被观察者的抽象 * @author Jet * */publ...原创 2018-08-03 20:16:33 · 223 阅读 · 0 评论 -
JMM(Java内存模型)核心概念 —— happensbefore原则
happensbefore是JMM最核心的概念。对应Java程序员来说,理解happen-before是理解JMM的关键。JMM的设计从JMM设计者的角度,再设计JMM时,需要考虑两个关键因素。 1.程序员对内存模型的使用。程序员希望内存模型易于理解、易于编程。程序员希望基于一个强内存模型来编写代码。 2.编译器和处理器对内存模型的实现。编译器和处理器希望内存模型对它们的束缚越少越好,...原创 2018-07-27 10:40:33 · 433 阅读 · 0 评论 -
Spring boot实现Restful服务,基于HTTP/JSON传输(Mysql在阿里云服务器上)
前提准备: 在mysql数据库中创建springbootdbCREATE DATABASE springbootdb;创建city表:CREATE TABLE `city` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '城市编号', `province_id` int(10) unsigned NOT NU...原创 2018-07-31 10:57:41 · 524 阅读 · 0 评论 -
大数据的处理算法——BitMap算法
大数据的处理算法——BitMap算法首先我们来看一个问题:如何判断一个整数是否在40亿个整数之中?当时我看到这个问题首先想到的是利用一个map或者set进行存储(/笑哭)但是一个整数4个字节,40亿个整数就是160亿个字节,需要16GB的内存(/惊讶)如果分多次加载就需要利用到磁盘的IO,但是磁盘的IO读取速度远远低于内存的读取速度所以是不可取的!!!那么可以采用分布式的算法来实现,...原创 2018-10-16 10:43:43 · 1192 阅读 · 0 评论