热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle每日一题系列合集

数据库知

作者 | JiekeXu

来源 | JiekeXu之路(ID: JiekeXu_IT)

转载请联系授权 | (微信ID:xxq1426321293)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天分享收藏已久的 Oracle 每日一题系列合集本文首发于微信公众号【JiekeXu之路】,欢迎点击上方蓝字关注我吧!

在墨天轮平台有个[数据库每日一题]栏目,均是由各行各业的各位专家亲自出题,墨天轮审核后发布的一系列数据库知识点集合,本次只是收集了 20 天的题目以及给出了尽可能详细的答案解析,以供大家多次阅读。

1. 在 Oracle 中,下面哪个命令可以修改用户的默认密码有效期为无限制?(单选)

A. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90;

B. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 999;

C. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

D. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 180;

答案:C

解析:

【答案解析】ORACLE 修改默认密码有效期 180 天为无限制

1、查看用户的 proifle 是哪个,一般是 default:

sql>SELECT username,PROFILE FROM dba_users;

2、查看指定概要文件(如 default)的密码有效期设置:

sql>SELECT * FROM dba_profiles s WHERE s.profile=‘DEFAULT’ AND resource_name=‘PASSWORD_LIFE_TIME’;

3、将密码有效期由默认的 180 天修改成“无限制”:

sql>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

修改之后不需要重启动数据库,会立即生效。

4、修改后,还没有被提示 ORA-28002 警告的帐户不会再碰到同样的提示;

已经被提示的帐户必须再改一次密码,举例如下:

$sqlplus as sysdba

sql> alter user 用户名 identified by <原来的密码> ----不用换新密码

oracle11g 启动参数 resource_limit 无论设置为 false 还是 true,密码有效期都是生效的,所以必须通过以上方式进行修改。以上的帐户名请根据实际使用的帐户名更改。

2. 关于数据库处于 ARCHIVELOG 模式下的说法正确的是?(单选)

A. Fast Recovery Area

B. 在切换到 ARCHIVELOG 模式之前执行的所有备份都可以用于执行完全恢复。

C.在数据库开启时可以进行全备。

D. 在将数据库置于 ARCHIVELOG 模式之前,必须对联机重做日志文件进行多路复用。

答案:C

解析:归档模式下可进行全库的热备。没有归档的全库备份无法用来进行完全恢复,因为缺少日志。

3.默认情况下,AWR 的快照会定期删除,因此导致无法比较一个很长区间的活动(比如今年的年末和去年的年末)。如下那种是实现这一目标的最佳方法?(单选)

A.设置参数 STATISTICS_LEVEL 为 AL L以禁止快照删除

B.保存年末快照为基线

C.设置 SYSAUX 表空间的数据文件 AUTOEXTEND 打开,因此快照不会被清除

D.调整快照保持区间为比一年稍多

答案:B

解析:快照超过设置的 retention(wrm$_wr_control.retention)区间就会被清理。

调大快照保留区间足够大虽然可以避免历史快照被清理,但对本案例并不是最优的方法。

baseline 是一段特定时间内的 snapshot 的集合,当异常发生时,使用异常时间段的snapshot 和 baseline 进行对比。baseline 中的 snapshot不受 AWR retention 的限制。

因此通过将关注的快照区间设置为基线并设置合适的过期时间(DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE 的 expiration 参数),就可以确保这些快照不会被删除。

SYSAUX 用于存储快照数据,但是保留时间和空间无关。

STATISTICS_LEVEL 控制采集数据的详细程度,和保留多长时间无关。

4. 下述哪个内存组件在实例启动后无法动态伸缩?(单选)

A.database buffer cache

B.Jave pool

C.stream pool

D.log buffer

答案:D

解析:log buffer 是在实例启动时固定分配的,其他组件均为可伸缩组件。

5. 关于自连接那两个说法是正确的?(多选)

A.它可以是左外连接

B.它必须是一个全外连接

C.关联列必须有索引

D.它可以是一个内连接

答案:AD

解析:相同表的关联可以是左外连接可以是内连接,没有必须是哪种连接方法。

