
java基础知识
文章平均质量分 84
world6
这个作者很懒,什么都没留下…
展开
-
==和equals的区别
这个问题看了许多人的回答,但感觉都不是很满意;==比较的是内存地址,equals比较的也是内存地址,因为equals()源代码里方法体也是用== 来比较的;但有特殊的例子,比如在string中,==号比较的是内存地址,但是equals比较的是值,因为string这个类比较特殊,JDK帮我们重写了string的equals方法,所以在string里equals比较的是值。并且equals这个原创 2016-08-19 15:56:38 · 522 阅读 · 0 评论 -
<二>深入理解Threadlocal 关于内存泄漏的思考
不知道经常使用 Threadlocal 的朋友有没有意识到内存泄漏这一点。什么是内存泄漏呢?对象已经没有在其它地方被使用了,但是垃圾回收器没办法移除它们,因为还在被引用着。我不用的对象,又不能被垃圾回收,就会造成内存泄漏。不了解垃圾回收的朋友看这篇文章:垃圾回收的细节简单的拿个图表示下:如果你了解垃圾回收机制,活着看过周志明老师的 深入理解java虚拟机 第二版, 你肯定 知道强,软,弱,虚。...原创 2018-01-22 11:16:20 · 1104 阅读 · 1 评论 -
<一>深入理解Threadlocal的实现原理
文章开头我想说,这是一篇面向不怎么懂 Threadlocal 的朋友的博客,所以有的人会觉得有点啰嗦,但不论您水平高低,相信耐着性子看完也一定会有收获。上次去深圳的一家大型的互联网金融公司面试,就被问到了 Threadlocal , 当时只是在代码里看到过用它来管理session。第一次看到的时候,当时觉得这么高深的东西还是以后去研究吧,结果就是面试官的一脸鄙视。。。花了一天时间好好看了一下源码...原创 2018-01-21 16:00:52 · 576 阅读 · 0 评论 -
Java垃圾回收的细节
大家都知道 java 的垃圾回收机制,java有自己的垃圾回收器来自动回收垃圾。本人对于垃圾回收机制以前也就知道java的垃圾回收器是自动回收垃圾的,有这么回事,知道有finalize和system这两个方法而已,别人都跟我说,你知道java虚拟机有垃圾回收这回事就可以了,你不用操心这个的,我也一直深信不疑,并感叹java 虚拟机真神奇!直到我对 java 的理解逐渐加深后,才发现并不是那么回原创 2016-08-01 15:54:30 · 834 阅读 · 0 评论 -
java类的加载过程和类加载器的分析
我们知道,我们写的java代码保存的格式是 .java, java文件被编译后会转换为字节码,字节码可以在任何平台通过java虚拟机来运行,这也是java能够跨平台的原因。那JVM是如何来让我们写的java文件运行的呢? 这个问题通常的问法好像是:类是如何被加载的。 记得第一次遇见这个问题的时候,同学给我的回答是:1.虚拟机会加载JDK里类的核心包2.虚拟机会加载JDK里原创 2016-07-27 08:41:52 · 3793 阅读 · 2 评论 -
为什么redis 是单线程的?
以前一直有个误区,以为:高性能服务器 一定是 多线程来实现的 原因很简单因为误区二导致的: 多线程 一定比 单线程 效率高。其实不然。在说这个事前希望大家都能对 CPU 、 内存 、 硬盘的速度都有了解了,这样可能理解得更深刻一点,不了解的朋友点:CPU到底比内存跟硬盘快多少redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本质就是 CP...原创 2018-02-26 21:38:17 · 13130 阅读 · 9 评论 -
如何控制线程的执行顺序
控制线程的执行顺序有两种办法,通常来说,最简单的就算用Thread类提供的API,使用join方法即可。其使用方法及原理:深入理解join方法的底层原理 还有一个方法就是使用:ExecutorService 这个类提供的方法,看伪码:static ExecutorService executorService = Executors.newSingleThreadExecutor();...原创 2018-03-07 20:53:39 · 1210 阅读 · 0 评论 -
volatile和synchronized 实现原理的差别
提到volatile 和 synchronized 的时候不得不提到的一个东西就是JMM(java Memory Model)java内存模型。因为在并发的过程中 经常要处理一些 可见性 、 原子性 、 有序性的问题。并发编程中的两个关键问题是: 线程之间是 如何通信的。这又分两种情况: 1、共享内存 ——— 隐式通信 volatile 2、 消息传递 ——— 显示通信...原创 2018-03-07 21:47:06 · 2148 阅读 · 0 评论 -
java socket 与 网络协议
本问是介绍 java socket 跟 网络协议的一些东西,因为分布式的情况下, 进程跟进程肯定是通信的嘛。 先从基础的地方开始写起。 这是博主直接写过 关于 两篇 关于 TCP / IP 的博客 TCP IP 里的网络请求 到底是什么样的? 聊聊TCP传输的滑动窗口协议的演进...原创 2018-03-16 17:57:50 · 450 阅读 · 0 评论 -
为什么会要序列化
对 java对象的传输 是通过网络的 。然后网络都是通过字节传输的 所以需要用序列化的方式 将java对象转化为 字节,然后网络那头的接受端,拿到收到的字节 再反序列化出来一个对象,用来保证 java的对象能够跨进程传输。总结了一下 序列化的几个要点: 1.在java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化 2.通过ObjectOutputSt...原创 2018-03-21 21:19:36 · 669 阅读 · 0 评论 -
深入理解 CAS 及 ABA问题
CAS,Compare And Swap,即比较并交换。CAS是Atomic 包的核心,更是整个J.U.C 包的 基石。 本文 将通过AtomicInteger这个类,来分析是如何通过CAS来保证 Atomic的原子性的。直接进入 AtomicInteger 这个类,可以看到AtomicInteger 中定义了一个变量value并且用 valatile来修饰的, 还有个静态...原创 2018-07-23 21:56:16 · 1569 阅读 · 0 评论 -
JUC之 底层核心AQS
AQS,AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等) AQS使用一个int类型的成员变量state来表示同步状态,当state>0时表示已经获取了锁,当state = 0时表示释放了锁。它提供了三个方法(getState()、...原创 2018-07-23 21:56:11 · 873 阅读 · 0 评论 -
ReentrantLock 的实现原理
AQS的功能可以分为独占和共享,ReentrantLock实现了独占功能。ReentrantLock实现了Lock接口,加锁和解锁都需要显式写出,注意一定要在适当时候unlock。 ReentrantLock对比synchronized和synchronized相比,ReentrantLock用起来会复杂一些。在基本的加锁和解锁上,两者是一样的,所以无特殊情况下,推荐使用sy...原创 2018-07-23 21:56:03 · 1374 阅读 · 0 评论 -
一次URL输入域名按下回车到底发生了什么?
1、 浏览器的url输入栏发起一个请求,浏览器首先会看自己缓存中有没有对应的ip地址,如果有的话就直接去访问;如果没有2、 浏览器会去查看本地的hosts文件,看看有没有和这个域名匹配的ip地址,如果有的话就直接用hosts文件的ip地址;3、 如果本地的hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器 ,本地DNS服务器会首先原创 2017-06-21 16:39:51 · 1011 阅读 · 0 评论 -
初遇单例模式之双重检测
为了让博客看起来不那么深入,我觉得可以让加入一点故事情节~ 锻炼一下以后写不动代码改写小说的能力~最近准备找工作,这不今天就有家喊我去面试的;我一大早的就赶到了公司;此处省略1万字跟面试官的客套话,直接进入正题;面试官:小胡,你知道哪些设计模式阿?我说:设计模式了解得不多,只知道单例模式跟工厂模式,装饰模式,适配器模式,享元模式,观察者模式;面试官:哟,知道得还挺多的啊,行,先原创 2017-06-01 20:44:09 · 397 阅读 · 0 评论 -
高效编程之HashMap的entryset和keyset比较
最近看了一点spring的源码,甚是苦涩;对spring稍微有了点整体的认识,但对很多细节的地方还是懵逼啊。。。太多不懂了的,只能慢慢去读,先把简单的不懂的解决;比如beanfactory通过扫描器拿到了注解标记的那些类,都是放到一个hashmap中,然后文件名就是key,文件就是value;首先都会有一个 "map".entryset的操作;再往下面走的,这个entryset方法我不原创 2017-04-11 14:32:21 · 4125 阅读 · 0 评论 -
为什么要重写hashcode和equals方法?
为什么要重写hashcode和equals方法?相信很多小伙伴被这个问题给困扰很久了,下面我就给大家详细说一下我的理解吧~因为默认的hequals方法是Object的方法,比较的是内存地址;而默认的hashcode方法返回的是对象的内存地址转换成的一个整数,实际上指的的也是内存,两个方法可以理解为比较的都是内存地址,这在实际开发的过程中在hashmap或者hashs原创 2016-08-05 11:42:02 · 11697 阅读 · 1 评论 -
TCP 三次握手与四次挥手 看了你必懂
最近在思考一个问题,当我们在浏览器中输入URL按下回车键后,他的详细流程是怎样的;以前刚用springMVC的弄懂了一个请求的流程,好几个月以为那就是我要的答案了,最近这段时间熟悉了好多东西,今天先写一篇三次握手与四次挥手来开个头;先看三次握手首先Client端发送连接请求报文,Server段接受连接后回复ACK报文(回一个包过去),并为这次连接分配资源。Clien原创 2017-04-21 15:38:04 · 443 阅读 · 0 评论 -
高效编程之hashmap你不看就会忘记的知识点
以前菜得不能看的时候看Java的招聘要求:Java基础扎实,熟悉常用集合类,多线程,IO,网络编程,经常会疑惑,集合类不就ArrayList,HashMap会用,熟悉下API不就好了么,知道得越多才会发觉不知道的还有好多!一入Java深似海的从下面的两张图可以看到,hashmap是由数组和链表组成的;数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间原创 2017-04-11 23:05:30 · 6298 阅读 · 4 评论 -
高效编程之首字符大小写转换!
众所周知,Spring最为最流行的框架,其源码写得非常棒!!! Spring注入一个类的时候,BeanFactory 收到的一个类名, 类名都是首字母大写的,但是注入使用的确是首字母小写,这就引发了思考,spring是怎么把首字母大写转小写的呢?办法有很多,比如截取字符串改了放回去之类的;这里介绍一个最高效的方法。 用的是字符编码相关的知识点。先上代码:pa原创 2017-04-10 11:45:20 · 1018 阅读 · 0 评论 -
代理模式之jdk动态代理
对代理模式还不懂的朋友可以先看看这篇静态代理模式:静态代理模式动态代理是指动态的生成代理类 真实对象和接口是已经存在了的1、动态代理和静态代理的角色是一样的;2、动态代理的代理类是动态生成的;动态代理分为两类,一类是基于几口的动态代理,一个是基于类的动态代理a) 基于接口的动态代理-----jdk动态代理b) 基于类的动态代理----cgli原创 2017-03-20 21:30:09 · 347 阅读 · 0 评论 -
代理模式之静态代理
静态代理对象的角色分析抽象角色------一般用接口或者抽象类来实现真实角色------被代理的角色代理角色------代理真实角色-----代理真实角色后,一般会做一些附属的操作。客户 -------使用代理角色来进行一些操作原创 2017-03-20 21:02:57 · 387 阅读 · 0 评论 -
JVM 的体系结构
java的内存空间分为:方法区,程序计数器,本地方法栈,虚拟机栈,堆;方法区:方法区是系统分配的一个内存逻辑区域,有运行时常量池、静态变量、类信息;注意:方法区里有个静态区,静态区专门存放静态变量和静态代码块。虚拟机栈:虚拟机栈就是我们常说的栈空间了; 栈空间里存放的是局部变量表,动态链接,操作数栈,以及是方法的出口;每个栈帧都会随着方法的开始和结束相应的出栈和入 栈;原创 2016-08-19 17:23:05 · 484 阅读 · 0 评论 -
Java 换行 \n 与 System.getProperty("line.separator");
在Java中 “ \n ” 就可以换行了;而 System.getProperty("line.separator"); 是什么意思呢? Linux跟Windows是有差别的;\n 在Linux上不确定 能不能运行;但Java是夸平台的,所以System.getProperty("line.separator"); 在Linux跟Windows 都可以运行;原创 2017-05-16 11:19:23 · 6247 阅读 · 0 评论 -
try,finally中都有return时程序的执行顺序
在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家各有各的说法,刚好今天有个朋友问了我这个问题,下面我就提供两段代码,详细解释一下~这是第一种情况:try代码块中包含return语句,finally代码块中不包含return语句;java代码如下:package Exception;public class原创 2016-07-25 21:14:13 · 1454 阅读 · 1 评论 -
Java内存模型分析
1、内存模型的相关概念在讲内存模型前,我们来谈谈硬件的效率与一致性的问题计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要原创 2017-05-31 16:51:15 · 756 阅读 · 0 评论 -
一次单例模式引发的深思
为了让博客看起来不那么深入,我觉得可以让加入一点故事情节~ 锻炼一下以后写不动代码改写小说的能力~最近准备找工作,这不今天就有家喊我去面试的;我一大早的就赶到了公司;此处省略1万字跟面试官的客套话,直接进入正题;面试官:小胡,你知道哪些设计模式阿?我说:设计模式了解得不多,只知道单例模式跟工厂模式,装饰模式,适配器模式,享元模式,观察者模式;面试官:哟,知道得还挺多的啊,行,先原创 2017-06-05 11:15:51 · 640 阅读 · 2 评论 -
volatile关键字解析
在给 volatile关键字解析 之前 希望看本文的朋友对Java内存模型有一定的了解;不了解的朋友可以先看看Java内存模型volatile关键字有什么用呢?1、保证了不同线程访问同一个变量时的可见性,也就是说A线程修改了一个变量的值,B线程C线程能马上就能看到这个变量的最新值。2、禁止指令的重排序。1、volatile关键字能保证可见性吗?看一个简单的例子:原创 2017-05-31 17:42:00 · 482 阅读 · 0 评论 -
mysql uftb8mb4 储存 emoji 表情失败
记一次生产事故踩坑。血淋淋的惨痛教训众所周知 mysql 存 emoji 表情要用 utf8mb4 这个字符集OK 没问题,设置 nick_name 为 utf8mb4 varchar(50)测试的结果: emoji 表情储存成功没有问题 完全oj8k 发生产! 微信公众号做了推送,为了抗住流量,还准备了100台服务器。晚上监控流量,服务器各项指标正常。但...原创 2018-10-22 15:06:57 · 1311 阅读 · 0 评论