??xml version="1.0" encoding="utf-8" standalone="yes"?>久久综合久久鬼色,色综合久久88色综合天天,亚洲香蕉网久久综合影视http://www.shnenglu.com/Joe/坚信Q勤能补?/description>zh-cnFri, 09 May 2025 16:21:25 GMTFri, 09 May 2025 16:21:25 GMT602011扑ַȝhttp://www.shnenglu.com/Joe/archive/2012/02/27/166619.htmlsimplyzhaosimplyzhaoMon, 27 Feb 2012 05:19:00 GMThttp://www.shnenglu.com/Joe/archive/2012/02/27/166619.htmlhttp://www.shnenglu.com/Joe/comments/166619.htmlhttp://www.shnenglu.com/Joe/archive/2012/02/27/166619.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/166619.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/166619.html
11q九月下旬赶回去参加势U技在南京的W试Qƈ成功地在十一之前拿到offerQ记得从南京坐高铁回Ӟ怀里揣着势的offer很是心安Q也l了自己很大的信心(因ؓQ一直觉得自׃q州跑回南京上v扑ַ会处于劣势)Q至今对于趋势科技面试的轻松氛_包括最后的面都印象深刻,是一家很nice的公司?br />
休完十一假期pMP在上复旦呆了个把月Q感谢舍友彭博帮我在复旦扑ֈ落脚地?br />在上P前前后后参加了很多的W试面试Q最l拿C满意的offerQ去了EMCQ尽量得?000大洋的毁U费?br />
推荐公司QEMCQTrendMicroQMarvell

“l验”Q?br />自信&微笑Q熟l掌握一门语a(如C)Q数据结构与法(推荐《算法导论?Q操作系l?推荐《深入理解计机pȝ?Q有个别“拿得出手”的小目Q英?br />
----------------------------------------------------------------------------------------------------------------
所有投递简历公叔R镉K的列?排名按投递简历的旉序)Q?br />
1. q?上v
SH01 Software Design Engineer (上v) 
[已笔? 通过面, 攑ּ]
2. 势U技 Trend Micro (上v)
软g工程?/div>
https://campus.trendmicro.com.cn
[已笔? 已面? OFFER]
3. Marvell (上v) 
[已笔试,已面试,OFFER]
4. 癑ֺ (上v)
[旉冲突Q放弃]
5. 华ؓ
软g研发工程?性能/法工程?/div>
[攑ּ]
6. 飞利?苏州 (上v)
嵌入式Y件开发工E师 软g应用开发工E师
[攑ּ]
7. Google (上v)
[攑ּ]
8. nVidia ׃?(上v)
GPU Architect
[攑ּ]
9. EMC (上v)
Software Development Engineer 上v
[已笔? 已面? OFFER]
10. AMD (上v)
System Software Engineer
[木有W试Z]
11. 腾讯 (上v)
后台开?上v
[已笔? 已面? OFFER]
12. 微Y (上v)
软g开发工E师 上v
[旉冲突Q放弃]
13 Samsung (南京)
手机开?南京
[攑ּ]
14 IBM CSTL (上v)
storage software engineer
[没消息]
15. Intel (上v)
zhaopin.com
[木有W试Z]
16. Cisco (上v)
embedded software development engineer
[攑ּ]
17. 大众点评|?(上v)
技术培训生 - 开?/div>
[攑ּ]
18. 阿尔卡特朗讯 (上v)
[攑ּ]
19. 支付?(上v)
[攑ּ]
20. 中航无线?(上v)
[攑ּ]
21. Oracle (上v)
[已面试,是l了OFFER]
22. 江苏Ud
[攑ּ]




simplyzhao 2012-02-27 13:19 发表评论
]]>2011知识?- 多态的C实现http://www.shnenglu.com/Joe/archive/2011/10/20/158766.htmlsimplyzhaosimplyzhaoThu, 20 Oct 2011 09:22:00 GMThttp://www.shnenglu.com/Joe/archive/2011/10/20/158766.htmlhttp://www.shnenglu.com/Joe/comments/158766.htmlhttp://www.shnenglu.com/Joe/archive/2011/10/20/158766.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/158766.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/158766.html
/* how to simulate C++'s polymorphism with C */
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>

/* declaration of virtual method */
typedef 
void (*Func1)(void);
typedef 
void (*Func2)(int);
typedef 
void (*Func3)(char *);

/* ------------------- Base Class begin ------------------*/
void func1_base(void)
{
    printf(
"func1_base(void) called\n");
}

void func2_base(int item)
{
    printf(
"func2_base(%d) called\n", item);
}

struct Vtbl_Base {
    Func1 f1;
    Func2 f2;
};
struct Vtbl_Base bvtbl = {&func1_base, &func2_base};

