[1] 写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一维数组(不能使用系统已有函数)(C/C++、PHP、Java)
- #include <iostream>
-
- void bubbleSort(int arr[], int n) // n 为数组大小
- {
- for (int i = 0; i < n - 1; i++) { // n-1 趟排序
- for (int j = i + 1; j < n; j++) {
- if (arr[i] > arr[j]) {
- int temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
- }
- }
- }
-
- int main()
- {
- int arr[10] = { 5, 1, 7, 2, 9, 3, 6, 8, 0, 4 };
- bubbleSort(arr, 10); // 数组大小
- for (int i = 0; i < 10; i++) {
- std::cout << arr[i] << " "; // 0 1 2 3 4 5 6 7 8 9
- }
- }
复制
- function bubbleSort($arr, $n) // $n 为数组大小
- {
- for ($i = 0; $i < $n - 1; $i++) { // n-1 趟排序
- for ($j = $i + 1; $j < $n; $j++) {
- if ($arr[$i] > $arr[$j]) {
- $temp = $arr[$i];
- $arr[$i] = $arr[$j];
- $arr[$j] = $temp;
- }
- }
- }
- print_r($arr); // Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )
- }
-
- bubbleSort([5, 1, 7, 2, 9, 3, 6, 8, 0, 4 ], 10); // 数组大小
复制
- #include<iostream>
-
- void quickSort(int arr[], int i, int j)
- {
- if (i < j) {
- int l = i, r = j;
- int pivot = arr[i]; // 选择一个基准值
- while (i < j) {
- while (i<j && arr[j] >= pivot) {
- j--; // 如果后面的数比基准值大,就往前找
- }
- arr[i] = arr[j];
- while (i<j && arr[i] <= pivot) {
- i++; // 如果前面的数比基准值小,就往后找
- }
- arr[j] = arr[i];
- }
- arr[i] = pivot; // 或者 arr[j] = pivot;
- quickSort(arr, l, i - 1); // 左边
- quickSort(arr, i + 1, r); // 右边
- }
- }
-
- int main()
- {
- int arr[10] = { 5, 1, 7, 2, 9, 3, 6, 8, 0, 4 };
- quickSort(arr, 0, 9);
- for (int i = 0; i < 10; i++) {
- std::cout << arr[i] << " "; // 0 1 2 3 4 5 6 7 8 9
- }
- }
复制
- function quickSort(& $arr, $i, $j) // 传引用调用
- {
- if ($i < $j) {
- $l = $i;
- $r = $j;
- $pivot = $arr[$i];
- while ($i < $j) {
- while ($i < $j && $arr[$j] >= $pivot) {
- $j--;
- }
- $arr[$i] = $arr[$j];
- while ($i < $j && $arr[$i] <= $pivot) {
- $i++;
- }
- $arr[$j] = $arr[$i];
- }
- $arr[$i] = $pivot;
- quickSort($arr, $l , $i - 1);
- quickSort($arr, $i + 1 , $r);
- }
- }
-
- $arr = [0, 1, 8, 6, 2, 5, 4, 9, 3, 7];
- quickSort($arr, 0, 9);
- print_r($arr); // Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )
复制
[2] 实现一个字符串截取的函数,类似于substr,必须能够截取中文这种多字节编码。假设每个中文也是一个字符,普通的数字、符号、字母也是一个字符。(提示:GB编码的中文字符高位范围是 0x81-0xFE )
- <?php
- /**
- * 截取字符串子串 (GBK)
- *
- * @param string $str 原始字符串
- * @param int $len 需要截取字符串的长度
- * @return string 返回截取到的字符串
- */
- function GBSubstr($str, $len){
- $count = 0;
- for($i = 0; $i < strlen($str); $i++){
- if($count == $len) break;
- if(preg_match("/[\x81-\xfe]/", substr($str, $i, 1))) { // 如果检测到 GBK 中文编码的高位 0x81-0xFE
- ++$i; // 跳过低位,继续向后匹配
- }
- ++$count; // 次数
- }
- // echo $i; 这时 $i 的值为 9
- return substr($str, 0, $i); // $i 是加上中文后的字符串长度
- }
- echo GBSubstr("ab喜cdefgh",7); // 从头开始截取一个长度为 7 的字符串; 输出 "ab喜cdef"
- ?>
复制
[3] 写一个遍历指定目录下所有子目录和子文件的函数(提示:可以使用递归的方法)
- function dir_all($path) {
- $handler = opendir($path);
- while (false !== ($tmp = readdir($handler))) { // $tmp 第 1 次是 ".",第2次是 "..", 之后是文件名或目录名,和Linux中使用 ls 的效果一样
- if(is_dir("$path/$tmp")) { // 如果是一个目录
- if ($tmp == "." || $tmp == "..") // 不输出,也不递归调用
- continue;
- echo $tmp . "
"; // 输出目录名字 - dir_all("$path/$tmp"); // 把当前目录名接到 $path 上,递归调用
- }
- else {
- echo $tmp ."
"; // 如果是一个文件,直接输出 - }
- }
- }
- dir_all("C:\Users\bingo\Desktop\ms"); // 输出 ms 文件夹下的所有文件名、子目录名以及子目录下的文件名
- ?>
复制
[4] 写出匹配邮箱地址和URL的两个正则表达式。类似下面的:
- // 匹配邮箱
- if (preg_match("/^[0-9a-z][0-9a-z\_\-\.]+@([0-9a-z][0-9a-z\-]*\.)+[a-z]{2,}$/i", "user_name.first@example.com.cn")) { // 匹配模式 i 表示不区分大小写
- echo "Matching!"; // 输出 "Matching!"
- }
- else {
- echo "No Matching!";
- }
- // 匹配 URL
- if (preg_match("/^(http|https):\/\/([0-9a-z][0-9a-z\-]*\.)+[a-z]{2,}(:\d+)?\/[0-9a-z%\-_\/\.]+/i", "http://www.example.com.cn/user_profile.php?uid=100")) { // 匹配模式 i 表示不区分大小写
- echo "Matching!"; // 输出 "Matching!"
- }
- else {
- echo "No Matching!";
- }
- ?>
复制
[1] 写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)
[2] 说出你所知道的三种以上开源数据库的名称(提示:想想目前国外流行的开源数据库)
[3] MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?
varchar是变长,节省存储空间,char是固定长度。查找效率要char型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些。
[4] 说出MySQL 4.0和MySQL 4.1版本的最主要的两个区别。如果你使用过MySQL 5,请说说MySQL 5跟MySQL 4的主要区别。(后半题选作)
MySQL 4.1 主要是比MySQL 4.0多了 子查询 和 字符编码的支持 两个特点。 MySQL5增加的功能比MySQL4要更多,包括 存储过程、视图、事务 等等。
[5] MySQL数据库基本的三个优化法则是什么,除了增加硬件和带宽?(提示:从服务配置、应用、开发角度考虑)
[1] 请使用JavaScript写出三种产生一个Image 标签的方法(提示:从方法、对象、HTML角度考虑)
';[2] 请使用CSS样式,描述两种方法在当前列中只显示一个div对象
[3] 请描述出两点以上XHTML和HTML最显著的区别
网页编码的发展: HTML => XHTML => XML
[4] 写出五种以上你使用过的 PHP 的扩展的名称(提示:常用的PHP扩展)
MySQL、PDO 、GD、socket、MB_Sring、Iconv、Curl、SHM、libxml 等等。
[5] 了解MVC模式吗?请写出三种以上目前PHP流行的MVC框架名称(不区分大小写)

MVC 结构图.png
[6] 写出15个以上你所知道的常用的Linux命令和它的功能
[7] 使用过Vim编辑器吗?如果使用过,如何在vim里切分多个可视化窗口,包括横排和纵排。(本题选作)
vi 进入命令模式后,输入 :sp 或 :vsp 即可横排和竖排切分可视化窗口。 横:split(sp);纵:vsplit(vsp)
[8] 说说Linux下的find命令和grep命令的区别(本题选作)
find:可以按照文件名、文件类型、文件大小、文件修改/访问时间查找; grep:按照文件内容查找(正则表达式)。
[9] 请描述出七层网络模型的名称,由下到上(可以使用中文描述)
OSI参考模型:

OSI 七层参考模型.png
[10] 说说下面这些这些协议的全称和中文解释(提示:都是工作在应用层)SMTP、POP3、HTTP、FTP、DNS
[11] 使用过Memcache缓存吗,如果使用过,能够简单的描述一下它的工作原理吗?(本题选作)
[12] 请大致的说说Session的工作原理(提示:与Cookie有相应的关系)
[13] 说说你所了解的搜索引擎包含那些技术?(本题选作)
爬虫(采集)、切词(分词)、索引(存储)、查询以及其他相关技术等。
[1] 一个Web开发团队开发中,大致说说你所了解的所有成员的分工合作情况
分为美工、前端开发和后台开发人员,美工负责界面效果设计、前端开发负责用户交互和设计,后台开发人员负责服务端的开发。
[2] 说说你做过的最得意的项目或者个人开发作品(可以是个人作品,也可以是合作项目)
这个,你猜...
[3] 假设给你5台服务器,请大致的描述一下,如何使用你所熟悉的开源软件,搭建一个日PV 300万左右的中型网站
PV(page view):页面浏览量,或点击量,表示一个访问者在24小时内浏览了你网站的几个页面。这里需要强调:同一个人浏览网站同一个页面,不重复计算 PV 量,点100次也算1次。 构思(仅供参考):3台Web服务器,两台MySQL数据库服务器,采用Master/Slave同步的方式减轻数据库负载,Web服务器可以结合Memcahe缓存来减少负载,同时三台Web服务器内容一致,可以采用DNS轮询的方式来进行负载平衡 。