随笔分类 - java
摘要:1. Java中的移位运算 有两个符号移动—— 符号左移:<< 符号右移:>> 这字面理解就是,带符号位的移动咯,左移很容易理解,空出来的低位补0就好,效果相当于乘以2 主要要区分的是——符号右移>> 和 无符号右移>>> 符号右移—— 保留符号位,然后右边数值位空出来的用符号的那个 值 来补 无符
阅读全文
摘要:在做剑指offer的时候,有一道替换空格的题,立刻就想到用这个split方法来做,但发现,这个方法会丢掉字符串最后的空格??? 百度后,知道原因,这里直接复制粘贴了: 在使用java中的split按照“\t”,拆分字符串的时候,发现如果最后的几个字段是空,只是用\t分割,是连着的\t的话,就不会被分
阅读全文
摘要:https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653192000&idx=1&sn=118cee6d1c67e7b8e4f762af3e61643e&chksm=8c990d9abbee848c739aeaf25893ae4382eca
阅读全文
摘要:五、可中断获取锁的实现(独占锁的特性之一) 我们知道lock相较于synchronized有一些更方便的特性,比如能响应中断以及超时等待等特性,现在我们依旧采用通过学习源码的方式来看看能够响应中断是怎么实现的。可响应中断式锁可调用方法lock.lockInterruptibly();而该方法其底层会
阅读全文
摘要:一、序言 Lock接口是juc包下一个非常好用的锁,其方便和强大的功能让他成为synchronized的一个很好的替代品。 我们常用的一个Lock的实现类(好像也是唯一一个只实现了Lock接口的类) 当你查看源码时你会惊讶的发现ReentrantLock并没有多少代码,另外有一个很明显的特点是:基本
阅读全文
摘要:之前关于Java线程的时候,都是通过实现Runnable接口或者是实现Callable接口,前者交给Thread去run,后者submit到一个ExecutorService去执行。 然后知道了还有个FutrureTask接口,而且好像很有用,在刚看完线程池的相关源码还有点记忆的情况下,就再顺便研究
阅读全文
摘要:我们知道,ExecutorService是一个抽象出线程池的一个接口,然后我们在使用线程池的时候,用的是Executors工具类中的一系列newCachedThreadPool() 等类似的方法,这些方法之间返回一个可以用的线程池。但其实这些方法都是在里面调用了一个类——ThreadPoolExec
阅读全文
摘要:Classloader.loadClass(String name)和Class.forName(String name)的区别 Java的类在jvm中的加载大致分为加载,链接或者叫link(里面包含初始化),然后这个Classloader.loadClass方法,得到的Class甚至还没走到lin
阅读全文
摘要:题目: 结果是: finally语句块和是:43 为什么呢?首先,这个字符串的相加,涉及变量,所以底层是通过StringBuilder来进行的,所以先进入test.add(9, 34)。 然后,要个道理要知道,这是来自《The Java Tutorials》文档中的一段描述Finally关键字的话:
阅读全文
摘要:https://mp.weixin.qq.com/s/F9WwcsFdCOwOeeDc0oc98w——《BIO,NIO,AIO 总结》总结和对比这三种的区别 https://www.jianshu.com/p/a4e03835921a——《跟闪电侠学Netty》开篇:Netty是什么,有讲到bio和
阅读全文
摘要:总体主要分为两个方面 ①比较的是值 一、基本数据类型与引用数据类型进行比较时,引用数据类型会进行拆箱(自动拆装箱需要在jdk1.5以上),然后与基本数据类型进行值的比较 举例: int i = 12; Integer j = new Integer(12); i == j 返回的是true 二、引用
阅读全文
摘要:一、HashTable hashTable是一个线程安全的容器,是线程安全版本的HashMap。但它的底层是和HashMap一样的,只是在方法上都加上了synchronized关键字。 这样子有什么后果呢: 类似于这样的方法,当线程1在执行if里面的判断的时候,线程1会获得table实例的所,其他线
阅读全文
摘要:类声明: AbstractList是个抽象类,RandomAccess是个给List用的标记接口,为了指明这个容器支持快速(一般是常量时间复杂度)的随机访问。 List接口 ArrayList的类变量 第一个是默认容量; 第二个是当用户指定ArrayList的容量为0的时候,返回的一个数组。 第三个
阅读全文
摘要:上一篇博客虽然题目叫内置锁的基本使用,但其实也是讲synchronized关键字的使用的。这篇博客是在看了许多大佬的博客记录后总结出的synchronized更底层的知识和原理。 一、synchronized的原理 同步块的monitor指令 我们先通过反编译下面的代码来看看Synchronized
阅读全文
摘要:一、关于常量池 字符串在Java中用的非常得多,Jvm为了减少内存开销和提高性能,使用字符串常量池来进行优化。 在jdk1.7之前(不包括1.7),Java的常量池是在方法区的地方,方法区是一个运行时JVM管理的内存区域,是一个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态常量等。
阅读全文
摘要:在看HashMap源码的时候,涉及到红黑树,这个数据结构早已听闻大名,而且在学校的教材中没有讲这个数据结构,所以花了点时间去学习和理解这个数据结构。(比我想象中的复杂的多……) Red-Black Tree的简介 首先这是个二叉查找树,它属于但又不严格属于平衡二叉树(AVL),因为它没有像平衡二叉树
阅读全文
摘要:一、HashMap的原理 所谓Map,就是关联数组,存的是键值对——key&value。 实现一个简单的Map,你也许会直接用两个LIst,一个存key,一个存value。然后做查询或者get的时候,就遍历key的list,然后返回相应的value。 这样时间复杂度显然就是线性的,但这在map中已经
阅读全文
摘要:我的小记录 首先语法上,搞清除,Java有个Cloneable接口,但这个接口是没有定义方法的。 那实现了这个接口有什么用呢? 再看Object类中,有个clone()方法,这个方法提供一个浅复制的功能,如果你的类不实现Cloneable接口,然后你的类的instance调用clone()的话,就会
阅读全文
摘要:在阅读Thinking in Java的Containers in depth一章中的Holding references时,提到了一个工具包java.lang.ref,说这是个为Java垃圾回收提供了很大的灵活性的包。 并引出了抽象类Reference还有它的三个子类,书上看了好几次都一脸懵逼……
阅读全文
摘要:RTTI 是Runtime type information的缩写,可以让你在程序运行的时候,发现和使用类的类型信息。 在有了泛型的容器中拿元素出来,就是一个RTTI最基本的体现。因为需要把容器中存的Object对象,转换成你泛型写的那个对象,这个转换的检查是发生在运行时的,所以是RTTI。 (Sh
阅读全文
浙公网安备 33010602011771号