PHP招聘MySQL知识点

2013/04/17 | 星期三 分类:求职招聘 | 没有评论 标签: , | 作者: | 1,503 views

PHP基本、基础知识点,Example PHP招聘Mysql知识点,在工作日常用或许亦能用到:
1.php程序中连接数据库,host是localhost,账号是root, 密码是123,查询数据库test中表user的记录并显示出来?

2、查看锁表命令:SHOW FULL PROCESSLIST;
MYSQL取得当前时间的函数是?,格式化日期的函数是:now(),dateformat()
MySQL远程登陆:.
mysql -uroot -p123 -h192.168.1.250
#用户名:root 密码:123
MySQL命令行修改密码:
>mysql -u root -p

3、建立索引:普通索引INDEX、唯一索引UNIQUE INDEX、主键索引PRIMARY KEY、全文索引FULLTEXT
创建:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([…],INDEX[索引名](索引字段))

创建:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([…],UNIQUE[索引名](索引字段))

它是唯一索引,一般在创建表是建立,格式为:
CREATA TABLE tablename ([…],PRIMARY KEY[索引字段])

修改:ALTER TABLE tablename ADD FULLTEXT [索引名] (索引字段).

4、优化MYSQL数据库的方法。
a.数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中 文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率;
b.系统架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器Read & write,从服务器read only,或者N台服务器,各机器互为Master;
c.(a)和(b)超越PHP Programmer的要求了,会更好,不会没关系.检查有没有少加索引;
d.写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接,大量的Group By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句;
e.所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) … where article_id = ? 就可以了,不要先select * … where article_id = ?然后msql_num_rows.
只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就update … set title = ? where article_id = ?不要set content = ?(大文本);
f.必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAP可以提高一个数量级的查询速度;.

5.Mysql导出数据
mysqldump –opt -h192.168.1.18 -uUsername -pPassword databaseName>database.sql
#mysqldump –opt -h192.168.1.88 -uwebsites -pseedpaddy -P3396 seedpaddy >E:\abc\seedpaddy.sql
本地服务器机器:
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
#mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql

6.mysql导出数据库一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名.
#mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql

7.mysql导出一个数据库结构
mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

8.mysql导入数据库
进入mysql数据库控制台,如mysql -u root -p
mysql>use 数据库
mysql>set names ‘utf8’
mysql>source d:\db.sql

9.创建数据库
#CREATE DATABASE jacking DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
a.复制表结构及数据到新表
#CREATE TABLE 新表 SELECT * FROM 旧表
b.只复制表结构到新表.
#CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
#即:让WHERE条件不成立.
c.复制旧表的数据到新表(假设两个表结构一样)
#INSERT INTO 新表 SELECT * FROM 旧表
d.复制旧表的数据到新表(假设两个表结构不一样)
#INSERT INTO 新表(字段1,字段2,…….) SELECT 字段1,字段2,…… FROM 旧表
#还可以用REPLACE INTO 这种方法会更好!

10.常用的SQL语句

PHP招聘基础函数库启发性扩展

2013/04/12 | 星期五 分类:求职招聘 | 没有评论 标签: , | 作者: | 2,873 views

基础函数知识点,通过这些可以让自己脑海中的基础函数库有启发性扩展,尤其是在某个紧张时刻看到这些函数、自然连带联想到其他的内置函数:
1.JSON 函数
json_encode — 对变量进行 JSON 编码
#string json_encode ( mixed $value )
$json = ‘{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}’;
json_decode — 对 JSON 格式的字符串进行编码
#json_decode ( string $json [, bool $assoc ] ) 默认为obj,设置为true 返回数组.

2.序列化与反序列化
$serialized_object=’O:1:”a”:1:{s:5:”value”;s:3:”100″;}’;
serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。
unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。返回的是转换之后的值,

3.preg_match_all 进行全局正则表达式匹配,采集数据的时候使用比较多

4.array 函数,罗列特常用的
array_merge — 合并一个或多个数组
array_pop — 将数组最后一个单元弹出(出栈)
array_push — 将一个或多个单元压入数组的末尾(入栈)
array_rand — 从数组中随机取出一个或多个单元
array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
array_shift — 将数组开头的单元移出数组
arsort — 对数组进行逆向排序并保持索引关系
asort — 对数组进行排序并保持索引关系
end — 将数组的内部指针指向最后一个单元 #echo end($array);
krsort — 对数组按照键名逆向排序
ksort — 对数组按照键名排序
rsort — 对数组逆向排序
sort — 对数组排序
shuffle — 将数组打乱
#list — 把数组中的值赋给一些变量.

