自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

静墨的博客

记录硕士研究生的学习生活

  • 博客(46)
  • 资源 (4)
  • 收藏
  • 关注

原创 assert用法

1.简介assertion(断言)在软件开发中是一种常用的调试方式,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告并且退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为...

2018-04-12 21:06:30 20668 1

原创 ProcessBuilder

1. 简介ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。 每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。st...

2018-04-12 20:51:02 10482

原创 Docker源码分析三:启动Docker Daemon

Docker源码分析三:启动Docker Daemon Docker Daemon是Docker架构中运行在后台的守护进程,大致可以分为Docker Server、Engine和Job部分。三者的关系大致如下:Docker Daemon通过Docker Server模块接收Docker Client的请求,并在Engine处理请求,然后根据请求类型,创建出指定的Job并运行。本文基于Docker...

2018-04-05 21:19:45 3274

原创 Docker源码分析二:Docker Client

Docker Client是Docker架构中用户与Docker Daemon建立通信的客户端。本文基于Docker 18.02.0-ce的源码分析Docker Client的内容。主要包括两个部分,分别是:Docker Client的创建Docker Client对命令的执行1、Docker Client的创建对于Docker这样一个C/S架构,客户端的存在意味着Doc...

2018-03-13 19:16:43 1535

原创 Python学习笔记2:函数式编程

在上一篇博客中,我们学习了以下内容:Python的安装环境;变量和数据类型(Python内置的基本类型);List和Tuple(顺序的集合类型);条件判断和循环(控制程序流程);Dict和Set(根据key访问的集合类型);函数(定义和调用函数);切片(如何对list进行切片);迭代(如何用for循环迭代集合类型);列表生成式(如何快速生成列表)。在本篇博客中我们将学习函数式编程。1.相关概念函数:

2016-07-07 16:57:36 959

原创 Python学习笔记1:Python入门

1.Python简介 1989龟叔,特点优雅、明确、简单。适合的领域:Web网站和各种网络服务,系统工具和脚本,作为“胶水”语言把其他语言开发的模块包装起来方便使用。 Python和其他语言的对比如下: 语言 类型 运行速度 代码量 C 编译为机器码 非常快 非常多 Java 编译为字节码 快 多 Python 解释执行 慢 少Py

2016-06-28 21:26:54 458

原创 JConsole、VisualVM检测死锁

