飞道的博客

后台 -- mysql和tp,php的总结

293人阅读  评论(0)

php,tp的总结

 

cookie,session,超全局变量,static问题

https://www.nowcoder.com/profile/666691890/myFollowings/detail/11563078

下面哪些说法是正确的?

选择第二个

  1. 浏览器禁用cookie,不影响session 使用
  2. $GLOBALS、$_SERVER、$_REQUEST、$_POST、$_GET均为超全局变量
  3. static 是静态变量,在局部函数中存在且只初始化一次,使用过后再次使用会使用上次执行的结果;
  4. static 静态方法,是类的成员方法,但不需要实例化类可直接使用

 

第一个讲解:

不能使用. 因为session是基于cookie的. cookie存储着sessionid

 

第二个讲解:

$_GET   // 地址栏的参数
$_POST  // 接POST型的表单参数经(比如,用户注册时的内容,往往用$_POST来接)
$_REQUEST // 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组,即$_REQUEST是前3者一个并集
        // 比如不想区分 $_GET,$_POST,可以用$_REQUEST来代替
​
$_FILES  // 文件上传时学
​
$_COOKIE   // 
$_SESSION  // 用户登陆时学
​
$_ENV
$_SERVER   // 服务器还有访客的一些信息
​
$GLOBALS  // 所有变量的一个注册表

 

第三个和第四个讲解:

static是标记静态变量的关键字而不是静态变量

static静态方法,是类的类方法,不是成员方法,可以不需要实例化类直接使用

 

trait问题

关于PHP中trait正确的说法是:

选择第三个

  1. 使用trait实现了一种代码复用机制,使用extent关键字声明使用trait
  2. 使用trait实现了一种代码追踪机制,使用use关键字声明使用trait
  3. 使用trait实现了一种代码复用机制,使用use关键字声明使用trait
  4. 使用trait实现了一种代码追踪机制,使用extent关键字声明使用trait

讲解:

https://www.jianshu.com/p/fc053b2d7fd1

php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性

用法:通过在类中使用use 关键字,声明要组合的Trait名称,具体的Trait的声明使用Trait关键词,Trait不能实例化

 

实例化对象问题

获得实例化对象所属类名字的函数( )

选择第一个

  1. get_class()
  2. get_object_vars()
  3. get_class_methods()
  4. get_classname()

 

第一个讲解:

get_class ()    获取当前调用方法的类名 get_called_class() 获取静态绑定后的类名

 

第二个讲解:

获取$object对象中的属性,组成一个数组

https://www.jb51.net/article/60879.htm

 

第三个讲解:

get_class_methods()函数获取分类的方法

 

第四个讲解:

GetClassName函数名,该函数获得指定窗口所属的类的类名。

 

 

集成面向对象问题

继承性是面向对象设计语言的一个主要特点,表示继承关系的关键字是()

选择第三个

  1. class
  2. new
  3. extend
  4. static

第一个讲解

为类的意思

 

第二个:

为新的意思

 

第三个:

延伸扩展..

 

第四个:

静态

 

字符串转为数组函数问题

哪些函数能将字符串分割到数组中 ?

选择第二个

1.implode

2.preg_split
​
3.explode
​
4.join

第一个:

把数组的转为字符串 implode('' , $arr);

 

第二个:

字符出,分割到数组中

https://www.runoob.com/php/php-preg_split.html

 

第三个:

字符串打散为数组

 

第四个:

数据格式

 

数据数组(输出)问题

下面的代码的输出是结果为:

选择第四个

$s = "12345"; $s[$s[1]] = "2"; echo $s;

 

1.12345
​
2.11345
​
3.22345
​
4.12245

把字符串看作数组对待 $s[1]=2, $s[2]=2

 

PHP自定义类

如何在PHP中自定义一个类?

选择第二个

