自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 剑指offer(牛客网) - 第12题 - 数值的整数次方

题目给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0解析这道题需要注意的问题是各种情况的判断:当 exponent < 0 时,要先对指数取绝对值,然后把结果取倒数当 exponent < 0 且 base == 0 时,会出现分母为 0 的情况。可以用一下公式简化...

2020-01-09 11:31:49 99

原创 JVM 垃圾收集算法

1. 标记 - 清除算法算法思想算法分为 ”标记“ 和 ”清除“ 两个阶段:标记出所有需要回收的对象。在标记完成后统一回收掉所有被标记的对象。注:(标记过程)如果对象在进行根搜索后发现与GC Roots 相连接的引用链,那它将会被第一次标记并且进行一次筛选。筛选条件是此对象是否有必要执行 finalize() 方法。当对象没有覆盖 finalize() 方法,或者 fina...

2020-01-08 11:06:52 124

原创 对象已死?

堆中几乎存放着 Java 世界中所有的对象实例,垃圾收集器在对对进行回收前,第一件事情就是要确定这些对象哪些还 “存活“着,哪些已经”死去”。1. 引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它是,计数器值就加1,引用失效是,计数器值就减1,任何时刻计算器都为 0 的对象就是不可能再被使用的。但是 Java 语言中并没有引用计数算法来管理内存,因为它很难解决对象之间相互循环...

2020-01-08 01:01:02 156

原创 Java 字符串常量池

1. 概述1.1 Java 中有几种不同的常量池class常量池我们写到每一个 Java 类被编译后,就会形成一份 class 文件,class文件中除了包含类的版本、字段、方法、接口等信息外,还有一项信息就是常量池,用于存放编译器生成的各种 字面量和符号引用运行时常量池方法区的一部分用于存放class常量池中的内容字符串常量池JDK6.0及之前,字符串常量池存放在...

2020-01-07 22:53:44 115

原创 剑指offer(牛客网) - 第29题 - 数组中出现次数超过一半的数字

题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解析方法一出现的次数超过数组长度的一半的数字出现的次数,一定会超过剩下的数出现次数的总和。其实就有点像抵消的意思。在这里我们需要确定这个数出现的次数的确超过数组长度的一半。...

2020-01-06 21:06:37 110

原创 常见的排序算法

排序算法衡量排序算法的好坏主要从三个角度切入算法的执行效率最好、最坏和平均时间复杂度时间复杂度的系数、常数、低阶比较次数和交换次数算法的内存消耗算法的稳定性冒泡排序算法思想:冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就交换。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工...

2020-01-06 13:55:46 64

原创 Java 对象的创建和访问

1. 对象的创建Java 中对象的创建就是在堆上分配内存空间的过程,下面主要是针对 new 关键字创建的普通 Java 对象。包括以下过程:检测类是否被加载为对象分配内存为分配的内存空间初始化零值对对象进行其他设置执行init方法检测类是否被加载虚拟机遇到一条 new 指令时,会先去常量池中查找这个类的符号引用。如果能找到符号引用,说明此类已经被加载到方法区,可以继续执行;如果...

2020-01-06 00:04:14 129

原创 Java 运行时数据区

1. HotSpot JVM最上层:javac 编译器将编译好的字节码class文件,通过java类加载机制,把对象或class文件存放在jvm划分内存区域中间层:运行时数据区域底层:执行引擎(包含模块 JIT(Just in time) 即时编译器 + GC(Garbage Colletctor) 垃圾回收器)2. Java 运行时数据区2.1 程序计数器程序计数器是一块比...

2020-01-05 18:57:30 115

原创 剑指offer(牛客网)- 第27题 - 二叉搜索树与双向链表

题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解析我们知道,二叉搜索树的中序遍历是按从小到大的顺序遍历二叉树的每一个结点,同时双向链表的前后指针的,对应节点的左右节点。我们设置的 tmpNpde 是在遍历的过程中,对指针进行修改。举例说明假设输入树结构如下图:遍历到根节点时,左子树已经变为链表了, tmpN...

2020-01-05 17:07:09 80

原创 剑指offer(牛客网) - 第25题 - 二叉树中和为某一值的路径

题目输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解析二叉树的路径定义为从树的根节点开始往下一直到叶子节点所经过的结点形成一条路径。Java 代码import java.util.ArrayList;public class...

2020-01-05 15:36:36 58

原创 剑指offer(牛客网) - 第24题 - 二叉搜索树的后序遍历序列