1.死锁示例:package com.lesson1;public class TestDeadLock implements Runnable{ /** * @param args */ public static void main(String[] args) { TestDeadLock lock1=new TestDeadLock();

2016-06-11 17:31:24 839

原创 Java 删除ArrayList中指定元素

ArrayList是最常用的一种java集合,在开发中我们常常需要从ArrayList中删除特定元素。有几种常用的方法:最朴实的方法,使用下标的方式高级循环的方式迭代器方式1.最朴实的方法,使用下标的方式ArrayList al = new ArrayList(); al.add("a"); al.add("b"); for (int i = 0; i < al.size(); i++

2016-06-11 17:00:47 3798

转载 设计模式之Bridge Pattern

本文转载自:http://blog.csdn.net/yangzl2008/article/details/7670996一、桥接模式的内容桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。桥接模式将继承关系转换为关联关系,

2016-03-17 10:40:45 417

原创 虚拟机类加载机制

一、类加载的时机1. 类加载的 生命周期 :加载(Loading)-->验证(Verification)-->准备(Preparation)-->解析(Resolution)-->初始化(Initialization)-->使用(Using)-->卸载(Unloading)2. 加载:这由虚拟机自行决定。3. 初始化阶段:a) 遇到new、getstatic、put

2016-03-16 22:06:41 272

转载 红黑树

介绍另一种平衡二叉树:红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas 和Robert Sedgewick改成一个比较摩登的名字:红黑树。红黑树和之前所讲的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,

2016-03-14 11:37:02 243

转载 Java并发编程:volatile关键字解析

Java并发编程:volatile关键字解析   volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。  volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模

2016-03-10 13:02:30 290

转载 Java8 十大新特性

本教程将用带注释的简单代码来描述新特性,你将看不到大片吓人的文字。一、接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:复制代码代码如下:interface Formula {    double calculate(int a);    defaul

2016-03-07 20:56:32 315

转载 设计模式随笔--蜡笔与毛笔的故事

转自:http://www.cnblogs.com/zhenyulu/articles/67016.html我想大家小时候都有用蜡笔画画的经历吧。红红绿绿的蜡笔一大盒,根据想象描绘出格式图样。而毛笔下的国画更是工笔写意,各展风采。而今天我们的故事从蜡笔与毛笔说起。设想要绘制一幅图画,蓝天、白云、绿树、小鸟,如果画面尺寸很大,那么用蜡笔绘制就会遇到点麻烦。毕竟细细的蜡笔要涂出一片蓝天

2016-03-07 20:40:47 724

转载 哈希表和完美哈希

我们知道,通过对数组进行直接寻址(Direct Addressing),可以在 O(1) 时间内访问数组中的任意元素。所以,如果存储空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以应用直接寻址技术。哈希表(Hash Table)是普通数组概念的推广。当实际存储的的关键字数比可能的关键字总数较小时,这时采用哈希表就会比使用直接数组寻址更为有效。因为哈希表通常采用的数组尺寸与

2016-03-07 10:31:25 4849

原创 重构(改善既有代码的设计)--读书笔记2

重构(改善既有代码的设计)–读书笔记1中,总结了什么是重构,为什么要重构,该在什么地方重构以及代码的坏味道。接着上一篇博客,本篇博客总结常用的重构手法,对于每一个重构手法,我将会做一个简要介绍,必要的时候我会再给出一个简单的示例加以说明。 一.重新组织函数 1. Extract Method(提炼函数)     你有一段代码可以被组织在一起并独立出来。     将这段代码放进一个独立的函数中

2016-03-06 14:56:45 403

原创 重构(改善既有代码的设计)-- 读书笔记1

春节前后读了这本书,是一个同学推荐给我的,感觉还不错,文笔通俗易懂,结构清晰有逻辑。喜欢Kent Beck说的一句话“我不是个伟大的程序员,我只是个有着优秀习惯的好程序员”。读这本书,对重构获得了一些认识,一直没来得及整理(其实就是为自己的懒惰找借口),现整理如下。 1.什么是重构?     所谓重构是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经

2016-03-03 21:19:36 464

原创 设计模式之Proxy(代理):模拟JDK的动态代理

1.静态代理     代理的实现方式有两种,一是继承,二是聚合。示例如下:计算Tank中move方法的运行时间,不包括JDK为其准备运行环境的时间。2.动态代理    如果有很多对象,要想对任意对象、任意的接口方法,实现任意代理,又改怎么办呢?答案是动态代理,下面我们简单模拟JDK的动态代理。

2016-01-27 11:11:59 365

原创 Hibernate:核心开发接口介绍

1.Configuration对象的方法buildSessionFactory() SessionFactory Session:openSession,getCurrentSession2.Session 对象的三种状态:Transisent、Persistent、Detached load与get的区别; update saveOrUpdat

2016-01-22 15:23:45 283

原创 Java基础:多线程之CountDownLatch、CyclicBarrier、Exchanger

多线程之CountDownLatch、CyclicBarrier、Exchanger

2016-01-18 20:41:31 325

原创 Java基础:多线程之ReadWriteLock、Condition、Semaphore

ReadWriteLock 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM自己控制的,我们只需上好相应的锁即可

2016-01-18 20:16:25 295

原创 Java基础:多线程之线程池

1.线程池的概念与Executors类的应用     应用需求:如果访问服务器的客户端很多,那么服务器要不断的创建和销毁线程,这将严重的影响服务器的性能     解决方法:首先创建一些线程,它们的集合称为线程池,当服务器接受到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,服务完后不关闭该线程,而是将线程还回到线程池中。

2016-01-15 10:09:31 307

原创 Java基础:多线程之面试问题

1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做。 2.如果每个线程执行的代码不同,这是需要用不同的Runnable对象,有如下两种方式来实现这些Runnable对象之间的数据共享:

2016-01-12 11:31:14 281

原创 Java基础:多线程之线程范围内的数据共享ThreadLocal

问题:实现线程范围内的数据共享,即每个线程只能访问它自己的数据,不能访问其他线程的数据。具体逻辑如下图所示: 1.方法一:使用Map<线程Thread,数据类型DataType> 使用Map<线程Thread,数据类型DataType>,其中key为Thread,即线程;value为DataType,即要线程范围内共享的数据的数据类型。这样就可以通过线程来获取其相应的数据。

2016-01-12 11:04:14 379

原创 Java基础:定时器Timer

定时器Timer、TimerTask

2016-01-07 20:56:44 296

原创 Java基础:多线程之线程创建的两种方式

创建线程有两种方式: 1. 继承Thread类,覆写run方法; 2. 实现Runnable接口,将任务代码封装到run方法中。

2016-01-06 20:27:39 427

原创 java基础:多线程之生产者消费者问题

多生产多消费就需要使用while和notifyAll,while保证被唤醒的线程继续判断标志位,notifyAll把所有线程都唤醒,保证能够唤醒对方的线程。但弊端是把本方线程也唤醒,效率低。

2016-01-05 21:30:18 269

原创 Java基础:死锁示例

java多线程编程中,如果线程锁使用不当,就会产生死锁,以下是一个简单的死锁示例。public class DeadRunnable implements Runnable{ Object locka=new Object(); Object lockb=new Object(); boolean flag; public DeadRunnable(boolean fl

2015-12-19 21:02:27 394

原创 Java基础:多线程下的单例模式

单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。但在多线程环境下,就可能会产生问题,并不一定能保证只有一个实例。

2015-12-19 17:28:01 302

原创 Hibernate:模拟Hibernate实现

Hibernate是对JDBC的轻量级对象封装,读取配置文件得到实体类与数据表之间的对应关系,然后使用Java反射机制得到相应的类和属性值,并拼接成SQL语句,进行数据库的操作。下面就简单模拟Hibernate的实现。1. Student实体类public class Student { private String id; private String name; priv

2015-12-11 21:31:52 400

原创 Hibernate:第一个Hibernate程序

Hibernate是一种ORM框架,全程为Object-Relative Database-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象(一般为POJO)。下面就以一个简单的Hibernate程序来快速了解Hibernate。

2015-12-11 21:05:15 331

原创 Spring:AOP编程

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。面向切面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足。在OOP中模块化的关键单元是类(classes),而在AOP中模块化的单元则是切面。切面能对关注点进行模块化,例如横切多个类型和对象的事务管理。

2015-12-10 09:30:41 251

原创 Spring:Spring入门和bean的生命周期

1.Spring概述Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。控制反转(IOC, Inverse Of Control):创建对象、维护对象之间关系的权利从程序转移到Spring容器;依赖注入(DI, Dependency Injection):对象之间的依赖关系、属性

2015-12-07 11:01:56 356

原创 Java基础:集合

Java平台提供了一个全新的集合框架,框架的核心为Collection、List(列表)、Set(集合)和Map(映射)。集合类的框架为集合的实现者提供了大量的接口和抽象类,并对其中的某些机制给予了描述,例如,Iterator(迭代协议)。实现Comparable接口或Comparator接口,用户可以根据需要对集合中的元素进行排序。为了方便用户使用,Java平台还提供了Collections和Arrays工具类

2015-11-03 17:33:22 339

原创 Strut2:OGNL表达式

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

2015-10-30 15:40:10 375

原创 Java基础:正则表达式regex

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。 正则表达式的特点是: 1. 灵活性

2015-10-21 21:50:59 609

原创 Struts2:对Action中方法进行输入校验

在struts2中,我们可以实现对action的所有方法进行校验或对action的指定方法进行校验。对于输入校验,struts2提供了两种实现方法: 1.采用手工编写代码实现 2.基于XML配置方式实现**1.采用手工编写代码实现

2015-10-21 09:27:39 4452

原创 Struts2:自定义拦截器

Struts2默认启用了大量通用功能的拦截器,只要我们配置Action的package继承了struts-default包,这些拦截器就会起作用。自定义拦截器,顾名思义,是用户自己定义的拦截器。下面我们实现一个简单的例子,需求如下:用户登录后可以访问action中的所有方法;如果用户没有登录,则不允许访问action中的方法,并提示“你没有权限执行该操作”。

2015-10-19 10:05:56 319

原创 Struts2:多文件上传

在Struts2中实现多文件上传,分为三步:1.第一步    在WEB-INF/lib下加入commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar,这两个文件可以从http://commons.apache.org下载。2.第二步    把form表的enctype设置为multipart/form-data。3.第三步 在Action类中添加以下属性,属性对应于表单中文件字段的名称。

2015-10-14 09:29:35 405

原创 Struts2:Action中result的各种转发类型

Struts2为result提供了多种转发类型,常用的有dispatcher、redirect、redirectAction、plainText等。1.dispatcher:默认值,内部请求转发2.redirect:请求重定向3.redirectAction:重定向到另外一个action4.plainText:显示原始文件内容

2015-10-09 19:55:20 1416

Spring jar包

包括spring.jar、spring-aop-4.1.8.RELEASE.jar、spring-aspects-4.1.8.RELEASE.jar、spring-beans-4.1.8.RELEASE.jar、spring-context-4.1.8.RELEASE.jar、spring-core-4.1.8.RELEASE.jar等等

2015-12-14

Struts2 jar包

包括struts2-core-2.1.6.jar、commons-logging-1.0.4.jar、commons-io-1.3.2.jar、commons-fileupload-1.2.1.jar、freemarker-2.3.13.jar、ognl-2.6.11.jar、xwork-2.1.2.jar

2015-12-14

Struts2演示源码

该代码演示了Action中result的四种转发类型、多文件上传、自定义拦截器、对Action中方法进行输入校验以及OGNL表达式等内容。

2015-11-04

java集合类演示源码

Java平台提供了一个全新的集合框架,框架的核心为Collection、List(列表)、Set(集合)和Map(映射)。集合类的框架为集合的实现者提供了大量的接口和抽象类,并对其中的某些机制给予了描述,例如,Iterator(迭代协议)。实现Comparable接口或Comparator接口,用户可以根据需要对集合中的元素进行排序。为了方便用户使用,Java平台还提供了Collections和Arrays工具类。collection.rar分别对上述内容进行详细讲解演示。

2015-11-04

空空如也

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

TA关注的人

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