自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (4)
  • 收藏
  • 关注

原创 Java虚拟机的类加载机制知识点记录

博客:虚拟机的类加载机制:https://blog.csdn.net/ns_code/article/details/178815811.209页虚拟机将Class文件加载到内存,并对数据进行校验,转换解析和初始化,最后形成能被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。Java语言中,类型的加载,连接初始化都是在程序运行期间完成的2.209页语言上的约定:每个Class文件都有可能代...

2018-06-30 17:32:33 153

原创 多线程编程核心技术课本知识点页码记录

多线程编程核心技术:1).4页一个进程正在运行时至少会有1个线程在运行2)4页实现多线程有两种方式:一种继承Thread类,另一种实现Runnable接口继承Thread类局限:不支持多继承,不能共享3)7页start方法创建顺序不代表线程启动的顺序4)9页Thread.java类也实现了Runnable接口,那也就意味意味着构造函数Thread(Runnable target)不光可以传入Run...

2018-06-30 16:13:20 201

原创 深入理解Java虚拟机第三章知识点记录

1.课本62页:判断对象是不是已死:        引用计数法:每当有一个地方引用它时,计数器就加1,当引用失败时,计数器值就减1.任何时刻计数器为0的对象就不能再被引用。缺点:难以解决对象之间相互循环引用的问题。        可达性分析算法:从GC Roots对象作为起始点,向下搜索,当一个对象到GCRoot不可达时,则此对象是不可用的。2.课本64页:可作为GC Roots的对象...

2018-06-30 15:25:44 910 2

转载 深入理解Java并发之synchronized实现原理

线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据...

2018-06-30 09:58:13 314

转载 JDK, JRE 和JVM的区别

转自http://www.importnew.com/7021.htmlJDK, JRE 和JVM是Java编程语言的核心概念。尽管它们看起来差不多,作为程序员我们也不怎么关心这些概念,但是它们是不同的针对特定目的的产品。这是一道常见的java面试题,而本文则会一一解释这些概念并给出它们之间的区别。Java 开发工具包 (JDK)Java开发工具包是Java环境的核心组件,并提供编译、调试和运行一...

2018-06-29 10:28:02 187

转载 Java中的几种常量池

参考https://www.zhihu.com/question/559941211.运行时常量池:方法区的一部分,存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池。一般来说,除了保存Class文件中描述的符号引用外,还会把翻译出来的直接引用也存储到运行时常量池中。运行时常量池具备动态性,也就是并非预置入Class文件的内容才能进入方法区的运行时常量池,运行...

2018-06-28 20:45:12 7903 3

转载 深入Java虚拟机第一章小结:Java内存区域与内存溢出

本文转自http://blog.csdn.net/ns_code/article/details/17565503'内存区域    Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。   程序计数器(...

2018-06-26 15:04:19 143

转载 JVM常见面试题

转自:https://blog.csdn.net/zd836614437/article/details/64126826题目: http://www.jsondream.com/2016/12/04/java-interview-question.html答案如下:1. 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序答:先静态、先父后子。 先静态:...

2018-06-26 14:54:14 265

转载 Java常见面试题

转自https://blog.csdn.net/hsk256/article/details/4910495511.JVM内存分哪几个区,每个区的作用是什么?java虚拟机主要分为以下一个区:方法区:1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载2. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时...

2018-06-26 14:36:16 137

原创 排序小结

1.各种排序性能分析:2.常见的几种时间复杂度曲线:

2018-06-25 08:16:36 234

原创 各种常见查找方法的性能小结

自己的理解:1)我们平时说的时间复杂度都是指最坏情况下的运行时间的增长数量级即没有特殊说明都是指的是最坏时间复杂度。2)二分查找的查找速度较快是O(logN)级别,但是插入时,因为基于数组结构,所以是O(N)级别。想到我们常见的链表,它的插入较快,但是无法使用二分查找,而二叉查找树可以将二叉查找和链表的优势结合起来,在平均情况下(树平衡时),二分查找树的查找和插入都是对数级别的。但是如果二叉查找树...

2018-06-23 15:11:55 1449

转载 广度/宽度优先搜索(BFS) 【算法入门】

本文转自:https://blog.csdn.net/raphealguo/article/details/75234111.前言广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名。 一般可以用它做什么呢?一个最直观经典的例子就是走迷宫,我们从起点开始,找出到终点的最短路程,很多最短路径...

2018-06-23 14:57:05 2053

原创 Java基础做题记录

