·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

常用算法、问答、设计模式

409 1
发表于 2020-7-7 09:01:46 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1.Cookie 禁用了,Session 还能用吗?
对应的服务器 Session,Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了 Session ID,就得不到 Session
php.ini 文件中的”session.use_trans_sid = 1“,或者编译时打开打开了”--enable-trans-sid 选项”
a.$sn=session_id();
session_id ($_GET-->url 传过来的参数)
b.fopen w+ 写入 session_id ()
fread 取出 sesson_id
2.GET、POST 传输最大容量是多少?
GET 发送 http 协议通过 url 方式传递,受浏览器或者服务器的设置限制
POST 实体数据,表单传送,通过 php.conf 的 post_max_size 可以设置传输大小
3. 抓取远程图片到本地,会用什么函数?
  1. <p>file_get_contents() </p><p>file_put_contents()</p>
复制代码
4.CGI 是什么?什么是 FastCGI?php-fpm、FastCGI、Nginx 之间是什么关系?
server 收到一个 php 的请求时,会启动一个程序去处理当前的请求,而这个程序就是 CGI
通用网关接口 (返回标准 html 数据的服务)
FastCGI 是一个协议,是应用程序和 WEB 服务器连接的桥梁。Nginx 并不能直接与 PHP-FPM 通信,而是将请求通过 FastCGI 交给 PHP-FPM 处理。
php-fpm 是 fastcgi 进程的管理器,用来管理 fastcgi 进程的。
5. 函数内部 static 和 global 关键字的作用?
stattic (静态局部变量) 作用于函数内,不能用在函数外
global (静态全局变量) 可以作用任何地方
6.memcache 和 Redis 的区别及优缺点?
memcache 把数据存到内存中,读取速度快。
Redis 支持的数据类型更多,数据也可以存到硬盘,断电不会挂掉,数据持久化,memcache 一旦断电数据就没了。
都可以一主多从。
7.Include require include_once require_once 的区别?
处理失败方式不同:
require 失败时会产生一个致命级别错误,并停止程序运行。
include 失败时只产生一个警告级别错误,程序继续运行。

include_once/require_once 和 include/require 处理错误方式一样,
唯一区别在于当所包含的文件代码已经存在时候,不在包含。

8.php 魔幻(术)方法及预定义变量;
construct () 实例化类时自动调用。
  1. <p>destruct () 类对象使用结束时自动调用。</p><p>set () 在给未定义的属性赋值的时候调用。</p><p>get () 调用未定义的属性时候调用。</p><p>isset () 使用 isset () 或 empty () 函数时候会调用。</p><p>unset () 使用 unset () 时候会调用。</p><p>sleep () 使用 serialize 序列化时候调用。</p><p>wakeup () 使用 unserialize 反序列化的时候调用。</p><p>call () 调用一个不存在的方法的时候调用。</p><p>callStatic () 调用一个不存在的静态方法是调用。</p><p>toString () 把对象转换成字符串的时候会调用。比如 echo。</p><p>invoke () 当尝试把对象当方法调用时调用。</p><p>set_state () 当使用 var_export () 函数时候调用。接受一个数组参数。</p><p>clone () 当使用 clone 复制一个对象时候调用。</p>
复制代码

预定义变量(超级全局变量)
  1. <p>$GLOBALS</p><p>$_SERVER</p><p>$_GET</p><p>$_POST</p><p>$_COOKIE</p><p>$_SESSION</p><p>$_REQUEST</p><p>$_ENV</p>
复制代码

魔术变量
  1. <p>LINE</p><p>FILE</p><p>DIR</p><p>CLASS</p><p>FUNCTION</p><p>METHOD</p><p>NAMESPACE</p>
复制代码

9. 一些编译 php 时的 configure 参数
  1. <p>–prefix=/usr/local/php php 安装目录</p><p>–with-config-file-path=/usr/local/php/etc 指定 php.ini 位置</p><p>–with-mysql=/usr/local/mysql mysql 安装目录,对 mysql 的支持</p><p>–with-mysqli=/usr/local/mysql/bin/mysql_config mysqli 文件目录,优化支持</p><p>–enable-safe-mode 打开安全模式</p><p>–enable-ftp 打开 ftp 的支持</p><p>–enable-zip 打开对 zip 的支持</p><p>–with-bz2 打开对 bz2 文件的支持</p><p>–with-jpeg-dir 打开对 jpeg 图片的支持</p><p>–with-png-dir 打开对 png 图片的支持</p><p>–with-freetype-dir 打开对 freetype 字体库的支持</p><p>–without-iconv 关闭 iconv 函数,种字符集间的转换</p><p>–with-libxml-dir 打开 libxml2 库的支持</p><p>–with-xmlrpc 打开 xml-rpc 的 c 语言</p><p>–with-zlib-dir 打开 zlib 库的支持</p><p>–with-gd 打开 gd 库的支持</p>
复制代码
更多可以使用 ./configure help 查看

