由买买提看人间百态

topics

全部话题 - 话题: 赋值
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
p**z
发帖数: 65
1
首先,我同意 Python 里的 name 也叫做 variable。Python 自己文档里面就是混用的
。但是它的真正行为确实是一个名字,跟其他 statically typed 语言的变量有所不同
。另外,原帖中 by value 和 by reference 的表述并不准确,因为那是我以 VB.NET
的行为来打比方的,并没有严格按照这两个术语的原意。
我简单看了一下 Python 和 Java 的文档,觉得它们还是有很大不同的。
对于 Python,可以看一下它的 language reference, 3.1. Objects, values and
types, 以及 4.1. Naming and binding。如果我理解没有错的话,Python 没有简单数
据类型,所有的数据都是对象。每个对象有自己的唯一的身份(不可改变),类型(不
可改变),内容(有些 immutable,比如整数,浮点数,字符串;有些 mutable,比如
list,dictionary)。Python 是 dynamic typing 的,就是说一个名字(变量)使用
前不用声明数据类型。它的实... 阅读全帖
T*******I
发帖数: 5138
2
你如果不同意我的数值赋值结果,可否提供你的赋值方法,让我们试试你的赋值或测量结果如何?
按照你的理解,各种族的文明创造能力该赋什么值比较好呢?
n**********r
发帖数: 4
3
文化自信是一个国家、一个民族发展中更基本、更深沉、更持久的力量。我们的文
化自信和中华优秀传统文化密切关联。习近平总书记曾经强调,在新时代要推动中华优
秀传统文化创造性转化和创新性发展。在这方面,习近平总书记本人率先垂范,在他的
一系列重要讲话和文章当中,无论是谈治国理政的重大问题,还是在国际场合阐明中国
的原则、观点、立场,抑或是在基层和干部群众倾心地交谈,习近平总书记经常会引用
一些中国经史典籍当中的华章佳句,不仅对这些中华优秀传统文化的精髓有精准的阐释
,而且赋予了新的时代内涵,闪烁着新时代的思想光芒。这些华章佳句,又和习近平总
书记朴素的大众化的语言鲜活地融合在一起,真正实现了让古籍里的文字活了起来。
正在中央广播电视总台《百家讲坛》播出的系列节目《平“语”近人——习近平总
书记用典》,共分12期,每期节目确立一个主题,邀请一位思想解读人,一位经典释义
人,和大家一起重温习近平总书记重要讲话和论述当中的用典。本版在此特别约请《平
“语”近人——习近平总书记用典》节目的经典释义人王立群撰写文章,阐释学习典故
的丰富意义。
——编 者

