自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

转载 线程间协作

一、线程间的协作1、等待与通知(wait和notify/notifyAll)是本地Object方法,并且为final方法,无法被重写。 wait:一个线程因其执行目标动作所需的保护条件未满足而被暂停的过程调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor(即锁)。会释放当前的锁,然后让出CPU,进入等待状态。obj是Java中任意一个类的...

2019-02-14 17:54:01 543 1

转载 Sychronized、Lock、Volatile、原子类

  同步的时候非同步也可以同时执行. 一、内置锁Synchronized:1、概念synchronized同步的不是一个代码块,而是一个对象。static的话是class对象。 一个加锁的原则是对不变性加锁:不变性条件中涉及的所有变量都需要由同一个锁来保护。 居有三大特性:有序性,原子性,可见性 不要使用双重锁定,因为JAVA内存模型允许所谓的“无序写入”。 线程对...

2019-02-14 17:53:29 469

原创 线程同步机制

  一、线程同步机制从广义上说,Java平台提供的线程同步机制包括锁、volatile关键字、final关键字、static关键字和一些相关的API,如Object.wait( )/.notify( )等 1、锁的概述和概念:a 线程安全问题的产生:多个线程并发访问共享变量、共享资源;解决办法:一个共享变量或者资源只能被一个线程访问,访问结束后其他线程才能访问(...

2019-02-14 17:52:46 5412

转载 多线程编程

一、线程的创建 1.创建Thread类或者其子类重写run方法,该run()方法是线程执行体。2.实现Runnable接口(更多使用)实现run方法。用new Thread(Runnable target).start()方法来启动。(Thread类实现了Runnable接口)3.通过实现callable接口4.使用线程池创建线程 创建线程方式的比较:继承方...

2019-02-14 17:52:11 1050

原创 上下文切换的活性故障

一、上下文切换1、概念:(这边解释的是线程的上下文切换,而不是进程的上下文切换)在某种程度上可以看成多个线程共享同一个处理器的产物。即多线程中,一个线程被暂停(剥夺)处理器的使用权,另外一个线程被选中开始或者继续运行的过程。解释:单处理器可以执行多线程,是因为多个线程被一个处理器以不同的时间处理(时间片轮转,极小时间使得人感受不到,以为多个任务一同进行)。比如两个线程AB,当A线程...

2019-02-14 17:51:43 303

转载 线程安全(三大特性)、生命周期以及优缺点

 一、线程安全一个对象是否安全取决于它是否被多个线程访问(访问时访问对象的方式)。要使对象线程安全,那么需要采用同步的机制来协同对对象可变状态的访问。(java这边采用synchronized,其他还有volatile类型的变量,显式锁以及原子变量) 当某个多线程访问同一个可变状态时候没有同步,则会出现错误,解决办法:1、不在线程之间共享该变量2、将该变量修改为不可变变量...

2019-02-14 17:51:17 3204

转载 0、概念(并发、高并发、并行、多线程)

 并行性(parallel):指在同一时刻,有多条指令在多个处理器上同时执行; 并发性(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。实质是一个物理CPU(也可以是多个物理CPU)在若干个程序之间多路复用,并发性是对有限物理资源强制行使 多用户共享以提高效率。并发也可以并行(多核) 多线程:多个线程并发执行的...

2019-02-14 17:50:27 329

原创 list

ArrayList, LinkedList, Vector, Stack是List的4个实现类:ArrayList 是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,适合查找更新元素,尾部插入删除有效,元素可以为NULL。但是随机插入、随机删除效率低。容量不足时,“新的容量”=“(原始容量x3)/2 + 1” LinkedList 是一个双向链表。它也可以被当作堆栈、队列或双...

2019-02-13 13:21:40 157

原创 set

 Set集合里的多个对象之间没有明显的顺序。Set继承自Collection接口,不能包含有重复元素。判断两个对象相同不是使用"=="运算符,而是根据equals方法。也就是说,我们在加入一个新元素的时候,如果这个新元素对象和Set中已有对象进行注意equals比较都返回false,则Set就会接受这个新元素对象,否则拒绝。因为Set的这个制约,在使用Set集合的时候,应该注意两点:1) 为S...

2019-02-13 13:21:15 240

原创 queue

队列可以让人们有效地在尾部添加一个元素, 在头部删除一个元素。有两个端头的队列, 即双端队列,可以让人们有效地在头部和尾部同时添加或删除元素。不支持在队列中间添加元素。在 Java SE 6中引人了 Deque 接口,并由 ArrayDeque 和LinkedList 类实现。这两个类都提供了双端队列,而且在必要时可以增加队列的长度。 1 队列:Queue接口Queue接口设计了一些可...

2019-02-13 13:20:51 7015 1

原创 map

  映射(map) 数据结构就是为此设计的。映射用来存放键 / 值对。如果提供了键, 就能够查找到值。Java 类库为映射提供了两个通用的实现:HashMap 和 TreeMap。这两个类都实现了 Map 接口。散列映射对键进行散列, 树映射用键的整体顺序对元素进行排序, 并将其组织成搜索树。散列或比较函数只能作用于键。与键关联的值不能进行散列或比较。应该选择散列映射还是树映射呢? 与...

2019-02-13 13:20:30 231

原创 JAR

在将应用程序进行打包时,使用者一定希望仅提供给其一个单独的文件,而不是一个含有大量类文件的目录,Java 归档(JAR) 文件就是为此目的而设计的。一个 JAR 文件既可以包含类文件,也可以包含诸如图像和声音这些其他类型的文件。此外, JAR 文件是压缩的,它使用大家熟悉的 ZIP 压缩格。 1 、创建 JAR 文件可以使用 jar 工具制作 JAR 文件(在默认的 JDK 安装中,位...

2019-02-13 13:19:40 143

原创 多线程

线程的使用方法 :1.创建Thread类或者其子类,重写run方法,该run()方法是线程执行体。2.创建一个Runnable类(更多使用)并重写该接口的run()方法,该run()方法同样是线程执行体。package com.binbin.thread; /** * 〈thread〉 * * @author binbinarvin * @create 2019-01-25 */ cl...

2019-02-13 13:19:14 123

转载 五种创建对象方式

1使用new关键字 这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。Employee emp1 = new Employee(); 2使用Class类的newInstance方法 我们也可以使用Class类的newInstance方法创建对象。这个newInstance方法调用无参的构造函数创建对象。 我们可...

2019-02-13 13:18:37 1609

原创 String不可变

String不可变字符串不变性 下面这张图展示了这段代码做了什么  String s = "abcd";  s = s.concat("ef"); 再以下面一段代码为例:1 String str="abc"; 2 System.out.println(str); 3 str=str+"de"; 4 System.out.println(str);   如果运行这段代码会...

2019-02-13 13:17:58 249

转载 内部类

为什么要使用内部类? 1.内部类的代码操作创建它的外围类的对象,可以认为内部类提供了某种进入其外围类的窗口。2.内部类提供了更好的封装,除了该外围类,其他类都不能访问。3.在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。4.创建内部类对象的时刻并不依赖于外围类对象的创建。5.内部类能访问外围类的私有成员这一点,C++中的嵌套类是没有这个特性的。...

2019-02-13 13:14:03 95

原创 时间格式化(SimpleDateFormat)

  使用 Date 类的默认无参构造方法创建出的对象就代表当前时间,我们可以直接输出 Date 对象显示当前的时间,显示的结果如下:public static void main(String[] args){ Date date = new Date(); System.out.println(date); // Mon Feb 11 21:58:30 CST 2019 } ...

2019-02-13 13:13:22 52001 4

原创 static关键字

static:是java中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法:用来修饰成员变量,静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。 用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于工具类;在静态方法中不...

2019-02-12 20:50:29 173

原创 final关键字

final:可以修饰类:则该类不能被继承,属性默认也是 final 的可以修饰方法:则该方法不能被重写(网上认为 final 比非 final 快,就是认为它是在编译的时候已经静态绑定了,不需要在运行时再动态绑定。这个可能以前的JVM上是正确的,但在现代的JVM上,这个可以认为没什么影响)可以修饰属性:则该类的属性不会进行隐式的初始化(只初始化一次,但可多次读取) ,也就是必须赋值fin...

2019-02-12 20:50:06 96

原创 多重选择 switch case

Java 中 switch case 语句用来判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。语法格式如下:switch(expression){    case value :       //语句       break; //可选    case value :       //语句       break; //可选    //你可以有任意数量的case语句    de...

2019-02-12 20:49:42 1076

原创 递归与尾递归

递归的弊端:速度慢; 无法预测运行期间内存的使用情况; 递归比循环更难理解。 在递归调用的过程当中系统为每一层的返回点、局部变量等开辟了栈来存储,因此递归次数过多容易造成栈溢出。 栈维护了每个函数调用的信息直到函数返回后才释放,这需要占用相当大的空间,尤其是在程序中使用了许多的递归调用的情况下。除此之外,因为有大量的信息需要保存和恢复,因此生成和销毁活跃记录(栈上的那块存储空间...

2019-02-12 20:49:20 163

原创 StringBuilder StringBuffer String

1、首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String  String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。  而StringBuilder和...

2019-02-12 20:48:52 180

原创 java异常

Java异常的分类和类结构图  我们根据Javac对异常的处理要求,将异常类分为2类。 1非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序中处理这些异常。所以如果愿意,我们可以编写代码处理(使用try...catch...finally)...

2019-02-12 20:47:13 102

转载 Java中的泛型

1.Java中的泛型是什么 ? 使用泛型的好处是什么?   泛型是在编译期间能发现类型的错误,防止非定义的类型出现。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 好处:1、泛型可以使代码重复利用 2、泛型类型安全,提供编译时检查 3、性能不错 2. Java的泛型是如何工作的 ? 什么是类型擦除 ?   泛型通过类型擦除进行工作的,编译器在编译...

2019-02-12 20:46:21 1810

原创 java8 新特性(8个)

 1、本地变量类型推断(Var)字面量定义局部变量private static void testVar() {    var javastack = "javastack"; //等于String javastack = "javastack";    System.out.println(javastack); }接收方法返回值定义局部变量private static vo...

2019-02-12 20:45:23 172

原创 quals(Object obj)和hashCode()

JDK对equals(Object obj)和hashCode()这两个方法的定义和规范:在Java中任何一个对象都具备equals(Object obj)和hashCode()这两个方法,因为他们是在Object类中定义的。 equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false。 hashCode()方法返回一个int数,在Obje...

2019-02-12 20:42:53 326

原创 C++的substr 和 Java的substring比较

 C++: stringvar.substr(start,[length]): 返回一个从指定位置开始的指定长度的子字符串。 如果 length  为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到 string 的最后。 JAVA: stringvar.substring(start,end): 将返回一个包含从 start 到最后(不包含 end  )的子字符串的字...

2019-02-12 20:41:50 255

转载 磁盘得结构与参数 && 串并联 &&总线&&校验码

磁盘有扇区和磁道,一般读取磁盘在磁道上面进行读取,他的存取时间 = 寻道时间 + 等待时间(平均等待+延迟)例题:若每个磁道分成11个物理块,每块有一个逻辑记录,R0-R10顺序存放磁道上,周期33ms,每个记录3ms,假设从R0开始,那么最长时间和最短时间为多少?最长:每个物理块时间 33/11 = 3ms 因为顺序最长,要按照R0处理完成并且到R1则需要33+3 ms,一共有11块 前...

2018-09-06 21:27:04 505

原创 主存分类

主存分随机存取寄存器(RAM)和只读存储器(ROM),一般RAM用于内存(断电时将丢失其存储内容),ROM用于bios之类(断电还存在)。ROM表示的是只读存储器,即:它只能读出信息,不能写入信息,计算机关闭电源后其内的信息仍旧保存,一般用它存储固定的系统软件和字库等。RAM表示的是读写存储器,可其中的任一存储单元进行读或写操作,计算机关闭电源后其内的信息将不在保存,再次开机需要重新装入,通常用来...

2018-09-05 21:11:06 3725

原创 层次化存储结构

由快到慢(由小到大):CPU(寄存器) -- CACHE -- 内存(主存) -- 外存(硬盘U盘等) 。Cache得解释:1.上面4部分中CPU和内存是必须得,cache不是必须,但是他的存在使得速度快了N倍,而且减少了成本。                       2.引入cache是性价比得选择,                       3.他的作用是提高CPU输入输出得...

2018-09-05 20:58:08 1197

原创 流水线

流水线就是利用空闲时提高各部件利用率和指令得平均执行速度。执行指令得一般过程:取指 -- 分析 -- 执行 。“流水线周期”:为各个执行时间中最长得一段时间,(比如取指2ns,分析4ns,执行1ns。那么周期为4ns)"流水线执行时间":1.理论(80%以上使用) (t1+t2+....+tn)+(n-1)*T(T为周期)    2.实践:(k+n-1)*T(分几段k为几)“吞吐率”:...

2018-09-05 20:45:33 267

转载 CISC和RISC

(1)指令系统:RISC设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来完成。因此,在RISC机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。而CISC计算机的指令系统比较丰富,有专用指令来完成特定的功能。因此,处理特殊任务效率较高。(2)存储器操作:RISC对存储器操作有限制,使控制简单化;而CISC...

2018-09-05 20:35:24 4389 2

原创 Flynn

Flynn根据指令流和数据流的不同组织方式,把计算机系统的结构分为以下四类:单指令流单数据流(SISD)  单指令流多数据流( SIMD) 多指令流单数据流(MISD) 多指令流多数据流(MISD)...

2018-09-05 20:31:07 705

原创 计算机结构(CPU)

                                                          CPU基本组成结构图CPU一般由运算器、控制器等部件所构成(这边忽略讲部内总线、寄存器组等部件)。其中运算器由ALU/AC/DR/PSW组成1.算术逻辑单元ALU:执行所有得算术运算2.AC累加寄存器:为ALU提供一个区存放运算过程中各种值3.DR数据缓冲存储...

2018-09-05 20:22:52 1399

原创 浮点数运算

        浮点数表示公式-->  N=M*R^e (其中M为尾数,R为基数,e为指数)。比如 119 = 1.19 * 10^2。        如果两个浮点数进行计算, 那么进行三步操作,1.对阶 2.尾数计算 3.结果格式化               比如:1000+119 = 1*10^3+1.19*10^2 =1*10^3 + 0.119*10^3 = (1+0.11...

2018-09-05 20:03:14 2761

原创 数据的转化与表示(二进制、八进制、十六进制、十进制)

       在计算机中我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。比如二进制是逢2进一位,十进制是逢10进一位。2进制、8进制、16进制转换十进制,只需要使用“按权展开法”既可。 ​​​​​比如:     (二进制转十进制)       10100.01 = 1*2^4+0*2^3+1*2^2+0*2^1+0*2^0+0*2^-1+1*2^-...

2018-09-05 19:52:22 4633

转载 命令模式

        命令模式是一个高内聚的行为型模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。...

2018-09-05 19:15:19 115

原创 数据的转化与表示(原码补码反码移码)

        在计算机中各种数值的表示形式是采用二进制计数值的机器数,数的符号用0和1表示,小数点则隐含不占位。       二进制数有无符号和有符号之分,无符号表示正数。二进制中没有符号位,但是对带符号数来说,二进制的最高位用0和1表示正负数,其余为则为值。二进制数根据小数点位置分为纯整数和纯小数。        带符号的二进制的运算采用原码、反码、补码等不同编码方式计算。(有专业...

2018-09-05 19:07:13 3618

转载 VI 操作

  vi简介 vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序,它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。 vi没有菜单,只有命令,且命令繁多。 Vi有...

2018-05-13 13:04:34 629

设计模式讲义

GoF 的 23 种 + “简单工厂模式” = 24 种简单的设计模式入门,有代码解析之类的。

2018-04-13

空空如也

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

TA关注的人

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