自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux的安装教程 | 菜鸟教程

首先呢,我们先来了解一下什么是Linux,Linux是一个操作系统,它不同于Windows的操作系统,在于它是免费的,并且是开源的,比Windows更简单,Windows我们是全凭猜的,在很多企业中它们都选择使用Linux操作系统。 我们大家平时的电脑大都是Windows操作系统,大家觉得操作起来很方便,只用点鼠标就行了,而Linux它的任何操作都需要用指令来操作,刚开始时或许你会觉得Linux...

2018-08-28 20:44:37 155479 12

原创 软件测试的目的和原则

目的验证软件有没有问题原则以客户为中心,遵循软件测试的规范、流程、标准和要求。什么是需求需求就是满足用户期望或正式文档规定的条件和权限,包含用户要求和软件需求用户要求:就是甲方提出的需求软件需求:也可以叫功能需求,该需求会详细描述开发人员必须实现的软件功能。软件需求是测试人员进行测试工作的基本依据。我们做软件测试的是干什么的,就是找bug的,虽然经常说bug,但它到底是什么,这个...

2019-05-06 20:21:54 2009 2

原创 补充-Java内存模型

想一想为什么要有内存模型呢?众所周知,计算机在执行程序的时候,每一条指令都是在CPU中执行的,在指令执行的时候又需要用到数据,但计算机上的数据是存在计算机的物理内存(主存)上的,所以每次指令在CPU中执行的时候都需要先在主存上把数据取出来,刚开始的时候还可以,但是随着CPU的高速发展,CPU的执行速度越来越快,但内存的技术并没有太大提升,所以从内存中读取和写入数据的过程需要很漫长的时间,但是CP...

2019-05-06 19:39:22 306

原创 小项目----追踪器

功能可以按文件名搜索可以按文件类型搜索实现文件监听意义解决Windows下命令行搜索文件不方便问题提高全局搜索时的速度跨平台使用锻炼编码能力涉及的技术文件操作数据库多线程JDBC问题用单线程遍历电脑文件还是用多线程遍历?解决:如果用多线程遍历会复杂很多,会出现重复统计,就要考虑避免防止重复提交了。但如果是多个盘,可以分盘遍历,一个盘创建一个线程,各自遍历...

2019-04-13 21:56:56 541 1

原创 小项目---游戏公告

功能当某一玩家登陆进游戏时,服务器会对在线所有玩家发一条公告,告诉所有在线玩家该玩家上线了;当某一玩家退出游戏时,服务器也会发公告告诉所有在线玩家该玩家下线了;每一个玩家可以发公告,也可以和某一玩家进行私聊。涉及的技术Scoket编程、多线程实现的思路创建两个工程,客户端和服务器端服务器端的实现:准备ServerSocket对象,接收客户端连接,得到Socket对象,接收客户端发...

2019-04-01 20:46:18 384

原创 什么是Git和GitHub

相信大多数程序员都把自己的代码托管到GitHub上吧,之前我只知道GitHub是一个代码托管仓库,把自己写的代码传上去,它会替你保存,作为程序员小白的我,其实真的傻傻分不清Git和GitHub到底是什么,虽然我用GitHub托管代码有一段时间了,但是到目前为止还没有一颗小星星,尴尬,,但,没关系,我相信只要我坚持、不断提升早晚有一天会有人点亮我的小星星。直到前两天看了一篇文章,才搞懂什么是Git...

2019-04-01 10:43:52 693

原创 反射

在说反射之前,我们先来思考一个具有争议的问题:Java到底是不是纯面向对象语言?那如何判断呢?只要Java中的元素能够被类所描述、能够通过实例化获取到对象,就说这是面向对象的。因为Java中的8大基本数据类型是不能实例化对象的,比如:int a = 8;我们是不能通过a调用一个方法的,所以会有人说Java不是纯面向对象的语言。但其实Java就是一个纯面向对象的语言,因为基本类型它又有包装类...

2019-03-05 09:53:45 179

原创 Condition接口的await、signal机制

1. Condition中的await、signal与内建锁wait、notify的区别Object类提供的wait与notify方法是与对象监视器monitor配合完成线程的等待与通知机制,属于JVM底层实现。而Cobdition与Lock配合完成的等待通知机制属于java语言级别,具有更高的控制与扩展性。Condition独有特性:I.支持不响应中断,而Object不支持II.支...

2019-02-28 17:22:53 532

原创 ReentrantReadWriteLock----可重入读写锁

