自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 问答 (4)
  • 收藏
  • 关注

原创 创建型设计模式——抽象工厂模式

定义为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定他们的具体类使用场景一个对象族有相同的约束时可以使用抽象工厂模式。简单实现抽象车厂类public abstract class CarFactory { //生产轮胎 public abstract ITire createTire(); //生产发动机 public abstract IEng...

2019-10-09 22:42:31 87

原创 应用最广泛的模式——工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。使用场景:在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合工厂模式,用new就可以完成创建的对象无需使用工厂模式简单实现:奥迪工厂:public abstract class AudiFactory { /** * 奥迪工厂 * @param clz 具体的奥...

2019-09-25 21:36:31 170

原创 编程好帮手——代理模式

定义:为其他对象提供一种代理以控制这个对象的访问。使用场景:当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。简单实现:诉讼接口类:public interface ILawsuit { //提交申请 void submit(); //进行...

2019-09-25 13:42:03 224

原创 《将博客搬至CSDN》

将博客搬到CSDN了

2019-09-21 13:04:00 61

原创 Linux下将Python脚本变成Service实现开机启动

1.新建dreamtech.sh脚本文件:#!/bin/bashfilepath="/home/OPERATE/start.pyc"start(){nohup python3 $filepath>/dev/null 2>&1 &echo 'dreamtech service OK'}stop(){serverpid=`ps -aux|grep "$f...

2019-09-21 12:14:00 1069

原创 应用最广的设计模式——单例模式

介绍单例模式是应用最广的模式之一,也可能是很多初级工程师唯一会使用的设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需拥有一个全局对象,这样有利于我们协调系统整体的行为。定义确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例使用场景确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。...

2019-09-21 09:51:00 98

原创 走向灵活软件之路——面向对象的六大原则

优化代码的第一步——单一职责原则 让程序更稳定、更灵活——开闭原则 定义:软件中的对象(类、模块、函数等)应该对于扩展是开放的,对于修改是封闭的。当软件的需求发生变化时,应尽量通过扩展的方式来实现变化,而不是通过修改已有代码来实现。 构建扩展性更好的系统——里氏替换原则 定义: 第一种定义:如果对每一个类型为S的对象O1,都有类型为T的对象O2使得以T定义的所有程...

2019-09-21 09:14:00 98

原创 解决解耦的钥匙——观察者模式

介绍:观察者模式是一个使用率非常高的模式,它最常用的地方是GUI系统、订阅——发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI具有易变性,尤其是前期随着业务的改变或者产品的需求修改,应用界面也会经常性变化,但是业务逻辑基本变化不大,此时GUI系统需要一套机制来应对这种情况,是的UI层与具体的业务逻辑解耦...

2019-09-20 17:29:00 114

原创 UDP

UDP 是一个简单的传输层协议。有如下特点:UDP 缺乏可靠性。UDP 本身不提供确认,序列号,超时重传等机制。UDP 数据报可能在网络中被复制,被重新排序。即 UDP 不保证数据报会到达其最终目的地,也不保证各个数据报的先后顺序,也不保证每个数据报只到达一次。UDP 数据报是有长度的。每个 UDP 数据报都有长度,如果一个数据报正确地到达目的地,那么该数据报的长度将...

2019-09-17 18:07:00 156

原创 TCP

TCP特点:TCP是面向连接的传输层协议:应用程序在使用TCP协议之前必须先建立TCP连接。在传送数据结束后,必须释放已经建立的TCP连接每一条TCP连接只能有两个端点:每一条TCP连接只能是点对点的TCP提供可靠交付的服务:通过TCP连接传送的数据...

2019-09-17 14:37:00 70

原创 JVM内存模型

主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。Java内存模型规定了所有的变量都存储在主内存(Main Memory)中。每条线程还有自己的工作内存(Working Memory),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而...

2019-09-17 11:08:00 71

原创 JVM类加载机制

类从被加载到虚拟机内存中开始,到卸载出内存开始,它的整个生命周期如下加载连接初始化验证准备解析使用卸载加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称...

2019-09-13 11:44:00 49

原创 CMS与G1垃圾收集器

CMS收集器CMS(Concurrent Map Sweep)收集器是一种以最短回收停顿时间为目标的收集器,通常用于JavaWeb程序上,重视服务响应速度,希望系统时间停顿最短,而它是基于"标记-清除"算法。整个过程分为四个步骤:初始标记只是标记一下GC Roots能直接关联到的对象,速度很快。并发标...

2019-09-10 15:54:00 92

原创 JVM垃圾收集

对象已死吗?Java堆几乎存放了所有的对象实例,垃圾回收器在进行回收之前,首先确定的就是哪些对象存活,哪些对象死亡。可达性分析算法:由于引用计数算法无法处理“循环引用”的情况,所以主流的商用程序语言(Java、C#等)都是通过可达性分析来判定对象是否存活的。这个算法的基本思想就是:通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下...

2019-09-09 18:25:00 60

原创 Java GC、新生代、老年代

1、堆内存Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收...

2019-09-09 15:51:00 94

原创 HotSpot虚拟机对象

对象的创建:new指令:虚拟机开始创建对象类加载检查:检查new指令的参数是否能在常量池中定位到某个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。分配内存:类加载检查通过后,虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成之后便可以确定。为对象分配空间的任务等同于把一块确定大小的内存从Ja...

2019-09-09 14:46:00 55

原创 Java内存区域与内存溢出异常

Java运行时数据区域程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存程序计数器:程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号治时期。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取吓一跳需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都...

2019-09-09 10:45:00 72

原创 剑指Offer-用两个栈实现队列

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer>...

2019-09-02 22:35:00 101

原创 剑指Offer-重构二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。public class Solution { class TreeNode { int v...

2019-09-02 22:23:00 96

转载 Java中Static关键字的用法

看了别人的总结一下,原地址:https://www.cnblogs.com/hcl22/p/6371939.html特点:  1.static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量。  2.static修饰的成员被所有的对象共享。  3.static优先于对象存在,因为static的成员随着类的加载就已经存在。  4.s...

2019-03-18 17:13:57 189

转载 Java多线程之synchronized关键字全面总结(面试7大问题)3.0

面试7大问题:1.两个线程同时访问同一个实例的synchronized修饰的方法2.两个线程分别访问两个不同实例的synchronized修饰的方法3.两个线程访问的是static synchronized修饰的方法4.两个线程,一个访问synchronized修饰的方法1,另一个访问没有synchronized修饰的方法25.两个线程,一个访问synchronized修饰的方...

2019-03-18 17:03:52 307

转载 Java多线程之synchronized关键字全面总结2.0

为了避免出现上一张的结果,那么Java就是用了synchronized关键字。再使用了synchronized关键字之后 一个类的实例如果想调用锁住的代码,那么这个实例必须要能够拿到对应的锁才行。而一个锁只能同时被一个实例拿到。那么判断的根本依据就在于:实例需要拿到的是不是同一个锁! 如果是同一个锁,那么对应代码就不能同时执行,如果不是同一个锁,那么对应的代码就可以同时执行。他有四种情...

2019-03-18 16:28:04 190

转载 Java多线程之synchronized关键字全面解析1.0

Java在多线程方面有一个synchronized关键字。这个关键字可以称为Java高并发之魂。为什么要引入synchronized关键字呢??我们可以先看一个案例:首先我们写一个L类负责打印消息public class L { public static void p(String str) { System.out.println(str); }}然后我们来写一个测试类...

2019-03-18 15:34:14 182

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除