![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java语言
Java学习相关
林木森^~^
这个作者很懒,什么都没留下…
展开
-
java面试知识点整理之java基础
1. java基础1.1java虚拟机相关java虚拟机内存图(1.8永久代 元空间)java对象分配GC算法以及垃圾回收器的特点(cms ,G1)yongGC以及FullGC的触发场景JVM的调优工具参数OOM以及内存泄漏以及解决方案类加载过程以及类加载器(双亲委派以及破坏) 1.2集合相关List Set Map的特点ArrayList以及Vector,LinkedList原创 2017-10-13 11:36:20 · 325 阅读 · 0 评论 -
java面试知识点整理之数据结构算法(待完善)
数据结构栈队列链表数组字符串二叉树,AVL树,红黑树,B/B+树,Hash树、Tire树等各种树算法八大排序以及复杂度分析二分查找动态规划,贪心图算法(深度广度优先,Floyd 和Dijkstra)分治,回溯,分支界限原创 2017-11-01 11:06:03 · 273 阅读 · 0 评论 -
java面试知识点整理之web系列
数据库相关:三大范式事务的四个属性以及解决的问题SQL基本语句以及join和union的使用数据库引擎myiasm和inoDB的区别B树以及B-+树聚促簇索引与非聚簇索引索引的分类索引的优点在哪或何时建立索引索引何时失效进行全表扫描行锁何变为表说组合索引何时失效数据库的优化SQL语句优化表结构的优化框架相关:spring AOP .IOC DI springm原创 2017-10-13 17:05:01 · 246 阅读 · 0 评论 -
java面试知识点整理之扩展系列
redisredis的应用场景redis的五种数据类型redis底层数据结构redis集群,主从复制,哨兵机制redis持久化方案。RDB和AOFdubbo1、默认使用的是什么通信框架,还有别的选择吗? 2、服务调用是阻塞的吗? 3、一般使用什么注册中心?还有别的选择吗? 4、默认使用什么序列化框架,你知道的还有哪些? 5、服务提供者能实现失效踢出是什么原理? ...原创 2017-10-19 20:24:02 · 715 阅读 · 0 评论 -
JVM系列(一)内存区域分布
1. 内存区域分布1.1 非线程共享区堆内存方法区1.2 线程共享区程序计数器栈内存本地方法栈2.区域作用详解2.1 程序计数器是什么程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器线程是一个独立的执行单元,是由CPU控制执行的字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处...原创 2019-10-21 21:30:59 · 251 阅读 · 0 评论 -
全面理解JMM模型
一、什么是JMM模型Java内存模型(即Java Memory Model,简称JMM)本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),用于存储线程私有的数据,而Java内存模型中规定所有变...原创 2019-11-04 20:31:43 · 4398 阅读 · 1 评论 -
GC垃圾回收(二)垃圾回收器
1. serial垃圾收集器讲解是什么?收集算法是内存收到的方法论,垃圾回收器是内存回收的具体实现。Serial是一个单线程的垃圾收集器serial垃圾收集器的特点“Stop The World”,它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。在用户不可见的情况下把用户正常工作的线程全部停掉使用场景:多用于桌面应用,Client端的垃圾回收器桌面应用内存小,进...原创 2019-10-22 23:22:56 · 209 阅读 · 0 评论 -
jvm(三)对象结构以及内存分配
对象结构对象头用于存储对象的元数据信息:Mark Word 部分数据的长度在32位和64位虚拟机(未开启压缩指针)中分别为32bit和64bit,存储对象自身的运行时数据如哈希值等。Mark Word一般被设计为非固定的数据结构,以便存储更多的数据信息和复用自己的存储空间。类型指针 指向它的类元数据的指针,用于判断对象属于哪个类的实例。实例数据存储的是真正有效数据,如各种字段内...原创 2019-10-23 19:40:30 · 175 阅读 · 0 评论 -
JVM(四)排查工具使用
1.虚拟机工具的意义以及JPS讲解虚拟机工具的意义给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段数据包括:运行日志、异常堆栈、GC 日志、线程快照( threaddump/javacore文件)、堆转储快照( heapdump/hprof文件)等。使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度ps -ef|grep...原创 2019-10-23 20:32:28 · 230 阅读 · 1 评论 -
GC垃圾回收(一)垃圾回收算法
1.为什么垃圾回收垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存2.存活算法2.1 计数器法引用计数法存在的特点分析优缺点引用计数收集器可以很快的执行,交织在程序运行中。对程序需要不被长时间打断的实时环境比较有利。无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样,他们的引用计数永远不可能为0.代码分析JVM是否用引用计数法run c...原创 2019-10-22 23:12:16 · 232 阅读 · 0 评论 -
java8新特性(六)元空间
JDK8⾥⾯的新的内存空间MetaSpaceJVM 种类有很多,⽐如 Oralce-Sun Hotspot, Oralce JRockit, IBM J9, Taobao JVM,我们讲的是Hotspot才有,JRockit以及J9是没有这个区域JVM内存知识 在JDK8之前的HotSpot JVM,有个区域叫做“永久代(permanent generation), 通过在命令⾏设置参数-X...原创 2019-10-25 21:29:15 · 253 阅读 · 0 评论 -
Java NIO(二)Channel
1. channel是什么Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。2.channel 的主要实现类FileChannel从文件中,读写数据。DatagramChannelDatagramChanne...原创 2019-10-27 17:04:32 · 182 阅读 · 0 评论 -
java8特性(一)
一、default 关键字在jdk1.8以前接⼝⾥⾯是只能有抽象⽅法,不能有任何⽅法的实现的jdk1.8⾥⾯打破了这个规定,引⼊了新的关键字default,使⽤default修饰⽅法,可以在接⼝⾥⾯定义具体的⽅法实现默认⽅法: 接⼝⾥⾯定义⼀个默认⽅法,这个接⼝的实现类实现了这接⼝之后,不⽤管这个default修饰的⽅法就可以直接调⽤,即接⼝⽅法的默认实现public inte...原创 2019-10-23 22:27:48 · 158 阅读 · 0 评论 -
ConcurrentHashMap源码解读(更新中)
ConcurrentHashMap作为Concurrent一族,其有着高效地并发操作,相比Hashtable的笨重,ConcurrentHashMap则更胜一筹了。在1.8版本以前,ConcurrentHashMap采用分段锁的概念,使锁更加细化,但是1.8已经改变了这种思路,而是利用CAS+Synchronized来保证并发更新的安全,当然底层采用数组+链表+红黑树的存储结构。重要变量//...原创 2019-12-21 16:06:34 · 158 阅读 · 0 评论 -
Java8(三)Optional
简介:讲解jdk8新增的Optional类Optional 类有啥⽤主要解决的问题是空指针异常(NullPointerException)怎么解决?本质是⼀个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空创建Optional类of()null 值作为参数传递进去,则会抛异常Optional<Student> opt = Optio...原创 2019-10-24 21:12:57 · 168 阅读 · 0 评论 -
Java13新特性
JDk13⾥⾯新增的多⾏⽂本块多⾏⽂本块旧:在java代码⾥⾯编写多⾏源码带有特殊字符则需要转义,如HTML,sql等新:原⽣字符串⽂字(raw string literals),它可以跨多⾏源码⽽不对转义字符进⾏转义旧:String html = "<html>\n" + " <body>\n" + " <p>Hello, world<...原创 2019-10-25 22:43:29 · 268 阅读 · 0 评论 -
java NIO详解(一)
1. java NIO 是什么Java NIO( New IO 或者 Non Blocking IO ) ,从 Java 1.4 版本开始引入的非阻塞 IO ,用于替换标准( 有些文章也称为传统,或者 Blocking IO 。下文统称为 BIO ) Java IO API 的 IO API 。1.1 核心组件selectBufferChanel后续我们慢慢展开进行讲解1.2...原创 2019-10-27 16:41:11 · 232 阅读 · 0 评论 -
happens-before规则和as-if-serial语义
指令序列的重排序我们在编写代码的时候,通常自上而下编写,那么希望执行的顺序,理论上也是逐步串行执行,但是为了提高性能,编译器和处理器常常会对指令做重排序。1) 编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。2) 指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。3...原创 2019-12-21 16:08:59 · 333 阅读 · 0 评论 -
Java10、Java11新特性
1. JDK10之局部变量类型推断var讲解Java是⼀种强类型, 许多流⾏的编程语⾔都已经⽀持局部变量类型推断,如js,Python,C++等JDK10 可以使⽤var作为局部变量类型推断标识符Local-Variable Type Inference(局部变量类型推断),顾名思义只能⽤做为局部变量注意仅适⽤于局部变量,如 增强for循环的索引,传统for循环局部变量不能使⽤于⽅法形...原创 2019-10-25 22:36:31 · 919 阅读 · 0 评论 -
java线程池详解
池化思想在我们的日常开并不少见,有数据库连接池、线程池、对象池、常量池等等。下面我们主要针对线程池来一步一步揭开线程池的面纱。原创 2019-11-04 20:33:02 · 133 阅读 · 0 评论 -
synchronized 关键字原理
1.是什么synchronized是Java中的关键字,是一种同步锁2.用法它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的...原创 2019-11-11 20:54:46 · 188 阅读 · 0 评论 -
java9新特性
jdk9新增测试⼯具jshell什么是jshell从java9开始,jdk引⼊了交互式 REPL(Read-Eval-Print-Loop,读取-求值-输出-循环)官⽅⽂档https://docs.oracle.com/en/java/javase/12/jshell/introduction-jshell.html#GUID-630F27C8-1195-4989-9F6B-2C5...原创 2019-10-25 21:45:21 · 141 阅读 · 0 评论 -
Java8 特性(二)时间处理
时间处理时间处理再熟悉不过,SimpleDateFormat,Calendar等类 旧版缺点: java.util.Date 是⾮线程安全的 API设计⽐较差,⽇期/时间对象⽐较,加减麻烦Java 8通过发布新的Date-Time API (JSR 310)来进⼀步加强对⽇期与时间的处理新增了很多常⻅的api,如⽇期/时间的⽐较,加减,格式化等包所在位置 java.time核⼼类...原创 2019-10-24 21:03:07 · 225 阅读 · 0 评论 -
Java编程规范:命名
一、类命名1. 抽象类适用的设计模式为模板模式。抽象是自下往上的设计。由具体实现推断出抽象方法。建议以Abstract开头。建议示例Abstract 或者 Base 开头BaseUserService、AbstractUserService2. 枚举类枚举是由JVM来保证的单例。可以用来做单例类。枚举类常用作值判断,不建议每次进行循环判断得到实例。建议由内部维护一个map类型,当做cache。此方法建议放在static静态代码块中实现建议示例..原创 2020-11-21 17:00:17 · 781 阅读 · 0 评论 -
java8(四) Lambda表达式
什么是函数式编程和什么是lambda表达式在JDK8之前,Java是不⽀持函数式编程的,所谓的函数编程,即可理解是将⼀个函数(也称为“⾏为”)作为⼀个参数进⾏传递, ⾯向对象编程是对数据的抽象(各种各样的POJO类),⽽函数式编程则是对⾏为的抽象(将⾏为作为⼀个参数进⾏传递)jdk8之前创建线程new Thread(new Runnable() { @Override ...原创 2019-10-24 21:52:21 · 469 阅读 · 0 评论 -
java8新特性(五) stream流
什么是streamStream 中⽂称为 “流”,通过将集合转换为这么⼀种叫做 “流”的元素队列,通过声明性⽅式,能够对集合中的每个元素进⾏⼀系列并⾏或串⾏的流⽔线操作元素是特定类型的对象,所以元素集合看作⼀种流, 流在管道中传输, 且可以在管道的节点上进⾏处理, ⽐如 排序,聚合,过滤等操作操作详情数据元素便是原始集合,如List、Set、Map等⽣成流,可以是串...原创 2019-10-24 22:40:33 · 311 阅读 · 0 评论 -
HashMap源码解读
本文基于Java11我们先来看hashMap定义的内部变量原创 2019-12-21 15:59:05 · 132 阅读 · 0 评论 -
java并发之CAS
CASCAS:Compare and Swap, 翻译成比较并交换。java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。CAS应用CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。原理CAS通过调用JNI的代码实现的。JNI:Java Native ...原创 2019-12-21 16:04:23 · 155 阅读 · 0 评论 -
java 强引用,软引用,弱引用,虚引用
在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。1 强引用特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误(OOM),使程序异常终止,也不会靠随意...原创 2018-11-11 11:56:29 · 196 阅读 · 0 评论 -
JAVA-对java平台的理解
Java特性:面向对象(封装,继承,多态)平台无关性(JVM运行.class文件)语言(泛型,Lambda)类库(集合,并发,网络,IO/NIO)JRE(Java运行环境,JVM,类库)JDK(Java开发工具,包括JRE,javac,诊断工具)Java是解析运行吗?不正确!1,Java源代码经过Javac编译成.class文件2,.class文件经JVM解析或编译运行。(1...原创 2018-11-11 11:25:43 · 209 阅读 · 0 评论 -
正确理解Thread Local的原理与适用场景
本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ThreadLocal解决什么问题 由于 ThreadLocal 支持范型,如 ThreadLocal< StringBuilder >,为表述方便,后文用 变量 代表 ThreadLocal 本身,而用 实例 代表具体类型(如 StringBuidler )的实例。不恰当的理解 写这篇转载 2017-12-27 19:29:19 · 679 阅读 · 0 评论