读写锁:允许同一时刻被多个读线程访问,但是在写线程访问时,所有的读线程与其他的写线程均会阻塞。写线程能够获取到锁的前提条件:没有任何读、写线程拿到锁。1. 写锁-WriteLock-独占锁1.1 写锁的获取 - 模板方法tryAcquire()源码:protected final boolean tryAcquire(int acquires) { /* ...

2019-02-28 13:27:29 258

原创 ReentrantLock----独占式重入锁的深入理解

ReentrantLock是重入锁重入:表示能够对共享资源重复加锁,即当前线程再次获取锁时不会被阻塞。1. 那重入锁是如何实现的呢?如果该同步状态不为0,表示此时同步状态已被线程获取。再判断持有同步状态的线程是否是当前线程,如果是,同步状态再次+1并返回true,表示持有线程重入同步块。释放过程:当且仅当同步状态减为0并且持有线程为当前线程时表示锁被正确释放。否则调用setState(...

2019-02-28 12:22:46 205

原创 lock体系

之前本来在写完多线程之后就写lock体系的,可以作以对比,但之后又写了其他知识的博客,一直拖到今天才写lock相关的知识,大家在看lock锁的时候,可以对比着看内建锁,对比对比lock锁和内建锁的优缺点。这是我那篇关于内建锁的博客链接:https://blog.csdn.net/huaijiu123/article/details/85242821lock在Java的util包下lock体系...

2019-02-25 13:41:40 346

原创 什么是进程?什么是线程

进程进程指的是一个程序的生命周期,也就是一段程序从开始执行到结束,这就是该程序的进程。线程一般一个程序中会有多个任务,一个任务就叫做一个线程。创建、撤销一个线程比创建、撤销一个进程的开销要少得多...

2019-02-23 16:03:01 1570

原创 TreeMap

TreeMap是一个可以排序的Map子类,它是按照key的内容排序的。import java.util.HashMap;import java.util.Map;import java.util.TreeMap;public class Test { public static void main(String[] args) { Map<Integer, ...

2019-02-17 17:30:56 171 1

原创 ConcurrentHashMap

为什么已经有了Hashtable还需要ConcurrentHashMap呢?因为Hashtable效率比较低,它的实现是在方法上加synchronized。也就是说导致了所有并发操作都要竞争同一把锁,一个线程在进行同步操作时,其他线程只能等待,大大降低了并发操作的效率。ConcurrentHashMap的内部结构:它是将桶的内部进行了分段处理。每个桶里还是以链表的形式存储数据。Concu...

2019-02-17 15:36:32 160

原创 Hashtable与HashMap的区别

2019-02-17 12:59:31 150

原创 Map接口

Map接口有四个常用子类:Hashtable、HashMap、TreeMap、ConcurrentHashMap。Map接口的定义:public interface Map<K, V>Map接口的常用方法:public V put(K key, V value)-----向Map中追加数据public V get(Object key)--------根据key值取得对应...

2019-02-17 12:51:26 160

原创 如何利用TreeSet实现数据的排序(Comparable、Comparator )

排序实际上针对的是对对象数组进行的排序处理,如果要对对象数组进行排序,对象所在的类一定要实现Comparable接口(可比较接口)并且覆写compareTo()方法,但如果这个类不是我们自己定义的,那就没办法比较了,所以这个方法很不灵活。例:Person.javapublic class Person implements Comparable<Person>{ priv...

2019-02-17 10:55:46 1006

原创 线程池

线程池在juc包下。线程池是用来实现多线程的,那已经有Runnable和Callable实现多线程了,为什么还要线程池呢?因为使用线程池有以下三个优点:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁带来的消耗(当一个线程跑完一个任务之后,不会被销毁,会再次给这个线程分配一个新任务)提高响应速度:当任务到达时,任务可以不需要等待线程创建就能立即执行(因为线程池中一直有空闲的线程在...

2019-02-16 19:22:38 158

原创 Java内存模型

1. 主内存与工作内存主内存:指的就是操作系统内存工作内存:指的是创建线程所使用的内存线程对变量的读写操作不是直接对主内存操作的,而是在工作内存操作的。线程、主内存、工作内存三者的交互关系就和下图一样:2. 内存间交互操作Java内存模型中定义了8种操作来完成一个变量从主存中拷贝到工作内存、从工作内存同步回主存的实现细节。JVM实现时必须保证以下这8种操作的每一种操作都是原子的、不可...

2019-02-15 16:17:03 179

原创 JVM的垃圾回收算法

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

2019-02-14 17:47:09 218

原创 JVM如何判断对象已“死”(可达性分析算法)

Java堆上存放着几乎所有对象实例,垃圾回收器在对堆进行垃圾回收前需要判断哪些对象还存活?哪些对象已经“死去”(不再被引用)?除了可达性分析算法外还有引用计数法。引用计数法例:A对象引用了B对象,给B对象的计数器+1C对象也引用了B对象,给B对象的计数器再+1当引用失效时,计数器-1任何时刻计数器为0的对象就是不能再被使用的,即对象已“死”,才可以被回收。这就是引用计数法虽然引用...

2019-02-14 14:38:31 999

原创 HashMap源码剖析

HashMap是Map集合中的一个子类。那我们来想想它的底层到底是怎样实现的,比如:它存储数据是以链表存储还是数组存储?它的容量是多大?如果是数组存储,会不会扩容?什么时候扩容?这些问题都需要我们看源码,通过分析源码来得出结论。实际上HashMap可以看作是数组和链表结合组成的复合结构。说它是一个复合结构,那它到底是怎样复合的呢?我们可以先来看一幅图:看到这幅图,我决定大家心中都理解...

2019-02-13 16:53:21 92

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

1. 运行时数据区域线程私有区域:程序计数器、Java虚拟机栈、本地方法栈线程共享区域:Java堆、方法区、运行时常量池1.1 程序计数器( 线程私有)程序计数器指的是当前线程执行的代码的位置。程序计数器是为了方便指令跳转,记录下当前指令的位置,等执行完跳转指令后可以根据计数器里的地址回到跳转前的位置,继续往下执行。如果当前线程正在执行的是一个java方法,这个java方法正在执行一个...

2019-02-13 16:25:41 126

原创 什么是JVM

首先我们大家都知道java是跨平台的,那它为什么会跨平台呢?我们可以先来看看这幅图:Java源码编译成字节码,字节码才会运行,字节码运行时操作系统是没办法直接运行的,我们需要java运行环境(JRE),JRE(包含java运行时需要的一系列类库、JVM(虚拟机))将java的字节码解释成机器能识别的指令。JVM其实就是一个虚拟机,执行java编译好的字节码文件。区分JDK、JRE、JVM...

2019-02-13 10:43:32 386

原创 MySQL中对表的约束-----主键

用主键primary key来约束的字段里的数据不能重复,不能为空,一张表中最多只能有一个主键主键可以在创建表的时候指定,也可以在创建表完成后追加。例:创建表的时候直接在字段上指定主键create table tt1( id int unsigned primary key comment '学号不能为空', name varchar(20) not null);...

2019-02-02 19:40:17 423

原创 MySQL的数据类型都有哪些?它们分别用在什么的场景?

都知道C语言有int(4个字节)、char(1个字节)…这些类型可不是随便用的,,我们要考虑在某个场景用它是否合适,会不会越界。MySQL中也是一样的,也需要不同的场景需要不同的类型。下面这张表是MySQL的数据类型分类:下面我们来具体看看这些类型的具体应用和如何应用:数值类型tinyint类型从表中我们可以观察到tinyint类型的范围是-128~127我们先创建一个表:...

2019-01-31 22:41:25 15162 2

原创 MySQL中对表的操作(创建表、删除表、修改表)

创建表语法:create table table_name (field1 datatype,field2 datatype,field3 datatype) character set 字符集 collate 校验规则 engine 存储引擎;field 表示列名datatype 表示列的类型character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准...

2019-01-28 19:44:17 1767 1

原创 数据库中对库的一些操作(创建、修改、删除库)

创建一个库名为db1的数据库create database db1;当我们创建数据库没有指定字符集和校验规则时,系统使⽤默认字符集:utf8,校验规则是:utf8_ general_ ci如果想要明确指定字符集和校验规则,可以使用 charset和collate来指定。例1:创建一个使用utf8字符集的db2数据库create database db2 charset=utf8;...

2019-01-27 17:29:00 628

原创 MySQL数据库的一些基础知识

如何进入MySQL呢?在电脑搜索框里输入cmd,进入命令框之后,输入mysql -u root -p回车后再输入密码,如下图所示:这时就进入MySQL(数据库服务器)了,可以进行一系列操作了,例如:创建数据库、使用数据库、创建表等。创建数据库create database day1;使用数据库use day1;创建数据库表(在创建表之前,必须先使用某一个数据...

2019-01-24 20:45:53 180

原创 抽象类与接口的区别

2019-01-16 14:43:31 86

原创 Java中的代理模式

代理模式的特点:两个子类共同实现一个接口,其中一个子类负责真实业务实现,另一个子类完成辅助真实业务主题的操作。代理模式其实在我们生活中特别常见,特别是近些年来,大家都喜欢用国外的东西,但又特别贵,特别是女生的化妆品,它贵主要是因为有税和运费,所以大家都喜欢去找代购买化妆品,可以剩下好多钱。在这个模式中,真实的主题类是你自己,因为掏钱和使用的是你,而代购就是代理类,它只是负责辅助你完成买化妆品这...

2019-01-16 14:30:12 3742 2

原创 Java中的工厂设计模式

引出工厂模式package www.java.test;interface Computer{ void printComputer();}class MacbookPro implements Computer{ @Override public void printComputer() { System.out.println("This i...

2019-01-16 11:29:09 3613

原创 Java中的接口

在Java中有一个接口优先原则(在一个操作即可以使用抽象类又可以使用接口的时候,优先考虑使用接口)为什么会有接口优先原则呢?主要是因为抽象类局限于单继承原则,而接口可以实现多继承,子类实现接口使用implements关键字,子类可以同时实现多个父接口。什么是接口呢?接口就是一个抽象方法与全局常量的集合(JDK8之前)接口使用interface关键字定义例:定义一个简单的接口inter...

2019-01-16 09:54:57 249

原创 Java----剖析代码块

阿里巴巴笔试题

2019-01-15 18:04:41 175

原创 数据库-----事务管理

事务就是一组DML(数据操纵语言)语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。事务还规定不同的客户端看到的数据是不相同的。事务的一些基本操作开始一个事务 start transaction;创建一个保存点 savepoint 保存点名;回到保存点 rollback to 保存点名;例:我们先创建一个测试表: c...

2019-01-15 17:19:38 246

原创 Java-----模板设计模式

模板设计模式是基于抽象类的,它的核心是封装算法我们可以先用代码实现泡茶和冲咖啡的过程:泡茶的步骤:将水煮沸用沸水浸泡茶叶把茶倒进杯子加柠檬冲咖啡的步骤:5. 将水煮沸6. 用沸水冲泡咖啡7. 将咖啡倒进杯子8. 加糖和牛奶代码实现:package www.java.test;class Coffe{ //咖啡的冲泡方法 void prepareRe...

2019-01-14 21:42:01 193

原创 Java----抽象类

什么是抽象类?抽象类只是在普通类的基础上扩充了一些抽象方法而已。用abstract来定义。抽象方法:指的是只声明而为实现的方法(没有方法体)。也是用abstract来定义。为什么会存在抽象类呢?那是因为继承不能强制让子类覆写父类的所有方法,而抽象类可以。例:package www.java.test;abstract class Person{ private String...

2019-01-14 20:31:05 125

原创 面向对象的三大特性

Java是面向对象编程封装性:将客观事物封装成抽象的类,每个类都有自己的属性与方法,并且类可以让自己的数据与方法只让可信的类或对象操作,对不可信的进行信息隐藏。内部操作对外部而言不可见(保护性)。继承性:可以使用现有类的所有功能,并且在无需重新编写原有类代码的情况下进行功能上的扩展。多态性:指一个类实例的相同方法在不同情形下有不同的表现形式。好处:多态机制使得具有不同内部结构的对象可以共...

2019-01-14 18:31:02 126 3

原创 启动3个线程,3个线程的名字分别是A,B,C,每个线程将自己的名称在屏幕上打印5遍,打印顺序的ABCABC.....

分析:这个题的思路和我的上一篇博客https://blog.csdn.net/huaijiu123/article/details/86370451这个题的思路是相同的,都是利用信号量来解决。不同的是:要将notify()换成notifyAll(),这是为什么呢?万一A打印完之后,你只唤醒了C而没唤醒B,这就会产生死锁,所以要唤醒所有线程。3个线程同时启动后,如果是C先进,这时flag...

2019-01-12 19:23:18 1248

原创 写两个线程,一个线程打印1~52,另一个线程打印A~Z,打印顺序是12A34B....5152Z

分析:其中一个线程负责打印数字,另一个线程负责打印字母,但有一个特点就是数字刚好是字母的2倍(字母26,数字52),数字一次打印2个,字母打印一个,并且字母打印线程一定是在数字打印线程之后才打印的。如何控制字母打印线程一定是在数字打印线程之后,并且数字和字母还是交替出现的?我们可以考虑用信号量来控制,假若说:当信号量为1的时候告诉打印数组线程执行,当数字是2的时候,让打印字母的线程执行,然后...

2019-01-12 18:46:46 8180

空空如也

空空如也

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

TA关注的人

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