struct Base {
    
void *vptr; /* pointer to VTABLE */
    
int field_base;
};

void Base_Init(struct Base *baseint value)
{
    
base->vptr = &bvtbl;
    
base->field_base = value;
}

/* ------------------- Base Class end ------------------*/

/* ------------------- Derived Class begin ------------------*/
void func1_derived(void)
{
    printf(
"func1_derived(void) called\n");
}

void func3_derived(char *item)
{
    printf(
"func3_derived(%s) called\n", item);
}

struct Vtbl_Derived {
    
struct Vtbl_Base vtbl_base;
    Func3 f3;
};
struct Vtbl_Derived dvtbl = {{&func1_derived, &func2_base}, &func3_derived};

struct Derived {
    
struct Base base;
    
int field_derived;
};

void Derived_Init(struct Derived *derived, int b, int d)
{
    Base_Init((
struct Base *)derived, b);
    derived
->base.vptr = &dvtbl;
    derived
->field_derived = d;
}

/* ------------------- Derived Class end ------------------*/

void 
test_polymorphism(
struct Base *obj)
{
    ((
struct Vtbl_Base *)(obj->vptr))->f1();
    ((
struct Vtbl_Base *)(obj->vptr))->f2(obj->field_base);
}

int
main(
int argc, char **argv)
{
    
struct Base base;
    Base_Init(
&base128);
    test_polymorphism(
&base);

    
struct Derived derived;
    Derived_Init(
&derived, 128256);
    test_polymorphism((
struct Base *)&derived);

    ((
struct Vtbl_Derived *)(*(int *)&derived))->f3("polymorphism");
}


simplyzhao 2011-10-20 17:22 发表评论
]]>
2011好题 - Young氏矩阵[zz]http://www.shnenglu.com/Joe/archive/2011/10/16/158483.htmlsimplyzhaosimplyzhaoSun, 16 Oct 2011 11:11:00 GMThttp://www.shnenglu.com/Joe/archive/2011/10/16/158483.htmlhttp://www.shnenglu.com/Joe/comments/158483.htmlhttp://www.shnenglu.com/Joe/archive/2011/10/16/158483.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/158483.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/158483.html



一?m*n ?Young 氏矩?Young tableau) 是一?m*n 的矩?其中每一行的数据都从左到x?每一列的数据都从上到下排?Young 氏矩阵中可能会有一?nbsp; ∞ 数据?表示不存在的元素.所?Young 氏矩阵可以用来存?r<= mn 个有限的元素.
a).M个包含{9,16,3,2,4,8,5,14,12} ?*4 ?Young 氏矩?

b).l出一个在非空 m*n ?Young  氏矩阵上实现 EXTRACT-MIN 法,使其q行旉为O(m+n).

c).说明如何在O(m+n)旉?一个新元素手入C个未满的 m*n Young 氏矩阵中.

d).l出一个时间复杂度?O(n^3) 的对 n*n Young 氏矩阉|序的法.

e).l出一个运行时间ؓO(m+n) 的算?来决定一个给定的数是否存在于一个给定的 m*n  ?Young 氏矩阵当?

{?/p>

a).  2     3      4      5

8     9     12    14

16    ∞      ∞     ∞

∞     ∞      ∞     ∞

PS.该矩阵ƈ不是唯一?

b). (1)用递归的思想.?Young 氏矩阵中Q通过递归的解?m-1)*n,或m*(n-1) 的子问题来求?则有 T(m,n)=T(m-1,n) or T(m,n-1)+ O(1),昄,T=O(m+n).伪代码如?

EXTRACT_MIN(Young[1...m] [1...n])
EXTRACT_MIN=Young[1][1]; //cMFORTRAN的写?函数名即是返回?
Young[1][1]= INFINITY;
ADJUST_TO_YOUNG(Young[1...m] [1...n]);
END

ADJUST_TO_YOUNG(Young[x...m] [y...n])
if(Young[x][y]==∞)
return;
if(Young[x+1][y]>Young[x][y+1])
swap(Young[x][y], Young[x][y+1]);
ADJUST_TO_YOUNG(Young[x...m][y+1...n]);
else
swap(Young[x][y], Young[x+1][y]);
ADJUST_TO_YOUNG(Young[x+1...m][y...n]);
END

(2)cM堆的删除Q将Young[1][1]与最右下角元素交? 然后UdYoung[1][1]处的元素臛_适位|,x它与x或下方元素的比较,q与其中较小的一个交?反复q行直到它不大于它右方和下方的元素ؓ?