1.接口中的方法只能使用public 和abstract修饰A:接口中不能有方法体B:接口中方法只能用public和abstract修饰总结: 接口中的方法默认public abstract 修饰接口中的变量默认public final修饰2.关于构造方法  识别合法的构造方法; 1:构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造...

2018-06-23 10:21:59 507

原创 动态规划问题小结

1.爬楼梯问题,到达楼梯的第i阶有多少中爬法关键:第i阶楼梯,只可能从楼梯第i-1阶与i-2阶到达,所以到达第i阶的爬法与第i-1阶、第i-2阶的爬法直接相关。这类问题分为四步:1)原问题与子问题:找到子问题2)第i个状态即为i阶台阶的所有走法数量3)确认边界状态的值,边界状态为1阶台阶有一种走法,2阶有两种走法,即dp[1]=1,d[2]=24)确定状态转移方程dp[n] = dp[i-1] +...

2018-06-20 22:24:31 266

原创 关于堆的学习

1.堆的概念大顶堆:每个节点的值都大于或等于其左右孩子节点的值,下图是完全二叉树是大顶堆小顶堆:每个节点的值都小于或等于其左右孩子节点的值如果我们用指针来表示大顶堆,那么每个结点需要三个指针来找到它的上下结点(父结点和两个子结点各需要一个),但如果使用完全二叉树,表达就会边的特别方便,如下图所示。完全二叉树使用数组而不需要指针就可以表示大顶堆。(注意为了方便,是从下标1开始存放元素的)...

2018-06-20 10:01:55 270

转载 Java线程面试题合集(含答案)

来源:Java线程面试题下面是我自己收集整理的Java线程相关的面试题,可以用它来好好准备面试。参考文档:《Java核心技术 卷一》Java线程面试题 Top 50:http://www.importnew.com/12773.htmlJAVA多线程和并发基础面试问答: http://ifeve.com/java-multi-threading-concurrency-interview-ques...

2018-06-20 07:53:41 530

原创 剑指 Offer 数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方注意点:1)对特殊输入的处理,如果是一个数为0,0的负数次方不存在,同时考虑分为数的正数次方和数的负数次方的两种情况。2)通过递归方式求整数的n次方的时间复杂度是O(logn)3)使用为运算效率较高。例如数x/2可以使用x>>1代替,x%2可以使用x&1来代替。代...

2018-06-19 21:51:49 173

原创 剑指Offer数组中出现超过一半的数字+最小的k个数

一.快速排序首先介绍一下快速排序,因为这两题都可以使用快速排序的Partition函数来做。快速排序算法的关键是在数组中选择一个数字假设为pivot,然后将数组分为两部分,小于该数字的方法该数字前面,大于该数字的放到该数字的后面。这个函数的实现是通过设置两个指针i和j来操作,这也是数组操作常用的方法。该函数可用于得到数组中任意第k大的数字(下面的两题都使用该方法)。代码实现: public in...

2018-06-19 10:32:06 212

原创 链表的倒数第k个节点

题目描述输入一个链表,输出该链表中倒数第k个结点分析:方法一:遍历两次链表,第一个统计出链表的节点的个数(例如n个),第二次就遍历到第n-k个节点,就是倒数第k个节点。这种方法要遍历两次链表。方法二:定义两个指针,第一个指针从链表头开始先走k-1步,然后两个指针同时向前走,当走的快的指针到达链表末尾时,慢的指针指向第k个节点。方法二的代码实现:public class Solution{ ...

2018-06-18 19:34:55 172

原创 剑指offer 从尾到头打印链表的每个节点的值

题目描述输入一个链表,从尾到头打印链表每个节点的值。分析:方法一:首先想到的是递归的方式,将链表遍历后存入栈中,然后从栈中取出。方法二:递归的本质就是一个栈结构,所以也可以使用递归来实现,要实现反过来输出链表,我们每访问一个节点的时候,先递归遍历它后面的节点,再输出该节点自身,这样输出的就是链表的反转的结果。方法一代码实现:public class Solution{ public Arr...

2018-06-18 17:25:03 290

原创 剑指Offer面试题25:二叉树中和为某一值的路径

https://www.jianshu.com/p/c661cbe1d421题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode l...

2018-06-18 10:11:32 235

原创 二叉搜索树和双向链表

参考https://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。分析:题中要求输出排序的双向链表,因为在二叉搜索树的中序遍历是递增的,所以想到使用中序遍历,从小到大逐个找个节点,然后创建双向...

2018-06-17 21:58:17 231

原创 复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)分析:分为三步骤:1)复制每个节点,如复制A得到A1,并将A1插入到A的后面2)重新遍历链表,复制老节点的指针给新节点3)拆分链表,将链表拆分为原链表和复制后的链表代码实现:pu...

