自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Yuwen's Hero

专注面试题, 博客 http://blog.csdn.net/beiyeqingteng 的镜像站

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

原创 Remove Duplicate Letters

Given a string which contains only lowercase letters, remove duplicate letters so that every letter appear once and only once. You must make sure your result is the smallest in lexicographical order a

2016-02-02 01:00:46 1653

原创 Longest Increasing Path in a Matrix

Given an integer matrix, find the length of the longest increasing path.From each cell, you can either move to four directions: left, right, up or down. You may NOT move diagonally or move outside

2016-01-31 00:26:08 1451 1

转载 工厂三兄弟之抽象工厂模式

抽象工厂模式概述抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:       抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它

2015-11-06 11:25:35 2027

转载 工厂三兄弟之工厂方法模式

工厂方法模式概述在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,需要在其中加入必要的业务逻辑,这违背了“开闭原则”。此外,在简单工厂模式中,所有的产品都由同一个工厂创建,工厂类职责较重,业务逻辑较为复杂,具体产品与工厂

2015-11-06 10:52:44 986

转载 工厂三兄弟之简单工厂模式

简单工厂模式概述简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下:首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂

2015-11-06 10:26:44 837

转载 创建对象与使用对象——谈谈工厂的作用

与一个对象相关的职责通常有三类:对象本身所具有的职责、创建对象的职责和使用对象的职责。对象本身的职责比较容易理解,就是对象自身所具有的一些数据和行为,可通过一些公开的方法来实现它的职责。在本文中,我们将简单讨论一下对象的创建职责和使用职责。在Java语言中,我们通常有以下几种创建对象的方式:       (1) 使用new关键字直接创建对象;       (2)

2015-11-06 07:10:40 1166

转载 深入浅出UML类图

类与类之间的关系在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式。1. 关联关系关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。在UML类图中,用实线连接有关联关系的对象所对应的类,在使用Java、C#

2015-11-06 01:06:25 684 1

转载 java多线程之死锁

1. Java中导致死锁的原因Java中死锁最简单的情况是,一个线程T1持有锁L1并且申请获得锁L2,而另一个线程T2持有锁L2并且申请获得锁L1,因为默认的锁申请操作都是阻塞的,所以线程T1和T2永远被阻塞了。导致了死锁。这是最容易理解也是最简单的死锁的形式。但是实际环境中的死锁往往比这个复杂的多。可能会有多个线程形成了一个死锁的环路,比如:线程T1持有锁L1并且申请获得锁L2,而线程T

2015-11-05 02:35:30 618

原创 JAVA多线程之常用方法