c).  cM堆的插入Q先待插入的元?K 攑֜ Young[m][n], 然后比较 K 与它左方或上方元素的大小,q与其中较大的一个交?反复q行直到 K 不小于它左方和上方的元素为止. 在这?同样?T(m,n)=T(m-1,n) or T(m,n-1)+ O(1),T=O(m+n).伪代码如?

INSERT(k,Young[m][n])
if(Young[m][n] < INFINITY)  alert: 矩阵已满,无法插入!!
while(k<Young[m-1][n] or k<Young[m][n-1])
if(Young[m-1][n] >Young[m][n-1])
swap(k,Young[m-1][n]);
m=m-1;
else
swap(k,Young[m][n-1]);
n=n-1;
END

d). 调用 n*n ?EXTRACT_MIN q程卛_.

e). L于最右上角的元素X比较Q?br />1Q如?=X,l束Q?br />2Q如果比X,那么元素只可能在前N-1列中Q?br />3Q如果比X大,那么元素只可能在后M-1行中Q?br />Young 氏矩阵去掉一行或一列还?Young 氏矩阵;
所以每ơ比较最去掉一行或一列,q样复杂度就?O(m+n);



simplyzhao 2011-10-16 19:11 发表评论
]]>
2011好题 - L俩已排好序数l的中位?/title><link>http://www.shnenglu.com/Joe/archive/2011/10/16/158477.html</link><dc:creator>simplyzhao</dc:creator><author>simplyzhao</author><pubDate>Sun, 16 Oct 2011 10:38:00 GMT</pubDate><guid>http://www.shnenglu.com/Joe/archive/2011/10/16/158477.html</guid><wfw:comment>http://www.shnenglu.com/Joe/comments/158477.html</wfw:comment><comments>http://www.shnenglu.com/Joe/archive/2011/10/16/158477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Joe/comments/commentRss/158477.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Joe/services/trackbacks/158477.html</trackback:ping><description><![CDATA[<span id="gkq8so8" class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 22px; background-color: #ffffff; ">问题:<br />有两个已排好序的数组A和BQ长度均为nQ找两个数组的中间元素。要求时间代价ؓO(logn)<br /><br />思\:<br />a. 比较自然的思\是归q算法,不过旉复杂度是O(n)Q无法满题目要?br /><br />b. <br />( <a >http://www.binghe.org/2011/05/find-median/</a> )<br /><br /></span><span id="uomwkg0" class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 22px; background-color: #ffffff; "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 14px; text-align: justify; ">Say the two arrays are sorted and increasing, namely A and B.<br />It is easy to find the median of each array in O(1) time.<br />Assume the median of array A is m and the median of array B is n.<br />Then,<br />1′ If m=n, then clearly the median after merging is also m, the algorithm holds.<br />2′ If m<n, then reserve the half of sequence A in which all numbers are greater than<br />m, also reserve the half of sequence B in which all numbers are smaller than n.<br />Run the algorithm on the two new arrays.<br />3′ If m>n, then reserve the half of sequence A in which all numbers are smaller than<br />m, also reserve the half of sequence B in which all numbers are larger than n.<br /><br />Run the algorithm on the two new arrays.</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 14px; text-align: justify; ">Time complexity: O(logn)</p></span><span id="a0oic8g" class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 22px; background-color: #ffffff; "><br /><br /><br /><br /><br /></span><img src ="http://www.shnenglu.com/Joe/aggbug/158477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Joe/" target="_blank">simplyzhao</a> 2011-10-16 18:38 <a href="http://www.shnenglu.com/Joe/archive/2011/10/16/158477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2011面试?- 循环报数http://www.shnenglu.com/Joe/archive/2011/10/11/158089.htmlsimplyzhaosimplyzhaoTue, 11 Oct 2011 15:08:00 GMThttp://www.shnenglu.com/Joe/archive/2011/10/11/158089.htmlhttp://www.shnenglu.com/Joe/comments/158089.htmlhttp://www.shnenglu.com/Joe/archive/2011/10/11/158089.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/158089.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/158089.html
有N个h按照1到N~号围成一个圈做游?br />从第一个h开始从1报数,数到M的h退出游?他后面的人接着重新?开?em style="color: #d14836; font-style: normal; ">报数Q一直持l到所有h都退?/em>Q?br />要求输出退出游戏的人的序.

