自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 Kotlin学习——初识Kotlin

作为一名java程序员对Kotlin这样的一门像java却比java简洁的语言是比较感兴趣的,也由于最近想学习Android开发,作为谷歌安卓官方开发语言,Kotlin学习一下还是可以的。网上好多人在纠结Kotlin值不值得学习,在我看来作为一名程序员多学习一点还是有必要的,即使Kotlin日渐式微,但是我觉得学习的本身比学习的结果更有意义。一、Hello World好像任何一门语言都是从...

2019-09-29 15:36:53 317

原创 JAVA序列化

序列化概念:将内存中保存的对象变为二进制流进行输出或保存在文本中(即将对象变为二进制流)要想让类支持序列化,必须实现Serializable接口(标识接口,只有实现了Serializable接口的类,才具有对象序列化的功能)具体实现序列化,需要使用io包中提供的两个处理类:    ObjectOutputStream:(序列化类)public ObjectOutputStre...

2019-01-10 23:49:29 274

原创 SQL注入攻击与PreparedStatement

这几天在学习JDBC,一开始用的是Statement,后来一位老师给我们讲课时用的是PreparedStatement,一开始只是觉得PreparedStatement方便了很多,不用反复拼接SQL语句,只需要用?占位就可以了。无聊时百度了一下这两个的区别,才发现PreparedStatement要比Statement强大很多,而且在程序中要使用PreparedStatement。先来说说为什...

2018-12-31 23:46:57 383

原创 java集合输出

java中集合的输出是通过迭代器进行输出,即Iterator接口迭代器就是为了遍历集合而产生的Iterator接口两个核心方法:    boolean hasNext():判断是否还有元素    E next():取得下一个元素一、集合的输出方法1、迭代输出(Iterator)——只能从前向后输出调用Collection集合子类的Iterator方法取得内置的迭代器,使用以...

2018-12-25 19:32:48 644

原创 java中ArrayList ,Vector ,LinkedList的区别

一、ArrayList与Vector 区别:        1.出现版本                ArrayList——JDK1.2             Vector ——JDK1.0 (出现在List,Collection接口之前)        2.初始化策略区别            Vector类在无参构造执行后将对象数组大小初始化为10            Ar...

2018-12-25 18:53:39 302

原创 java类集

一、类集java中类集实际上就是一种动态对象数组,在实际开发中,数组使用的几率并不高,因为数组本身有一个最大的缺陷:长度固定。从JDK1.2开始,Java为了解决这种数组长度问题,提供了动态的对象数组实现框架——Java类集框架。Java集合类框架实际上就是java针对于数据结构的一种实现。在java类集框架中,主要有以下几个接口:Collection接口、List接口、Set接口、Compa...

2018-12-25 18:28:52 262

原创 javaIO

在java中,IO是一种阻塞式IO(BIO),基于抽象类,将具体的IO操作放在子线程中进行。核心有五个类:File、InputStream、OutputStream、Reader、Writer 和一个接口:Serializable这其中InputStream、OutputStream、Reader、Writer 都是抽象类,要使用的话应该看具体对什么进行操作,比如说对文件操作,就要实例化一...

2018-12-12 16:12:30 248

原创 java线程池

一、什么是线程池当我们需要使用一个线程时,我们就去创建一个线程,但是当们需要使用很多线程并且这些线程的执行时间很短的时候,频繁创建线程会使系统效率大大降低。而线程池很好的解决了这个问题。线程池是一种多线程的处理模式,他可以使线程重复使用,当这个线程执行完一个任务时并不会销毁,而是执行下一个任务。二、线程池的优点    I.降低资源消耗        通过重复利用已创建的线程降低进程创...

2018-12-12 10:06:12 182

原创 java类加载器(ClassLoader)

1.类加载定义:    类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构2.类加载器定义:    实现类加载功能的代码模块JDK内置的三大类加载器    1.BootStrap(启动类加载器)        I.使用c++语言实现,是JVM自身的一...

2018-12-11 23:02:27 195

原创 java反射

一、什么是反射反射就是对对象的反向处理,根据对象倒推类的组成。反射的核心类是Class类,这个类专门描述其他类或接口的组成。我们刚开始接触Object类的时候,会发现Object类中有一个getClass()方法,这个方法有什么用,今天我们就来看看。getClass方法是获取一个对象的Class对象用的,Class对象由JVM在第一次加载类时产生,并且全局唯一。Class对象描述了一个类或...

