首页 > 技术文章 > 深圳火风山林公司高级游戏开发工程师面试题目

lucy-lizhi 2017-06-09 09:49 原文

1 请简述您对面向对象编程的理解,使用原则和优缺点。不需要叙述面向对象是什么。

  1)开闭原则:对修改关闭,对扩展开放。

  2)里氏代换原则:任何基类出现的地方,子类一定可以出现。

  3)依赖倒换原则:依赖抽象,不依赖实现。

  4)合成聚合原则:在新的对象里面,使用已有的对象,达到复用的原则。

  5)迪米特原则:一个实体应当尽可能少的和其他实体发生相互作用。(直接与你的朋友通信,不和陌生人说话,每一个软件单位对其他单位拥有最少知识)

  6)接口隔离原则:使用多个专门的接口比使用单一的总接口要好。一个类对另外一个类的依赖,应该建议在最小的接口上。(利用委托分离接口,利用多继承分离接口)

  7)单一职责原则:不要把变化原因各不相同职责放到一起。

2 请实现一个函数:按指定位置交换字符串的两部分位置。比如:函数输入("abcdefg",2),输出"cdefgab";

 1 // ConsoleApplication5.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <cstring>
 7 
 8 
 9 using namespace std;
10 
11 char* convert(const char *arr,int pos)
12 {
13     const size_t length = strlen(arr);
14     cout << "the length of the array is:" << length << endl;
15     char *arr1 = new char[length+1];
16     for (size_t i = 0; i < length; ++i)
17     {
18         arr1[i] = arr[i];
19     }
20     arr1[length] = '\0';
21     char c;
22     for (int j = 0; j < pos; ++j)
23     {
24         c = arr1[0];
25         for (size_t i = 0; i < length; ++i)
26         {
27             arr1[i] = arr1[i + 1];    
28         }
29         arr1[length - 1] = c;
30     }
31 
32     return arr1; 
33 }
34 
35 int main()
36 {
37     char *pc = convert("helloworld1234321",5);
38     while (*pc)
39     {
40         cout << *pc;
41         ++pc;
42     }
43     pc = pc - strlen("helloworld1234321");
44     delete [] pc;
45 
46     system("pause");
47     return 0;
48 }

  这里需要注意如下几个地方:

    1)因为传入了C风格字符串,但是C风格字符串不能修改,所以需要重新复制一份。

    2)复制的时候不能忘记了结束符\0。

    3)要返回这个数组,所以需要new 一个字符数组出来,并且需要在外面程序释放这个数组。

    4)使用delete [] pc 的时候,需要注意,该指针的值必须是指向数组头部的。否则会引起异常。 

    5)留意一下,这里有更好的实现方法。

 

3 请实现一个函数:凑14:输入很多个整数(1<=数值<=13),任意两个整数相加等于14就可以从数组中删除这两个数,求剩余数(按由小到大排列)。比如:输入数组[9,1,9,7,5,13].输出数组[7,9]。

4 请阐述您对"优秀的代码" 的理解,什么样的代码才算优秀的代码。

5 加分题:请个出方案估计本城市一天中所有路由的直行车(次)和转弯车(次)的比值。(使用合理假设和估算来近似计算,最后需要算出一个具体数值)。

推荐阅读