自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (3)
  • 收藏
  • 关注

原创 windows 10 卸载 Microsoft 安全中心工具

windows 10 卸载 Microsoft 安全中心工具。

2023-09-21 14:21:07 413

转载 CAP原理详解

一、CAP原理介绍先简单介绍一下CAP原理是什么:C:Consistency即一致性,访问所有的节点得到的数据应该是一样的,注意,这里的一致性指的是强一致性,也就是数据更新完,访问任何节点看到的数据是完全一致,要和弱一致性,最终一致性区分开来。A:Availability即可用性,所有节点都保持高可用性,注意,这里的高可用性包括不能出现延迟,比如如果节点B由于等待数据同步而阻塞请求,那么节点B就不满足高可用性。也就是说,任何没有发生故障的服务必须在有限的时间内,返回合理的结果集。P Parti

2020-08-18 17:58:33 1318

原创 What‘s mean by numer & (-number) ?

What’s mean by numer & (-number) ?Let me assume that negative value is represented using two’s complement. In this case, -i can be calculated as (~i)+1 (flip bits, then add 1).For example, let me consider i = 44. Then, in binary,i = 0000 0

2020-07-28 15:59:33 198

转载 《大话处理器》Cache一致性协议之MESI

Cache一致性协议之MESI处理器上有一套完整的协议,来保证Cache一致性。比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使用它的变种。单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改),而在多核处理器中,多个核会共享一些数据,MESI协议就包含了描述共享的状态。在MESI协议中,每个Cache line有4个状态,可用2个bit表示

2020-07-02 16:13:05 202

原创 散列冲突处理:链地址法与开放地址法

试想一下,当你观望很久很久,终于看上一套房打算要买了,正准备下订金,人家告诉你,这房子已经被人买走了,你怎么办?对呀,再找别的房子呗!这其实就是一种处理冲突的方法开放定址法。开放定址法所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。公式为:fi(key) = (f(key)+di) MOD m (di=1,2,3,......,m-1)用开放定址法解决冲突的做法是:当冲突发生时,使用某种探测技术在散列表中形成一个探测序列.

2020-06-30 20:05:05 7593 1

原创 深入浅出ConcurrentHashMap1.8

