l*y 发帖数: 21010 | 1 第二个,有一种快速给数组赋值的算法,速度比线性快,回头我有时间帮你找个链接 |
|
B*****t 发帖数: 335 | 2 Printer* Printer::makePrinter() {
Printer* pPrinter = NULL;
try {
pPrinter = new Printer;
} //编译器在这里加入了汇编代码。当Printer的构造函数或者Printer父类的构造
函数Throw Exception时,会自动跳到这里这些执行这些代码,然后根据分配给Printer
在堆上内存的地址,回收这些内存, 对pPrinter的赋值不会被执行,调用析构函数也不
会被调用。
...
}
有个
Con
存泄
看出 |
|
m****n 发帖数: 589 | 3 嗯嗯,是的,没错~
我刚跑了一下你写的代码。跑出来是对的~
不过,在y大于等于0的情况下,t没有赋值。
我的那个程序不就是这样吗?
就是多了几个没用i+1,你看看是不是。 |
|
|
n***r 发帖数: 105 | 5 很close了。我觉得这题是考pointer's pointer。
但我觉得怎么招都得知道前一个node的地址,得把其next pointer赋值为NULL,否则就
断链了。用pointer's pointer的好处是在遍历这个linked list的时候可以省去一个指向前一
个node的pointer。
比如说删除存有item为i的程序就可以这样写,但是还是require work through这个
list,以便持有前一个node的地址。
struct list **lpp;
for(lpp = &list; *lpp != NULL; lpp = &(*lpp)->next)
{
if((*lpp)->item == i)
{
*lpp = (*lpp)->next;
break;
}
}
}
用这段程序,就算删除的对象是尾node,也自动take care了。欢迎讨论 |
|
h**6 发帖数: 4160 | 6 显然不行。你把尾指针赋值为NULL了,可是前一个结点的next还是没有变。 |
|
j**l 发帖数: 2911 | 7 三江口内,风浪不息,铁索连舟,如履平地。
这是小尾羊同学Google最终面的一道经典题目
核心思想就是,先合后分。
先平凡复制整个链表,不考虑random指针。
充分利用random指针和next指针,把原始链表和复制的链表这两个链表关联起来。传说
中有两种连接法:一种是串成长度为2倍的新链表(类似一串珍珠),另一种是两个平行
但竖直方向对应节点相连的链表(类似横着的梯子)
不管哪种连法,都可以方便的给random指针赋值了。
然后不要忘记把两个链表的关联断开,成为两个一样的独立链表。 |
|
j**l 发帖数: 2911 | 8 老中的二倍珍珠解法,用百度搜索中文都可找到的,而且有图。
个人觉得还是老印的解法巧妙,下面具体用例子说说。
假如链表为A->B->C->D->E
A的random指向E, B的random指向D, C的random指向自身C, D和E的random都为NULL。
第一步,平凡复制原始链表,不考虑random指针(全部设为NULL)
这样得到A'->B'->C'->D'->E',所有random都为NULL
第二步,建立连接
让A的random指向A', B的random指向B', ..., E的random指向E', 成为梯子的单向辐条。
让A'的next指向E, B'的next指向D, C'的next指向C, D'和E'的next都为NULL, 也就是
用复制链表的next保存原始链表的原始random
A->B->C->D->E
| | | | |
A' B' C' D' E'
第三步,给A', B', C', D', E'的空random指针赋值
这样A'的random指向E', B'的random指向D', C'的random指向自身C', D'和E'的random
都 |
|
j**l 发帖数: 2911 | 9 你这黑白棋是只支持手动对战么?那样简单许多。
如果要支持电脑和人对弈,那就需要一些人工智能的算法了,大概和博弈树,搜索,剪
枝什么的有关。具体到这棋,还有金角银边草肚皮的赋值策略。上世纪末北京市高校就
搞过一个黑白棋程序大赛,我们学校得奖的还是三个大二学生合作的,一个人搞算法,
一个人写程序,一个人搞界面。
如果只是手动对战,有点数组的知识也够了,可以参考八皇后问题的程序,都需要处理
横竖斜的情况。
对了,最好可以提示哪些地方可以落子,因为必须吃子(夹着翻转对方棋子)才可以落
子,否则必须pass(原地不动让对方白走一步) |
|
y**i 发帖数: 1112 | 10 singleton需要构造函数,拷贝构造函数和拷贝赋值都是private的吧 |
|
r**m 发帖数: 163 | 11 申请个Bloomberg的实习还得onsite 啊?FT(附面经)
原以为两次店面就搞定
结果一面之后就通知去 NYC onsite
大家说说是搞什么飞机呢
题目太简单 都有些不敢拿出来给大家看
面经如下:
1. C中的static
2. 动态内存拷贝
3. 给定一个数组(已知数值在0-9范围)计算frequency
4. 定义一个global variable和local variable,不赋值,问输出值各位多少 |
|
j**l 发帖数: 2911 | 12 http://www.mitbbs.com/article_t1/JobHunting/31563337_0_1.html
三江口内,风浪不息,铁索连舟,如履平地。
这是小尾羊同学Google最终面的一道经典题目
核心思想就是,先合后分。
先平凡复制整个链表,不考虑random指针。
充分利用random指针和next指针,把原始链表和复制的链表这两个链表关联起来。传说
中有两种连接法:一种是串成长度为2倍的新链表(类似一串珍珠),另一种是两个平行
但在竖直方向对应节点相连的链表(类似横着的梯子)
不管哪种连法,都可以方便的给random指针赋值。
然后不要忘记把两个链表的关联断开,成为两个一样的独立链表。 |
|
f****4 发帖数: 1359 | 13 ac
FN是函数指针的定义,FN返回void,接受一个int参数
f1返回void,接受一个int
f2返回void *,接受一个int
在函数指针赋值的时候,直接取函数名f1和用 &f1是等效果的 |
|
j**l 发帖数: 2911 | 14 可以用例子说明,假如n = 5
首先让b从前向后一重循环累乘并赋值得到b的五个元素如下:
1, a1, a1*a2, a1*a2*a3, a1*a2*a3*a4
然后从后向前一重循环累乘
第五个元素乘1,
第四个元素乘a5
第三个元素乘a5*a4
第二个元素乘a5*a4*a3
第一个元素乘a5*a4*a3*a2 |
|
c**********6 发帖数: 105 | 15 店面一次 然后去他家onsite(非常规,怎么非常规 请看下面)
两个SDE一起面 一人一道题 感觉像在敷衍 总共不到50分钟
遇到一个VT的哥们儿
就两个intern 估计是二选一
现在还没回消息 估计杯具了 顺便恭喜他了下 :-)
史上最弱面经:
NO1. 之前店面:
1. C中的static
2. shallow copy vs deep copy
3. 给定一个数组(已知数值在0-9范围)计算frequency
4. 定义一个global variable和local variable,不赋值,问输出值各位多少
NO2. onsite
1. 用什么数据结构表示一个图像(RGB)
如何flip这个矩阵(实际上是transpose)
2. 25匹马 |
|
f****4 发帖数: 1359 | 16 这个题目有点意思
我先来抛个砖头吧
我记得COM通信的时候,有一个IDL的东西,用来提供数据的mapping
简单的说,就是通信双方约定了一套规则,这个规则规定了各个数据类型的长度,精度
等等东西,包括要是传送对象包含一个指针,如何将指针指向对象也打包起来,一块发
送给对方;对方收到后,创建对像的时候,正确赋值指针
这里是不是也要考虑到系统数据类型长度不一致的情况啊? |
|
f*******r 发帖数: 1086 | 17 Sorry,是的,这个的确是需要的!
在else里面给head赋值之前加一句
head.next = NULL;
head = root;
应该就可以了。 |
|
M********5 发帖数: 715 | 18
前面说要举的例子就是这样子的:
Base中有分配内存,Derived也有分配内存,如果我们有一个指针指向动态分配的
Derived,然后再
把这个指针赋值给指向Base的指针,然后delete指向Base的指针,就会出现内存泄露!
Base *pb;
Derived *pd = new Derived;
pb = pd;
delete pb; //这里就会出现内存泄露的问题
我想我这样解释不知道大家是否明白 |
|
j**l 发帖数: 2911 | 19 林锐的书有个例子
String& String::operator=(const String& other)
{
if (this != &other)
{
delete[] m_data;
int len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data, other.m_data);
m_size = len;
}
return *this;
}
如果不检查自赋值,delete后又去复制自己,就访问了dangling的野指针,这是危险的。 |
|
A***J 发帖数: 478 | 20 来自主题: JobHunting版 - 看看这道题 第一个我的理解是,你赋值了,但没有给地址, 第二个给了地址 |
|
s****n 发帖数: 1237 | 21 试了一下,如果
char string1[] = "ccc";
RemoveConsecutiveDuplicates(string1); 是可以的。
但是
char *string2 = "aaa";
RemoveConsecutiveDuplicates(string2); 是不行的,虽然complier不会报错,但是
run的时候在s[index]赋值的地方报 Access violation writing location 的错。
所以需要检验这个input到底是char * 还是char []。不过没有想出来怎么检验。 |
|
p********7 发帖数: 549 | 22 第二题是 30 1,是不是因为传入函数的参数顺序是从右到左
第三题 是对的,不知道A *p = 0;其实是给p一个NULL指针,还是没实例化,但是他可以调用
函数,因为这些函数不占用内存。
第八题和第二题类似,应该是个随机数,因为初始化列表的顺序是从右向左,所以你调用
getnumber先,赋值在后
第九题也不对,是随机数,10,40,随机数。只有全局变量才初始化为0 |
|
P*******b 发帖数: 1001 | 23 我估计你们的8字节对齐。我的是4字节对齐
感觉4字节对齐更多吧。
另外这道题有错误。static赋值不对吧? |
|
h**k 发帖数: 3368 | 24 1)声明一个函数指针,类型是Person类里的一个成员函数,它的参数和返回值都是空。
2)不确定是否编译出错。但是执行的时候你无法得到一个非public的成员函数的地址
,所以你无法赋值给method。 |
|
p********7 发帖数: 549 | 25 memset() 这理有问题吧
首先,如果sizeof是指包括了'\0'
其次,好像memset 用1去或者其他数是不能成功的,因为这样就实际是赋值为1,但是
是个
asic码,第三个memset超出char的范围了 |
|
l*********r 发帖数: 674 | 26 shared google doc document。当时写完了面试的人说不错。结果晚上吃完饭我自己
test一下发现有个地方写错了,有个赋值应该在大于的条件下,结果我写到小于的case
里面了。这个错很容易看出来的,不知道面完了人家还会仔细看么?还是说面完了人家
也就把这个google doc关掉了? |
|
f*****w 发帖数: 52 | 27 超过范围其实我也不确定,我说的是如果给int赋值超过范围,int储存的是bits里面较
低位,所以两个不相等。其实我也不知道回答的对不对。
Java的linkedlist不可能有loop,所以答案就是直接return false....我当时面试的时
候回答出这个感觉很无语。 |
|
S**I 发帖数: 15689 | 28 估计是这样:s2分配在stack上,对foo的调用结束时s2被deallocate,但是s2被分配的
那段内存还没有被覆盖,对t的赋值导致在stack上为t分配内存,于是t就指向了s2原先
指向的内存地址。
我觉得几乎不可能被利用,按标准来说这是undefined behavior,返回任何结果都是有
可能的,也包括正确的结果——但是这个不可能被事先预料到。 |
|
x*********g 发帖数: 69 | 29 运行了一下
3个hello world
input[3]=0x00 bad pointer。
问一下,
是不是char *input[]赋值,i位错误时,input[i]默认为0x00 |
|
f*********i 发帖数: 197 | 30 这个其实很好理解啦,因为质数相乘的结果是unique的,所以假设所有的字符个数是K
个,只要一一对应到头K个质数就可以了。不过要考虑overflow的问题,我当时是这样
回答的,当乘积太大的时候(超过longint的范围),就用字符来表示他们,比如111表
示为“111”,然后算字符串的乘积。
还有第四题,我当时回答是把board用一个2维N*N矩阵表示,如果一个cell已经占据了
,那么就是1,otherwise 0, 然后element也同样用2维M*N矩阵表示,根据形状赋值1
或者 0, 然后看能不能放入的方法是把element矩阵加到board矩阵里,如果有某个
cell的值超过1,那么就conflict。element的rotation可以表示为矩阵的rotation。但
是这样相加比较还是很复杂,因为要考虑M*N*4钟可能,也就是说,要考虑element的任
何一格覆盖这个cell的几率,并且4钟rotation都要考虑,他不是很满意。看看版上有
没有高人给我解惑了。
发信人: anson627 (anson), 信区: JobHunting
标 题: Re: MS on... 阅读全帖 |
|
z*s 发帖数: 209 | 31 我在Bloomberg的网站上投的简历,Financial Software Developer。几天以后就收到
了在线测试的邮件,四种编程语言选一种进行测试:C、C++、Java和C#,我选的C。一
共三十道题,都是五选一的选择题,每题限时三分钟。通过后接到电话面试的通知。
电话面试:
面试官是印度人,他说他在家用手机打的,我估计是当时纽约下大雪,上不了班了。然
后他又说他手里没有我的简历,让我先自我介绍一下。问的题大部分都是概念题。
1、进程、线程。
2、C语言存储空间的布局,堆、栈、静态存储区等等。问了一个具体的问题:
char *str = "Hello World"; /* 1 */
memset(str, 'a', 100); /* 2 */
第1句中的字符串和指针分别存储在什么地方?第2句会产生什么问题?他想要的答案是
Segmentation fault。
3、操作系统内存管理的一些问题,包括虚拟内存、页表、缺页处理等等。
4、网络,介绍一些你知道的网络协议,比较TCP和UDP,比较路由器和交换机,它们分
别工作在哪一层。
5、数据结构,链表、树、平衡二叉树等等。
6、... 阅读全帖 |
|
y*******i 发帖数: 100 | 32 (a) int i = -1;
(b) const int ic = i;
(c) const int *pic = ⁣
(d) int *const cpi = ⁣
(e) const int *const cpic = ⁣
答案说(d)不合法,其他都合法。d怎么不合法了,不是给一个const 的指针赋值了吗
? |
|
b*****n 发帖数: 482 | 33 13.9 Write a smart pointer (smart_ptr) class.
代码在下面。象第16行这样直接赋值,ref_count原来指向的空间就丢了。如果有另一
个smart
pointer指向同一个空间,那么ref_count分配的空间还可以access,但是count并没有
减一,所以
最终还是无法释放指针。
13 SmartPointer & operator=(SmartPointer & sptr) {
14 if (this != &sptr) {
15 ref = sptr.ref;
16 ref_count = sptr.ref_count;
17 ++*ref_count;
18 }
19 return *this;
20 }
有兴趣可以试试下面的test case:
SmartPointer spt1(new int(10));
SmartPointer spt2(new int(20));
spt2 = spt1; // the origina... 阅读全帖 |
|
h********m 发帖数: 116 | 34 不太明白,*p1, *p2我不是赋值了么?
如果不能这么直接print,那我该怎么输出*p1和*p2的值呢?分别赋给p3,p4?
我试了一下,下面这个程序还是segmentation fault呀?
int main(void)
{
char *p1, *p2, p3, p4;
*p1 = 'c';
*p2 = 'd';
p3 = *p1;
p4 = *p2;
printf("%c %c\n", p3, p4);
return 0;
} |
|
b******n 发帖数: 4509 | 35 char *p1 这种定义,编译器会默认给 p1 赋值为 null,
然后你 *null 当然会出现 segment fault |
|
i**********e 发帖数: 1145 | 36 p1 一直没有被赋值。
你赋的值是 *p1,也就是 p1 指向的地方。
但由于 p1 里的值没有被初始化,所以 p1 可以指向任意地方,这当然会造成
segmentation fault。
没有 segmentation fault 会更加恐怖,这意味着你程序里的 data 可能暗地里被修改
了!
一些常见面试题的答案与总结 -
http://www.ihas1337code.com |
|
j***y 发帖数: 2074 | 37 在193~194页,书里谈到了一个下面的问题:
---
Signedness of char. In C and C++, it is not specified whether the char data type is signed or unsigned. This can lead to trouble when combining chars and ints, such as in code that calls the int-valued routine getchar(). If you say
? char c; /* should be int */
? c = getchar();
the value of c will be between 0 and 255 if char is unsigned, and between -128 and 127 if char is signed, for the almost universal configuration of 8-bit characters on a two's complement machin... 阅读全帖 |
|
x***i 发帖数: 585 | 38 赋值为null即可。
就和file system一样。delete一个文件,只是mark为空。下次gc就可以把它回收掉 |
|
|
g**********y 发帖数: 14569 | 40 如果用count的话,count完为什么不直接赋值?反正都是整数。 |
|
r******l 发帖数: 10760 | 41 你这个程序里面,叶子节点的commen都没赋值就直接拿来用? |
|
s********k 发帖数: 6180 | 42 【 以下文字转载自 Programming 讨论区 】
发信人: silverhawk (silverhawk), 信区: Programming
标 题: 怎样判断什么情况下不会出现race condition
发信站: BBS 未名空间站 (Fri Jun 24 11:38:28 2011, 美东)
如果一个变量在多处被赋值,是不是首先假定会存在race condition?怎样判断什么情
况下不会出现race condition?
或者是首先假定不会有race condition,然后判断什么情况下会有race condition? |
|
|
c******e 发帖数: 545 | 44 打个比方说,地址在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也通不过,但是因为指针强制赋值,
所以跳过了所有的检查,需要自己确定才行。 |
|
g**********y 发帖数: 14569 | 45 1. 你有一种语言的dictionary,你有一大串string,没有delimit,你如何interpret成字
典中的字呢?
http://www.mitbbs.com/article/JobHunting/31488093_3.html
这个刚讨论过,就是把一个句子分拆成单词,既可以用Trie, 也可以DP。去search
ihasleetcode的帖子。
2. 给你一个字典array of strings (you may preprocess it if necessary)
任意一个单词,求最小的edit distance
一个单位的distance定义为:
a. replace a letter
b. delete a letter
c. insert a letter (also at any position)
这个我不知道有什么高效的办法,我就brutal force: 反复调用minimumEditDistance(
String a, String b),求最小值。
求最小值的时候可以加点智能,比如已知现在最小值为k, 那么word.length() +/- k... 阅读全帖 |
|
m**q 发帖数: 189 | 46
1. 你有一种语言的dictionary,你有一大串string,没有delimit,你如何interpret成字
典中的字呢?
http://www.mitbbs.com/article/JobHunting/31488093_3.html
这个刚讨论过,就是把一个句子分拆成单词,既可以用Trie, 也可以DP。去search
ihasleetcode的帖子。
=> 收到,多谢啦
应该是trie + backtracking 或者 trie + DP吧
2. 给你一个字典array of strings (you may preprocess it if necessary)
任意一个单词,求最小的edit distance
一个单位的distance定义为:
a. replace a letter
b. delete a letter
c. insert a letter (also at any position)
这个我不知道有什么高效的办法,我就brutal force: 反复调用minimumEditDistance(
String a, String b),求最小值。
... 阅读全帖 |
|
g**********y 发帖数: 14569 | 47 1. 你有一种语言的dictionary,你有一大串string,没有delimit,你如何interpret成字
典中的字呢?
http://www.mitbbs.com/article/JobHunting/31488093_3.html
这个刚讨论过,就是把一个句子分拆成单词,既可以用Trie, 也可以DP。去search
ihasleetcode的帖子。
2. 给你一个字典array of strings (you may preprocess it if necessary)
任意一个单词,求最小的edit distance
一个单位的distance定义为:
a. replace a letter
b. delete a letter
c. insert a letter (also at any position)
这个我不知道有什么高效的办法,我就brutal force: 反复调用minimumEditDistance(
String a, String b),求最小值。
求最小值的时候可以加点智能,比如已知现在最小值为k, 那么word.length() +/- k... 阅读全帖 |
|
m**q 发帖数: 189 | 48
1. 你有一种语言的dictionary,你有一大串string,没有delimit,你如何interpret成字
典中的字呢?
http://www.mitbbs.com/article/JobHunting/31488093_3.html
这个刚讨论过,就是把一个句子分拆成单词,既可以用Trie, 也可以DP。去search
ihasleetcode的帖子。
=> 收到,多谢啦
应该是trie + backtracking 或者 trie + DP吧
2. 给你一个字典array of strings (you may preprocess it if necessary)
任意一个单词,求最小的edit distance
一个单位的distance定义为:
a. replace a letter
b. delete a letter
c. insert a letter (also at any position)
这个我不知道有什么高效的办法,我就brutal force: 反复调用minimumEditDistance(
String a, String b),求最小值。
... 阅读全帖 |
|
s***h 发帖数: 662 | 49 我在处理一个char array c[], 想把它从某个位置开始,向左移一个字符,这样原来那
个字符就被删掉了。
比如说,c[100], 从51到100向左移一个字符,那么50就被overwrite
假定已经有指针指向c[51], 称为p,实际这个操作等于
while (*p)
{
*p = *(p+1);
p++;
}
这个让我不由会想到
while (*p)
*p = *(++p);
这个不是看起来比刚才那个好看多了吗?不过这样++在执行的时候,也把左边给先改掉
了。所以就突然想弄清楚赋值的时候左右两边的表达式求值的顺序。有哪位给解说一下? |
|
i*****e 发帖数: 63 | 50 *p = *(p++) 应该可以吧
赋值一般是先算右边吧,你这个是++p 和 p++的区别 |
|