5、能够使HTML和PHP分离开使用的模板?
Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate

6.在PHP中,$_SERVER
#当前脚本的名称(不包括路径和查询字符串): $_SERVER[‘PHP_SELF’]
#链接到当前页面的的前一页面URL记录在预定义变量:$_SERVER[‘HTTP_REFERER’]
#浏览当前页面用户的 IP:$_SERVER[“REMOTE_ADDR”]
#查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2 :$_SERVER[“QUERY_STRING”]
#当前运行脚本所在的文档根目录:$_SERVER[“DOCUMENT_ROOT”]

7.参考手册》语言参考》运算符》算术运算符》%为取模运算
echo 8%(-2); #输出0
echo ((-8)%3);#取模 $a % $b 在 $a 为负值时的结果也是负值。输出-2
echo (8%(-3));#输出2

8.见参考手册》函数参考》HTTP函数》header
在HTTP 1.0中,状态码 401 的含义是;未授权
如果返回“找不到文件”的提示,则可用 header 函数,其语句为:header(“HTTP/1.0 404 Not Found”);

9.HTTP协议中几个状态码的含义:503、500、401、200、301、302:
查阅RFC2616,返回码共分5类、41种状态,1XX已经作废了、2XX为成功、3XX为转向、4XX是客户端错误、5XX是服务器错误。
#400=”Bad Request”
#401=”Unauthorized”
#402=”Payment Required”
#403=”Forbidden”
#404=”Not Found”
#405=”Method Not Allowed”
#406=”Not Acceptable”
#详情:http://www.php.net/manual/zh/function.curl-getinfo.php

10.php防止sql注入式攻击,用什么函数转换字符串?
addslashes();

11.php中的文件读写操作,读取文件test.txt中前100字节的内容?.
$handle=fopen(“test.txt”,”r”);
$contents=fread($handle,100);
fclose($handle);

12.preg_replace 正则替换,部分数据启发性扩展

13.String 函数,一些特常用的
addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符
addslashes — 使用反斜线引用字符串
implode — Join array elements with a string #implode(“,”, $array);
ltrim — Strip whitespace (or other characters) from the beginning of a string
rtrim — Strip whitespace (or other characters) from the end of a string
trim — Strip whitespace (or other characters) from the beginning and end of a string
str_replace — Replace all occurrences of the search string with the replacement string #正则替换
ucfirst — #Make a string’s first character uppercase
ucwords — Uppercase the first character of each word in a string
strtolower — Make a string lowercase #全部小写
strtoupper — Make a string uppercase #全部大写
#你常用的php字符串函数?
substr(),implode(),explode(),str_replace(),strpos(),strrev()
#explode ( string $separator , string $string [, int $limit ] )
#如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。

PHP招聘编程的那些函数

2013/03/25 | 星期一 分类:求职招聘 | 没有评论 标签: , , | 作者: | 1,249 views

#PHP输出报错信息,用来调试

#牛年求牛:有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛。

#时区设置
date_default_timezone_set(“Asia/Shanghai”);
date_default_timezone_get();

#1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名

#2. 写一个函数,算出两个文件的相对路径.
#如 $a = ‘/a/b/c/d/e.php’;$b = ‘/a/b/12/34/c.php’;
#计算出 $b 相对于 $a 的相对路径应该是”../../../12/34/c.php”

#3.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。.

#求两个日期的差数,例如2013-2-25 ~ 2013-3-6 的日期差数.

PHP招聘面试题与解答

2013/03/24 | 星期日 分类:求职招聘 | 一条评论 标签: , , | 作者: | 2,942 views

#PHP算法题,冒泡排序,快速排序,顺序查找法、二分查找法;PHP基础知识,招聘面试题与答案

PHP一些基本面试题与答案:

1、用PHP打印出前一天的时间格式是20013-02-10 22:21:21
echo date(‘Y-m-d H:i:s’, strtotime(‘-1 day’));
或者
$yesterday = time() – (24 * 60 * 60);
echo ‘today:’.date(‘Y-m-d H:i:s’).”\n”;
echo ‘yesterday:’. date(‘Y-m-d H:i:s’, $yesterday).”\n”;

2、echo(),print(),print_r()的区别
echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print只能打印出简单类型变量的值(如int,string)
print_r可以打印出复杂类型变量的值(如数组,对象)
echo — 输出一个或者多个字符串

