
java核心技术
文章平均质量分 96
华山拎壶冲
不积跬步,无以至千里。。。
面试必备:https://www.jianshu.com/u/c3be0f69940b
展开
-
老生常谈,HashMap的死循环
问题最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。由于HashMap并非是线程安全的,所以在高并发的情况下必然会出现问题,这是一个普遍的问题,虽然网上分析的文章很多,还是觉得有必须写一篇文章,让关注我公众号的同学能够意识到这个问题,并了解这个死循环是如何产生的。如果是在单线程下使用HashMap,自然是没有问题的,如果后期由于代码优化,这段逻辑引入了多线程并发执行,在一转载 2020-07-27 14:22:10 · 233 阅读 · 0 评论 -
HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!
前言Map 这样的Key Value在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于数组 + 链表组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同。Base 1.71.7 中的数据结构图:先来看看 1.7 中的实现。...转载 2020-07-24 16:29:09 · 153 阅读 · 0 评论 -
Java魔法类:Unsafe应用解析
Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概...转载 2019-08-16 14:54:28 · 190 阅读 · 0 评论 -
Java中的URL类
Java的网络类可以让你通过网络或者远程连接来实现应用。而且,这个平台现在已经可 以对国际互联网以及URL资源进行访问了。Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷。我们通过使用Java的URL类 就可以经由URL完成读取和修改数据的操作。 通过一个URL连接,我们就可以确定资源的位置,比如网络文件、网络页面以及网络应用程序等。其中包含了许多的语法元素。...转载 2019-02-22 14:42:51 · 1796 阅读 · 0 评论 -
JAVA获取CLASSPATH路径
ClassLoader 提供了两个方法用于从装载的类路径中取得资源: public URL getResource (String name); public InputStream getResourceAsStream (String name); 这里name是资源的类路径,它是相对与“/”根路径下的位置。getResource得到的是一个UR...转载 2019-02-22 14:36:52 · 119 阅读 · 0 评论 -
Java中几种常见的编码方式
几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理解的语言假定...转载 2018-12-05 18:21:57 · 730 阅读 · 0 评论 -
ThreadLocal实现原理
一、概述ThreadLocal官网解释: This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its {@code get} or {@code set} met...原创 2018-11-30 18:43:02 · 297 阅读 · 0 评论 -
java深拷贝与浅拷贝
本文转载自https://www.cnblogs.com/ysocean/p/8482979.html关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象。可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用传递将会有更深的理解1、创建对象的5种方式 ①、通过 new 关键字 这是...转载 2018-11-06 17:36:31 · 123 阅读 · 0 评论 -
java位运算原理及应用
日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法。举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1。可能的做法是使用三木运算符,判断原始值为1还是0,如果是1,设置为0,否则设置为0.但是使用位运算,不用判断原始值,直接改变值就可以:1^num//num为原始值当然,一条语句可能对代码没什么影响,但是在高重复,大数据量的情况下将会节...转载 2018-10-25 09:45:40 · 3215 阅读 · 0 评论 -
匿名内部类类名规则($1,$2)
匿名内部类属于内部类的其中一种,从内部类讲起,内部类类型共有如下:1.成员内部类 public class A { String s; class B{ } } B就是成员内部类,实例化B需要先实例化A对象(B b = new A().new B();),B会持有A对象的引用,所以鉴于这点,引出java中的内存泄漏问题。2....转载 2018-09-29 14:40:47 · 4117 阅读 · 0 评论 -
java内部类实现(可能导致内存泄漏)
在使用java内部类的时候要注意可能引起的内存泄漏代码如下package com.example;public class MyClass { public static void main(String[] args) throws Throwable { } public class A{ public void methed1(){...转载 2018-09-29 11:35:38 · 3825 阅读 · 0 评论 -
Fork/Join框架原理解析
1、概述 Fork/Join Pool采用优良的设计、代码实现和硬件原子操作机制等多种思路保证其执行性能。其中包括(但不限于):计算资源共享、高性能队列、避免伪共享、工作窃取机制等。本文(以及后续文章)试图和读者一起分析JDK1.8中Fork/Join Pool的源代码实现,去理解Fork/Join Pool是怎样工作的。当然这里要说明一下,起初本人在决定阅读Fork/Join归并计算相关...转载 2018-08-08 10:12:32 · 20729 阅读 · 2 评论 -
Atomic包的实现原理分析
Atomic简介Atomic包是java.util.concurrent下的另一个专门为线程安全设计的Java包,包含多个原子操作类。这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个...转载 2018-08-03 15:49:04 · 255 阅读 · 0 评论 -
Fork/Join框架基本使用
1. 概述ava.util.concurrent.ForkJoinPool由Java大师Doug Lea主持编写,它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。本文中对Fork/Join框架的讲解,基于JDK1.8+中的Fork/Join框架实现,参考的Fork/Join框架主要源代码也基于JDK1.8+。这几篇文章将试图解释Fork/...转载 2018-08-06 09:56:42 · 70905 阅读 · 22 评论 -
Java高效并发之乐观锁、悲观锁、互斥同步、非互斥同步
乐观锁和悲观锁首先我们理解下两种不同思路的锁,乐观锁和悲观锁。这两种锁机制,是在多用户环境并发控制的两种所机制。下面看百度百科对乐观锁和悲观锁两种锁机制的定义:乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而...原创 2018-08-09 20:08:40 · 702 阅读 · 0 评论 -
java泛型全总结
概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。...原创 2018-07-05 20:21:28 · 21809 阅读 · 7 评论 -
java泛型:? Extends T 和 ? Super T
<? extends T>和<? super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”<? super T>:是指 “下界通配符(Lower Bounds Wildcards)”为什么要用通配符和边界?使用泛...原创 2018-07-04 16:02:02 · 222 阅读 · 0 评论 -
jdk动态代理的实现原理
关于JDK的动态代理,最为人熟知要可能要数Spring AOP的实现,默认情况下,Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对于类的代理使用CGLIB来实现。那么,什么是JDK的动态代理呢?JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程。JDK从1.3开始支持动态代理。那么JDK是如何生成动态代转载 2018-01-16 11:25:55 · 6178 阅读 · 1 评论