q题以前看过Q记得貌似有些数学规律的Q忘了,所以只能当场用模拟的方法来做?br />当时用的是@环数l来模拟Q结果花了半个小时才~译、测试搞定,面试我的?挺Nice?看了之后_{案输出是对的,其实更自然的模拟是用链表?br />刚才用链表试了下Q果然简单好多,大概五分钟就可以搞定?br />
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#include
<assert.h>
int n, m;
struct Item {
    
int number;
    
struct Item *next;
};

void
solve(
int n, int m)
{
    
int i, j;
    assert(n
>0 && m<=n);
    
struct Item *items = (struct Item *)malloc(sizeof(struct Item) * n);
    assert(items 
!= NULL);
    
/* init */
    
for(i=0; i<n-1++i) {
        items[i].number 
= i+1;
        items[i].next 
= items+i+1;
    }
    items[n
-1].number = n;
    items[n
-1].next = items;
    
/* simulate */
    
struct Item *cur, *prev = NULL;
    cur 
= items;
    
while(n--) {
        j 
= m;
        
while(--j) {
            prev 
= cur;
            cur 
= cur->next;
        }
        printf(
"%d\n", cur->number);
        prev
->next = cur->next;
        cur 
= cur->next;
    }
    free(items);
}

int
main(
int argc, char **argv)
{
    
while(scanf("%d %d"&n, &m) != EOF) {
        printf(
"Result of (N=%d, M=%d)\n", n, m);
        solve(n, m);
    }

    
return 0;
}


simplyzhao 2011-10-11 23:08 发表评论
]]>
2011知识?- 文g描述W?dup/dup2http://www.shnenglu.com/Joe/archive/2011/10/08/157799.htmlsimplyzhaosimplyzhaoSat, 08 Oct 2011 07:57:00 GMThttp://www.shnenglu.com/Joe/archive/2011/10/08/157799.htmlhttp://www.shnenglu.com/Joe/comments/157799.htmlhttp://www.shnenglu.com/Joe/archive/2011/10/08/157799.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/157799.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/157799.html

文g描述W?font face="Arial Black" style="line-height: normal; ">----文g?/font>----v节点l构三者的联系


       既然文g描述W标识特定进E正在访问的文gQ那q程跟文件是怎么联系h的呢Q?/span>

       首先我们得知道每q行一个进E,shell׃默认为其打开三个文g描述W?/font>(0,1,2)Q分别与标准输入(stdin)Q标准输?/font>(stdout)和标准错?/font>(stderr)对应?/font>

       接下来讲下内核所使用的三U数据结构,正是q三U数据结构才使进E最l跟文g联系h?/span>边看图一边看下面的文字描q?/span>

      a. 每个q程在进E表中都有一个记录项Q每个记录项中有一张打开文g描述W表Q可其视ؓ一个矢量,每个描述W占用一V?br />          与每个文件描q符相关联的是:(a) 文g描述W?/span>(b) 指向一个文件表的指针

      b. 内核为所有打开文gl持一张文件表。每个文件表包含:(a) 文g状态标?/span>?/span>(b) 当前文g位移量?/span>(c) 指向该文?/span>v节点表项的指针?/span>

      c. 每个打开文gQ或讑֤Q都有一?/span>v节点l构?/span>是文件的重要信息部分?/span>

      下图表示以上三个数据l构的关p:

         fd1 = open(pathname, oflags);

         fd2 = dup(fd1);

         fd3 = open(pathname, oflags);




图一

      

 dup/dup2
怿大部分在Unix/Linux下编E的E序员手头上都有《Unix环境高~程?APUE)q本l典巨著。作者在该书中讲解dup/dup2之前曄讲过“文g׃n”Q这对理解dup/dup2q是很有帮助的。这里做单摘录以备在后面的分析中使用Q?br />Stevens said:
(1) 每个q程在进E表中都有一个记录项Q每个记录项中有一张打开文g描述W表Q可视Z个矢量,每个描述W占用一V与每个文g描述W相兌的是Q?br />(a) 文g描述W标志?br />(b) 指向一个文件表的指针?br />(2) 内核为所有打开文gl持一张文件表。每个文件表包含:
(a) 文g状态标?诅R写、增写、同步、非d{??br />(b) 当前文g位移量?br />(c) 指向该文件v节点表项的指针?br />囄Q?br />文g描述W表
------------
fd0 0 | p0 -------------> 文g? ---------> vnode0
------------
fd1 1 | p1 -------------> 文g? ---------> vnode1
------------
fd2 2 | p2 
------------
fd3 3 | p3 
------------
... ...
... ...
------------

一、单个进E内的dup和dup2
假设q程A拥有一个已打开的文件描q符fd3Q它的状态如下:
q程A的文件描q符?before dup2)
------------
fd0 0 | p0 
------------
fd1 1 | p1 -------------> 文g? ---------> vnode1
------------
fd2 2 | p2 
------------
fd3 3 | p3 -------------> 文g? ---------> vnode2
------------
... ...
... ...
------------

l下面调用:
n_fd = dup2(fd3, STDOUT_FILENO);后进E状态如下:

q程A的文件描q符?after dup2)
------------
fd0 0 | p0 
------------
n_fd 1 | p1 ------------
------------ \
fd2 2 | p2 \
------------ _\|
fd3 3 | p3 -------------> 文g? ---------> vnode2
------------
... ...
... ...
------------
解释如下Q?br />n_fd = dup2(fd3, STDOUT_FILENO)表示n_fd与fd3׃n一个文件表?它们的文件表指针指向同一个文件表?Qn_fd在文件描q符表中的位|ؓ STDOUT_FILENO的位|,而原先的STDOUT_FILENO所指向的文件表被关闭Q我觉得上图应该很清晰的反映炏V按照上面的解释我们 可以解释CU中提出的一些问题:
(1) "dup2的第一个参数是不是必须为已打开的合法filedesQ? -- {案Q必R?br />(2) "dup2的第二个参数可以是Q意合法范围的filedesgQ? -- {案Q可以,在Unix其取值区间ؓ[0,255]?br />
另外感觉理解dup2的一个好Ҏ是把fd看成一个结构体cdQ就如上面图形中ȝ那样Q我们不妨把之定义ؓQ?br />struct fd_t {
int index;
filelistitem *ptr;
};
然后dup2匚windexQ修改ptrQ完成dup2操作?br />
在学习dup2时L到“重定?#8221;一词,上图完成的就是一?#8220;从标准输出到文g的重定向”Q经qdup2后进EA的Q何目标ؓSTDOUT_FILENO的I/O操作如printf{,其数据都流入fd3所对应的文件中。下面是一个例子程序:
#define TESTSTR "Hello dup2\n"
int main() {
int fd3;

fd3 = open("testdup2.dat", 0666);
if (fd < 0) {
printf("open error\n");
exit(-1);
}

if (dup2(fd3, STDOUT_FILENO) < 0) { 
printf("err in dup2\n");
}
printf(TESTSTR);
return 0;
}
其结果就是你在testdup2.dat中看?Hello dup2"?br />
二、重定向后恢?br />CU上有q样一个帖子,是如何在重定向后再恢复原来的状态?首先大家都能惛_要保存重定向前的文g描述W。那么如何来保存呢,象下面这栯么?
int s_fd = STDOUT_FILENO;
int n_fd = dup2(fd3, STDOUT_FILENO);
q是q样可以呢?
int s_fd = dup(STDOUT_FILENO);
int n_fd = dup2(fd3, STDOUT_FILENO);
q两U方法的区别到底在哪呢?{案是第二种Ҏ才是正确的,分析如下Q按照第一U方法,我们仅仅?表面?保存了相当于fd_tQ按照我前面说的理解?法)中的indexQ而在调用dup2之后Qptr所指向的文件表由于计数值已为零而被关闭了,我们如果再调用dup2(s_fd, fd3)׃出错(出错原因上面有解?。而第二种Ҏ我们首先做一下复Ӟ复制后的状态如下图所C?
q程A的文件描q符?after dup)
------------
fd0 0 | p0 
------------
fd1 1 | p1 -------------> 文g? ---------> vnode1
------------ /|
fd2 2 | p2 /
------------ /
fd3 3 | p3 -------------> 文g? ---------> vnode2
------------ /
s_fd 4 | p4 ------/ 
------------
... ...
... ...
------------

调用dup2后状态ؓQ?br />q程A的文件描q符?after dup2)
------------
fd0 0 | p0 
------------
n_fd 1 | p1 ------------
------------ \
fd2 2 | p2 \
------------ _\|
fd3 3 | p3 -------------> 文g? ---------> vnode2
------------
s_fd 4 | p4 ------------->文g? ---------> vnode1 
------------
... ...
... ...
------------
dup(fd)的语意是q回的新的文件描q符与fd׃n一个文件表V就如after dup图中的s_fd和fd1׃n文g?一栗?br />
定W二个方案后重定向后的恢复就很容易了Q只需调用dup2(s_fd, n_fd);卛_。下面是一个完整的例子E序Q?br />#define TESTSTR "Hello dup2\n"
#define SIZEOFTESTSTR 11

int main() {
int fd3;
int s_fd;
int n_fd;

fd3 = open("testdup2.dat", 0666);
if (fd3 < 0) {
printf("open error\n");
exit(-1);
}

/* 复制标准输出描述W?*/
s_fd = dup(STDOUT_FILENO);
if (s_fd < 0) {
printf("err in dup\n");
}

/* 重定向标准输出到文g */
n_fd = dup2(fd3, STDOUT_FILENO);
if (n_fd < 0) {
printf("err in dup2\n");
}
write(STDOUT_FILENO, TESTSTR, SIZEOFTESTSTR); /* 写入testdup2.dat?*/

/* 重定向恢复标准输?*/
if (dup2(s_fd, n_fd) < 0) {
printf("err in dup2\n");
}
write(STDOUT_FILENO, TESTSTR, SIZEOFTESTSTR); /* 输出到屏q上 */
return 0;
}
注意q里我在输出数据的时候我是用了不带缓冲的write库函敎ͼ如果使用带缓冲区的printfQ则最l结果ؓ屏幕上输Z?Hello dup2"Q而文件testdup2.dat中ؓI,原因是~冲Z怪,׃最l的目标是屏q,所以程序最后将~冲区的内容都输出到屏幕?br />