典故,在古代又称事类。南朝文论家刘勰的《文... 阅读全帖
h**6
发帖数: 4160
4
来自主题: JobHunting版 - 求教一个算法面试问题,被难住了
本题可分三步走:
1.把长度为 n 的数组分为 m 段,每段不为空。对应每一种分段法,把第一段全部赋值
为0, 第二段全部赋值为1,……,最后一段全部赋值为 m-1。
2.此时得到升序排列的有重复元素的数组,且 0~m-1 每个元素至少出现一次,使用
next_permutation 函数得到其全排列。
3.根据数组中每一个元素值,把矩阵对应位置元素设置为0,其余为1。
明显,第二、三步都很容易,现在我们看看如何进行第一步,数组分段。
众所周知,把长度为 n 的数组分为 m 段,一共有 C(n-1,m-1) 种方法,其中 C(,) 是
组合数。
1)以数组形式列出所有 n-1 中选 m-1 的组合数,此时得到一个长度为 n-1 的数组,
下标范围为 0~n-2 ,其中有 m-1 个1,其余为0。
2)在数组首尾两端各缩进一格,即位置 -1 和 n-1 处,设置起点和终点。
3)对应每一个组合数,一定能找出一个分段方法与之对应,具体如下:
第一个1与起点的距离为第一段长度,
第二个1与第一个1的距离为第二段长度,
……
第 m-1 个1与第 m-2 个1的距离为第 m-1 段长度,
终点... 阅读全帖
a********m
发帖数: 15480
5
来自主题: JobHunting版 - 请问这是什么level的面试题
简单说几句。板上大牛多,俺板门弄斧下,再说大牛们估计也觉得说这个太简单了。如
果有错误请指出。谢先。另外俺用c/c++的前几年也不是很理解很多细节,只管记语法
,或者有些理解错误,所以刚开始用c++的童鞋不清楚这个的话也是正常的。
首先要知道c++对象和structure除了缺省private以外没有区别。都是一堆成员变量组
成一个内存块。
但是如果类有一个虚函数以后每个对象会在开头多一个指针变量。现在的机器和编译器
一般来说是4个字节。这个指针指向这个类的虚函数表,而且所有的同类对象的指针都
指向同一个表。虚函数调用是先去这个表查询一下(编译器会分配一个下标),调用函
数实际类似 _vtable[下标](.....),其中_vtable 相当于(*(void*)pobj).
编译器编译虚函数的时候不是生成函数跳转,而是生成一个下标。对于同一个函数,基
类和子类有不同的虚函数表,但是有相同的函数下标。所以做_vtable[下标]动作的时
候虚函数就是子类的的实际函数了,只要指针本身是正确的(指向子类或者基类,而不
是强制转成乱七八糟的指针)。总的来说编译器负责产生下标,而对象负责提供一... 阅读全帖
a********m
发帖数: 15480
6
来自主题: JobHunting版 - 请问这是什么level的面试题
简单说几句。板上大牛多,俺板门弄斧下,再说大牛们估计也觉得说这个太简单了。如
果有错误请指出。谢先。另外俺用c/c++的前几年也不是很理解很多细节,只管记语法
,或者有些理解错误,所以刚开始用c++的童鞋不清楚这个的话也是正常的。
首先要知道c++对象和structure除了缺省private以外没有区别。都是一堆成员变量组
成一个内存块。
但是如果类有一个虚函数以后每个对象会在开头多一个指针变量。现在的机器和编译器
一般来说是4个字节。这个指针指向这个类的虚函数表,而且所有的同类对象的指针都
指向同一个表。虚函数调用是先去这个表查询一下(编译器会分配一个下标),调用函
数实际类似 _vtable[下标](.....),其中_vtable 相当于(*(void*)pobj).
编译器编译虚函数的时候不是生成函数跳转,而是生成一个下标。对于同一个函数,基
类和子类有不同的虚函数表,但是有相同的函数下标。所以做_vtable[下标]动作的时
候虚函数就是子类的的实际函数了,只要指针本身是正确的(指向子类或者基类,而不
是强制转成乱七八糟的指针)。总的来说编译器负责产生下标,而对象负责提供一... 阅读全帖
c********t
发帖数: 5706
7
来自主题: JobHunting版 - 问个弱智java问题
都说local variable必须赋值,包括primitive
为啥我看到很多(大多数)程序,int[] 都不赋值就可以用和返回?比如下面统计字符
出现次数程序,对于int[] counts = new int[256];难道不用整个赋值0,再用和返回
吗?
int[] charCounts(String s) {
int[] counts = new int[256]; // maximum value of an ASCII character
char[] c = s.toCharArray();
for (int i=0;i counts[c[i]]++;
}
return counts;
}
z*y
发帖数: 1311
8
来自主题: BuildingWeb版 - is this possible
thank you, 有个奇怪的现象
alert(x) 显示的是正确的
但送过去的URL里只有password,“.../submit.php?password=xxx”
name和date都消失了
个人感觉那个action的赋值语句没有作用,仍然只送form中的那个input
但如果这个赋值语句没有用,那它怎么知道要去找submit.php呢?
在form里面没有告诉它啊
如果有用,为什么它没有把x全部传过去?
OK,我的结论是action的赋值不能贴参数上去,系统不认
我把它改成
document.forms["myform"].action = "./submit.php?name=XYZ&date=20100908" + x;
仍然只有password
s******u
发帖数: 179
9
谢谢你的回复。对指针,无论是C里的还是fortran里的,我想最少有一点是相通的,用
指针赋值要比直接传值快,这就是我在我的fortran程序里大量使用指针的原因,因为
我要频繁把这些值取出来操作。在我测试的时候发现,把这些值取出花费了比我想象得
多得多的时间。
至于您提到的三个问题,第一个array subsection是指对大矩阵的一部分进行操作么?
在fortran中,指针能令对部分矩阵元素操作更便捷,比如定义一个指针数组,指向某
一个大矩阵的部分元素,那么对这个指针数组的操作要比对原矩阵操作更有效和快速。
第二个问题,矩阵赋值,用指针也能够比直接赋值要快吧,毕竟只需要把地址传过去就
行了。
第三个问题,我对c没怎么深究过,不清楚具体怎么回事。但是fortran中好像不能对地
址进行操作,在fortran中得不到一个数组的地址,我也想过把这些数据存在一个连续
空间中,然后安地址一个一个往后读,但是不知道怎么在fortran中得到这个数据的地
址。
谢谢您的回复,感激涕零.
d*****b
发帖数: 9
10
来自主题: Programming版 - 为什么java要用setter和getter
"也许你辛辛苦苦写下了一百多行给某个public属性赋值的语句后,
忽然你的manager或客户要求你在给那个属性赋值的同时一定要synchronized()什么东
西,这时你就必须在每个赋值的地方进行改动。"
这个概率对于大多数人来说也太低了吧...要是因此给每一个public属性都加上setter
和getter,是否感觉有点儿累.
该不该加,我认为还是应该具体问题具体分析.
k****e
发帖数: 126
11
来自主题: Programming版 - 问一个volatile和memcpy一起用的问题
C99里面对function call是这样规定的,6.5.2.2 Function calls:
If the expression that denotes the called function has a type that does
include a prototype, the arguments are implicitly converted, as if by
assignment, to the types of the corresponding parameters, taking the type of
each parameter to be the unqualified version of its declared type.
对于assignment是这样规定的,6.5.16.1 Simple assignment:
one operand is a pointer to an object or incomplete type and the other is a
pointer to a qualified or unqualified ver... 阅读全帖
L*****e
发帖数: 8347
12
来自主题: Programming版 - type inferience 好处是什么
Type inference和dynamic type不是一回事,正确使用是节省脑力(对编译器的影响更
是近似于0)。
首先,使用type inference不算“不清楚表明type”,它的type在initialize的
statement的时候确定了。所谓的“根据上下文思考推断类型”只是看右边赋值的type
。你使用type reference的时候不一样要看右边赋值的type?
在右边赋值type套有多层namespace的时候,使用type inference可以节省脑力担心两
边type不match并使code简洁。两边type不match时造成编译错误也就罢了,如果右边
type正好继承左边type,就悄悄地把非有意的type convert bug带进来了。
另外,在refactor的时候type inference也有一定好处,比如说你有一段code:int
maxNum = getMaxNum();本来getMaxNum()是return int,但是某一天refactor,
getMaxNum return long 或者 double了,你还要回去改maxNum的... 阅读全帖
V*********r
发帖数: 666
13
来自主题: Programming版 - 求教python问题,在线等 (转载)

