搜尋
首頁php框架ThinkPHP遇見史上最難thinkphp面試題

遇見史上最難thinkphp面試題

Aug 10, 2020 pm 05:05 PM
thinkphp面試題

遇見史上最難thinkphp面試題

 【相關專題推薦:2020年thinkphp面試題目及答案(大全)

1. 寫出字串' 0',分別在php和js中轉換布林類型,值是true還是false?

答案:

在php中

$a = '0';
$a = (bool) $a;
var_dump($a);

 值為false

在js中

官方說明:Note:If the value parameter is omitted, or is 0, -0, null, , false, undefined, or NaN, the object is set to false. Otherwise it is set to true (even with the string false)!

測試:

<script type="text/javascript">
        var a=&#39;0&#39;;
        if(a){
                alert(1);
        }else{
                alert(0);
        }
</script>  值为true

2. 簡述優化mysql使用的方法以及使用到的工具和指令

答案:

1.使用pgcc(pentium gcc)編譯器該編譯器(http://www.goof.com/pcg/)針對運行在奔騰處理器系統上的程式進行最佳化,用pgcc編譯mysql原始碼,整體效能可提高10%。當然如果你的伺服器不是用奔騰處理器,就不必用它了,因為它是專為奔騰系統設計的。

2.僅使用你想使用的字元集編譯mysql mysql目前提供多達24種不同的字元集,為全球使用者以自己的語言插入或查看表中的資料。卻省情況下,mysql安裝所有者這些字元集,熱然而,最好的選擇是指選擇一種你需要的。如,禁止除latin1字元集以外的所有其它字元集: 

%>./configure -with-extra-charsets=none [--other-configuration-options]

3 .將mysqld編譯成靜態執行檔將mysqld編譯成靜態執行檔而無需共享函式庫也能獲得更好的效能。透過在配置時指定下列選項,可靜態編譯mysqld。

%>./configure -with-mysqld-ldflags=-all-static [--other-configuration-options]

4.設定樣本下列設定指令常用於提高效能: 

%>cflags="-o6 -mpentiumpro -fomit-frame-pointer" cxx=gcc cxxflags="-o6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared

5.確保運用正確的編譯固然重要,但這只是成功的第一步,配置眾多的mysql變數同樣對伺服器的正常運作起關鍵作用。

你可以將這些變數的賦值存在一個設定檔中,以確保它們在每次啟動mysql時均起作用,這個設定檔就是my.cnf檔。 mysql已經提供了幾個my.cnf檔案的樣本,可在/usr/local/mysqld/share/mysql/目錄下找到。這些檔案分別命名為my-small.cnf、 my-medium.cnf、my-large.cnf和my-huge.cnf,規模說明可在描述設定檔適用的系統類型標題中找到。

如果在只有相當少記憶體的系統上執行mysql,而且只是偶爾的用一下,那麼my-small.cnf會比較理想,因為它命令mysqld只使用最少的資源。類似地,如果你打算建立電子商務超市,而且系統擁有2g內存,那麼你可能要用到mysql-huge.cnf檔了。 

為了利用這些文件中的一個,你需要複製一個最適合需求的文件,改名為my.cnf。你可以選擇使用設定檔三種作用範圍的一種: global:將my.cnf檔案複製到伺服器的/etc目錄下,這使得設定檔中的變數作用於全域,也就是對所有伺服器上的mysql資料庫伺服器有效。 

 local:將my.cnf檔案複製到[mysql-install-dir]/var/目錄下,使得my.cnf作用於特定的伺服器。 [mysql-install-dir]表示mysql安裝目錄。  

user:你可以再限製作用特定的用戶,將my.cnf複製到用戶的根目錄下。 究竟如何設定my.cnf中的這些變數呢?更進一步說,你可以設定哪一個變數。

雖然所用變數對mysql伺服器相對通用,每個變數與mysql的的某些元件有更特定的關係。如變數max_connects歸在mysqld類別下。執行下列指令即可知道:%>/usr/local/mysql/libexec/mysqld--help 它顯示大量的選項及與mysqld相關的變數。

你可以很容易地在該行文字之下找出變數:

possible variables for option --set-variable (-o) are

然後你可以如下設定my.cnf中的那些變數:

set-variable = max_connections=100

它設定mysql伺服器的最大並發連線數為100。若要確保在my.cnf檔案中的[mysqld]標題下插入變數設定。

事務安全 dbd berkeley db(dbd)表是支援事務處理的表,由sleepycat軟體公司(http://www.sleepycat.com)開發。它提供mysql用戶期待已久的功能-事務控制。

事務控制在任何資料庫系統中都是一個極有價值的功能,因為它們確保一組命令能成功地執行。 

非事務安全 heap heap表是mysql中存取資料最快的表。這是因為他們使用儲存在動態記憶體中的一個哈希索引。另一個要點是如果mysql或伺服器崩潰,資料將會遺失。 

  isam isam表是早期mysql版本的預設表類型,直到myiasm開發出來。建議不要再使用它。 

  merge merge是一个有趣的新类型,在3.23.25之后出现。一个merge表实际上是一个相同myisam表的集合,合并成一个表,主要是为了效率原因。这样可以提高速度、搜索效率、修复效率并节省磁盘空间。 

  myiasm 这是mysql的缺省表类型。它基于iasm代码,但有很多有用的扩展。myiasm比较好的原因: myiasm表小于iasm表,所以使用较少资源。 myiasm表在不同的平台上二进制层可移植。 更大的键码尺寸,更大的键码上限。 

指定表类型 你可在创建表时指定表的类型。下例创建一个heap表: 

mysql>create table email_addresses type=heap ( ->email char(55) not null, ->name char(30) not null, ->primary key(email) ); 

bdb表需要一些配置工作,参见http://www.mysql.com/doc/b/d/bdb_overview.html。 

更多的表类型 为了使mysql管理工作更有趣,即将发布的mysql 4.0将提供两种新的表类型,称为innobase和gemeni。 

show 你可能有兴趣知道mysql服务器究竟更了什么,下列命令给出一个总结: 、

mysql>show status; 

它给出了一个相当长的状态变量及其值的列表。有些变量包含了异常终止客户的数量、异常终止连接的数量、连接尝试的次数、最大并发连接数和大量其他有用的信息。这些信息对找出系统问题和低效极具价值。 show还能做更多的事情。它可以显示关于日志文件、特定数据库、表、索引、进程和权限表中有价值的信息。详见mysql手册。 

explain 当你面对select语句时,explain解释select命令如何被处理。这不仅对决定是否应该增加一个索引,而且对决定一个复杂的join如何被mysql处理都是有帮助的。 

optimize optimize语句允许你恢复空间和合并数据文件碎片,对包含变长行的表进行了大量更新和删除后,这样做特别重要。optimize目前只工作于myiasm和bdb表。

5. 一张mysql大数据表有几千万数据,但有一自增id字段,且为主键,要遍历此表的所有数据,写出有效的方法和sql(禁止使用limit n,m)。

答:

案例分析:数据表 collect ( id, title ,info ,vtype) 就这4个字段,其中 title 用定长,info 用text, id 是逐渐,vtype是tinyint,vtype是索引。10万数据的效果。

select id,title from collect limit 1000,10; 基本上0.01秒就OK

select id,title from collect limit 90000,10;                8-9秒完成

select id from collect order by id limit 90000,10;  0.04秒就OK。 为什么?因为用了id主键做索引当然快。

改进方法:select id,title from collect where id>=(select id from collect order by id limit 90000,1) limit 10;;

select id from collect where vtype=1 order by id limit 90000,10; 很慢,用了8-9秒!

vtype 做了索引了啊?怎么会慢呢?vtype做了索引是不错,你直接 select id from collect where vtype=1 limit 1000,10; 是很快的,基本上0.05秒,可是提高90倍,从9万开始,那就是0.05*90=4.5秒的速度了。

分表的方法:

建一个索引表: t (id,title,vtype) 并设置成定长,然后做分页,分页出结果再到 collect 里面去找info 。 是否可行呢?实验下就知道了。

10万条记录到 t(id,title,vtype) 里,数据表大小20M左右。用select id from t where vtype=1 order by id limit 90000,10; 很快了。基本上0.1-0.2秒可以跑完。

其实这样做还是全表扫描,只是因为数据量小,只有10万才快。OK, 来个疯狂的实验,加到100万条,测试性能。

加了10倍的数据,马上t表就到了200多M,而且是定长。还是刚才的查询语句,时间是0.1-0.2秒完成!分表性能没问题?错!因为我们的limit还是9万,所以快。给个大的,90万开始select id from t where vtype=1 order by id limit 900000,10; 看看结果,时间是1-2秒!

怪不得有人说 discuz到了100万条记录就会很慢,我相信这是真的,这个和数据库设计有关!

开始测试结论是: 30万数据,用分表法可行,超过30万他的速度会慢道你无法忍受!当然如果用分表+我这种方法,那是绝对完美的。但是用了我这种方法后,不用分表也可以完美解决!

不分表的方法:

复合索引!search(vtype,id) 这样的索引

select id from collect where vtype=1 limit 90000,10; 非常快!0.04秒完成!

再测试: select id ,title from collect where vtype=1 limit 90000,10; 非常遗憾,8-9秒,没走search索引!

再测试:search(id,vtype),还是select id 这个语句,也非常遗憾,0.5秒。

综上:如果对于有where 条件,又想走索引用limit的,必须设计一个索引,将where 放第一位,limit用到的主键放第2位,而且只能select 主键!

http://blog.csdn.net/zqtsx/article/details/8929625

6. Mysql有一个联合索引KEY(a,b,c),a为tinyint类型(长度为1),b为mediumint类型(长度为3),c为int类型(长度4)。写出条件where a=1 and c=3所使用到此索引的长度。

答:网上没找到答案。

7. InnoDB引擎中,如何开启一个排它的读写锁。

答:

lock tables test write;         //经过测试启用另一个mysql回话都不能读和写test表,表明此答案是正确的

8. 简述json和jsonp的区别以及优缺点,应用场景。

答:说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用xml来描述,跨域可以通过服务器端代理来解决。

但到目前为止最被推崇或者说首选的方案还是用JSON来传数据,靠JSONP来跨域。

http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html

9. 以下js代码有什么潜在问题(点击每个div弹出相应的序号)?该如何解决?

     var es=document.getElementsByTagName(‘div’);
     for(var i in es){
          es.onclick=function(){
                alert(i);
          }
     }

答:没找到答案

10. 写一个遍历目录下所有文件以及子目录的函数

答:

<?php
    function traverse($path = &#39;.&#39;) {
    $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false
    while(($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目
            $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径
        if($file == &#39;.&#39; || $file == &#39;..&#39;) {
            continue;
        } else if(is_dir($sub_dir)) {    //如果是目录,进行递归
            echo &#39;Directory &#39; . $file . &#39;:<br>&#39;;
            traverse($sub_dir);
        } else {    //如果是文件,直接输出
            echo &#39;File in Directory &#39; . $path . &#39;: &#39; . $file . &#39;<br>&#39;;
        }
    }
  }

11.将以下jquery选择符翻译成中文描述:

$(“#d div.cls input[type=text][name^=text_]”);

答:

12. Cookie、session的联系和区别,多台web服务器如何共享session

答:

Session采用键值对 , 也就是说ID存放客户端 , 而值放在服务器端 , 是通过用户的ID去找服务器上对应的值 , 这种方式值放置在服务器端 ,有个时间限制 ,时间到则服务器自动释放.

Cookies则有两种方法 , 一种方法是把值保存在浏览器的变量中 , 当浏览器关闭时结束 , 另一种方法是保存在硬盘中 , 只要时间不过期 , 下次还可使用.

Session 是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也 会失效。

服务器也可以通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。

可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。

共享session的方法:http://blog.csdn.net/heiyeshuwu/article/details/521010

13. 有以下数据

  • $_GET[‘int’] 整数

  • $_GET[‘float’] 浮点

  • $_GET[‘text’] 文本,不需要展示html

  • $_GET[‘content’] 文本,需要展示html

以上数据该各用什么方法过滤并保证安全?数据入库之前需要做什么处理?

14. 写出匹配,除div,span,img以外的任何html标签的正则(不需要匹配子标签)。

15. 写出正则表达式中,以下关键字的含义?

$ +? ^ [^] ?<g1> ?! ?<! ?:

16. 写出多进程并发同时,读写同一文件时,能保证文件内容完整的代码(读写文件的代码)

17. 面向对象中,self与$this的区别是?

答:this是指向当前对象的指针(姑且用C里面的指针来看吧),self是指向当前类的指针,parent是指向父类的指针

18. 写出linux中,查找后缀名为.txt的,且内容包含delete的文件,找出并删除的命令是?

find / -type f -name "*.text" | xargs grep "delete"  -delete

相关学习推荐:thinkphp

以上是遇見史上最難thinkphp面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:thinkphp。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能