2018-12-11 22:22:37 195

原创 java的可重入锁 ReentrantLock

可重入锁 ReentrantLock() 是 Lock体系中使用频率最高的,能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。内建锁隐式支持重入性,synchronized通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock还支持公平锁和非公平锁两种方式。一、重入性实现原理首先看一下重入性锁的特点I.线程获取锁时,如果已经获取锁的线程是当前线程则直...

2018-12-06 09:44:19 212

原创 java可中断式获取锁与超时等待获取锁

java的Lock体系相比synchronize具有一些更方便的特性,比如锁可以响应中断以及超时等待等特性,我们可以通过看源码来看看响应中断是如何实现的。一、可中断式获取锁可响应中断式锁调用的方法是lock.lockInterruptibly() public void lockInterruptibly() throws InterruptedException { ...

2018-11-30 11:08:05 3279

原创 java独占锁的获取与释放详解

一.独占锁的获取lock()方法是获取独占锁,获取失败就将当前线程加入同步队列,成功则线程执行。来看ReentrantLock源码:final void lock() { if (this.compareAndSetState(0, 1)) { this.setExclusiveOwnerThread(Thread.currentT...

2018-11-29 20:52:09 919

原创 java深入理解AQS

一、AQS简介在同步组件的实现中,AQS是核心部分,同步组件的实现者通过使用AQS提供的模板方法实现同步组件语义,AQS则实现了对同步状态的管理,以及对阻塞线程进行排队,等待通知等等一些底层的实现处理。也包括了独占锁的获取与释放,共享锁的获取与释放,以及超时获取锁,中断获取锁等特性的实现。比如说有关独占锁的一些模板方法:1. void acquire(int arg) : 独占式获取...

2018-11-29 19:47:22 263

原创 java自己实现一个lock锁

java中自己实现lock锁的方法就是定义一个类继承Lock接口,重写Lock接口中的抽象方法,在类中定义一个静态内部类继承AQS并重写AQS中的protected方法class NewBeeLock implements Lock{ private Sync sync = new Sync(); static class Sync extends AbstractQueue...

2018-11-28 23:38:03 1094

原创 java的lock体系

Lock体系JDK1.5之后增加了java.util.concurrent.locks,提供了与内建锁完全不同的实现多线程共享资源访问的机制。失去了内建锁隐式的加锁与解锁过程,增加了可中断的获取锁、超时获取锁以及共享锁等内建锁不具备的特性。Lock锁的标准使用形式Lock lock = new ReentrantLock();try{ lock.lock();}catch{}...

2018-11-28 23:16:38 310

原创 java内建锁的优化(偏向锁、轻量级锁)

JDK1.6之后对内建锁做了优化(新增偏向锁、轻量级锁)在同步的时候是获取对象的monitor,即获取到对象的锁。那么对象的锁怎么理解?无非就是类似对对象的一个标志,那么这个标志就是存放在Java对象的对象头。锁状态在对象头的mark word中 ,关于对象头可以看一下JVM——深入分析对象的内存布局无锁状态:0 01偏向锁:1 01轻量级锁 :00重量级锁(JDK1....

2018-11-28 16:32:50 441

转载 JVM——深入分析对象的内存布局

本文转自https://www.cnblogs.com/zhengbin/p/6490953.html 作者:郑州的文武JVM——深入分析对象的内存布局阅读目录概述 对象头(Header) 实例数据(Instance Data)  对齐填充(Padding) 估算对象大小 参考资料概述一个对象本身的内在结构需要一种描述方式,这个描述信息是以字节码的方法存储在方法区中...

2018-11-28 09:35:16 197

原创 Java的CAS(比较交换)

一、什么是CAS使用锁时,线程获取锁是一种悲观锁策略,而CAS操作(又称为无锁操作)是一种乐观锁策略,使用CAS(compare and swap)又叫做比较交换来鉴别线程是否出现冲突,出现冲突就重试当前操作直到没有冲突为止。CAS:Compare And Swap(比较交换机制)——乐观锁策略悲观锁(如JDK1.6之前的内建锁):假设每一次执行同步代码块均会产生冲突,所以当线程获取锁...

2018-11-28 09:19:03 903

转载 生产者消费者模式中条件判断是使用while而不是if

永远在循环(loop)里调用 wait 和 notify,不是在 If 语句现在你知道wait应该永远在被synchronized的背景下和那个被多线程共享的对象上调用,下一个一定要记住的问题就是,你应该永远在while循环,而不是if语句中调用wait。因为线程是在某些条件下等待的——在我们的例子里,即“如果缓冲区队列是满的话,那么生产者线程应该等待”,你可能直觉就会写一个if语句。但if语...

2018-11-23 10:24:49 358

原创 java生产者与消费者模型

生产者与消费者的问题建立一个商品类,写生产和消费方法,生产就是数量+1,消费就是数量-1,新建Producer类和Consume类都实现Runnable接口,并重写run方法,生产者线程调用商品类的生产方法,消费者线程调用商品消费方法,主类中新建生产者和消费者线程并启动。class Goods{ private String goodName; private int c...

2018-11-23 10:17:55 460

原创 java wait与notify方法

一、wait与notify1.wait()方法语义:使得当前线程立刻停止运行,处于等待状态(WAIT),并将当前线程置入锁对象的等待队列中,直到被通知(notify)或被中断为止。使用条件:wait方法只能在同步方法或同步代码块中使用,而且必须是内建锁。wait方法调用后立刻释放对象锁wait方法的重载1)public final void wait() throws Inte...

2018-11-22 16:32:12 21811 6

原创 Java线程同步

线程同步同步问题:每一个线程对象轮番抢占共享资源带来的问题.class myThread implements Runnable{ private int t = 100; @Override public void run() { while (t > 0) { try { Threa...

2018-11-22 11:24:37 964

原创 Java多线程实现

一、进程与线程1.概念进程:操作系统中一个程序的执行周期线程:进程中的一个任务。一个进程中可以包含多个线程2.进程和线程的区别Ⅰ.每个进程用于自己的一整套变量,进程是操作系统中资源分配的最小单位。线程依托于进程存在,多个线程共享进程的资源,线程是操作系统中任务调度的基本单位Ⅱ.启动、撤销一个进程的开销要比启动、撤销一个线程大的多(这里突出线程是轻量级的)Ⅲ.没有进程就没...

2018-11-22 08:57:58 180

原创 C语言中的数组越界

经常用C语言的都知道,C语言是不检查数组越界的问题的。先看这样一段程序int main() { int i; int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; for (i = 0; i <= 12; i++) { printf("哈哈\n"); arr[i] = 0; } return 0;}请问输出结果是什么?一眼看去虽...

2018-11-09 20:47:21 1238

原创 Linux——进程

进程基本概念课本概念:程序的一个执行实例,正在执行的程序等内核观点:担当分配系统资源(CPU时间,内存)的实体从理论角度看,是对正在运行的程序过程的抽象;从实现角度看,是一种数据结构,目的在于清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;...

2018-11-09 20:14:10 209

原创 Linux——进程优先级

进程优先级概念:cpu资源分配的先后顺序,就是指进程的优先级优先级高的进程有优先执行的权力。配置进程优先权对多任务环境的linux很有用,可以改善系统性能还可以把进程运行到指定的cpu上,这样一来,把不重要的进程安排到某个cpu,可以大大改善系统的整体性能 通过ps -l可以查看进程的优先级其中PRI (优先级) —— 值越小优先级越高NI (nice值)—— ...

2018-11-09 19:34:33 455

原创 Linux——进程状态

进程状态一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)R运行状态(running):并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行的队列里S睡眠状态(sleeping)-浅度睡眠:意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))D磁盘休眠状态(Disk sleep)-深度睡眠:有时候也叫不可中...

2018-11-09 18:32:41 193

原创 Java——Lambda表达式

一、Lambda表达式——函数式编程Lambda是JDK1.8推出的重要新特性。很多开发语言都开始支持函数式编程,其中最具备代表性的就是haskell。传统面向对象开发interface IMyInterface{ void print();}class myClass implements IMyInterface{ @Override public v...

2018-11-09 18:00:20 208

原创 Java——访问控制权限

在 java 中 提 供 有 四 种 访 问 控 制 权 限 :private<default<protected<public,这四种访问控制权限的定义如下:对于public永远都可以访问,所以对于封装性而言主要是private、default、protected权限。...

2018-11-09 17:17:39 155

原创 Java——注解(Annotation)

注解(Annotation)JDK提供的三个内置注解:@Override、@Deprecated、@SuppressWarnings1.准确覆写@Override检查当前类中的覆写方法与父类中定义的同名方法是否相同,如果有任何一个地方不同,编译报错2.过期处理@Deprecated如果现在你有一个程序类,从项目1.0版本到一直到99.0版本一直都在使用着,但是从100.0版本后...

2018-11-09 17:11:04 186

原创 Java——枚举

从JDK1.5开始有了枚举,java中枚举使用enum关键字定义,实际上枚举就是一种高级的多例设计模式enum Color{ RED,BLUE,GREEN;}public class Test { public static void main(String[] args) { System.out.println(Color.RED); }}...

2018-11-09 16:56:06 201

原创 Java——通配符、类型擦除

一、通配符 在程序类中追加了泛型的定义后,避免了ClassCastException的问题,但是又会产生新的情况:参数的统一问题。观察这样一个例子class Message<T> { private T message ; public T getMessage() { return message; } public vo...

2018-11-09 16:04:57 372

原创 Java——泛型

从JDK1.5以后引入了三大常用新特性:泛型、枚举(enum)、注解(Annotation)。其中在JDK1.5中泛型是一件非常重要的实现技术,它可以帮助我们解决程序的参数转换问题。一、泛型泛型问题的引出我们有这样一个场景,我需要给一个描述坐标的类提供一个参数,这个参数我们可以传入80,也可以传入东经80度,如何才能接收2种不同的类型呢?我们很容易想到使用Object来接收。pu...

2018-11-09 15:20:14 248

原创 Java——JDK1.5新特性-可变参数、foreach循环、静态导入

一、可变参数现在假设说有这样的要求:要求设计一个方法,用于计算任意参数的整数的相加结果。这个需求在早期只能通过数组的方式来实现。早期实现方法public class Test { public static void main(String[] args) { System.out.println(add(new int[]{1})); Sys...

2018-11-06 22:53:38 253

原创 Java——双链表

链表如果想要保存多个对象,首先想到的就是对象数组,如果要保存任意对象,可以用Object类型的数组,但是数组的长度固定,开辟小了不够用,开辟大了浪费内存,所以我们可以用链表来保存多个对象。链表有单链表和双链表,双链表优化了对前置节点的访问和随机访问。比如我们要在单链表中查一个数据,那么我们需要从头节点开始找,如果我们要找的位置恰好在链表最后,这样查找非常浪费时间。双链表可以从最后一个结点开...

2018-11-06 21:36:28 173

原创 Java学习——代理模式

代理模式特点:两个子类共同实现同一个接口,其中一个子类负责真实业务实现,另一个子类完成辅助真实业务主题的操作玩游戏——接口真实主题类——自己代理类——代练 买口红——接口真实主题类——自己代理类——代购一个简单的代理模式interface ISubject{ void buyLipstick();}class realSubject imple...

2018-11-01 18:39:58 169

原创 Java——异常与捕获

几乎所有的代码里面都会出现异常,为了保证程序在出现异常之后可以正常执行完毕,就需要进行异常处理。异常的继承类结构:所有的异常都是由Throwable继承而来。Error类:描述Java运行时内部错误与资源耗尽错误。这种内部错误一旦出现,除了告知用户并使程序安全终止之外,再无能为力。Exception类(程序出错)IOException:程序本身没问题,由于IO处理导致的程序...

2018-11-01 17:40:03 135

原创 学习本无底,前进莫徬徨

最近学习了很多编程知识,也愈发明白自己的不足。IT这个行业需要不断学习,从基础到拓展,新技术层出不穷,发展日新月异,只有不断充实自己才能站得住脚。给以后的4个月定个目标:1.坚持写博客,总结知识点2.掌握计算机网络原理和操作系统原理,能运行到实际中,能熟练得进行基于网络的编程。3.掌握数据结构基本知识,能使用c语言及java语言实现4.能使用java完成中小型项目开发业...

2018-11-01 15:13:46 496

原创 Java学习——单例模式

单例模式特点:一个类只允许产生一个实例化对象一个普通的类我们可以new出多个实例化对象,如何才能限制对象的个数呢?产生对象的本质是我们调用了类的构造方法,如果我们无法调用构造方法不就不会产生实例化对象了吗?最容易想到的就是将类的构造方法私有化。一旦构造方法被私有化了,表示外部无法调用构造即外部不能够产生新的实例化对象。此时的类是一个相对而言封闭的状态。但是我们还需要一个实例化对象啊,那...

2018-10-31 15:58:03 143

空空如也

空空如也

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

TA关注的人

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