i******s 发帖数: 301 | 1 面了一家在SF的SNS公司(非twitter),一共见了4个人,2 software engineer, 1
senior SE and CTO, 废话不多,下面是on-site面经。
第一个,问了一些基本简历的问题,然后问了一个puzzle,就是那个经典的帽子问题。
1.有一堆人,每人都戴一顶帽子,帽子的颜色不是红色就是绿色,现在所有人都排成一
排,每个人都能看到前面所有人的帽子( 但看不到他后面人的)。现在从最后一个人开
始,每个人必须说出一个颜色:红色或者绿色,不能不说话也不能说除红色、绿色之外
的字句,所有人都能听到这个人的回答。如果报出的颜色和自己所戴帽子的颜色不一致
,该人就得挂掉,否则可以活下来。问:有没有一种方法能使活下来的人尽可能多。
2.现在假设有一堆整数数组,有一个flip函数,接受一个数组下标i为参数,作用是将
数组index 从0到i的元素反转。eg. 假设数组为5, 6, -1, 3, 2, 如果调用flip(3),
那么就将数组下标0, 1, 2, 3反转,数组变为 3, -1, 6, 5, 2。问:只使用flip函数(
不能直接用swap或数组下标操作[... 阅读全帖 |
|
r******l 发帖数: 10760 | 2 这里人气比CS版旺多了,而且大多是CS的,所以发在这里请教一下高人。
两个class,a和b。由于互相有指针指向对方,所以在b.h里面include了a.h,但是a.h
里面只在开头写了一句class b;而没有include b.h(a.cpp里面include了b.h)。以前
这样用了很久都没问题,但是最近碰到一个问题:
class a里面有几个函数的参数用到template,所以这几个函数的declaration和
implementation都放到了a.h里面,而这几个函数里面也用到了指向class b的指针(比
如p_b->func1();)。结果这样的程序在Windows上用Visual Studio 2010里面编译连接
都没问题,但是在Mac上用xcode编译就报错,说什么用到了incomplete type(Linux下
面似乎也报同样的错)。
应该是因为在a.h里面放了函数的implementation导致的。尝试将implementation拿到a
.cpp里面,结果又link出错。网上搜了一下发现这种用到template的函数,做常见的做
法就是把impleme... 阅读全帖 |
|
w***z 发帖数: 1848 | 3 对于观察仪器冯诺伊曼的解释是无限后退。 摘抄一段,纯引用,不负任何观点责任:
冯诺伊曼敏锐地指出,我们用于测量目标的那些仪器本身也是由不确定的粒子所组
成的,它们自己也拥有自己的波函数。当我们用仪器去“观测”的时候,这只会把仪器
本身也卷入到这个模糊叠加态中间去。怎么说呢,假如我们想测量一个电子是通过了左
边还是右边的狭缝,我们用一台仪器去测量,并用指针摇摆的方向来报告这一结果。但
是,令人哭笑不得的是,因为这台仪器本身也有自己的波函数,如果我们不“观测”这
台仪器本身,它的波函数便也陷入一种模糊的叠加态中!诺伊曼的数学模型显示,当仪
器测量电子后,电子的波函数坍缩了不假,但左/右的叠加只是被转移到了仪器那里而
已。现在是我们的仪器处于指针指向左还是右的叠加状态了!假如我们再用仪器B去测
量那台仪器A,好,现在A的波函数又坍缩了,它的状态变成确定,可是B又陷入模糊不
定中……总而言之,当我们用仪器去测量仪器,这整个链条的最后一台仪器总是处在不
确定状态中,这叫做“无限后退”(infinite regression)。 |
|
j*p 发帖数: 115 | 4 刚才我想了一下,当时是说vtable的时候引出来的 他问的意思应该是 在进行类型转换
之后vtable怎么变化 比如
class Base
{
public:
virtual void v();
}
class Derived : public Base
{
public:
void v();
}
void main()
{
Drived D;
Derived *pd = &D;
Base* pb = dynamic_cast(pd);
}
本来pd指向D,D里面有一个指向Derived类的虚函数表的指针。现在被转成Base类的指针
pb了,pb还是指向D吗?印度人当时问 那个指针是不变呢还是另外copy什么什么。。。
如果是
Base B;
Base *pb = &B;
Derived* pd = dynamic_cast(pb);
pd指向B,还是要复制 B, 然后 在复制后的object里把虚函数表的指针改过来呢?
sigh~ 基本上没用过cast。。。这种题怎么复习得到嘛。。。 |
|
j*p 发帖数: 115 | 5 刚才我想了一下,当时是说vtable的时候引出来的 他问的意思应该是 在进行类型转换
之后vtable怎么变化 比如
class Base
{
public:
virtual void v();
}
class Derived : public Base
{
public:
void v();
}
void main()
{
Drived D;
Derived *pd = &D;
Base* pb = dynamic_cast(pd);
}
本来pd指向D,D里面有一个指向Derived类的虚函数表的指针。现在被转成Base类的指针
pb了,pb还是指向D吗?印度人当时问 那个指针是不变呢还是另外copy什么什么。。。
如果是
Base B;
Base *pb = &B;
Derived* pd = dynamic_cast(pb);
pd指向B,还是要复制 B, 然后 在复制后的object里把虚函数表的指针改过来呢?
sigh~ 基本上没用过cast。。。这种题怎么复习得到嘛。。。 |
|
k*******a 发帖数: 433 | 6 PARR应该是指向整形数组的指针;
pf应该是指向函数的指针,这个函数有一个指向整形的指针参数,返回类型为指向整形
数组的指针。 |
|
W*******e 发帖数: 1268 | 7 C的指针也很多,GCC的代码往下走几层到处都是指针函数互相调用,以前Borland和VC
开放的部件代码很多也是这样的。好像用指针函数和指针对象除了灵活以外,同时能有
效的减少obj文件大小。我读过一些牛人写的程序,编译后的目标代码比源程序还小。 |
|
r*****n 发帖数: 4844 | 8 前言
你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么
经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业
项目都看不出有什么实际作用,不如从工作中的需求出发)
建议:
不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至
少10年通用。
回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末
节。
一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。
注:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的
编程可能会在未来很没有前途,原因如下:
现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows
的图形界面不吃香了。
越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成
本太高了。
微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编
程革命史》
所以... 阅读全帖 |
|
f*******t 发帖数: 7549 | 9 F
电面和onsite都是在西雅图本地面的。此分部是在downtown附近租的两层,有近360度
的景观,十分漂亮。分部总共有不到200人,很多是从微软来的,从A挖来的倒不多,原
因不明。午饭质量不错,小分部就不指望有中餐咯。
电面
1. 国人大哥,问了几个常见题,最难的题具体细节记不清了,大概是01矩阵上的DFS,
随便聊了会儿直接拿到onsite。
Onsite
1. 白女,亚马逊manager出身的女工程师,主问culture fit问题,比如为什么想来FB
。Coding题是恶心的罗马数字。因为鄙视这道题所以没在leetcode上刷过,还好是简单
题,很快写出来了。
2. 一个搞后端处理data的中国哥们,问sort linked list。随手写了个merge sort过
关,merge的时候没用dummy node方法,if语句用的很多,比较蛋疼。讨论了一下具体
的算法复杂度,直接背答案的人估计会被考倒。所以说做面试题的目的主要还是掌握算
法并能灵活用于解题,不太可能所有题都能练到随手就写出最优算法bug free的程度。
3. 午饭不算正式面试,跟一个呆了六七年的fron... 阅读全帖 |
|
n******r 发帖数: 869 | 10 贡献好文:
http://coolshell.cn/articles/4990.html
月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to
those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉
我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,
于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来
了一些他的心得和经历,我在把他的心得做了不多的增改,并根据我的经历增加了“进
阶”一节。这是一篇由新手和我这个老家伙根据我们的经历完成的文章。
我的这个朋友把这篇文章取名叫Build Your Programming Technical Skills,我实在
不知道用中文怎么翻译,但我在写的过程中,我觉得这很像一个打网游做任务升级的一
个过程,所以取名叫“技术练级攻略”,题目有点大,呵呵,这个标题纯粹是为了好玩
。这里仅仅是在分享Mailper和我个人的学习经历。(注:省去了我作为一个初学者曾
经学习过的一些技术(今天明显... 阅读全帖 |
|
f********a 发帖数: 1109 | 11 【 以下文字转载自 Programming 讨论区 】
发信人: ozin (ozin), 信区: Programming
标 题: 王银看kotlin(本文建议零售价 ¥15)
发信站: BBS 未名空间站 (Thu May 25 18:06:39 2017, 美东)
Kotlin 和 Checked Exception
最近 JetBrains 的 Kotlin 语言忽然成了热门话题。国内小编们传言说,Kotlin 取代
了 Java,成为了 Android 的“钦定语言”,很多人听了之后热血沸腾。初学者们也开
始注意到 Kotlin,问出各种“傻问题”,很“功利”的问题,比如“现在学 Kotlin
是不是太早了一点?” 结果引起一些 Kotlin 老鸟们的鄙视。当然也有人来信,请求
我评价 Kotlin。
对于这种评价语言的请求,我一般都不予理睬的。作为一个专业的语言研究者,我的职
责不应该是去评价别人设计的语言。然而浏览了 Kotlin 的文档之后,我发现 Kotlin
的设计者误解了一个重要的问题——关于是否需要 checked exception。对于这个话题
我已经思考... 阅读全帖 |
|
z****e 发帖数: 2024 | 12 我还不是太懂你的意思。
我也知道b的静态类型是Base*,但是这个和虚函数返回类型有什么联系呢?
难道,虚函数返回值的类型,不是决定于虚函数本身的签名么?
而是决定于调用该虚函数的指针的类型吗?
既然已经找到了derived的虚指针,查虚表,发现要返回一个derived*,就返回,这难道
有问题?
vptr并没有因为b的静态类型是Base*,而改变vptr本身的行为啊? |
|
o**n 发帖数: 2130 | 13 Kotlin 和 Checked Exception
最近 JetBrains 的 Kotlin 语言忽然成了热门话题。国内小编们传言说,Kotlin 取代
了 Java,成为了 Android 的“钦定语言”,很多人听了之后热血沸腾。初学者们也开
始注意到 Kotlin,问出各种“傻问题”,很“功利”的问题,比如“现在学 Kotlin
是不是太早了一点?” 结果引起一些 Kotlin 老鸟们的鄙视。当然也有人来信,请求
我评价 Kotlin。
对于这种评价语言的请求,我一般都不予理睬的。作为一个专业的语言研究者,我的职
责不应该是去评价别人设计的语言。然而浏览了 Kotlin 的文档之后,我发现 Kotlin
的设计者误解了一个重要的问题——关于是否需要 checked exception。对于这个话题
我已经思考了很久,觉得有必要分享一下我对此的看法,避免误解的传播,所以我还是
决定写一篇文章。
可以说我这篇文章针对的是 checked exception,而不是 Kotlin,因为同样的问题也
存在于 C# 和其它一些语言。
冷静一下
在进入主题之前,我想先纠正一些人的误解,让他... 阅读全帖 |
|
w****a 发帖数: 710 | 14 C++调用成员函数的时,需要知道对象的this指针,由这个this指针来调用它的成员函
数。在汇编级一般是把this指针存入ecx寄存器中,然后call相应的函数地址(代码段
中)。栈变量用lea存this因为要算偏移值,lea可以一次做好sub和mov的操作。堆上的
变量直接mov即可。如果要说代码大小,lea比mov占字节多。如果说效率,访问栈资源
肯定要快写。我什么时候做个测试看看。但是正如楼上大牛所说,你完全可以不用在意
这种效率。 |
|
l*********o 发帖数: 736 | 15 前后三次onsite,每次过了之后才能进行下一次,感觉就是一条命打魂斗罗。他家每场
面试1.5hr,很耗体力。
一个月前online test过后安排店面,因为人在湾区,可以直接去公司onsite.
onsite 1.
写一个函数,从文件头和文件尾分块读取数据,然后交换后分块写回去
如果写中途down机怎么办。方法是用transaction log记录操作,重新开始后
roll back
题目比较基础,不过顺带会问大量c相关的问题
onsite 2.
1.bit manuplation
2.判断是否是BST, leetcode原题
3.重构一个malloc函数,如何开辟内存的初始地址是N的整数倍,如何设计
对应的free
基本思想是开内存多留些冗余,修改要返回的指针指向地址,使其指向位
置指向整数位地址
free的时候有个小trick,要在开内存时,找个地方把指针移动位置记录下
来,这样free时就能找到地址修改值,推算出原来指针... 阅读全帖 |
|
l*********o 发帖数: 736 | 16 前后三次onsite,每次过了之后才能进行下一次,感觉就是一条命打魂斗罗。他家每场
面试1.5hr,很耗体力。
一个月前online test过后安排店面,因为人在湾区,可以直接去公司onsite.
onsite 1.
写一个函数,从文件头和文件尾分块读取数据,然后交换后分块写回去
如果写中途down机怎么办。方法是用transaction log记录操作,重新开始后
roll back
题目比较基础,不过顺带会问大量c相关的问题
onsite 2.
1.bit manuplation
2.判断是否是BST, leetcode原题
3.重构一个malloc函数,如何开辟内存的初始地址是N的整数倍,如何设计
对应的free
基本思想是开内存多留些冗余,修改要返回的指针指向地址,使其指向位
置指向整数位地址
free的时候有个小trick,要在开内存时,找个地方把指针移动位置记录下
来,这样free时就能找到地址修改值,推算出原来指针... 阅读全帖 |
|
g*********s 发帖数: 1782 | 17 比如某个虚拟世界里,只有四种:普通人,盲人,聋哑人,还有既盲又聋哑人。70%普
通人,20%纯盲人,5%纯聋哑,5%盲加聋哑。
那么应该如何设计类呢?
方案一:
普通人做基类,盲人/聋哑人从普通人派生,既盲又聋哑的从盲/聋哑多继承,构成菱形
继承图。
方案二:
定义普通人类,盲属性类,聋哑属性类。在普通人类里定义两个指针分别指向盲属性类
和聋哑属性类,初始化为NULL。之所以这样做而不是用组合,是因为大部分是普通人,
这样可以减少内存使用。
方案三:
普通人做基类,盲人从普通人派生,聋哑人从盲人派生。普通人类中定义残疾属性,其
值为四种组合之一。对于纯聋哑人,虽然从盲人派生,但通过残疾属性可以识别出来。
原型实现是方案三,应该是当时开发时打补丁的结果。方案一看起来挺自然的,但是涉
及多继承,应该也不是个好方法。
目前倾向于方案二。但方案二的问题是多了两个指针字段,内存消耗比较多。而且如果
用方案一,引入虚函数的话,也有虚函数表指针的开销。
那么继承应该在什么场合用呢?感觉情况稍微一复杂,继承就不好用了。 |
|
b***i 发帖数: 3043 | 18 第一次提交就被骂。要求是增加一个getter/setter,并加到单元测试里头。
我就写了。照着代码的其他部分写的。比如,代码里面变量都是大写,我就同样的变量
用大写。帮助我的那个人动态生成了一个类的变量:
XXXX* x = new XXXX(...);
我一看,喝,没释放。于是看其他部分用了智能指针就也用了智能指针。
然后不会测试,叫帮我的那个人来看看。他看了一下,配置了测试的文件,于是可以通
过了。他就在我机器上提交了。立刻收到了审查者的两封邮件,第一封说,为什么要用
堆,不用栈上的变量。第二封嫌测试的内容太少。问题是其他的测试函数都是这么少,
其他的函数里面都是用智能指针,没有用栈上的变量。
我以前跟他说C++11有很多好处,我提到可以用auto。他立马说不喜欢auto,因为很多
情况造成了复制却不知道。这个人是不是很难对付啊?要是这样的话,我就装孙子吧。
听说我们公司喜欢听话的,不喜欢自己有主意的,不喜欢犯上的。 |
|
h****8 发帖数: 599 | 19 递归所需要进栈的信息会更多吧 比如说二叉树前序遍历,非递归用栈时只需要记录节
点的指针,而递归需要记录当前函数的地址,当前PC指针,以及所有函数中local 变量
,开销大得多。再加上进出函数时对memory的寻址,就会慢了
stack |
|
i**********d 发帖数: 105 | 20 求问这个题目怎么做啊?
6. 50岁老美,工作内容是往搜索结果里加与用户隐私信息相关的内容,态度很和蔼。
问了一道老题,给一个一次只能读4k字节的函数int read4096(byte *buff),要求实现
能读任意字节数的int read(byte *buff, int n_bytes)。他说如果愿意的话可以用
java写,我想了想,java的IO根本不会,还不如用C++呢。本来一年多几乎没碰过C++,
只是面试前在leetcode上拿几道练了下手,写的过程却意外地顺利,写完后跑了一个普
通test case,没看出问题。
他又追问,加一个让文件指针返回到文件头部的函数reset(),要求实现把文件指针移
到任意字节处的函数seek(int n_bytes)。在原来的基础上改改,倒不算难。我发现有
edge case没处理好,他看时间不多就说不用再改,结束了面试。 |
|
s******g 发帖数: 755 | 21 【 以下文字转载自 Apple 讨论区 】
发信人: faucetQ (fq), 信区: Apple
标 题: [Mac Dev]整了个ObjectiveC的笔记,看看气氛对得上不
发信站: BBS 未名空间站 (Mon Feb 2 21:38:18 2009), 转信
整了个类似ObjectiveC学习笔记的东西,发上来大伙看看有兴趣不。
修改了一点,增加了NSAutoreleasePool的内容。
增加了NSString内容。
===========俺系分隔线==================
本文假设读者有基本的C编程能力,如果有C++或者Java的背景会更容易理解但是不是必须。
ObjectiveC基本语法
消息
在objectiveC中,向一个对象发送一个消息的语法为
[ obj method:parameter];
类似的功能在C++中写作
obj->method(parameter);
在java中写作
obj.method(parameter);
在smalltalk中写作
obj method:parameter
显而易见objectiveC和smalltalk... 阅读全帖 |
|
f*****Q 发帖数: 1912 | 22 整了个类似ObjectiveC学习笔记的东西,发上来大伙看看有兴趣不。
修改了一点,增加了NSAutoreleasePool的内容。
增加了NSString内容。
===========俺系分隔线==================
本文假设读者有基本的C编程能力,如果有C++或者Java的背景会更容易理解但是不是必须。
ObjectiveC基本语法
消息
在objectiveC中,向一个对象发送一个消息的语法为
[ obj method:parameter];
类似的功能在C++中写作
obj->method(parameter);
在java中写作
obj.method(parameter);
在smalltalk中写作
obj method:parameter
显而易见objectiveC和smalltalk的语法基本是相同的。
当有两个或者两个以上的参数时,通常试用以的语法
[ obj method:parameter1 WithSecondParameter:parameter2];
定义一个类的代码放在一个.h文件中,下面是一个例子。
//macdevexample1.h
... 阅读全帖 |
|
y***d 发帖数: 2330 | 23 ff
ff() ff 是一个函数
*ff() ff 返回一个指针
*ff(xxx) ff 的参数是 xxx
(*ff())() ff 返回的指针指向一个函数
char *(*ff())() 这个函数的返回返回值是 char *
* () 的优先级问题 |
|
z****e 发帖数: 2024 | 24 恩?你fail了我,也得给我个理由吧。不然我去HR投诉你。
99%case什么意思?
函数里边的new,如果返回了裸pointer,应该只是个ownership 问题。
lz不是要这种函数里边生成一个对象和它的指针,然后函数返回这个指针么?
这个不就是用new么? |
|
h*i 发帖数: 3446 | 25 atom很简单,可以把atom理解成其他编程语言里面的变量(mutable),更确切的说,它
很像C里面的指针,但是tread safe的。
初学者要记住swap!的时候不是传新的值进去就行,而是要传一个函数进去,来转换旧
的值。这个转换函数必须是没有副作用的,因为可能别的线程也在访问这个atom,这个
转换函数可能会被试几次才成功。
用到atom的时候记得deref,@,所以我说它像指针。
atom可以用在任何地方。但idomatic的用法,是用来做可变状态的容器。比如写一个非
常简单的小游戏的话,可以把整个游戏世界的状态用一个map来描述,然后把这个map放
到一个atom里面;再比如数据库连接的状态,也可以放入一个atom里面。等等。 |
|
b***i 发帖数: 3043 | 26 纠正了:先描述一下树:
一个多叶子的树,每个节点有多个下层节点。每一个节点也有一个指针指向同层下一个
节点。这个图无法看,可以复制到notepad上看
1--2--3--4
| | | |
| | | 5
| | | |
| | | 6
| | |
| | 7--8
| | |
| | 9
| | |
| | A
| |
| B--C--D
| | |
| | E
| |
| F--G
| |
| H
|
I--J--K--L
如果要遍历1-2-3-4-5-6-7-8-9-A-B-C-D-E-F-G-H-I-J-K-L,并且进行处理则有如下程序
traverse(head){
if (head->needed){
action(head);
wait(50);
if (quit) return;
if (head->deeper)
traverse(head->de... 阅读全帖 |
|
b***i 发帖数: 3043 | 27 这次是关于SWIG的,这是一种模板语言,用来和python等协作。比如,把C++的dll变成
pyd,可以自动完成很多补充的工作。
现在有这样一个发现,在python里面
a = cppapi.return_obj() C++函数返回一个对象,这个对象是python控制内存的
b = cppapi.return_ptr() c++函数返回一个指针,我认为python只控制这个指针的值
,不控制内存
我的问题是,如果
c = cppapi.return_obj2() 这里的C++函数这样写的:
Obj return_obj2(){
return * return_ptr();
}
这个方法的话,python的变量C来控制内存?就是说,不用的时候python负责释放内存。
我这个工作是不是和潮流反其道而行啊?大家都javascript了,我还C++? |
|
p**z 发帖数: 65 | 28 刚开始用Python不习惯,为什么传递参数的时候没有办法指定是 by reference 或者
by value。后来终于理解了,Python的变量和许多其他语言的不同,其他语言的变量名
常可以被想象成有名字的装载数据的容器,变量赋值是把数据放进容器里(即使是 by
reference,也是把指针数据放进指针变量里);Python的变量名却最好比喻为在对象
上贴上的名字标签,所以变量赋值永远是 by reference,就是在已经有的对象上添一
个标签。这个可能跟Python所有数据类型都是对象(object)有关系。
这个方法通常最有效率,但是也容易让人迷惑,因为跟一般人的编程习惯不一样。
对于 immutable 的对象(比如浮点常数,字符串常数等等),把它赋值给一个变量名
仅仅是给这个常数对象贴上新标签,常数对象本身并不能被改变。如果两个标签 A 和
B 贴在同一个常数对象上,给 A 赋新值就好像把这个标签揭下来贴到另一个不相干的
常数对象上,对 B 没有影响,所以表现好像跟 by value 传参很像,但实际上还是 by
reference 的。
但是对于 mutable 的对... 阅读全帖 |
|
h*******r 发帖数: 928 | 29 我也栽倒在指针上,尤其指针还可以当函数用,指针本身又可以被别的指针指,还有
ARRAY也
可以当指针用,地址也可以看做指针,能不晕吗。 |
|
x****u 发帖数: 81 | 30 大家好,最近忙于找工作,听人介绍发现了这个版面,看了各位大大的帖子受益匪浅,
于是也来分享下自己电面的题目。几次电面发挥得很不理想,我自己总结了一些教训,
也希望大家指点迷津,给我点建议,先行谢过!
// 题目
1. Yahoo
Given a integer array, how to find the median?
Running median. Numbers keep coming in one after another, how to get the
median?
2. Google
(1)
struct A {struct A *b;}
struct A * d = 0;
void S(struct *f) {f->b = d; d=f;}
What is function S doing? Can you name this function?
What if we need S to work with any type of pointer?
Does your solution work in multi-threaded programs? Why? How... 阅读全帖 |
|
z****e 发帖数: 2024 | 31 师傅,invoker这个类,根本就没有虚函数,这点我同意。
因为invoker就一个wrapper,就用B的this指针进行一个函数调用的作用。
标准的这句话,应该和invoker是没有关系的。因为虚函数和invoker无关,invoker也
没有调用自己的虚函数,因为根本就没有虚函数。
标准是说,在有虚函数的情况下,应该调用哪个。
invoker压根就没有虚函数,所以我感觉,标准这句话不能用在invoker上边。
实质上不是invoker在ctor里调用虚函数,本质上还是B在ctor里调用虚函数,应该调用
哪个。那B就之好按照顺序来了。
本. |
|
f*****n 发帖数: 224 | 32 转贴的人少转答案了。。。
附答案:
1,以下谁是二进制思想的最早提出者?
a,伏羲;b,姬昌;c,莱布尼茨;d,柏拉图。
【答案】c
中国人会选a,西方人会选c。据说伏羲画八卦,这也只是据说,实际不可考,比较确切
的是18世纪莱布尼茨发现二进制。
2,以下哪个概念和公孙龙的《指物论》中的“指”字含义相近?
a,变量;b,数组;c,对象;d,指针。
【答案】d
《指物论》是“能指”和“所指”的关系,“指”相当于“指针”,“物”相当于“对
象”。指针本身只能记录一个例如字符串的地址,通过指针可以找到这个字符串本身。
而变量a, 你可以让a = 1 ,也可以让a = 2,数组就是 [1,2,3]这种的,只是表示一个
同类的序列。
3,蔺相如,司马相如;魏无忌,长孙无忌。下列哪一组对应关系与此类似?
a,PHP,Python;b,JSP,servlet;c,java,java script ;d,C,C++。
【答案】c
四个人都不是一个时代,就是名字像,其实没关系。java跟java script 名字像但完全
没有关系。c和c++有关系。
4,秦始皇吞并六国采用了以下哪种算法思想?
a,递... 阅读全帖 |
|
h**6 发帖数: 4160 | 33 四流学校Fresh EE PhD年底毕业,找了半年的工作终于有着落了。
微软Windows Live 59级SDE,给的是master的价:
8.1w + 0-20%bonus + $5w stock/4 years + 0.5w搬家费
网上投的简历,三周后网上测试,四周后hr电面,六周后onsite面试,七周后offer。
onsite面了五个人,第三人包括吃午饭共90分钟,其余每人60分钟。
1.C语言字符串相关问题。
1)写出strstr函数,准备好的BM算法没有用上,用的最土的O(nm)算法。
注意两点:a.不要用strlen(防止某个字符串很长),b.只检查长度许可的部分(起始位
置为0到n-m+1)
2)在长度未知的文件中查找字符串。
2.定义无符号可变长度长整数类并实现加减乘除。
1)加法因为内存分配研究了半天,定义了分配和使用两个size而搞定;
3)乘法提到可以使用FFT,但仍然用普通方法实现。
4)除法的试商函数没有时间写了,但我说用二分法实现,面试官表示满意。
3.吃饭时未必需要参考版上的建议什么可以吃,什么不能吃。我的饮食一向比较独特,
选自己熟悉的吃就行了。吃... 阅读全帖 |
|
c**y 发帖数: 73 | 34 1. 大数乘法
给定两个非常大的数,写出一个函数返回它们的乘积。可以自己定义需要用到的数据结
构来表示每个数。我用了vector。
2. 系统设计的问题。
给定一个数据中心,如何收集statistics在给定的时间范围(t0,t1)。
这是系统设计题,没啥代表性。
3. 给定一个点,找出一百万个点中距离这个点最近的k个点。
用heap来存当前最近的k个点,然后scan这一百万个点一遍。
4. 给定一个函数fetch10k(),要求实现另外一个函数fetch()。这个题的说明比较复杂
,最后没有写完。具体说明如下。
fetch10k()是给定的,signature如下。
int fetch10k(char *buffer)
这个函数干的事情是从底层读出数据,写到传入的buffer中。这个buffer是一个默认
10k bytes大小的空buffer。返回类型int,返回写入后buffer中数据的size。
注意返回的数据大小和底层的数据大小有关。如果底层数据size是0,那么返回也是0,
因为buffer里什么也没有写。
如果底层数据是小于10k,例如5k,那么返回值是5k,因为只有5k... 阅读全帖 |
|
r*******2 发帖数: 104 | 35
好的,我把我的解题过程也说一下。Leetcode原题就不用说了。
第一组:
第1轮:判断subtree。假设两棵树T1和T2,先用DFS在T1里找到和T2的root一样的结点
,然后从找到的结点开始和T2进行比较,我用了BFS,就是用queue,一边一个queue,
同时push/pop进行比较,如果碰到不一样的就return false。做完了想起来其实就是
Leetcode上的Same Tree,直接还用DFS递归比queue省事。
第2轮:找出maze中的path。开一个matrix标记maze的每一个点是否访问过,然后DFS搜
索,从起点开始,查找它的上下左右邻居,如果没有访问过也没有obstacle,就作为一
个选择进行下一步搜索,一直递归下去直到找到终点为止。
第3轮:设计题。
第4轮:ASCII和Kanji字符的题以前面过,当时没做出来,答案就是回来网上搜的(参
考这个网址http://discuss.joelonsoftware.com/default.asp?interview.11.334807.4)。Spiral Matrix是Leetcode原题就不说了。
第... 阅读全帖 |
|
h***a 发帖数: 1773 | 36 【 以下文字转载自 JobHunting 讨论区 】
发信人: repeat112 (windfantasy), 信区: JobHunting
标 题: 微软onsite面试悲剧,附面经并求分析,多谢~
发信站: BBS 未名空间站 (Thu May 8 18:31:09 2014, 美东)
一周之内面了微软两个组,刚刚收到结果双双悲剧,一个组的HR说It's a tough call
,另一个组的HR说very close,不知道是不是套话,总之很沮丧……来版上求问一下大
家问题可能出在哪,并且附上大概的面试过程和coding题目。
第一组:
第1轮:是一个SDE II,看名字像是中东人。coding题目是给定2棵树,判定是否其中一
棵是另一棵的subtree,同时用了DFS和BFS,写完code讨论了几个testcases和复杂度就
结束了。
第2轮:一个白哥Senior Lead,问的题目是一个maze(用2D matrix表示,有的坐标上
有障碍),给定起点和终点,找出从起点到终点的path,还是用的常规的DFS解法,搜
索过程排除有障碍的和访问过的坐标。
第3轮:一个小黑... 阅读全帖 |
|
v*****u 发帖数: 1796 | 37 //comfort 应该是真的close,要不然老大不会花时间的吧。好好准备,拿个比软
软好的offer
【 以下文字转载自 JobHunting 讨论区 】
发信人: repeat112 (windfantasy), 信区: JobHunting
标 题: 微软onsite面试悲剧,附面经并求分析,多谢~
发信站: BBS 未名空间站 (Thu May 8 18:31:09 2014, 美东)
一周之内面了微软两个组,刚刚收到结果双双悲剧,一个组的HR说It's a tough call
,另一个组的HR说very close,不知道是不是套话,总之很沮丧……来版上求问一下大
家问题可能出在哪,并且附上大概的面试过程和coding题目。
第一组:
第1轮:是一个SDE II,看名字像是中东人。coding题目是给定2棵树,判定是否其中一
棵是另一棵的subtree,同时用了DFS和BFS,写完code讨论了几个testcases和复杂度就
结束了。
第2轮:一个白哥Senior Lead,问的题目是一个maze(用2D matrix表示,有的坐标上
有障碍),给定起点和终点,找... 阅读全帖 |
|
r***u 发帖数: 1272 | 38 1. 两幅图片同时动作
PowerPoint的动画效果比较多,但图片只能一幅一幅地动作。如果你有两幅图片要一左
一右或一上一下地向中间同时动作,可就麻烦了。其实办法还是有的,先安置好两幅图
片的位置,选中它们,将之组合起来,成为"一张图片"。接下来将之动画效果设置为"
左右向中间收缩",现在请看一看,是不是两幅图片同时动作了?
2. 滚动文本框的制作
右击工具栏打开"控件工具箱",再点击文本框,而后从"属性"里面把滚动条打开,在TEXT
里面输入文本框的内容.(完成)还可以通过"其他控件"中的SHOCKWAVE FLASH OBJECT 实
现PPT中加入FLASH。
3. 轻松隐藏部分幻灯片
对于制作好的powerpoint幻灯片,如果你希望其中的部分幻灯片在放映时不显示出来,
我们可以将它隐藏。方法是:在普通视图下,在左侧的窗口中,按 Ctrl,分别点击要
隐藏的幻灯片,点击鼠标右键弹出菜单选“隐藏幻灯片”。如果想取消隐藏,只要选中
相应的幻灯片,再进行一次上面的操作即可。
4.在PPT演示文稿内复制幻灯片
要复制演示文稿中的幻灯片,请先在普通视图的“大纲”或“幻灯片”选项中,选择... 阅读全帖 |
|
S*A 发帖数: 7142 | 39 那是因为你没有明白 C 里面 const 的确切含义。
你自己望文生意出一个你觉得应该如此的用法。
你这个就是说,ptr 本身是个 const 指针,指的内容是 const。
我不会通过 ptr 来修改指的内容也不会修改这个 ptr 指针指向。
这个指针的初始值是 i 的地址。
废话,你用了 const int *ptr 当然就不允许 *ptr = 什么了。
因为编译器不是总可以看出 ptr 的内容是哪里来的。例如
可以是一个函数调用的返回值。你没法知道被赋予的内容
是不是 const。 就算不是,指针用了 int const * 就是说,
我不通过这个指针来修改指向的内容。
你真要常量可以用 enum。 |
|
a**a 发帖数: 416 | 40 非常不幸。编译器从来不会自动找.h文件。这是因为兼容古老的c带来的混淆。
在C的石器时代,函数无须声明就可以使用,编译器也不检查你的调用方式是否正确。
编译器唯一关注的是你的函数名。所以你写add(1,1)的时候,编译器假设你有个
地方提供了add这个函数,然后自动为你生成调用代码。至于子程序被调用后是否
能正确运行,或者调用者对被调用者的返回值的假设是否正确,编译器是不管的。
到了C的古典时代,为了在编译期间就能检查出调用方式类型的错误,编译器几乎
是强制性地要求程序员提供函数调用的参数类型和返回值类型。但是为了兼容
古老的石器代码,很多C编译器在不提供函数声明的情况下,会自动根据上下文
假定一个声明,并额外地警告一下。C++的编译器也沿袭了这一传统。所以你不包含
vector.h头文件的时候,第一个main仍然可以通过。但是第二个程序的TEST::main
完全是C++代码,不可能按照C习惯来解释,TEST即可以作名字空间解,也可以作
类名解,这两个都不可像函数那样用一个符号(其背后的实质是指针或者地址)来代替。
所以必须要有头文件。
简单地说,你的第一个程序是碰巧对了,第二个程序 |
|
O*******d 发帖数: 20343 | 41 我用auto_ptr很多。 但要注意一些细节。
1。auto_ptr一般不要用来做函数参数。 因为ownershi会转移到函数里面去。函数一旦
完成,内存释放,外面的auto_ptr
就成了悬浮的指针了。
2。函数可以return一个auto_ptr。 这种用法比较安全。 一般原则是,从较小的scope
往较大的scope传递,而不是相
反。 所以在函数内部使用时,不要把auto_ptr传到code block里去,但可以反向传递。
3。如果在函数里需要allocate内存,用auto_ptr比较好,一来不会忘记delete,二来
是exception safe。 |
|
e********y 发帖数: 66 | 42 我有一个在Visual studio 6 下开发的mfc的dll project,暂且叫它a.dll。现在想用cpputest来对其中每个class做unit test。对这个project不是很了解,主要是对windows的用visual studio开发的东西不熟,文档也没有,开发的人也走了。
这个project本身好像是个类似ocx的dll,它只export了DllGetClassObject,DllCanUnloadNow,DllRegisterServer,DllUnregisterServer这4个函数。这个dll本身好像是给别的ocx控件提供服务的。
为了unit test, 我在这个project中加了一个含有main函数的test.cpp文件,另外新加了一个configuration用来编译成win32 console。在test.cpp的main中调用afxwininit来支持mfc。试着做了一个简单的cpputest测试例来测试其中的某一个class,编译和跑测试例本身好像没问题。但是在程序退出时总有run time error的exception。跟踪进去发现P... 阅读全帖 |
|
N******K 发帖数: 10202 | 43 我估计你喜欢 return shared_ptr 或者 把 shared_ptr 作为函数参数
比如这样的例子 http://stackoverflow.com/questions/395123/raii-and-smart-pointers-in-c
void setLog(const Foo & foo, const Bar & bar) {
shared_ptr file(new File("/path/to/file", File::append));
foo.setLogFile(file);
bar.setLogFile(file);
}
foo::setLogFile(shared_ptr input_file)
{ member_of_foo=input_file;
}
bar::setLogFile(shared_ptr input_file)
{ member_of_bar=input_file;
}
类的成员变量 也当做函数输出
比如 setLog 的输入是 const Foo & foo, con... 阅读全帖 |
|
z****e 发帖数: 54598 | 44 作为论据,我找到了中文的翻译,但是那个youtub链接失效了
Go语言之父谈Go:大道至简
时间:2012-07-05 15:40 作者:王然
导读:这篇文章是Google首席工程师、Go语言之父Rob Pike自己整理的6月21日在旧金
山给Go SF的演讲稿。Rob提到:Go语言本是以C为原型,以C++为目标设计,但最终却大
相径庭。值得一提的是,这3门语言都曾当选TIOBE年度语言。
几个礼拜之前我被问到:“对于Go语言,最令你惊讶的是什么?”当时我就明确地给出
了答案:“虽然我希望C++程序员能够使用Go作为替代拼,但实际上大部分Go程序员都
是从Python和Ruby转过来的,其中却少有C++程序员。”
我、Ken以及Robert都曾是C++程序员,在我们编写软件时觉得应该设计一门更适合解决
这个问题的编程语言。奇怪的是,其他程序员似乎却不关心。
今天我将说说是什么让我们决定创造Go语言的,及其出乎意料的结果。这里我谈的更多
的会是Go而不是C++,所以即使你不懂C++也没关系。
主旨可以简单地总结为:你更同意Less is more还是Less is less?
这里有一个... 阅读全帖 |
|
j**l 发帖数: 2911 | 45 网上应该能搜到一些帖子讲这类问题的解读方法,规律还是有一些的,可能最后读出来
的,就是用中文都比较绕,要用几个从句分开说。
基本思想感觉和分析英语或者中文长难句类似,总是要先找到主干,再把修饰部分依次
加入
然后也觉得和有机化学解读长的碳式结构的名称类似,对各种比较基本的基要熟悉。至
少这里的一个基础知识点是,分清指向函数的指针和返回指针的函数,两者就差一对括号 |
|
c******e 发帖数: 545 | 46 打个比方说,地址在0x400000的函数当初是用__stdcall修饰的(比如win32平台上的
WINAPI宏,API函数默认修饰),那么声明指针的时候也要用相同修饰:
void (__stdcall*func)(int,int) = (void (__stdcall*)(int,int))0x400000;
func(10,100);
如果用系统默认__cdecl的话
void (*func)(int,int) = (void (*)(int,int))0x400000;
func(10,100);
生成的调用代码就完全不正确,原因见原帖。这种问题平时是见不到的,因为compiler
会核对原型,而且link的时候因为name mangling也通不过,但是因为指针强制赋值,
所以跳过了所有的检查,需要自己确定才行。 |
|
n*******w 发帖数: 687 | 47 bless!
1.写一段程序比较两棵树是否一样。
常见题。
2.有一个奇怪的linkedlist,除了next pointer还有一个random pointer指向一个随机
的节点。问如何实现clone函数。
最近版上刚讨论过。先creat big linkedlist然后split。
3.写一段代码,给一个字符串,例如"30*(5+10)",输出计算结果。
经典算法。两个stack,一个操作数,一个操作符。写代码其实不简单,要定义操作符
的优先级。
4.写一段代码,输入一个数组和一个数字,找两个数组元素和为给定数字。
经典题。允许O(n)空间,hashtable。否则先sort,一前一后两个指针往中间找。
5.输入一个linkedlist和一个数字例如:9->7->8->6->1->2 和 3,输出还是一个
linkedlist但是每三个数reverse一下,例如8->7->9->2->1->6。
版上最近刚讨论过。递归或者iterative都有。
6.如何求一个树的mirror(将所有节点的children节点反序排列).
跟遍历similar。
7.下面这道题目是吃饭的时候问的... 阅读全帖 |
|
g**********y 发帖数: 14569 | 48 今天收到recruiter电话offer。写下来跟大家分享。特别感谢yangcheng和PixelClassic,他们写的面经和心得对我帮助很大。
【Phone Interview】
都是老题。先问LinkedIn最喜欢的:
double pow(double a, int b)
我的Algorithm Project里有这个题,当时很想直接贴答案。后来忍住了。这是个中等
难度的题,里面很多细节,如果贴的话,他一问,我没有过脑子,有可能被问住,那个
印象就太差了。如果自己解的,哪怕有错,思考过之后,我很快 会有相应的回答。我
就是这样一个人:不管多简单的题,我都会错,但我会补得很快。
想清楚,开始写。尽管很小心,最后还是在边界条件错了,就是第一句:
if (b < 0) return pow(a, -b);
我少写了1.0/pow(a, -b);
但是我不觉得后悔。如果他因为这个把我毙了,那我也只能认倒霉。
接着给Amazon的favorite, 2-sum to fixed number, 我不喜欢写这个题。就直接告诉
他:两种答案,hashtable, 2个指针,我都写过,你要哪种... 阅读全帖 |
|
p*****2 发帖数: 21240 | 49
主要是C可以传指针,所以一个函数相当于可以返回很多的值。Java没有指针,只能返
回一个值。但是如果定义一个class的话,code很不漂亮。所以定义class变量可以出同
样的效果。但是一般都是写一个函数,定义个class也不漂亮。那就只定义全局变量?
这样code可以简洁。不知道这么做面试官怎么想。上次F死活不让我定义类变量。 |
|
s*****n 发帖数: 5488 | 50 this是作为参数传到函数中吧,用来访问object field?还是需要this 来做一次寻址?
C++调用成员函数的时,需要知道对象的this指针,由这个this指针来调用它的成员函 |
|