<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Solidfish的专栏]]></title><description><![CDATA[I'll do it by doing it]]></description><link>https://blog.youkuaiyun.com/Ididcan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Ididcan]]></copyright><item><title><![CDATA[Google Guice 教程（1）]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/8883410</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/8883410</guid><author>Ididcan</author><pubDate>Sat, 04 May 2013 13:14:21 +0800</pubDate><description><![CDATA[Motivation

在程序开发过程中将所有东西写在一起实在是一个无趣的事情。将数据，服务以及对象联系到另一个对象的方法有多种。以下代码展示了这些方法：

Wiring everything together is a tedious part of application development. There are several approaches to connect data]]></description><category></category></item><item><title><![CDATA[反转控制（IOC）与依赖注入（DI）]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/8880905</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/8880905</guid><author>Ididcan</author><pubDate>Fri, 03 May 2013 16:42:11 +0800</pubDate><description><![CDATA[前言
今天补充了一下有关设计模式的知识，IOC（Inversion Of Control）以及DI（Dependency Injection）的总结，百度百科上的已经很好了，直接搬过来用吧！
附上链接  http://baike.baidu.com.cn/view/1486379.htm?fromId=1800021


起源

早在2004年，Martin Fowler就提出了“哪]]></description><category></category></item><item><title><![CDATA[Machine Learning 课程学习笔记]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/8872472</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/8872472</guid><author>Ididcan</author><pubDate>Wed, 01 May 2013 17:20:30 +0800</pubDate><description><![CDATA[在Mac OS 环境中安装Octave
首先安装XCode 一般MacOS中已经安装这个开发工具，如果没有或者版本太低的话，需要在App Store中更新一下。紧接着在Preferance中按转Command Tool Line（CTL）
然后安装Homebrew，参照https://github.com/mxcl/homebrew/wiki/installation，此后通过brew doc]]></description><category></category></item><item><title><![CDATA[误删Win7启动引导程序造成的错误]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/8186490</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/8186490</guid><author>Ididcan</author><pubDate>Thu, 15 Nov 2012 13:27:47 +0800</pubDate><description><![CDATA[今天很傻的把在linux下将Win7的启动引导程序删除了，导致无法正常引导win7和Ubuntu。
解决方法如下：
1）用光盘或者自己做一个U盘启动盘，对win7进行修复。
2）在1）的步骤之后由于重新生成了win7引导程序，因此无法正常启动之前用wubi安装的Ubuntu。
3）以下方法出自 http://www.cnblogs.com/mario/archive/2010/05/09/]]></description><category></category></item><item><title><![CDATA[经典面试题——n皇后问题]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/8004930</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/8004930</guid><author>Ididcan</author><pubDate>Fri, 21 Sep 2012 16:55:30 +0800</pubDate><description><![CDATA[一个典型的回溯法！作为练习。
有几个关键地方需要注意，就是判断皇后的位置是否合法。
pos[i] 表示第i个皇后应该排在的位置。
因此对于第k个皇后而言，需要满足 pos[i]！＝pos[k] 同时 abs(i-k)!=abs(pos[i]-pos[k])


#include 
using namespace std;

bool canPlace(int pos[], int k)]]></description><category></category></item><item><title><![CDATA[经典面试题——求任意两个叶节点中最近的父节点]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7997899</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7997899</guid><author>Ididcan</author><pubDate>Wed, 19 Sep 2012 21:44:21 +0800</pubDate><description><![CDATA[以下程序未经测试，仅供参考！


#include 
#include 
using namespace std;


struct LCATreeNode{
  LCATreeNode* m_pLeft;
  LCATreeNode* m_pRight;
  int m_value;
}


bool nodePath(LCATreeNode* root, int]]></description><category></category></item><item><title><![CDATA[经典面试题——二维矩阵子矩阵和问题]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7996774</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7996774</guid><author>Ididcan</author><pubDate>Wed, 19 Sep 2012 16:30:04 +0800</pubDate><description><![CDATA[两种方法：有空再详细说明


#include 
#include 
using namespace std;

int sumOfArray_1(int** array, int m, int n){
  int **a = new int*[m+1];  
  int **sum = new int*[m+1];
  for(int i = 0 ; i <= m; ++i){
    s]]></description><category></category></item><item><title><![CDATA[图论——拓扑排序]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7993994</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7993994</guid><author>Ididcan</author><pubDate>Tue, 18 Sep 2012 23:34:41 +0800</pubDate><description><![CDATA[通过DFS来遍历图的一个具体形式。
唯一区别的就是要记录其访问次序，每一次访问该节点结束之后记录其终止时间，最后对终止时间进行排序就可以了！时间越大的节点，越应该先做！仅此而已。
程序没有考虑效率，还可以提高，有空在修改吧！



#include 
#include 
using namespace std;

void topologize(bool** graph,int lis]]></description><category></category></item><item><title><![CDATA[图论——单源最短路径算法之Dijkstra算法]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7993615</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7993615</guid><author>Ididcan</author><pubDate>Tue, 18 Sep 2012 22:00:00 +0800</pubDate><description><![CDATA[简单的实现了Dijkstra，不考虑效率问题。
注释：V表示图的顶点集合，S表示从源节点到集合中的顶点的最终最短路径已经确定的点的集合
Dijkstra算法的精髓就是
1）初始的时候源节点s到其他所有节点的距离都是无穷大。
2）将源节点加入到集合S，然后又该源节点发射出去所有边中，也就是所有能达到的节点，修改源节点s到这些节点的距离（这个就是算法的核心Relax操作）。
3）找出最短的距]]></description><category></category></item><item><title><![CDATA[编程之美——3.10 分层遍历二叉树]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7985741</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7985741</guid><author>Ididcan</author><pubDate>Sun, 16 Sep 2012 21:56:59 +0800</pubDate><description><![CDATA[学过数据结构我们很容易知道如何进行宽度优先遍历树，那么这道题就是对宽度优先遍历树的算法进行改进。
         1
       /    \
     2      3
   /   \       \
 4    5       6
      /  \
     7   8
运用BFS只能输出1，2，3，4，5，6，7，8这个序列，并不知道分层信息，因此如何分层打印呢？]]></description><category></category></item><item><title><![CDATA[编程之美——2.19 区间重合判断]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7985583</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7985583</guid><author>Ididcan</author><pubDate>Sun, 16 Sep 2012 21:16:25 +0800</pubDate><description><![CDATA[将区间按照x来排序（递增），然后依次判断目标区间的起始位置是否在这些区间上，例如判断区间 [a,b] 是否在区间 [c,d] , [e,f]之中，我们可以分析c d，e f的关系，按照之前所述的方法排好序之后[c,d] , [e,f]要么相交，要么相离。如果相交，那么e=d。由此可以看到只要判断a是否在 [c, d]之间就好，如果在就将a增加到d，然后循环判断，知道所有区间都被遍历一遍，如果所有区]]></description><category></category></item><item><title><![CDATA[经典面试题——求字符串中最长的数字串]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7975018</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7975018</guid><author>Ididcan</author><pubDate>Thu, 13 Sep 2012 14:59:53 +0800</pubDate><description><![CDATA[在字符串中找出连续最常的字符串，并把这个串的长度返回。
并把这个最长数字串赋给一个函数参数outputstr所指向的内存。
例如"abcd12345ed123sf3343461346345" 的首地址赋给inputstr后函数返回9，outputstr所指向的值为“3343461346345”；
#include 
using namespace std;

int maxContinueN]]></description><category></category></item><item><title><![CDATA[经典面试题——子数列和]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7974744</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7974744</guid><author>Ididcan</author><pubDate>Thu, 13 Sep 2012 14:51:19 +0800</pubDate><description><![CDATA[输入两个整数n和m，从数列1,2,3...,n中随意取几个数使其和等于m，要求将其中所有可能都列出来。


#include 
using namespace std;

void sumOfSubArray(int m, int n){
  if(m<0 || n<1)
    return;
  int sum = 1;
  for(int i = 1, j = 1; j < n;){]]></description><category></category></item><item><title><![CDATA[经典面试题——首次出现的单字符]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7974167</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7974167</guid><author>Ididcan</author><pubDate>Thu, 13 Sep 2012 11:07:40 +0800</pubDate><description><![CDATA[在一个字符串中找到第一个出现，并且只出现一次的字符，例如abaccdeff，输出b
这是谷歌在2006年的一道笔试题。


#include 
#include 
#include 
using namespace std;

unsigned char findFirstChar(char *str, int n){ 
  int range = sizeof(char)<<8;
  i]]></description><category></category></item><item><title><![CDATA[java和C++区别]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7969952</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7969952</guid><author>Ididcan</author><pubDate>Wed, 12 Sep 2012 10:09:04 +0800</pubDate><description><![CDATA[Java和C++子类转换成父类，方法调用的不同之处及原因
这个是java和c++一个很重要的区别，在c++中，可以通过这样向上提升的类型操作实现对父类行为的调用，而在Java中，无论对其进行什么样的类型转换，其类型实际上是不变的。


举个简单的例子，C++中

class A {
public:
  void print(){
    cout<<"Class A"<<endl;]]></description><category></category></item><item><title><![CDATA[Java实现司机售票员线程同步模式]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7933295</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7933295</guid><author>Ididcan</author><pubDate>Sat, 01 Sep 2012 22:14:56 +0800</pubDate><description><![CDATA[实现司机售票员线程同步模式，比较简单，通俗易懂。
售票员活动：关闭车门
司机的活动：启动车子
司机的活动：正常行驶；售票员活动：售票
司机的活动：到站停车；
售票员活动：打开车门；


pv操作实现
driver(){
  while(true){
    P(driver);
    start();
    driving();
    stop();
    V(Selle]]></description><category></category></item><item><title><![CDATA[Java实现生产者——消费者模型]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7933131</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7933131</guid><author>Ididcan</author><pubDate>Sat, 01 Sep 2012 21:04:20 +0800</pubDate><description><![CDATA[对多线程同步问题一直了解不是很深刻，找了生产者消费者模型来试验了一下。不知道正确与否，初步实验了一下好像是正确的，如有错误请指正。
生产者——消费者模型是这样的：
有M个生产者不断的想生产线上放置产品。而有N个消费者从生产线上将产品拿出来。实现这一过程。
代码如下所示：



package concurrency;

import java.util.Random;
import]]></description><category></category></item><item><title><![CDATA[经典面试题21——包含min函数的栈]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7928700</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7928700</guid><author>Ididcan</author><pubDate>Fri, 31 Aug 2012 12:43:19 +0800</pubDate><description><![CDATA[定义栈的数据结构，请在该类型中实现一个能够得到栈的最小元素的min函数，在该栈的调用中，调用min、push、以及pop、的时间复杂度都是O(n)。


代码如下：
#include 
#include 
#include 
#include 
using namespace std;

template
class MinStack{
private:
        stack s;]]></description><category></category></item><item><title><![CDATA[经典面试题（十二）——顺序输出从1到N位数]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7922776</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7922776</guid><author>Ididcan</author><pubDate>Thu, 30 Aug 2012 11:24:05 +0800</pubDate><description><![CDATA[第一种使用大数加法。。。
第二种使用对数字的全排列，时间是O（10^N)，而空间是O(N)。要注意一点的是数字的首位不能为0，同时输出字符数组最后一位应该以'\0'为结尾。
代码如下所示：


#include 
using namespace std;

void printNum(char num[], int start, int end){
  if(start==end)]]></description><category></category></item><item><title><![CDATA[经典面试题（七）]]></title><link>https://blog.youkuaiyun.com/Ididcan/article/details/7920417</link><guid>https://blog.youkuaiyun.com/Ididcan/article/details/7920417</guid><author>Ididcan</author><pubDate>Wed, 29 Aug 2012 15:08:14 +0800</pubDate><description><![CDATA[利用两个栈来实现队列的操作。
代码如下所示

#include 
#include 
using namespace std;

template
class QueueFromStack{
private:
        stack s1;
        stack s2;
public:
       // use reference instead of variable pass]]></description><category></category></item></channel></rss>