恰恰相反,Python赋值和“传参”,在Python语言层面,都是纯粹地传引用,不是传值;
在CPython实现中,其实是传(二级)指针,只不过指针的概念没有往上暴露给Python。
比如这段python代码,a-->b传参时,传给b的就是a这个符号所指示的那个对象的引用。
def modify(b):
b[1] = 9

a = [0,1]
modify(a)
print(a[1]) # output 9
Python“传参”其实就是赋值,完完全全地等效。上述代码等效于:

a = [0,1]
b = a
b[1] = 9
print(a[1]) # output 9
第一段Python代码的大致等效的C语言代码如下:
#include
void modify(void *b) {
int **c = (int **) b;
(*c)[1] = 9;
}
int main()
{
int *a = malloc(2 * sizeof(int));
a[0] = 0;
a[1] = 1;
modi... 阅读全帖
b*******g
发帖数: 603
14
来自主题: Programming版 - FP 之我见 (长)
你写个方法, f(x), 然后调用f(1),不叫赋值?对参数赋值也叫赋值。fp的特征是没有
side effect而已。
f******x
发帖数: 98
15
来自主题: Programming版 - FP 之我见 (长)
问题是,你不知道x到底是多少。还得防备别的thread改它的值。
FP主张不用赋值表达同样的逻辑,而且所有的variable都是immutable,更清楚明了。
前面说过赋值不是必须的,没有赋值对世界的描述也可以是完全自洽和完备的。数学物
理里面是没有x=x+1这种东西的。
r*****8
发帖数: 2560
16
来自主题: Programming版 - C 语言,初学者,简单问题(2)
正常人怎么写?我没上过C语言课,最近用到,匆匆看了一点。
怎么给字符串指针赋值才是正确方法?谷歌出来结果很乱。
如果是array字符串可以初始赋值,或者strcpy(),
正确方法怎么给字符串指针赋值?
谢谢指点!
w***g
发帖数: 5958
17
来自主题: Programming版 - R已经是第六大语言了....
R是我平生见过设计最差的预言之一. 我碰都不想碰.
光赋值就有这么多形式.
x <- value
x <<- value
value -> x
value ->> x
x = value
然后比较还是得用"=="
(Pascal系: 赋值用:=, 比较用=. C系: 赋值用=, 比较用==.
Haskell: 所有的箭头都是通过库实现的.)
b***i
发帖数: 3043
18
来自主题: Programming版 - 用volatile退出线程对不对?(C++)
我觉得不是memory barrier的问题。memory barrier前面有很多人提过,就是会防止打
乱次序。可是我代码里面设置quit=true;的语句前后没有其他代码。总不能把if的条件
和结果给打乱了吧?
UI回叫
void UIcallback(...){
quit=true;//这里没有任何其他语句
}
或者TCP处理的回叫
void TCPcallback(...){
...A
if (字符串=="QUIT")
quit=true;//这里没有任何其他语句
else
...B
...C
}
有个if在那里总不能把...A和quit=true;交换顺序吧?在这里即使有A/C这两个语句,
也是和quit=true互斥的,就是说我不可能在线程需要退出了还要继续进行其他的操作
。如果有人问那一定要进行其他的操作怎么办,比如释放资源。办法很简单,在线程的
while结束后操作。所以我说很多人引经据典都是对普通的情况的建议。对我这种具体
的情况,就一个bool,所以不需要critical section,就一... 阅读全帖
w***g
发帖数: 5958
19
来自主题: Programming版 - 用volatile退出线程对不对?(C++)
楼上帮我看看下面的说法有没有问题。
memory barrier有两种:
1. soft barrier: 阻止编译器乱优化。一般以volatile关键字的形式出现。编译后不
会产生对应的指令。有时候-O3出错,但是-O0对了,肯定是缺了soft barrier。
2. hard barrier: 阻止CPU乱执行。一般是以汇编指令/intrinsics的方式出现。改优
化级别不能解决hard barrier用错的问题。
外加一个独立的atomicity问题。
memory barrier和atomicity是两个不同的问题。比如a = a+ 1这个操作,涉及读/算/
写,即使用了memory barrier,在多线程之下还是会出问题。然而反过来,要保证
atomicity必须得用hard barrier。所以gcc的__sync_fetch_and_xxx系列指令全都有
hard barrier
的效果。std::atomic对于基本类型应该就是编译成__sync_fetch_and_xxx,复杂类型
应该是用锁实现,间接涉及__sync指令。所以不管怎样,也都有hard barri... 阅读全帖
o********l
发帖数: 677
20
基本原则:
1.家庭所有收入为双方共同所有。
2.家庭是社会的最小单位,所以社会的税收办法可以应用到家庭内的财富分配和公共事
务的支出。
方法:
1.对社会劳动(在外面上班)和家庭劳动(做家务、看孩子、上床)利用该劳动的价格
对家庭内所有劳动进行量化,比如上班一年可以赚10万,记为10;孩子上daycare一年
要1万6,那么全职在家带孩子的劳动就记为1.6;同样招妓一次如果要100的话,那么陪
对方上床一次的劳动就记为0.01;以此类推,对所有劳动进行量化、赋值。
2.计算各单位劳动的家庭内的实际价格,假定家庭所有收入为20万的话,根据1的赋值
情况计算出所有劳动的总量(假设是200),然后用所有收入(20万)除以所有劳动,
这样就得出了单位劳动的价值,比如1000.
3.计算单项劳动的家庭内价格,根据单位劳动的价格和单项劳动的劳动单位数量计算出
单项劳动的价格。比如,根据1,上班工作的劳动量为10,那么乘以单位劳动的价值
1000,可以得出上班这项工作的实际家庭内价格为10000;同理,带小孩的劳动量为1.6
,那么这个工作的家庭内价格为1600;上床一次的价格为10.
4.计算每... 阅读全帖
o*o
发帖数: 4495
21
来自主题: Military版 - 借人气,问个软件问题
有熟悉IAR workbench for ARM的吗?
在IAR环境下面,有些最最基本的代码(比如赋值语句,给全局变量赋值)被IAR编译器
直接或略掉了。系统没有任何提示,只是在单步执行时或disassembly窗口中能看到有
些语句给莫名其妙地或略了。
以前都是使用其他IDE,没有过这个问题. 初次使用IAR,肯请援手。
b**********s
发帖数: 9531
22
谢谢你的连接,很有信息量。
不过我还是坚持我的观点。”如果大力投入,计算机可以赢人类最高手“ 关键在于大
力投入,你给的连接都是一些研究者在进行电脑围棋工作,他们缺乏深蓝的资源。比如
深蓝研究国相的时候,定义了什么是好棋什么是臭棋,给了赋值。而电脑围棋在这方面
缺乏积累,还没有一个好的赋值系统。另外现在研究电脑围棋都是散兵游勇,比如他们
知道围棋选手怎么思考的吗?他们团队里有没有职业5段(假设等于国相大师)以上又
懂人工智能的呢?
2012年电脑可以让四子赢武宫正树。
https://gogameguru.com/zen-computer-go-program-beats-takemiya-masaki-4-
stones/
另一个新闻里,crazy go vs. Yoda 居然用的是macbook:
http://www.wired.com/2014/05/the-world-of-computer-go/
所以随着硬件,平行计算的系统升级,电脑赢人是班上钉钉的事。也许5年,也许10年
,总之电脑不能赢围棋冠军是很快就被戳穿的谎言。

Newsgroup
Lasker
N*******e
发帖数: 580
23
停留在矇昧阶段
为什么白完湖北四川这种地方的外f也很多?
因为这些地方的人,封建残余特别深重
内心里一定要装一个“等级制”
这个结构不能变
争论的无非是上等级这个变量的赋值问题
外f赋值为洋爹
真是贱
不打破“等级制”这个结构本身是不行的
但是你让封建残余深重的穷地方人打破“等级制”,好像要了他们的命,虽然他们大多
在等级制的下位
e***p
发帖数: 142
24
来自主题: Faculty版 - Benren2:小学一年级算术题求解
前几天,有人在微信朋友圈贴出一道据说是小学一年级的算术题,还神秘兮兮声称,10
个成年人中,只有一个人能解出。
该题可以用数学语言表达为:8个变量a, b, c, d, e, f, g, h 在1到8范围内取不同值
, 求解下列4个等式中此8个变量的赋值:
1. a+b=9
2. c+d=7
3. e-f=1
4. g-h=2
这是一道特定取值区间异值多变量等式求解题。数学好的人,应该能轻易证明此8个变
量的赋值域。笨人只能用暴力算法(brute force algorithm),得到下面结果:
第4等式的g-h之差,若是双数2, 4或6,此题无解;若是单数1, 3, 5 或7,则此题可解
。估计原题是把第四等式写错了,10个成年人10个都解不出来。
如果把上面第四等式改为g-h=3,则有下列3组且只有3组的解:
第1组:
1+8=9
3+4=7
7-6=1
5-2=3
第2组:
2+7=9
1+6=7
4-3=1
8-5=3
第3组:
3+6=9
2+5=7
8-7=1
4-1=3.
即:
a=1, 2, 3
b=8, 7, 6
c=3, 1, 2
d=4, 6, 5... 阅读全帖
b******a
发帖数: 588
25
基本原则:
1.家庭所有收入为双方共同所有。
2.家庭是社会的最小单位,所以社会的税收办法可以应用到家庭内的财富分配和公共事
务的支出。
方法:
1.对社会劳动(在外面上班)和家庭劳动(做家务、看孩子、上床)利用该劳动的价格
对家庭内所有劳动进行量化,比如上班一年可以赚10万,记为10;孩子上daycare一年
要1万6,那么全职在家带孩子的劳动就记为1.6;同样招妓一次如果要100的话,那么陪
对方上床一次的劳动就记为0.01;以此类推,对所有劳动进行量化、赋值。
2.计算各单位劳动的家庭内的实际价格,假定家庭所有收入为20万的话,根据1的赋值
情况计算出所有劳动的总量(假设是200),然后用所有收入(20万)除以所有劳动,
这样就得出了单位劳动的价值,比如1000.
3.计算单项劳动的家庭内价格,根据单位劳动的价格和单项劳动的劳动单位数量计算出
单项劳动的价格。比如,根据1,上班工作的劳动量为10,那么乘以单位劳动的价值
1000,可以得出上班这项工作的实际家庭内价格为10000;同理,带小孩的劳动量为1.6
,那么这个工作的家庭内价格为1600;上床一次的价格为10.
4.计算每
o*********r
发帖数: 32
26
来自主题: JobHunting版 - 快问一个C的问题
1. for(int i=0;i 这两种表示应该是一个效果吧,只是不同编程习惯问题吧?
2. str[j++] = tmp[--i] vs str[j++] = tmp[i--]
这两种不一样,前者i先dec,再赋值,后者先赋值,在i dec。
弱问我的理解应该没有错吧~
f****4
发帖数: 1359
27
明天bbg,第2次电面,紧张的期待中,求bless
整理了一下stl container element的一些东西,还有auto_ptr直接赋值
class A做为container element,run下代码就知道A成为container element的限制条
件;auto_ptr直接赋值,有地方说这个动作属于未定义,但没找到standard
class A{
private:
A(){}
//~A(){} // Error:
//A(A &a){} // Error:
//operator =(A &a){} // Error:
bool operator ==(A &a){}
bool operator <(A &a){}
int member;
public:
A(int a):member(a){}
};
int main(){
typedef tr1::shared_ptr SharePtr;
vector vec1;
Share
n******h
发帖数: 50
28
来自主题: JobHunting版 - 一道老题
你的第二步里的前两句需要extra space,因为原始链表的random赋值需要复制链表的
next,而复制链表的next赋值需要原始原始链表的random。你恐怕要N个临时指针。

条。
z****g
发帖数: 1978
29
来自主题: JobHunting版 - 问个MS 老问题
你std::list里放指针不就行了,本来就是双向链表链来链去的,有什么复杂度,都是
赋值而已。说的好像你swap两个元素不用赋值
y*********e
发帖数: 518
30
来自主题: JobHunting版 - what is java enclosure-今天被hm问倒了
感觉对方是在问 Closure。
这个是 Java 对 Lambda 表达式的实现。Java 7 已经确定在语法上支持这个。
Java 6或者以前的版本只能靠 interface + anonymous class 来实现。
若是做过 functional programming(比如haskell),应该对 Lamdba 表达
式比较熟悉。
从C++的角度来看,就是 function pointer,但是它是 Strongly Typed。
举例代码来说明。假设要对二叉树遍历,代码很好写,比如:
void inOrder(Tree tree) {
if (tree != null) {
inOrder(tree.getLeft());
System.out.println(tree.getValue());
inOrder(tree.getRight());
}
}
但是如上的函数只是把Node的值打印到终端。若是要变得generic一点,要遍历的
过程中,能引入一个函数,对每一个Node执行这个函数,该多好。这样就引入了一
个概念:能... 阅读全帖
d****j
发帖数: 293
31
来自主题: JobHunting版 - Facebook Phone Inteview + 流程请教
Combination: 如果这样的话,有点大材小用了吧,一个是2^n的复杂度,另外一个是多
项式复杂度,只修改打印方程会浪费很多时间
我的想法,另外用一个数组value作参数存取被选中的数字,还是用recursive的方法,
用一个index来记录当前fill多少个数字了。
Base:如果达到了limit,直接打印value数组
Recursive: 当前需要fill的index可以选那些数字?用一个for loop实现,赋值给
value[index]一个可选的数字,然后call itself 来fill下一个位置。 由于是
combination,需要注意不能重复选以前的数字了,下一个位置永远是从之前选中的数
的后面数字里面选。所以,还需要一个参数来标注可选数字的起始点(原始数组中)。
这样的话,大概需要5个参数,2个数组,2个index,和选出数的limit。
我刚刚写了一下,这个思路code还是没问题的。注意边界条件和候选取值范围。
衍生的问题就是:Permutation
也是用类似的idea,但是比combination更简单,和powerset差不多,增加一个for lo... 阅读全帖
d****j
发帖数: 293
32
来自主题: JobHunting版 - Facebook Phone Inteview + 流程请教
Combination: 如果这样的话,有点大材小用了吧,一个是2^n的复杂度,另外一个是多
项式复杂度,只修改打印方程会浪费很多时间
我的想法,另外用一个数组value作参数存取被选中的数字,还是用recursive的方法,
用一个index来记录当前fill多少个数字了。
Base:如果达到了limit,直接打印value数组
Recursive: 当前需要fill的index可以选那些数字?用一个for loop实现,赋值给
value[index]一个可选的数字,然后call itself 来fill下一个位置。 由于是
combination,需要注意不能重复选以前的数字了,下一个位置永远是从之前选中的数
的后面数字里面选。所以,还需要一个参数来标注可选数字的起始点(原始数组中)。
这样的话,大概需要5个参数,2个数组,2个index,和选出数的limit。
我刚刚写了一下,这个思路code还是没问题的。注意边界条件和候选取值范围。
衍生的问题就是:Permutation
也是用类似的idea,但是比combination更简单,和powerset差不多,增加一个for lo... 阅读全帖
d********w
发帖数: 363
33
来自主题: JobHunting版 - [算法]二分搜索变体
刚才看了一下programming pearls 9.3,
找第一次出现数字的位置,书中给出的优雅解法:
int search(int x[], int n, int t) {
int l = -1;
int u = n;
int m = 0;
while (l+1 != u) {
/* invariant : x[l] < t && x[u] >= t && l < u */
m = (l+u)/2;
if (x[m] < t)
l = m;
else
u = m;
}
assert(l+1 == u && x[l] =t);
int p = u;
if (p>=n || x[p] != t)
p = -1;
return p;
}
这里的invariant意味深长,x[u] >= t 这样可以避免多余的比较
对比经典的二分写法,大体上可以得出个规律,
1) ... 阅读全帖
p******x
发帖数: 691
34
来自主题: JobHunting版 - 问个C的基本问题
p1 and p2是指针 , 就是表示的是地址
地址在没有赋值前, 利用该地址访问内存空间 会发生随机错误 因为你不知道该地址
到底指向哪个内存单元
所以在使用某个地址 即指针之前 必须对它赋值(赋予有效地址)
然后才能利用*p1 去访问p1指向的内存单元进行读写操作
z****e
发帖数: 54598
35
http://www.ibm.com/developerworks/java/library/j-dcl/index.html
把前面所有帖子给看了一遍,大概是搞懂了
从前面那个double-check的代码问题说起
那个代码理论上是ok的
但是实际上在singleton = new MySingleton();这一步里面
其实这里查看虚拟机机制之后发现汇编是分三步走
第一步是先划出一个内存区域
然后赋值给某个引用
最后再初始化这个引用,赋值神马的
那么由于synchronized了这个class,本意是在这三步完成之前
都不允许其它线程介入,但实际上是这三步过程中是有可能被其它线程抢占
而这三步中只要执行完第一步,那么singleton==null这个判断就是false
所以抢占的线程可能拿到的是一个未完全初始化的对象引用
那么如果这个时候使用,就会出问题
这就是那个big bug
所以
已知两个解决方案
1.不省内存了,直接在class被load的时候就初始化这个对象
就是前面那个“大姐”说的
2.利用inner class来节省对象
区别在于它利用了class不被load的时候就... 阅读全帖
R********n
发帖数: 19
36
head=head->next;
程序里面两次push,第二次pop的时候,上面一句已经把head赋值NULL了(程序里开始
没把head赋值NULL,所以严格来说是uninitialized),第三次pop,T d=head->data
就出问题了。
s********u
发帖数: 1109
37
来自主题: JobHunting版 - 电面失败
嗯 有道理。
但是打印就麻烦一点,要再从左到右遍历list一遍。
最近发现一个规律,就是size变大的话,就先resize再倒序赋值;
如果size变小,就先顺序赋值再resize。
t***t
发帖数: 6066
38
简而言之,指针必须指向存在或已知的位置。这个地方既可以是别的变量,也可以是动
态分配的内存。
修改指针位置的值,先确保对指针赋值。
你的例子里,*p=1相当于把指针p指的内存置为1,但是指针p指哪儿?你没对p赋值,所以
它指向random内存。
P****d
发帖数: 137
39
来自主题: JobHunting版 - 求问个G家面试题
这道题本身就有点难懂,我要问了差不多5-10分钟才搞懂题意,输入是一个String
Array,比如{"dog","cat","mouse"},那么他就有以下六个permutation:
{"dog","cat","mouse"}
{"dog","mouse","cat"}
{"cat","mouse","dog"}
{"cat","dog","mouse"}
{"mouse","dog","cat"}
{"mouse","cat","dog"}
他要你实现serialize 和deseriallize两个方法
其中serialize的方法输入的第一个参数是输入String数组,输出是他的一个
permutation,至于是哪一个permutation,取决于serialize的方法的第二个参数。至
于第二个参数是什么,需要你自己设计
我当时设计的是第二个参数用一个int数组,int数组在每一个位置的数字,代表输入
String Array该位置上的String,在permutation数组中的位置,比如如果输入时{"dog
","cat","mouse"},辅助参数我设计的是{2,1... 阅读全帖
a****s
发帖数: 559
40
明显的一个错误是 new []/free 配一对。
很奇怪的用法是void _init_data()函数,居然要在函数外赋长度值,然后在函数内用
其做拷贝,很诡异。
一个不严谨memcpy,最好是memcpy(_data, s, sizeof(char)*_len); 默认char为一个
byte不是好习惯。
另一个不严谨的是析构函数里,释放内存后,_data应置NULL,_len应置0.
原网页中,在实现的转移赋值函数里,没有先释放被赋值对象的内存,直接进行指针赋
值,严重的内存泄漏。
z****e
发帖数: 54598
41
来自主题: JobHunting版 - 滚烫烫的G店面面经
但是我说的是多个线程写的同步冲突问题
并不是只有一个读和一个写两个线程的冲突
两个线程比较容易搞,因为取i操作是原子操作,赋值i也是原子操作
可以额外弄一个int temp来保存当前值,然后赋值i,然后读线程来取i这样
这样可以避开同步的问题,但是如果是多个线程同时写,就有可能冲突
这里面涉及的问题可能会很复杂,一般这个时候就绕开了
避免使用synchronized关键字,可读性太差
不用的话,完全凭借对原子操作的了解的话,需要对jvm的机制很了解才行
这个我没有把握,所以还是老老实实用concurrent类
这样既不用知道jvm机制,也不用担心synchronized关键字
我没有说他说的是错的,设计题可以有多个答案
这题其实难点在于多个机器同时调用这个类的时候,可能会引发的冲突
不过原题也没有说有多个机器会同时调用这个类
就说了一个,android上一般对付两个线程冲突
主要是输入和ui线程,这两个冲突控制了的话,剩下就好办了
server side不太一样,一般server side会出现多个cpu多个core然后起一堆线程
每个线程接收一个request这种,tomcat什么都... 阅读全帖
b******g
发帖数: 3616
42
C++概念菜鸟,试着回答下,错了勿鄙视-_-!
1. 定义一个整数变量i = 42
2. 定义一个整数指针p
3. 定义一个整数指针的引用r = p,这时r和p应该就是一回事了。
4. 将整数变量i的地址赋值给r,所以此时p和r的值都应该是i的地址
5. 将r所指向的整数变量(即i)的值赋值为0
所以此时 i = 0?
E***e
发帖数: 3430
43
来自主题: JobHunting版 - 如何高效overload binary operation
被问到要给一个linear algebra library做adapter/wrapper
做最简单的运算重载比如加法
该library做c=a+b的时候是不分配内存的
直接把a+b的结果写入已经分配好的c
如果做了wrapper好像难免要先分配一块内存存储a+b
再赋值给c
这么一分配再一赋值降低了好几倍的效率
请问应该用什么办法做这个adapter/wrapper?
m**m
发帖数: 5500
44
来自主题: JobHunting版 - 新公司的Coding Review 真让人窝火
那 if (x==y)是不是彻底煞笔了..
好奇Lint check不能警告或者彻底禁止条件语句里的赋值吗?要赋值必须先用另一行处
理。
a*********i
发帖数: 86
45
来自主题: JobHunting版 - 发一个Startup的面经 - Affirm
Recruiter主动联系的. 电面就挂了. 题目如下
有如下的表达式. add表示+, mult表示*
(add 1 2)
(mult 3 (add 2 3))
(let x 2 (mult x 5)
(let x 2 (mult x (let x 3 y 4 (add x y)))
计算表达式结果, 前两个返回3 和 15
第三个式子表示令x=2, 计算x * 5
第四个式子有两个赋值, x和y, 且在不同嵌套里有不同的赋值
给了三十分钟,要求编译通过. 我连parse表达式都没有写完... 另外let的情况如何处
理?
l******s
发帖数: 3045
46
可以有很多执行register,那个只要加个lock就可以解决。我觉得这道题的考核重点是
对于callback函数的赋值方式和执行方式:
在event之前,是维护一个IEnumerable,执行时用并行foreach(){task.Run}
在event之后,是用 += 的方式赋值,执行时是串行。
考虑到系统执行不可能只允许一次event情形,可能需要加一个flag来标志当前状态是
执行event前还是执行event后。当串行运行完之后可以恢复到event前的状态,继续添
加并行Task到IEnumerable。
k***e
发帖数: 1931
47
第三题答错太多,不应该。感觉基础不扎实,尤其是你说你做了多年的C++。
int a;
int* b[100];
Q: 如果改变a或者b有什么问题?
A: 改变a就是赋值还好,改变b实际上是改变了指向array的指针,可能会有问题。(后
来回想起来当时有点紧张,其实改变b也没有关系,或者应该说具体点,如果没有别的
指针指向array的话,array里面的内容没有变量指向,会有leak)
// b是数组名,数组名是不能被赋值的。
Q: 如果是多个线程要改变a或者b呢?
A: 那就有问题了,会conflict(我知道data race,但是当时没有说这个词)。
Q: a是从内存哪里来的?
A: heap
// a应该是stack上
Q: 那b呢?
A: b指向的array内容也是从heap来的,但是b自己可能来自进程stack吧(后来想我是
不是错了,b是指针跟int差不多也得分配内存空间)。
// b应该也是stack上
t*******r
发帖数: 22634
48
另外我上面的可以翻译成人类语言,你把 shift 和 reduce 两个词翻成
“约简” 就可以了(其实概念上都是 reduce)。
“约简” 就相当于你说的 “赋值”
“符号” 就是相当于你说的 “变量”
你说的“对变量赋值”(其实是基于 RAM 虚拟概念机上的概念),在这里就变成了
“对符号约简”(“正则文法” 虚拟概念机)。
而你前面说的,“程序接收几个输入数,输出几个输出数。”,在这里
就变成 “程序接收一个非基本符号,约简成基本符号。”
在上面这个程序里,“a_natural_number” 是基本符号,
“2” 是基本符号。“1”是基本符号。
“list_of_primes”(实际的意思是最小的 n 个素数,
不过正则语法取啥名字都不影响语义)则是“非基本符号”。
正则文法就是把非基本符号约简成基本符号,也就是用基本
符号定义非基本符号的意思。
光符号是不够的,还要有算子(operator),这里的算子是“比大小”,
“整除否”。

你:
t*******r
发帖数: 22634
49
我不知道你看懂了没有。这里的关键点在于符号文法/正则文法。
或者我就用赋值和中学代数来说。
赋值,其实是用符号代替具体的数。其数学基础是中学代数的第一步:用符号代替
具体的数。
中学代数的第二步,就是符号运算。(多项式化简,等等)。
其实任何符号运算都基于某种符号文法,但中学代数通常不能称为符号文法,只能
称为符号运算,其原因是该符号文法是固定的,不会因为你换一道题做,而改变
一种符号文法。
到大学本科学微积分,其实是另一种符号运算(即所说的“牛顿/莱布尼兹微积分符号
体系”)。虽然换了一种基于的符号文法,但微积分还只能称为符号运算,而不是符号
文法,理由同上。
到码工的正则文法课/LR文法课,这时出现了符号文法。每道题的符号规则一般都不同,
每个 yacc 程序定义了不同的符号规则。所谓 reduce,是看着符号规则(比如
yacc 代码),进行符号运算。
s*****s
发帖数: 1509
50
有时候人脑子就会卡在一个地方,无法拐弯,怎么都跳不过这个坎。
几十年前俺大约8,9岁的时候,老爹出于兴趣,自学编程(那时候还是basic语言,我
清楚的记得用的是夏普pc1500机器,单行的液晶显示,带打印功能),有空就顺便教俺
两句好玩。
当俺看到x=x+1这种赋值表达式,顿时就震惊了,怎么都理解不了(当然现在知道啥是
赋值,那时根本没概念),就想,靠,这x怎么可能等于x+1啊,愣是卡了几天。
现在想想也挺有趣的,呵呵。
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)