欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

分享今天面试的三道题

程序员文章站 2022-06-10 17:24:57
...
面试题 公司名不说了。

一、模拟扑克发牌,有52张扑克牌,我们给它编号,从1,2,3...52。一共52张牌。请使用数组装载这些牌,然后再打乱顺序输出。比如:43,2,18,21...3。


二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。


三、假如我们现在要记录下网站中每一个flash小游戏被玩过多少次,每个游戏在一个单独的页面。
(a)请问在玩这些游戏的时候如何记录数据?
(b)如果计算出每个游戏被玩过多少次?(如果使用数据库的话,请写出SQL)


第二题我没答出来。请教下如何实现那个需求。

题量还不错,就三道,不过这些题考的貌似没啥针对性,比那些一写就要写2小时的好多了。

回复讨论(解决方案)

第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。

索引1开始的:
2前缀32 后缀32相等

计算长度最大的即可

$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){	$max = 1;	$qq = $tmp;	while($qq){		for($i=1,$n = floor((strlen($qq)/2));$i =$max){					$max = $i;				}			}		}		$qq = substr($qq,1);	}	echo $tmp.":  ".substr($str,0,$max)."
";

结果:
4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC

第二题
如果不是考算法,也可以简单的用正则反向引用:

$qqNs = array("4323254","22222","5123123","23412341234","2222222");$preg = "/(\d+)(\\1)/";foreach($qqNs as $qq){	if(preg_match($preg,$qq,$res)){		echo $qq.":".substr($str,0,strlen($res[1]))."
"; }}

感谢楼上!!看了你的思路瞬间懂了!


1 索引从1开始,与索引0的做比较,如果相同,匹配向量自增。
2 拿索引0和索引1相连。与索引2与索引3相连的值进行比较,如果相等,匹配向量再自增。
3 如此循环下去到整个QQ号字符串的一半。得到最大自增向量。

最后从字符串数组的头部出栈,再按上述流程计算一遍。。。


不知各位还有其他算法吗?

嗯,当时第一反应就是正则,不过考虑到他出这题应该是考算法。确实没想出来。

不至于吧?全是基础题,不要自己为难自己
一、

$ar = range(1, 54);shuffle($ar);print_r($ar);


二、用正则(既然第一题是基础,那么第二题也不会有过高的要求)
$qq = array('4323254', '5723723');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);
Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
)

不至于吧?全是基础题,不要自己为难自己
一、

$ar = range(1, 54);shuffle($ar);print_r($ar);


二、用正则(既然第一题是基础,那么第二题也不会有过高的要求)
$qq = array('4323254', '5723723');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);
Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
)
这样的只能固定的号码里弄,如果不固定的,那就没法了

公司名不说了。

一、模拟扑克发牌,有52张扑克牌,我们给它编号,从1,2,3...52。一共52张牌。请使用数组装载这些牌,然后再打乱顺序输出。比如:43,2,18,21...3。


二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。


三、假如我们现在要记录下网站中每一个flash小游戏被玩过多少次,每个游戏在一个单独的页面。
(a)请问在玩这些游戏的时候如何记录数据?
(b)如果计算出每个游戏被玩过多少次?(如果使用数据库的话,请写出SQL)


第二题我没答出来。请教下如何实现那个需求。

题量还不错,就三道,不过这些题考的貌似没啥针对性,比那些一写就要写2小时的好多了。


第二题是什么意思 AB ABC?怎么我看不懂

在#1代码上扩充一下

$qqs = array('2343232', "4323254","22222","5123123","23412341234","2222222", '123456789');foreach($qqs as $qq) {  $len = strlen($qq);  $t = array();  echo "qq: $qq:: ";  for($i=0; $iqq: 2343232:: AB  
qq: 4323254:: AB
qq: 22222:: AAAAA
qq: 5123123:: ABC
qq: 23412341234:: ABCD
qq: 2222222:: AAAAAAA
qq: 123456789:: A 连续号码,留着你自己扩展吧

第三题flash和php通信,要在flash那边传参数过来才行。

什么是“只能固定的号码里弄”?

这样的只能固定的号码里弄,如果不固定的,那就没法了

第二题是指数字中有连续重复循环的现象,就像循环小数那种:4 323254和5 723723
同理随便几个例子:87 42342398,74 914891489134

什么是“只能固定的号码里弄”?


这样的只能固定的号码里弄,如果不固定的,那就没法了
打个比方,用你的那个正则的形式如果再来一个222222的号码,那就不正确了,不可能说来一个号码加一个规则的

$qq = array('4323254', '5723723', '222222');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);

Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
[2] => ABCABC ABAB 222222
)
有什么不对吗?

$qq = array('4323254', '5723723', '222222');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);

Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
[2] => ABCABC ABAB 222222
)
有什么不对吗?
当然不对了
222222这个是属于AAAAAA的,怎么算是那2个格式?

