├── .gitignore ├── README.md ├── TEMPLATE.md ├── architecture.md ├── database └── mysql.md ├── fe.md ├── php ├── coding.md ├── framework.md └── function.md └── project.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # 《服务端工程师题库》 3 | 4 | 5 | ## 缘起 6 | 7 | 笔试、面试是求职过程中非常重要的环节。很多同学能力不错,但却常常因为在笔试、面试时表现不好而与心仪的offer失之交臂;究其原因,不外乎是 基础早遗忘、考点没准备、原理说不清、细节犯迷糊。 8 | 9 | 本项目希望通过题库的形式,收集整理服务端工程师涉及的技能知识点,帮助求职者更顺利的找到好工作。 10 | 11 | 12 | ## 目录 13 | 14 | * PHP篇 15 | 16 | * [函数](php/function.md) 17 | * [编码](php/coding.md) 18 | * [框架](php/framework.md) 19 | * 20 | 21 | * Linux篇 22 | * WEB服务器篇 23 | * 数据库篇 24 | 25 | * [MySQL](database/mysql.md) 26 | 27 | * [工程篇](project.md) 28 | * [前端篇](fe.md) 29 | * 算法篇 30 | * [架构篇](architecture.md) 31 | -------------------------------------------------------------------------------- /TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | # 题目模板 3 | 4 | 5 | 6 | > ### 7 | 8 | **标签:** ``,`` 9 | 10 | **解答:** 11 | 12 | 13 | ``` 14 | 15 | ``` 16 | 17 | **扩展:** 18 | 19 | 20 | 21 | > ### 题目示例:请用5种以上的语言编写“hello world”程序 22 | 23 | **标签:** `标签示例`,`标签2` 24 | 25 | **解答:** 26 | 27 | * php 28 | 29 | ```php 30 | 39 | alert("hello world") 40 | 41 | 42 | ``` 43 | 44 | * golang 45 | 46 | ```go 47 | package main 48 | 49 | import "fmt" 50 | 51 | func main() { 52 | fmt.Printf("hello, world\n") 53 | } 54 | 55 | ``` 56 | 57 | * c 58 | 59 | ```c 60 | #include 61 | 62 | void main(void) 63 | { 64 | printf("\nhello world!"); 65 | } 66 | 67 | ``` 68 | 69 | * java 70 | 71 | ```java 72 | public class HelloWorld{ 73 | public static void main(String[] args) { 74 | System.out.println("Hello World!"); 75 | } 76 | } 77 | ``` 78 | 79 | 80 | 81 | **扩展:** 82 | 83 | ``` 84 | 更多内容... 85 | 86 | ``` 87 | 88 | 89 | -------------------------------------------------------------------------------- /architecture.md: -------------------------------------------------------------------------------- 1 | 2 | # 架构篇 3 | 4 | 5 | > 对于大流量的网站,您采用什么样的方法来解决访问量问题?(4 分) 6 | 7 | ``` 8 | 1. 确认服务器硬件是否足够支持当前的流量 9 | 2. 优化数据库访问 10 | 3. 禁止外部的盗链 11 | 4. 控制大文件的下载 12 | 5. 使用不同主机分流主要流量 13 | 6. 使用流量分析统计软件 14 | ``` 15 | 16 | > 17 | 18 | ``` 19 | 20 | ``` 21 | 22 | > 23 | 24 | ``` 25 | 26 | ``` 27 | 28 | > 29 | 30 | ``` 31 | 32 | ``` 33 | 34 | > 35 | 36 | ``` 37 | 38 | ``` 39 | 40 | > 41 | 42 | ``` 43 | 44 | ``` 45 | 46 | > 47 | 48 | ``` 49 | 50 | ``` 51 | 52 | > 53 | 54 | ``` 55 | 56 | ``` 57 | 58 | > 59 | 60 | ``` 61 | 62 | ``` 63 | 64 | > 65 | 66 | ``` 67 | 68 | ``` 69 | 70 | 71 | -------------------------------------------------------------------------------- /database/mysql.md: -------------------------------------------------------------------------------- 1 | 2 | # MySQL 3 | 4 | 5 | > MySQL 数据库的优化方法 6 | 7 | ``` 8 | 1. 选取最适用的字段属性,应该尽量把字段设置为 NOT NULL,在执行查询的时候不用比较 NULL 值。 9 | 2. 使用连接(JOIN)来代替子查询(Sub-Queries) 10 | 3 .使用联合(UNION)来代替手动创建的临时表 11 | 4 .尽量少使用 LIKE 关键字和通配符 12 | 5 .使用事务和外键 13 | 14 | ``` 15 | 16 | > MYSQL取得当前时间的函数和格式化日期的函数是? 17 | 18 | ``` 19 | now() 20 | date_format( date, format ) 21 | ``` 22 | 23 | > 数据表members有这些字段:id,username,posts,pass,email,写出发帖数最多的十个人的名字: 24 | 25 | ```sql 26 | SELECT `username` FROM `members` ORDER BY `posts` DESC LIMIT 0,10; 27 | 28 | ``` 29 | 30 | > 请写出数据类型(int char varchar datetime text)的意思; 其中 varchar 和 char 有什么区别? 31 | 32 | ``` 33 | int 整数类型 34 | char 固定长度字符串 35 | varchar 可变长字符串 36 | datetime 日期时间型 37 | text 字符字符串 38 | 39 | char 列的长度固定为创建表时声明的长度, varchar 列中的值为可变长字符串. 40 | ``` 41 | 42 | > MySQL自增类型(通常为表ID字段)必需将其设为(?)字段 43 | 44 | ``` 45 | AUTO_INCREMENT 46 | ``` 47 | 48 | > 有一个用户表(User)结构如下,使用 php 查出所有姓名为“张三”的内容并打印出来: 49 | 50 | | Name | Tel | Content | Date | 51 | |:-----:|:--------|:-------|:-------| 52 | | 张三 | 13333663366 | 大专毕业 | 2006-10-11 | 53 | | 张三 | 13612312331 | 本科毕业 | 2007-01-15 | 54 | | 李四 | 02155665566 | 中专毕业 | 2008-02-16 | 55 | 56 | ```php 57 | $link = mysql_connect("localhost", "root", "") or die('Could not connect: ' . mysql_error()); 58 | mysql_select_db("db_name", $link) or die ('Can\'t use db_name : ' . mysql_error()); 59 | 60 | $result = mysql_query("SELECT * FROM `User` WHERE `Name` = '张三'; ", $link); 61 | while ( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) { 62 | echo "{$row['Name']},{$row['Tel']},{$row['Content']},{$row['Date']}\n"; 63 | } 64 | 65 | mysql_close($link); 66 | ``` 67 | 68 | > 针对上述用户表,写出实现以下功能的SQL语句: 69 | 70 | 1、添加用户(王五 13254748547 高中毕业 2009-03-17): 71 | 72 | ``` 73 | INSERT INTO `User`(`Name`,`Tel`,`Content`,`Date`) VALUES ('小王','13254748547','高中毕业','2007-05-06'); 74 | ``` 75 | 76 | 2、 修改张三的时间为当前系统时间: 77 | ``` 78 | UPDATE `User` SET `Date` = DATE_FORMAT(NOW(),'%Y-%m-%d') WHERE `Name` = '张三'; 79 | ``` 80 | 81 | 3、 写出删除名为李四的全部记录: 82 | 83 | ``` 84 | DELETE FROM `User` WHERE `Name` = '李四'; 85 | ``` 86 | 87 | > 新闻发布系统相关数据库操作 88 | 89 | 1、名为 article 的表有这些字段:(id:文章id,title:文章标题,content:文章内容,category_id:文章分类id,hits:点击量 );写出建表语句: 90 | 91 | ``` 92 | CREATE TABLE `article`( 93 | 'id' int(11) NOT NULL AUTO_INCREMENT, 94 | 'title' varchar(200) NOT NULL DEFAULT '', 95 | 'content' TEXT(500), 96 | 'category_id' int(11) NOT NULL, 97 | 'hits' int(11) NOT NULL DEFAULT 0, 98 | PRIMARY KEY('id') 99 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 100 | ``` 101 | 102 | 2、表comment记录用户评论内容,字段有:(id:评论id,article_id:文章id 关联article表中的id,content :评论内容);编写SQL语句:查询字段列表(文章 id 文章标题 点击量 回复数量), 按照回复数量排序,最高的排在最前,没有回复则显示为0。 103 | 104 | ``` 105 | SELECT article.id as id, article.title as title, IF(article.`hits` IS NULL,0,article.`hits`) as hits,IF(comment.`id` is NULL,0,count(*)) number FROM article 106 | LEFT JOIN comment ON article.id=comment.article_id GROUP BY article.`id` ORDER BY number DESC; 107 | ``` 108 | 109 | 3、表 category 保存分类信息,字段如下 id int(4) not null auto_increment; name varchar(40) not null; 用户输入文章时,通过选择下拉菜单选定文章分类,写出如何实现这个下拉菜单 110 | 111 | ``` 112 | $result = mysql_query("select id, name from category") or die("Invalid query: " . mysql_error()); 113 | 114 | echo ''; 119 | ``` 120 | 121 | > 122 | 123 | ``` 124 | 125 | ``` 126 | 127 | > 128 | 129 | ``` 130 | 131 | ``` 132 | 133 | > 134 | 135 | ``` 136 | 137 | ``` 138 | 139 | 140 | -------------------------------------------------------------------------------- /fe.md: -------------------------------------------------------------------------------- 1 | 2 | # 前端篇 3 | 4 | 5 | > JS 弹出对话框函数是?获得输入框焦点函数是? 6 | 7 | ```javascript 8 | 弹出对话框: alert(), prompt(), confirm() 9 | 获得输入框焦点 focus() 10 | ``` 11 | 12 | > 13 | 14 | ``` 15 | 16 | ``` 17 | 18 | > 19 | 20 | ``` 21 | 22 | ``` 23 | 24 | > 25 | 26 | ``` 27 | 28 | ``` 29 | 30 | > 31 | 32 | ``` 33 | 34 | ``` 35 | 36 | > 37 | 38 | ``` 39 | 40 | ``` 41 | 42 | > 43 | 44 | ``` 45 | 46 | ``` 47 | 48 | > 49 | 50 | ``` 51 | 52 | ``` 53 | 54 | > 55 | 56 | ``` 57 | 58 | ``` 59 | 60 | > 61 | 62 | ``` 63 | 64 | ``` 65 | 66 | 67 | -------------------------------------------------------------------------------- /php/coding.md: -------------------------------------------------------------------------------- 1 | 2 | # 编码 3 | 4 | 5 | > 编写一个php函数计算两个文件的相对路径 6 | 7 | ```php 8 | function getRelativePath($fileA, $fileB) { 9 | 10 | $arrA = explode("/", $fileA); 11 | $arrB = explode("/", $fileB); 12 | array_pop($arrA); 13 | array_pop($arrB); 14 | 15 | $offset = 0; 16 | foreach($arrB as $key => $value) { 17 | if(!isset($arrA[$key]) || ($arrA[$key] != $arrB[$key])) { 18 | $offset = $key; 19 | break; 20 | } 21 | } 22 | 23 | $relativePath = ''; 24 | 25 | for($i = $offset; $i 用 PHP 打印出前一天的时间,格式是 `2015-05-20 22:21:21` 39 | 40 | ```php 41 | echo date('Y-m-d H:i:s', date('U')-86400); 42 | echo date('Y-m-d H:i:s', time()-86400); 43 | echo date('Y-m-d H:i:s', strtotime('-1 day')); 44 | ``` 45 | 46 | 47 | > 不使用第三个变量,交换变量 a、b 的值 48 | 49 | ```php 50 | list($a, $b) = array($b, $a); 51 | ``` 52 | 53 | 54 | > 写出单例模式和工厂模式的程序片段,并列出其中的注意点 55 | 56 | ```php 57 | class Single { 58 | 59 | static $instance; 60 | 61 | private function __construct() { 62 | } 63 | 64 | private function __clone() { 65 | } 66 | 67 | public static function getInstance() { 68 | if (! (self::$instance instanceof self)) { 69 | self::$instance = new self(); 70 | } 71 | return self::$instance; 72 | } 73 | } 74 | 75 | 76 | class Factory { 77 | 78 | public static function create($className) { 79 | $classFile = "./library/{$className}.class.php"; 80 | if (! class_exists($className) && file_exists($classFile)) { 81 | require $classFile; 82 | } 83 | return new $className(); 84 | } 85 | } 86 | ``` 87 | 88 | 89 | > 用代码写出获取 url 文件后缀的方法,如 `http://www.baidu.com/foo/bar.php?id=value` 中.php 的值 90 | 91 | ```php 92 | $url = 'http://www.baidu.com/foo/bar.php?id=value'; 93 | $path = parse_url($url, PHP_URL_PATH); 94 | $ext = pathinfo($path, PATHINFO_EXTENSION); 95 | ``` 96 | 97 | 98 | > 用 php 写出获取中位数的方法 99 | 100 | ```php 101 | $numList = array( 102 | 1, 103 | 4, 104 | 3, 105 | 2, 106 | 5, 107 | 8, 108 | 7, 109 | 6, 110 | 9 111 | ); 112 | // 先排序 113 | $numList = sort($numList); 114 | 115 | $count = count($numList); 116 | $mid = 0; 117 | 118 | if ($count % 2 == 0) { 119 | // 个数是偶数则取中间两个数的和除以 2 120 | $key1 = intval($count / 2) - 1; 121 | $key2 = intval($count / 2); 122 | $mid = ($numList[$key1] + $numList[$key2]) / 2; 123 | } else { 124 | // 个数是奇数则取中间那个数 125 | $key = intval($count / 2); 126 | $mid = $numList[$key]; 127 | } 128 | 129 | echo $mid; 130 | ``` 131 | 132 | 133 | > 一遍找出一个数组中最大的 2 个值 134 | 135 | ```php 136 | $itemList = array( 137 | 2, 138 | 4, 139 | 6, 140 | 3, 141 | 5, 142 | 12, 143 | 9, 144 | 19, 145 | 7, 146 | 8, 147 | 56, 148 | 34, 149 | 25, 150 | 78, 151 | 93, 152 | 35, 153 | 56, 154 | 24, 155 | 89, 156 | 44 157 | ); 158 | $big1 = $big2 = 0; 159 | foreach ($itemList as $item) { 160 | if ($item > $big1) { 161 | $big2 = $big1; 162 | $big1 = $item; 163 | } 164 | } 165 | var_dump($big1); 166 | var_dump($big2); 167 | ``` 168 | 169 | 170 | > 多维数组排序 171 | 172 | ```php 173 | $data = array( 174 | 175 | array( 176 | 'volume' => 67, 177 | 'edition' => 2 178 | ), 179 | array( 180 | 'volume' => 86, 181 | 'edition' => 1 182 | ), 183 | array( 184 | 'volume' => 85, 185 | 'edition' => 6 186 | ), 187 | array( 188 | 'volume' => 98, 189 | 'edition' => 2 190 | ), 191 | array( 192 | 'volume' => 86, 193 | 'edition' => 6 194 | ), 195 | array( 196 | 'volume' => 67, 197 | 'edition' => 7 198 | ) 199 | ); 200 | // 取得列的列表 201 | foreach ($data as $key => $row) { 202 | $volume[$key] = $row['volume']; 203 | $edition[$key] = $row['edition']; 204 | } 205 | 206 | // 将数据根据 volume 降序排列,根据 edition 升序排列, $data 作为最后一个参数,以通用键排序 207 | array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 208 | 209 | var_dump($data); 210 | ``` 211 | 212 | 213 | > 写出一个能创建多级目录的 PHP 函数 214 | 215 | ```php 216 | function mkdirs($dir) { 217 | if (! is_dir($dir)) { 218 | if (! mkdirs(dirname($dir))) { 219 | return false; 220 | } 221 | if (! mkdir($dir, 0777)) { 222 | return false; 223 | } 224 | } 225 | return true; 226 | } 227 | 228 | function mkdirs2($str) { 229 | $arr = explode('/', $str); 230 | $path = ''; 231 | foreach ($arr as $v) { 232 | $path .= $v . '/'; 233 | if (! is_dir($path)) { 234 | mkdir($path); 235 | } 236 | } 237 | } 238 | 239 | mkdirs('dir1/dir2/dir3'); 240 | mkdirs2('dir4/dir5/dir6'); 241 | 242 | ``` 243 | 244 | > 如何实现字符串翻转? 245 | 246 | ```php 247 | 248 | $str = 'abc'; 249 | 250 | // 使用php内置函数 251 | echo strrev($str); 252 | 253 | // 循环输出 254 | $length = strlen($str); 255 | $revStr = ''; 256 | 257 | for ($i = $length - 1; $i >= 0; $i --) { 258 | $revStr .= $str{$i}; 259 | } 260 | echo $revStr; 261 | 262 | ``` 263 | 264 | 265 | > 实现中文字串截取无乱码的方法 266 | 267 | ```php 268 | 269 | 当用 substr 截取中文字符会出现乱码,如果装了 mb 扩展, 用 mb_substr 截取就不会乱码 270 | 271 | 272 | ``` 273 | 274 | 275 | > 用 PHP 编写显示客户端IP 与服务器IP 的代码 276 | 277 | ```php 278 | // 客户端IP: 279 | echo $_SERVER[REMOTE_ADDR]; 280 | echo getenv('REMOTE_ADDR'); 281 | 282 | // 服务器IP: 283 | if (isset($_SERVER['SERVER_ADDR'])) { 284 | $ip = $_SERVER['SERVER_ADDR']; 285 | } else { 286 | $ip = $_SERVER['LOCAL_ADDR']; 287 | } 288 | ``` 289 | 290 | > 如何修改 SESSION 的生存时间 291 | 292 | ```php 293 | 1、将 php.ini 中 session.gc_maxlifetime 设置为 9999(默认 为 1440)重启 apache 即可 294 | 2、代码中修改: 295 | $savePath = "./session_save_dir/"; 296 | $lifeTime = 24 * 3600; 297 | session_save_path($savePath); 298 | session_set_cookie_params($lifeTime); 299 | session_start(); 300 | 301 | 3、setcookie() 或 session_set_cookie_params($lifeTime) 302 | 303 | ``` 304 | 305 | 306 | > 有一个网页(如:http://www.baidu.com/index.html),如何得到它的内容? 307 | 308 | ```php 309 | $url = 'http://www.baidu.com/index.html'; 310 | echo file_get_contents($url); 311 | 312 | ``` 313 | 314 | 315 | > 在HTTP1.0中,状态码401的含义是? 如果返回“找不到文件”的提示,其语句为? 316 | 317 | ```php 318 | 状态值为 401,代表未被授权; 319 | 320 | header('HTTP/1.1 401 Unauthorized'); 321 | header('status: 401 Unauthorized'); 322 | 323 | // 找不到文件 324 | header('HTTP/1.1 404 Not Found'); 325 | header("status: 404 Not Found"); 326 | 327 | header('HTTP/1.1 301 Moved Permanently'); 328 | header('Location: http://www.9qc.com/'); 329 | 330 | ``` 331 | 332 | > PHP中 heredoc 的用法 333 | 334 | ```php 335 | heredoc 的语法是用"<<<"加上自己定义成对的标签,在标签范围內的 文字视为一个字符串: 336 | 337 | $str = << 请写一个函数验证电子邮件的格式是否正确 348 | 349 | ```php 350 | function is_email($email) { 351 | return preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email); 352 | } 353 | ``` 354 | 355 | > $_SERVER数组中有哪些有用的值? 356 | 357 | ```php 358 | Array 359 | ( 360 | [SCRIPT_FILENAME] => /var/www/test/server.php 361 | [QUERY_STRING] => id=1&name=test 362 | [REQUEST_METHOD] => GET 363 | [SCRIPT_NAME] => /server.php 364 | [REQUEST_URI] => /server.php?id=1&name=test 365 | [SERVER_PROTOCOL] => HTTP/1.1 366 | [SERVER_SOFTWARE] => nginx/1.6.0 367 | [REMOTE_ADDR] => 127.0.0.1 368 | [REMOTE_PORT] => 56442 369 | [SERVER_ADDR] => 127.0.0.1 370 | [SERVER_PORT] => 80 371 | [SERVER_NAME] => test.com 372 | [REDIRECT_STATUS] => 200 373 | [HTTP_HOST] => test.com 374 | [HTTP_CONNECTION] => keep-alive 375 | [HTTP_CACHE_CONTROL] => max-age=0 376 | [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 377 | [HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.104 Safari/537.36 378 | [HTTP_ACCEPT_ENCODING] => gzip, deflate, sdch 379 | [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4 380 | [PHP_SELF] => /server.php 381 | [REQUEST_TIME_FLOAT] => 1434974920.5889 382 | [REQUEST_TIME] => 1434974920 383 | ) 384 | ``` 385 | 386 | > 写出一些在 PHP 输出一段 HTML代码的办法 387 | 388 | ```php 389 | 1、echo 或 print等直接输出 390 | 2、require 或 include 包含一个 HTML 代码文件 391 | 3、模板文件等中:

