由买买提看人间百态

topics

全部话题 - 话题: 局部变量
1 2 3 4 5 下页 末页 (共5页)
a*****e
发帖数: 1700
1
这个例子只能说明 mutable by default 需要遵守一定规则 (使用 non-escaping 局部
变量)才能安全,想用它来例证 mutable by default 好?逻辑上讲不通。
为什么我说 non-escaping,因为如果使用 closure 捕捉局部变量成为环境变量,就
escape 了它们原先的定义域,mutation 会导致意想不到的状况,和使用全局 mutable
变量类似。
Y**G
发帖数: 1089
2
貌似用格式(A),只能定义同一类型的多个变量,比如
var 大徒弟, 二徒弟 string = "孙悟空", "猪八戒"
W***o
发帖数: 6519
3
B 是 inferred type,多个变量/赋值用逗号分开没有问题,compiler可以理解;
A 就有点乱了
n**********2
发帖数: 648
4
【 以下文字转载自 Programming 讨论区 】
发信人: xykkkk (asdf), 信区: Programming
标 题: 老码农冒死揭开行业黑幕:如何编写无法维护的代码(zz)
发信站: BBS 未名空间站 (Fri Nov 28 13:28:27 2014, 美东)
如何编写无法维护的代码
让自己稳拿铁饭碗 ;-)
– Roedy Green(翻译版略有删节)
简介
永远不要(把自己遇到的问题)归因于(他人的)恶意,这恰恰说明了(你自己的)无
能。 — 拿破仑
为了造福大众,在Java编程领域创造就业机会,兄弟我在此传授大师们的秘籍。这些大
师写的代码极其难以维护,后继者就是想对它做最简单的修改都需要花上数年时间。而
且,如果你能对照秘籍潜心修炼,你甚至可以给自己弄个铁饭碗,因为除了你之外,没
人能维护你写的代码。再而且,如果你能练就秘籍中的全部招式,那么连你自己都无法
维护你的代码了!
(伯乐在线配图)
你不想练功过度走火入魔吧。那就不要让你的代码一眼看去就完全无法维护,只要它实
质上是那样就行了。否则,你的代码就有被重写或重构的风险!
总体原则
Quidquid... 阅读全帖
x****k
发帖数: 2932
5
如何编写无法维护的代码
让自己稳拿铁饭碗 ;-)
– Roedy Green(翻译版略有删节)
简介
永远不要(把自己遇到的问题)归因于(他人的)恶意,这恰恰说明了(你自己的)无
能。 — 拿破仑
为了造福大众,在Java编程领域创造就业机会,兄弟我在此传授大师们的秘籍。这些大
师写的代码极其难以维护,后继者就是想对它做最简单的修改都需要花上数年时间。而
且,如果你能对照秘籍潜心修炼,你甚至可以给自己弄个铁饭碗,因为除了你之外,没
人能维护你写的代码。再而且,如果你能练就秘籍中的全部招式,那么连你自己都无法
维护你的代码了!
(伯乐在线配图)
你不想练功过度走火入魔吧。那就不要让你的代码一眼看去就完全无法维护,只要它实
质上是那样就行了。否则,你的代码就有被重写或重构的风险!
总体原则
Quidquid latine dictum sit, altum sonatur.
(随便用拉丁文写点啥都会显得高大上。)
想挫败维护代码的程序员,你必须先明白他的思维方式。他接手了你的庞大程序,没有
时间把它全部读一遍,更别说理解它了。他无非是想快速找到修改代码的位置、改代码
、编译,然后就能交差,... 阅读全帖
w***g
发帖数: 5958
6
这个问题之所以会发生,本质上是因为编译器设计的时候决定了堆栈地址是往下长的。
函数运行的时候堆栈结构是像下面这样的:
高地址
[返回地址]
[局部变量A]
[局部变量B]
[局部变量C]
....
....
[栈顶]
低地址
调用函数的时候就往栈顶压入返回地址,然后再压入局部变量,等函数结束的时候取出
返回地址,然后把栈顶调整到函数未开始时的地址。
如果局部变量B是一个数组,那么你让数组越界(buffer overflow)后就会把高地址存的
返回地址覆盖掉,然后函数返回的时候就会跳到一个随机的地方了。实际情况往往比这
个复杂的多,比如C/C++很少会把buffer分配在堆栈(stack)上,而是一般都分配在堆(
heap)上。这时候数组越界能越到堆栈上的返回地址的可能性就会减少,所以越界就得
越的相当多才行。对于古老的系统,甚至可以越界到指令内存,用恶意指令把程序本身
都覆盖了。
a*****e
发帖数: 1700
7
来自主题: Programming版 - 对 (im)mutability 的误解和深度理解
首先,没有任何 FP 语言是不支持 mutable 的!持有这种观点的,请先去补习一下基
础知识。
鉴别 FP (其实是 declarative)和 imperative 的关键是看它们对 mutability 的区分:
A. every variable is mutable. 多数 duck typed 脚本语言都是这类。
B. mutable by default, immutable by declaration. Java, C, C++ 等勉强属于这类。
C. immutable by default, mutable by declaration. SML, Clojure,
Haskell 属于这类。
然后 B 和 C 都还可以进一步细分,根据 declaration 到底是说变量,还是类型,还
是操作,以下是一些例子。但这之前,有必要先讲讲闭包歧义这个问题:
闭包(Closure)是说将一个函数体里面的非本地变量的值和当前环境(lexical scope
)变量的值做绑定。要弄清楚这里面的语义,在大多数语言里都势必牵涉到一个实现的
问题,就是如果当前环境里一个局部变量... 阅读全帖
a****a
发帖数: 5763
8
http://bbs.weiphone.com/read.php?tid=507486
Mac OS X 10.6即所谓的Snow Leopard操作系统已正式发售。一如既往,Apple产品光
鲜的外表下凝聚了太多艰辛的劳作。ArsTechnic的John Siracusa以其独特的、专业的
、全面的视角深入翔实地体验这款最新的操作系统。
Weiphone.com将对该综述进行翻译整理并独家连载。欢迎关注
2009年底,Apple为新上市的Snow Leopard推出了C语言扩展,称之为“block
”。 Block为C语言以及源于C语言的C++、Objective-C和Objective C++增添了闭包(
closure)以及匿名函数功能。这些功能已在动态程序语言(dynamic programming
language)上应用了很长的时间,诸如Lisp、Smalltalk、Perl、Python、Ruby甚至
JavaScript。尽管使用动态语言的程序员早已对闭包(closure)和匿名函数习以为常,
然而对使用更为传统的静态编译语言(譬... 阅读全帖
O******i
发帖数: 269
9
你这个数组是函数外定义的全局变量?量还是函数里定义的局部变量?或者是静态变量?
MAXPATHLEN多大?如果比较小,应该是没有问题的。
你可以改为动态分配,看看这个bug还有没有
如果是局部变量,改为全局变量或者静态变量,看看结果如何
h*h
发帖数: 27852
10
来自主题: Programming版 - 王垠: 编程的宗派
http://www.yinwang.org/blog-cn/2015/04/03/paradigms
编程的宗派
总是有人喜欢争论这类问题,到底是“函数式编程”(FP)好,还是“面向对象编程”
(OOP)好。既然出了两个帮派,就有人积极地做它们的帮众,互相唾骂和鄙视。然后
呢又出了一个“好好先生帮”,这个帮的人喜欢说,管它什么范式呢,能解决问题的工
具就是好工具!我个人其实不属于这三帮人中的任何一个。
面向对象编程(Object-Oriented Programming)
如果你看透了表面现象就会发现,其实“面向对象编程”本身没有引入很多新东西。所
谓“面向对象语言”,其实就是经典的“过程式语言”(比如Pascal),加上一点抽象
能力。所谓“类”和“对象”,基本是过程式语言里面的记录(record,或者叫结构,
structure),它本质其实是一个从名字到数据的“映射表”(map)。你可以用名字从
这个表里面提取相应的数据。比如point.x,就是用名字x从记录point里面提取相应的
数据。这比起数组来是一件很方便的事情,因为你不需要记住存放数据的下标。即使你
插入了新的数据成... 阅读全帖
c**********e
发帖数: 2007
11
来自主题: Programming版 - Is this a poor practice?
假设有如下函数:
int plusOne(int x) {
x++;
return x;
}
这种写法是不是很蠢?因为 x 既是输入变量又是一个局部变量。
对于这个具体问题来说,当然我们可以写成
int plusOne(int x) {
return x+1;
}
但是有时候复杂一点的情况,没法这么做。是不是得写成下面这样子?
int plusOne(int x) {
int y=x+1;
return y;
}
输入变量和一个局部变量倒是分清了,只是要多用一个变量。
大侠们怎么看?
p*u
发帖数: 2454
12
来自主题: Programming版 - 编程的宗派
总是有人喜欢争论这类问题,到底是“函数式编程”(FP)好,还是“面向对象编程”
(OOP)好。既然现在出了两个帮派,就有人积极地做它们的帮众,互相唾骂和残杀。
然后呢,又出了一个“好好先生帮”,这个帮的人喜欢说,管它什么范式呢,能解决问
题的工具就是好工具!
我个人其实不属于这三帮人中的任何一个。
面向对象编程(Object-Oriented Programming)
如果你看透了表面现象就会发现,其实“面向对象编程”本身没有引入很多新东西。所
谓“面向对象语言”,其实就是经典的“过程式语言”(比如Pascal),加上一点点抽
象能力。所谓“类”和“对象”,基本是过程式语言里面的记录(record,或者叫结构
,structure),它的本质就是一个从名字到数据的“映射表”(map)。你可以用名字
从这个表里面提取相应的数据。比如point.x,就是用名字'x'从记录point里面提取相
应的数据。这比起数组来是一件很方便的事情,因为你不需要记住存放数据的下标。即
使你插入了新的数据成员,仍然可以用原来的名字来访问已有的数据,而不用担心下标
错位的问题。
所谓“对象思想”(区别于“面向... 阅读全帖
t****a
发帖数: 1212
13
来自主题: Statistics版 - R environment 问题
很有趣的问题。稍微搜索尝试了一下
assign这个函数用来动态生成变量,pos用于指名这个变量应该生成在哪一个
environment中,参见as.environment。默认值-1表示生成在当前函数里(局部变量)
。取值1表示生成全局变量。
比如:
x=function() {assign('b',1,pos=-1); print(b)}; x() # 在x函数中动态生成局部变
量b,函数退出则b消失
x=function() {assign('b',1,pos=1); print(b)}; x() # 在x函数中动态生成全局变
量b,函数退出b仍然存在
w******1
发帖数: 520
14
来自主题: JobHunting版 - 贡献两道Bloomberg面试题
一.在c中分为这几个存储区
1.栈 - 有编译器自动分配释放
2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量
和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的>另一块
区域。- 程序结束释放
4.另外还有一个专门放常量的地方。 - 程序结束释放
二.在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和
常量存储区。
1.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储
区。里面的变量通常是局部变量、函数参数等。
2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序
去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程>序结束
后,操作系统会自动回收。
3.自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是
用free来结束自己的生命的。
l*********a
发帖数: 445
15
来自主题: JobHunting版 - (C / C++) 关于指针的引用,求助
看下面代码:
func()
{
std::vector _arr;
int* p = new int(0);
_arr.push_back(p);
p = new int(1);
_arr.push_back(p);
/* 若采用局部变量 p2 表示_arr第二个元素的引用,可以:*/
int*& p2 = _arr[2];
/* 问题:若p2不是局部变量,而是全局变量,也就是在说 p2 在函数体外部已经
声明为 int* p2 了,请问这时如何采用 p2 来表示_arr第二个元素的引用 ??? */
f****a
发帖数: 4708
16
来自主题: JobHunting版 - (C / C++) 关于指针的引用,求助
/* 若采用局部变量 p2 表示_arr第二个元素的引用,可以:*/
int*& p2 = (_arr[1]); // not [2]
/* 问题:若p2不是局部变量,而是全局变量,也就是在说 p2 在函数体外部已经
声明为 int* p2 了,请问这时如何采用 p2 来表示_arr第二个元素的引用 ??? */
Can't be a reference. For the value of the 2nd element:
int * p2;
p2 = _arr[1];
l*********a
发帖数: 445
17
【 以下文字转载自 JobHunting 讨论区 】
发信人: livinginusa (almond), 信区: JobHunting
标 题: (C / C++) 关于指针的引用,求助
发信站: BBS 未名空间站 (Wed May 26 12:13:35 2010, 美东)
看下面代码:
func()
{
std::vector _arr;
int* p = new int(0);
_arr.push_back(p);
p = new int(1);
_arr.push_back(p);
/* 若采用局部变量 p2 表示_arr第二个元素的引用,可以:*/
int*& p2 = _arr[1];
/* 问题:若p2不是局部变量,而是全局变量,也就是在说 p2 在函数体外部已经
声明为 int* p2 了,请问这时如何采用 p2 来表示_arr第二个元素的引用 ??? */
t****t
发帖数: 6806
18
来自主题: Programming版 - 求GCC高手
是这种意思, 但是你的例子不太对. 全局变量绝对不会share地址, 局部变量有可能
share, 也有可能根本没地址, 但是局部变量未初始化在编译时会有警告.
a****n
发帖数: 1887
19
来自主题: JobHunting版 - 关于判断stack grows up or down那道题
这个stack 是指函数调用的堆栈, 当然需要用函数确定了
这个题本身就是问被调函数和主调函数的栈的顺序
每一个frame里面放的都是当前的函数需要的局部变量和环境参数,具体一个函数内的
局部变量的顺序编译器相关
w****x
发帖数: 2483
20
来自主题: JobHunting版 - onsite后收到A家的拒信,面经。

好吧, 那程序跑得时候一个线程对应一个stack, call 一个function就套一个stack,
return一个function就收起一个stack. stack表达方式就是esp寄存器是栈顶, ebi是栈
基址, ebi+xxx对参数寻址, ebi-xxx对局部变量寻址. 当函数返回的时候esp = ebi +
xxx(参数空间), 当call一个函数的时候先push参数, 然后ebi = esp, 然后esp + 所有
该函数对应的局部变量空间. 这么答差不多了吧....
w****x
发帖数: 2483
21
来自主题: JobHunting版 - onsite后收到A家的拒信,面经。

好吧, 那程序跑得时候一个线程对应一个stack, call 一个function就套一个stack,
return一个function就收起一个stack. stack表达方式就是esp寄存器是栈顶, ebi是栈
基址, ebi+xxx对参数寻址, ebi-xxx对局部变量寻址. 当函数返回的时候esp = ebi +
xxx(参数空间), 当call一个函数的时候先push参数, 然后ebi = esp, 然后esp + 所有
该函数对应的局部变量空间. 这么答差不多了吧....
e*******s
发帖数: 1979
22
以下这段代码 把set的iterator直接传递到parameter为reference的函数里
报错
test.cpp: In function 'int main()':
test.cpp:110: error: invalid initialization of reference of type 'std::
string&' from expression of type 'const std::basic_string traits, std::allocator >'
test.cpp:67: error: in passing argument 1 of 'void foo(std::string&)'
make: *** [a] Error 1
如果修改代码
1. void foo(string &s) --> void foo(string s)
2. string s = *it; foo(s);
3. void foo(string &s) --> void foo(cons... 阅读全帖
b*********t
发帖数: 170
23
下午店面一个烙印,之前看了一下简历,印度某大学毕业,然后来美国读了个硕士,简
历上写着C/C++精通。
我问了一个跟字符串数组有关的题目,这个哥们上来就用char * words,然后告诉我
words[0]就是第一个string,以此类推。我很无语的提醒他,char*可以用来存一个
string,但words[0]是一个char,不是string,于是他马上换成char[],我说这跟char
*一样。然后他沉默了半分钟,说那我就不知道了
虽然我心里万马奔腾,但我看了看时间才过了10分钟,我总不能就这样挂电话吧,于是
我告诉他,我建议你用vector,代码写起来简单,他说我从来没有用过vector
(我心中那个翻腾啊,说好的C++精通呢?),于是我说那你就用char**或者char[][]
吧。
然后他就开始写代码,一开始我还盯着屏幕看他写code,5分钟之后我彻底放弃了。5分
钟的时间他一共写了8行,定义了5个局部变量,写了两个嵌套的for,最里面一个空空
的while。我当时心里一直在无力的呐喊,“说好的C精通呢?精通C语言的关键字吗?
”。我纠结了一下,我是否要给... 阅读全帖
r*****l
发帖数: 110
24
网上查了一下:
(1)char *tt = "test";
字符串常量“test”被保存在静态存储区。tt保存的是“test”在静态存储区中的地址
。当函数结束后,静态存储区中的“test”没有被free。所以地址返回有效。
(2)char tt[] = “Test”;
这个比(1)多了一层含义。"Test"还是被保存在静态存储区。但是还有一份它的copy
被复制给了局部变量tt。函数返回的是这个局部变量tt。所以会出错。
(3)如果将(2)改为
static char tt[] = “Test”;
就和(1)是一样的效果了(因为放在静态存储区了)。
P*****o
发帖数: 1077
25
来自主题: Programming版 - 弱问内存的问题
hi
谢谢大家,基本就像大家说的stack overflow,就是改用new/malloc.
这个事我在网上看到的
1> 定义了过大的局部变量(假如很大的数组,或者是struct/class(里面有成员是大型数
组));
2> 死循环.
3> 递归调用太深(递归函数的局部变量比较多).
4> 函数调用层次太深(跟递归比较类似).
5> 指针越界,从堆操作了栈.
e*******s
发帖数: 1979
26
以下这段代码 把set的iterator直接传递到parameter为reference的函数里
报错
test.cpp: In function 'int main()':
test.cpp:110: error: invalid initialization of reference of type 'std::
string&' from expression of type 'const std::basic_string traits, std::allocator >'
test.cpp:67: error: in passing argument 1 of 'void foo(std::string&)'
make: *** [a] Error 1
如果修改代码
1. void foo(string &s) --> void foo(string s)
2. string s = *it; foo(s);
3. void foo(string &s) --> void foo(cons... 阅读全帖
s*****s
发帖数: 27
27
我用Fedora Core 7,
按照kdevelop FAQ上的我已经在project options里设置了autocompletion
但是现在只能有变量名的autocompletion,没有类成员函数,成员变量
的autocompletion,不知道如何搞定。
比如我定义一个string mylongstr;
当我输入
mylongstr.
的时候,并没有弹出string类可用的成员函数和变量,只是在我输入
myl
的时候提示我mylongstr是个局部变量并且可以autocompletion.
另外,看见有人提示要build autocompletion database,但我不知道如何build,
也不清楚是不是我上面问题的原因所在。
w***g
发帖数: 5958
28
来自主题: Programming版 - 谁能示范一个小的C程序
前面的回复了的除了SSA以外,别的都是不懂装懂,一看就知道有多少水平。竟然还有
人说这个不是c的强项。你这个问题问得挺好,我给你演示一下。源程序叫hello.c,
贴在最后
$ make hello
$ objdump -t hello | grep XXX
00000000004006ec g F .text 00000000000001b1 XXX_TEXT
0000000000601070 g O .data 0000000000000004 XXX_DATA
0000000000400968 g O .rodata 0000000000000001 XXX_RODATA
0000000000601078 g O .bss 0000000000000004 XXX_BSS
$ ./hello
Global:
&XXX_DATA: 0x601070
&XXX_BSS: 0x601078
... 阅读全帖
r****y
发帖数: 26819
29
static的小红狼和站务是同域的全局变量。
像俺,就是函数内部的局部变量。。。还是被OO封装好的。。。
不过这么一来,鸭子等id是什么变量涅?
p*********t
发帖数: 2690
30
来自主题: Programming版 - 请问这个C++程序有什么问题吗
是不是微软的面试题? visual studio有时候就要求所有变量在程序开始declare.
考局部变量和全局变量.
a*****e
发帖数: 1700
31
来自主题: Programming版 - functional programming?
如果你要问我,我会说几乎没有什么是 FP 不适合的,就连内核以及嵌入式,FPGA 等
都有 FP 的解决方案。
这里我并不是说内核或者嵌入设备去跑 FP 语言的 runtime,而是说用 FP 的工具设计
的 DSL 跑在内核和嵌入设备上。比如你可以搜一下 se4L,它的一个实现是用 Haskell
写的,被用于证明所生成的内核的正确性。
I'm a big believer in DSL. 合理设计的 DSL 能够快速完成目标 domain 的编程要求
,所需要的只是一个有效的 DSL 开发环境,FP 在这方面非常适合。就象是一套合理设
计的库函数或者框架什么的,能够大幅度提高开发效率。但是库函数的组合调用通常都
是写在源程序里,写好就不可以改动。而 DSL 则是它本身可以被分析重组,写好之后
,还可以用程序处理变换,验证性质,生成高效代码等。元语言 (meta programming)
的技术目前也在抬头,但我认为还是 DSL 更灵活,因为 meta programming 所操作的
对象还是一个 general purpose 的语言所写的程序结构,很多时候我们只需要 domai... 阅读全帖
a*****e
发帖数: 1700
32
来自主题: Programming版 - functional programming?
如果你要问我,我会说几乎没有什么是 FP 不适合的,就连内核以及嵌入式,FPGA 等
都有 FP 的解决方案。
这里我并不是说内核或者嵌入设备去跑 FP 语言的 runtime,而是说用 FP 的工具设计
的 DSL 跑在内核和嵌入设备上。比如你可以搜一下 se4L,它的一个实现是用 Haskell
写的,被用于证明所生成的内核的正确性。
I'm a big believer in DSL. 合理设计的 DSL 能够快速完成目标 domain 的编程要求
,所需要的只是一个有效的 DSL 开发环境,FP 在这方面非常适合。就象是一套合理设
计的库函数或者框架什么的,能够大幅度提高开发效率。但是库函数的组合调用通常都
是写在源程序里,写好就不可以改动。而 DSL 则是它本身可以被分析重组,写好之后
,还可以用程序处理变换,验证性质,生成高效代码等。元语言 (meta programming)
的技术目前也在抬头,但我认为还是 DSL 更灵活,因为 meta programming 所操作的
对象还是一个 general purpose 的语言所写的程序结构,很多时候我们只需要 domai... 阅读全帖
N******K
发帖数: 10202
33
把所有raw pointer替换为 shared_ptr or weak_ptr 等等 是sb行为
函数的传入传出指针都用raw pointer就行 只要保证这个函数内部没有内存泄露就可
以 函数内部可以用shared_ptr 或者 unique_ptr
例外就是 类的成员变量 如果是其他类的指针 就得用shared_ptr 或者weak_ptr 当用
函数初始化这些成员变量时,函数输入要是 smart pointer
C++ 自动内存管理 靠的就是 函数返回时 清空stack 或者 {}结束 清空局部变量
模仿GC来用smart pointer是行为艺术
l**********9
发帖数: 148
34
来自主题: Statistics版 - 一道ADV 130 题目
我想online TUTOR的意思只是说在代码仅被编译未被执行时,symput初始化的变量时
local的,举例说明,如果这道题的代码变成:
%macro one;
data _null_;
call symput('proc','means');
run;
%mend;
proc &proc data=sashelp.class;
run;
则程序出错,因为call symput('proc','means');语句仅仅被编译,没有被执行,所以
他还是局部变量,只能被%macro里面的语句调用。但是如果代码改成:
%macro one;
data _null_;
call symput('proc','means');
run;
%mend;
%one();
proc &proc data=sashelp.class;
run;
则输出结果和原始代码一样。说到底,macro就是让系统执行一段事先设置好的代码,
和直接在macro外部定义全局变量没有区别,只是简化了操作而已。
s****d
发帖数: 1830
35
debug???
哈哈 老子高中的时候自己手写编译器维护运行时环境
怎么push bp
维护返回
bp+X多少是局部变量 bp-X是传递变量
老子大一手写 X386保护模式向从启动常驻监督管理程序
这种玩意也好意思拿出来吹
技校生真是搞笑 估计regular expression都看不懂
s****u
发帖数: 1433
36
你们大谈特谈全局变量局部变量之前,
搞清楚人家用的什么OS和编程语言没有?
一个单片机,不要搞那么高大上好不好啊。
s****u
发帖数: 1433
37
你们大谈特谈全局变量局部变量之前,
搞清楚人家用的什么OS和编程语言没有?
一个单片机,不要搞那么高大上好不好啊。
r****o
发帖数: 1950
38
来自主题: JobHunting版 - bloomberg面经
我觉得:
全局变量不赋初值肯定是0,
局部变量不赋初值则可能为一个不能确定的随机数。
我说的不一定对,呵呵。
P********l
发帖数: 452
39
来自主题: JobHunting版 - 一道二叉树的老题
我也没测,但是done同学的方法肯定不对。
1。使用了静态变量i,不严格。如何指望在第一层调用时i==0?
2。函数返回的当前层的局部变量。几乎总是返回0。正确的情况才是特例。
y**********u
发帖数: 6366
40
来自主题: JobHunting版 - 一道挺简单的题给搞砸了
我真看不出他这样多用一个指针,最多分配一个寄存器变量和内存地址的
和面试官无数次recursion, 建立activation record,保存当前的局部变量,跳转
activation record有什么劣势
这样的面试官估计就是找艹

了吗
才对
t****a
发帖数: 1212
41
memorize仍然是递归,递归就需要将push pop局部变量,这应该是变慢的重要原因吧。
另外memorize有stackoverflow的风险。JVM上似乎1W层就挂了。
由于会记住所有的调用,memroize还会吃掉大量的内存,可能造成out of memory。迭
代的方法可以自己选择保留什么变量所以没有这个问题。
t****a
发帖数: 1212
42
memorize仍然是递归,递归就需要将push pop局部变量,这应该是变慢的重要原因吧。
另外memorize有stackoverflow的风险。JVM上似乎1W层就挂了。
由于会记住所有的调用,memroize还会吃掉大量的内存,可能造成out of memory。迭
代的方法可以自己选择保留什么变量所以没有这个问题。
T*******e
发帖数: 4928
43
来自主题: JobHunting版 - 对scala很失望
可不可以watch非局部变量? 我现在用codeblocks在ubuntu上鼓捣c++. 找不到
哪里能像visual studio那样monitor一堆变量值,只好把我想看的变量都一个个加成
watch。
w****a
发帖数: 710
44
来自主题: JobHunting版 - 1小时前的G家onsite面经
背景:新鲜小硕,申的是2013北美new grads,SDE
地点:都柏林office
没签nda,直接放送了。坐等拒信,明年再来。
第一轮:
写一个bst的类,要求包含查找最小的节点的方法。并利用这个函数实现findNext()。
最后再写一个函数输出BST的inorder,非递归,用前面两个函数很容易写。
需要描述详细时空复杂度,最好情况最坏情况和平均情况。
第二轮:
第一题是isPow4。写了两种方法,查表法和循环法。分别解释时空复杂度。第二题是图
的最短路径。有障碍物。pow4他问的比较多,我还解释了INT_MAX是多少,long long一
开始他都没看懂。中间出了一点点小问题,但是改对了。因为我没考虑到1这个情况,4
的0次方是1。太粗心了。然后他让我别用hash_set,用普通方法做一个。我就写了个循
环的方法。循环的方法倒是一次性bug free了。pow4伺候完就开始第二题了。
最短路径那个时间不够了没做完。 不过没做完他倒是没说啥因为开始做这题的时候已
经就剩下10分钟了,他说没做完没事,讲下思路就行。我就没怎么花心思在code上,重
点讲了BFS,画了图给他描述了... 阅读全帖
w****a
发帖数: 710
45
来自主题: JobHunting版 - 1小时前的G家onsite面经
背景:新鲜小硕,申的是2013北美new grads,SDE
地点:都柏林office
没签nda,直接放送了。坐等拒信,明年再来。
第一轮:
写一个bst的类,要求包含查找最小的节点的方法。并利用这个函数实现findNext()。
最后再写一个函数输出BST的inorder,非递归,用前面两个函数很容易写。
需要描述详细时空复杂度,最好情况最坏情况和平均情况。
第二轮:
第一题是isPow4。写了两种方法,查表法和循环法。分别解释时空复杂度。第二题是图
的最短路径。有障碍物。pow4他问的比较多,我还解释了INT_MAX是多少,long long一
开始他都没看懂。中间出了一点点小问题,但是改对了。因为我没考虑到1这个情况,4
的0次方是1。太粗心了。然后他让我别用hash_set,用普通方法做一个。我就写了个循
环的方法。循环的方法倒是一次性bug free了。pow4伺候完就开始第二题了。
最短路径那个时间不够了没做完。 不过没做完他倒是没说啥因为开始做这题的时候已
经就剩下10分钟了,他说没做完没事,讲下思路就行。我就没怎么花心思在code上,重
点讲了BFS,画了图给他描述了... 阅读全帖
S*******C
发帖数: 822
46
http://oj.leetcode.com/problems/subsets/
第一种格式:res作为局部变量避免线程安全问题,但比较啰嗦
public ArrayList> subsets(int[] num){
if(num==null) return null;
Arrays.sort(num);
ArrayList> res=new ArrayList>(
);
res.add(new ArrayList());// [[]]
dfs(res, num,0,new ArrayList());
return res;
}
private void dfs(ArrayList> res, int[] num, int pos,
ArrayList temp){... 阅读全帖
z*c
发帖数: 63
47
来自主题: JobHunting版 - 求问一道用新语言写wordcount的题
题目就是经典的wordcount,给一个string array,让统计每个词的出现次数,并按出
现次数多少排序打印出。
如{“a”, "a", "b", "c"} 就打印
a 2
b 1
c 1
不过要求使用一种定义的新语言来写,该语言中的data structure仅包括array,
hashmap。且array和hashmap都是immutable的,也就是不能直接往hashmap里插数,只
能重新创建hashmap在原有的基础上加一个数。
我第一个思路是用hashmap存string和其出现次数。感觉难处有三:一是连把array过一
遍的for loop都不好写,因为该语言中无变量,连i++也没法用,二是hashmap在loop里
创建新的,属于局部变量,下一个loop里貌似就没法用到了 三是 如何sort结果也还没
想出来
第二个思路就是用mapreduce,该语言中包括map和reduce的方法,举的例子中map对一
个integer的array整体加减乘除一个常数得到一个新的array,reducer可以对一个
integer的数组进行sum或者两两相乘得到一个数作为结果... 阅读全帖
c****x
发帖数: 6601
48
来自主题: JobHunting版 - 什么是现实理想主义者(zz)
http://www.yinwang.org/blog-cn/2017/05/17/practical-idealism
曾经有人看了我的文章,以为我是一个“理想主义者”,来找我聊天。他说:“你知道
吗,我跟你一样喜欢干净优雅的代码。上次我在某公司工作,看到他们的代码乱得不成
样子,二话没说就给他们推翻重写了,结果有几个小地方跟原来的代码不大一样,后来
系统因此当掉了。老板对我说,明天你不用再来上班了!你说我是不是好心没好报啊?”
虽然我同情他丢了工作,然而我并不认同这种不经同意就把别人的代码推翻重写的作法
。我对他说:“哈哈,你不可以这样改别人的代码的!如果我是你老板,虽然可能不会
开掉你,却也会给你一个严重警告的。”
从我们的对话你也许已经发现了,我并不是一个通常人所谓的“理想主义者”。虽然我
有很多新颖而美好的想法,然而它们每一个都深深地植根在现实中。我反对一切不以现
实为基础的“理想”,我往往在很早的时候就发现和避免那些最终会失败的“理想主义
作法”。
如何对待别人的代码
那么我是如何对待别人的“垃圾代码”的呢?你也许会很惊讶我的做法:我尽量不动它
们!
虽然我喜欢干净优雅的代... 阅读全帖
d*****n
发帖数: 599
49
信号和误差的问题。可观测的局部变量和不可知的全部变量的问题。这个在应用数学里
面讨论很多。你的问题没有你描述的那么神秘。
你们笑数学,可笑的是,你们实验派的困惑,其实比较好的的一片数学博士论文里面在
解释结果的时候都有解释。
h**********c
发帖数: 4120
50
这个程序的目的是解一个叫'六角幻方'数字游戏(可以google,有详细介绍),在mitbbs最
早是在数学的leonanny提出征求解题思路,仁者见仁...
如果把m和n改了,就没有什么意义了,
这个程序可以在没有字典的情况下,进行brutal attack(don't do that illegally).我
个人命名其为,index permutation,如果已经有人提出,恕鄙人寡闻了.
我之前对这个程序做过改动,
就是把你改的局部变量全设为全局变量,不再在循环中使用 new, delete.
我稍后把改动过的程序贴上来,在我的q6600,m=7,n=19,上跑300秒.

30
1 2 3 4 5 下页 末页 (共5页)