自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Dream_Ryoma的博客

我想现在的坚持和努力,能看得到感动,活的出未来。

  • 博客(74)
  • 资源 (2)
  • 收藏
  • 关注

原创 linux设置服务开机自启动(自定义服务)

原理:在/etc/init.d/目录下新建执行脚本,供linux内核在开机时调用。 用chkconfig将服务添加到系统管理服务中前提:我的服务器中有一个sc服务,安装在/home/centos/sc-test/目录下 该目录下有一个./bin/目录,目录中有启动自定义服务的脚本sc.sh。在centos下设置自定义服务开机自启动(内核版本为6.X): 1. 在/etc/init.d/目录下创建内核开机调用的启动服务的脚本备注:脚本名称为sc,那么服务名称也为sc...

2020-06-06 16:43:38 953 1

原创 用栈实现队列(java)

栈的特性是后进先出。栈的两个主要操作,一个是出栈,一个是入栈。队列的特性是先进先出。队列的两个主要操作,一个是队尾追加元素,一个是队首取出元素。要用栈实现队列,那么需要两个栈,一个正式栈,一个预备栈。正式栈相当于队列,用来存储进入队列的元素;预备栈用来在取出队首元素的时候,将栈顶到栈底上一个元素进行临时存储,待取出队首元素操作完成后,再将预备栈中的元素取出放到正式栈中。代码实现如下:...

2019-03-13 16:48:44 477

原创 队列实现栈(java)

栈的特性是后进先出。栈的两个主要操作,一个是出栈,一个是入栈。队列的特性是先进先出。队列的两个主要操作,一个是队尾追加元素,一个是队首取出元素。要用队列实现栈,那么需要两个队列,一个正式队列,一个预备队列。正式队列相当于栈,用来存储入栈的元素;预备队列用来在出栈的时候,将队首到队尾前一个元素进行临时存储,待出栈操作完成后,再将预备队列中的元素取出放到正式队列中。代码实现如下:pa...

2019-03-13 16:20:23 452

原创 冒泡排序拓展实例

给定一个整数数组,数组中有奇数有偶数,对数组进行排序,实现如下功能:(1)奇数在前,偶数在后(2)奇数之间的排序以及偶数之间的排序和原来一样(3)时间复杂度是O(n)如下数组:[3,1,2,4,5,6,7],要求排序之后为[3,1,5,7,2,4,6]。分析:第(1)和第(2)说明类似于数组大小排序,不同之处在于这个是奇数偶数排序。第(3)要求时间复杂度是O(n),经典排序算法...

2019-03-13 14:50:28 295

原创 JVM运行期优化

介绍四种最具有代表性的优化技术:(1)语言无关的经典优化技术之一:公共子表达式消除如果一个表达式E已经计算过了,并且从先前的计算到现在E中所有变量的值都没有发生变化,那么E的这次出现就成为了公共子表达式。对于这种表达式,没有必要花时间再对它进行计算,只需要直接用前面计算过的表达式结果代替E就可以了。如果这种优化仅限于程序的基本块内,便称为局部公共子表达式消除,如果这种优化的范围涵盖了多个基...

2018-10-26 09:35:59 211

原创 垃圾收集器与内存分配策略(六)——内存分配与回收策略

对象的内存分配,往大方向上讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置。(1)对象优先在Eden分配大多数情况下...

2018-10-25 14:57:35 196

原创 垃圾收集器与内存分配策略(五)——垃圾收集器

(1)Serial收集器Serial收集器是JDK1.3之前虚拟机新生代收集的唯一选择。这个收集器是一个单线程的收集器,单线程的意义是指在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。它的优势在于对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,可以获得最高的单线程收集效率。(2)ParNew收集器ParNew收集器是Serial收集器的多线程...

2018-10-25 14:50:16 182 1

原创 垃圾收集器与内存分配策略(四)——HotSpot的算法实现

(1)枚举根节点从可达性分析中从GC Roots节点找引用链这个操作为例,可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,现在很多应用仅仅方法区就有数百兆,如果要逐个检查这里面的引用,那么必然会消耗很多时间。另外,可达性分析对执行时间的敏感还体现在GC停顿上,因为这项分析工作必须在一个能确保一致性的快照中进行——这里“一致性”...

2018-10-25 14:45:37 148

原创 垃圾收集器与内存分配策略(三)——垃圾收集算法

(1)标记-清除算法算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程发生在对象标记判定时。它的主要不足有两个:一是效率问题,标记和清除两个过程的效率都不太高;另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前出发另一次垃...

2018-10-25 14:29:12 140

