自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张伯毅的专栏

知者不惑,仁者不忧,勇者不惧.

  • 博客(27)
  • 资源 (13)
  • 收藏
  • 关注

原创 JAVA : ReentrantReadWritelock

ReentrantReadWriteLock采用读写分 离的策略,允许多个线程可以同时获取读锁 。架构图读写锁的内部维护了 一个 ReadLock 和一个 WriteLock,它们依赖 Sync 实现具体功能 。 而Sync继承自AQS,并且也提供了公平和非公平的实现。 下面只介绍非公平的读写锁实 现。我们知道 AQS 中只维护了 一 个 state 状态,而 Ree...

2019-06-27 18:09:18 1120

原创 Thread.sleep、Object.wait、LockSupport.park 区别图解

Thread.sleep、Object.wait、LockSupport.park 区别如下图:参考:Java 并发编程之美https://blog.csdn.net/u013332124/article/details/84647915

2019-06-26 17:53:22 3730

原创 JAVA 可重入锁: ReentrantLock

概念ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性, synchronized通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock还支持公平锁和非公平锁两种方式。那么,要想完完全...

2019-06-26 17:17:10 1026

原创 Java CopyOnWriteArrayList 概述

CopyOnWriteArrayList是一个线程 安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的 ,也就是使用了写时复制策略。 在 CopyOnWriteArrayList 的类图中,每个 CopyOnWriteArrayList 对象里面有一个 array 数组对象用来存放具体元素, ReentrantLock 独占锁对 ...

2019-06-26 14:17:30 2313 1

原创 JDK 8 原子操作类 LongAdder

AtomicLong 通过 CAS 提供了非阻塞的原子性操作,相 比使用阻塞算法的 同步器来说它的性能己经很好了,但是 JDK 开发组并不满足于此 。 使用 AtomicLong 时, 在高并发下大量线程会同时去竞争更新 同→个原子变量,但是由于同时只有一个线程的 CAS 操作会成功,这就造成了大 量 线程竞争失败后,会通过无限循环不断进行自旋尝试CAS 的操作, 而这会白白浪费 CPU 资源。...

2019-06-26 11:21:21 1826

原创 ConcurrentHashMap BUG 死锁