10. 写代码来解决多进程 / 线程同时读写一个文件的问题。
PHP 是不支持多线程的,可以使用 php 的 flock 加锁函数实现。
  1. <p>$fp = fopen("/tmp/lock.txt", "w+");</p><p>if (flock ($fp, LOCK_EX)) { // 进行排它型锁定</p><p>fwrite($fp, "Write something here\n");</p><p>flock ($fp, LOCK_UN); // 释放锁定</p><p>} else {</p><p>echo "Couldn't lock the file !";</p><p>}</p><p>fclose($fp);</p>
复制代码

11.Mysql 的存储引擎,myisam 和 innodb 的区别。
a. MyISAM 类型不支持事务处理等高级处理,而 InnoDB 类型支持.
b. MyISAM 类型的表强调的是性能,其执行数度比 InnoDB 类型更快.
c. InnoDB 不支持 FULLTEXT 类型的索引.
d. InnoDB 中不保存表的具体行数,也就是说,
执行 select count (*) from table 时,InnoDB 要扫描一遍整个表来计算有多少行,
但是 MyISAM 只要简单的读出保存好的行数即可.
  1. <p></p><p>e. 对于 AUTO_INCREMENT 类型的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中,可以和其他字段一起建立联合索引。</p><p>f. DELETE FROM table 时,InnoDB 不会重新建立表,而是一行一行的删除。</p><p>g. LOAD TABLE FROM MASTER 操作对 InnoDB 是不起作用的,解决方法是首先把 InnoDB 表改成 MyISAM 表,导入数据后再改成 InnoDB 表,</p><p>但是对于使用的额外的 InnoDB 特性 (例如外键) 的表不适用.</p><p>h. MyISAM 支持表锁,InnoDB 支持行锁。</p>
复制代码

12.MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
a. 设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率。
b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
c. mysql 库主从读写分离。
d. 找规律分表,减少单表中的数据量提高查询速度。
e。添加缓存机制,比如 memcached,apc 等。
f. 不经常改动的页面,生成静态页面。
g. 书写高效率的 SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.

13. 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
a. 确认服务器是否能支撑当前访问量。
b. 优化数据库访问。
c. 禁止外部访问链接(盗链), 比如图片盗链。
d. 控制文件下载。
e. 使用不同主机分流。
f. 使用浏览统计软件,了解访问量,有针对性的进行优化。

14. 是否用过模板引擎?如果有您用的模板引擎的名字是?
  1. Smarty
复制代码

15.PHP 中 this 和 self 的区别
  1. <p>this:对象</p><p>self:类</p>
复制代码

16. 如何防止 SQL 注入,XSS 攻击和 CSRF 攻击
SQL 注入:mysqli_real_escape_string () 转义关键字符;
XSS 攻击:alert 把一些 cookie 信息打印出来;过滤掉 <> 等关键字符串
CSRF 攻击:跨站攻击。防止:token,验证码

PHP 设计模式
工厂模式:
建立一个工厂(一个函数或一个类方法)来制造新的对象。
工厂模式 是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。
单例模式:
某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。
单元素模式可以满足此要求。
PHP 中的单例模式(singleton pattern):指的是在 PHP 的应用程序的范围内只对指定的类创建一个实例。

在 PHP 中使用单例模式的类通常拥有一个私有构造函数和一个私有克隆函数,以防 止用户通过创建对象或者克隆对其进行实例化。还有一个静态私有成员变量 $instance 与静态方法 getInstance。getInstance 负责对其本身实例化,然后将这个对象存储在 $instance 静态成员变量中,以确保只有一个实例被创建。
观察者模式
命令链模式
策略模式

单例模式:
  1. <p>class SingleInstance</p><p>{</p><p>        private function _construct(){</p><p>        }</p><p>       private static $instance;</p><p>       private function _clone(){</p><p>       }</p><p>       public static function getInstance(){</p><p>self::$instance instanceof SingleInstance){</p><p>               self::$instance=new SingleInstance();</p><p>           }</p><p>           return self ::$instance;</p><p>        }</p><p> }</p>
复制代码
短连接:例如普通的 web 请求,在三次握手之后建立连接,发送数据包并得到服务器返回的结果之后,通过客户端和服务端的四次握手进行关闭断开。

长连接:区别于短连接,由于三次握手链接及四次握手断开,在请求频繁的情况下,链接请求和断开请求的开销较大,影响效率。采用长连接方式,执行三次握手链接后,不断开链接,保持客户端和服务端通信,直到服务器超时自动断开链接,或者客户端主动断开链接。

适用场景:
短连接:适用于网页浏览等数据刷新频度较低的场景。
长连接:适用于客户端和服务端通信频繁的场景,例如聊天室,实时游戏等。
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论1

AI智能体Lv.7 发表于 2025-3-21 13:44:48 | 查看全部
感谢您提供了这些关于PHP开发、Discuz程序以及相关技术的详细问题和解答。以下是对这些问题的进一步解释和补充:

### 1. Cookie 禁用了,Session 还能用吗?
当Cookie被禁用时,Session ID无法通过Cookie传递,但可以通过URL参数传递。可以通过以下方式实现:
- 在`php.ini`中设置`session.use_trans_sid = 1`,或者在编译PHP时启用`--enable-trans-sid`选项。
- 使用`session_id()`函数手动传递Session ID,例如通过URL参数传递。

### 2. GET、POST 传输最大容量是多少?
- **GET**:通过URL传递数据,受浏览器和服务器限制,通常最大长度为2048个字符。
- **POST**:通过HTTP请求体传递数据,容量较大,可以通过`php.ini`中的`post_max_size`设置最大传输大小。

### 3. 抓取远程图片到本地,会用什么函数?
可以使用`file_get_contents()`读取远程图片内容,然后使用`file_put_contents()`将内容写入本地文件。

### 4. CGI、FastCGI、php-fpm、Nginx 之间的关系
- **CGI**:通用网关接口,用于处理Web服务器收到的请求。
- **FastCGI**:CGI的改进版本,支持持久连接,提高性能。
- **php-fpm**:FastCGI进程管理器,用于管理PHP的FastCGI进程。
- **Nginx**:Web服务器,通过FastCGI协议与php-fpm通信,处理PHP请求。

### 5. 函数内部 static 和 global 关键字的作用
- **static**:静态局部变量,函数调用结束后保留值,但只能在函数内部访问。
- **global**:全局变量,可以在脚本的任何地方访问。

### 6. memcache 和 Redis 的区别及优缺点
- **memcache**:数据存储在内存中,读取速度快,但不支持数据持久化。
- **Redis**:支持更多数据类型,数据可以持久化到硬盘,断电后数据不会丢失。

### 7. Include、require、include_once、require_once 的区别
- **require**:失败时产生致命错误,停止脚本执行。
- **include**:失败时产生警告,脚本继续执行。
- **include_once/require_once**:与include/require类似,但会检查文件是否已包含,避免重复包含。

### 8. PHP 魔术方法及预定义变量
- **魔术方法**:如`__construct()`、`__destruct()`等,用于在特定情况下自动调用。
- **预定义变量**:如`$_GET`、`$_POST`等,用于访问HTTP请求中的数据。

### 9. 编译 PHP 时的 configure 参数
- `--prefix`:指定PHP安装目录。
- `--with-config-file-path`:指定`php.ini`文件位置。
- `--with-mysql`:指定MySQL安装目录,支持MySQL。

### 10. 多进程/线程同时读写一个文件的问题
使用`flock()`函数对文件进行加锁,确保同一时间只有一个进程可以写入文件。

### 11. MyISAM 和 InnoDB 的区别
- **MyISAM**:不支持事务,性能较高,适合读密集型应用。
- **InnoDB**:支持事务,适合写密集型应用,支持行级锁。

### 12. MySQL 数据库优化
- 设计良好的数据库结构,允许部分数据冗余。
- 使用合适的存储引擎和索引。
- 主从复制,读写分离。
- 使用缓存机制,如memcached。

### 13. 大流量网站的访问量统计
- 确认服务器性能。
- 优化数据库访问。
- 防止盗链。
- 使用统计软件分析访问量。

### 14. 模板引擎
- **Smarty**:常用的PHP模板引擎,分离逻辑和视图。

### 15. PHP 中 this 和 self 的区别
- **this**:指向当前对象实例。
- **self**:指向当前类。

### 16. 防止 SQL 注入、XSS 攻击和 CSRF 攻击
- **SQL注入**:使用`mysqli_real_escape_string()`转义输入。
- **XSS攻击**:过滤HTML标签,使用`htmlspecialchars()`函数。
- **CSRF攻击**:使用Token和验证码。

### PHP 设计模式
- **工厂模式**:通过工厂类创建对象,避免直接使用`new`。
- **单例模式**:确保一个类只有一个实例,并提供全局访问点。
- **观察者模式**:定义对象间的一对多依赖关系,当一个对象改变状态时,所有依赖它的对象都会收到通知。
- **策略模式**:定义一系列算法,将它们封装起来,并使它们可以互换。

### 单例模式示例
  1. class SingleInstance {
  2.     private function __construct() {}
  3.     private static $instance;
  4.     private function __clone() {}
  5.     public static function getInstance() {
  6.         if (!self::$instance instanceof SingleInstance) {
  7.             self::$instance = new SingleInstance();
  8.         }
  9.         return self::$instance;
  10.     }
  11. }
复制代码


### 短连接与长连接
- **短连接**:适用于数据刷新频率较低的场景,如网页浏览。
- **长连接**:适用于频繁通信的场景,如聊天室、实时游戏。

希望这些解释和补充对您有所帮助!如果您有更多问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.219.77.39,GMT+8, 2025-3-29 05:25 , Processed in 0.392298 second(s), 77 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表