自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HWHuangeian的博客

每天学习一点点,每天进步一点点

  • 博客(45)
  • 收藏
  • 关注

原创 链表、链式栈、链式队列、二叉树的C简要实现

/*单链表简要实现 * * */ #include #include struct Node; typedef struct Node* PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; typede

2016-02-29 17:27:52 826

原创 操作系统的存储管理

一、存储器抽象1.无存储器抽象早期的大中小型计算机都没有存储器抽象。每一个程序都直接访问物理内存,这么做相当于把物理地址暴露给进程,这样会带来几个严重的问题:如果用户程序可以寻址内存的每个字节,他们就可以很容易地破坏操作系统,从而使系统慢慢停止运行使用这种模型,想要同时运行多个程序是很困难的2.一种存储器抽象:地址空间要保证多个应用程

2015-12-12 22:14:03 3408

原创 HashMap原理分析

HashMap基于哈希表的Map接口实现,其中每个元素是一个key-value对,允许使用null值和null键。内部使用单链表的方式解决hash冲突的问题,当容量不足时,它会自动增长容量。HashMap中的部分字段:static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//默认初始容量为16static final int MAXIMUM

2015-11-19 18:50:37 532

原创 ArrayList与Vector异同

List是一个接口,里面声明有操作“表”这一种数据结构的通用方法,具体实现类实现此接口后,根据实现的不同可对通用方法进行不同程度的扩展,它主要有四个实现类:ArrayList,LinkedList,Vector,Stack。ArrayList

2015-11-09 22:45:56 914

原创 List与ArrayList起头的区别

首先List是一个接口,而ArrayList是一个类。当声明为List list = new ArrayList()时,这句话创建了一个ArrayList的对象,然后把它上溯至List,此时它是个List对象,可以使用List固有的属性和方法,但是不能使用原来ArrayList的属性。 List list = new ArrayList(); list.trimToSiz

2015-11-06 18:29:05 529

原创 String、StringBuilder与StringBuffer