题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。解析Java 代码public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if (sequence.length =...

2020-01-05 13:51:14 85

原创 剑指offer(牛客网) - 第23题 - 从上到下打印二叉树

题目从上往下打印出二叉树的每个节点,同层节点从左至右打印。解析二叉树的层次遍历,利用队列来完成这个过程。Java 代码import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;public class Solution { public ArrayList<Integ...

2020-01-05 12:35:30 66

原创 剑指offer(牛客网) - 第35题 - 第一个只出现一次的字符

题目在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).解析当访问大某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符,但是这样做的时间复杂度为O(n^2),我们希望找寻更快的方法。方法一:使用 HashMap 作为容器,将字...

2020-01-05 10:54:11 139

原创 类加载机制

概述Class 文件中描述的各种信息,都要加载到虚拟机中之后才能被运行和使用。而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机后会发生什么变化?虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java 类型,这既是虚拟机的类加载机制。在 Java 语言中,类型的加载和连接过程都是在程序运行期间完成的,...

2020-01-05 00:57:58 80

原创 Java 中 的 static 关键字

概述Static 是静态修饰符,什么是静态修饰符呢?大家都知道,在程序中任何变量或代码都是在编译是由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在。被static修饰的成员变量和方法独立于该类的任何对象。也就是说,它不依赖特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内找到他们。static 修饰的成员变量和成员方...

2020-01-04 18:19:49 42

原创 剑指offer(牛客网) - 第38题 - 数字在排序数组中出现的次数

题目统计一个数字在排序数组中出现的次数。解析如何做到举一反三呢?这是个值得思考的问题,漠然忍受命运暴虐的毒箭,或是挺身反抗人世无涯的苦难,通过斗争把他扫清…跑题跑题啦!!题目中出现 排序数组 时,我们应该直觉反应,可以使用二分查找算法。因为是排序数组,所以我们可以找到出现指定数字的第一个位置和最后一个位置,从而来确定该数在数组中出现的次数。如何找到第一次出现该数字的位置呢?我们用二...

2020-01-03 15:46:09 96

原创 Class 文件格式详解

概述Write once, run everywhere!,我们都知道这是 Java 著名的宣传口号。不同的操作系统,不同的 CPU 具有不同的指令集,如何做到平台无关性,依靠的就是 Java 虚拟机。计算机永远只能识别 0 和 1组成的二进制文件,虚拟机就是我们编写的代码和计算机之间的桥梁。虚拟机将我们编写的 .java 源程序文件编译为 字节码 格式的 .class 文件,字节码是各种虚拟机...

2020-01-02 22:09:13 847

原创 剑指offer(牛客网) - 第六题 - 旋转数组的最小数字

剑指offer(牛客网) - 第六题 - 旋转数组的最小数字题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解析方法一:使用顺序查找顺序遍历返回数组中最小...

2020-01-02 14:32:58 96 1

原创 Java 中的 final 关键字

Java 中的 final 关键字final关键字主要用在三个地方: 变量、方法、类1.修饰变量对于一个final变量:如果是基本数据类型的变量,其值一旦初始化,就不能修改final double PI = 3.14;PI = 3.1415;此时会报错:Error:(6, 9) java: 无法为最终变量PI分配值如果是引用类型的变量,对其初始化之后不能让其再指向...

2019-12-24 15:04:13 79

原创 剑指offer(牛客网)-第五题-用两个栈实现队列

剑指offer(牛客网)-第五题-用两个栈实现队列题目用两个栈实现一个队列。解析队列是先进先出的,栈是先进后出的通过一个具体的例子来分析该队列插入和删除元素的过程首先插入一个元素a,不妨先插入stack1,此时stack1中的元素为{a},stack2为空。再压入两个元素b,c,还是插入到stack1中,此时stack1中的元素有{a,b,c},c位于栈顶,此时stack2还是为空...

2019-12-24 00:07:38 78

原创 Java 抽象类

Java 抽象类在面向对象的概念中,所有的对象都是通过类来描绘的,但是返回来,并不是所有的类都是用来描绘对象的,如果一个类中没有足够的信息来描绘一个具体的对象,这个类就是抽象类。抽象类除了不能实例化对象之外,类的其他功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。所以一般在设计阶段就要决定要不要设计抽象类父类包含...

2019-12-23 22:54:42 80

原创 Java 中的 protected 关键字

Java 中的 protected 关键字protected 关键字可以用来修饰方法和成员变量声明为protected 的方法和成员变量可以被同一个包内所有类访问声明为protected 的方法和成员变量可以被该类的子类所访问,即便子类和父类不在一个包中注:不在一个包中的子类,只能使用该子类中的引用来使用其父类的protected 成员,但是和父类在同一个包中的子类没有这个约束。 这样...

2019-12-22 23:38:34 920

转载 Java 虚拟机栈(JVM Stacks)

Java 虚拟机栈参考博客文章:https://zhuanlan.zhihu.com/p/45354152https://blog.csdn.net/AAA821/article/details/78233927概述和程序计数器一样,Java 虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是 Java 方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(...

2019-12-22 21:18:12 244

原创 剑指offer(牛客网)-第四题-重构二叉树

剑指offer(牛客网)-第四题-重构二叉树题目输入某二叉树的前序遍历和中序遍历的结果,请重构出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如:输入前序遍历序列[1,2,4,7,2,5,6,8]输入中序遍历序列[4,7,2,1,5,3,8,6]解析前序遍历的顺序是,根左右,所以第一个数字总是树的根节点中序遍历的顺序是,左根右,所以根节点在序列的中间,根节点...

2019-12-22 14:28:11 70

原创 Java 程序计数器

程序计数器1. 概述程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。在概念模型中,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要这个计数器来完成Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多喝处理...

2019-12-21 12:22:04 452

原创 java面试题-重载和重写

java面试题-重载和重写重载和重写方法是java多态性的不同表现重载可以理解为多态的具体表现重写是父类与子类之间多态性的一种表现重载(overload)发生在同一个类中方法名必须相同参数类型不同、个数不同、顺序不同方法返回值和访问修饰符可以相同可以不同代码class Cat { public void miao () { System.out....

2019-12-16 22:20:40 213

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除