自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 阿里java规范“不要在 foreach 循环里进行元素的 remove/add 操作,remove 元素请使用 Iterator 方式”

先来看一段代码,摘自阿里巴巴java开发规范:List<String> list = new ArrayList<>();list.add("1");list.add("2");for (String item: list) { if ("1".equals(item)) { list.remove(item); }}可以发现是可以执行的,但事实上循环只执行了一次便停止了(原因在下文讲述),但如果要删除"2",便会报如下错误:这个错误是指存在并发修改,通常在

2020-07-03 20:49:05 1966

转载 面向对象与面向过程的本质区别

https://blog.csdn.net/jerry11112/article/details/79027834

2019-11-28 10:15:14 133

原创 'gbk' codec can't decode byte 0x80 in position 205: illegal multib问题分析

在python3读取txt文件时,有时候会遇到上面的问题。原因:.txt文件是utf-8编码,在计算机中是按照utf-8编码成字节序列后存到硬盘上;在读取文件时,默认编码是gbk,所以写入到硬盘上的编码方式和从硬盘中读取的编码方式不匹配,所以报了以上错误,如下图所示:Unicode是字符集:为每一个字符分配一个唯一的ID(学名为码位/码点/Code Point)utf-8/utf-16/u...

2019-11-01 20:32:42 806

原创 Java中输出流flush()方法

在Java IO流操作中,会遇到如下这样一段代码:out.flush();out.close();现在来分析这段代码运行过程中得具体情境。flush():清空缓冲区。进行流的操作时,数据先被读到内存时,然后再将数据写到文件中,那么当你数据读完时,调用close()关闭读写流,这时就可能造成数据丢失。原因是:读入数据完成时不代表写入数据完成,一部分数据可能会留在缓冲区中,flush()方...

2019-10-17 11:37:33 677

转载 Java实体为什么要实现序列化接口!

所谓的Serializable,就是java提供的通用数据保存和读取的接口,至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。这样子,任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其它程序中。这样子极大的简化了类的设计。只要设计一个保存功能和一个读取功能就能解决上面说的所有问题。java的“对象...

2019-09-17 20:28:57 1200

原创 对二维数组排序