222222 既符合 ABCABC 的规则,又符合 ABAB 的规则


什么是“只能固定的号码里弄”?


这样的只能固定的号码里弄,如果不固定的,那就没法了
打个比方,用你的那个正则的形式如果再来一个222222的号码,那就不正确了,不可能说来一个号码加一个规则的

222222 既符合 ABCABC 的规则,又符合 ABAB 的规则



什么是“只能固定的号码里弄”?


这样的只能固定的号码里弄,如果不固定的,那就没法了
打个比方,用你的那个正则的形式如果再来一个222222的号码,那就不正确了,不可能说来一个号码加一个规则的

还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说

不错,但题目并没有给出相邻数相同的识别规则,当然就不需要单列了

考虑到一般的需求,所以我才有 #8 的代码


$qq = array('4323254', '5723723', '222222');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);

Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
[2] => ABCABC ABAB 222222
)
有什么不对吗?
当然不对了
222222这个是属于AAAAAA的,怎么算是那2个格式?

题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。

一般不应在题目之外附加条件吧?


还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说

题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。

一般不应在题目之外附加条件吧?




还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说

那是你不理解题目而已

人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码

第二题是指数字中有连续重复循环的现象,就像循环小数那种:4 323254和5 723723
同理随便几个例子:87 42342398,74 914891489134

原来是这样 谢谢你回答!

无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了


题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。

一般不应在题目之外附加条件吧?




还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说

那是你不理解题目而已

人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码

无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了



题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。

一般不应在题目之外附加条件吧?




还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说

那是你不理解题目而已

人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码

呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧

我比较好钻牛角

请帮忙检测QQ号码的规则

根据号码来找出号码的规则
是一个意思吗?

检测号码的规则,当然是根据已有规则做检测啦!

再说“根据号码来找出号码的规则”也应该是“根据号码来找出号码的 规律”呀




无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了



题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。

一般不应在题目之外附加条件吧?




还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说

那是你不理解题目而已

人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码

呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧

我比较好钻牛角

请帮忙检测QQ号码的规则

根据号码来找出号码的规则
是一个意思吗?

检测号码的规则,当然是根据已有规则做检测啦!

再说“根据号码来找出号码的规则”也应该是“根据号码来找出号码的 规律”呀





无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了



题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。

一般不应在题目之外附加条件吧?




还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说

那是你不理解题目而已

人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码

呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧

那你的意思就是说,先列出所有的进可能的规则,然后用号码去里面匹配就完了呗
呵呵

提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则

这句话应该很清楚,“请检测QQ好嘛的规则”
难道说规则已知?
那我确实愚昧了

既然是“检测规则”,自然是规则已存在了


我比较好钻牛角

请帮忙检测QQ号码的规则

根据号码来找出号码的规则
是一个意思吗?

检测号码的规则,当然是根据已有规则做检测啦!

再说“根据号码来找出号码的规则”也应该是“根据号码来找出号码的 规律”呀





无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了



题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。

一般不应在题目之外附加条件吧?




还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说

那是你不理解题目而已

人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码

呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧

那你的意思就是说,先列出所有的进可能的规则,然后用号码去里面匹配就完了呗
呵呵

提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则

这句话应该很清楚,“请检测QQ好嘛的规则”
难道说规则已知?
那我确实愚昧了

第三题,可以在游戏开始时,去请求一个php页面,将消息发送至php页面,php页面再去记录玩家玩的信息,如果比如ID,昵称,时间等。也可以直接在flash端使用 socket方式与服务器的服务建立联系。

我记得flash中好像可以调用php页面中的js的,所以访问动态页面地址也是可以的吧。我之前做过flash与aspx页面的交互,做flash抽奖模块时。

动态页面端如果执行成功就write("success=1"),这时flash中一可以收到success的值,也可以不用在动态页面端输出这些字符串(若flash端不需要知道执行结果的情况)

既然是“检测规则”,自然是规则已存在了



我比较好钻牛角

请帮忙检测QQ号码的规则

根据号码来找出号码的规则
是一个意思吗?

检测号码的规则,当然是根据已有规则做检测啦!

再说“根据号码来找出号码的规则”也应该是“根据号码来找出号码的 规律”呀





无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了



题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。

一般不应在题目之外附加条件吧?




还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说

那是你不理解题目而已

人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码

呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧

那你的意思就是说,先列出所有的进可能的规则,然后用号码去里面匹配就完了呗
呵呵

提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则

这句话应该很清楚,“请检测QQ好嘛的规则”
难道说规则已知?
那我确实愚昧了
跟你讨论没意义,如果是已知规则,人家就不需要叫你去检测,而是叫你写程序来匹配并且告诉你规则了
没必要跟你讨论这个下去,你喜欢钻文字牛角尖你就去钻吧