6. 以下关于 ORACLE 缓冲池的描述,正确的是?(多选)

A.Recycle Pool 用于存储临时使用的、不被经常使用的较大的对象,避免导致默认池和保持池中的块老化而退出缓存。

B. DEFAULT Pool 采用 LRU 管理,更热的对象频繁访问时,原有 LRU 冷端的对象可能被 age out。

C.Recycle Pool 是为了让内存中的数据尽快被回收,设立的池

D.Keep Pool 中并不是热点表一直能够缓存,当 keep pool 不够的时候,最先缓存到 keep pool 的对象会被挤出

答案:ABD

解析:Keep Buffer Pool 的作用是缓存那些需要经常查询的对象但又容易被默认缓冲区置换出去的对象,按惯例,Keep pool 设置为合理的大小,以使其中存储的对象不再age out,也就是查询这个对象的操作不会引起磁盘IO操作,可以极大地提高查询性能。

并不是我们设置了 keep pool 之后,热点表就一定能够缓存在 keep pool ,keep pool 同样也是由 LRU 链表管理的,当 keep pool 不够的时候,最先缓存到 keep pool 的对象会被挤出,不过与 default pool 中的 LRU 的管理方式不同,在 keep pool 中表永远是从 MRU 移动到 LRU,不会由于你做了 F TS 而将表缓存到 LRU 端,在 keep pool 中对象永远是先进先出。

Recycle Buffer Pool 正好相反。Recycle Buffer Pool 用于存储临时使用的、不被经常使用的较大的对象,这些对象放置在 Default Buffer Pool 显然是不合适的,这些块会导致过量的缓冲区刷新输出,而且不会带来任何好处,因为等你想要再用这个块时,它可已经老化退出了缓存。要把这些段与默认池和保持池中的段分开,这样就不会导致默认池和保持池中的块老化而退出缓存。

7. 以下哪个参数可以控制笛卡尔积访问方式?(多选)

A._optimizer_index_cost_adj

B._optimizer_mjc_enabled

C._optimizer_cartesian_enabled

D._b_tree_bitmap_plans

答案:BC

解析:_optimizer_cartesian_enabled:控制是否允许笛卡尔积访问;

_optimizer_mjc_enabled:控制是否允许 merge join 笛卡尔积访问;

_b_tree_bitmap_plans:–控制位图索引转化;

optimizer_index_cost_adj:调整索引扫描的转换成本百分比。

8. PG数据库中包含以下哪几种表连接方式?(多选)

A.MERGE JOIN CARTESIAN

B.NESTLOOP JOIN

C.HASH JOIN

D.MERGE JOIN

答案:BCD

解析:◆Nestloop Join

嵌套循环连接(Nestloop Join)是在两个表做连接时最朴素的一种连接方式。在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不能太大(>10000不适合),要把返回子集较小的表作为外表,而且在内表的连接字段上要有索引,否则会很慢。

执行的过程:确定一个驱动表(outer table),另一个表为 inner table,驱动表中的每一行与 inner 表中的相应记录 JOIN,类似一个嵌套的循环。适用于驱动表的记录集比较小(<10000)而且 inner 表有有效的访问方法(index)。需要注意的是,JOIN 的顺序很重要,驱动表(outer table)的记录集一定要小,返回的结果集的相应时间是最快的

◆Hash Join

优化器使用两个表中较小的表,并利用连接键在内存中建立散列表,然后扫描较大的表并探测散列表,找出与散列表匹配的行。

这种方式适用于较小的表可以完全放入内容的情况,这样总成本就是访问两个表的成本之和。但是如果表很大,不能完全放入内存,优化器会将它分割成若干不同的分区,不能放入内存的部分写入磁盘的临时段,此时要有较大的临时段以便尽量提高I/O的性能。

◆Merge Join

通常情况下散列表连接的效果比合并连接好,然而如果源数据上有索引,或者结果已经被排过序,在执行排序合并连接时就不需要排序了,这时合并连接的性能会优于是散列连接。

9. 以下哪种方法可以回收表段中的可用空间?(多选)

