- 博客(73)
- 收藏
- 关注
原创 观察者模式
* 观察者模式:主要用于1:N的通知。 * 当一个对象(目标对象)的状态变化时,需要及时告知一系列对象(观察者对象),令他们做出响应。 * 就比如网上聊天,你发一条消息,其他人那里收到相同的消息内容。 *方式: * 1.推:每次都会把通知以广播方式发送给所有观察者,所有观察者只能被动接收。 * 2.拉:观察者只要知道有情况即可,至于什么时候获取内容,获取什么内容,都可以自主决定。下...
2019-03-28 23:44:53
155
原创 代理模式
什么是代理模式?* 代理模式: * 核心作用:通过代理,控制对对象的访问。可以详细控制访问某个(某类)对象, * 在调用这个方法前做前置处理,调用这个方法后做后置处理(即AOP的微观实现)。 * AOP:面向切面编程的核心机制就是代理。 * 现实中,经纪人就是一个代理,一个歌手的经纪人需要在歌手唱歌前跟别人面谈、 * 签合同、安排事宜,然后歌手只需要唱歌,之后收尾款这都是...
2019-03-28 22:15:05
125
原创 适配器模式
* 适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式使得 * 原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 * 模式中的角色: * 1.目标接口(target):客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口。 * 2.需要适配的类(adaptee):需要适配的类或适配者类。 * 3.适配器(adapter):通过包装一个需要适配的对...
2019-03-28 17:47:56
134
原创 原型模式,也叫克隆、拷贝模式,深克隆浅克隆
概念: * 原型模式:也可以说是克隆模式。 * 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以用原型模式。 * 就是java的克隆技术,以某个对象为原型,复制出新的对象,显然,新的对象具备原型对象的特点。 * 优势:效率高:直接克隆,避免了重新执行构造过程步骤。 * 克隆不同于new,new出来的对象属性是默认值,克隆出来的属性完全和原型相同,并且修改不会影...
2019-03-27 16:33:04
248
原创 建造者模式
* 建造者模式:建造一个复杂的产品,比如:飞船,要生产部件,还要装配。 * 建造模式分离了对象子组件的单独构造(Builder负责)和装配(Director), * 从而可以构造复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。 * 由于实现了构建和装配的解耦,不同的构建器,相同的装配,也可以做出不同的对象; * 相同的构建器,不同的装配顺序也可以做出不同...
2019-03-27 15:23:08
100
原创 工厂模式三大分类
* 工厂模式:实现创建者和调用者的分离。 * 分类: * 1.简单工厂模式 * 2.工厂方法模式 * 3.抽象工厂模式简单工厂模式,就以造车为例:首先有个车接口,有个跑的方法:public interface Car { void run();}然后有两个实现类:public class Audi implements Car{ ...
2019-03-27 15:17:42
4651
原创 自定义注解以及使用注解完成类与表结构的映射关系
*自定义注解:1.使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口 * 2.格式:public @interface 注解名{定义体} * 3.其中的每一个方法实际上是声明了一个配置参数: * a.方法的名称就是参数的名称. * b.返回值类型就是参数的类型(返回值类型只能是基本类型、cla...
2019-03-26 21:27:41
731
原创 反射机制性能问题,反射操作泛型、注解
性能问题:* 反射机制性能问题:反射使代码灵活,提高了开发效率,也带来了性能问题,运行效率。 * 反射的对象在使用是会有安全检查,我们可以通过setAccessible方法来 * 启用和禁用访问安全检查的开关,true:取消访问检查,false:实施访问 * 检查。禁止安全检查,可以提高反射的运行速度。 field.setAccessible(true);//不需要安...
2019-03-26 21:26:49
322
原创 反射以及获取类对象、方法、属性、构造器
什么是反射?* 动态语言:程序运行时,可以改变程序结构或变量类型。典型语言:JS、Python等。 * 在学反射之前,我们需要知道,java不是动态语言,但有一定的动态特性, * 可以利用反射机制、字节码操作获得类似动态语言的特性,这种特性让编程更灵活。 * 反射机制:指的是可以在运行的时候加载、探知、使用编译期间完全未知的类; * 例子:Class c = class.fo...
2019-03-26 20:36:12
252
原创 注解、内置注解
注解是什么?在哪里用?* 注解Annotation: * 1.从JDK5.0开始引入的新技术; * 2.不是程序本身,是对程序进行解释;和注释不同的是可以被其他程序 * (比如:编译器等)读取。 * 格式:@注释名,还可以添加一些参数值 * 在哪里用:可以附加在package,class,method,field等上面,还可以通过 * 反射机制编程实现对这些元数据的访问。...
2019-03-26 20:07:25
390
原创 多线程环境测试单例5种实现方式的效率
写一段代码来测试:public class Test2 { public static void main(String[] args) throws InterruptedException { long start = System.currentTimeMillis(); /* 下面这么写是有问题的,因为这是多线程,当main线程...
2019-03-26 19:57:11
298
原创 反射和反序列化破解单例模式以及解决方案
* 反射和反序列化可以破解除了枚举之外的4种实现方式。反射破解单例: TestDcl dcl1 = TestDcl.getInstance(); TestDcl dcl2 = TestDcl.getInstance(); System.out.println(dcl1); System.out.println(dcl2)...
2019-03-26 19:51:40
271
原创 网络编程目录
网络编程(概念)底层原理分析网络编程之IP地址----InetAddress类网络编程之端口----InetSocketAddress类以及通过命令查看端口冲突网络编程之URL以及下载资源403错误解决方式传输协议,TCP、UDP编程的基本步骤UDP传输基本数据类型、对象、文件TCP双向登录、多线程登录、文件传输...
2019-03-25 14:37:17
125
原创 网络编程(概念)底层原理分析
概念 *网络:将不同区域的电脑连接到一起,组成局域网、城域网或者广域网。 * 把分布在不同地理区域的计算机与专门的外部设备用通信线路连成一个规模大、 * 功能强的网络系统,可以达到:1.资源共享;2.信息传输与集中处理;3.负载 * 均衡与分布处理。 *网络需要有这个两个东西:1.通讯协议:计算机网络中实现通信必须有的一些约定 * 就是通信协议,对速率、传输代码、代...
2019-03-23 16:27:49
639
原创 TCP双向登录、多线程登录、文件传输
客户端和服务端是两个类文件传输://客户端 public static void file() throws IOException{ //1 Socket socket = new Socket("localhost",8888); //2 InputStream is = new BufferedInputStream...
2019-03-23 16:27:26
184
原创 UDP传输基本数据类型、对象、文件
接收端和发送端是两个类。基本数据类型://发送端 public static void clientData() throws Exception { DatagramSocket client = new DatagramSocket(8888); ByteArrayOutputStream baos = new ByteArrayOutputStre...
2019-03-23 16:27:09
2375
1
原创 传输协议,TCP、UDP编程的基本步骤
概念* 传输协议:TCP UDP * TCP:一种面向连接的、可靠的、基于字节流的运输层通信协议,特点: * 面向连接;点到点的通信;高可靠性;占用系统资源多、效率低。 * 就像打电话:拨通、说喂、确认。这就是三次握手。 *UDP:一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,特点: * 非面向连接,传输不可靠,可能丢失;发送不管对方是否准...
2019-03-23 16:27:02
229
原创 网络编程之URL以及下载资源403错误解决方式
* URL:IP定位计算机,端口定位计算机里的软件,那么URL是定位软件里的资源。 * URL是属于URI的分类,下面还有URN: * URI:统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。 * URL:统一资源定位符,一种定位资源的主要访问机制的字符串,一个 * 标准的URL必须包含:协议、存放资源的主机域名、端口号(默认80)、资源文件名 * ...
2019-03-23 16:26:53
3739
原创 网络编程之端口----InetSocketAddress类以及通过命令查看端口冲突
* 端口:IP地址是用来区分计算机,那么端口就是来区分计算机里的软件的。 * 端口是一个虚拟的概念,不代表主机里真的有多个端口。端口表示的是 * 一个16位的二进制整数,2个字节,对应十进制的0-65535,两个传输协议: * TCP UDP,同一个协议端口不能冲突。 * 公认端口:0-1023:比如80是分配给www,21端口分配给FTP * 注册端口:102...
2019-03-23 16:26:42
1042
原创 网络编程之IP地址----InetAddress类
* IP地址:用来标识网络中的一个通信实体的地址,通信实体可以是计算机、 * 路由器等,比如互联网的每个服务器都要有自己的IP地址,而每个局域网 * 的计算机要通信也要配置IP地址,路由器是连接两个或多个网络的网络设备。 * 总的来说就是定位节点的:可以是计算机、路由、通讯设备等 *分类:IPV4:32位地址,如:192.168.0.1 * IPV6:128位,因为...
2019-03-23 16:26:31
396
原创 多线程目录
了解多线程、三种创建多线程的方式以及一些方法多线程下载图片静态代理设计模式推导lambda--简化线程代码线程状态线程优先级守护线程并发、同步方法、同步块、锁容器并发之死锁线程协作:生产者消费者模式任务定时调度...
2019-03-23 16:26:18
154
原创 IO流目录
IO流分类了解(概念)以及文本输入输出流字符集,编码解码文件的拷贝以及封装成工具类字节数组流处理流(概念)以及装饰器模式处理流之缓冲流对接流处理流之数据流处理流之对象流处理流之转换流处理流之打印流文件分割、合并、序列流IO-Commons-fileUtils...
2019-03-22 16:50:07
174
原创 面向对象目录
抽象类和接口数组扩容、拷贝,二维数组多态和关键字final继承与重写,关键字super内部类封装包装类概念,常用integer,stringBuilder,string方法冒泡排序和二分法(折中法)查找集合(容器),collection,泛型,comparable接口用容器(集合)来存储表格数据时间类,日期(日历)类异常(概念)file类、递归打印文...
2019-03-22 16:31:03
116
原创 垃圾回收机制(概念)
* 垃圾回收机制(GC) * 自动回收无用对象占用的内存空间,解决内存问题,大大提高工作效率 * 过程:1.发现无用的对象,一般用两种方法:1.引用计数法:检查方法是否被引用,没被引用的就是无用的, * 计算简单,缺点是“循环引用的无用对象”无法识别,两个对象互相引用 * ...
2019-03-22 15:57:06
442
原创 内存分析:栈、堆、方法区
/*栈stack:1.栈描述的是方法执行的内存模型,每个方法被调用时都会创建一个栈帧(储存局部变量、操作数、方法出口等) * 2.是私有的,不能线程间共享号 * 3.特性:先进后出,后进先出 * 4.是系统自动分配,速度快,是一个连续的空间 * 堆heap:1.用于存储创建好的对象和数组 * 2.只有一个堆。被所有线程共享 * ...
2019-03-22 15:55:14
225
原创 参数传值机制
* 参数传值机制:1.传递的是副件,不是原件,对原件没有影响 * 2.基本数据传的是值的副件,引用数据传的是地址public class Value_PassOn { int id ; String name; public Value_PassOn(int id,String name) { this.id = id; this.nam...
2019-03-22 14:44:54
117
原创 构造方法
* 构造方法(构造器) * 1.通过new关键字调用 * 2.构造方法虽然有返回值,但不能定义返回类型,不能用return返回某值,可以只用return; * 3.我们如果没有定义构造器,系统会自己定义一个无参的构造函数,如果自己定义了那么系统不会自动添加 * 4.构造方法名必须与类名一致 * * this的本质、用法 (this不能用于static方法中,this指的是对象,静态...
2019-03-22 14:41:59
87
原创 控制语句
控制语句:if: int a = 2; int b = 3; int c = 4; if (a > 0) { System.out.println(a); } else if (a > b) { System.out.println(b); } else { System.out.println(c); }控...
2019-03-22 14:29:47
90
原创 运算符
* 算术运算符:二元运算符:+,-,*,/,% 一元运算符:++,-- 赋值运算符:= * 扩展运算符:+=,-=,*=,/=,%= 关系运算符:==,!=,>,<,<=,>= * 逻辑运算符:&(或),|(与),!(非),^(异或);短路:&&,||,优先级:逻辑非>逻辑与>逻辑或 * 位运算符:&,|,^,~...
2019-03-22 13:56:57
104
原创 常量、变量
变量是指一个可操作的储存空间,值可变化,命名要遵循驼峰原则。 * * 常量的值不可变,用final修饰,命名时用大写和下划线。变量有成员变量、静态变量、局部变量:public class Welocme { int oyhAge;// 成员变量,从属于对象,会自动初始化。 static String oyhName;// 静态变量,从属于类,用static修饰 public...
2019-03-22 13:47:22
93
原创 任务定时调度
java.util.Timer:类似闹钟的功能,本身实现的就是一个线程 * java.util.TimerTask:一个抽象类,该类实现了Runnable接口,所以具备多线程的能力import java.util.Calendar;import java.util.GregorianCalendar;import java.util.Timer;import java.util.T...
2019-03-19 17:18:29
124
原创 单例模式以及5种实现方式
单例模式:在多线程环境下,对外存在一个对象,并且提供一个访问该实例的全局访问点。说白了就是给类“计划生育”,对外只能有一个。应用场景: * 常见应用场景: * 1.Windows的Task Manager(任务管理器)就是典型的单例模式:启动多次都是一个管理器。 * 2.Windows的回收站也是单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。 * 3.项目...
2019-03-19 17:18:11
578
原创 线程协作:生产者消费者模式
线程协作:生产者消费者模式:这个模式不是类与类的模式, * 是处理线程协作的模型,处理线程通信的问题。 * 生产者与消费者共享同一资源,并且生产者和消费者之间互相依赖, * 互为条件:1.对于生产者,没有生产产品之前,要通知消费者等待, * 生产了之后通知消费者消费; * 2.对于消费者,在消费之后,要通知生产者已经消费完了, * 需...
2019-03-19 17:18:03
219
原创 并发之死锁
并发之死锁:一个同步块同时拥有两个以上对象的锁就有可能发生死锁; * 因为都在等待着对方释放资源而停止执行。 * 模拟:大丫有镜子,小丫有口红,大丫想要小丫的口红, * 小丫想要大丫的镜子,互不退让。//口红class Lipstick{}//镜子class Mirror{}//化妆class Markup implements Runnable{ ...
2019-03-18 22:01:44
127
原创 并发、同步方法、同步块、锁容器
什么是并发?怎么解决?并发:会导致线程不安全,数据混乱,比如负数。 * 当多个线程同时操作一个对象就会出现并发问题。 * 怎么解决:现实生活中,当多个人买一样东西或者结账的时候,我们都是排队, * 可以用这个思维。但我们怎么知道上一个线程使用完没,这个可以用一个锁来表示; * 就好像我们住宾馆的时候,我们住的时候会得到一张卡,凭卡进,退房的时候就把卡 * 还给宾馆,这个...
2019-03-18 21:37:20
187
原创 守护线程
守护线程:1.线程分为用户线程和守护线程; * 2.JVM必需确保用户线程执行完毕,而不用等待守护线程执行完毕; * 3.是为用户线程服务的; * 4.比如后台记录操作日志、监控内存使用等在西方都信仰上帝守护人民,拿这个写一个例子:写一个people类,一个god类,都实现runnable接口class Peolpe impl...
2019-03-18 21:13:58
87
原创 线程优先级
优先级:设置了优先级就不代表一定会先被调度,只是被先调度的可能性大些,就像买彩票, * 你买的多不一定会中,但几率会变大。 * Priority:设置常量 1-10 : * 1.MIN_PRIORITY 1 * 2.MAX_PRIORITY 10 * 3.NORM_PRIORITY 5默认public class TestPriority { publi...
2019-03-18 21:03:47
107
原创 线程状态
线程状态:5大状态:新生、就绪、运行、阻塞、死亡 * 新生:线程对象创建就进入新生状态,每个线程有自己的工作内存。 * 就绪:调用了start方法就进入就绪状态,但不代表会被立即调度;阻塞事件解除,进入就绪状态; * 运行时调用yield(礼让线程,暂停,让出CPU的调度,等待调度)方法,进入就绪状态;jvm * 将CPU从本地线程切换到其他线程,进入就绪状态。...
2019-03-18 20:59:03
96
原创 推导lambda--简化线程代码
lambda是jdk8以后的一个功能拿一个简单的创建线程来说,平常继承Thread类,重写run方法,用的时候要创建:public class TestSetUpThread extends Thread{ public void run() { for (int i = 0; i <30 ; i++) { System.out.p...
2019-03-18 17:28:06
199
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人