面试题PHP

自我介绍方面

八、对于自身掌握的技术描述

1、以PHP+MYSQL为方向,熟练掌握smarty模板引擎、ThinkPHP框架、微信公众平台开发、DEDE、ecshop等二次开发系统,对面向对象有一定的理解;数据库方面,熟练掌握MYSQL、MSSQL等数据库;熟悉在linux下的PHP开发

2、前端技术:熟练掌握DIV+CSS网页布局,javascript,JQuery框架、AJAX技术、photoshop图片处理

3、一年的项目开发经验,使用smarty开发过‘XXXXXXXX’,ThinkPHP开发过‘XXXXXXXX’,使用微信公众平台开发过‘就业服务网’的公众号,使用织梦系统开发过企业站等

 

规划方面

获取节点的几种方式

通过ID获取(getElementById)

通过name属性(getElementsByName)

通过标签名(getElementsByTagName)

通过类名(getElementsByClassName)

获取html的方法(document.documentElement)

获取body的方法(document.body)

通过选择器获取一个元素(querySelector)

通过选择器获取一组元素(querySelectorAll)

 

事务的特性

一致性、原子性、隔离性、持久性

Ajax五个状态

 0 - (未初始化)还没有调用send()方法

 1 - (载入)已调用send()方法,正在发送请求

 2 - (载入完成)send()方法执行完成,已经接收到全部响应内容

 3 - (交互)正在解析响应内容

 4 - (完成)响应内容解析完成,可以在客户端调用了

 

单例

Class single{

    Private static $instance =null;

    Private function  __construct(){}

    Private function  __clone(){}

    Public function getinstance(){

        If(!isset(self::instance)){

            Self::$instance=new self();

        }

        Return $instance;

    }

}

优化数据库方式:

选取合适的字段属性、

使用连接代替子查询、事务、使用联合代替手动创建的临时表、锁定表、使用外键、使用索引、优化查询语句

尽可能的使用not null

使用ENUM枚举,而不是varchar(性别,民族,部门等)

如何查下看最后插入的记录:

1、如果有自增字段id查看最大id

2、mysql_insert_id()

  3、Mysql_last_insert();

  4、Information_schema

 

Print\print_r\echo\var_dump区别:

Print 是打印字符串

Print_r  则是打印复合类型 如数组 对象

Var_dump

Echo 没有返回值

Include\require区别

Require:

一个文件存在错误时,执行就会中断。并返回一个致命错误

include

一个文件存在错误,程序不会中断执行。会弹出一个警告

Echo 其他进制数值时,自动转换为十进制

页面跳转:header(location:’www.baidu.com’)

查看一个文件下的所有文件

Array Glob(pattern,flag)//glob(‘*.*’)匹配所有文件

1、Foreach(glob(‘*.*’) as $filename){

Echo “filename is ”.$filename;

}

2、if($handle=opendir(‘./’)){

Echo “files:\n”;

While(($file=readdir($handle))!==false){

Echo “$file \n”;

}

Closedir($handle)

}

3、$d=dir(“./”);

Echo ”handle:”.$d->handle.”<br>”;

Echo “path:”.$d->path.”<br>”;

While(($file=$d->read())!==false){

Echo “filename:”.$file.”<br>”;

}

数据库存储,金额存储类型?

decimal

如何通过月份筛选?

datediff(date1,date2)返回日期之间差

Date_format(date,format)

Having group by

SELECT ProductID, Total = SUM(LineTotal)

FROM Sales.SalesOrderDetail

GROUP BY ProductID

HAVING SUM(LineTotal) > $2000000.00 ;

Nginx?

高并发

低内存消耗

高扩展性,跨平台

高可靠

更快,响应更快

热部署

最自由的BSD许可协议

索引类型:

普通索引、唯一索引、主键索引、组合索引、全文索引

Mysql数据类型?

TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT

FLOAT、DOUBLE

DATE、TIME、DATETIME、TIMESTAMP

CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM枚举、SET集合

协程?

进程,如何通讯?

管道(无名管道):速度慢,容量有限,只有父子进程能通讯