原创 垃圾收集器与内存分配策略(二)——对象已死吗

在堆里面存放着java中几乎所有对象的实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还存活着,哪些已经死去。(1)引用计数算法:引用计数算法是给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。客观地说,引用计数法的实现简单,判定效率也很高,在大部分情况下它都是一个不错的...

2018-10-25 14:26:05 142

原创 垃圾收集器与内存分配策略(一)—— 概述

java运行时数据区域有很多个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间才能知道会创建...

2018-10-25 14:03:49 135

原创 OutOfMemoryError异常

(1)堆溢出java堆用于存储对象实例,只要不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。如果发生异常,可以在程序运行时搭配-XX:+HeapDumpOnOutOfMemoryError参数让虚拟机在出现内存溢出异常时Dump出当前的内存堆快照以便事后进行分析。解决这个区域的异常,一般...

2018-10-24 23:13:31 227

原创 虚拟机对象的创建、布局、访问

知道了虚拟机内存的概况,了解了内存中放了些什么后,那虚拟机中对象是如何创建、如何布局以及如何访问的呢?对于这种涉及细节的问题,必须把讨论范围限定在具体的虚拟机和集中在某一个内存区域上才有意义。本篇基于HotSpot虚拟机以及堆为例,探究虚拟机中对象的创建、布局以及访问。(1)对象的创建:java是一门面向对象的语言,在java程序中无时无刻都有对象被创建出来。在语言层面上,创建对象通常仅仅...

2018-10-23 21:12:03 178

原创 JVM运行时数据区

JVM在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着JVM进程的启动而存在,有的区域则依赖用户线程的启动和结束而建立和销毁。JVM锁管理的内存将会包括以下几个运行时数据区域:(1)程序计数器:程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念里,字节码解释器工...

2018-10-23 21:11:39 157

原创 虚拟机类加载机制(八)——类加载器

虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到java虚拟机外部去实现,以便让应用程序自己决定如何取获取所需要的类。实现这个动作的代码模块称为“类加载器”。类加载器可以说是java语言的一项创新,也是java语言流行的重要原因之一。1.类与类加载器:类加载器虽然只用于实现类的加载动作,但它在java程序中起到的作用却远远不限于类加载阶段。...

2018-10-21 14:42:41 182

原创 虚拟机类加载机制(七)——类加载的过程(初始化)

类初始化时类加载过程的最后一步,前面的类加载过程中,除了在加载阶段(类加载过程的一个阶段)应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制。到了初始化阶段,才真正开始执行类中定义的java程序代码。在准备阶段,变量已经赋过一次系统要求的初始值,而在初始化阶段,则根据程序员通过程序制定的主观计划去初始化类变量和其他资源,或者可以从另外一个角度来表达:初始化阶段是执行类构造器...

2018-10-21 14:42:11 220

原创 sql截取、拼接

数据库中有个商品信息表,表结构如下:id:int类型,name:varchar类型,score:int类型,publish_time:datetime类型,image_url:varchar类型。说明:有的商品有图片,有的商品没有图片,没有图片的设置了一张默认图片。而且表中的图片url都省略了域名,默认图片存在一个服务器,有图片的商品存在另一个服务器(最初的设计者设计的,也是很烦啊~)...

2018-10-19 16:36:16 461

原创 java.util.ConcurrentModificationException异常