前言HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行get操作有可能会引起死循环,导致CPU利用率接近100%。final HashMap<String, String> map = new HashMap<String, String>(2);for (int i = 0; i < 10000; i++) { new Thread(new Runnable() { @Override

2020-06-22 21:32:27 142

原创 JDK 源码中 HashMap 的 hash 方法原理是什么?

问题JDK 源码中 HashMap 的 hash 方法原理是什么?JDK 的 HashMap 中使用了一个 hash 方法来做 bit shifting,在注释中说明是为了防止一些实现比较差的hashCode() 方法,请问原理是什么?/** * Applies a supplemental hash function to a given hashCode, which * defends against poor quality hash functions. This is critica

2020-06-22 20:00:21 224

原创 深入理解HashMap(五): 关键源码逐行分析之put

上一篇我们讨论了HashMap的扩容操作, 提到扩容操作发生在table的初始化或者table大小超过threshold后,而这两个条件的触发基本上就发生在put操作中。本篇我们就来聊聊HashMap的put操作。本文的源码基于 jdk8 版本.put方法HashMap 实现了Map接口, 因此必须要实现put方法:public V put(K key, V value) { return putVal(hash(key), key, value, false, true); /*

2020-06-22 19:27:16 127

原创 深入理解HashMap(四): 关键源码逐行分析之resize扩容

上一篇我们说明了HashMap的构造函数, 谈到构造函数中并不会初始化table 变量, table 变量是在 resize过程中初始化的.本篇我们就来聊聊HashMap的扩容: resize本文的源码基于 jdk8 版本.resizeresize用于以下两种情况之一初始化table在table大小超过threshold之后进行扩容下面我们直接来对照源码分析:final Node<K,V>[] resize() { Node<K,V>[] oldTab =

2020-06-22 17:32:54 224 4

原创 深入理解HashMap(三): 关键源码逐行分析之构造函数

上一篇我们说明了HashMap的hash算法, 说到HashMap在构造时会自动将table设为2的整数次幂.本篇我们就来聊聊HashMap的构造函数.本文的源码基于 jdk8 版本.构造函数HashMap 共有四个构造函数public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { // 默认初始大小 16 s

2020-06-22 16:33:29 116

原创 深入理解HashMap(二): 关键源码逐行分析之hash算法

前面我们讨论了HashMap的结构, 接下来几篇我们从源码角度来看HashMap的实现细节.本篇我们就来聊聊HashMap的hash算法本文的源码基于 jdk8 版本.hash算法上一篇文章我们提到, 为了利用数组索引进行快速查找, 我们需要先将 key值映射成数组下标. 因为数组的下标是有限的集合, 所以我们可以先通过hash算法将key映射成整数, 再将整数映射成有限的数组下标:Object -> int -> index对于 Object -> int 部分, 使用的

2020-06-22 16:18:58 82

原创 深入理解HashMap(一): 从源头说起

HashMap我们都不陌生, 也是java面试几乎必问的考点, 本系列我们来深入思考有关HashMap的设计思想和实现细节.HashMap解决了什么问题?任何数据结构的产生总对应着要解决一个实际的问题, HashMap的产生要解决问题就是:如何有效的 存 取 一组 key-vaule 键值对key-value键值对是最常使用的数据形式, 如何有效地存取他们是众多语言都需要关注的问题. 注意这里有四个关键字:1,key-value键值对2,一组3,存4,取下面我们逐个来思考:如何表

2020-06-22 16:02:01 163 1

原创 Thread类源码解读(2)——线程状态及常用方法

上一篇我们讨论了线程的创建,本篇我们来聊一聊线程的状态转换以及常用的几个比较重要的方法。本篇依然是通过源码分析来了解这些知识。本文源码基于jdk1.8 。阅读完本文,你应当有能力回答以下常见面试题:1,线程有哪几种状态以及各种状态之间的转换?2,Thread.sleep() 与 Thread.currentThread().sleep() 有什么区别?3,Thread.sleep() 和 Object#wait() 有什么区别?4,Thread.sleep() 和 Thread.yield(

2020-06-22 12:05:43 563

原创 Thread类源码解读(1)——如何创建和启动线程

谈到线程同步与通信,线程本身的概念是绕不开的,而进程和线程的概念已经是老生常谈的话题了,一些基本的概念本文就不再讨论了,本篇仅仅致力于通过源码,了解线程的构造与启动,从而更深入的了解线程。本文源码基于jdk1.8 。阅读完本文,你应当有能力回答以下常见面试题:1,创建线程有哪几种方式?2,如何启动一个线程?3,线程的run方法和start方法有什么区别?Runnale接口我们看Thread类的定义知道,它实现了Runable接口public class Thread implements

2020-06-22 11:19:41 337

原创 Thread类源码解读(3)——线程中断interrupt

线程中断是一个很重要的概念,通常,取消一个任务的执行,最好的,同时也是最合理的方法,就是通过中断。本篇我们主要还是通过源码分析来看看中断的概念。本文的源码基于JDK1.8阅读完本文,你应当有能力回答以下常见面试题:1,如何判断一个线程的状态?2,如何正确终止一个线程?3,interrupt、interrupted 、isInterrupted 含义以及区别?Interrupt status & InterruptedExceptionjava线程的中断机制为我们提供了一个契机,使

2020-06-21 20:34:54 299

原创 设计模式-单例模式的七种写法

面试的时候,问到许多年轻的Java开发他所会的设计模式是什么,基本上都会提到单例模式,但是对单例模式也是一知半解,在Java开发中我们经常会运用单例模式,所以我们还是要更了解单例模式才对。定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式结构图:单例模式有多种写法各有利弊,现在我们来看看各种模式写法。饿汉模式public class Singleton { private static Singleton instance = new Singleton();

2020-06-19 18:41:52 114

原创 Java中的main()方法详解

在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这个例子说明Java类中main()方法的奥秘,程序的代码如下:/*** Java中的main()方法详解*/publ

2020-06-18 17:47:31 224

原创 你有没有想过: 为什么Java中String是不可变的?

有一种学得快的方法,就是一次不要学太多。public final class String implements Serializable, Comparable<String>, CharSequence { private final char[] value; // 用 private final 修饰的字符数组存储字符串 private int hash; private static final long serialVersionUID = -6849794

2020-06-18 17:28:52 96

原创 JVM stop the world

一、遇到的问题Total time for which application threads were stop 超级长时间,这行日志代表什么,以及为什么时间会这么长 ?二、日志的含义Total time for which application threads were stopp 2.81 seconds,Stopping threads took :2.6 seconds当GC发生时,每个线程只有进入了SafePoint才算是真正挂起,也就是真正的停顿,这个日志的含义是整个GC过程中S

2020-06-18 11:35:56 214

原创 Java对象创建、内存分配、访问定位、回收概述

对象创建与内存分配Java中创建对象并为其分配内存的过程如下:1、当执行到new指令时,虚拟机会先检查对应的类是否被加载过,如果没有被加载,那么执行类加载的过程2、加载完毕后就需要为对象分配内存空间3、初始化操作,比如将空间初始化为零值,调用构造函数4、虚拟机堆对象进行必要的设置,比如该对象是哪个类的实例、如何才能找到类的元数据信息,对象的GC分代年龄等信息。为对象分配内存根据堆内存的规整状态(堆内存是否规整又由垃圾收集器的算法规则决定)常用如下两种方式:指针碰撞:如果堆内存是整齐的

2020-06-18 10:35:16 168

原创 使用Arrays.sort对二维数组分别按行和列排序(Java)

按行排序:对二维数组行排序,直接调用Arrays.sort就行:private static int [][] sortRows(int[][] arr) {//行排序 for (int i = 0; i < arr.length; i++) { Arrays.sort(arr[i]); } return arr;}或者使用比较器创建内部类:Arrays.sort(arr, new Comparator<int[]>() { @Override

2020-06-17 14:36:32 1052 1

apache-maven-3.0.4-bin.zip

使用maven工程必备,apache-maven-3.0.4-bin.zip,自动下载JAR包

2012-09-29

JAVA扑克牌发牌程序

JAVA扑克牌发牌程序 斗地主 java源码 这里只有界面部分和发牌程序是学习java的好的入门程序,也是学习java游戏开发的要实例希望对大家有用处,

2011-12-01

ASSCLL编码表

适用于大家的ASCLL编码表,方便大家查找,很好用的

2011-11-24

空空如也

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

TA关注的人

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