BUG 代码:package com.zl.map.concurrent;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;public class ConcurrentHashMapBug { public static void main(String[] args) { ...

2019-06-25 18:29:02 4152

原创 在linux系统中查看 缓存行 [ cacheline ] 的大小

linux系统中缓存行 [ cacheline ] 默认值: 64byte为了解决计算机系统中主内存与 CPU 之间运行速度差问题,会在 CPU 与主内存之间 添加一级或者多级高速缓冲存储器( Cache)。这个 Cache 一般是被集成到 CPU 内部的, 所以也叫 CPU Cache,如图所示是两级 Cache 结构。在 Cache 内部是按行存储的,其中每一行...

2019-06-25 16:53:07 12597

原创 Java 多线程并发线程基础

进程&线程线程是进程中的一个实体,线程 本身是不会独立存在的 。进程是代码在数据集合上的 一 次运行活动 , 是系统进行资源分配 和调度的基本单位, 线程则是进程的一个执行路径, 一个进程中至少有一个线程,进程中 的多个线程共享进程的资源。操作系统在分配资源时是把资源分配给进程的, 但是 CPU 资源比较特殊, 它是被分 配到线程的 , 因为真正要占用 CPU 运行的是线程 ,...

2019-06-25 16:37:40 1060

原创 一张图理解JAVA 多线程创建

Java 中有三种线程创建方式,实现 Runnable接口的 run方法, 继承 Thread类 并重写 run 的方法, 使用 FutureTask方式。

2019-06-25 11:46:47 1010

原创 JAVA 队列: SynchronousQueue

SynchronousQueue 是一个不存储元素的阻塞队列。每一个 put 操作必须等待一个 take 操作,否则不能继续添加元素。SynchronousQueue 可以看成是一个传球手,负责把生产者线程处理的数据直接传递给消费者线程。队列本身并不存储任何元素,非常适合于传递性场景,比如在一个线程中使用的数据,传递给另外一个线程使用,SynchronousQueue 的吞吐量高于 Linke...

2019-06-24 17:54:20 1613

原创 Java 同步器

java.util.concurrent 包包含了几个能帮助人们管理相互合作的线程集的类见表 14-5。这 些机制具有为线程之间的共用集结点模式(common rendezvous patterns) 提供的“ 预置功能” ( canned functionality ) 0 如果有一个相互合作的线程集满足这些行为模式之一, 那么应该直接 重用合适的库类而不要试图提供手工的锁与条件的集合。...

2019-06-24 11:44:05 1140

原创 Java 注解

4 种标准元注解元注解的作用是负责注解其他注解。 Java5.0 定义了 4 个标准的 meta-annotation 类型,它们被用来提供对其它 annotation 类型作说明。@Target 修饰的对象范围@Target 说明了 Annotation 所修饰的对象范围: Annotation 可被用于 packages、types(类、接口、枚举、Annot...

2019-06-21 16:25:56 938

原创 Java 反射 (运行状态中知道类所有的属性和方法)

在 Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为 Java 语言的反射机制。编译时类型和运行时类型编译时的类型由声明对象时实用的类型来决定,运行时的类型由实际赋值给对象的类型决定 。Person p=new Student();...

2019-06-21 15:16:15 2772

原创 Java 异常分类

异常分类:Error 和 ExceptionErrorError 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。Exception(RuntimeException、CheckedException)Exception 又有两个分支,一个是运行时异...

2019-06-21 15:01:05 2256

原创 JDK1.8 ConcurrentHashMap 源码解析

概述ConcurrentHashMap 是 util.concurrent 包的重要成员。ConcurrentHashMap 的源代码会涉及到散列算法,链表数据结构和红黑树Java8 ConcurrentHashMap 源码真心不简单,最难的在于扩容,数据迁移操作不容易看懂。前面我画了几张图, 便于理解. 剩下的需要你自己静下新来,安心看源码.建议从 put 方法开...

2019-06-20 14:08:13 1084

原创 JDK1.8 HashMap和TreeMap区别,读懂这一篇就够了

刚刚被问到HashMap和TreeMap 有什么区别,想了想,就整理一下吧.1.数据结构HashMap: 数组+列表+红黑树TreeMap: 红黑树2. 因为数据结构,导致节点的实体类不一样HashMap: 两种 Node 和 TreeNode (支持链表)static class Node<K,V> implements Map.E...

2019-06-18 11:45:24 11903 3

原创 JDK1.8 HashMap 源码解析

HashMap 源码解析1.图解:2.源码为了方便 DEBUG , 我把 HashMap 的源码分为了三部分import java.io.IOException;import java.io.InvalidObjectException;import java.io.Serializable...

2019-06-17 16:30:52 1269

转载 生成 HashCode 一致的字符串

生成 HashCode 一致的字符串package com.zl.map;import java.math.BigDecimal;import java.util.Random;/** * “中间相遇法”是生日攻击的一种变形,它不比较Hash值,而是比较链中的中间变量。这种攻击主要适用于攻击具有分组链结构的Hash方案。 * 中间相遇攻击的基本原理为 ...

2019-06-17 11:51:14 2307

原创 Java 位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:A = 0011 1100B = 0000 1101-----------------A&b = 0000 1100A | B ...

2019-06-13 19:18:56 946

原创 服务器参考性能

参考机器服务配置,用于估算集群规模,具体情况,参考当前市场. --2019年06月戴尔R730服务器 2U双路. 一台 3 万.+CPU: 两颗 16 核内存: 24 个接口(单条最大 32G) 最大容量 768G硬盘: 8块硬盘 单块最大8T 共 64T网卡: 集成四口,千兆戴尔R740服务器 2U双路. 一台 5 万+CPU: 两...

2019-06-13 16:30:23 1052

原创 使用intellij idea 查看Java字节码

最近在研究 jvm ,需要查看字节码. 整理使用intellij idea 查看Java字节码 使用方式如下:内容参考:Program:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/javapArguments:-c -l $FileClass$Wor...

2019-06-13 09:58:36 3451 4

原创 JAVA 对象头解析

一个Java对象在JVM中是由一个对应角色的oop对象来描述的,比如instanceOopDesc用来描述普通实例对象,arrayOopDesc用来描述数组对象,而这些类型的oop对象均是继承自oopDesc。class oopDesc { friend class VMStructs; friend class JVMCIVMStructs; private: //...

2019-06-12 14:44:34 6096 2

原创 [JVM]了断局: 虚拟机字节码指令表速查

字节码 助记符 指令含义 0x00 nop None 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2...

2019-06-11 14:34:20 1064

原创 C 语言 与 Java 区别 梳理

数据类型c 语言( Linux x86_64)java 语言定义常量#define 预处理器const 关键字defind和 const 区别C存储类auto 存储类register 存储类static 存储类extern 存储类C判断C循环goto 语句C指针什么是指针?如何使用指针?C 中的 NULL 指针...

2019-06-10 18:34:46 1160

转载 项目中常用的19条MySQL优化

一、EXPLAIN做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式key_len列,索引长度rows列,扫描行数。该值是个预...

2019-06-10 16:37:28 932

原创 Java8 命令详解

Java 命令:用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件)其中选项包括: -d32 使用 32 位数据模型 (如果可用) -d64 使用 64 位数据模型 (如...

2019-06-05 16:39:36 1753

原创 CentOS 7 中安装 bcc-tools

第一步,升级内核。你可以运行下面的命令来操作:# 升级系统yum update -y# 安装 ELReporpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm# 安装新...

2019-06-04 15:03:26 4027 1

jdk-8u251-macosx/linux/windows 多版本下载

多版本JDK jdk-8u251-linux-x64.rpm jdk-8u251-linux-x64.tar.gz jdk-8u251-macosx-x64.dmg jdk-8u251-windows-i586.exe jdk-8u251-windows-x64.exe

2020-06-28

虚拟机上网环境设置.doc

虚拟机上网环境设置.doc

2020-06-12

《编译原理(第二版)》带书签.pdf

编译原理 第二版 带书签, 赵建华 译

2019-06-06

Flink基础教程.pdf

原版。高清,带页签。 作为新一代的开源流处理器,Flink是众多大数据处理框架中一颗冉冉升起的新星。它以同一种技术支持流处理和批处理,并能同时满足高吞吐、低延迟和容错的需求。本书由Flink项目核心成员执笔,系统阐释Flink的适用场景、设计理念、功能、用途和性能优势

2019-05-28

数据结构与算法分析 java语言描述(原书第3版)中文PDF+源码+课后习题源码

数据结构与算法分析 java语言描述(原书第3版)中文PDF+源码+课后习题源码

2019-05-08

深入理解计算机系统(原书第3版)PDF 计算机科学丛书 [美] 兰德尔 E.布莱恩特

前言   本书(简称CS:APP)的主要读者是计算机科学家、计算机工程师,以及那些想通过学习计算机系统的内在运作而能够写出更好程序的人。   我们的目的是解释所有计算机系统的本质概念,并向你展示这些概念是如何实实在在地影响应用程序的正确性、性能和实用性的。其他的系统类书籍都是从构建者的角度来写的,讲述如何实现硬件或系统软件,包括操作系统、编译器和网络接口。而本书是从程序员的角度来写的,讲述应用程序员如何能够利用系统知识来编写出更好的程序。当然,学习一个计算机系统应该做些什么,是学习如何构建一个计算机系统的很好的出发点,所以,对于希望继续学习系统软硬件实现的人来说,本书也是一本很有价值的介绍性读物。大多数系统书籍还倾向于重点关注系统的某一个方面,比如:硬件架构、操作系统、编译器或者网络。本书则以程序员的视角统一覆盖了上述所有方面的内容。   如果你研究和领会了这本书里的概念,你将开始成为极少数的“牛人”,这些“牛人”知道事情是如何运作的,也知道当事情出现故障时如何修复。你写的程序将能够更好地利用操作系统和系统软件提供的功能,对各种操作条件和运行时参数都能正确操作,运行起来更快,并能避免出现使程序容易受到网络攻击的缺陷。同时,你也要做好更深入探究的准备,研究像编译器、计算机体系结构、操作系统、嵌入式系统、网络互联和网络安全这样的高级题目。   读者应具备的背景知识   本书的重点是执行x86-64机器代码的系统。对英特尔及其竞争对手而言,x86-64是他们自1978年起,以8086微处理器为代表,不断进化的最新成果。按照英特尔微处理器产品线的命名规则,这类微处理器俗称为“x86”。随着半导体技术的演进,单芯片上集成了更多的晶体管,这些处理器的计算能力和内存容量有了很大的增长。在这个过程中,它们从处理16位字,发展到引入IA32处理器处理32位字,再到最近的x86-64处理64位字。   我们考虑的是这些机器如何在Linux操作系统上运行C语言程序。Linux是众多继承自最初由贝尔实验室开发的Unix的操作系统中的一种。这类操作系统的其他成员包括Solaris、FreeBSD和MacOS X。近年来,由于Posix和标准Unix规范的标准化努力,这些操作系统保持了高度兼容性。因此,本书内容几乎直接适用于这些“类Unix”操作系统。   文中包含大量已在Linux系统上编译和运行过的程序示例。我们假设你能访问一台这样的机器,并且能够登录,做一些诸如切换目录之类的简单操作。如果你的计算机运行的是Microsoft Windows系统,我们建议你选择安装一个虚拟机环境(例如VirtualBox或者VMWare),以便为一种操作系统(客户OS)编写的程序能在另一种系统(宿主OS)上运行。   我们还假设你对C和C++有一定的了解。如果你以前只有Java经验,那么你需要付出更多的努力来完成这种转换,不过我们也会帮助你。Java和C有相似的语法和控制语句。不过,有一些C语言的特性(特别是指针、显式的动态内存分配和格式化I/O)在Java中都是没有的。所幸的是,C是一个较小的语言,在Brian Kernighan和Dennis Ritchie经典的“K&R”文献中得到了清晰优美的描述\[61\]。无论你的编程背景如何,都应该考虑将K&R作为个人系统藏书的一部分。如果你只有使用解释性语言的经验,如Python、Ruby或Perl,那么在使用本书之前,需要花费一些时间来学习C。   本书的前几章揭示了C语言程序和它们相对应的机器语言程序之间的交互作用。机器语言示例都是用运行在x86-64处理器上的GNU GCC编译器生成的。我们不需要你以前有任何硬件、机器语言或是汇编语言编程的经验。   给C语言初学者  关于C编程语言的建议   为了帮助C语言编程背景薄弱(或全无背景)的读者,我们在书中加入了这样一些专门的注释来突出C中一些特别重要的特性。我们假设你熟悉C++或Java。

2019-03-08

Java虚拟机规范(Java SE 8版) 带书签

Java虚拟机规范(Java SE 8版) (Oracle官方发布,Java虚拟机技术创建人撰写,国内资深Java技术专家翻译,是深度了解Java虚拟机和

2018-10-26

Hadoop权威指南:大数据的存储与分析(第4版)

Hadoop权威指南:大数据的存储与分析(第4版) 出版社: 清华大学出版社 PDF版本

2018-10-17

HBase应用架构PDF版本

HBase应用架构 [美] 吉恩-马克·斯帕加里(Jean-Marc Spaggiari) 著,陈敏敏 夏锐 陈其生 译

2018-09-21

Thinking in UML(2 edition)

在网上下载的,有兴趣的可以看看。 ------------------------------------------------ 当你的才华还撑不起你的野心时,那你就应该静下心来学习;当你的能力还驾驭不了你的目标时,那就应该沉下心来历练、沉淀和积累!

2014-06-24

《谁说菜鸟不会数据分析》入门篇-简版电子书

整理的电子书,有喜欢的可以下载。 ------------------------------------------------------------ 当你的才华还撑不起你的野心时,那你就应该静下心来学习;当你的能力还驾驭不了你的目标时,那就应该沉下心来历练、沉淀和积累!

2014-06-24

[逻辑思维训练500题II].于雷.扫描版

整理的电子书,有喜欢的可以下载。 ------------------------------------------------------------ 当你的才华还撑不起你的野心时,那你就应该静下心来学习;当你的能力还驾驭不了你的目标时,那就应该沉下心来历练、沉淀和积累!

2014-06-24

空空如也

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

TA关注的人

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