三、父子进E间的dup/dup2
由fork调用得到的子q程和父q程的相同文件描q符׃n同一文g表项Q如下图所C:
父进EA的文件描q符?br />------------
fd0 0 | p0 
------------
fd1 1 | p1 -------------> 文g? ---------> vnode1
------------ /|\
fd2 2 | p2 |
------------ |
|
子进EB的文件描q符?|
------------ |
fd0 0 | p0 |
------------ |
fd1 1 | p1 ---------------------|
------------
fd2 2 | p2 
------------
所以恰当的利用dup2和dup可以在父子进E之间徏立一?#8220;沟通的桥梁”。这里不详述?br />
四、小l?br />灉|的利用dup/dup2可以l你带来很多强大的功能,׃一些时间ȝZ面那么多Q不知道自己理解的是否透彻Q只能在以后的实践中慢慢探烦了?br />


转蝲: http://blog.21ic.com/user1/6406/archives/2011/81684.html


       

simplyzhao 2011-10-08 15:57 发表评论
]]>
2011知识?- overload与overridehttp://www.shnenglu.com/Joe/archive/2011/10/07/157709.htmlsimplyzhaosimplyzhaoFri, 07 Oct 2011 11:11:00 GMThttp://www.shnenglu.com/Joe/archive/2011/10/07/157709.htmlhttp://www.shnenglu.com/Joe/comments/157709.htmlhttp://www.shnenglu.com/Joe/archive/2011/10/07/157709.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/157709.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/157709.htmloverload: 重蝲

虚函数L在派生类中被改写Q这U改写被UCؓ“override”。我l常h“overload”?/span>“override”q两个单词。澄清一下:

override
是指zc重写基cȝ虚函敎ͼp我们前面BcM重写?/span>AcM?/span>foo()函数。重写的函数必须有一致的参数表和q回|C++标准允许q回g同的情况Q这个我会在语法部分单介l,但是很少~译器支持这?/span>featureQ。这个单词好象一直没有什么合适的中文词汇来对应,有h译ؓ覆盖Q还贴切一些?/span> 

overload
U定成俗的被译?/span>重蝲。是指编写一个与已有函数同名但是参数表不同的函数。例如一个函数即可以接受整型C为参敎ͼ也可以接受QҎ作ؓ参数?/span>




simplyzhao 2011-10-07 19:11 发表评论
]]>
2011知识?- 构造函数可以ؓ虚函数吗http://www.shnenglu.com/Joe/archive/2011/10/07/157708.htmlsimplyzhaosimplyzhaoFri, 07 Oct 2011 11:06:00 GMThttp://www.shnenglu.com/Joe/archive/2011/10/07/157708.htmlhttp://www.shnenglu.com/Joe/comments/157708.htmlhttp://www.shnenglu.com/Joe/archive/2011/10/07/157708.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/157708.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/157708.html原因Q?br />概念上,虚函数的意图是动态绑定,E序会根据对象的动态类型来选择要调用的Ҏ。然而在构造函数运行的时候,q个对象的动态类型还不完?可以是基c,也可以是子类)Q没有办法确定它到底是什么类型,故构造函C能动态绑定?br />
实现上,vptr是构造函数设|的。通过vptr才能扑ֈ虚函数?br />如果构造函Cؓ虚函敎ͼ通过构造函数设|的vptr才能扑ֈ构造函敎ͼ然后调用它设|vptrQ这是不可能实现的?nbsp;



参?