3、能够使HTML和PHP分离开使用的模板:smarty,Heyes Template Class等

5、优化MYSQL数据库的方法。
(1).选取最适用的字段属性,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
(2).使用连接(JOIN)来代替子查询(Sub-Queries)
(3).使用联合(UNION)来代替手动创建的临时表
(4).尽量少使用 LIKE 关键字和通配符
(5).使用事务和外键
或者
(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率
(2).系统架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器Read & write,从服务器read only,或者N台服务器,各机器互为Master
(3).(1)和(2)超越PHP Programmer的要求了,会更好,不会没关系.检查有没有少加索引
(4).写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接啊,大量的Group By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句
(5).所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) … where article_id = 就可以了,不要先select * … where article_id = 然后msql_num_rows.只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就update … set title = where article_id = 不要set content = (大文本)
(6).必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAP可以提高一个数量级的查询速度

6、MYSQL取得当前时间的函数是?,格式化日期的函数是:now(), DATE_FORMAT(date,format)

7、对于大流量的网站,您采用什么样的方法来解决访问量问题?
首先,确认服务器硬件是否足够支持当前的流量
其次,优化数据库访问。
第三,禁止外部的盗链。
第四,控制大文件的下载。
第五,使用不同主机分流主要流量
第六,使用流量分析统计软件。

8、用PHP写出显示客户端IP与服务器IP的代码
显示客户端IP:$_SERVER[‘REMOTE_ADDR’];
服务器IP:gethostbyname(‘www.example.com’);

9、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
require()和include()除了怎样处理失败之外在各方面都完全一样。include()产生一个警告而require()则导致一个致命错误。
换句话说,如果你想在丢失文件时停止处理页面,用require()。include() 就不是这样,脚本会继续运行。
require()无论如何都会包含文件,而include()可以有选择地包含.
代替用include_once,require_once

13、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?
在大部分语言里,双引号是字符串,单引号是字符。但是在PHP里,字符串的表现形式有3种。即:
单引号 ,双引号 ,定界符(heredoc syntax)
看见了吧,单引号居然可以用来表示字符串。那么如果我想表示单引号怎么办?和大多数语言一样,使用转义符号吧。即反斜线.那么使用单引号和双引号有什么区别呢?我的观点是没有多大区别。唯一的区别就是双引号可以应用更多的转义符。
让我们定界符吧。它的语法是\”<<<\"。用法是在其后提供一个标识符,然后在标识符后提供字符串,再在字符串后提供此标识符来结尾。例如:

注意,这里的提供的标志符是EOD,中间的是字符串。 <<

18、foo()和@foo()之间有什么区别?
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
注意: @ 运算符只对表达式有效。对新手来说一个简单的规则就是:如果能从某处得到值,就能在它前面加上 @ 运算符。例如,可以把它放在变量,函数和include()调用,常量,等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。

19、如何声明一个名为”myclass”的没有方法和属性的类?class myclass{};
如何实例化一个名为”myclass”的对象?$newmyclass = new myclass();

20、你如何访问和设置一个类的属性?
$newmyclass = new myclass();
$temp=$newmyclass->testvalue;
$newmyclass->testvalue=”a”;

21、mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
mysql_fetch_row — 从结果集中取得一行作为枚举数组
mysql_fetch_array — 从结果集中取得一行作为关联数组,或数字数组,或二者兼有

22、GD库是做什么用的?
GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。
在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。

23、使用php链接数据库并写一段简单查询,查出所有姓名为“张三”的内容并打印出来表名User(Name Tel Content Date)
请根据上面的题目完成代码:

24、检测一个变量是否有设置的函数是否?是否为空的函数是?isset();empty();
25、取得查询结果集总数的函数是?mysql_fetch_array();

28、请写出PHP5权限控制修饰符
PHP5引入了访问修饰,被放在属性和方法声明的前面用以控制它们的可见性。PHP5中支持以下三种不同的访问修饰:
1、默认的是public(公共),即当你没有为属性和方法指定访问修饰时就默认为public的。而这些public的项目在类内类外都可以访问。
2、private(私有)访问修饰,意味着被修饰的项只能在类中被访问。如果你没使用__get()和__set(),就最好给每个属性都加上private修饰。也可以给方法加private修饰,例如一些只在类中才用到的函数。private修饰的项不能被继承(更多详细内容会在本章后续部分提到)
3、protected(保护)修饰的项能在类及其子类中访问。同样更多详细内容会在本章后续部分提到。现在暂时可以把protected看成界于public和private之间的修饰。