FIFO(命名管道):任何进程之间都能通讯,但速度慢

消息队列:容量受到系统限制,且第一次读的时候,要考虑上次没有读完的数据

信号量:不能传递复杂消息,只能用来同步

共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存

 

进程,线程区别?

进程是资源分配的基本单位,他是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。

线程是程序执行时的最小单位,他是进程的一个执行流,是CPU调度和分派的进本单位,一个进程可以由很多线程组成,线程间共享进程的所有资源,每个线程都有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行,同时多线程也可以实现并发操作,每个请求分配一个线程来处理。

 

快排?

是对冒泡排序的一种改进,以第一个值为参考值,通过“一次”排序将比其小的放到左面,打的放到右面,然后不断迭代,直到排序完成。

 “一次排序”,两个指针分别指向1,和,n-1,当发生一次事件,交换一下数据,事件在n/2的右面有比参考值小的数,或在左侧有比参考值大的数

堆排?

完全二叉树

事务原理?

Js中的protype?

prototype 属性使您有能力向对象添加属性和方法。

<script type="text/javascript">
function employee(name,job,born)
{
    this.name=name;
    this.job=job;
    this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
employee.prototype.salary=null;
bill.salary=20000;
document.write(bill.salary);
</script>

存储引擎,及区别?

MyISAM (misemu发音)是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;适合小数据,小并发

innodb是支持事务的存储引擎;合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。

 

MVVM设计模式?

MVC:模型-视图-控制器model-view-controller

MVP:模型-视图-表现层model-view-presenter

MVVM:模型-视图-视图模型model-view-viewmodel

WPFSilverlight?

 

ftpssh协议?

ftp文件传输协议

ssh:secure shell安全外壳协议

http协议几种状态?

200请求成功

301永久重定向

403客户端错误,没有权限

404 页面不存在

500服务器内部错误

远程登录?

SecureCRTPortable,软件,使用的是ssh协议,端口号22,主机名,服务器IP

Cookiesession区别?

Cookie客户端

Session服务器端

几个页面之间传值方式?

Cookie

Web worker

localStorage

sessionStorage

php当中魔术方法

__construct() 实例化类时自动调用。

__destruct() 类对象使用结束时自动调用。

__set() 在给未定义的属性赋值的时候调用。

__get() 调用未定义的属性时候调用。

__isset() 使用isset()或empty()函数时候会调用。

__unset() 使用unset()时候会调用。

__sleep() 使用serialize序列化时候调用。

__wakeup() 使用unserialize反序列化的时候调用。

__call() 调用一个不存在的方法的时候调用。

__callStatic()调用一个不存在的静态方法是调用。

__toString() 把对象转换成字符串的时候会调用。比如 echo。

__invoke() 当尝试把对象当方法调用时调用。

__set_state() 当使用var_export()函数时候调用。接受一个数组参数。

__clone() 当使用clone复制一个对象时候调用。、

 

Sql注入:

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果,成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。

Check 约束

CREATE TABLE Persons
(
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CHECK (Id_P>0)
) 

怎么使得元素大小包含padding和border?

box-sizing: border-box;

Display:hidden与visibility:hidden的区别?

 

Mysql中表连接的几种方式及区别?

 

配置nginx的server?

 

什么场景使用链表,什么场景使用数组?

  数组应用场景:数据比较少;经常做的运算是按序号访问数据元素;数组更容易实现,任何高级语言都支持;构建的线性表较稳定

  链表应用场景:对线性表的长度或者规模难以估计;频繁做插入删除操作;构建动态性比较强的线性表

Php怎么处理XML文件,和json文件?

 

简述你常用的一些linux指令?

ls
cd
cat 
more less tail head wc
mkdir
touch
chmod
cp
rm
ps
grep
find
pwd
mv
df 查看目录使用情况
rmdir 删除空目录
basename 取文件名
whereis file 找出文件file的位置
diff file1 file2 文件不同处

 

防止sql注入的方法?

 

开启错误调试使用什么函数?

<?php

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/benben0729/article/details/81301909