Java
Java
编程者说
这个作者很懒,什么都没留下…
展开
-
好好理解 Java 中的递归
递归的思想把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。一句话总结:递归就是自己调用自己。递归的条件要素1、递归有两个重要条件,可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用) 存在一种简单情境,可以使递归在简单情境下退出。(递归出口)2、递归的三要素,尝试将一个问题化简到原创 2020-11-24 10:18:49 · 1150 阅读 · 0 评论 -
搞定Java面试中的数据结构问题
Java面试过程中,经常会被问到数据结构和算法相关的知识。对于工作多年的程序员来说,这些理论的知识可能已经忘得差不多了吧,所以面试前还是有必要临时抱抱佛脚的。其实面试官的要求也很简单,只要大体懂得其原理即可,并不太会深究,尤其对社招。校招在此不做讨论,毕竟刚出校园,理论知识正值巅峰,哈哈。一、线性表(重点)线性表是由N个元素组成的有序序列,也是最常见的一种数据结构。...原创 2019-11-22 21:47:00 · 278 阅读 · 0 评论 -
搞定JVM系列(七):JVM性能调优
本文JVM参数调优以HotSpot JDK1.8为例,此版本中堆内存包含年轻代和年老代(永久代已被取消)。一、堆大小设置JVM 中最大堆大小有三方面限制:操作系统的数据模型(32-bt还是64-bit)限制; 系统的可用虚拟内存限制; 系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。典型设置:java -Xmx3550m -Xms...原创 2019-11-27 13:34:47 · 1015 阅读 · 1 评论 -
搞定JVM系列(六):Java 内存模型详解
一、为啥需要内存模型简单点说就是:硬件的不断升级导致了缓存一致性问题、处理器器优化的指令重排问题,需要一个统一的机制来保证并发编程中共享内存的正确性(可见性、有序性、原子性)。这就是内存模型,她定义了共享内存系统中多线程程序读写操作行为的规范。由于计算机的存储设备与处理器的运算能力之间有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(ca...原创 2019-11-27 10:55:48 · 738 阅读 · 0 评论 -
搞定JVM系列(五):Java的类加载机制和类加载器
类加载机制类加载分为三个步骤:加载、连接(验证、准备、解析)、初始化。1、加载加载主要是将.class文件(并不一定是.class。可以是ZIP包,网络中获取)中的二进制字节流读入到JVM中。在加载阶段,JVM需要完成3件事:通过类的全限定名获取该类的二进制字节流; 将字节流所代表的静态存储结构转化为方法区的运行时数据结构; 在内存中生成一个该类的java.lang.C...原创 2019-11-27 09:37:04 · 711 阅读 · 0 评论 -
搞定JVM系列(四):CMS垃圾收集器和G1垃圾收集器
对于JVM的垃圾收集器而言,CMS和G1是重点,在内存回收领域都有重要意义。CMS垃圾收集器CMS垃圾回收器的全称是Concurrent Mark-Sweep Collector,使用的是并发收集,收集算法为Mark-Sweep,为了低延迟而生,是老年代的垃圾收集器。特点是低延迟并且会有浮动垃圾。一般情况下会有ParNew来配合执行(默认情况下也是ParNew),ParNew也是使用并行的...原创 2019-11-26 18:09:25 · 1170 阅读 · 0 评论 -
搞定JVM系列(三):JVM垃圾收集器
上文的垃圾回收策略可以看作是内存回收的抽象策略,而垃圾收集器是内存回收的具体实现,这里我们只讨论HotSpot虚拟机。垃圾收集器有很多种,常见的有:串行收集器、并行收集器、并发收集器、CMS收集器以及最新的G1收集器。重点为CMS收集器和G1收集器。1、Serial 收集器(串行收集器)这是一个单线程收集器。意味着它只会使用一个 CPU 或一条收集线程去完成收集工作,并且在进行垃圾...原创 2019-11-26 15:17:01 · 797 阅读 · 0 评论 -
搞定JVM系列(二):JVM垃圾回收算法
JVM在JDK1.8之前主流的有三种垃圾回收算法:复制算法,标记-清除算法、标记-整理算法。在此之前还有几个古老的算法叫引用计数法、根搜索算法,我们一个个来看,按回收策略分一、标记-清除算法首先标记出所有需要回收的对象,标记完成后统一回收所有被标记的对象。缺点:标记和清除两个过程效率都不高;标记清楚后会产生空间碎片,空间碎片导致分配较大对象时可能提前出发垃圾回收。二、复制算法...原创 2019-11-26 13:04:27 · 910 阅读 · 0 评论 -
搞定JVM系列(一):JVM原理初识
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机(JVM)是实现这一特点的关键。JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。之前市场上主要有三种主流的JVM,Sun公司的HotSpot BEA公司的JRockit IBM公司的J9 JVM后来Sun公司和BEA公司都被oracle收购,并且orac...原创 2019-11-26 11:16:54 · 1594 阅读 · 1 评论 -
搞定Java基础:反射机制
反射机制是Java语言多态的体现,估计大家接触最早的代码可能是jdbc的一行代码吧。Class.forName("com.mysql.jdbc.Driver.class").newInstance();// 利用反射机制加载数据库驱动类一、反射机制JAVA反射机制是在运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种...原创 2020-02-28 13:38:20 · 695 阅读 · 0 评论 -
搞定Java NIO:NIO面试问题梳理
原创 2020-02-27 22:07:08 · 5834 阅读 · 0 评论 -
搞定Java多线程:多线程面试问题梳理
1、 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java多线程充分发挥了计算机多核CPU的优势。2、线程和进程有什么区别?线程是进程的子集,一个进程可以有很多线程,每条线程并行执...原创 2020-02-21 16:55:53 · 1942 阅读 · 0 评论 -
搞定Java多线程:并发容器核心原理 CAS AQS
Java 在多线程并发编程的时候,不可避免的有资源的同步问题,Java 有很多同步手段,但是追根到底核心原理就两类:CAS和AQS。一、CAS(Compare and Swap)1、CASCAS(Compare And Swap),即比较并交换,是解决多线程并行情况下使用锁造成性能损耗的一种机制。CAS操作包含三个操作数:内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预...原创 2020-02-19 04:07:17 · 1365 阅读 · 0 评论 -
搞定Java多线程:concurrent并发包梳理
在多线程并发编程中,java.util.concurrent 是重中之重,里面提供的方法类非常实用,当然页面面试要点,需要耐心梳理。主要分这几类,tools:CountDownLatch(闭锁)、CyclicBarrier(栅栏)、Semaphore(信号量)等。 locks:Lock、ReentrantLock(重入锁)、ReadWritLock(读写锁)等。 executor:Ex...原创 2020-02-21 11:07:05 · 4070 阅读 · 2 评论