A.alter table … move;

B.alter table … shrink space compact;

C.通过create table as select (CTAS)重建表

D.通过export/import重建表

答案:ABC

解析:alter table shrink space compact 会移动表中的行并整理表上的碎片,但并不会调整高水位,也不会释放已占用的空间。只有不带 compact 选项时,才会调整高水位并释放空间。

10. 以下关于外连接的写法,哪些是正确的?(多选)

    A、select * from emp left join dept2 on emp.deptno=dept2.deptno where dept2.deptno=20 ;
    B、select * from emp,dept2 where emp.deptno=dept2.deptno(+) and dept2.deptno(+)=20 ;
    C、select * from emp,dept2 where emp.deptno=dept2.deptno(+) and dept2.deptno=20 ;
    D、select * from emp left join dept2 using(deptno) ;

    答案:BD

    【答案解析】select * from emp left join dept2 on emp.deptno=dept2.deptno where dept2.deptno=20、 select * from emp,dept2 where emp.deptno=dept2.deptno(+) and dept2.deptno=20:会在最后进行过滤,失去了外连接的效果。

    11.以下关于实例内存和会话内存,下面哪2种说法是正确的:

    A、SGA内存是私有内存段;PGA是共享内存段

    B、PGA在实例启动时分配

    C、SGA被所有会话写入;但是PGA只能被一个会话写入 【正确答案】

    D、会话能写PGA,但是不能写SGA E、SGA在实例启动时分配 【正确答案】

    12.DBWn进程是Oracle负责将脏块写入磁盘的后台进程,如果我们要加快它写出块的速度,可以配置多个DBWn进程,那么在Oracle 11g中最多可以配多少个呢?

    A、32

    B、16

    C、64

    D、36

    解析:D

    11g 36 个 ,12c 64 个

    13.以下关于Oracle分区索引的表述,哪些是正确的?

    A、不可以创建本地分区的唯一索引

    B、不可以创建非前缀全局分区索引

    C、与表分区方法相同的,是本地分区索引,与表分区的方法不相同的,是全局分区索引。

    D、分区索引所在的基表需要为分区表

    E、分区索引主要有本地分区索引和全局分区索引

    解析:BCE

    1、索引是否分区与表是否分区无关。2、可以创建本地分区的唯一索引,但需要将分区键列加入做为索引列。3、Oracle不支持创建非前缀全局分区索引 4、与索引所在分区表的分区方法相同的,是本地分区索引,反之,是全局分区索引。

    14.以下哪些描述适用于位图索引?

    A、需要更少的索引存储空间

    B、可以创建复合索引

    C、会存储索引列全空的记录

    D、可以创建基于函数的索引

    E、可以创建压缩索引

    解析:ABCD

    由于位图索引是用一个二进制位表示一行,所以,其所需要的索引空间会比较少。由于位图索引是用一个二进制位表示一行,所以,其所需要的索引空间会比较少。位图索引会存储索引列为空值的记录。位图索引可以创建基于函数的索引,也可以创建复合索引。但不能创建压缩的位图索引。

    15.为了获取GV$SQL视图的定义,以下哪个方法可以得到正确的视图定义?

    A、select view_definition from gv$fixed_view_definition where view_name='GV_$SQL';

    B、select dbms_metadata.get_ddl('VIEW','GV_$SQL','SYS') from dual;

    C、select view_definition from gv$fixed_view_definition where view_name='GV$SQL';

    D、select text from dba_views where view_name = 'GV$SQL' and owner='SYS';

    E、select dbms_metadata.get_ddl('VIEW','GV$SQL','SYS') from dual;

    F、select text from dba_views where view_name = 'GV_$SQL' and owner='SYS';

    解析:C

    数据库启动时,会创建名为GV$SQL的FIXED_VIEW。其视图定义文本可以在GV$FIXED_VIEW_DEFINITION中查到。然后继续创建名为GV_$SQL(注意有下划线)的视图和名为GV$SQL的公有同义词,该公有同义词指向GV_$SQL视图。虽然可以通过在DBA_VIEWS和dbms_metadata.get_ddl('VIEW','GV_$SQL','SYS')查询到视图GV_$SQL的定义文本,但这两种方法获取的定义文本并不是GV$SQL视图的定义文本,而是GV_$SQL视图的定义文本,在该定义文本中,FROM子句中的对象是GV$SQL。而从GV$FIXED_VIEW_DEFINITION中查到的GV$SQL的定义文本,其FROM子句后面的对象才是内部对象表x$kglcursor_child。

    16.以下的层次查询中的各个子句,其执行顺序为何?d

    1 select *

    2     from tab1

    3         where 

    4                 start with 

    5                     connect by

     

    A、2->3->5->4->1 

    B、2->4->3->5->1 

    C、2->3->4->5->1 

    D、2->4->5->3->1 

    解析:D

    SELECT ... FROM + 表名

    WHERE + 条件3

    START WITH + 条件1

    CONNECT BY PRIOR + 条件2

    17.关于ORACLE的保留关键字OPT_PARAM的描述,正确的是?

    A、OPT_PARAM用法为:/*+ OPT_PARAM('隐藏参数值','true/false') */

    B、OPT_PARAM关键字可以在SQL级别通过加HINT的方式来调整单个SQL执行的时候所依赖的系统参数的值

    C、HINT中只写OPT_PARAM关键字也不会有任何影响

    D、OPT_PARAM后跟的参数值可以不完整,系统会忽略OPT_PARAM参数

    解析:AB

    OPT_PARAM关键字可以在SQL级别通过加HINT的方式来调整单个SQL执行的时候所依赖的系统参数的值;OPT_PARAM关键字后的参数信息如果不完整或只写OPT_PARAM关键字,相当于保留关键字,会导致保留关键字后的HINT都被忽略,使用时需注意。

    18.客户端的字符集为GB2312,数据库的字符集为AL32UTF8。请问,以下哪个设置NLS_LANG的方法,可以保证在数据库中存储正确编码的字符?

      

    A、export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

    B、无需设置,因为AL32UTF8中的字符涵盖了GB2312中的字符。

    C、export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

    解析:A

    NLS_LANG 需要设置为客户端字符集或者为超级。

    19.以下并行的hint写法哪些是正确并且高效的

      

    A、 /*+ parallel_index(a idx_01 8) */

    B、/*+ parallel(a 8) */

    C、/*+ parallel 8 */

    D、/*+ index_parallel(a idx_01 8) */

    E、/*+ parallel */

    F、 /*+ parallel(8) */

    解析:AB

    A会导致优化器使用自动并行度。B会使得SQL中的所有表在某些情况下,都选择并行执行。C写法错误,索引的并行是/*+ parallel_index(table_name index_name degree)*/.

    20.Oracle数据库中可通过V$SORT_USAGE动态视图查询当前实例各会话临时段使用情况,下列关于临时段描述正确的是?

      

    A、使用GROUP BY和UNION语法的SQL语句,如分组和合并的数据量较大超过PGA排序区容量时,可能会使用到临时表空间。【正确答案】

    B、使用会话表(GT_SESS_TAB)插入数据后,在同一个会话中使用删除语句(DELETE)语句无法释放临时段。DELETE FROM GT_SESS_TAB; 【正确答案】

    C、使用事务表(GT_TRANS_TAB)插入数据后,在同一个会话中提交或回滚事务操作无法释放临时段。INSERT INTO GT_TRANS_TAB(TMP_ID) VALUES(123); COMMIT;

    D、使用长字符聚合查询(如:WM_CONCAT)返回大字段或插入到全局临时表中包含大字段值,这2类操作均会生产临时段,且临时段类型为LOB_DATA(V$SORT_USAGE.SGTYPE='LOB_DATA') SELECT WM_CONCAT(COL_CHAR) CHAR_CLOB FROM T_CHAR_TAB; INSERT INTO GT_SESS_TAB(COL_CLOB) VALUES('123'); 【正确答案】

    E、往如下全局临时表(GLOBAL TEMPORARY TABLE)插入数值型记录时,会话表GT_SESS_TAB(DBA_TABLES.DURATION='SYS$SESSION')和事务表GT_TRANS_TAB(DBA_TABLES.DURATION='SYS$TRANSACTION')这2类全局临时表均会生产临时段,且临时段类型为DATA(V$SORT_USAGE.SGTYPE='DATA') INSERT INTO GT_SESS_TAB(TMP_ID) VALUES(123); INSERT INTO GT_TRANS_TAB(TMP_ID) VALUES(123); 【正确答案】

    F、在Oracle 11G或以上版本,除了通过断开会话连接释放临时段外,也可通过ALTER TABLESPACE TEMP SHRINK SPACE命令来降低临时表空间占用率。【正确答案】

    【答案解析】ABDEF

    插入到全局临时表均使用临时表空间存储,存储数据段(SEGMENT)为临时段

    会话表需断开会话或使用前后使用TRUNCATE语句释放临时段

    提交或回滚事务时,Oracle内部自动管理并释放事务表的临时段

    聚合返回CLOB段和插入带LOB段的会话表,均会产生LOB段类型的临时段。插入带LOB段全局临时表时,还带有LOB段对应INDEX类型的临时段。

    Oracle数据库中断开会话即可释放临时段,11G以上版本还提供了临时段收缩命令 ALTER TABLESPACE TEMP SHRINK SPACE

    UNION语句实际执行计划中带有SORT UNION操作,涉及排序排重操作,大数据量较大时可能会使用到临时表空间。分组HASH GROUP BY同样使用到排序和临时段。

    说明:以上题目及答案解析均来自墨天轮各位认证专家,本次只做了收集与整理,如有侵犯,请联系会及时处理,谢谢!

    最后推荐一下收藏已久的 Oracle 五大学习网站,如有需要的小伙伴们可前去围观:

    网站一、 https://www.oracle.com/technetwork/index.html,简称 OTN,全世界最大的开发者社区,涵盖很多 Oracle 的学习资源,内容是英文的;

    网站二、 http://www.itpub.net/, 国内专业的 IT 技术论坛社区;

    网站三、http://www.chinaunix.net , 中国最大的 Linux/Unix 技术社区网站, 此外对编程、数据库、网络安全等也涉猎颇多;

    网站四、http://www.eygle.com,云和恩墨创始人、Oracle ACED 盖国强老师的个人网站,提供很多优质的关于 Oracle 的文章和资料,值得收藏与学习。

    网站五、http://yangtingkun.net/ Oracle 的那些事儿,Oracle 百科全书杨廷琨老师个人网站, ITPUB Oracle数据库管理版版主 ,人称"杨长老",值得收藏与学习。


    每天进步一点,一年后的进步将会很大,远远大于 “1”;每天退步,即使退步一点点,一年后几乎退步为 "0"。每天加油,让我们一起努力做更好的自己,今天就到这里了,祝小伙伴们新的一天开心愉快,工作顺利!



    Oracle 12c 及以上版本补丁更新说明及下载方法(收藏版)

    Oracle 11.2.0.4 RAC 最新补丁下载(11.2.0.4.200714)

    11g RAC 在线存储迁移实现 OCR 磁盘组完美替换

    Oracle 19c 之多租户 PDB 连接与访问(三)

    案例:RMAN 备份控制文件报错 ORA-00230

    Oracle 12C 最新补丁下载与安装操作指北

    DBA 常用的软件工具有哪些(分享篇)?

    Oracle 相关认证证书查询及真伪辨别

    openGaussDB 初体验(下)


    点亮在看,你最好看!



    推荐阅读
    • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
    • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
    • 如何实现织梦DedeCms全站伪静态
      本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
    • Java String与StringBuffer的区别及其应用场景
      本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
    • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
    • 高质量SQL书写的30条建议
      本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
    • Oracle10g备份导入的方法及注意事项
      本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
    • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
      本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
    • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
    • HDFS2.x新特性
      一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
    • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
    • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
    • 如何在php中将mysql查询结果赋值给变量
      本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
    • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
      本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
    • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
    author-avatar
    斌仔151
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有