在多线程编程中,经常会使用到如下方法:1. public final void wait()  throws InterruptedException,IllegalMonitorStateException该方法用来将当前线程置入休眠状态,直到接到通知或被中断为止。在调用wait()之前,线程必须要获得该对象的对象级别锁,即只能在同步方法或同步块中调用wait()方法。进入wait(

2015-11-04 03:44:06 993 1

转载 How Volatile in Java works? Example of volatile keyword in Java

How to use Volatile keyword in JavaWhat is volatile variable in Java and when to use Volatile variable in Java is famous multi-threading interview question in Java interviews. Though many programm

2015-11-03 11:50:55 1236

原创 java多线程之happens-before

1、背景问题在讲happens-before之前,先引入一个例子:假定我们有已经被初始化的变量:int counter = 0;这个 counter 变量被两个线程所共有,也就是说线程A和线程B都可以获取或者更改counter的值。 这里我们假设线程A要增加counter的值:counter++;然后,线程B打印counter的值System.out.println(c

2015-11-03 11:24:19 2288

原创 Java多线程之内存可见性

1、什么是JAVA 内存模型Java Memory Model (JAVA 内存模型)描述线程之间如何通过内存(memory)来进行交互。 具体说来, JVM中存在一个主存区(Main Memory或Java Heap Memory),对于所有线程进行共享,而每个线程又有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作并非发生在主存区

2015-11-03 02:47:55 14103 12

转载 多线程之指令重排序

1、首先为何要指令重排序(instruction reordering)?编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段。也就是说,对于下面两条语句:int a = 10;int b = 20;在计算机执行上面两句话的时候,有可能第二条语句会先于第一条语句执行。所以,千万不要随意假设指令执行的顺序。2、是不是所有的语句的执行顺

2015-11-02 08:00:05 13423 3

转载 线程的创建

什么是进程和线程?A process is an executing instance of an application. For example, when you double-click the Microsoft Word icon, you start a process that runs Word.A thread is a basic unit to which th

2015-11-01 11:25:32 495

原创 java中如何中断thread

要中断thread的执行,我们有多种方式,有些方式是推荐的,有些方式是不推荐的,甚至是错误的。1. 可否用interrupt()方法来中断thread?为了回答这个问题,我们首先来看一个例子:class MyThread implements Runnable { public void run() { while (true) { System.out.prin

2015-11-01 07:17:33 2495

原创 生产者消费者问题源程序

问题描述:生产者消费者问题(Producer-consumer problem)是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中

2015-11-01 04:18:18 2049

原创 不使用栈把二叉树中序输出

问题:把一个二叉树中序输出,但是不能使用栈或者O(n)空间来实现。分析:把二叉树中序输出,我们可以使用递归或者采用非递归方式,但是不管是哪种方式,我们总是需要O(n)的空间,所以如果只能使用常数空间,的确很难想到,但是一旦掌握该种方法,还是挺有用的,至少拓宽了自己解决问题的思路。对于中序遍历,我们总是先输出左子树部分,再root,最后才是右子树部分。对于左子树和右子

2015-08-13 00:12:40 644

原创 数据表链接

问题:假如有一个表 ACCOUNTACCOUNTID, NAME, TYPEA001, JOHN, TUTORA002, MIKE, TUTORA003, JIM, STUDENTA004, LILY, STUDENT另一个表 APPOINTMENTSTUDENTID, TUTORIDA003, A001A004, A002备注:STUD

2014-01-19 15:09:38 851

原创 quickly find the median of a sequence of numbers

Question:Assume the user can enter a large sequence of integer numbers, please return the median of the entered numbers.Idea: Create an min-heap and max-heap, and save the entered number to the

2013-11-02 06:37:58 1003

原创 Gas Station

There are N gas stations along a circular route, where the amount of gas at station i is gas[i].  You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to

2013-10-13 11:53:16 826

原创 determine S is a subsequence of T

Question:You're given a large string T, and a stream of smaller string S1, S2, S3 ... Determine whether Si is a subsequence of T. |T| |Si| alphabet is 'a' - 'z'Example:T = abcdefgS1 =

2013-10-10 11:37:56 1072

原创 insert into table from another table without duplicate

Table src:CREATE TABLE `src` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL)Table dest:CREATE TABLE `dest` ( `a` int(11) NOT NULL, `b` int(11) DEFAUL

2013-10-08 02:18:52 766

转载 How to find duplicate rows with SQL

How to find duplicate rows with SQLThis article shows how to find duplicated rows in a database table. This is a very common beginner question. The basic technique is straightforward. I’ll also

2013-10-08 01:10:05 1287

转载 组合模式

组合模式概述      对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象)并调用执行,牵一而动百,其中使用了递归调用的机制来对整个结构进行处理。由于容器对象和叶子对象在功能上的区别,在使用这些对象的代码中必须有区别地对待容器对象和叶子对象,而实际上大多数情况下我们希望一致地处理它们,因为对于这些

2013-04-23 01:22:19 1300

转载 外观模式

外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。 1. 外观模式概述      不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备茶叶、茶具和开水,如图1(A)所示,而去茶馆喝茶,最简单的方式就是跟茶馆服务员说想要

2013-04-23 00:13:53 1773 1

原创 输出个数最多的连续的字符

问题:给定一个字符串,输出个数最多的连续的字符(不含空格)。比如:"this is a sentence" => [t, h, i, s, i, s, a, s, e, n, t, e, n, c, e]"thiis iss a senntencee" => [i, s, n, e]"thiisss iss a senntttenceee" => [s, t, e]"t

2013-04-22 13:01:32 1115

转载 迭代器模式

迭代器模式(Iterator Pattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示。迭代器模式包含如下角色:Iterator: 抽象迭代器ConcreteIterator: 具体迭代器Aggregate: 抽象聚合类ConcreteAggregate: 具体聚合类实例分析:     AggregateJava代

2013-04-20 00:35:43 663

转载 面向对象设计原则之依赖倒转原则

如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。依赖倒转原则是Robert C. Martin在1996年为“C++Reporter”所写的专栏Engineering Notebook的第三篇,后来加入到他在2002年出版的经典著作“Agile Software Development, Principles, Patter

2013-04-17 04:18:01 868

转载 设计模式六大原则:里氏替换原则

里氏代换原则由2008年图灵奖得主、美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出。其严格表述如下:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型S是类型T的子类型。这个定义比较拗口且难以理解,因此我们一般使用它的另一个通

2013-04-14 05:37:54 1187

转载 设计模式中类的关系

在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。1. 依赖(Dependence)         依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在java中的表现还是比较直

2013-04-13 04:54:06 642

转载 Reservoir Sampling

Reservoir sampling is a family of randomized algorithms for randomly choosing k samples from a list of n items, where n is either a very large or unknown number. Typically n is large enough that the l

2013-04-06 03:32:46 1130

转载 双层 not exist 嵌套

关系模式:学生(学号,姓名,系别,年龄)课程(课程号,课程名,学时)选读(学号,课程号,成绩)问题:检索选读全部课程的学生姓名select 学生.姓名 from 学生where not exists(select * from 课程 where not exists(select * from 选读 where 学号=学生.学号 and 课程号=课程.课程号)

2013-04-06 03:27:30 3332

原创 Counting sort

The running time of counting sort  is O(n), and usually, the running time of sorting algorithms will be either O(n^2) or O(n lgn), the reason why counting sort is O(n) is that it doesn't have the comp

2013-03-27 07:12:04 676

原创 Trie + recursion + pruning to implement Boggle

If you want to know what Boggle is, please wiki or google it. Or refer to http://goo.gl/GythQ In this implementation, we need to use a dictionary. Go to http://goo.gl/vaq4Z to download it and as it

2013-03-18 04:00:10 1401

原创 数组中找出第k大的值

最简单的办法,就是先排序,然后把第K个值找出来,这样算法的复杂度为 O(nlgn).其实还有一种更简单的方法,其平均复杂度 为 O(lgn),当然,最坏是 O(n^2). 这种算法就是利用了 quicksort 和二分查找 的做法。先把数组分成两个部分,左边一个部分比pivot小,另一边比pivot大。然后再观察pivot的位置,如果pivot的位置比 K大,那么那个第K个值就一定在pivot

2013-03-13 23:48:31 1212

原创 快速找出2到n所有的素数

public static ArrayList primeNumbers(int n) { if (n < 2) return null; ArrayList list = new ArrayList(); boolean[] prime = new boolean[n + 1]; for (int i = 2; i < n + 1; i++) { prime[i] = tr

2013-03-11 12:29:40 2628

原创 rotate matrix

Given an image represented by a matrix, write a method to rotate the image by 90 degrees. Can you do this in place?static void rotateClockwise(int[][] matrix) { int length = matrix.length - 1; for

2013-02-26 12:18:29 1258

原创 O变X

给你一个n * n 的二维char数组 内部存的是 'X' 和 'O',形式如下X  X  X  X  XX  O  O  O  XX  X  O  O  XX  X  X  O  XX  O  X  X  X编写一个函数将被'X'包围的'O'统统变成'X'。 比如下标为 (1,1) (1,2) (1,3) (2,2) (2,3) (3,3)的'O'需要被变成'X',而下标

2013-02-24 12:45:11 769

原创 Group of 1s in a Matrix

Given a matrix with 1s and 0s, please find the number of groups of 1s. A group is defined by horizontally or vertically adjacent 1s. For example, there are four groups of 1s in figure below.Anal

2013-02-24 04:48:33 541

原创 Sum of a tree

You are given a tree, and the nodes in the tree may have more than two child nodes, calculate the sum of the tree where the root to the leaf is considered as a number.public class TreeSum { priva

2013-02-22 07:40:36 553

空空如也

空空如也

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

TA关注的人

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