Arrays.sort()不能对二维数组直接排序。需要把二维数组看成是”每个元素是一维数组的一维数组“,传入外比较器自定义比较规则。import java.util.Arrays;import java.util.Comparator;public class RedBook { public static void main(String[] args) { i...

2019-09-04 08:58:50 214

转载 常用排序算法时间复杂度及相关性能

2019-09-03 16:58:37 139

原创 如何对Map进行排序

可以将Map传入ArrayList的构造器中,按照Map中的元素顺序构造一个泛型为Map.Entry<>的ArrayList,然后传入一个外比较器对ArrayList进行排序。例如:Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();List<Map.Entry<I...

2019-08-26 16:25:54 353

转载 HashMap的数据结构

一、JDK1.61.哈希的相关概念Hash 就是把任意长度的输入(又叫做预映射, pre-image),通过哈希算法,变换成固定长度的输出(通常是整型),该输出就是哈希值。这种转换是一种压缩映射,也就是说,散列值的空间通常远小于输入的空间。不同的输入可能会散列成相同的输出,从而不可能从散列值来唯一的确定输入值。简单的说,就是一种将任意长度的消息压缩到某一固定长度的息摘要函数。2.HashMa...

2019-08-05 12:02:50 214

转载 Map综述(二):彻头彻尾理解LinkedHashMap

HashMap 是 Java Collection Framework 的重要成员,也是Map族中我们最为常用的一种。不过遗憾的是,HashMap是无序的,也就是说,迭代HashMap所得到的元素顺序并不是它们最初放置到HashMap的顺序。HashMap的这一缺点往往会造成诸多不便,因为在有些场景中,我们确需要用到一个可以保持插入顺序的Map。庆幸的是,JDK为我们解决了这个问题,它为HashM...

2019-08-04 18:12:38 146

转载 守护进程

一、认识守护进程守护进程:其也称为精灵进程,是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理发生的事件。守护进程不受用户登录与注销的影响,它一直在运行着。Linux下的大多数服务器都是利用守护进程实现的。利用ps -axj | more 查看所有用户的作业。ps:表示对进程监测和控制。参数a:表示不仅列出当前用户的进程,也列出所有其它用户的进程。参数x:...

2019-07-30 09:44:42 650

原创 精度问题

问题:int类型是按整除结果算;double、BigDecimal等如果你不设置精度的话,那它默认就会以你的两个数中精度大的那个来设置一个精度!

2019-07-28 12:04:46 465

原创 快速排序最好、最坏、平均时间复杂度分析

我们来分析一下快速排序法的性能。快速排序的时间性能取决于快速排序递归的深度,可以用递归树来描述递归算法的执行情况。如图所示,它是{50,10,90,30, 70,40,80,60,20}在快速排序过程中的递归过程。由于我们的第一个关键字是50,正好是待排序的序列的中间值,因此递归树是平衡的,此时性能也比较好。在最优情况下,Partition每次都划分得很均匀,如果排序n个关键字,其递归树的深度就...

2019-07-25 21:13:28 37488 1

原创 进程间通信(IPC)的几种方式

管道通信或叫做匿名管道通信(pipeInputStream、pipeOutputStream):管道是指连接一个读进程和写进程来实现双方之间通信的一个共享文件,叫pipe文件。pipe文件只存在内存中,所以通信的数据量较小。匿名管道只能用于父子进程或者兄弟进程之间,并且传输的是无结构的字节流。管道具有互斥、同步的能力。一个进程对pipe文件读写操作,别的进程必须等待。若pipe文件数据超过分配的...

2019-07-25 15:04:36 311

转载 Linux echo命令

echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。此外,也可以直接在文件中写入要写的内容。echo命令常用的两个选项: -n 和 -e-n:表示输出之后不换行-e:表示对于转义字符按对应的方式进行处理。(若不加-e,那么在输出时转义字符会按照普通字符进行处理,并不会达到自己想要达到的目的。)示例:转义字符定义:用一些普通字符的组合来代替一些特殊字符,由于其组合改...

2019-07-24 16:15:15 156

原创 Linux wc命令

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数、并将统计结果显示输出。1.命令格式:wc [选项]文件…2.命令功能:统计指定文件中的字节数、字数、行数,并将统计结果显示输出。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。3.命令参数:-c 统计字节数。-l 统计行数。-m 统计字符数。这个标志不能与-c标志...

2019-07-24 16:04:26 100

原创 Linux查看文件100到150行

【一】cat 文件名 | tail -n +100 | head -n 50【二】cat 文件名 | head -n 150 | tail -n +100*注意两种方法的顺序分解:tail -n 100:显示最后100行tail -n +100:从100行开始显示,显示100行以后的head -n 100:显示前100行【三】用sed命令sed -n ‘100,150p’ 文件名...

2019-07-24 15:48:26 2153

原创 经典进程同步问题

生产者消费者问题:是同步互斥的综合。一个生产者进程和一个消费者进程共享一个初始为空、大小为n的缓冲区。缓冲区没满生产者才能放东西,缓冲区不空消费者才能取东西。设置三个信号量,mutex表示对缓冲区的互斥访问,初值为1。empty表示还没有被消息占据的缓冲区大小,初值为n。full表示已经被消息占据的缓冲区大小,初值为0。semaphore mutex = 1;//互斥信号量semaphore...

2019-07-22 21:14:04 260

原创 JVM堆区新生代为什么有两个Survivor?

JVM内存模型中,Heap区被分为新生代和老年代两个区域,新生代又分为Eden+Survivor1+Survivor2.新生代收集算法主要使用复制算法,老年代收集算法只要使用标记-整理算法。堆内存划分:为什么不是0个 Survivor 空间?这个问题等价于:为什么需要 Survivor 空间。我们看看如果没有 Survivor 空间的话,垃圾收集将会怎样进行:一遍新生代 gc 过后,不...

2019-07-13 22:24:27 519

原创 新生代为什么不使用“标记-整理算法”?

首先要明确的是“新生代使用的是复制算法”!从三个角度考虑这个问题:移动比复制开销更大:假设这个考虑的角度是对的,但是老年代中存活的对象要比新生代中要多得多,既然多的存活对象都可以使用这种开销较大的移动,那么少的对象也可以,所以排除这个角度。内存碎片问题:复制算法和标记-整理算法都是将存活的对象整理好了,所以也排除这个角度。清理内存空间:排除了以上两个角度,那么就只剩这一个考虑问题的角度了...

2019-07-13 21:57:41 5024 8

原创 MVCC

什么是MVCC?MVCC是一种多版本并发控制机制。MVCC是为了解决什么问题?大多数的MySQL事务型存储引擎,如InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制,而是都和MVCC来一起使用。大家都应该知道,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销。MVCC实现:MVCC是通过保存数据在某一时...

2019-07-10 16:18:32 117

原创 进程、线程

进程:就是一定功能的程序段在某个数据段上的一次运行活动,每个进程有一个PCB进程控制块,进程实体由程序段、数据段和PCB进程控制块组成。为什么要引入进程?如果没有进程概念的系统执行IO程序和计算程序,那么必须顺序执行,CPU,IO设备等资源会浪费。为IO程序和计算程序分别分配各自独立资源,分别建立进程,这样可以并发执行,就可以同时使用IO设备和CPU,提高系统吞吐量。进程是在操作系统中独立运...

2019-07-10 10:03:15 71

原创 管程、协程

管程:信号量机制的引入解决了进程同步的描述问题,但信号量的大量同步操作分散在各个进程中不便于管理,还有可能导致系统死锁。所以把所有进程对某一种临界资源的同步操作都集中起来,这里简记为A(对所有进程对另一种临界资源的同步操作都集中起来记作B)。管程相当于围墙,它把共享变量和对它操作的若干个过程(A,B等等)围了起来,所有的进程要访问临界资源时,都必须经过管程才能进入,而管程每次只允许一个进程进入管...

2019-07-10 09:34:01 931

原创 TCP三次握手建立连接、四次挥手连接释放

第一次握手:客户端向服务端发送连接请求报文段,TCP报文段首部同步位SYN=1,初始序号seq=x。客户端进程进入同步发送状态。第二次握手:服务端收到连接请求报文段后,向客户端发送确认报文段。把TCP报文段首部SYN位和ACK位置为1,初始序号seq=y,确认号ack=x+1。服务端进入同步接收状态。第三次握手:客户端接收到确认报文段后,向服务端发送ACK报文段,ACK位置为1,初...

2019-07-09 17:05:28 125

原创 HashMap与HashTable(ConcurrentHashMap)的区别

HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java5提供了ConcurrentHashMap,它是Hashtable的替代,比Hashtable的扩展性更好。由于Hashtable是线程安全的也是sync...

2019-07-08 21:58:53 84

原创 字符串三个类之间的区别

Java中的String、StringBuffer、StringBuilder三者的区别:这三个类之间的区别主要是在两个方面:运行速度和线程安全。1.首先说运行速度,或者说是执行速度,在这方面***运行速度快慢为:StringBuilder > StringBuffer > String***String最慢的原因:String为字符串常量,而StringBuilder和Stri...

2019-07-08 21:47:08 338

原创 Scanner

//Scanner类中的方法 //优点一: 可以获取键盘输入的字符串 //优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便; public static void ScannerTest(){ Scanner sc = new Scanner(System.in); System.out.println("ScannerTest, Pleas...

2019-07-08 14:24:38 2961

原创 我以前不知道的Session

之前只知道Session是服务器与客户端的一个会话,有默认过期时间,是服务端的技术,与之对应的是Cookie技术,是客户端技术。下面的几点是之前不知道的:1.Session是什么时候创建的?2.SessionId的组成?3.Session存储在哪里?回答上面的问题:1.在java中,Session是在调用HttpServletRequest实例的getSession()时创建的【不同语...

2019-07-08 11:06:58 105

原创 方法引用

Java双冒号运算就是Java中的[方法引用][方法引用]的格式是: 类名::方法名一般是用作Lambda表达式。形如ClassName::methodName或者ObjectName::methodName的表达式,我们把它叫做方法引用(Method Reference)。例如:1.表达式:person -> person.getName();可以替换成:Person::g...

2019-07-07 09:52:53 111

原创 Comparable和Comparator区别

一、Comparable简介Comparable是排序接口。若一个类实现了Comparable接口,就意味着"该类支持排序"。实现了Comparable接口的类的对象的List或数组可以通过Collections.sort或Arrays.sort进行排序。Comparable定义Comparable接口仅仅只包括一个函数,它的定义如下:package java.lang;import j...

2019-07-06 15:55:33 304

原创 单例模式

定义:保证一个类只有一个实例,并且提供一个访问它的全局访问点。构造器私有化,提供静态方法getInstance()得到类的示例。七种写法:1.饿汉式public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){ } ...

2019-07-06 10:21:51 65

转载 Java只有值传递,不存在引用传递!

先来看一个作为程序员都熟悉的值传递的例子://定义了一个改变参数值的函数 public static void changeValue(int x) { x = x *2; } ... ... //调用该函数 int num = 5; System.out.println(num); changeValue(num); System.out.println(num);答案显...

2019-07-05 15:05:56 128

空空如也

空空如也

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

TA关注的人

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