![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习笔记
xujing_2017
这个作者很懒,什么都没留下…
展开
-
HashTable原理和底层实现
HashTable和HashMap两种集合非常相似,对于两者的区别,主要有以下几点:HashMap是非同步的,没有对读写等操作进行锁保护,所以是线程不安全的,在多线程场景下会出现数据不一致的问题。而HashTable是同步的,所有的读写等操作都进行了锁(synchronized)保护,在多线程环境下没有安全问题。但是锁保护也是有代价的,会对读写的效率产生较大影响。 HashMap结构中,是...原创 2019-02-27 10:55:42 · 526 阅读 · 0 评论 -
Java集合系列之HashMap底层实现原理
HashMap特点及原理分析特点HashMap是java中使用最为频繁的map类型,其读写效率较高,但是因为其是非同步的,即读写等操作都是没有锁保护的,所以在多线程场景下是不安全的,容易出现数据不一致的问题。在单线程场景下非常推荐使用。原理HashMap的整体结构 数据写入。以HashMap(String, String)为例,即对于每一个节点,其key值类型为St...原创 2019-02-26 18:03:00 · 593 阅读 · 0 评论 -
Java集合系列之LinkedList底层实现原理
Java中的LinkedList类实现了List接口和Deque接口,是一种链表类型的数据结构,支持高效的插入和删除操作,同时也实现了Deque接口,使得LinkedList类也具有队列的特性。LinkedList类的底层实现的数据结构是一个双端的链表。LinkedList类中有一个内部私有类Node,这个类就代表双端链表的节点Node。这个类有三个属性,分别是前驱节点,本节点的值,后继结点。...原创 2019-02-26 17:47:05 · 244 阅读 · 0 评论 -
java基础语法--static
static用法:1.static修饰变量: static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。2.static修饰方法: ...原创 2019-02-21 11:43:58 · 126 阅读 · 0 评论 -
Java集合系列之ArrayList底层实现原理
1. ArrayList是一个动态数组,实现了List<E>, RandomAccess, Cloneable, java.io.Serializable,并允许包括null在内的所有元素。1.1,实现了RandomAccess接口标识着其支持随机快速访问,实际上,我们查看RandomAccess源码可以看到,其实里面什么都没有定义.因为ArrayList底层是数组,那么...原创 2019-02-26 17:23:06 · 7368 阅读 · 0 评论 -
ConcurrentHashMap
线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程访...原创 2019-02-26 11:03:01 · 99 阅读 · 0 评论 -
SocketIO
1、WebSocket是什么?WebScoket是一种让客户端和服务器之间能进行双向实时通信的技术。它是HTML最新标准HTML5的一个协议规范,本质上是个基于TCP的协议,它通过HTTP/HTTPS协议发送一条特殊的请求进行握手后创建了一个TCP连接,此后浏览器/客户端和服务器之间便可以通过此连接来进行双向实时通信。2、为什么要用WebSocket?1)一直以来,HTTP协议是无状态...原创 2019-02-28 16:51:57 · 3024 阅读 · 0 评论 -
线程池
为什么要使用线程池避免频繁地创建和销毁线程,达到线程对象的重用。另外,使用线程池还可以根据项目灵活地控制并发的数目。常用的几种线程池newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。这种类型的线程池特点是:工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VA...原创 2019-02-28 15:07:24 · 162 阅读 · 0 评论 -
假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
https://blog.csdn.net/silyvin/article/details/79235111转载 2019-02-28 14:53:42 · 538 阅读 · 0 评论 -
多线程
在java中要想实现多线程,有两种手段,一种是继承Thread类,另外一种是实现Runable接口。实现Runnable接口比继承Thread类所具有的优势:1)适合多个相同的程序代码的线程去处理同一个资源2)可以避免java中的单继承的限制3)增加程序的健壮性,代码可以被多个线程共享,代码和数据独立线程多次调用start方法,引发的异常:一个线程对象只能调用一次start...原创 2019-02-28 14:44:11 · 130 阅读 · 0 评论 -
CopyOnWrite
copyonwrite机制和单词描述的一样,他的实现就是写时复制, 在往集合中添加数据的时候,先拷贝存储的数组,然后添加元素到拷贝好的数组中,然后用现在的数组去替换成员变量的数组(就是get等读取操作读取的数组)。这个机制和读写锁是一样的,但是比读写锁有改进的地方,那就是读取的时候可以写入的 ,这样省去了读写之间的竞争,看了这个过程,你也发现了问题,同时写入的时候怎么办呢,当然果断还是加锁。...原创 2019-02-27 18:42:43 · 98 阅读 · 0 评论 -
java基础语法--volatitle
volatile变量 Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。在访问vo...原创 2019-02-22 11:45:15 · 208 阅读 · 0 评论 -
java基础语法--transient关键字
1.transient关键字能实现什么当对象被序列化时(写入字节序列到目标文件)时,transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。2.transient修饰实例变量 让某些被修饰的成员属性变量不被序列化。(不被序列化是为了节省存储空间)3.transient修饰类变量类变...原创 2019-02-21 18:14:51 · 182 阅读 · 0 评论 -
java基础语法--final
final的用法:1.final修饰成员变量:1)类变量:必须要在静态初始化块中指定初始值或者声明该类变量时指定初始值,而且只能在这两个地方之一进行指定;2)实例变量:必要要在非静态初始化块,声明该实例变量或者在构造器中指定初始值,而且只能在这三个地方进行指定。2.final修饰局部变量当final修饰基本数据类型变量时,不能对基本数据类型变量重新赋值,因此基本数据类型变量不能...原创 2019-02-21 17:33:04 · 181 阅读 · 0 评论 -
Nginx隐藏响应头信息的Server信息和版本信息,隐藏tomcat版本号
https://gofinall.com/72.html 背景当使用nginx做为web服务器时,在头部信息会看到版本号相关的信息,在安全扫描的时候会扫出来,要求不能显示nginx版本,避免根据已知的版本的nginx的特有漏洞从漏洞信息中获取该版本的攻击方式并进行攻击。修改方法nginx版本:1.14.2隐藏nginx版本信息在nginx.conf的http里面加serv...转载 2019-01-21 17:23:46 · 9970 阅读 · 0 评论 -
MAC上安装redis及直接启动redis
1.MAC上可通过home brew安装redis,方便快捷,安装命令 brew install redis2.当安装好redis之后,运行redis-server命令,显示如图所示(redis-server命令加上‘&’号使redis以后台程序方式运行) ...原创 2019-01-17 10:08:51 · 1074 阅读 · 0 评论 -
@SuppressWarnings注解
今天看到小哥哥在我的代码里加了@SuppressWarnings("rawtypes")遂有些好奇(这个鬼东西是干吗用的啊),于是在网上问了一下度娘,娘说:1.SuppressWarnings来源? java.lang.SuppressWarnings是J2SE5.0中标准的Annotation之一。2.SuppressWarnings用来干什么? 用于抑制编译器产生警告信息。...原创 2018-03-27 16:57:22 · 79 阅读 · 0 评论 -
Java集合系列之HashSet的底层实现原理
1. HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。2. HashSet的实现:对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关Ha...原创 2019-02-27 11:12:54 · 1933 阅读 · 0 评论