simplyzhao 2011-10-07 19:06 发表评论
]]>
2011知识?- 优先U反?/title><link>http://www.shnenglu.com/Joe/archive/2011/09/25/156727.html</link><dc:creator>simplyzhao</dc:creator><author>simplyzhao</author><pubDate>Sat, 24 Sep 2011 16:33:00 GMT</pubDate><guid>http://www.shnenglu.com/Joe/archive/2011/09/25/156727.html</guid><wfw:comment>http://www.shnenglu.com/Joe/comments/156727.html</wfw:comment><comments>http://www.shnenglu.com/Joe/archive/2011/09/25/156727.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/Joe/comments/commentRss/156727.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Joe/services/trackbacks/156727.html</trackback:ping><description><![CDATA[前两天Marvell面试Q被问到优先U反转是什么东东,无奈只能表示不会Q还好面试官非常地NICEQ很耐心地告诉我q是什么,q聊起NASA的火星探器因Z先反{的原因出现过BUGQ?我就一直点_q说回来会GOOGLE学习?br /><br /><span id="yqcymu8" class="Apple-style-span" style="color: #555555; font-family: Verdana, 'Lucida Grande', Verdana, Helvetica, sans-serif; font-size: 13px; line-height: 20px; background-color: #ffffff; "><p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; ">Priority Inversion 优先U反转是嵌入式实时系l里面的一个经典的问题。简单描qC下这个问题:有三个优先不同的task,A,B,C; A的优先最高,Bơ之QC最低。其中A和C有共享的临界区。如果C已进入界区Q那么A在进入进入界区之前Q就会被d。task B有可能打断C而进入运行状态,q样C什么时候从临界区退出,是一个未知的旉。A只有C从界区退出后才能被调度,A被阻塞的旉也是未知的。这P低优先的B先于高优先的A被调度,优先U发生了逆{?br />q个问题在一般的操作pȝ里面不是一个严重的问题Q最多A被多d了一D|间。但是,在实时系l里面,如果一个Q务在规定的时间里面没有被调度q行Q系l就相当于失败了Q可能引发系l崩溃?br />解决q个问题有两U手D:<br />1QPriority inheritance(优先U?Q如果一个高优先U的task被阻塞,与它׃n临界区的低优先的task在进入界区后,优先U就会扉K优先Utask的优先Q保证它不会被其他优先ơ高的Q务打断。从临界区退出后QC的优先恢复正常?br />2QA priority ceilingQ最高优先Q,l界区分配最高优先Q如果一个taskq入临界区,把临界区的优先U赋l它Q已保证它不会被打断。从临界区退出后Qtask的优先恢复正常?/p><p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; ">实时操作pȝ的一个特点就是,一个实时Q务,会在规定的时间内得到响应Qƈ且在规定的时间内完成d。所以,一切不可预知的动作都是有害的?/p><p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; ">有兴可以看看下面两个链接:<br /><a title="http://en.wikipedia.org/wiki/Priority_inversion" rel="nofollow" style="color: #467aa7; font-style: normal; text-decoration: none; ">http://en.wikipedia.org/wiki/Priority_inversion</a><br /><a title="http://www.embedded.com/story/OEG20020321S0023" rel="nofollow" style="color: #467aa7; font-style: normal; text-decoration: none; ">http://www.embedded.com/story/OEG20020321S0023</a></p></span><br /><br /><br />来源: <a >http://www.kernelchina.org/node/210</a><img src ="http://www.shnenglu.com/Joe/aggbug/156727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Joe/" target="_blank">simplyzhao</a> 2011-09-25 00:33 <a href="http://www.shnenglu.com/Joe/archive/2011/09/25/156727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2011推理?- 两个鸡蛋[zz]http://www.shnenglu.com/Joe/archive/2011/09/25/156726.htmlsimplyzhaosimplyzhaoSat, 24 Sep 2011 16:13:00 GMThttp://www.shnenglu.com/Joe/archive/2011/09/25/156726.htmlhttp://www.shnenglu.com/Joe/comments/156726.htmlhttp://www.shnenglu.com/Joe/archive/2011/09/25/156726.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/156726.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/156726.html

2 Egg Problem

 l箋我们的推理问题之旅,今天我们要对付的是一个Google的面试题QTwo Egg Problem.

我们开始吧Q?nbsp;

No.2  Google Interview Puzzle : 2 Egg Problem

* You are given 2 eggs.

* You have access to a 100-storey building.

* Eggs can be very hard or very fragile means it may break if dropped from the first floor or may not even break if dropped from 100th floor. Both eggs are identical.

* You need to figure out the highest floor of a 100-storey building an egg can be dropped without breaking.

Now the question is how many drops you need to make. You are allowed to break 2 eggs in the process

 

