<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Yuwen's Hero]]></title><description><![CDATA[专注面试题， 博客 http://blog.youkuaiyun.com/beiyeqingteng 的镜像站]]></description><link>https://blog.youkuaiyun.com/beiyetengqing</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; beiyetengqing]]></copyright><item><title><![CDATA[Remove Duplicate Letters]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/50621196</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/50621196</guid><author>beiyetengqing</author><pubDate>Tue, 02 Feb 2016 01:00:46 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[Longest Increasing Path in a Matrix]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/50612987</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/50612987</guid><author>beiyetengqing</author><pubDate>Sun, 31 Jan 2016 00:26:08 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[工厂三兄弟之抽象工厂模式]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49680529</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49680529</guid><author>beiyetengqing</author><pubDate>Fri, 06 Nov 2015 11:25:35 +0800</pubDate><description><![CDATA[抽象工厂模式概述




抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比，抽象工厂模式中的具体工厂不只是创建一种产品，它负责创建一族产品。抽象工厂模式定义如下：







       抽象工厂模式(Abstract Factory Pattern)：提供一个创建一系列相关或相互依赖对象的接口，而无须指定它们具体的类。抽象工厂模式又称为Kit模式，它]]></description><category></category></item><item><title><![CDATA[工厂三兄弟之工厂方法模式]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49679795</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49679795</guid><author>beiyetengqing</author><pubDate>Fri, 06 Nov 2015 10:52:44 +0800</pubDate><description><![CDATA[工厂方法模式概述




在简单工厂模式中只提供一个工厂类，该工厂类处于对产品类进行实例化的中心位置，它需要知道每一个产品对象的创建细节，并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时，必须修改工厂类，需要在其中加入必要的业务逻辑，这违背了“开闭原则”。此外，在简单工厂模式中，所有的产品都由同一个工厂创建，工厂类职责较重，业务逻辑较为复杂，具体产品与工厂]]></description><category></category></item><item><title><![CDATA[工厂三兄弟之简单工厂模式]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49679315</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49679315</guid><author>beiyetengqing</author><pubDate>Fri, 06 Nov 2015 10:26:44 +0800</pubDate><description><![CDATA[简单工厂模式概述




简单工厂模式并不属于GoF 23个经典设计模式，但通常将它作为学习其他工厂模式的基础，它的设计思想很简单，其基本流程如下：




首先将需要创建的各种不同对象（例如各种不同的Chart对象）的相关代码封装到不同的类中，这些类称为具体产品类，而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中，每一个具体产品类都是抽象产品类的子类；然后提供一个工厂]]></description><category></category></item><item><title><![CDATA[创建对象与使用对象——谈谈工厂的作用]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49677731</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49677731</guid><author>beiyetengqing</author><pubDate>Fri, 06 Nov 2015 07:10:40 +0800</pubDate><description><![CDATA[与一个对象相关的职责通常有三类：对象本身所具有的职责、创建对象的职责和使用对象的职责。对象本身的职责比较容易理解，就是对象自身所具有的一些数据和行为，可通过一些公开的方法来实现它的职责。在本文中，我们将简单讨论一下对象的创建职责和使用职责。




在Java语言中，我们通常有以下几种创建对象的方式：

       (1) 使用new关键字直接创建对象；

       (2)]]></description><category></category></item><item><title><![CDATA[深入浅出UML类图]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49672379</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49672379</guid><author>beiyetengqing</author><pubDate>Fri, 06 Nov 2015 01:06:25 +0800</pubDate><description><![CDATA[类与类之间的关系

在软件系统中，类并不是孤立存在的，类与类之间存在各种关系，对于不同类型的关系，UML提供了不同的表示方式。

1. 关联关系

关联(Association)关系是类与类之间最常用的一种关系，它是一种结构化关系，用于表示一类对象与另一类对象之间有联系，如汽车和轮胎、师傅和徒弟、班级和学生等等。在UML类图中，用实线连接有关联关系的对象所对应的类，在使用Java、C#]]></description><category></category></item><item><title><![CDATA[java多线程之死锁]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49655423</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49655423</guid><author>beiyetengqing</author><pubDate>Thu, 05 Nov 2015 02:35:30 +0800</pubDate><description><![CDATA[1. Java中导致死锁的原因

Java中死锁最简单的情况是，一个线程T1持有锁L1并且申请获得锁L2，而另一个线程T2持有锁L2并且申请获得锁L1，因为默认的锁申请操作都是阻塞的，所以线程T1和T2永远被阻塞了。导致了死锁。这是最容易理解也是最简单的死锁的形式。但是实际环境中的死锁往往比这个复杂的多。可能会有多个线程形成了一个死锁的环路，比如：线程T1持有锁L1并且申请获得锁L2，而线程T]]></description><category></category></item><item><title><![CDATA[JAVA多线程之常用方法]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49625089</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49625089</guid><author>beiyetengqing</author><pubDate>Wed, 04 Nov 2015 03:44:06 +0800</pubDate><description><![CDATA[在多线程编程中，经常会使用到如下方法：
1. public final void wait()  throws InterruptedException,IllegalMonitorStateException

该方法用来将当前线程置入休眠状态，直到接到通知或被中断为止。在调用wait（）之前，线程必须要获得该对象的对象级别锁，即只能在同步方法或同步块中调用wait（）方法。进入wait（]]></description><category></category></item><item><title><![CDATA[How Volatile in Java works? Example of volatile keyword in Java]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49614191</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49614191</guid><author>beiyetengqing</author><pubDate>Tue, 03 Nov 2015 11:50:55 +0800</pubDate><description><![CDATA[How to use Volatile keyword in Java

What 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]]></description><category></category></item><item><title><![CDATA[java多线程之happens-before]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49608463</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49608463</guid><author>beiyetengqing</author><pubDate>Tue, 03 Nov 2015 11:24:19 +0800</pubDate><description><![CDATA[1、背景问题
在讲happens-before之前，先引入一个例子：
假定我们有已经被初始化的变量：
int counter = 0;
这个 counter 变量被两个线程所共有，也就是说线程A和线程B都可以获取或者更改counter的值。 这里我们假设线程A要增加counter的值:
counter++;
然后，线程B打印counter的值
System.out.println(c]]></description><category></category></item><item><title><![CDATA[Java多线程之内存可见性]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49583381</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49583381</guid><author>beiyetengqing</author><pubDate>Tue, 03 Nov 2015 02:47:55 +0800</pubDate><description><![CDATA[1、什么是JAVA 内存模型
Java Memory Model (JAVA 内存模型）描述线程之间如何通过内存(memory)来进行交互。 具体说来， JVM中存在一个主存区（Main Memory或Java Heap Memory），对于所有线程进行共享，而每个线程又有自己的工作内存（Working Memory），工作内存中保存的是主存中某些变量的拷贝，线程对所有变量的操作并非发生在主存区]]></description><category></category></item><item><title><![CDATA[多线程之指令重排序]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49580559</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49580559</guid><author>beiyetengqing</author><pubDate>Mon, 02 Nov 2015 08:00:05 +0800</pubDate><description><![CDATA[1、首先为何要指令重排序（instruction reordering）？

编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段。
也就是说，对于下面两条语句：
int a = 10;
int b = 20;


在计算机执行上面两句话的时候，有可能第二条语句会先于第一条语句执行。所以，千万不要随意假设指令执行的顺序。


2、是不是所有的语句的执行顺]]></description><category></category></item><item><title><![CDATA[线程的创建]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49556383</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49556383</guid><author>beiyetengqing</author><pubDate>Sun, 01 Nov 2015 11:25:32 +0800</pubDate><description><![CDATA[什么是进程和线程？

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]]></description><category></category></item><item><title><![CDATA[java中如何中断thread]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49551989</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49551989</guid><author>beiyetengqing</author><pubDate>Sun, 01 Nov 2015 07:17:33 +0800</pubDate><description><![CDATA[要中断thread的执行，我们有多种方式，有些方式是推荐的，有些方式是不推荐的，甚至是错误的。


1. 可否用interrupt（）方法来中断thread?
为了回答这个问题，我们首先来看一个例子：
class MyThread implements Runnable {

	public void run() {
		while (true) {
			System.out.prin]]></description><category></category></item><item><title><![CDATA[生产者消费者问题源程序]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/49550089</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/49550089</guid><author>beiyetengqing</author><pubDate>Sun, 01 Nov 2015 04:18:18 +0800</pubDate><description><![CDATA[问题描述：
生产者消费者问题（Producer-consumer problem）是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中，然后重复此过程。与此同时，消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据，消费者也不会在缓冲区中]]></description><category></category></item><item><title><![CDATA[不使用栈把二叉树中序输出]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/47463625</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/47463625</guid><author>beiyetengqing</author><pubDate>Thu, 13 Aug 2015 00:12:40 +0800</pubDate><description><![CDATA[问题：
把一个二叉树中序输出，但是不能使用栈或者O(n)空间来实现。


分析：
把二叉树中序输出，我们可以使用递归或者采用非递归方式，但是不管是哪种方式，我们总是需要O(n)的空间，所以如果只能使用常数空间，的确很难想到，但是一旦掌握该种方法，还是挺有用的，至少拓宽了自己解决问题的思路。


对于中序遍历，我们总是先输出左子树部分，再root，最后才是右子树部分。对于左子树和右子]]></description><category></category></item><item><title><![CDATA[数据表链接]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/18504011</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/18504011</guid><author>beiyetengqing</author><pubDate>Sun, 19 Jan 2014 15:09:38 +0800</pubDate><description><![CDATA[问题：
假如有一个表 ACCOUNT
ACCOUNTID, NAME, TYPE
A001， JOHN, TUTOR
A002， MIKE, TUTOR
A003， JIM, STUDENT
A004， LILY, STUDENT


另一个表 APPOINTMENT
STUDENTID, TUTORID
A003, A001
A004, A002


备注：STUD]]></description><category></category></item><item><title><![CDATA[quickly find the median of a sequence of numbers]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/14050823</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/14050823</guid><author>beiyetengqing</author><pubDate>Sat, 02 Nov 2013 06:37:58 +0800</pubDate><description><![CDATA[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 ]]></description><category></category></item><item><title><![CDATA[Gas Station]]></title><link>https://blog.youkuaiyun.com/beiyetengqing/article/details/12676975</link><guid>https://blog.youkuaiyun.com/beiyetengqing/article/details/12676975</guid><author>beiyetengqing</author><pubDate>Sun, 13 Oct 2013 11:53:16 +0800</pubDate><description><![CDATA[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 ]]></description><category></category></item></channel></rss>