1.<?php class Class_Name(){ //...... } ?>

​
2.<?php class Class_Name{ //......} ?>

​
3.<?php function Class_Name(){//......}?>

​
4.<?php function Class_Name{//......}?>

第一个:

加了一个()为函数了。

 

第三、第四:

都是声明函数的方法

 

代码运行结果,class相关

下面程序的运行结果是()

选择第一个

class student { function __construct{ echo 'I am a student . '; } function teacher(){ echo 'I am a teacher .'; } } $peo=new student();

1.I am a student
​
2.I am a student . I am a teacher .
​
3.I am a teacher .
​
4.无任何输出

解析:

运行了我们的student类,_cinstruct为自调用函数,所以执行的是第一个。

 

substr()函数的使用

下列代码的输出是

选择第一个

$rest = substr("abcdef", -1); $rest = substr("abcdef", 0, -1); var_dump($rest);

 

1.f,abcde
​
2.b,abcdef
​
3.a,fedcb
​
4.a,abcde

讲解:

substr() 函数返回字符串的一部分。

 

substr(string,start,length)

参数 描述
string 必需。规定要返回其中一部分的字符串。
start 必需。规定在字符串的何处开始。正数 - 在字符串的指定位置开始负数 - 在从字符串结尾开始的指定位置开始0 - 在字符串中的第一个字符处开始
length 可选。规定被返回字符串的长度。默认是直到字符串的结尾。正数 - 从 start 参数所在的位置返回的长度负数 - 从字符串末端返回的长度

https://www.w3school.com.cn/php/func_string_substr.asp

 

PHP中的session

关于PHP Sessions说法正确的是( )

选择第一个和第二个

1.必须在发送任何HTML、文本信息前调用session_start() 函数
​
2.session_start() 函数必须位于 <html> 标签之前
​
3.要结束当前的session则应该调用setcookie()函数
​
4.必须在发送任何HTML、文本信息之后调用session_close() 函数

 

PHP数组键名问题

php中数组可以使用哪些键名()

选择第一个,第二个,第四个

1.数字键名
​
2.下标
​
3.随机
​
4.文本(或字符串)键名

 

PHP非法定义变量

下列那一个是非法的变量定义

选择第四个

my_function
​
$_name
​
declare
​
$1_1

解析:

PHP 变量规则:

  • 变量以 $ 符号开头,其后是变量的名称

  • 变量名称必须以字母或下划线开头

  • 变量名称不能以数字开头

  • 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)

  • 变量名称对大小写敏感($y 与 $Y 是两个不同的变量) D选项以数字开头了肯定不对

 

php.ini默认储存目录

在PHP的存储目录中,/tmp是长传文件的默认存储目录,更改这个目录需要编辑哪个文件的哪个属性值?

选择第四个

 

php.conf文件的upload_dir属性
​
php.conf文件的upload_tmp_dir属性
​
php.ini文件的upload_dir属性
​
php.ini文件的upload_tmp_dir属性

 

解析:

https://www.php.net/manual/zh/ini.core.php#ini.upload-tmp-dir

 

PHP中单引号,双引号问题

PHP中,单引号和双引号所包围的字符串有什么区别?()

选择第四个

 

单引号解析其中\r\t等转义字符,而双引号不解析
​
双引号速度快,单引号速度慢
​
单引号速度快,双引号速度慢
​
双引号解析其中以$开头的变量,而单引号不解析

 

解析:

 

date()函数

下面关于date()函数支持的代码格式描述错误的是

 

a/A:表示上午或者下午,以am或者AM表示
​
y:表示用四位数显示年份
​
d:表示月份中的日期
​
s:表示时间秒,范围为00-59

 

解析:

Y;代表的当前年份,四位数

y:代表当前年份,两位数

 

随机数安全问题

在php中可以使用当前时间作为随机数种子产生随机数是安全的()

选择第二个

 

是
​
不是

 

解析:

当然是随机生成的随机数比较安全。

 

代码输出结果函数相关

以下代码返回的结果为:( )

选择第二个

 

true
​
false
​
程序运行出错
​
根据版本来定

 

解析:

if(p())这个表示如果有p函数就执行,如果没有p函数报错,然后依次向下执行。

 

++i和i++

若$y,$ x为int型变量,则执行以下语句后,$y的值为:( )

选择第二个

$x=1; ++$x; $y = $x++; var_dump($y);

 

1
​
2
​
3
​
0

 

解析:

这里省略写$,首先x为1 然后加1. y=x++,代表着是先赋值在增加。

 

$x=1; //这一步声明了变量x,并对其赋值为1; ++$x; //使用了前++运算符,先对自身+1,再进行运算,$x的值为2; $y=$x++; //使用了后++运算,先把$x的值赋给$y,再对自身+1,$y为2,$x为3.

 

访问问题(静态方法)

以下说法错误的是( )

选择第二个

 

在外部访问静态成员属性时使用类名::静态成员属性名
​
在外部访问静态成员属性时使用$实例化对象->静态成员属性名
​
在外部访问静态方法时使用$实例化对象 ->静态方法名
​
在外部访问静态方法时使用类名::静态方法名

 

解析:

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

http://php.net/manual/zh/language.oop5.static.php

 

代码输出preg_match()函数问题

下列代码输出的是

选择第一个

$qpt = 'Eat to live, but not live to eat'; echo preg_match("/^to/", $qpt);

 

0
​
1
​
to
​
Null

 

解析:https://www.codercto.com/courses/d/852.html

函数preg_match的作用是,找到内容中存在某个值,

0(代表不匹配)或者1。

 

配置项,与安全不相关

下列PHP配置项中,哪一个和安全最不相关:()

选择第四个

 

open_basedir
​
register_globals
​
disable_functions
​
file_uploads

 

解析;

open_basedir 可将用户访问文件的活动范围限制在指定的区域 ,通常是其家目录的路径,也 可用符号 "." 来代表当前目录。注意用open_basedir 指定的限制实际上是前缀 , 而不是目录名。 举例来说 : 若 "open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是 可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。例如设置成 : "open_basedir = /dir/user/"

 

register_globals 的意思就是注册为全局变量 ,所以当 On 的时候,传递过来的值会被直接的注册为全局变量直接使用,而 Off 的时候,我们需要到特定的数组里去得到它。 1.PHP 4.2.0 版开始配置文件中 register_globals 的默认值从 on 改为 off 了,虽然你可以设置它为 On ,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用 Off 的风格开始编程。 2. register_globals 打开以后,各种变量都被注入代码,例如来自 HTML 表单的请求变量。再加上 PHP 在使用变量之前是无需进行初始化的,这就使得更容易写出不安全的代码。 当打开时,人们使用变量时确实不知道变量是哪里来的,只能想当然。但是 register_globals 的关闭改变了这种代码内部变量和客户端发送的变量混杂在一起的糟糕情况。

 

disable_functions 限制程序使用一些可以直接执行系统命令的函数 ,如 system , exec , passthru , shell_exec , proc_open 等等。所以如果想保证服务器的安全,请将这个函数加到 disable_functions 里或者将安全模式打开吧

 

file_uploads , PHP 文件上传功能记录 file_uploads 指令决定是否启用,默认值: On 。

 

 

PHP基础填空题

选择合适的答案填入空白处

PHP是一种__脚本语言,基于__引擎。PHP最常被用来开发动态的__内 容,此外,它同样还可被用来生成__(以及其他)文档。

选择第二个

 

动态,PHP,数据库,HTML
​
嵌入式,Zend,HTML,XML
​
基于 Perl 的,PHP,Web,静态
​
嵌入式,Zend,Docbook 文档,MySQL

 

解析:

https://baike.baidu.com/item/zend/10840185?fr=aladdin

 

自定义构造方法

早期的PHP代码中,除了使用function __construct()定义构造方法外,还可以使用( )

选择第二个

 

function  __destruct()
​
function 类名()
​
function  __tostring()
​
function __call()

 

解析:

function _construct()自调用函数。

parent::__construct();可以调用父类的构造函数

https://www.cnblogs.com/ygyy/p/11563356.html

 

function toString()方法将内容返回为字符串,可以使用echo进行输出,一般我们要使用print_r()或var_dump()来输出内容,使用toString()就可以,以字符串的格式返回数据。我们使用tostring函数的时候返回数据的时候一定要使用return。

https://blog.csdn.net/haoyunyun888/article/details/82227811

 

function _destruct();https://www.cnblogs.com/zhongyinghe/p/5944343.html

 

function _call();函数在对象中调用一个不可访问方法时调用。比如进入某个方法不存在,提示你访问的某个方法不存在。十分的灵活。

https://www.php.cn/php-weizijiaocheng-198043.html

 

链接数据库长久链接

PHP链接数据库方法中,使用以下那条指令能够实现数据库的长久连接:

选择第一个

 

mysql_pconnect
​
mysql_pconnetcd
​
mysql_connectd
​
mysql_connect

 

解析:

第一个永久的,长久的

 

第二个,没见过

 

第三个,也没有见过。

 

第四个,链接数据库

 

mysql_pconnect — 打开一个到 MySQL 服务器的持久连接 ,如果成功则返回一个正的 MySQL 持久连接标识符,出错则返回 flase

mysql_connect — 打开一个到 MySQL 服务器的连接

 

字符串拼接问题

下面哪个表达式不能将两个字符串$s1和$s2串联成一个单独的字符串:( )

选择第一个

 

$s1+$s2
​
“{$s1}{$s2}”
​
$s1.$s2
​
implode(‘’,array($s1,$s2))

 

解析:

第一个:js中+为拼接PHP中 . 为拼接的意思。

第二个:这个方法是可是实现拼接的

第三个:正确 . 代表着拼接的意思

第四个:打撒。

mysql_affected_rows()函数的操作

在PHP操作数据库方法中,mysql_affected_rows()对哪个操作没有影响

选择第三个

 

update
​
insert
​
select
​
delete

 

解析:

mysql_affected_rows() 函数返回前一次 MySQL 操作所影响的记录行数。

mysqli_affected_rows() 函数返回前一次 MySQL 操作(SELECT、INSERT、UPDATE、REPLACE、DELETE)所影响的记录行数。

mysql_affected_rows() 取得最近一次与 link_identifier 关联的 INSERT,UPDATE 或 DELETE 查询所影响的记录行数。

_destruct

在PHP中,如果需要类C的实例销毁时自动完成某些逻辑,我们应该怎么做

选择第四个

 

定义析构函数-C
​
定义析构函数_-C
​
PHPS中没办法实现要求
​
定义析构函数_destruct

 

解析:

_destruct执行完毕后会进行销毁。

https://www.php.cn/php-weizijiaocheng-197545.html

 

服务器中session问题

下面哪种方式可以用于服务器共享session?

选择全部

 

利用NFS共享Session数据
​
基于数据库的Session共享
​
基于Cookie的Session共享
​
使用类似BIG-IP的负载设备来实现资源共享

 

解析:

\1. 基于NFS的Session共享

NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发。 这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的本地session目录即可,缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件,会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。

 

\2. 基于数据库的Session共享

首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,相信大家普遍在使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除 session记录,当并发过高时容易出现表锁,虽然我们可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势。

 

\3. 基于Cookie的Session共享

 

这个方案我们可能比较陌生,但它在大型网站中还是比较普遍被使用。原理是将全站用户的Session信息加密、序列化后以Cookie的方式,统一种植在根域名下(如:.host.com),利用浏览器访问该根域名下的所有二级域名站点时,会传递与之域名对应的所有Cookie内容的特性,从而实现用户的Cookie化Session 在多服务间的共享访问。

这个方案的优点无需额外的服务器资源;缺点是由于受http协议头信心长度的限制,仅能够存储小部分的用户信息,同时Cookie化的 Session内容需要进行安全加解密(如:采用DES、RSA等进行明文加解密;再由MD5、SHA-1等算法进行防伪认证),另外它也会占用一定的带宽资源,因为浏览器会在请求当前域名下任何资源时将本地Cookie附加在http头中传递到服务器。

\4. 基于Mem***的Session共享

Mem由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的Key + Value数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势。另外值得一提的是Mem的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了过期Session数据删除的代码复杂度,对比“基于数据库的存储方案”,仅这块逻辑就给数据表产生巨大的查询压力。

 

++i和i++的计算问题

下题的运行结果是?

选择第四个

$a = 1; $b = 2; function sum(&$a, $b) { ++$a; $b++; return $a + $b; } $c = sum($a, $b); echo $a . ","; echo $b . ","; echo $c . "\n";

 

1,2,5
​
2,3,5
​
1,2,4
​
2,2,5

 

解析:

省略$. 我们首先得到c为5

a为2?

b为2?

 

PDO

PDO通过执行SQL查询与数据库进行交互,可以分为多种不同的策略,使用哪一种方法取决于你要做什么操作。如果向数据库发送DML语句,下面哪种方式最合适?

选择第三个

 

使用PDO对象中的exec()方法
​
使用PDO对象中的query()方法
​
使用PDO对象中的prepare()和PDOStatement对象中的
execute()两个方法结合
​
以上方式都可以

 

解析:

Oracle Call Interface

 

PDO

PDO::ATTR_ERRMODE设置为以下哪个值时,PDO会抛出PDOException?

选择第三个

 

PDO::ERRMODE_SILENT
​
PDO::ERRMODE_WARNING
​
PDO::ERRMODE_EXCEPTION
​
PDO::errorInfo()

 

解析:

PDO::ATTR_ERRMODE: 错误提示 . PDO::ERRMODE_SILENT: 不显示错误信息,只显示错误码 .

PDO::ERRMODE_WARNING: 显示警告错误 . PDO::ERRMODE_EXCEPTION: 抛出异常 .

 

git操作指令

不属于Git操作的命令是?

选择第三个

 

add
​
reset
​
mkdir
​
fetch
​
rebase
​
merge

 

解析:

git add:对文件跟踪,添加到仓库

git reset --hard HEAD 撤销没提交的文件

git fetch <remote> 获取远程仓库代码

git rebae <branch>: 衍和指定分支到当前分支,会合并之前的 commit 历史,得到更简洁的项目历史,去掉了 merge commit,如果合并出现代码问题不容易定位,因为 re-write 了 history

git merge <branch>: 合并指定分支到当前分支,每次合并都会创建一个新的 commit,如果合并的时候遇到冲突,仅需要修改后重新 commit,记录了真实的 commit 情况,包括每个分支的详情,但这样分支看起来很杂乱。

mkdir 是 Linux 命令,创建一个新目录。

 

affected_rows属性对那个操作无影响

使用mysqli对象中的affected_rows属性,对哪个操作没有影响?

选择第一个

 

SELECT
​
DELETE
​
UPDATE
​
INSERT

 

解析:

affected_rows() 返回前一次mysqli操作受影响的记录行数,查询语句是一个结果集,只是查询出内容,并未产生改变。

并不是楼上所说的是作用于DML语句,DML语句是包含select方法的。

 

显示文件

下列代码的输出是

选择第二个

$x=dir("."); while($y=$x->read()) { echo $y; } $x->close();

 

显示所有驱动器的内容
​
显示当前文件夹下的所有文件名
​
显示所有文件夹的名称
​
编译错误

 

解析:

read()读取,循环的读取文件。

close();关闭文件。

dir(".");方法返回的是当前文件夹的路径,返回的是一个对象给$x

通过$x读取文件夹下的文件,通过while语句输出

 

判断数据(存在,为空..)问题

选择第一个

<?php var_dump(isset($a)) . "\n"; $a = 0; var_dump(isset($a)) . "\n"; var_dump(is_null($a)) . "\n"; var_dump(empty($a));

 

bool(false) bool(true) bool(false) bool(true)
​
bool(false) bool(true) bool(true) bool(true)
​
bool(false) bool(true) bool(true) bool(false)
​
bool(false) bool(true) bool(false) bool(false)

 

解析:

isset();是否设置。

is_null();是否为空

empty();如果为空。

这里0也是为空。

 

获取文件所有信息

以下哪些函数能读取文件的全部内容?

选择第一、第二、第四个

 

file()
​
file_get_contents()
​
fread()
​
readfile()

 

解析:

file() 函数把整个文件读入一个数组中。

file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。

如果失败,则返回 false。

 

readfile() 函数输出一个文件。

该函数读入一个文件并写入到输出缓冲。

若成功,则返回从文件中读入的字节数。若失败,则返回 false。您可以通过 @readfile() 形式调用该函数,来隐藏错误信息。

 

http请求包含内容

HTTP请求行中包含哪些内容?( )

选择第一、第二、第三个

 

请求方法
​
资源名称
​
版本号
​
状态代码

 

解析:

状态码是只有在页面返回信息的时候才有的。

 

oracle数据库问题

如果在PHP中使用Oracle数据库作为数据库服务器,应该在PDO中加载下面哪个驱动程序?

选择第三个

 

PDO_DBLIB
​
PDO_MYSQL
​
PDO_OCI
​
PDO_ODBC

 

解析:

 

比较两个字符串最好用方法

比较两个string最好用什么方法

选择第四个

 

使用strpos
​
使用==
​
使用strcasecmp()
​
使用strcmp()

 

解析:

==字符串不好比较。

 

strcasecmp ()//忽略字符串中字母大小写地比较

 

sercmp() //区分字符串中字母大小写地比较

https://www.jb51.net/article/57563.htm

 

require和include

下面有关php中require()和include()的描述,说法错误的是?

选择第四个

 

require函数通常放在 PHP 程序的最前面
​
include函数一般是放在流程控制的处理部分中
​
require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含
​
require在引入不存文件时产生一个警告且脚本还会继续执行,而include则会导致一个致命性错误且脚本停止执行

 

解析:

include与require除了在处理引入文件的方式不同外,最大的区别就是: include在引入不存文件时产生一个警告且脚本还会继续执行, require则会导致一个致命性错误且脚本停止执行。

https://www.cnblogs.com/lucklyphp/p/10700454.html

substr截取字符

已知某字符串为$mystr=“Yantai nanshan University”,则取子串函数substr($mystr,-18,-11)所得到的子串为( )

选择第二个

 

Yantai
​
nanshan
​
University
​
会出现编译错误

 

解析:

倒数第18个,至倒数第11个

 

cookie注意事项

PHP Cookies说法正确的是( )

选择第一、第二个

 

setcookie() 函数用于设置 cookie,且必须位于 <html> 标签之前
​
cookie 是服务器留在用户计算机中的小文件
​
cookie 常用于标识服务器
​
会话cookie的生命周期是在关闭浏览器前就消失,并且会保存在硬盘上

 

解析:

setcookie() 定义一个和其余的 HTTP 标头一起发送的 cookie。和其它标头一样,cookie 必须在脚本的任何其它输出之前发送(这是协议限制)。这需要将本函数的调用放到任何输出之前,包括 <html> 和 <head> 标签以及任何空格。如果在调用 setcookie() 之前有任何输出,本函数将失败并返回 FALSE。 cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。 Session用来追踪每个用户的会话,使用服务器生成的SessionID进行标识,用以区分用户。 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。

 

array_count_values计算数组中值出现的次数

下列代码的输出是

选择第一个

$x=array("aaa","ttt","www","ttt","yyy","tttt"); $y=array_count_values($x); echo $y["ttt"];

 

2
​
3
​
1
​
4

 

解析:

查询数组中ttt出现多少次

 

抽象类的理解

下面关于PHP抽象类描述错误的是:( )

选择第三个

 

PHP中抽象类使用abstract关键字定义.
​
没有方法体的方法叫抽象方法,包含抽象方法的类必须是抽象类。
​
抽象类中必须有抽象方法,否则不叫抽象类。
​
抽象类不能实例化,也就是不可以new成对象。

 

解析:

https://www.runoob.com/php/php-oop.html

避免sql注入

PHP 提供以下哪个函数来避免SQL注入()

选择第一个

 

mysql_real_escape_string
​
escapeshellarg
​
htmlentities
​
escapeshellcmd

 

解析:

escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数

htmlentities — 将字符转换为 HTML 转义字符

escapeshellcmd — shell 元字符转义

mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集

 

什么是解释性语言

相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript / Perl /Shell等都是解释型语言。

 

代码运行结果--$num

下题的运行结果是?

选择第二个

<?php $num = 7; function add($num){ static $total = 0; if($num>=1){ $total+=$num; add(--$num); }else{ return $total; } } var_dump(add($num));

 

int(28)
​
NULL
​
string(0) &quot;&quot;
​
int(0)

 

解析:

add(--$num)前面没有return返回值,函数里面只有过程,而没有结果给add(),所以调用该函数的时候当然不会有值输出。

 

floor函数的使用

上述代码输出结果为( )

选择第一个

echo(floor(0.60)); echo(floor(0.1+0.7)*10); echo(floor(5.1)); echo(floor(-5.9));

 

005-6
​
085-6
​
005-5
​
085-5

 

解析:

floor — 舍去法取整。 int floor ( float $value )。 返回不大于 value 的最接近的整数,舍去小数部分取整。 所以答案为: 0 0 5 -6

 

empty判断是否为空

以下程序运行结果为:( )

选择第一个

$var = FALSE; if (empty($var)){ echo"null"; }else{ echo"have value";

}

 

null
​
have value
​
无法确定
​
什么也不显示,提示错误

 

解析:

$var为false错误,那么就是为空

 

{}内写变量问题

则$c等于:

选择第二个

$a={a,b,c}; $b={a,b}; $c=$a+$b;

 

{a,a,b,b,c};
​
{a,b,c};
​
{a,b,c,a,b};
​
{a,c,a,b};

 

解析:

{}将变成数组来看。然后两个加在一起那么就是abc了

 

unset函数

结果是什么?( )

选择第一个

$a="hello"; $b= &$a; unset($b); $b="world"; echo $a;

 

hello
​
world
​
NULL
​
unset

 

解析:

题目没看清,它输出的为a

__construct子父类问题

下列代码输出内容是( )

选择第一个

class A{ public function construct(){ echo "Class A... "; } } class B extends A{ public function construct(){ echo "Class B... "; } } new B();

 

Class B...
​
Class A... Class B...
​
Class B...Class A...
​
Class A...

 

解析:

A,php中子类如果定义construct则会覆盖父类的construct,如果没有定义construct,则会使用父类的,可以在子类的construct中显示调用 parent::__construct();

 

__call函数相关

在PHP面向对象中,关于__call()方法描述错误的是( )

选择第四个

 

__call方法在调用对象中不存在的方法时自动调用的。
​
__call方法有两个参数。
​
格式如下: function __call($方法名,$参数数组){ //.....}
​
__call方法在使用对象报错时自动调用的。

 

解析:

__call方法在调用对象中不存在的方法时自动调用的。

mktime时间问题

上述代码运行后的输出结果为( )

选择第一个

$d=mktime(9, 12, 31, 6, 10, 2015); echo "创建日期是 " . date("Y-m-d h:i:sa", $d);

 

创建日期是 2015-06-10 09:12:31am
​
创建日期是 2015-10-06 09:12:31am
​
创建日期是 2015-10-6 9:12:31am
​
创建日期是 2015-10-06 09:12:31pm

 

解析:

mktime — 取得一个日期的 Unix 时间戳;

即:时,分,秒,月,日,年。 int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int$month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )

字符串比较方法

下列哪一个方法用于二进制比较String(不区分大小写) ?

选择第三个

 

strcmp()
​
stricmp()
​
strcasecmp()
​
stristr()

 

解析:

strcmp()方法用于比较两个字符串(区分大小写)

stricmp()方法貌似是C语言里面的吧,,

strcasecmp()用于比较两个字符串(不区分大小写)

stristr()方法用于搜索字符串在另一字符串中的第一次出现

 

$_SERVER['PHP_SELF']的使用

假设你有一个名为'index.php'的文件的路径为c:/apache/htdocs/phptutor/index.php,那么basename($_SERVER['PHP_SELF'])的返回值为?

选择第三个

 

phptutor
​
phptutor/index.php
​
index.php
​
/index.php

 

解析:

basename返回路径中的文件名部分,即为 index.php

 

局部全局变量

以下代码执行结果为:( )

选择第一个

$b='windows' ; function print_b() { $b='linux'; } print_b(); echo 'B值为:'.$b.' ';

 

B值为:windwos
​
B值为:linux
​
运行错误
​
B值为:windowslinux

 

解析:

只有在函数内部执行变量才会有本变量的值,出来函数后继承上面变量的值。

作用域的问题,函数里面不能改变外面的值

 

字符串数字相加问题

如下代码输出为

选择第一个

<?php $num = "1"; $num1 = "2"; print $num + $num1 ; ?>

 

3
​
1+2
​
1.+.2
​
Error

 

解析:

字符串在相加的时候被自动转换类型了

 

获取get中form中所有信息

如何从一个get的form中获取信息?

选择第一个

 

$_GET[];
​
Request.Form;
​
Request.Query String;
​
.$_POST[];

 

Validating 过滤器

Validating 过滤器是()

选择第一、第三、第四个

 

用于验证用户输入
​
用于允许或禁止字符串中指定的字符
​
有严格的格式规则
​
如果成功则返回预期的类型,如果失败则返回 FALSE

 

解析:

validating过滤器: 1.用于验证用户输入。 2.严格的格式规则。(比如 URL 或 E-Mail 验证) 3.如果成功则返回预期的类型,失败则返回 false。 sanitizing过滤器: 1.用于允许或禁止字符串中指定的字符。 2.无数据格式规则。 3.始终返回字符串。

switch循环

下面代码执行结果正确的是

选择第三个

$j=5; Switch($j){ Default: echo 'no result'; case 1: echo '周一'; case 2: echo '周二 '; case 3: echo '周三'; case 4: echo '周四'; case 5: echo '周五'; case 6: case 7: echo '周末'; }

 

周五
​
周五周末no result
​
周五周末
​
语法错,没有运行结果

 

解析:

没有break,所以继续执行

 

print和echo的区别

print()和echo()有什么区别?

选择第一个

 

print()能作为表达式的一部分,echo()不能
​
echo()能作为表达式的一部分,print()不能
​
echo()能在 CLI(命令行)版本的 PHP 中使用,print()不能
​
print()能在 CLI(命令行)版本的 PHP 中使用,echo()不能

 

解析:

echo()可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构,而并不是真正的函数,没有返回值因此不能作为表达式的一部分使用。

print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。也就是说print算是半个函数,可以返回true或者false,可以用于表达式中判断。

 

变量定义方法

以下代码哪个不符合PHP语法?

选择第四个

 

$_10
​
${“MyVar”}
​
&$something
​
$10_somethings

 

解析:

是正确的变量格式。 合法

是访问变量名为"MyVar"字符串的一个变量,{}是界定符号。 合法

中&$something是对变量的一个引用。 合法

中的变量以数字开头,根据PHP中变量的命名规则,变量名不能以数字开头。 不合法

 

sort、count、asort、rsort函数作用

下列PHP函数描述错误的是

选择第三个

 

sort()用于实现数组的升序排序
​
count()返回是数组的长度
​
asort()用于按照键名对数组进行排序
​
rsort()按照降序的方式排列数组元素

 

解析:

  • asort - 对数组进行升序排序并保持索引关系

  • sort — 对数组进行升序排序,此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。

  • rsort — 对数组逆向排序,此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。

  • count — 计算数组中的单元数目,或对象中的属性个数

<?php

/**

* 数组排序和计算个数

*/

function sortsAndCounts() {

// asort - 对数组进行升序排序并保持索引关系

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");

asort($fruits);

foreach ($fruits as $key => $val) {

echo "$key = $val\n";

}

/*

* 输出结果为:

* c = apple

b = banana

d = lemon

a = orange

*/

 

// sort — 对数组进行升序排序,此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。

$fruits = array("1" => "lemon", "2" => "orange", "5" => "banana", "4" => "apple");

sort($fruits);

foreach ($fruits as $key => $val) {

echo "fruits[" . $key . "] = " . $val . "\n";

}

/*

* fruits[0] = apple

fruits[1] = banana

fruits[2] = lemon

fruits[3] = orange

*/

 

// rsort — 对数组逆向排序,此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。

$fruits = array("6"=>"lemon", "5"=>"orange", "strs"=>"banana", "ab"=>"apple");

rsort($fruits);

foreach ($fruits as $key => $val) {

echo "$key = $val\n";

}

/*

* 0 = orange

1 = lemon

2 = banana

3 = apple

*/

 

/**

* count — 计算数组中的单元数目,或对象中的属性个数

* count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int

* array_or_countable 数组或者 Countable 对象。

* mode 如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算***数组的所有单元尤其有用。

* 返回 array_or_countable 中的单元数目。 如果参数既不是数组,也不是实现 Countable 接口的对象,将返回 1。 有个例外:如果 array_or_countable 是 NULL 则结果是 0。

*/

$a[0] = 1;

$a[1] = 3;

$a[2] = 5;

var_dump(count($a)); // 输出 int(3)

$b[0] = 7;

$b[5] = 9;

$b[10] = 11;

var_dump(count($b)); // 输出 int(3)

var_dump(count(null)); // 输出 int(0)

var_dump(count(false)); // 输出 int(1)

}

sortsAndCounts();

 

数组指针函数

下面哪一个不是关于数组指针的函数?

选择第一个

 

first()
​
end()
​
prev()
​
next()

 

解析:

对于数组指针的控制PHP提供了以下几个内建函数:

current():取得目前指针位置的内容资料。

key():读取目前指针所指向资料的索引值(键值)。

next():将数组中的内部指针移动到下一个单元。

prev():将数组的内部指针倒回一位。

end():将数组的内部指针指向最后一个元素。

reset():将目前指针无条件移至第一个索引位置。

 

读写模式打开文件

以读写模式打开文件 "FILE.txt"的正确方法是( )

选择第一个

 

fopen("FILE.txt","r+");
​
fopen("FILE.txt","rw");
​
open("FILE.txt","r+");
​
open("FILE.txt","rw");

 

解析:

'r' 只读方式打开,将文件指针指向文件头。 'r+' 读写方式打开,将文件指针指向文件头。 'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。 'x+' 创建并以读写方式打开,其他的行为和 'x' 一样。

 

PDO对象

当PDO对象创建成功以后,与数据库的连接已经建立,就可以使用PDO对象了,下面哪个不是PDO对象中的成员方法?

选择第二个

 

errorInfo()
​
bindParam()
​
exec()
​
prepare()

 

解析:

PDO对象中的成员方法:

getAttribute() 获取一个数据库连接对象的属性

setAttribute() 为一个数据库连接对象设定属性

errorCode() 获取错误码

errorInfo() 获取错误信息

exec() 处理一条SQL语句,并返回所影响的条数

query() 处理一条SQL语句,并返回一个PDOStatement对象

quote() 为某个sql中的字符串添加引号

lastInsertId() 获取插入到表中的最后一条数据的主键

prepare() 负责准备执行的sql语句

getAvailableDriver() 获取有效的PDO驱动器名称

beginTransaction() 开始一个事务

commit() 提交事务

rollback() 回滚事务

 

arsort函数

关于arsort()函数,如下说法正确的是()

选择第二个

 

对数组值按照从大到小排序,稳定排序
​
对数组值按照从大到小排序,非稳定排序
​
对数组键按照从大到小排序,稳定排序
​
对数组键按照从小到大排序,非稳定排序

 

$_SERVER['HTTP_USER_AGENT']获取浏览器属性

在php中哪一个方法来获取浏览器属性

选择第三个

 

$_SERVER['PHP_SELF']
​
$_SERVER['HTTP_VARIENT']
​
$_SERVER['HTTP_USER_AGENT'];
​
$_SERVER['SERVER_NAME']

 

解析:

获取用户什么的

 

24%(-5)输出的结果

执行程序段 <?php echo 24%(-5)?> 输出结果是?

选择第二个

 

5
​
4
​
-4
​
19

 

解析:

求余24除以几余数为5

 

foreach循环

下面的脚本运行以后,$array数组所包含的值是什么?( )

选择第二个

<?php $array= array('1','1'); foreach($array as $k=>$v){ $v = 2; } var_dump($array); ?>

 

array (‘2’ , ‘2’)
​
array (‘1’ , ‘1’)
​
array (2 , 2)
​
array (Null , Null)

 

解析:

$v这里没有用,要想改变就要把$k=>$v改为$k=>&$v后才能改变数组的值

 

__construct执行问题

阅读下面PHP代码,并选择输出结果( )

选择第四个

class A{ public static $num=0; public function __construct(){ self::$num++; } } new A(); new A(); new A(); echo A::$num;

 

0
​
1
​
2
​
3

 

解析:

实例化A时只会触发__construct()的语句而不触发publicstatic$num=0;。同时$num是static,所以会加三次、

 

mysql_close()关闭数据库问题

在以下PHP链接数据库语句中,数据库关闭指令将关闭哪个连接标识:

选择第四个

<? $link1 =mysql_connect("localhost","root",""); $link2 =mysql_connect("localhost","root",""); mysql_close(); ?>

 

报错
​
全部关闭
​
$link1
​
$link2

 

解析:

mysql_close() 关闭指定连接

如果没有指定,则关闭最近打开的链接

两个$$问题

下列代码的输出是

选择第一个

<?php $father="mother"; $mother="son"; echo $$father; ?>

 

son
​
mother
​
motherson
​
error

 

解析:

$$father相当于$father = $mother

所以输出的为$mother

转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消

php定义常量

下列语句中哪条是正确定义一个常量( )

选择第二个

 

var const PI=3.14;
​
const PI=3.14;
​
public const PI=3.14;
​
static PI=3.14;

 

解析:

使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。

(1).const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。

(2).const可在类中使用,define不能。

(3).const不能在条件语句中定义常量。

const采用一个普通的常量名称,define可以采用表达式作为名称。

const只能接受静态的标量,而define可以采用任何表达式。

const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。

 

final修饰符

在PHP面向对象中,下面关于final修饰符描述错误的是( )

选择第四个

 

使用final标识的类不能被继承
​
在类中使用final标识的成员方法,在子类中不能被覆盖
​
不能使用final标识成员属性
​
使用final标识的成员属性,不能在子类中再次定义

 

解析:

final---用于类、方法前。 final类---不可被继承。 final方法---不可被覆盖。

 

mysql_pconnect的介绍

mysql_pconnect() 函数打开一个到 MySQL 服务器的持久连接。

mysql_pconnect() 和 mysql_connect() 非常相似,虽然只多了一个P, 但有两个主要区别:

当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以 后使用( mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)

 

验证字符串的完整性

以下哪些函数能用来验证字符串的完整性?

选择第一、第二、第四个

 

md5()
​
sha1()
​
str_rot13()
​
crc32()

 

解析:

md5()、shal()和crc32()用来验证字符串完整性

crypt()和 str_rot13()来验证一个字符串是否被改变,效率很低

 

mysql_fetch_object问题

关于mysql_fetch_object说法中正确的是()

选择第一个

 

mysql_fetch_object返回值是个对象,在速度上和mysql_fetch_array及mysql_fetch_row差不多
​
mysql_fetch_object返回值是个对象,所以在速度上比
mysql_fetch_array要慢
​
mysql_fetch_object返回值是个数组,所以在速度上和
mysql_fetch_array及mysql_fetch_row差不多
​
mysql_fetch_object和mysql_fetch_array一样,没什么区别

 

解析:

mysql_fetch_object() 和 mysql_fetch_array() 类似,只有一点区别 - 返回一个对象而不是数组。

速度上,本函数和 mysql_fetch_array() 一样,也几乎和 mysql_fetch_row() 一样快(差别很不明显)

 

getdate返回值类型问题

getdate()函数返回的值的数据类型是:( )

选择第三个

 

整形
​
浮点型
​
数组
​
字符串

 

解析:

这个函数是获取当前时间。

调用getdate函数的返回值

Array ( [seconds] => 37 [minutes] => 34 [hours] => 15 [mday] => 19 [wday] => 3 [mon] => 8 [year] => 2015 [yday] => 230 [weekday] => Wednesday [month] => August [0] => 1439969677 )

array_count_values函数

下列代码的输出是

选择二第三个

$x=array(1,3,2,3,7,8,9,7,3); $y=array_count_values($x); echo $y[8];

 

43
​
8
​
1
​
6

 

解析:

判断$y数组中下标为8的数字出现多少次

 

define声明常量

下列代码的输出是?

选择第二个

define("x","5"); $x=x+10; echo x;

 

Error
​
5
​
10
​
15

 

解析:

$x为15,但是输出的是x

 

 

实体集???

在关系数据模型中,实体集之间的联系表现为 __

选择第四个

 

只能一对一
​
只能一对多
​
只能多对多
​
一对一、一对多和多对多三种

 

解析:

???

 

sql不能为空的操作

SQL 中,下列涉及空值的操作,不正确的是( )

选择第三个

 

AGE IS NOT NULL
​
AGE IS NULL
​
AGE = NULL
​
NOT (AGE IS NULL)

 

解析:

不 = 空

 

性能分析关键字

SQL语句性能分析的关键字是什么?

选择第一个

 

EXPLAIN
​
LOAD
​
TOP
​
SUM

 

解析:

SQLLOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。SQLLOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。

TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。

SUM() 函数返回数值列的总数(总额)。SELECT SUM(column_name) FROM table_name

 

主键容易错误内容

这句话是错误的

创建索引一定能提升查询时间

 

sql约束

下列选项中,不属于SQL约束的是:

选择第四个

 

UNIQUE
​
PRIMARY KEY
​
FOREIGN KEY
​
BETWEEN

 

解析:

约束主要有一下几种:

NOT NULL : 用于控制字段的内容一定不能为空(NULL)。

UNIQUE : 控制字段内容不能重复,一个表允许有多个 Unique 约束。

PRIMARY KEY: 也是用于控制字段内容不能重复,但它在一个表只允许出现一个。

FOREIGN KEY: FOREIGN KEY 约束用于预防破坏表之间连接的动作,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

CHECK: 用于控制字段的值范围。

DEFAULT: 用于设置新记录的默认值。

 

远程登录协议问题

完成远程登录的TCP / IP协议是

选择第四个

 

  1. SMTP
  2. FTP
  3. SNMP
  4. TELNET

解析:

SMTP:简单邮件协议

FTP:文件传输协议,连接时使用Telnet协议

SNMP:简单网络管理协议

TELNET:Internet远程登录服务

 

break()函数

break可以用在( )语句中

选择全部

  1. switch
  2. for
  3. while
  4. do-while

解析:

break()函数是停止循环的意思。

 

 

str_replace函数(替换字符)

https://www.w3school.com.cn/php/func_string_str_replace.asp

把字符串 "Hello world!" 中的字符 "world" 替换为 "Shanghai":

<?php
echo str_replace("world","Shanghai","Hello world!");
?

 

array_search函数(搜索键值,返回键名)

如下代码输出为

选择第四个

<?php $array = array(1 => 'blue', 2 => 'red', 3 => 'green', 4 => 'red'); $key = array_search('green', $array); print $key; ?>

  1. TRUE
  2. FALSE
  3. 1
  4. 3

解析:

array_search(value,array,strict)

函数在数组中搜索某个键值,并返回对应的键名。设置第三参数为true的时候则会同时对比value的值与数据类型

 

str_split() 函数(字符串分割到数组中)

str_split(string,length);

参数 描述
string 必需。规定要分割的字符串。
length 可选。规定每个数组元素的长度。默认是 1。

 

把字符串 "Shanghai" 分割到数组中:

<?php
print_r(str_split("Shanghai"));
?>

输出结果:

Array ( [0] => S [1] => h [2] => a [3] => n [4] => g [5] => h [6] => a [7] => i )

 

字符串与数字相加

在PHP中字符串和数字是可以进行增加的,并且字符串会自动转换为数字的。

$str = '123' + 123;

var_dump($str);

 

 

PHP自定义函数关键字

function

 

PHP两种数值类型

浮点型float

整形integer

 

显示当前文件名

(下划线)FILE(下划线)

文件的完整路径和文件名。

 

复合数据类型

复合数据类型有两种:array(数组)和 object(对象)

特殊数据类型分为两种:resource(资源)和 null(空值)

 

feof函数(某文件的末尾)

用函数feof()来检测,到了函数尾会自动返回布尔值。可以根据这个布尔值来控制输入

 

数组指针函数

对于数组指针的控制PHP提供了以下几个内建函数:

current():取得目前指针位置的内容资料。

key():读取目前指针所指向资料的索引值(键值)。

next():将数组中的内部指针移动到下一个单元。

prev():将数组的内部指针倒回一位。

end():将数组的内部指针指向最后一个元素。

reset():将目前指针无条件移至第一个索引位置。

 

array_unshift 函数(在数组开头插入元素)

array_unshift 在数组开头插入一个或多个元素

array_push 入栈

 

查找数组中是否存在某个值

array_search — 在数组中搜索给定的值,如果成功则返回相应的键名

in_array — 检查数组中是否存在某个值

 

运算符“--”不可以对常量生效

常量不能修改值。

 

strrev函数(字符串翻转)

strrev可将字符进行翻转

 

sort()、assort()、和ksort()函数(数据排序问题)

sort():值升序,键重新索引

asort():值升序,键保留

ksort():键升序,

rsort():降序

 

 

cookie用法

$_COOKIE;//变量用于取回cookie的值 setcookie(name, value, expire, path, domain)函数用来设置(创建)cookie,必须在<html>标签前面 setcookie("user", "", time()-3600);//删除 cookie 时,应使过期日期变更为过去的时间点。

 

setcookie("A","2008"); setcookie("B","北京");

 

去除特殊符号函数

函数1用于去除字符串两端指定的任意特殊字符;

函数2用于去除字符串左端指定的任意特殊字符;

函数3用于去除字符串右端指定的任意特殊字符。

 

trim

ltrim

rtrim

 

访问类属性的方法

1.$this->方法名;

$this这个是我们tp中的用法

 

2.$a = new name();

$a->b();

 

数组函数arsort 的作用是_

语句 error_reporting(2047)的作用____

arsort:对数组进行逆向排序并保持索引关系

error_reporting(2047)的作用是:report All errors and warnings

 

局部和全局变量

选择第二个

$int=1;

function num(){

$int=$int+1;

echo “$int ”;

} num();

  1. · A.程序无输出
  2. · 1
  3. · 2
  4. · 以上都不对

 

Count函数问题

程序运行结果为( )

选择第四个

$n=array(array(10,23,11),array(13,23,21),array(11,3,5)); echo count($n,1);

A. 3

B. 6

C. 9

D. 12

 

 

PHP面向对象

https://www.runoob.com/php/php-oop.html

 

mysql习题

GLOBAL问题 ???

以下代码的输出是

选择第二个

$somevar=15; function addit () { GLOBAL $somevar; $somevar++ ; echo "somevar is $somevar"; } addit ();

  1. somevar is 15
  2. somevar is 16
  3. somevar is 1
  4. somevar is $ somevar

解析:

 

数据库中的事务是什么?

答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,

 

事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

 

使用 PHP 下载网络图片,有哪些方法?

1.file_get_contents

2.readfile读取内容

3.fopen系列函数

4.curl

 

opendir()函数??

php使用opendir()打开一个目录句柄,以便其他目录函数使用

 

instanceof函数??

使用instanceof关键字可以判断某个对象是否是某个类的实例。

 

数据库与文件系统问题??

数据库与文件系统的根本区别在于 __

选择第三个

 

提高了系统效率
​
方便了用户使用
​
数据的结构化
​
节省了存储空间

 

事务问题??

两个事务在加锁过程中相互等待,哪一个事务都不能继续执行下去,这种状态称为_

选择第四个

 

回滚
​
活锁
​
提交
​
死锁

 

解析:

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件1**)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。4)环路等待条件:**指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。 任何条件被破坏,死锁随之消亡。参考链接:https://baike.baidu.com/item/%E6%AD%BB%E9%94%81/2196938?fr=aladdin

 

数据库视图问题??

数据库中只存放视图的__

选择第三个

 

操作
​
对应的数据
​
定义
​
限制

 

解析:

 

mysql日志 ??

MYSQL实现主从复制的日志是哪种?

选择第三个

 

READ LOG
​
UNDO LOG
​
BINLOG
​
GENERAL LOG

 

解析:

mysql日志一般分为5种

错误日志:-log-err (记录启动,运行,停止mysql时出现的信息)

二进制日志:-log-bin (记录所有更改数据的语句,还用于复制,恢复数据库用)

查询日志:-log (记录建立的客户端连接和执行的语句)

慢查询日志: -log-slow-queries (记录所有执行超过long_query_time秒的所有查询)

更新日志: -log-update (二进制日志已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用)

 

 

层次模型

层次模型、网状模型和关系模型的划分原则是 __

选择第四个

 

记录长度
​
文件的大小
​
联系的复杂程度
​
数据之间的联系

 

解析:

层次模型:用树状<层次>结构来组织数据的数据模型

网状模型:用有向图表示实体和实体之间的联系的数据结构模型

关系模型:使用表格表示实体和实体之间关系的数据模型

 

 

数据库设计模式

数据库设计过程主要包括需求分析、概念结构设计、逻辑结构分析、数据库物理设计、数据库实施、数据库运行和维护阶段。

 

 

mysql数据管理

\1. MySQL是一种( )数据库管理系统。

 

A层次型

B.联盟链

C.关系型

D.对象型

 

正确答案:c

 

关系型,非关系型。

MariaDB数据库

 

 

sql注入问题

\2. Mysql sql注入中使用延时注入时常用的语句是

 

A wait for delay “0: 0: 10”

B sleep(5)

C benchmark(100000000, md5(1))

D union select

 

正确答案:Bc

 

Sleep数据库注入,在5秒内有响应,然后就可以进行注入

 

数据库连接

\3. mysql_query("set names 'gbk'");该行代码一般写在( )最合适

 

A创建结果集之后

B.创建结果集之前

C.选择数据库之前

D.连接数据库服务器之前

 

正确答案:B

 

数据库引擎

\4. 以下关于Mysql数据库引擎MyISAM的描述错误的是?

A支持行锁

B如果表主要是用于插入新记录和读出记录,那么选择MyIsam引擎能实现处理高效率

C 在执行查询语句(select)前,会自动给涉及的所有表加读锁,在执行更新搡作( UPDATE、 DELETE、INSERT等)前,会自动给涉及的表加写锁

D.不支持事务

 

正确答案:A

 

数据库类型

\5. MySQL属于关系型数据库,与之对应为非关系型数据库,可以细分为4种类型,其中MongoDB属于其中的1型数据库;

转存失败重新上传取消转存失败重新上传取消

 

 

权限级别

\6. 关于MySql的权限级别,下列描述正确的是( )

转存失败重新上传取消转存失败重新上传取消

 

tabel、Column、routine

 

数据库模型

7.下列数据模型中,数据独立性最高的是()关系数据模型

 

网状数据模型

关系数据模型

层次数据模型

非关系模型

 

 

GLOBAL**问题** ???

以下代码的输出是

选择第二个

$somevar=15;

function addit () {

GLOBAL $somevar;

$somevar++ ;

echo "somevar is $somevar";

}

addit ();

· somevar is 15

· somevar is 16

· somevar is 1

· somevar is $ somevar

超全局变量。

 

数据库中的事务是什么**?**

 

使用 PHP 下载网络图片,有哪些方法?

 

 

 

Curl**会话机制。**

 

 

opendir()**函数??**

 

 

instanceof**函数??**

 

 

数据库与文件系统问题??

数据库与文件系统的根本区别在于 __

选择第三个

提高了系统效率 ​ 方便了用户使用 ​ 数据的结构化 ​ 节省了存储空间

事务问题??

两个事务在加锁过程中相互等待,哪一个事务都不能继续执行下去,这种状态称为_

选择第四个

回滚 ​ 活锁 ​ 提交 ​ 死锁

解析:

 

 

数据库视图问题??

数据库中只存放视图的__

选择第三个

操作 ​ 对应的数据 ​ 定义 ​ 限制

mysql**日志** ??

MYSQL实现主从复制的日志是哪种?

READ LOG ​ UNDO LOG ​ BINLOG ​ GENERAL LOG

层次模型

层次模型、网状模型和关系模型的划分原则是 __

选择第四个

记录长度 ​ 文件的大小 ​ 联系的复杂程度 ​ 数据之间的联系

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1 数据关系

在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可在多个科室治疗。则实体医生和患者之间的联系是( )。

 

多对多

多对一

一对多

一对一

 

选择第一个;

 

 

1.2 发生死锁的原理

数据库以及线程发生死锁的原理是什么?

 

资源分配不当

进程运行推进的顺序不合适

系统资源不足

进程过多

 

选择第一、第二、第三个。

 

 

四个必要的条件,相互排斥,请求,强行占用,循环等待条件。

 

避免出现死;

 

 

1.3 数据独立

要保证数据库物理数据独立性,需要修改的是(  )。

 

模式

模式/内模式映射

模式/外模式映射

内模式

 

选择第二个;

 

 

1.4 E-R

在数据库设计中,符E-R图转换成关系数据模型的过程属于()

 

需求分析阶段

概念设计阶段

逻辑设计阶段

物理设计阶段

 

选择第三个;

 

 

1.5 2nf问题

消除了传递函数依赖的2NF的关系模式,必定是

 

1NF

2NF

3NF

BCNF

 

选择第三个

 

1.6 数据库优化问题

 

数据的类型。

 

 

sql语句分类

  1. DDL:数据定义语言(create drop)

  2. DML:数据操作语句(insert update delete)

  3. DQL:数据查询语句(select )

  4. DCL:数据控制语句,进行授权和权限回收(grant revoke)

  5. TPL:数据事务语句(commit collback savapoint)

 

存储过程

 

我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

优点:

(1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

(3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。

(5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

 

联合索引是什么**?为什么需要注意联合索引中的顺序?**

MySQL可以使用多个字段同时建立一个索引,叫做联合索引.在联合索引中,如果想要命中索引,需要按照建立索引时的字段顺序挨个使用,否则无法命中索引.

具体原因为:

MySQL使用索引时需要索引有序,假设现在建立了"name,age,school"的联合索引,那么索引的排序为: 先按照name排序,如果name相同,则按照age排序,如果age的值也相等,则按照school进行排序.

当进行查询时,此时索引仅仅按照name严格有序,因此必须首先使用name字段进行等值查询,之后对于匹配到的列而言,其按照age字段严格有序,此时可以使用age字段用做索引查找,,,以此类推.因此在建立联合索引的时候应该注意索引列的顺序,一般情况下,将查询需求频繁或者字段选择性高的列放在前面.此外可以根据特例的查询或者表结构进行单独的调整.

 

事务的隔离级别,mysql默认的隔离级别是什么?

读未提交(Read uncommitted),一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证。

读已提交(Read committed),一个事务要等另一个事务提交后才能读取数据,可避免脏读的发生。

可重复读(Repeatable read),就是在开始读取数据(事务开启)时,不再允许修改操作,可避免脏读、不可重复读的发生。

串行(Serializable),是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

 

 

delete、drop、truncate区别

 

truncate 和 delete只删除数据,不删除表结构 ,drop删除表结构,并且释放所占的空间。 删除数据的速度,drop> truncate > delete

delete属于DML语言,需要事务管理,commit之后才能生效。drop和truncate属于DDL语言,操作立刻生效,不可回滚。

使用场合: 当你不再需要该表时, 用 drop; 当你仍要保留该表,但要删除所有记录时, 用 truncate; 当你要删除部分记录时(always with a where clause), 用 delete.

 

存储过程与触发器的区别

 

答:触发器与存储过程非常相似,触发器也是SQL语句集,两者唯一的区别是触发器不能用EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发(激活)执行。触发器是在一个修改了指定表中的数据时执行的存储过程。通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以确保数据的完整性。触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。

 

什么情况下应不建或少建索引

1、表记录太少

2、经常插入、删除、修改的表

3、数据重复且分布平均的表字段,假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。

4、经常和主字段一块查询但主字段索引值比较多的表字段

 

行级锁定的优点:

1、当在许多线程中访问不同的行时只存在少量锁定冲突。

2、回滚时只有少量的更改

3、可以长时间锁定单一的行。

 

行级锁定的缺点:

  1. 比页级或表级锁定占用更多的内存。

  2. 当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁。

  3. 如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多。

  4. 用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定。

 

MySQL优化

 

开启查询缓存,优化查询

explain你的select查询,这可以帮你分析你的查询语句或是表结构的性能瓶颈。EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序的

当只要一行数据时使用limit 1,MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据

为搜索字段建索引

使用 ENUM 而不是 VARCHAR。如果你有一个字段,比如“性别”,“国家”,“民族”,“状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是VARCHAR

Prepared StatementsPrepared Statements很像存储过程,是一种运行在后台的SQL语句集合,我们可以从使用 prepared statements 获得很多好处,无论是性能问题还是安全问题。

Prepared Statements 可以检查一些你绑定好的变量,这样可以保护你的程序不会受到“SQL注入式”攻击

垂直分表

选择正确的存储引擎

 

key和index的区别

key 是数据库的物理结构,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key, unique key, foreign key 等

index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等;

 

 

 

 

MySQL是一种( )数据库管理系统。

 

A层次型

B.联盟链

C.关系型

D.对象型

 

正确答案:c

 

 

 

Mysql sql注入中使用延时注入时常用的语句是

 

A wait for delay “0: 0: 10”

B sleep(5)

C benchmark(100000000, md5(1))

D union select

 

正确答案:Bc

 

 

mysql_query("set names 'gbk'");该行代码一般写在( )最合适

 

A创建结果集之后

B.创建结果集之前

C.选择数据库之前

D.连接数据库服务器之前

 

正确答案:B

 

 

以下关于Mysql数据库引擎MyISAM的描述错误的是?

 

 

A支持行锁

B如果表主要是用于插入新记录和读出记录,那么选择MyIsam引擎能实现处理高效率

C 在执行查询语句(select)前,会自动给涉及的所有表加读锁,在执行更新搡作( UPDATE、 DELETE、INSERT等)前,会自动给涉及的表加写锁

D.不支持事务

 

正确答案:A

 

 

 

MySQL属于关系型数据库,与之对应为非关系型数据库,可以细分为4种类型,其中MongoDB属于其中的1型数据库;

转存失败重新上传取消转存失败重新上传取消

 

 

关于MySql的权限级别,下列描述正确的是( )

转存失败重新上传取消转存失败重新上传取消

 

下列数据模型中,数据独立性最高的是()

 

 

网状数据模型

关系数据模型

层次数据模型

非关系模型

 

 

游标是什么?

是对查询出来的结果集作为一个单元来有效的处理,游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行,可以对结果集当前行做修改, 一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要

 

 

 

 

readis 和 mysql 的区别

readis 是内存数据库,数据保存在内存中,速度快。 mysql 是关系型数据库,持久化存储,存放在磁盘里面,功能强 大。检索的话,会涉及到一定的 IO,数据访问也就慢。

 

 

 

redis 受攻击怎么办?

主从 持久化存储 Redis 不以 root 账户启动 设置复杂密码 不允许 key 方式登录

 

 

 

profile的意义以及使用场景;

查询到 SQL 会执行多少时间, 并看出 CPU/Memory 使用量, 执行过程中 Systemlock, Table lock 花多少时间等等

 

 

如何加强MySQL安全,请给出可行的具体措施?

 

 

 

 

 

字符集和校验规则

字符集是一套符合和编码,校验规则(collation)是在字符集内用于比较字符的一套规则,即字符集的排序规则。MySQL可以使用对种字符集和检验规则来组织字符。

MySQL服务器可以支持多种字符集,在同一台服务器,同一个数据库,甚至同一个表的不同字段都可以指定使用不同的字符集,相比oracle等其他数据库管理系统,在同一个数据库只能使用相同的字符集,MySQL明显存在更大的灵活性。

每种字符集都可能有多种校对规则,并且都有一个默认的校对规则,并且每个校对规则只是针对某个字符集,和其他的字符集么有关系。

在MySQL中,字符集的概念和编码方案被看做是同义词,一个字符集是一个转换表和一个编码方案的组合。

Unicode(Universal Code)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode存在不同的编码方案,包括Utf-8,Utf-16和Utf-32。Utf表示Unicode Transformation Format。

 

 

了解XSS攻击吗?如何防止?

XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。 使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。

 

 

 

MySQL中控制内存分配的全局参数,有哪些?

  1. Keybuffersize: > * keybuffersize指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Keyreadrequests和Keyreads,可以知道keybuffersize设置是否合理。比例keyreads /keyreadrequests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘keyread%'获得)。 > * keybuffersize只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值createdtmpdisktables得知详情。对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M) > * keybuffersize设置注意事项 >>>1. 单个keybuffer的大小不能超过4G,如果设置超过4G,就有可能遇到下面3个bug: >>>>> http://bugs.mysql.com/bug.php?id=29446 >>>>> http://bugs.mysql.com/bug.php?id=29419 >>>>> http://bugs.mysql.com/bug.php?id=5731 >>>2. 建议keybuffer设置为物理内存的1/4(针对MyISAM引擎),甚至是物理内存的30%~40%,如果keybuffersize设置太大,系统就会频繁的换页,降低系统性能。因为MySQL使用操作系统的缓存来缓存数据,所以我们得为系统留够足够的内存;在很多情况下数据要比索引大得多。 >>>3. 如果机器性能优越,可以设置多个keybuffer,分别让不同的keybuffer来缓存专门的索引

  2. innodbbufferpool_size > 表示缓冲池字节大小,InnoDB缓存表和索引数据的内存区域。mysql默认的值是128M。最大值与你的CPU体系结构有关,在32位操作系统,最大值是 4294967295 (2^32-1) ,在64 位操作系统,最大值为18446744073709551615 (2^64-1)。 > 在32位操作系统中,CPU和操作系统实用的最大大小低于设置的最大值。如果设定的缓冲池的大小大于1G,设置innodbbufferpoolinstances的值大于1. > * 数据读写在内存中非常快, innodbbufferpoolsize 减少了对磁盘的读写。 当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中。然而内存还有操作系统或数据库其他进程使用, 一般设置 buffer pool 大小为总内存的 3/4 至 4/5。 若设置不当, 内存使用可能浪费或者使用过多。 对于繁忙的服务器, buffer pool 将划分为多个实例以提高系统并发性, 减少线程间读写缓存的争用。buffer pool 的大小首先受 innodbbufferpool_instances 影响, 当然影响较小。

  3. querycachesize > 当mysql接收到一条select类型的query时,mysql会对这条query进行hash计算而得到一个hash值,然后通过该hash值到query cache中去匹配,如果没有匹配中,则将这个hash值存放在一个hash链表中,同时将query的结果集存放进cache中,存放hash值的链表的每一个hash节点存放了相应query结果集在cache中的地址,以及该query所涉及到的一些table的相关信息;如果通过hash值匹配到了一样的query,则直接将cache中相应的query结果集返回给客户端。如果mysql任何一个表中的任何一条数据发生了变化,便会通知query cache需要与该table相关的query的cache全部失效,并释放占用的内存地址。 > query cache优缺点 >> 1. query语句的hash计算和hash查找带来的资源消耗。mysql会对每条接收到的select类型的query进行hash计算然后查找该query的cache是否存在,虽然hash计算和查找的效率已经足够高了,一条query所带来的消耗可以忽略,但一旦涉及到高并发,有成千上万条query时,hash计算和查找所带来的开销就的重视了; >> 2. query cache的失效问题。如果表变更比较频繁,则会造成query cache的失效率非常高。表变更不仅仅指表中的数据发生变化,还包括结构或者索引的任何变化; >> 3. 对于不同sql但同一结果集的query都会被缓存,这样便会造成内存资源的过渡消耗。sql的字符大小写、空格或者注释的不同,缓存都是认为是不同的sql(因为他们的hash值会不同); >> 4. 相关参数设置不合理会造成大量内存碎片,相关的参数设置会稍后介绍。

  4. readbuffersize >是MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。readbuffersize变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。

 

 

MySQL的复制原理以及流程

 

基本原理流程,3个线程以及之间的关联;

\1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;

\2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;

\3. 从:sql执行线程——执行relay log中的语句;

 

 

MySQL binlog的几种日志录入格式以及区别

 

(1)、binlog的日志格式的种类和分别 (2)、适用场景; (3)、结合第一个问题,每一种日志格式在复制中的优劣。 Statement:每一条会修改数据的sql都会记录在binlog中。 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。(相比row能节约多少性能 与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条 件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所 产生的日志量会增加多少,以及带来的IO性能问题。) 缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的 一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id(),以及user-defined functions(udf)会出现问题). 使用以下函数的语句也无法被复制: * LOAD_FILE() * UUID() * USER() * FOUND_ROWS() * SYSDATE() (除非启动时启用了 --sysdate-is-now 选项) 同时在INSERT ...SELECT 会产生比 RBR 更多的行级锁 2.Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。 优点: binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下 每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题 缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比 如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行alter table之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。 3.Mixedlevel: 是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则 采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择 一种.新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的 变更。

 

 

mysql约束

https://blog.csdn.net/w_linux/article/details/79655073

表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效

也就是给我们的表增加来了几个的条件。如不能为空,不能有重复的字段,等等

约束的几种类型。

  • 非空约束(not null)

  • 唯一性约束(unique)

  • 主键约束(primary key) PK

  • 外键约束(foreign key) FK

  • 检查约束(目前MySQL不支持、Oracle支持)

 

1.非空约束

我们的字段的值不能为空,如果为空就会进行报错。如何设置。创建字段后面跟not null即可。

2.唯一约束

唯一约束就为,数据库中只能有一个的相同的数据,就比如id只能有一条的相同。使用方法,创建字段的后面跟一个unique即可。

3.主键约束

表内要有主键也就是id。

4.外键索引

主键关联的外键。两个表的id和pid的关系。

 

 

curl会话机制

https://www.php.cn/php-weizijiaocheng-403656.html

我们的前端有接口可进行数据的交互,前端与后台的数据交互。

那么我们的后台也要有数据的交互,我们可以利用curl来将我们的数据进行交互。

 

参数讲解:

curl_init() ---- 开启会话

CURLOPT_URL ----- 传入链接

CURLOPT_SSL_VERIFYPEER ------ sll验证

CURLOPT_HTTPHEADER ---- 请求的格式

curl_exec() -----数据传入浏览器

curl_close() -----关闭会话,清空数据

 

json_decode( ) ------ json 转 对象/数组;;当第二个参数为true返回 array ,默认是false返回object。

 

json_encode( ) ------- 对象/数组 转 json;;成功返回 json 编码的 string ,失败返回 false 。

 

form-urlencode() ----- 提交的数据进行urlencode;默认情况下,我们所有的表单提交都是通过这种默认的方式实现的。

百度百科:https://baike.baidu.com/item/urlencode/8317412?fr=aladdin

函数讲解https://blog.csdn.net/lijinxiaoking/article/details/96030206

其实两者相辅相成,作用刚好相反

urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%。

urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符

 

序列化

序列化就是把本来不能直接存储的数据转换成可存储的数据,并且不会丢掉数据格式

我们可以根据前端利用jq来给我们的后台进行传输数据,ajax传输使用序列化的函数。

正序列化函数

serialize

反序列化函数

unserialize

 

数组排序

sort() 方法以字母顺序对数组进行排序:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // 对 fruits 中的元素进行序

 

reverse() 方法反转数组中的元素。

您可以使用它以降序对数组进行排序:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // 对 fruits 中的元素进行排序
fruits.reverse();         // 反转元素顺序

 

 

php的数组排序

  • sort() - 以升序对数组排序

  • rsort() - 以降序对数组排序

  • asort() - 根据值,以升序对关联数组进行排序

  • ksort() - 根据键,以升序对关联数组进行排序

  • arsort() - 根据值,以降序对关联数组进行排序

  • krsort() - 根据键,以降序对关联数组进行排序

 

 

共享的测试接口

获取手机信息:

https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=手机号

获取淘宝信息

http://suggest.taobao.com/sug?code=utf-8&q=商品关键字&callback=cb

有道翻译

http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=翻译内容

天气接口

http://www.weather.com.cn/data/sk/101050307.html


转载:https://blog.csdn.net/weixin_44944193/article/details/105390946
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场