分析与解{:

   

     题目要求试的最大次数最。首先,讨论两个比较trivial的方案?/span>

 

   Ҏ1Q从W一层开始扔鸡蛋Q如果鸡蛋不,则上一层再扔。这P如果鸡蛋在某一层碎的话Q该层就是界的层。这U方案的优点在于省鸡蛋,只会摔破一个鸡蛋。还有一个鸡蛋可以带回家Q做个鸡蛋羹Q补充营M!  :) ~点是Q如果鸡蛋在100层才的话,那就要试100ơ啦。那你等甉|要等dQ而且q要接受别h的打量的目光Q心说这怪咖Z么每ơ都只坐一层楼?#8230;

 

  Ҏ2Q?/span> 惛_很多人都会想到这个方案。我只能_q是中国计算机教育的成功啊。这是“二分查找?#8221;。首先在W?/span>50层楼扔鸡蛋,如果鸡蛋不碎的话Q就?/span>75楹{如果碎了的话,那么对不P同志。由于你只剩一个鸡蛋了Q所以你得小心地从第一层开始,q样才能保证你在鸡蛋完的时候能扑ֈ临界楼层。这U方法的优势在于Q如果你知道你的鸡蛋比较的话,你就采用q个Ҏ吧。界楼层越高,q个Ҏ试的次数越。但q种优势是用临界楼层比较时比较大的试ơ数Z仯得的。我们看刎ͼ如果临界层数?/span>49层的话,我们要尝?/span>50ơ,而界层Cؓ100层的时候,试ơ数只有7ơ。但是,现在的问题是Q全部情况下的最大尝试次数最。这P虽然在某些情况下Q这U方法的性能很好。但是就最差情况而言Q还是要试50ơ,好像q是有点大。这边,我们惌v来,“二分查找?#8221;的目标是q_性能最佻Iq不是最差性能最佟뀂我们似乎走错了路!Q!不过Q方案二相比Ҏ一来讲q是有进步的?/span>

 

  Ҏ2g陷入?#8220;短板效应”的惔|׃最坏情况下的坏性能制约了M性能的提高。解册个问题的ȝ原则应是Q?#8220;一水端^”Q尽量做到各U情况下的尝试次数尽量差不多。这正应?/span>GOOGLE的信?/span>Don't be evilQ不以别的情况ؓ代h换取另一些情늚指标的提高。做?#8220;不伤?#8221;.(呵呵Q这是我瞎联想的)。那么,q着q条路走吧,我假设每U情况下最大的试ơ数?/span>x.

  则第一ơ扔蛋的楼层应ؓx;

W二ơ扔蛋的楼层应ؓ x+(x-1);

   依次cL?/span>

   从上面看刎ͼ每次我们增加的楼层都是前一ơ减1.我们所要保证的是应该在增加的层数变成0之前到顶|所以有Q?/span>

   x+(x-1)++1100

   q是一个等差数列,整理后有Q?/span>

     x2+x-2000

发现x14?/span>

 

我们ȝ一下:

  W一ơ在14楼扔Q如果碎了的话从一楼再开始扔Q?/span>

否则?/span>14+13=27层扔Q如果碎了的话从15层开始扔Q?/span>

否则?/span>27+12=39层扔Q如果碎了的话从28层开始扔Q?/span>

……

q样Q最大尝试次Cؓ14ơ就行了。不信你试试?/span>

 

最后,Z体现严}性,l出本题的模型:

 

转移方程Q?/span>

minNum[n ] = min(1 + max(i – 1, minNum[n-i])) Q?/span>for 1n

边界条g:

minNum[0] = 0; minNum[1] = 1

q里Q?/span>n为楼层数Q?/span>iv始楼层数?/span>

 

据说q是一个动态规划问题,我还没来得及仔细研究。其实,我的感觉是,很多理论最初的来源都是很朴素的真理Q只是我们没学懂Q所以把它们惛_杂了。所以,很好的理论就q样不被大多Ch所理解了?/span>

 

参考文献:

1.       http://blog.csdn.net/TravelInHistory/archive/2006/12/07/1434098.aspx

2.       http://classic-puzzles.blogspot.com/2006/12/google-interview-puzzle-2-egg-problem.html



simplyzhao 2011-09-25 00:13 发表评论
]]>
ƷþþĻ| ھƷþ| 99þùں;Ʒ1ӳ| þþƷav٤| MM131޹Ůþ| þۺϸϾþúݺݺ97ɫ| ޹˾þۺ| պŮ18վþþƷ| ƷþþþþþþþĻ | 9þ9þþƷ| ó˾þAvѸ| һɫۺþ| ԭƷ99þþƷ66| ƷþþĻ| ɫav˾þô߽ӰԺ| þþƷþþþùۿ99ˮ| þþùҺ| þþþþþAv| þþ97ɫ| 99ŷþþþƷѿ | þøŮ߳MBA| ҹþþþüŮӰԺ | 91Ʒþþþþ91| ۺϾþþ| ˾þô߽鶹| þۺϹapp| ƷëٸAVѾþ| ٸþĻһ| 91ƷۺϾþ| ѾþþƷ99þ| þֻǾƷ23| ˾þþƷavһ| Ʒþþþþۺձ| ޹Ʒһþ | 99Ʒþþþþþ| Ʒþþþ| þ뾫Ʒһ| ŷ츾BBBþþ| þþƷ| þۺ97ɫһһ| 99þ99þþƷ|