Java面试算法
文章平均质量分 81
zfgogo
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java对象的创建过程
个人小结:一个Java对象的创建过程往往包括 类初始化 和 类实例化 两个阶段。特别需要指出的是,类的实例化与类的初始化是两个完全不同的概念: 类的实例化是指创建一个类的实例(对象)的过程; 类的初始化是指为类中各个类成员(被static修饰的成员变量)赋初始值的过程,是类生命周期中的一个阶段。 1. 一个Java对象的创建过程往往包括两个阶段:类初始化阶段 和 类实例化阶段。实例初始化不一定要在类初始化结束之后才开始初始化,实例初始化早于类初始化,先对实例初始化,实例初始化执原创 2021-07-04 19:48:39 · 3221 阅读 · 0 评论 -
类文件结构、虚拟机类文件加载,类加载器
三种类加载器:1.启动(Bootstrap)类加载器启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,是虚拟机自身的一部分,它负责将<JAVA_HOME>/lib路径下的核心类库或-Xbootclasspath参数指定的路径下的jar包加载到内存中,注意必由于虚拟机是按照文件名识别加载jar包的,如rt.jar,如果文件名不被虚拟机识别,即使把jar包丢到lib目录下也是没有作用的(出于安全考虑,Bootstrap启动类加载器只加载包名为java、javax..原创 2021-07-04 19:46:21 · 214 阅读 · 0 评论 -
Java垃圾回收算法、垃圾收集器实现 及 内存分配与回收策略
一、垃圾回收算法1、标记-清除算法 “标记-清除”算法是最基础的垃圾回收算法,之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其缺点进行改进得到的。 该算法分为两个阶段:“标记”和“清除”,首先标记出所有需要回收的对象,然后在标记完成后统一回收掉所有被标记的对象。 主要缺点有两个: 一个是效率问题,标记和清除过程的效率都不高; 另外一个是空间问题,标记清除之后会产生大量不连续的内存碎片...原创 2021-07-04 19:43:54 · 242 阅读 · 0 评论 -
Java中的堆和栈
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。方法区(Method Area)、虚拟机栈(VM Stack)、本地方法栈(Native Method Stack)、堆(Heap)、程序计数器(Program Couter Register).1、程序计数器程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。...原创 2021-07-04 19:41:51 · 189 阅读 · 1 评论 -
leetcode动态规划算法
此文将持续更新,涉及以下题目:买卖股票的最佳时机买卖股票的最佳时机 II买卖股票的最佳时机 III买卖股票的最佳时机 IV最佳买卖股票时机含冷冻期买卖股票的最佳时机含手续费70. 爬楼梯难度简单假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶...原创 2020-08-05 21:48:25 · 260 阅读 · 0 评论 -
Leetcode全排列算法
本文后续将更新解题思路以及优化解题方法46. 全排列难度中等给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]class Solution {public List<List<Integer>> permute(int[] nums) {LinkedLis...原创 2020-08-04 21:30:58 · 292 阅读 · 0 评论 -
leetcode双指针算法
本文将持续更新两数之和 II - 输入有序数组给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1必须小于index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = ...原创 2020-07-26 11:49:19 · 313 阅读 · 0 评论 -
各种常见的排序算法Java实现
持续更新,冒泡排序法,选择排序法,插入排序法,快速排序法public class Sort { public static void main(String[] args) { int[] a = {3, 15, 0, 4, 12, 8, 10}; quickSort(a); for (int i : a) { System.out.print(i + "\t"); } } // 冒泡排序法...原创 2020-07-22 22:37:18 · 206 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
Java并发编程:volatile关键字解析 请尊重作者劳动成果,转载请标明原文链接:http://www.cnblogs.com/dolphin0520/p/3920373.htmlJava并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料...转载 2018-07-08 15:59:06 · 229 阅读 · 0 评论 -
深入解析String之intern方法
注:首先,字符串常量池存储的是编译时确定的字符常量,即直接使用双引号声明出来的String对象,将会在字符串常量池中创建。例如:首先,字符串常量池存储的是编译时确定的字符常量,即直接使用双引号声明出来的String对象,将会在字符串常量池中创建。例如:1. JAVA 程序员都做做类似 String s = new String("abc")这个语句创建了几个对象的题目。 这种题目主要就...转载 2018-07-24 10:04:16 · 287 阅读 · 0 评论 -
jvm堆大小的设置
问题引入:-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3,,其最小内存值和Survivor区总大小分别是(10240m 2048m);解析:-Xmx:最大堆大小-Xms:初始堆大小-Xmn:年轻代大小-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值年轻代5120m, Eden:...转载 2018-07-28 13:31:02 · 45567 阅读 · 1 评论 -
Java中的finalize方法与gc之间的关系
一、可达性算法 要知道对象什么时候死亡,我们需要先知道JVM的GC是如何判断对象是可以回收的。JAVA是通过可达性算法来来判断对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots 没有任何引用链相连时,则证明此对象是不可用的。 在JAVA语言中,可以作为GC R...转载 2018-07-28 13:32:13 · 1260 阅读 · 0 评论 -
Java对象的实例化过程
Java对象初始化的过程:代码块,实例变量的初始化,构造函数赋值。1,静态代码块,静态变量的赋值,按出现的顺序运行 2,实例变量的赋值,代码块的初始化,按出现的顺序运行3,构造函数初始化含继承关系的对象实例化的顺序:父类的类构造器<clinit>() -> 子类的类构造器<clinit>() -> 父类的成员变量和实例代码块 -> 父类的构造函数 ->...原创 2018-06-26 15:48:06 · 409 阅读 · 0 评论 -
Java中异常处理的一些问题
问题:throws和throw的区别发生异常之后代码如何运行error和Exception检查异常和非检查异常try catch 和 finally之间执行,finally里面的throw会导致catch里面的throw失效。使用了try catch语句之后还要throws来抛出错误么不需要,两个选一个,对于检查异常。只要对应的try执行了,则它一定也执行。只有一种方法让finally块不执行:S...原创 2018-06-26 21:01:57 · 556 阅读 · 0 评论 -
计算n以内中的所有数字包含1的个数
题意:给定一个十进制正整数n,写下从1开始到n的所有整数,出现“1”的所有个数。第一种方法是从1到n循环,时间复杂度过高:public static int count1(int n) { int result=0; for(int i=1;i<=n;i++) { int j=i; while(j!=0) { result+=(j%10==1?1:0); j/=10;...原创 2018-06-28 21:59:31 · 3067 阅读 · 0 评论
分享