I am html code.

392 | ``` 393 | 394 | > $userList = array('james', 'tom', 'symfony'); 请打印出 第一个元素的值;将所有值合并成用','号分隔的字符串输出 395 | 396 | ```php 397 | echo $userList[0]; 398 | echo implode(",", $userList); 399 | ``` 400 | 401 | > $a = 'abcdef'; 请打印出$a的第一个字母 402 | 403 | ```php 404 | echo $a{0}; 405 | ``` 406 | 407 | > 请写出 PHP5 权限控制修饰符 408 | 409 | ```php 410 | public protected private 411 | ``` 412 | 413 | > 请写出 php5 的构造函数和析构函数 414 | 415 | ```php 416 | __construct __destruct 417 | ``` 418 | 419 | > 420 | 421 | ```php 422 | 423 | ``` 424 | 425 | > 426 | 427 | ```php 428 | 429 | ``` 430 | 431 | > 432 | 433 | ```php 434 | 435 | ``` 436 | 437 | > 438 | 439 | ```php 440 | 441 | ``` 442 | -------------------------------------------------------------------------------- /php/framework.md: -------------------------------------------------------------------------------- 1 | 2 | # 框架 3 | 4 | 5 | > 常见的能够使 HTML 和 PHP 分离开使用是: 6 | 7 | ```php 8 | Smarty模板 9 | ``` 10 | 11 | > 谈谈对 mvc 的认识 12 | 13 | ```php 14 | MVC 设计模式。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。 15 | 如果用户通过某个视图的控制器改变了模型的数据,所有 其它依赖于这些数据的视图都应反映到这些变化。 16 | 控制器与视图的分离, 支持了视图与不同控制器结合的灵活性,以实现不同的操作模式,如对普通用户、专业用户、或不使用控制器建立的只读视图。 17 | 18 | ``` 19 | 20 | > 21 | 22 | ```php 23 | 24 | ``` 25 | 26 | > 27 | 28 | ```php 29 | 30 | ``` 31 | 32 | > 33 | 34 | ```php 35 | 36 | ``` 37 | 38 | > 39 | 40 | ```php 41 | 42 | ``` 43 | 44 | > 45 | 46 | ```php 47 | 48 | ``` 49 | 50 | > 51 | 52 | ```php 53 | 54 | ``` 55 | 56 | > 57 | 58 | ```php 59 | 60 | ``` 61 | 62 | > 63 | 64 | ```php 65 | 66 | ``` 67 | 68 | 69 | -------------------------------------------------------------------------------- /php/function.md: -------------------------------------------------------------------------------- 1 | 2 | # 函数 3 | 4 | 5 | > echo(),print(),print_r(),var_dump()函数的区别 6 | 7 | ```php 8 | echo:是PHP语句,语句是没有返回值的,而 print 和 print_r 是函数,函数可以有返回值。 9 | print:只能打印出简单类型变量的值(如 int,string) 10 | print_r:可以打印出复杂类型变量的值(如数组,对象) 11 | echo:输出一个或者多个字符串 12 | var_dump:可以打印出复杂类型变量的值和类型 13 | ``` 14 | 15 | > include 和 require 的区别是什么? 如何避免多次包含同一文件? 16 | 17 | ```php 18 | 1、PHP 程序执行到 require()时,只会读取一次档案,故常放在程序开头,档案引入后 PHP 会将网页档重新编译,让引入档成为原先网页 的一部分。 19 | 2、PHP 程序执行到 include()时,每次皆会读取档案,故常用于流 程控制的区段,如条件判断或循环中。 20 | 3、require() :如果文件不存在,会报出一个 fatal error.脚本停 止执行 21 | 4、include() : 如果文件不存在,会给出一个 warning,但脚本会 继续执行 22 | 5、推荐使用require_once()和include_once(),可以检测文件是 否有重复包含。 23 | ``` 24 | 25 | > 请说明 php 中传值与传引用的区别。什么时候传值什么时候传引用? 26 | 27 | ```php 28 | Call by value (传值): 函数范围内对值的任何改变在函数外部都会被忽略。调用方式:函数名(参数 1,参数 2); 29 | Call by address (传引用): 函数范围内对值的任何改变在函数外部也能反映出这些修改。调用方式:函数名(&参数 1,&参数 2); 30 | 优缺点: 按值传递时,php必须复制值。对于大型字符串和对象来说,这样做代价很大。按引用传递则不需要复制值,对于性能提高有好处。 31 | ``` 32 | 33 | > PHP中 error_reporting 这个函数有什么作用? 34 | 35 | ```php 36 | error_reporting() 用来配置错误信息汇报的等级。 37 | 38 | 相关用法: 39 | error_reporting(0); 40 | ini_set('error_reporting', E_ALL); 41 | ``` 42 | 43 | > 检测一个变量是否有设置的函数是? 是否为空的函数是? 44 | 45 | ```php 46 | isset($a) 47 | empty($a) 48 | ``` 49 | 50 | > 下面哪个函数可以打开一个文件,以对文件进行读和写操作: 51 | a) fget() (b) file_open() (c) fopen() (d) open_file() 52 | 53 | ```php 54 | (c) fopen 打开文件,供读写操作 55 | ``` 56 | 57 | > PHP中mysql_fetch_row() 和 mysql_fetch_array() 有什么区别? 58 | 59 | ``` 60 | mysql_fetch_row (resource $result) :从结果集中取得一行作为枚举数组 61 | mysql_fetch_array(resource $result [, int $ result_type]) : 62 | 从结果集中取一行作为关联数组(MYSQL_ASSOC),或数字数组(MYSQL_ASSOC),或二者兼有(MYSQL_BOTH) 63 | ``` 64 | 65 | > 取得查询结果集总数的函数是? 66 | 67 | ```php 68 | mysql_num_rows($resource); 69 | ``` 70 | 71 | > 72 | 73 | ```php 74 | 75 | ``` 76 | 77 | > 78 | 79 | ```php 80 | 81 | ``` 82 | 83 | > 84 | 85 | ```php 86 | 87 | ``` 88 | 89 | > 90 | 91 | ```php 92 | 93 | ``` 94 | 95 | > 96 | 97 | ```php 98 | 99 | ``` 100 | 101 | 102 | -------------------------------------------------------------------------------- /project.md: -------------------------------------------------------------------------------- 1 | 2 | # 工程篇 3 | 4 | 5 | > 常用的版本控制工具有哪些,他们的区别是什么? 6 | 7 | ``` 8 | git和svn 9 | 10 | git是分布式的版本控制系统,而svn是集中式的。 11 | 12 | ... 13 | 14 | ``` 15 | 16 | > 17 | 18 | ``` 19 | 20 | ``` 21 | 22 | > 23 | 24 | ``` 25 | 26 | ``` 27 | 28 | > 29 | 30 | ``` 31 | 32 | ``` 33 | 34 | > 35 | 36 | ``` 37 | 38 | ``` 39 | 40 | > 41 | 42 | ``` 43 | 44 | ``` 45 | 46 | > 47 | 48 | ``` 49 | 50 | ``` 51 | 52 | > 53 | 54 | ``` 55 | 56 | ``` 57 | 58 | > 59 | 60 | ``` 61 | 62 | ``` 63 | 64 | > 65 | 66 | ``` 67 | 68 | ``` 69 | 70 | 71 | --------------------------------------------------------------------------------