自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素

用运行速度最优的方法从LinkedList列表里删除重复的元素,例如A->B->BB->B->C,返回A->B->BB->C。考试的时候没完全想明白,考完又想了想,其实还是蛮简单的。思路很简单:利用一个Set存放LinkedList中的元素,在迭代的过程中,判断当前元素是否在Set中出现过,如果出现过就删除,也就是说我们在遍历的过程中进行删除操作,所以这里要用到ListIterator,而不能

2013-10-12 09:18:15 2636

原创 前缀、中缀、后缀表达式及其相互转化的Java实现

一、中缀表达式转换为前缀、后缀表达式给个中缀表达式:a+b*c-(d+e)   首先根据运算符的优先级给所有运算单位加括号:((a+(b*c))-(d+e))   将运算符号移动到对应括号的前面然后去掉所有括号就转换为前缀表达式:     -( +(a *(bc)) +(de)) ->  -+a*bc+de   将运算符号移动到对应括号的后面然后去掉所有括号就转换为后缀表达式:

2013-10-12 09:00:58 2420

原创 由阿里巴巴一道笔试题看Java静态代码块、静态函数、动态代码块、构造函数等的执行顺序

一、阿里巴巴笔试题:public class Test { public static int k = 0; public static Test t1 = new Test("t1"); public static Test t2 = new Test("t2"); public static int i = print("i"); public static int n =

2013-10-08 07:22:34 3111

原创 synchronized详解

synchronized详解:被它修饰的代码块或方法,能够保证同一时间只能有一个线程执行该段代码.一、当两个并发线程访问同一个对象object的synchronized(this)同步代码块/同步方法的时候,另一个线程仍可以访问该object的非同步代码块/非同步方法。package com.syn;public class synTest { public static v

2013-10-02 09:49:01 873

原创 生产者消费者模式详解及代码实现

生产者消费者模式说明:1.生产者只在仓库未满时进行生产,仓库满时生产者进程被阻塞;2.消费者只在仓库非空时进行消费,仓库为空时消费者进程被阻塞;3.当消费者发现仓库为空时会通知生产者生产;4.当生产者发现仓库满时会通知消费者消费;实现的关键:共享内存中的两个同步方法,及同步方法中wait()方法的调用,同步保证了对象只能被一个线程占用,wait保证了当线程在等待过程中释放锁

2013-09-30 10:42:19 2027

原创 通过Thread.join()和CountDownLatch来实现进程同步

1.Thread.join()如果在一个进程,如main中调用另一个thread的join()函数会导致main函数阻塞,直至thread执行完毕。public class JoinTest { public static void main(String[] args) { System.out.println("main starts."); Thread thread

2013-09-29 10:18:06 777

原创 判断链表中是否存在环问题、判断两个链表是否相交问题及其扩展

一、已知一个单链表p,如何判断它是否存在环。定义两个指针fast和slow,均初始化为p,fast一次走2步,slow一次走1步,如果两个指针在q处相遇,那么存在环,相遇的地方一定是slow一圈没有走完,fast走完一圈,在走第二圈的时候。扩展:如何知道环的长度?如何找出环的连接点在哪里?带环链表的长度是多少?记录q的位置,继续走直到再碰上q那么之间走过的距离就是环的长度;slow

2013-09-23 20:36:33 741

原创 Reservoir Sampling - 蓄水池抽样

问题起源于编程珠玑Column 12中的题目10,其描述如下:  How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would yo

2013-09-22 15:56:21 855

原创 java多态性深入理解

运行时多态是面向对象程序设计代码重用的一个最强大机制,java多态性概念可以被说成“一个接口,多个方法”,java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。        方法重写overriding和重载overloading是java实现多态的不同表现,重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。如果子类中一个方法与父

2013-09-22 11:06:37 638

原创 前序、中序、后序遍历的多种非递归实现

我们先看看用前序递归如何访问整棵树:先访问跟节点,然后访问左节点,再访问右节点。如果不用递归,那该怎么做呢?仔细看一下递归程序,就会发现,其实每次都是走树的左分支(left),直到左子树为空,然后开始从递归的最深处返回,然后开始恢复递归现场,访问右子树。其实过程很简单:一直往左走 root->left->left->left...->null,由于是前序遍历,因此一遇到节点,便需要立即访问;由

2013-09-09 09:06:08 1167

转载 linux之cp/scp命令+scp命令详解

名称:cp使用权限:所有使用者使用方式:cp [options] source destcp [options] source... directory说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。把计-a 尽可能将档案状态、权限等资料都照原状予以复制。-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至

2013-07-23 13:57:40 623

原创 0/1背包问题

1.动态规划是用空间换取时间的一种方法的抽象,其关键是发现子问题和记录其结果,然后利用结果减轻计算量。0/1背包问题就应用了动态规划的思想。2.0/1背包问题:一个背包最多可以装M公斤的东西,现在有N件物品,分别为X1,X2...Xn,它们的重量分别为M1,M2...Mn,它们的价值分别为V1,V2...Vn,若某种物品只有一件,它可以放进包中,也可以不放进包中,问如何选取物品可以使得包中的物

2013-07-23 09:56:56 664

转载 linux的grep和find命令

在linux下面工作,有些命令能够大大提高效率。本文就向大家介绍find、grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们。本文结构如下:find命令find命令的一般形式find命令的常用选项及实例find与xargsgrep命令grep命令的一般形式grep正则表达式元字符集(基本集)grep命令的常用选项及实例1、find命令

2013-07-16 22:19:50 522

原创 JAVA中enum的常见用法

JAVA中enum的常见用法包括:定义并添加方法、switch、遍历、EnumSet、EnumMap1.定义enum并添加或覆盖方法public Interface Behaviour{ void print();}enum Color implements Behaviour{ RED("red",1),GREEN("green",2),BLUE("blue",

2013-07-14 14:22:35 895

原创 JAVA正则表达式

一、正则表达式基本的原字符(meta character)以及它们含义. 匹配任意一个字符 $匹配一行的结尾 ^匹配一行的开头(在[]里面表示否定)   {}定义了一个范围  [] 定义了一个字符类 () 定义了一个组 *前面出现0次以上   + 前面匹配一次以上 ?前面出现0次或一次   \后面的字符不会看作metacharacter  \w 字母数字下划线 \W 非字母数字下划线

2013-07-12 16:23:12 662

原创 JAVA 线程池

一、ThreadPoolExecutor的使用1.ThreadPoolExecutor的完整构造方法是:ThreadPoolExecutor ( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue  workQueue, RejectedExecutionHand

2013-06-28 14:28:48 959 1

转载 JAVA I/O与设计模式

一、简单介绍JAVA I/OJAVA采用流的机制来实现输入/输出,流就是数据的有序排列,而流可以是从某个源(称为流源或Source of Stream)出来,到某个目的地(称为流汇或Sink of Stream)去的。由流的方向,可以分成输入流和输出流,一个程序从输入流读取数据向输出流写数据。如,一个程序可以用FileInputStream类从一个磁盘文件读取数据,如下图所示:

2013-06-26 21:13:51 1064

原创 编程之美学习笔记——数字相关(一)

1.二进制数中1的个数①有一个字节(8bit)变量,求其二进制表示中"1"的个数。思路一:二进制数的最低位如果为1,那么它不可以被2整除,反之可以。我们可以先判断最后一位是否为1,然后右移一位,重复判断最后一位是否为1,直至该数为0;这个算法时间复杂度为O(N),其中N是这个二进制数的位数;思路二:对于一个二进制数X,运算X&(X-1)可以将最后二进制表示中的最后一位1置为0,重复该操

2013-06-19 15:28:33 843

原创 策略模式

1.什么是策略模式策略模式属于对象行为模式,其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使它们可以相互替换。2.策略模式的结构策略模式是对算法的包装,把使用算法的责任和算法本身分开,委派给不同的对象管理。环境(Context)角色:持有一个Strategy引用;抽象角色(Strategy)对象:抽象角色,由一个抽象类或借口实现,它指出所有的具体

2013-06-19 11:38:13 856

原创 观察者模式

1.什么是观察者模式观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象,这样一个主题对象在状态上的变化就能够通知所有的依赖于此对象的那些观察者对象,使这些对象能够自动更新。2.观察者模式中的角色①抽象主题(Subject)角色:维护了一个由观察者对象组成的聚集(如一个ArrayList),每个主题角色可以有任意个观察者,同时,主题角色提供增加和删除观察者对象的

2013-06-14 10:05:27 725

原创 装饰模式

1.什么是装饰模式装饰模式又称为包装(Wrapper)模式,装饰模式以客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。特点:扩展特定对象的功能,不是扩展某个类的功能;不需要子类,防止由于子类带来的复杂和混乱;对于一个给定对象,同时可能有不同的装饰对象,客户端可以通过它的需要选择合适的装饰对象。2.装饰模式的结构装饰模式以对客户端透明的方式为某个对象动态的附加更多功能,换言

2013-06-13 07:52:43 1206

原创 适配器模式

1.什么是适配器模式适配器模式把一个类的接口转换成客户端所期待的另一种接口,从而使得原来因接口不匹配而无法在一起工作的两个类能够在一起工作。或者说适配器模式主要用于希望复用一些现存的类,但是接口又与复用环境要求不一致。用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电

2013-06-12 16:24:32 966

原创 数据库主键生成策略

1.increment可以生成long、int、short类型的主键,由hibernate在内存中生成主键,每次增量为1,不依赖于底层数据库,但是因为是由hibernate生成的,所以只能有一个hibernate进程访问数据库,否则就会产生主键冲突,所以不能在集群的情况下使用;2.identity可以生成long、int、short类型的主键,是由数据库自己生成的,这个主键必须设置为自

2013-06-11 21:17:31 3119

原创 代理模式

1.什么是代理模式代理模式(Proxy)为另一个对象提供一个替身或占位符以控制该对象的访问(Provide asurrogate or placeholder for another object to control access to it),简而言之就是用一个对象来代表另一个对象。2.代理模式的作用为其它对象提供一种代理来控制该对象的访问,在某些情况下,一个客户不想或不可以直

2013-06-11 17:40:31 599

原创 约瑟夫环

题目:有0,1,...,n-1这n个数字排成一个圈,从数字0开始每次从这个圈中删除第m个数字,求出这个圆圈里剩下的最后一个数字。方法一:用环形链表模拟圆圈int lastRemaining(unsigned int n,unsigned int m){ if(n < 1 || m < 1) return -1; unsigned int i = 0;

2013-06-11 11:24:16 559

原创 视图

一、什么是视图视图是从一个或几个基本表中根据用户的需要而做成的虚表。同真实的表一样,视图包含一系列带有名称的列和行数据。视图只存储定义,而不存储实际的数据,视图在打开的瞬间通过定义从基表中搜集数据,并展现给用户。视图与查询都是由sql语句组成,但是它们也有明显的区别:1.存储上的区别,视图存储为数据库设计的一部分,而查询不是;2.更新的限制不同;3.通过sql语句可以对一个

2013-06-10 21:55:37 646

原创 索引

一、为什么要使用索引无索引的表就是一个无序的行集,如果我们要查询属性为特定值的某些记录,那么必须扫描所有的行,这是一个全表扫描,如果表中只有少数几条记录与搜索条件匹配,那么其效率是非常低的;如我们从一张学生表中查找数学不及格的同学名字及其分数,那么当同学的数量非常大时,全表扫描就不是一个好的做法。如果我们在分数这个字段上建立一个索引,此索引包括表中每行的一项,并且是排序的,那么我们就可以快速定

2013-06-09 21:39:15 637

转载 B树、B-树、B+树、B*树

B树:即二叉搜索树:所有非叶子结点之多拥有两个儿子;所有结点只存储一个关键字;非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树。B树的搜索:从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;如果B树所有非叶

2013-06-07 13:44:48 636

转载 水平分割、垂直分割和库表散列概念说明

一、水平分割根据一列或多列数据的值把数据行放到多个独立的表中,即按记录进行分割,不同的记录可以分开保存,每个子表的列数相同;水平分区将表分为多个表,每个表包含的列数相同,但是行数更少。例如,可以将一个包含十亿行的表水平分区成12个表,没个小表表示特定年份内一个月的数据。任何需要特定月份数据的查询只需要引用相应月份的表。使用场景:表很大,分割后可以降低查询时需要读的数据和索引的页数,

2013-06-06 22:51:13 1310

原创 工厂模式

程序的几个重要特性:可维护性、可复用性、灵活性、可扩展性、1.简单工厂模式以一个计算器程序为例,我们来分析,代码如下:Operation类:class Operation{ public double numberOne; public double numberTwo; private String oper; public double getResult(){

2013-06-05 16:40:44 592

原创 单例模式

什么是单例模式?单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个最好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其它实例可以被创建,并且它可以提供一个访问该实例的方法。单例模式解决了什么问题?1.全局访问:外界不能通过new来实例化该变量,但是我们又要

2013-06-04 10:27:06 504

原创 JVM较深入解析(二)

一、垃圾回收算法垃圾回收算法有哪些?按回收策略方式分:引用计数(Reference Counting):每个对象有一个引用计数器,对该对象的引用多1一个,引用计数器加1,反之减1,当应用计数器的值为0时,该对象可以回收。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Sweep):从根结点开始标记所有被引用的对象,然后遍历整个堆,把未标记的对象清除。此算法需要暂停整个

2013-05-25 08:20:53 694

原创 JVM较深入解析(一)

一、JVM基础知识Java体系结构:Java程序设计语言、Java class文件格式、Java虚拟机、Java应用编程接口(API)。这四者的关系:把Java写的源代码编译成Java class文件,然后在Java虚拟机中运行,编写程序时通过调用实现了Java API的类的方法来访问系统资源。Java虚拟机和Java API共同组成一个“平台”。JVM主要任务是装载class文件并执

2013-05-25 08:19:14 550

原创 二叉树(二)

一、判断一个二叉树A中是否包含另外一棵二叉树B思路:首先在A中找到与B的根节点值一样的节点R,然后判断A中以R为根节点的子树是不是包含二叉树B。bool ifContains(BinaryTreeNode * treeA,BinaryTreeNode * treeB){ bool result = false; if(treeB == NULL) res

2013-05-20 21:11:19 629

原创 链表(二)

一、复制复杂链表已知一个复杂链表,每个节点有一个指针pNextt指向下一个结点,同时它还有一个指针pSibling指向链表中的任意一个结点或者NULL。实现一个函数实现这个复杂链表的复制。复杂链表:struct ComplexLinkNode{ int value; ComplexLinkNode * pNext; ComplexLinkNode * pSi

2013-05-15 13:20:28 524

原创 链表(一)

链表:struct ListNode{ int value; ListNode * next;}一般链表要注意的特殊输入是链表为空,链表只有一个结点等。一、在链表末尾添加一个节点void addToTail(ListNode ** pHead,int value){ ListNode newListNode = new ListNode(); newListNode ->

2013-05-10 13:15:17 637

原创 C/C++的字符串和JAVA的String对象

1.关于C/C++的字符串与JAVA中的String对象基础知识①char str1[] = "hello world";    char str2[] = "hello world";    str1 != str2;  //str1和str2是两个字符串数组,我们会为它们分别分配两个长度为12个字节的,他们是两个初始地址不同的数组,故str1和str2不同;②char * st

2013-05-09 14:09:42 798

原创 数组

一、数组与指针int data1[] = {1,2,3,4};sizeof(data1) = 16;int * data2;sizeof(data2) = 4;    当数组作为参数传递时,它会退化为指针:int getSize(int[] data3){return sizeof(data3);}getSize(data1) = 4;二、二维数组的查找

2013-05-08 22:11:13 813

原创 Excel VBA 学习笔记(陆续更新)

1.什么是宏:宏就是一系列固定动作的集合。2.VBA窗口:工程资源窗口包含了当前在Excel中打开的所有对象;属性窗口:显示选择的Excel对象的属性;立即窗口:可以直接执行VBA语句,快捷键CTRL+G;3.对象:Application对象的workbooks集合的mysheet工作表的单元格区域A1:D10按照如下方式表示:Application.Workbooks("mysheet"

2013-05-08 10:48:03 1650

原创 旋转数组找最小值

问题:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素,例如数组{3,4,5,1,2}为数组{1,2,3,4,5}的一个旋转,该数组的最小值为1。解题思路:一个递增数组经旋转后分为两部分,它们都是递增的数组,第一个子数组的第一个元素不小于第二个子数组的最后一个元素,我们要寻找的是第一个子数组最后一个元素的下一个元素或第二

2013-05-05 11:21:00 759

空空如也

空空如也

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

TA关注的人

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