这道题纯粹就是考简单的算法而已,写一个简单的算法能检测任意一个号码的规则

这三道题

第一题主要考的是数组的运用
第二题考的是算法
第三题考的是flash与php的通信

第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。

索引1开始的:
2前缀32 后缀32相等

计算长度最大的即可

$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){	$max = 1;	$qq = $tmp;	while($qq){		for($i=1,$n = floor((strlen($qq)/2));$i =$max){					$max = $i;				}			}		}		$qq = substr($qq,1);	}	echo $tmp.":  ".substr($str,0,$max)."
";

结果:
4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC




你好问一下里面的while($qq)怎么不是死循环啊


第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。

索引1开始的:
2前缀32 后缀32相等

计算长度最大的即可

$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){	$max = 1;	$qq = $tmp;	while($qq){		for($i=1,$n = floor((strlen($qq)/2));$i =$max){					$max = $i;				}			}		}		$qq = substr($qq,1);	}	echo $tmp.":  ".substr($str,0,$max)."
";

结果:
4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC




你好问一下里面的while($qq)怎么不是死循环啊

...

每次循环完,$qq的位数都减一位,怎么会死循环啊?$qq = substr($qq,1);

他不是有 $qq = substr($qq,1); 吗?
每次去掉第一个字符,直到为空


第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。

索引1开始的:
2前缀32 后缀32相等

计算长度最大的即可

$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){	$max = 1;	$qq = $tmp;	while($qq){		for($i=1,$n = floor((strlen($qq)/2));$i =$max){					$max = $i;				}			}		}		$qq = substr($qq,1);	}	echo $tmp.":  ".substr($str,0,$max)."
";

结果:
4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC




你好问一下里面的while($qq)怎么不是死循环啊
怎么会是死循环呢?
while的用法你了解么?
不过他这个算法写的有点?嗦而已



第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。

索引1开始的:
2前缀32 后缀32相等

计算长度最大的即可

$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){	$max = 1;	$qq = $tmp;	while($qq){		for($i=1,$n = floor((strlen($qq)/2));$i =$max){					$max = $i;				}			}		}		$qq = substr($qq,1);	}	echo $tmp.":  ".substr($str,0,$max)."
";

结果:
4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC




你好问一下里面的while($qq)怎么不是死循环啊
怎么会是死循环呢?
while的用法你了解么?
不过他这个算法写的有点?嗦而已

呵呵,多谢

涉及到规则,一般都会有标准的争论。
#2要考虑对称的情况,比如445445,44554455,这些都应该是AB?

#3是一个高并发计数器+nosql的应用场景,how about nodejs+redis?

涉及到规则,一般都会有标准的争论。
#2要考虑对称的情况,比如445445,44554455,这些都应该是AB?
这种情况确实是忘记考虑了,#1的也忽略了2222这种应该是AAAA的规则。

flash如何与php通信呢?
第三道题没有人讨论吗?

第一道题,应该用链表最适合了。
还有很多其他的办法,但是都显得比较臃肿。

第二到题,没有好办法。、

第三道题,用js?

学习了

学到一个词 高并发计数器

用缓存来计数之后再存入数据库 这么简单的思路之前没想到 悲剧

flash如何与php通信呢?
第三道题没有人讨论吗?
1.利用页面刷新,存在session
2.借助xml通信

第二题反了吧,应该是QQ提供公共API,然外面的人调用。不然来一个公司就要响应一个接口,腾讯的人不累死,也不符合软件是设计思想

看这帖子我是明白了两点:
1.是都是从应试教育走过来的,考题贴不论题目难易,总能吸引相当多的人
2.是几十年来总算见到个比我脾气还犟的人,哈哈

第二题我想到的是,最小编辑距离,偶算法弱,就不参与讨论了

第二题,综合前面各位大大,简单写下,欢迎给意见

function gz($qq){    $len = strlen($qq);    $str = "ABCDEFG";    $ret = '无规则';    $first = substr($qq,0,1);    if($len==substr_count($qq,$first)) return 'AA';    for($i=0;$i';echo gz('6521218').'
';echo gz('8712312369').'
';echo gz('881881');


运行结果:
AAABABABCABCABCABC

看这帖子我是明白了两点:
1.是都是从应试教育走过来的,考题贴不论题目难易,总能吸引相当多的人
2.是几十年来总算见到个比我脾气还犟的人,哈哈

第二题我想到的是,最小编辑距离,偶算法弱,就不参与讨论了

不是很懂,知识学习学习

第二题我也没有想出来。。其他还好呢。如果仅是:4323254,规则为:ABAB。5723723,规则为ABCABC的话还是蛮简单。如果有33224556 AABB 22222 AAAAA的话就麻烦了

学习了,是很有用的面试方法,也是大家要学习的面试技巧。


C# 第一题