1. 异常触发场景:遍历集合,并对集合进行add、remove或者clear等操作的时候。2. 示例:package Test;import java.util.ArrayList;import java.util.List;public class CollectionOperateTest { public static void main(String[] ar...

2018-10-19 15:02:50 370

原创 虚拟机类加载机制(六)——类加载的过程(解析)

解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,符号引用在class文件中是以CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等类型的常量出现,那解析阶段中所说的直接引用与符号引用又有什么关系呢?符号引用:以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可。符...

2018-10-18 09:19:49 239

原创 虚拟机类加载机制(五)——类加载的过程(准备)

准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。需要强调的是,这个时候进行内存分配的仅包括类变量,即被static修饰的变量,不包括实例变量,实例变量将会在对象实例化时随着对象一起分配在java堆中。其次,这里所说的初始值通常情况下是数据类型的零值,假设一个类变量的定义为: public static int value = 123;...

2018-10-17 19:29:46 188

原创 项目优化(数据库优化、多线程、CountDownLatch)

最近有一个新需求,因为公司的需要,需要开发一个内部员工使用的销售操作台。具体使用场景如下:每个员工开始时都需要登录,登录之后展示公司数据库中的所有企业信息(需要展示的内容如下:企业名称、企业统一社会信用代码、企业产品、企业级别(标准、会员之类的)、企业被访问次数、企业余额)。然后用户可以操作每一条企业信息,让其置顶或取消置顶。功能虽然是新功能,但是数据库表之前早已经存在了,表设计如下:...

2018-10-17 09:52:18 373

原创 虚拟机类加载机制(四)——类加载的过程(验证)

验证是连接阶段的第一步,这一阶段的目的是为了确保class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。java语言本身是相对安全的语言,使用纯粹的java代码无法做到诸如访问数组边界以外的数据、将一个对象转型为它并未实现的类型、跳转到不存在的代码行之类的事情,如果这样做了,编译器将拒绝编译。但是class文件不一定要求用java源码编译出来,可以使用任何途径产生...

2018-10-11 17:12:26 277

原创 虚拟机类加载机制(三)——类加载的过程(加载)

加载是类加载过程的一个阶段。在加载阶段,虚拟机需要完成以下3件事情:(1)通过一个类的全限定名来获取定义此类的二进制字节流。(2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。(3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。虚拟机规范的这3点要求其实并不算具体,因此虚拟机实现与具体应用的灵活度都是相当大的。...

2018-10-11 15:08:44 166

原创 虚拟机类加载机制(二)——类加载的时机

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段。其中验证、准备、解析这三个阶段统称为连接(Linking)。七个阶段的发生顺序如下图: 七个阶段中,加...

2018-10-11 14:06:30 158

原创 虚拟机类加载机制(一)——概述

代码编译的结果是从本地机器码变成字节码,即java文件变成class文件。class文件中有很多信息,这些信息最终都要加载到虚拟机中才能运行和使用。而虚拟机如何加载这些class文件呢?class文件中的信息加载到虚拟机后会发生什么变化呢?虚拟机类加载机制系列文章中的class文件不是特指存在于具体磁盘中的文件,而是一串二进制的字节流,无论以何种形式存在的都可以。虚拟机把描述类的数据从cl...

2018-10-11 10:43:22 157

原创 设计模式(八)——适配器模式

适配器模式多用来拓展系统,是两个不兼容接口之间对接的桥梁,适配器结合了两个接口独立的功能。适配器模式不是用在系统设计阶段。常见的适配器模式使用场景有如下这些:读卡器、笔记本充电器等。示例如下:项目最初设计了一个MediaPlayer接口,用来播放多媒体文件。package AdapterPattern;/** * 播放器 */public interface MediaP...

2018-10-10 14:38:28 147

原创 设计模式(七)——原型模式

原型模式的核心就是java中的Cloneable接口。示例如下:XX银行国庆期间给所有用户发送信用卡消费抽奖信息。package PrototypePattern;/** * 邮件实体 */public class Mail{ //收件人 private String receiver; //主题 private String subj...

2018-10-09 18:10:46 138

原创 java克隆注意事项

对象拷贝时,类的构造函数不会被执行package PrototypePattern.cloneTest;public class TestObject implements Cloneable{ public TestObject() { System.out.println("构造函数执行"); } @Override prot...

2018-10-09 18:07:02 266

原创 设计模式(六)——建造者模式

建造者模式的核心是用多个简单对象一步一步构建一个复杂对象,也就是将一个复杂对象的构建和表示分离开来。以快餐定套餐为例(套餐为复杂对象,套餐是由主食和饮料等多个简单对象构成的),代码如下:先定义主食类和饮料类:package BuilderPattern;public class Food { private String name; private i...

2018-09-29 14:44:53 225

原创 面向对象四大特性

抽象:把现实生活中的某一类东西提取出来,用程序代码来表示,抽象出来的程序代码叫做类或接口。抽象分为两个部分:数据(可以理解为现实事务的特征)抽象和行为抽象。数据抽象:现实生活中事务的特征,对应类中的属性(比如现实生活中人有眼睛、鼻子等,抽象到类中就是眼睛属性、鼻子属性)。 行为抽象:现实生活中事务的行为,对应类中的方法(比如现实生活中人会吃饭、睡觉等,抽象到类中就是吃饭方法、睡觉方法)。...

2018-09-28 14:49:53 286

原创 设计模式(五)——单例模式

单例模式,主要由以下几个模块组成:私有的静态对象实例,私有的构造方法(避免外部调用new对象,保证只有一个对象的实例),一个共有的静态获取对象的方法(供外部调用)。代码如下:懒汉式单例模式(在需要的时候,也即调用共有的静态获取对象的方法时才创建对象):package SinglePattern;public class LazySingle { private stat...

2018-09-27 19:53:58 494

原创 设计模式(四)——抽象工厂模式

前面说了两种设计模式,简单工厂模式和工厂模式。简单工厂模式是定义一个工厂类,工厂类根据调用时传入的参数选择创建哪一个类的实例。工厂模式是为每个类创建一个工厂,而这些工厂都实现了同一个工厂,客户端在调用的时候自己选择某个类对应的工厂去创建某个类的实例。那抽象工厂又是什么呢?抽象工厂在工厂模式的基础上引入了“产品族”的概念。代码如下(鼠标和键盘是一个产品族):先定义鼠标接口和键盘接口:p...

2018-09-27 17:04:05 179

原创 设计模式(三)——工厂模式

工厂模式是23种设计模式,它是定义一个实例化对象的工厂(本质为一个抽象类或接口),然后为每个品种都定义一个工厂(实现实例化对象的工厂),在每个品种工厂中决定创建哪个类的实例。也就是说实例化哪个类的对象交由具体的工厂去决定。代码如下:先定义一个鼠标类:package FactoryPattern;/** * 鼠标 */public interface Mouse { ...

2018-09-26 18:22:29 144

原创 设计模式(二)——简单工厂模式

简单工厂模式并不是23种设计模式中的一种,它主要是定义一个工厂类来负责创建其他类的实例。典型的表现形式为在调用创建其他类实例的时候需要传递一个参数,工厂类根据传递的参数决定创建哪个类的实例。代码如下:先定义一个鼠标类:package SimpleFactory;/** * 鼠标 */public interface Mouse { //鼠标点击 pu...

2018-09-26 17:38:16 182

原创 设计模式(一)

设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。设计模式一共有二十三种,每种设计模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在开发过程中不断重复发生的问题,以及该问题的核心解决方案。 1994年,Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了《Design Patterns - E...

2018-09-21 09:54:55 157

原创 MyBatis实现查询结果按照查询参数的顺序排序

查询id为指定id的学生集合。查询参数为list,即学生id的集合,list泛型为Integer,比如list中的元素为151,208,4,118,109,正常的查询,返回的list结果集,遍历学生id放在另一个list结果集中,也就是查询结果学生id的集合为4,109,118,151,208。<select id="getStudentListByIdList" paramete...

2018-09-14 11:47:14 5682 3

原创 并发控制六(其他并发控制机制)

并发控制的方法除了封锁技术以外,还有时间戳方法、乐观控制法和多版本并发控制等。时间戳方法给每一个事务盖上一个时标,即事务开始执行的时间。每个事务具有唯一的时间戳,并按照这个时间戳来解决事务的冲突操作。如果发生冲突操作,就回滚具有较早时间戳的事务,以保证其他事务的正常执行。被回滚的事务被赋予新的时间戳从头开始执行。乐观控制法认为事务执行时很少发生冲突,因此不对事务进行特殊的管制,而是让它...

2018-08-23 10:27:58 834

原创 并发控制五(封锁的粒度)

封锁对象的大小称为封锁粒度。封锁对象可以是逻辑单元,也可以是物理单元。以关系数据库为例,封锁对象可以是这样一些逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引直至整个数据库;也可以是这样一些物理单元:页(数据页或索引页)、物理记录等。封锁粒度与系统的并发度和并发控制的开销密切相关。直观地看,封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;反之,封锁的...

2018-08-23 09:10:35 3589 1

原创 并发控制四(活锁和死锁)

和操作系统一样,封锁的方法可能引起活锁和死锁等问题。活锁如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待;T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待;然后T4又请求封锁R,当T3释放了R之后系统又批准了T4的请求,T2可能永远都处于等待,这就是活锁。避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁统一数据对象时,封锁子系统按...

2018-08-22 18:10:27 1060

原创 并发控制三(封锁协议)

在运用排他锁和共享锁这两种基本封锁对数据对象加锁时,还需要约定一些规则。如:何时申请X锁或S锁、持锁时间、何时释放等,这些规则被称为封锁协议。对封锁方式指定不同的规则,就形成了各种不同的封锁协议。常用的是三级封锁协议,三级封锁协议在不同程度上解决了并发操作的不正确调度带来的丢失修改、不可重复读和读“脏”数据等不一致性问题。(1)一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务...

2018-08-22 16:56:40 1153 1

plupload.js

JS文件上传插件plupload.js。Plupload有以下功能和特点:拥有多种上传方式,支持以拖拽的方式来选取要上传的文件...

2018-06-11

eclipse反编译工具jad压缩包

eclipse反编译工具jad压缩包,内涵jad jar包和jad.exe

2018-05-14

空空如也

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

TA关注的人

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