StringString类的部分源代码:public final class String { private final char value[]; public String() { this.value = new char[0]; } public String(String original) { /*把字符串分

2015-10-30 14:11:05 449

转载 Java类初始化顺序

我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点: public class InitialOrderTest { // 静态变量 public static String staticField = "静态变量"; // 变量 public Stri

2015-10-26 22:43:07 362

原创 finalize()与System.gc()

GC的特殊情况与finalize()的“假定”原理GC负责回收无用对象占据的内存资源。但也有特殊情况:假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块“特殊”内存。为了应对这种情况,Java允许在类中定义一个名为finalize()的方法。它的工作原理“假定”是这样的:一旦GC准备好释放对象占用的存

2015-10-21 20:02:27 545

转载 volatile关键字解读

volatile用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的值,volatile很容易被误用.下面看一个例子,我们实现一个计数器,每次线程启动的时候,会调用计数器inc方法,对计数器进行加一package test;public class Counter { public static int count = 0; pub

2015-10-17 20:31:17 730

原创 单例模式学习笔记

单例模式模式概念:确保一个类只有一个实例,并提供一个全局访问点要点:(1)单件模式确保程序中一个类最多只有一个实例。(2)单件模式也提供访问这个实例的全局点。(3)在Java中实现单件模式需要私有的构造器、一个静态方法和一个静态变量。(4)确定在性能和资源上的限制,然后小心地选择适当的方案来实现单件,以解决多线程问题(我们必须认定所有的程序都是多线程的)。(5)如果不采

2015-10-17 18:48:43 488

原创 Java四种对象引用类型:强软弱虚

Given a binary tree, determine if it is height-balanced.For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never diffe

2015-10-16 19:21:07 1491

原创 Java对象自我救赎机制

Given a binary tree, flatten it to a linked list in-place.For example,Given 1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like: 1

2015-10-16 18:04:24 819

转载 JVM类加载机制

Follow up for problem "Populating Next Right Pointers in Each Node".What if the given tree could be any binary tree? Would your previous solution still work?For example,Given the followi

2015-10-15 16:31:57 805

转载 Java中堆与栈的关系

Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }Populate each next pointer to point to its next right node.

2015-10-15 16:28:31 5472 1

原创 进程&线程小结

进程一. 进程的基本概念进程是系统进行资源分配的基本单位(竞争计算机资源的基本单位)一个进程就是一个程序在内存中的执行实例,其包括PC、寄存器和变量的当前值等一个进程可以包含多个程序,它是关于某个数据集合的一次运行活动每一个进程有独立的地址空间和控制线程任意一段时间会有多个进程在运行,但任意时刻只有一个进程在运行二. 进程的创建有4种主要事件导致进程的创建:系统初始化执行了正在运行的进程所调用的进程创建系统调用用户请求创建一个进程一个批处理作业的初始化三. 进程的状态1.

2015-10-14 23:07:57 640

原创 磁臂调度算法

一. 前言 每当一个进程需要对磁盘进行I/O操作,它就向操作系统发出一个系统调用。该调用请求指定了一些信息:操作是输入还是输出所传输的磁盘地址是什么所传输的内存地址是什么所传输的扇区数是什么二. 调度算法1. FCFS调度基本概念:先来先服务算法,这种算法本身比较公平,但是它通常不提供最快的服务优点:公平、简单、易于实现缺点:平均寻道时间大,仅应用在磁盘I/O较少的场合 2. SSTF调度基本概念:在将磁头移到远处以处理其他请求之前,先处理靠近当前磁头

2015-10-14 21:59:06 5493 1

原创 死锁小结

资源的分类 计算机系统中的资源分为两类:可抢占的和不可抢占的。 可抢占资源可以从拥有它的进程中抢占而不会产生任何副作用,例如存储器就是一类可抢占的资源;不可抢占资源是指在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来,例如一个进程已开始刻盘,突然将CD刻录机分配给另一个进程,那么将划坏CD盘,在任何时刻CD刻录机都是不可抢占的。 总的来说,死锁和不可抢占资源有关。死锁概述 一. 死锁定义 如果一个进程集合中的

2015-10-13 21:16:40 1321

转载 Java虚拟机类生命周期

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.For example:Given the below binary tree and sum

2015-10-13 20:58:52 423

原创 DNS域名系统

前言 学过计算机网络的我们知道,整个Internet网络就是一个单一的、抽象的网络,各个主机通过全世界范围内唯一的32位标识符---IP地址来标识唯一性,很显然,在互联网中它们只能通过IP地址来识别对方的身份。所以,当我们在浏览器地址栏中输入目标网站的IP地址后,按下回车,我们就可以访问到目标网站,例如:在地址栏输入百度的IP地址:202.108.22.5,按下回车,我们就可以访问到百度主页。 然而,当我们想要访问的网站变多,我们就不得不记住一串又一串长达32位的难以记忆的I

2015-10-13 20:57:13 936

原创 UDP&TCP协议

用户数据报协议UDPUDP的特点UDP是面向无连接的:即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。UDP使用尽最大努力交付:即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有很多参数)。UDP是面向报文的:发送方的UDP对应用程序交下来的报文,既不合并,也不拆分,而是在添加首部后就向下交付IP层,也就是说,UDP一次交付一个完整的报文。因此,UDP发送的报文长度是应用程序给出的。若报文太长,UDP把它交给IP层后,IP层在传送

2015-10-12 19:28:08 991

原创 HTTP协议

HTTP协议Http协议的特点无连接:HTTP协议本身是无连接的。无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。面向文本:由于HTTP协议是面向文本的,故在报文中的每一个字段都是一些ASCII码,因而各个字段的长度都是不确定的。 Http的报文结构 Http有两类报文:

2015-10-12 19:22:29 905

原创 八大排序算法小结

前言 规定以下方法:less(int i, int j):less方法用于对元素进行比较。如果i<j,返回true;否则返回false。exch(int[] a, int i, int j):exch方法用于将元素交换位置。show(int[] a):show方法用于展示排序结果。 稳定性概念:稳定排序通俗地讲就是能保证排序前2个相等的数在其排序后相对次序不变,即如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前,否则排序就是不稳定的。选择排序

2015-10-12 19:11:27 341

原创 装饰模式学习笔记

装饰模式模式概念:装饰器模式动态地将责任附加到对象上,若要扩展功能,装饰器模式提供了比继承更有弹性的替代方案设计思想:装饰者和被装饰对象有相同的超类型,可以用一个或多个装饰者包装一个对象,装饰者可以在所委托被装饰者的行为之前与/或之后加上自己的行为,以达到特定的目的。一个缺点,利用装饰器模式,常常造成设计中有大量的小类,数量实在太多,容易造成困扰/** * 饮料抽象类 *

2015-10-11 18:43:38 594

转载 Java内存模型与线程

随着多核CPU的高速发展,为了充分利用硬件的计算资源,操作系统的并发多任务功能正变得越来越重要,但是CPU在进行计算时,还需要从内存读取输出,并将计算结果存放到内存中,然而由于CPU的运算速度比内存高几个数量级,CPU内的寄存器数量和容量有限,为了不让CPU长时间处于等待内存的空闲状态,在CPU和内存之间引入了速度接近CPU的高速缓存Cache作为CPU和内存之间的缓冲。计算机硬件并发的原理如下:Java虚拟机对并发的支持类似于计算机硬件,java虚拟机的并发支持是通过java虚拟机的内存模型来实现

2015-10-11 17:15:31 309

原创 145.Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes' values.For example:Given binary tree {1,#,2,3}, 1 \ 2 / 3return [3,2,1]./** * Definition for a

2015-10-11 17:04:43 309

原创 102.Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).For example:Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20

2015-10-11 16:59:50 278

转载 Java虚拟机垃圾收集器

Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。(1).Serial垃圾收集器:Serial

2015-10-10 00:00:40 446

转载 垃圾回收算法

Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的内存。常用的垃圾回收算法有:(1).引用计数算法:给对象中添加一个引用计数器

2015-10-09 23:59:11 364

转载 Java内存溢出示例

通过简单的小例子程序,演示java虚拟机各部分内存溢出情况:(1).java堆溢出:Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收实例对象,就会在对象数量达到堆最大容量时产生OutOfMemoryError异常。想要方便快速地产生堆溢出,要使用如下java虚拟机参数:-Xms10m(最小堆内存为10MB),-

2015-10-09 23:57:45 540

转载 Java内存结构

java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下:其中方法区和堆是由所有线程共享的数据区。Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区。(1).程序计数器:是一块较小的内存空间,其作用可以看作是当前线程所执行的字节码的行号指示器,字节码解析器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令。程

2015-10-09 23:54:55 326

原创 观察者模式学习笔记

观察者模式模式概念:观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新设计思想:观察者模式提供了一种对象设计,让主题和观察者之间松耦合;主题不需要知道观察者的具体类是谁,主题唯一依赖的东西是一个实现Observer接口的对象列表,所以我们可以随时增加或删除观察者;如果有哪个具体类需要当观察者,所有要做的就是在新的类里实现此观察者接口,

2015-10-08 23:26:52 494

原创 策略模式学习笔记

策略模式模式概念:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户设计思想:将变化的部分封装成接口及其具体实现类,例如将飞行行为和呱呱叫行为封装起来,这样的设计,使得它们可以被其他的对象复用,因为这些行为已经与鸭子类无关了,我们也可以新增一些行为,不会影响到既有的行为类,也不会影响“使用”到飞行行为的鸭子类;从Duck类的角度来看,把不变的部分留下

2015-10-08 21:43:00 571

原创 94.Binary Tree Inorder Traversal

Given a binary tree, return the inorder traversal of its nodes' values.For example:Given binary tree {1,#,2,3}, 1 \ 2 / 3return [1,3,2].Note: Recursive solutio

2015-10-08 19:07:50 255

原创 144.Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes' values.For example:Given binary tree {1,#,2,3}, 1 \ 2 / 3return [1,2,3].Note: Recursive soluti

2015-10-08 19:06:10 305

原创 217.Contains Duplicate

Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element

2015-10-08 19:04:45 335

原创 260.Single Number III

Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.For example:Given 

2015-10-08 19:02:40 345

原创 191.Number of 1 Bits

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).For example, the 32-bit integer ’11' has binary representation 000000

2015-10-08 19:01:20 357

原创 235.Lowest Common Ancestor of a Binary Search Tree

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined betw

2015-10-08 18:59:38 355

原创 226.Invert Binary Tree

Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9to 4 / \ 7 2 / \ / \9 6 3 1/** * Definition for a binary tree node. * public class TreeNode

2015-10-08 18:57:15 305

原创 283.Move Zeroes

public class Solution { /* * 设置一个标志位i,遍历数组每个值 * 如果值为0,标志位i加一;否则加入自定义数组中 * 遍历结束后将个数为i的0追加到自定义数组尾部 */ public void moveZeroes(int[] nums) { int[] arrayNums = new int[n

2015-10-08 18:54:44 317

空空如也

空空如也

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

TA关注的人

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