29、请写出php5的构造函数和析构函数: __construct{} __destruct{}

30. 比较sort(), asort(), ksort()三个函数的用法以及使用环境。
sort — 将数组的值由a-z重排,并自动替换索引从0…结束
asort — 此函数将数组的元素由a-z重新排列,且保持原先索引值和元素的对应关系,这个函数主要是用于需要将数组的元素重新排列。这个函数比较常用。
ksort — 此函数将数组依照索引值由a-z重新排列

31. 加载类库的方法。
function __autoload($class){
require_once(“./lib/”.$class.’.php’);
}

32. foo()和@foo()的区别:加上@符号会屏蔽报错提示。

33. 你平时如何调试PHP代码:用echo打出调试或用exit调试。再加上火狐浏览器调。

34. === 的作用是什么?举一个例子,使用 == 返回true,但是使用 === 返回false。:=== 的作用是比较变量的值还比较变量的类型。==只比较值。

36. 一个ereg_replace的理解:ereg_replace — 替换正则表达式
string ereg_replace ( string pattern, string replacement, string string )
本函数在 string 中扫描与 pattern 匹配的部分,并将其替换为 replacement。
返回替换后的字符串。

40、简单叙述一下Mysql数据库中Varchar和Char数据类型的区别?
varchar是可变长度,会根据字符串实际长度在有限指定范围内进行伸缩
char是固定长度,你分配多大就占用多大
在性能在char比varchar快,原因varchar可计算长度

41、简述MyISAM存储引擎和InnoDB存储引擎的主要区别?
MyISAM不支持事务,也不支持外键;相反,InnoDB支持事务也支持外键;所以如果经常进行INSERTUPDATE操作时应该使用InnoDB。

42、简述Apache服务器中.htaccess 文件的作用是什么?
根据自己的需要,针对特定的目录及子目录改变服务器上的配置,可以做到文件扩展名更改、
网址格式化及重定向(这在使用PHP框架统一入口经常用)等

43、请简单描述一个PHP文件缓存的实现机制(如Smarty的缓存机制原理)。
将用户请求的内容存入一个静态文件中,当再次得到请求时直接从静态文件中输出,减少对数据库的访问;
Smarty的缓存机制原理就是这样,开启Cache后,用户第一次请求,服务器响应,PHP文件经过编译后生成HTML静态页保存在相应目录中,有效期内,用户再次请求,直接从静态页输出。

44、选做题:你怎么理解Run-time errors、Run-time warnings、Compile-time parse errors、Compile-time errors?(PHP内部错误机制)
Run-time errors:解释执行错误
Run-time warnings:解释执行警告
Compile-time parse errors:解析错误
Compile-time errors:编译错误

45、MySQL数据库,一天一万条以上的增量,怎么优化?
一天增量1W数据量并不算十分大,一年下来也就四百万左右,而且没有给定数据的性质和读取频率等。问题可能出在写入压力的问题,我觉得优化的方向应该在于提高写入效率,这样的话索引、外键、触发器等等的使用就需要慎重了。
建立良好的索引。良好的数据库设计。当需要操作的数据按年为单位的话,比如最常用的为当年的数据,那么设计时最简单的方法就是把存储该数据的表设计成已年为单位生成新表, 2012年可以生成 tb2012 到了2012年 数据自动生成并存储在tb2013表中 极大优化了查询速度

47. 写5个不同的自己的函数,来截取一个全路径的文件的扩展名,允许封装php库中已有的函数。
考查对PHP函数的掌握程度。explode pathinfo strstr substr 正则 preg_match 等。basename

PHP工程师掌握技能与招聘

2013/03/22 | 星期五 分类:求职招聘 | 一条评论 标签: , | 作者: | 2,968 views

PHP工程师需要掌握哪些技能呢?

从以下几点说说,看看从事这行业需要掌握的技能:

1.掌握语言本身的语法,熟悉常用类库是必须的;这个可以说是练功过程中的马步,基础必须扎实,扎实了才可以往下看其他的东西。

2.PHP+MYSQL,PHP与数据库的最佳拍当,最好有时间还可以学习一下他的另两个拍当,Linux和apache;lamp中lam不需要你精通,但必须会搭建,并会用linux的基本命令。
阅读全文