2018-06-17 08:47:59 126

原创 剑指Offer中的回溯法题

1.面试题38 字符串的排列输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。代码实现:class JianZhiOffer { public static void main(String[] args) { JianZhiOffer p = new JianZhiO...

2018-06-15 19:54:06 342

原创 队列的最大值

题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1},{2,[3,4,2],6,2,5,1}, {2,3,[4,...

2018-06-13 16:16:04 4413

原创 剑指offer 翻转字符串

1.题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?方法一:使用字符串函数s...

2018-06-13 11:10:26 767

原创 二叉树的查找

1)如果是二叉排序树在二叉排序树中查找某值,此时利用二叉排序树的性质,节点的左子树都是小于这个节点,节点的右子树都是大于这个节点的,所以从某节点node开始查找,如果在要找的值小于这个节点的值,就在左子树中查找,如果要找的值大于这个节点的值,就在该节点的右子树中查找,这里看出,最终查找后,从根节点到停止的节点,只有一条路径,所以二叉查找树的效率很高,如果一直找到叶子节点,还没有找到,就返回fals...

2018-06-11 11:22:13 13994

原创 剑指offer 二分查找的递归和非递归方式

1.典型的二分查找的两种方式(注意二分查找的适用条件是递增的数组)1).递归方式class BinaryTree{ public static void main(String[] args) { int[] a = {1,3,4,6,8,9,10,11,23}; System.out.println(search(a,12,0,a.length-1)); } pu......

2018-06-10 15:01:28 603 2

原创 回调机制学习笔记

参考:https://blog.csdn.net/xiaanming/article/details/8703708http://ifeve.com/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA%EF%BC%9A-java%E5%9B%9E%E8%B0%83%E6%9C%BA%E5%88%B6%E5%BC%82%E6%AD%A5/回调:A类中调用B类的某个方法C...

2018-06-08 10:09:53 434

原创 代理模式

静态代理:静态代理有代理对象和被代理对象,它们都实现了相同的接口或继承了相同的抽象类。代理对象持有被代理对象的引用,并且通过构造函数对被代理对象初始化。代码示例:interface Moveable { void move();}class Tank implements Moveable{ public void move(){ System.out.printl...

2018-06-07 18:54:15 139

原创 贪心算法小结

1.最佳支付方法有1元、5元、10元、20元、100元、200元的钞票无穷多张。现使用这些钞票支付X元,最少需要多少张。例如,X=628,最佳支付方法:3张200的,1张20的,3张1块的,共需要3+1+1+3=8张。这里给出的钱金额:1,5,10,20,100是成倍数关系的,所以当使用一张较大面额的钞票时,若用较小面额钞票替换,一定需要更多的其他面额的钞票,所以尽可能使用面额较大的钞票,所以可以...

2018-06-06 22:00:39 1610

原创 二叉排序树的整理

1.二叉数的类设计使用内部类,这个属性可以设置为private,如果是外部类,那么不能设计 为private,否则会多次使用set,get方法,很麻烦。 class Node //使用内部类 { int data; private Node left,right; public Node(int data) { this.data = data; } }2.插入一个...

2018-06-06 21:17:02 245

原创 二叉树的整理

1.二叉树的创建二叉树的创建,这里使用的"#"作为停止符(创建的时候也是前序的方式创建的) public void createBiTree() { root = createBiTree(root); } private Node createBiTree(Node x) { Scanner in = new Scanner(System.in); String ...

2018-06-06 15:47:22 329

原创 future设计模式学习

1.简单的Future模式实现原理1).定义了一个接口Data,这是客户端希望获取的数据,这个接口有两个实现分别是RealData和FutureData,RealData是真实的数据,FutureData是用来在真实数据构建完后获取它的。2).在提出一个请求后,会立即返回一个FutureData类型的数据futureData,这里注意此时futureData中并没有真实值,此时如果使用future...

2018-06-05 15:30:17 212

原创 观察者模式学习

1.观察者模式又称为订阅者模式1)观察者模式中有如下几个角色:抽象观察者        Observer具体观察者        ObserverA,ObServerB抽象主题            Subject具体主题            SubjectA2)观察者模式又分为推方式和拉方式:推方式:主题对象推送主题的详细信息,不管观察者是否需要。拉方式:主题对象在通知观察者的时候,只传递少量...

2018-06-05 10:51:01 226

数据结构与 算法分析Java语言描述

数据结构与算法分析Java语言描述的课本源码,数据结构与算法分析Java语言描述的课本源码

2018-04-05

空空如也

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

TA关注的人

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