五. 程序功能设计面试题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五. 程序功能设计面试题相关的知识,希望对你有一定的参考价值。


1.现有如下接口

Interface Ilogger
Public function __construct($filename);
Public function write($log);
Public function read();

现需要日志读写的Logger类,通过构造函数指定了日志文件的路径,通过调用wrtie和read方法完成日志文件的读写。
1)请使用ILogger接口实现Logger类

Interface Ilogger
Public function __construct($filename);
Public function write($log);
Public function read();


class Logger implements Ilogger
private $path = ;
public function __construct($file)
$this->path = $file;

//写入方法
public function write($str)
$f = fopen($this->path,w);
fwrite($f,$str);
fclose($f);


// 读日志方法
public function read()
$f = fopen($this->path,r);
$str = fread($f);
fclose($f);
return $str;

2.现有如下Database类的代码,使用上题中的Logger类通过日志记录数据库的操作。

Class Database 
private $db;
private $logger;
public function __construct(Logger $logger,$dsn = mysql:dbname = testdb;host=127.0.0.1,$user = dbuser,$password = dbpass)
$logger = $logger;
try
$db = new PDO($dsn,$user,$password);
catch(PDOException $e)
$logger ->write(Connection failed:$e ->geMessage());


public function execute($sql)
$result = $db -> exec($sql);
if($result)
$logger ->write($sql is executed,$result line(s) is(are) rows affected by the statement.);
else
$loger ->write(Failed to execute : $sql);

3.给定数组a ,调整其中元素的顺序,使得奇数在前偶数在后
样例:a=[1,2,3,4],返回[1,3,2,4]

4.给定两个版本号v1,v2,如v1 > v2 ,返回1,如v1<v2,返回-1,否则返回0。
样例:v1 = “0.1.1”,v2 = “0.1.2”,返回-1;v1=”1.2”,v2=”1.1.13”,返回1。

  $res = 0;
$arr1 = explode(‘.’,$v1);
$arr2 = explode(‘.’,$v2);
$len = min(count($arr1),count($arr2));
for($i=0;$i < $len;$i++)
if($arr1[$i]>$arr2[$i])
$res = -1;
else if($arr1[$i]<$arr2[$i])
$res = 1;
else



if($res == 0)
if(count($arr1) > count($arr2))
res = 1;
else if(count($arr1) < count($arr2))
$res = -1;


Return $res;

5.你所知道的设计模式有哪些?
工厂模式
单例模式
观察者模式

6.编程题:现代化巧克力工厂具备计算机控制的巧克力锅炉。锅炉做的事,就是把巧克力和牛奶融合在一起,然后送到下一个阶段。
请为工厂设计一个巧克力锅炉控制器类。请注意安全问题
(1)锅炉不能满了继续增加原料
(2)锅炉只接受原料巧克力和牛奶
(3)防止锅炉内好没有原料就开始空烧
(4)忽略巧克力,牛奶混合比例。锅炉每次使用后充分冷却进行下次燃烧。

public class ChocolateBoiler 
private $empty; //是否为空
private $boiled;//是否已经煮沸
private static $uniqueInstance;//单例

private ChocolateBoiler()
$this->empty = true;
$this->boiled = false;


public static getInstance()
if (self::$uniqueInstance == null)
//创建一个单例
self::$uniqueInstance = new self();


return self::$uniqueInstance;


public void fill()
if ($this->isEmpty())
$this->empty = false;
$this->boiled = false;
// 在锅炉内填满巧克力和牛奶的混合物



public void drain()
if (!$this->isEmpty() && $this->isBoiled())
//排出煮沸的巧克力和牛奶
$this->empty = true;



public void boil()
if (!$this->isEmpty() && !$this->isBoiled())
//将炉内物煮沸
$this->boiled = true;



public boolean isEmpty()
return $this->$empty;


public boolean isBoiled()
return $this->boiled;


7.编程题:请观察数列1,2,3,5,8,13,21 … …编写程序,输出n项的值

8.编程题:一球从100米高度自由落下,每次落地反跳回原高度的一半;在落下。请编写程序,输出第n次落地时,小球落下弹起共经过多少米。

$sum_height = 0;
$height = 100;

$n = 3;
for($i=1;$i<=$n;$i++)
$sum_height+= ($height+ $height/2);
$height = $height/2;


echo $sum_height;

9.输入参数–一个字符串,返回一个字符串。
输入是一句英文句子,只有英文字(a-z, A-Z)、每个字之间仅以一个空格分格,前后没有空格。
返回的是要把每一个字的字母顺序倒转写,但字的顺序和字母的大小写位置则保持不変
Input: This is an Apple on eBay
Output: Siht si na Elppa no yAbe

$str = "This is an Apple on eBay";

function demo($str)
$res = ;
$arr = explode( ,$str);
foreach($arr as $k=>$v)
$len = strlen($v);
$rev = ;
for($i=0;$i<$len;$i++)
if(preg_match(/^[A-Z]+$/, $v[$i]))
$rev.=strtoupper($v[$len-$i-1]);
else if(preg_match(/^[a-z]+$/, $v[$i]))
$rev.=strtolower($v[$len-$i-1]);


$res.= $rev. ;

return trim($res);



echo demo($str);


以上是关于五. 程序功能设计面试题的主要内容,如果未能解决你的问题,请参考以下文章

java面试题汇总五

java面试题汇总五

基于单片机小型家用燃气锅炉控制系统设计(仿真,程序,论文)

面试题1_测试用例设计

Android面试题设计模式

Android面试题设计模式