java
红的羊
主要是项目开发:
后台:java
前段:html、jsp
开发工具:eclipse、idea
展开
-
JAVA程序员面试技术点
原创 2019-07-17 19:39:18 · 339 阅读 · 0 评论 -
lock 和 synchronized
死锁四要素,如何避免1、产生死锁的四个必要条件?a.互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源b.请求和保持条件:进程获得一定的资源之后,又对其他资源发出请求,但是该资源可能被其他进程占有,此事请求阻塞,但又对自己获得的资源保持不放c.不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在...原创 2019-03-30 22:13:59 · 124 阅读 · 0 评论 -
设计模式-解释器模式
使用场景代码例子public interface Interpreter {int interpret(Context context);}public class Plus implements Interpreter {@Overridepublic int interpret(Context context) {return context.getNum1()+context...原创 2019-03-17 09:31:01 · 107 阅读 · 0 评论 -
设计模式-中介者模式
使用场景在面向对象编程中,一个类必然会与其他的类发生依赖关系,完全独立的类是没有意义的。一个类同时依赖多个类的情况也相当普遍,既然存在这样的情况,说明,一对多的依赖关系有它的合理性,适当的使用中介者模式可以使原本凌乱的对象关系清晰,但是如果滥用,则可能会带来反的效果。一般来说,只有对于那种同事类之间是网状结构的关系,才会考虑使用中介者模式。可以将网状结构变为星状结构,使同事类之间的关系变的清晰一...原创 2019-03-17 09:30:53 · 130 阅读 · 0 评论 -
设计模式-访问者模式
使用场景访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。代码例子访问者接口public interface Visitor {void visit(S...原创 2019-03-17 09:30:43 · 98 阅读 · 0 评论 -
设计模式-状态模式
使用场景状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式,他允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态...原创 2019-03-17 09:30:32 · 98 阅读 · 0 评论 -
设计模式-备忘录模式
一、使用场景主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。二、代码例子需要备份类public class Memento {private String value;publ...原创 2019-03-17 09:30:21 · 118 阅读 · 0 评论 -
设计模式-命令模式
使用场景命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行,司令员要的是结果,不会去关注到底士兵是怎么实现的。代码例子命令接口public interface Command {void exe();}...原创 2019-03-17 09:30:12 · 95 阅读 · 0 评论 -
设计模式-责任链模式
使用场景责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。代码例子责任接口public interface Responsibility {void operator();}抽象类publ...原创 2019-03-17 09:30:00 · 115 阅读 · 0 评论 -
设计模式-迭代子模式
使用场景迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation)。一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。代码例子集合public interf...原创 2019-03-17 09:29:44 · 169 阅读 · 0 评论 -
设计模式-观察者模式
使用场景观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。类似于邮件订阅和RSS...原创 2019-03-16 21:01:14 · 67 阅读 · 0 评论 -
设计模式-模版模式
使用场景模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。代码例子模板类public abstract class Template {/* 主方法,实现对本类其它方法的调用 */public fi...原创 2019-03-16 20:58:18 · 85 阅读 · 0 评论 -
设计模式-策略模式
使用场景策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站...原创 2019-03-16 20:54:53 · 76 阅读 · 0 评论 -
设计模式-享元模式
使用场景当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类。一提到共享池,我们很容易联想到Java里面的JDBC连接池,想想每个连接的特点,我们不难总结出:适用于作共享的一些个对象,他们有一些共有的属性,就拿数据库连接池来说,url、driverClassName、username、password...原创 2019-03-16 10:20:34 · 99 阅读 · 0 评论 -
设计模式-组合模式
使用场景组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。就拿剪发办卡的事情来分析一下吧。首先,一张卡可以在总部,分店,加盟店使用,那么总部可以刷卡,分店也可以刷卡,加盟店也可以刷卡,这个属性结构的店面层级关系就明确啦。那么,总店刷卡消费与分店刷卡消费是一样的道理,那么总店与分店对会员卡的使用也具有一致性。当发现需求中是体现...原创 2019-03-16 10:18:59 · 105 阅读 · 0 评论 -
设计模式-桥接模式
使用场景桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。jdbc的UML图...原创 2019-03-16 10:17:07 · 93 阅读 · 0 评论 -
锁分类
公平锁和非公平锁公平锁是指多个线程在等待同一个锁时,必须按照申请锁的先后顺序来一次获得锁。公平锁的好处是等待锁的线程不会饿死,但是整体效率相对低一些;非公平锁的好处是整体效率相对高一些,但是有些线程可能会饿死或者说很早就在等待锁,但要等很久才会获得锁。其中的原因是公平锁是严格按照请求所的顺序来排队获得锁的,而非公平锁时可以抢占的,即如果在某个时刻有线程需要获取锁,而这个时候刚好锁可用,那么这个线...原创 2019-03-30 22:16:13 · 104 阅读 · 0 评论 -
Synchronized的原理
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。1、阻塞代价java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统...原创 2019-03-31 09:46:26 · 270 阅读 · 0 评论 -
锁分类-自旋锁
1、来由Java的线程是映射到操作系统的原生线程之上的,如果要阻塞或唤醒一个线程,都需要操作系统来帮忙完成,这就需要从用户态转换到核心态中,因此状态装换需要耗费很多的处理器时间,对于代码简单的同步块(如被synchronized修饰的getter()和setter()方法),状态转换消耗的时间有可能比用户代码执行的时间还要长。虚拟机的开发团队注意到在许多应用上,共享数据的锁定状态只会持续很短的...原创 2019-03-31 09:46:35 · 336 阅读 · 0 评论 -
写一个java生成模板
github地址:https://github.com/yangdehong/mapper_model.git所有的model使用的都是idea的lombok插件生成的结果结果图片READMEmapper_model简介这个项目基础框架是用的springboot2.x+jdbc完成的,配置修改在application.yml。默认端口是80,可以自行修改。model生成是基于...原创 2019-07-16 13:54:12 · 812 阅读 · 0 评论 -
java 浅拷贝和深拷贝
Java中的对象拷贝指的是将一个对象的所有属性拷贝到另一个有着相同类型的对象中去。举例说明:比如,对象A和对象B都属于类S,具有属性a和b。那么对对象A进行拷贝操作赋值给对象B就是:B.a=A.a;B.b=A.b。Java中的对象拷贝主要分为:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)。浅拷贝1、对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性...原创 2019-04-02 23:09:34 · 135 阅读 · 0 评论 -
java创建对象的几种方式
先创建一个空的对象,空对象里面是有一个默认的构造函数。public class MyObject { }通过new方法,这个最简单也是最常用的。MyObject myObject = new MyObject();反射,通过Class。Class clazz = Class.forName(“com.ydh.sington.MyObject”);MyObject cobj = (MyO...原创 2019-03-29 00:04:29 · 143 阅读 · 0 评论 -
java集合详解
Vector,ArrayList, LinkedList的区别是什么?1、Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。2、List中的元素有序、允许有重复的元素,Set中的元素无序、不允许有重复元素。3、Vector线程同步,ArrayList、LinkedList线程不同步。4、LinkedList适合指定位置插入、删除操...原创 2019-03-29 00:03:35 · 82 阅读 · 0 评论 -
String详解
String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。2、String不可变是因为在JDK中String类被声明为一个final类。3、StringBuffer是线程安全的,而StringB...原创 2019-03-28 23:56:54 · 233 阅读 · 0 评论 -
java循环计数器-CyclicBarrier
例子import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;...原创 2019-04-02 20:59:37 · 778 阅读 · 0 评论 -
java计数器-CountDownLatch
例子import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/*** @description: 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。* 用给定...原创 2019-04-02 20:59:32 · 424 阅读 · 0 评论 -
java异步-CompletionService
比较这两者最主要的区别在于submit的task不一定是按照加入自己维护的list顺序完成的。从list中遍历的每个Future对象并不一定处于完成状态,这时调用get()方法就会被阻塞住,如果系统是设计成每个线程完成后就能根据其结果继续做后面的事,这样对于处于list后面的但是先完成的线程就会增加了额外的等待时间。而CompletionService的实现是维护一个保存Future对象的...原创 2019-04-02 20:59:28 · 201 阅读 · 0 评论 -
java资源锁-Semaphore
概念一个计数信号量。从概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。主要方法1、构造...原创 2019-03-31 15:23:18 · 718 阅读 · 0 评论 -
Java线程池的7个参数
java.uitl.concurrent.ThreadPoolExecutor类是线程池中核心的一个类,在ThreadPoolExecutor中提供了四个构造方法。通过源码可以发现,前面三个的构造器最后都是调用了第四个构造器进行初始化。public class ThreadPoolExecutor extends AbstractExecutorService {public ThreadPo...原创 2019-03-31 15:19:37 · 979 阅读 · 0 评论 -
java线程池
基础的线程池线程池主要有4类,如下package com.ydh.test.pool;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util...原创 2019-03-31 15:16:16 · 74 阅读 · 0 评论 -
java线程
implements Runnablea.定义一个类实现Runnable接口,重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。b.创建实现Runnable接口的类的对象。c.创建一个Thread类的对象,需要封装前面Runnable接口实现类的对象。(接口可以实现多继承)d.调用Thread对象的start()方法,启动线程。extends Threada....原创 2019-03-31 15:10:26 · 85 阅读 · 0 评论 -
wait()和sleep()区别
1、wait是object的方法,sleep是thread的方法2、wait会释放线程,sleep不会3、wait需要notify唤醒原创 2019-03-31 15:08:56 · 219 阅读 · 0 评论 -
分布式锁
rediszookeeper原创 2019-03-31 09:48:50 · 82 阅读 · 0 评论 -
volatile 和cas
volatile1、保证线程间变量的可见性简单地说就是当线程A对变量X进行了修改后,在线程A后面执行的其他线程能看到变量X的变动,更详细地说是要符合以下两个规则:a、线程对变量进行修改之后,要立刻回写到主内存。b、线程对变量读取的时候,要从主内存中读,而不是缓存。2、禁止指令重排(有例外)什么是指令重排序?有两个层面:在虚拟机层面,为了尽可能减少内存操作速度远慢于CPU运行速度所带来...原创 2019-03-31 09:48:32 · 850 阅读 · 0 评论 -
偏向锁,轻量级锁,重量级锁
markword在介绍java锁之前,先说下什么是markword,markword是java对象数据结构中的一部分,要详细了解java对象的结构可以点击这里,这里只做markword的详细介绍,因为对象的markword和java各种类型的锁密切相关;markword数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32bit和64bit,它的最后2bit是锁状态标志位,用来标记当...原创 2019-03-31 09:48:24 · 368 阅读 · 0 评论 -
设计模式-外观模式
使用场景外观模式:将内部系统和外部系统隔离,不直接访问;从中间加入一个门店,所有外面访问门店,然后门店访问内部系统。以电脑为例,内存、CPU、硬盘都是内部系统,而这个门店就是电脑了,我们用户就是直接操作电脑操作系统来操作那些。代码例子内存、CPU、硬盘public class Memory {public void startup() {System.out.println("mem...原创 2019-03-16 10:14:02 · 75 阅读 · 0 评论 -
设计模式-代理模式
使用场景代理模式:给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。所谓代理,就是一个人或者机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代码例子接口public interface Sourceable {void method();}实现类public class So...原创 2019-03-16 10:11:43 · 99 阅读 · 0 评论 -
设计模式-装饰者模式
使用场景装饰者模式:就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。代码例子角色接口public interface Sourceable {void method();}具体角色实现public class Source implements Sourceable{@Overridepublic void...原创 2019-03-16 10:09:55 · 433 阅读 · 0 评论 -
java使用javamail发送
163/qq邮箱设置POP3/IMAP/SMTP服务:http://blog.csdn.net/u014803081/article/details/73176082如果是使用maven的,pox.xml<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7原创 2019-03-29 15:19:57 · 500 阅读 · 0 评论 -
设计模式-适配器模式
使用场景适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相的转换器(适配器)就能解决此问题,而这正像是本模式所做的事情。UML图...原创 2019-03-16 10:07:17 · 149 阅读 · 0 评论