背景 公司业务性能优化,使用java自带的Executors.newFixedThreadPool()方法生成线程池.但是其内部定义的LinkedBlockingQueue容量是Integer.MAX_VALUE.考虑到如果数据库中待处理数据量很大有可能会在短时间内往LinkedBlockingQueue中填充很多数据,导致内存溢出.于是看了一下线程池这块的源码,并在此记录. 类图 Executor是一个顶层接口,在它里面只声明了一个方法execute(Runnable),返回值为void,参数…
transient volatile native final Integer String Class &&Object newInstance Class.forName,ClassLoader.loadClass ClassLoader .getResources(), ClassLoader.getSystemResources() ClassLoader .getResources(), ClassLoader.getSystemResources() public Enumer…
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分期.美团点评等都在1.2--面的时候被问过无数次,都问吐了&_&,其他公司笔试的时候,但凡有Java的题,都有集合相关考点,尤其hash表--现在总结下. 2016-12-15 更新:Java 8 对 HashMap 的改进 2016-12-12 整理jdk 1.8之前的HashMap实现 2…
SpringBoot源码学习系列之异常处理自动配置 1.源码学习 先给个SpringBoot中的异常例子,假如访问一个错误链接,让其返回404页面 在浏览器访问: 而在其它的客户端软件,比如postman软件: 很显然,在浏览器里访问才会返回页面,而在Postman直接返回json数据了,所以基于此现象,可以跟一下Springboot异常自动配置的原理,本博客基于学习了尚硅谷课程之后,自己动手实践再做的笔录 SpringBoot的异常自动配置类是ErrorMvcAutoConfiguration…
目录 LockSupport概述 park与unpark相关方法 中断演示 blocker的作用 测试无blocker 测试带blocker JDK提供的demo 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并发包源码学习系列:CLH同步队列及同步资源获取与释放 Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别 Java并发包源码学习系列:ReentrantLock可重入独占锁详解 Java并发包源码…
2017-10-31 23:42:08 Object类:类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 或者说,每个类都直接或者间接继承了Object类. 常用方法: hashCode(),返回该对象的哈希码值.支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能.[可自动生成] 实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数.(这一般是通…
本章主要介绍Thrift的传输层功能的实现,传输的方式多种多样,可以采用压缩.分帧等,而这些功能的实现都是相互独立,和上一章介绍的协议类实现方式比较雷同,还是先看看这部分的类关系图,如下: 由上面的类关系图可以看出,这部分的功能是相当的强大,所以类比较多且关系错综复杂.但是如果理解清楚了这些类直接的关系就很容易掌握这部分的实现技术和这部分实现的功能.我们把这个类关系图分为三部分来看,第一部分看抽象基类TTransport类,它是所有传输类的基类,有很大一部分类直接从它继承实现它提供或者说定义的接…
TP图片上传类的理解 在做自己项目上传图片的时候一直都有用到TP的上传图片类,所以要进入源码探索一下. 文件目录:./THinkPHP/Library/Think/Upload.class.php namespace Think; //声明命名空间 class Upload //声明类名 /** * 默认上传配置 * @var array */private $config = array(    'mimes'        => array(), //允许上传的文件MiMe类型    'ma…
System.Object 基类 System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Object. 基类特性 正由于所有的类型都继承于System.Object.因此,所有的类型都具有下面这些特性: GetType()方法,获取对象的类型. Equals.ReferenceEquals和==,判断对象是否相等. ToString()方法,获取对象的字符串信息,默认返回对象带命名空间的全名.…
Hadoop源码学习笔记(1) ——找到Main函数及读一读Configure类 前面在第一季中,我们简单地研究了下Hadoop是什么,怎么用.在这开源的大牛作品的诱惑下,接下来我们要研究一下它是如何实现的. 提前申明,本人是一直搞.net的,对java略为生疏,所以在学习该作品时,会时不时插入对java的学习,到时也会摆一些上来,包括一下设计模式之类的.欢迎高手指正. 整个学习过程,我们主要通过eclipse来学习,之前已经讲过如何在eclipse中搭建调试环境,这里就不多述了. 在之前源码初…
概述  大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends.“JAVA设计模式”一书详细阐述了怎样用接口继承代替实现继承.这篇文章描述设计者为什么会这么作. Extends是有害的:也许对于Charles Manson这个级别的不是,但是足够糟糕的它应该在任何可能的时候被避开.“JAVA设计模式”一书花了很大的部分讨论用interface继承代替实现继承. 好的设计者在他的代码中,大部分用inte…
当我们去查看object.cs源代码文件的时候,会发现object基类提供了三种判断相等性的方法.弄清楚每种方法存在的原因,也就是具体解决了什么问题,对我们理解.net判断对象相等性的逻辑很有帮助,下面让我们分别来看看吧! 1.Virtual Object.Equals()方法 实际上.net中提供了几种比较相等性(equality)的方法,但是最基础的方法就数object类中定义的virtual Object.Equals()了.下面让我们以一个customer类来看看该方法的实际运作. st…
系列文章目录和关于我 一丶什么是SpringBoot自动装配 SpringBoot通过SPI的机制,在我们程序员引入一些starter之后,扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器,实现引入starter即可开启相关功能的操作,大大简化了程序员手动配置bean,即开即用. 二丶SpringBoot自动装配源码解析 1.源码解析入口 SpringApplication.run(启动类.class, args…
Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 最近做一个项目,想到以前所有的项目在用户注册与登录及所有涉及用户自身隐私的信息进行提交到后台时都没有进行加密处理,甚至直接以明文方式在网络上传输,同时直接以明文的方式存到数据库中.所以想到需要先进行加密处理之后再进行网络传输,最后将加密后的数据存到数据库中,这样也可以增强系统的安全性. 对于加密与解…
以Route门脸类为例,我们定义路由时使用的就是Route门脸类,例如我们在web.php中定义的路由 use Illuminate\Support\Facades\Route; Route::get('/', 'DashboardController@index'); Route::get('/login', 'LoginController@index')->name('login'); 我们可以使用PHPStorm自带的跳转功能,跳转到Route门脸类的定义处,如下图所示(Mac上的快捷键…
2017-02-10 by 安静的下雪天  http://www.cnblogs.com/quiet-snowy-day/p/6387321.html    本篇概要 Objects 与 Object 区别 Objects 各方法介绍与分析 equals    deepEquals   hashCode   hash toString   compare   requireNonNull   isNull   nonNull Objects 与 Object 区别 Object 是 Java 中…
2017-02-10 by 安静的下雪天  http://www.cnblogs.com/quiet-snowy-day/p/6387321.html    本篇概要 Objects 与 Object 区别 Objects 各方法介绍与分析 equals    deepEquals   hashCode   hash toString   compare   requireNonNull   isNull   nonNull Objects 与 Object 区别 Object 是 Java 中…
​深度解读 java 线程池设计思想及源码实现 转自 https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 我相信大家都看过很多的关于线程池的文章,基本上也是面试必问的,好像我写这篇文章其实是没有什么意义的,不过,我相信你也和我一样,看了很多文章还是一知半解,甚至可能看了很多瞎说的文章.希望大家看过这篇文章以后,就可以完全掌握…
接着上一篇文章今天我们来介绍下LockSupport和Java中线程的中断(interrupt). 其实除了LockSupport,Java之初就有Object对象的wait和notify方法可以实现线程的阻塞和唤醒.那么它们的区别 是什么呢? 主要的区别应该说是它们面向的对象不同.阻塞和唤醒是对于线程来说的,LockSupport的park/unpark更符合这个语义,以“线程”作为方法的参数, 语义更清晰,使用起来也更方便.而wait/notify的实现使得“线程”的阻塞/唤醒对线程本身来说…
一直以来,都是看到网上说“ StringBuilder是线程不安全的,但运行效率高:StringBuffer 是线程安全的,但运行效率低”,然后默默记住:一个是线程安全.一个线程不安全,但对内在原因并不了解.这两天终于下定决心看了下源代码,才深刻理解为啥一个线程安全.一个非线程安全. 一名话总结:java.lang.StringBuilder 与 java.lang.StringBuffer 同是继承于 java.lang.AbstractStringBuilder,具体在功能实现大多在 Abs…
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8046564.html 邮箱:moyi@moyibolg.com 日期:2017-12-15 1. String 介绍,常用方法源码分析 2. String 常量池分析 常用方法 equals trim replace concat split startsWith 和 endsWith substring toUpperCase() 和 toLo…
总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) 接口方法定义. ExecutorService 也是接口,在 Executor 接口的基础上添加了很多的接口方法,所以一般来说我们会使用这个接口. 然后再下来一层是 AbstractExecutorService,从名字我们就知道,这是抽象类,这里实现了非常有用的一些方法供子类直接使用,之后我们再细…
目录 Java小白的源码学习系列:HashMap 官方文档解读 基本数据结构 基本源码解读 基本成员变量 构造器 巧妙的tableSizeFor put方法 巧妙的hash方法 JDK1.8的putVal方法 JDK1.8的resize方法 初始化部分 数组搬移部分 Java小白的源码学习系列:HashMap 春节拜年取消,在家花了好多天时间啃一啃HashMap的源码,同样是找了很多很多的资料,有JDK1.7的,也有JDK1.8的,当然本文基于JDK1.8.将所学到的东西进行整理,希望回过头再看…
JDK1.8源码学习-Object 目录 一.方法简介 1.一个本地方法,主要作用是将本地方法注册到虚拟机中. private static native void registerNatives(); static { registerNatives(); } 2.获取类的字节码对象 public final native Class<?> getClass(); 3.返回当前对象的hash值 public native int hashCode(); 4.比较党当前对象的引用是否和要比较的…
目录 基本用法介绍 继承体系 构造方法 state状态表示 获取锁 void lock()方法 NonfairSync FairSync 公平与非公平策略的差异 void lockInterruptibly() boolean tryLock()方法 boolean tryLock(long timeout, TimeUnit unit) 释放锁 void unlock()方法 Condition实现生产者消费者 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueu…
目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writerShouldBlock() void lockInterruptibly() boolean tryLock() boolean tryLock(long timeout,TimeUnit unit) 写锁的释放 void unlock() 读锁的获取 void lock() boolean r…
目录 Condition接口 AQS条件变量的支持之ConditionObject内部类 回顾AQS中的Node void await() 添加到条件队列 Node addConditionWaiter() void unlinkCancelledWaiters() 完全释放独占锁 int fullyRelease(Node node) 等待进入阻塞队列 boolean isOnSyncQueue(Node node) boolean findNodeFromTail(Node node) vo…
目录 为什么要使用ConcurrentHashMap? ConcurrentHashMap的结构特点 Java8之前 Java8之后 基本常量 重要成员变量 构造方法 tableSizeFor put方法存值 putVal initTable treeifyBin tryPresize transfer get方法取值 get 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并发包源码学习系列:CLH同步队列及同步资源获取与…
目录 本篇要点 什么是阻塞队列 阻塞队列提供的方法 阻塞队列的七种实现 TransferQueue和BlockingQueue的区别 1.ArrayBlockingQueue 2.LinkedBlockingQueue 3.PriorityBlockingQueue 4.DelayQueue 5.SynchronousQueue 6.LinkedTransferQueue 7.LinkedBlockingDeque 阻塞队列的实现机制 put方法 take方法 参考阅读 系列传送门: Java并…
目录 ArrayBlockingQueue概述 类图结构及重要字段 构造器 出队和入队操作 入队enqueue 出队dequeue 阻塞式操作 E take() 阻塞式获取 void put(E e) 阻塞式插入 E poll(timeout, unit) 阻塞式超时获取 boolean offer(e, timeout, unit) 阻塞式超时插入 其他常规操作 boolean offer(E e) E poll() Boolean remove(Object o) 总结 参考阅读 系列传送门…