自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JAVA程序猿

此博客主要是自己的学习总结,如有问题,请谅解

  • 博客(39)
  • 收藏
  • 关注

原创 Synchronized和Lock的学习总结(一)

java锁的实现机制有两个Synchronized和Lock。 Synchronized是java的关键字,是java的内置特性,由JVM来实现。 Lock是java的类,是由纯java代码实现的,和JVM无关。 对二者比较可以从不同的角度: 底层实现:Synchronized和Lock都是基于Lock-free队列,JVM实现更加精细,用了两个队列(ContentionList和Entry

2016-10-30 22:47:18 556

原创 锁优化学习总结(一)

锁优化主要分为两个层面:代码层、JVM层。 代码层:减少锁持有时间(锁粗化)、减小锁粒度(ConcurrentHashMap)、锁分离(ReadWriteLock读写分离)。 JVM层:锁消除(Vector等安全容器,运行时不会出现资源竞争,将锁消除)、偏向锁、轻量级锁、自旋锁、重量级锁。 偏向锁、轻量级锁并不是取代重量级锁,而是使用CAS原语减少线程进入互斥的概率。 偏向锁:是为了避免某线

2016-10-23 14:27:43 1177

原创 拥塞控制机制

网络上通信的双方,当发送方发送的数据量过大,接收方无法及时全部的处理,造成网络拥塞。 拥塞控制的方法有,慢启动,拥塞避免,快重传,快恢复。 首先要明确两个概念,拥塞窗口,发送方发送数据的上限。慢启动阈值,慢启动阶段到拥塞避免阶段的标志量。 慢启动:tcp连接传送数据时,默认拥塞窗口一个最大报文分段大小mss,慢启动阈值为一个较大的值,可以为接收窗口的值 每次发送方收到接收方的一个ack之后,

2016-10-20 20:12:42 1410

原创 三次握手和四次挥手的流程

第一次握手:client设置syn=1,随机产生一个序列号seq=x,将数据包发送到server。client进入syn_send状态, 等待server确认。 第二次握手:server查看client发来的数据包syn=1,得知是client发来的连接请求。server设置syn=1 ACK=1 ack = x+1 seq = y,并将数据包发送到客户端。server进入syn_rcvd

2016-10-20 16:01:13 1110

原创 最小生成树算法:prim和kruskal

prim算法思想:原顶点集V,额外的顶点集合U默认空。最小生成树边集为空。 从V中选一个起始节点加入U中,然后找U中顶点到V-U顶点之间最小的边,如果加入这个边 不会在子图中产生回路。则将该边在V-U中的点加入到U中。并将该边从原来的无相连通图中 剔除,转而加入到最小生成树的边集。重复上述步骤。直到U等于原顶点集V。 kruskal算法思想:假设无向连通图的最小生成树的顶点集为V数量为n,边

2016-10-20 10:15:18 520

原创 Spring的加载过程

ClassPathXmlApplicationContext实现beanFactory接口,是一个具体的实例化工厂。服务器启动时,解析xml配置文件 将对应文件中每个bean的id作为key,属性封装到beandefinition作为value,封装到一个ConCurrentHashMap容器A中。 同时,还有一个ConCurrentHashMap容器B存储bean的实例化对象,默认是空。当有一

2016-10-10 14:54:16 6659

原创 关于foreach、Iterable、Iterator的一点理解

Iterator是一个迭代器接口,Iterable是一个与迭代器相关联的接口,接口里面定义了一个抽象方法iterator()。使用这个接口的iterator方法可以返回一个迭代器实例。实现了Iterable的接口,可以使用foreach()进行遍历。在编译器会对foreach进行 优化,转换成迭代器的hasNext()和next()的调用。之所以,设计Iterable这个接口,而不是直接实

2016-10-09 10:08:13 1919

原创 插入、选择、冒泡排序算法学习总结(一)

插入排序:默认数组第一个元素为有序,依次将后面的元素与其进行比较,先移动腾位置,再插入进去for(int i=1;i<a.length;i++){ int temp = a[i]; int j; for(j=i-1;j>=0&&temp<a[j];j--){ a[j+1] = a[j]; } a[j+1] = temp;}选择排序:每次选择最

2016-10-05 19:59:12 315

原创 对ThreadLocal的一点理解

ThreadLocal是一个工具类,叫做线程本地变量。主要作用协助线程同步,并不能解决资源彻底共享问题,它需要一定应用场 景。 线程同步的解决方案包括:互斥同步,使用synchronized原语层面上对共享资源加锁,使用ReenTrantLock的java工具类加 锁。 非阻塞同步,非阻塞同步算法+操作系统原子操作,典型代表java.util.concurrent.atomi

2016-10-05 13:47:54 562

原创 ORM相关框架工作原理学习总结(一)

引子:面向对象的开发思想是操作对象,对于关系型数据库数据的操作,需要编写繁琐的sql语句。这时有人会想:是否可以像操 作对象一样操作数据库库数据呢???ORM框架就这样诞生了 ORM:对象关系映射,题主接触过的是Hibernate和Mybatis这两种。主要思想:将数据库表和对象进行映射,依靠框架的API 通过对象的增删改查,达到映射数据库中表数据的增删改查。方便开发。 工作过程:1、根据数

2016-10-03 14:09:03 4875

原创 日期Date 、Calendar、SimpleDateFormat学习总结(一)

Date:由于设计方面的不合理以及扩展性较差。例如:getTime返回的long数据是从1900年1月1日距离现在的时间毫秒数 getYear返回的是从1900年距离现在的年数。而且无法实现国际化,无法针对时区显示对应的时间。因此被废弃。目前在用的 方法,long getTime(),setTime(long) Calendar:将Date取而代之,可以准确的获取年、月、日、时、分、秒。set

2016-09-30 21:28:52 527

转载 工厂模式

分类:简单工厂模式、工厂方法模式、抽象工厂模式 简单工厂模式包括:一个具体的工厂类,一个抽象的产品类,多个具体的产品类。 工厂方法模式:一个抽象的工厂类,多个具体的工厂类,一个抽象的产品类,多个具体的产品类。 抽象工厂模式:一个抽象的工厂类,多个具体的工厂类,多个抽象的产品类,多个具体的产品类。 简单工厂模式又被成为静态工厂方法模式,是它的一个特例。 工厂方法模式代码示例如下:public

2016-09-28 22:11:10 398

转载 JVM方法区内存回收

很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区进行垃圾收集的“性价比”一般比较低:在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收70%~95%的空间,而永久代的垃圾收集效率远低于此。永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类。先来说说方法区内常量池之中主要存放的两大类常

2016-09-19 20:26:09 2215 1

原创 JVM垃圾收集机制

问题汇总:什么地方需要垃圾收集?哪些对象是要被回收的?垃圾回收算法有哪些?垃圾回收过程?主流的垃圾收集器? 问题一、什么地方需要垃圾收集? 答:JVM的五个内存模型,其中虚拟机栈(堆栈)、程序计数器、本地方法栈,随着线程的销毁而销毁。垃圾收集的主要是堆 和方法区。 问题二、哪些是要被回收的? 答:哪些对象要被回收是垃圾收集算法要面对的问题。主要通过两种方法来判断,引用计数法,根搜索法 1

2016-09-19 15:09:09 536

原创 JAVA集合学习总结(二)

Set:所有实现这个接口的容器,例如,HashSet,TreeSet存放的数据元素都不重复,唯一。 HashSet:此容器的底层实现是HashMap,是将value设置为Object对象常量的容器。 TreeSet:此容器的底层实现是TreeMap,使用Comporator比较器进行比较,数据结构对应红黑树。 Map:所有实现这个接口的容器,例如,HashMap,HashTable,TreeM

2016-09-18 14:09:55 500 1

原创 Linux常用命令学习总结(三)

tar -cvf 目的文件 源文件:将源文件打包成.tar结尾的目的文件 tar -xvf 文件 :将.tar的文件提取出来 tar -cvfz 目的文件 源文件:将源文件压缩成.tar.gz结尾的文件 tar -xvfz 文件:将.tar.gzip的文件解压 tar -cvfj 目的文件 源文件:将源文件压缩成.tar.bz2结尾的文件 tar -xvfj 文件:将.tar.b

2016-09-07 21:14:36 293

原创 Linux常用命令学习总结(二)

shutdown -h now:立即关机 shutdown -r now:立即重启 exit:退出当前用户 init:0,1,2,3,4,5,6。 开机的几种状态,默认3,多用户多网络。5是图形化界面 |:管道。将前面的查询结果,作为下一个输入。 grep:查询文件含有的内容 usermod:改变用户名、访问权限 groupmod:改变组名等 adduser/deluser:添加、

2016-09-07 11:28:51 236

原创 Linux常用命令学习总结(一)

ls :列出该目录下的所有文件名 pwd:打印当前工作目录 cd :切换目录到指定目录 touch/rm:创建/删除文件 mkdir/rmdir:创建/删除目录 cat:读取文件内容 tac:逆序读取文件内容 head -n:顺序读取文件前n个字符 tail -n:逆序读取文件的n个字符 ed:在线编辑文件内容 gedit:图像化编辑文件内容 more/less:分页读取文件内

2016-09-05 20:07:18 306

原创 JAVA集合学习总结(一)

HashMap:内部有个Entry

2016-08-29 18:43:43 548

原创 JDBC工作原理学习总结

JDBC工作原理主要分3个步骤:1、加载数据库驱动。2、获取数据库连接。3、发送sql语句访问数据库 1、加载数据驱动:使用Class.forName方法,调用这个方法会加载数据库驱动com.mysql.jdbc.driver。 关于数据库驱动的理解,其实是sun公司给了一个Driver的接口,然后各个数据厂商根据自己的数据库 来实现这个接口。当要访问数据库的时候,需要引入这个第三方类库。类的

2016-08-18 20:40:39 11560

原创 关于spring框架中的IOC/DI和AOP,以及声明式事务管理的理解

IOC/DI:中文意思控制反转/依赖注入,针对以前编程,类中的属性都是写死的,直接在程序中给成员变量初始化。这样的编程,耦合度太高,代码的灵活性和扩展性太差。spring的处理方式是,在配置文件中,将类中的需要初始化的成员变量罗列出来。在应用程序启动的时候,针对配置文件的配置,初始化对象。这些对象默认是Singleton的,保存在容器中(map中)。当类初始化的时候,从容器中取出。这样不仅不仅可以节

2016-08-17 23:50:25 4382

原创 什么是动态代理?动态代理是如何实现的?动态代理有哪些应用?

动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等。可以给这个类创建一个代理,故名思议就是创建一个新的类,这个类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类。这个代理类并不是定义好的,是动态生成的。具有解耦意义,灵活,扩展性强。动态代理实现:首先必须定义一个接口,还要有一个InvocationHandler(将实现接口的类的对象传递给它)处理

2016-08-14 16:58:24 20532

原创 JAVA 重写和重载的原则

重写:两同、两小、一大。两同:方法名、参数列表相同。 两小:返回类型、抛出的异常小于等于父类。 一大:访问权限大于等于父类重载:方法名相同、参数列表不同,其他随便。

2016-08-12 11:28:30 375

原创 StringBuffer、ArrayList、HashMap的初始容量、已经如何扩充的总结(适用范围:JDK1.7)

StringBuffer:内部实现是一个字符数组。初始默认大小为16,当然也可以在其构造方法中进行设置。当新添加字符或字符串时,发现数组容量不够。这个时候就需要使用Array.copyOf()方法进行扩充。扩充的新的数组大小等于,(原始容量*2+2)和(数组实际字符个数+新增的字符长度)之间的较大值。ArrayList:内部实现是一个Object的数组。初始默认大小为0,当然也可以在其构造方法中进

2016-08-11 22:39:19 3706

原创 给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:" i am a little boy.

import java.util.Scanner;public class Test { public static void main(String[] args){ Scanner input = new Scanner(System.in); char[] str = input.nextLine().toCharArray(); For

2016-08-03 22:03:49 1397

原创 复制和克隆

复制:将某个对象的引用复制给另一个对象,两个对象还是指向同一个应用。克隆:分为浅复制、深复制。浅复制:将对象的数据进行复制,但是对象中包含的对象,仍旧只是复制对象的引用。深复制:不仅复制对象的基本类型属性,对于对象中包含的对象的数据也进行复制。要实现克隆,需要重写Object的访问权限protected的clone方法。既然Object是所有类的超类,为什么不能直接调用clone方法?这

2016-07-16 23:18:02 1070

转载 动态代理模式

import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Random;/** * 动态代理模式–jdk_api * Subject将要被代理的接口 * Proxy代理类 * newPr

2016-03-28 16:47:54 740

转载 观察者模式

import java.util.ArrayList;/** * 观察者模式 * 组成:被观察的接口、观察者接口、被观察具体对象、观察者具体对象 * 应用:GUI的事件监听 * @author fantasy * */public class ObserverTest { public static void main(String[] args) {

2016-03-28 15:16:47 189

转载 装饰者模式

package test; /** * 装饰者模式 * 典型应用:io * 优点:防止类爆炸式增长 * @author fantasy * */public class DecoratorTest { public static void main(String[] args) { Water water = new Water();

2016-03-28 10:59:56 228

转载 单例设计模式

package test; /** * 设计模式:单例设计模式 * 定义:一个类中只有一个实例,并提供全局访问点 * 特点: * 1.构造方法私有化 * 2.声明一个本类静态对象 * 3.给外部提供一个静态方法获取对象实例 * 类型:饿汉式、懒汉式 * 饿汉首选,懒汉有线程安全问题 * @author fantasy * */public cla

2016-03-26 20:33:29 363

转载 适配器模式

package test;/** * 功能:一个方法原本调用A接口的方法输出,当要调用B接口的方法输出,但不改动这个方法 * 解决方法:利用适配器,该适配器实现A接口,并将B的实现类传入适配器。在A接口的实现方法中,调用B实现类的方法 * @author fantasy * */ public class Test5 {/** * @param args */public

2016-03-26 17:41:55 349

转载 垃圾回收过程

对于年轻代,刚开始创建的对象都是放置在eden区的,而将年轻代分成3个部分,主要是为了生命周期短的对象尽量留在年轻代。当eden区申请不到空间的时候,进行minorGC,把存活的对象拷贝到survior。年老代主要存放生命周期比较长的对象,比如缓存对象。具体jvm内存回收过程描述如下:1、对象在Eden区完成内存分配;2、当Eden区满了,再创建对象,会因为申请不到空间,触发minorGC,进

2016-03-21 14:47:19 1903

原创 线程的相关知识、JAVA实现死锁、生产者消费者问题

线程有五种状态:创建、就绪、运行、阻塞、结束isAlive:判断线程是否活着。就绪、运行、阻塞是活着,创建、结束是死了getPriority、setPriority:设置优先级,明显的是,优先级高的,cpu分的时间片多一点sleep:Thread.sleep(毫秒) 让当前线程休眠多少毫秒join:合并两个线程,当执行到这个方法的时候,等当前线程执行完,再执行主线程。yield

2016-01-20 15:57:40 518

原创 Asp.net中 内置对象Response的Clear、Flush、End、Redirect和方法中的return解析

Clear:清除Response缓冲区中存在的内容,后面的继续执行;Flush:立即返回Response缓冲区中的内容,余下的在后面输出;End:结束后面所有的程序,只有End前面的代码会被执行;Redirect:重定向到新的页面,后面的代码不再执行;return:结束当前的方法执行;

2016-01-09 17:11:30 1194

原创 浏览器到服务器的请求响应过程时序图

2015-10-24 20:40:28 3783

原创 关于apache服务器的虚拟目录和虚拟主机的设置

虚拟目录:apache服务器默认有一个默认目录为htdocs,站点默认放在这个目录下。当在浏览器输入网址时,默认查找的是这个地址。如果想要更改默认访问目录,就需要设置虚拟目录。虚拟主机:每次访问站点的时候需要在ip地址后面加上站点名 例如:localhost/mysite。如何把它改成像www.sohu.com那样的,不用再后面多余的添加站点名。就需要设置虚拟主机。虚拟目录设置步骤

2015-10-24 19:15:48 1061

原创 关于jvm,加载的准备阶段一个考点

class Singleton{public static Singleton t = new Singleton();public static int count1;public static int count2 = 0;private Singleton(){count1++;count2++;}public static Singleton getInst

2015-10-24 10:42:07 706

原创 java继承中父类、子类的初始化过程

问题:类变量、成员变量、静态代码块、非静态代码块在父类和子类的初始化和执行状况代码如下:package ss;//父类class Test4{private int x;private static int y ;static{y = 4;System.out.println("父类的静态代码块:y="+y);}{x = 3;System.out

2015-10-20 15:26:35 3025

原创 关于java从编译成class文件到加载再到初始化过程解析

一、class文件组成magic魔数(标识是否为class文件)min_version次版本号major_version主版本号constant_pool_count常量数量contstant_pool_info常量信息access_flag类的访问标识符this_class

2015-10-18 18:56:43 2304

空空如也

空空如也

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

TA关注的人

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