ホームページ  >  記事  >  バックエンド開発  >  PHP インタビューの概要、php インタビュー_PHP チュートリアル

PHP インタビューの概要、php インタビュー_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:08:111044ブラウズ

PHPインタビュー概要、PHPインタビュー

8月15日に北京に来てから今日までで1ヶ月以上が経ちました。この間、筆記試験や面接の準備を進め、大小合わせて10社以上の面接を受け、ようやく落ち着いたところです。面接を通して自分が大きく成長したと感じました。初めてこの見知らぬ街に来たとき、私は地下鉄に乗る方法も、バスに乗る方法も、正しい生活を送る方法もわかりませんでした。 。 。

面接は就職の最初のハードル 自分の学校が普通すぎたので、面接では高学歴の人に比べて本当に自信がありませんでした。面接の方向性はPHP開発エンジニアで、主にWebサイトのバックエンドやAPPインターフェースなどを担当しています。 私が面接した企業、テストの質問、体験談はすべて私の個人ウェブサイトに掲載されています。ご興味があれば、ぜひご覧ください: http://dwz.cn/1KMpea以下は私がこの期間のインタビューでまとめた常識事項ですので、皆さんのお役に立てれば幸いです。間違いがあればご指摘ください。

概要:

面接でよく聞かれる質問をもとにphp部分をまとめてみました 以下の質問は面接で出現率が高いです。質問は比較的基本的なものです

-------------------------------------PHP 部分----- ----------

PHP のいくつかの出力関数 echo、print()、print_r()、sprintf()、var_dump() の違い

1: echo: は関数ではなくステートメントであり、戻り値がなく、複数の変数値を出力でき、かっこは必要ありません。配列とオブジェクトは出力できません。出力できるのは単純な型 (int、string など) のみです。

2: print: これは関数ではなくステートメントであり、戻り値は 1 であり、括弧は必要ありません。配列とオブジェクトは出力できません。出力できるのは単純な型 (int、string など) のみです。

3: print_r: は、stirng、int、float、array、object などの複合型を出力できる関数です。

Y 出力配列が構造体で表現されている場合、それを print_r ($ str, true) で使用して、print_r を出力せずに返すことができます。

4: printf: テキストを整形して出力する関数です(C言語を参照)

5: sprintf: printf に似た関数ですが、印刷は行わず、書式設定されたテキストを返します (この関数は、書式設定された文字列を出力する代わりに変数に書き込みます)、その他 printf と同じです。

例: $str = "Hello"; $number = 123;

$txt

6: var_dump(): 関数。変数の内容、型、または文字列の内容、型、長さを出力します。デバッグによく使用されます。

複数のスレッドが同時にファイルを読み書きする問題を解決する関数を作成します。

リーリー

Cookieセッション使用プランを無効にする、 セッション有効期限の設定方法、対応する機能:

URL を通じて値を渡し、URL にセッション ID を追加します (欠点: 純粋に静的なページのセッション ID は次のページに渡されないため、サイト全体に純粋に静的なページは存在できません) フォームを非表示にすることで、フォームの非表示テキストボックスにセッションIDを入力してフォームと一緒に送信します(欠点:直接ジャンプする3499910bf9dac5ae3c52d5ede7383485タグなどのフォーム以外の状況には適用されません) php.iniファイルを直接設定し、php.iniファイルのsession.use_trans_sid= 0を1に設定します(Winではサポートされていないようです) セッションIDをファイル、データベースなどに保存し、クロスページプロセス中に手動で呼び出します

リーリー json形式のデータの特徴は何ですか

JSON は軽量のデータ交換形式です。これは ECMAScript のサブセットに基づいています。 JSON は完全に言語に依存しないテキスト形式を使用しますが、C 言語ファミリー (C、C++、C#、Java、JavaScript、Perl、Python など) に似た規則も使用します。これらの特性により、JSON は理想的なデータ交換言語になります。 人間にとっては読み書きが容易で、機械にとっては解析と生成(ネットワーク伝送速度)が容易です。 JSONの構造は以下の2点に基づいています

1. 「名前/値」ペアのコレクション さまざまな言語では、オブジェクト、レコード、構造、辞書、キー付きリストなどとして理解されます。
2。値のリストは、ほとんどの言語で配列として理解されます
ファイルの内容を取得するphpメソッド、対応する関数 1: file_get_contents はファイルの内容を取得し (get と post で取得可能)、ファイル全体が文字列に読み込まれます 2: fopen を使用して URL を開き、取得モードでコンテンツを取得します (fgets() 関数の助けを借りて) 3: fsockopen 関数を使用して URL (get と post で取得可能) を開き、get でヘッダーと本文を含む完全なデータを取得します 4:curl ライブラリを使用してコンテンツを取得します。curl ライブラリを使用する前に、php.ini をチェックして、curl 拡張機能がオンになっているかどうかを確認する必要があります。 ​ 一般的な PHP 配列関数 (array_merge、in_array の役割) とは何ですか? 1.配列演算の基本関数 array_values($arr); // 配列の値を取得します array_keys($arr); // 配列のキー名を取得します array_flip($arr); //配列内の値とキー名が入れ替わります(重複がある場合、前のものが後のもので上書きされます) array_search('PHP',$arr); // 指定された値を取得し、厳密な型チェックを行うために true を追加します array_reverse($arr); // 配列内の要素を反転します in_array("apple", $arr) //配列内のリンゴを取得します array_key_exists("apple", $arr); // 指定されたキー名が配列に存在するかどうかを取得します array_count_values($arr); // 配列内のすべての値の出現数をカウントします 2. 配列の分割と充填 array_slice($arr, 0, 3); //この関数はキー名(配列セグメント)を無視します。 array_splice($arr, 0, 3,array("black","maroon")); //前の関数との違いは、返されたシーケンスが元のシーケンスから削除されることです。配列 array_chunk($arr, 3, TRUE); //配列は複数の配列に分割できます。TRUE は、元の配列のキー名を保持することを意味します (複数の配列を分割します)。 4. 配列とスタック、キュー array_push($arr, "apple", "pear"); // 1 つ以上の要素を配列スタックの最後にプッシュし (プッシュ)、スタックにプッシュされた要素の数を返します array_pop($arr); // 配列スタックの最後の要素をポップします array_shift($arr); // 配列の最初の要素が外に移動されて返されます (配列の長さは 1 減り、他の要素は 1 つ前に移動され、数値キー名は 0 からカウントするように変更されます)テキストキー名は変更されません) array_unshift($arr,"a",array(1,2)); // 配列の先頭に 1 つ以上の要素を挿入します 六、数组的排序     sort($arr);       //由小到大,忽略键名       rsort($arr);      //由大到小,忽略键名     asort($arr);     //由小到大,保留键名       arsort($arr);    // 由大到小,保留键名     ksort($arr);     //按照键名正序排序           krsort($arr);   // 按照键名逆序排序   七、数组的计算     array_sum($arr);   //对数组内部的所有元素做求和运算(数组元素的求和)     array_merge($arr1, $arr2);      //合并两个或多个(相同字符串键名,后面覆盖前面,相同的数字键名,后面的附加到后面)       array_diff($arr1, $arr2);           //返回差集结果数组   array_diff_assoc($arr1, $arr2, $arr3);  //返回差集结果数组,键名也做比较     array_intersect($arr1, $arr2);  //返回交集结果数组    array_intersect_assoc($arr1, $arr2);   //返回交集结果数组,键名也做比较 
八、其他的数组函数     array_unique($arr);   //移除数组中重复的值,新的数组中会保留原始的键名     shuffle($arr);             // 将数组的顺序打乱   php魔术方法与魔术常量 方法:__construct(),__destruct(),    方法重载:__call(),__callStatic()。 属性重载:__get(),__set(),__isset(),__unset(),这四个只对类中,私有,受保护的成员属性有效 __toString(),__autoload(); _set_state(); //自 PHP 5.1.0 起当调用 var_export() 导出类时,此静态 方法会被调用。 本方法的唯一参数是一个数组。   __clone();       //通常用于对副本进行重新初始化, 说明:this指副本对象引用,that指原对象引用 等方法在 PHP 中被称为”魔术方法”。PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。   常量:__LINK__     //文件中的当前行号。         __FILE__       //文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。         __DIR__       //文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录,它等价于 dirname(__FILE__)。           __FUNCTION__      //函数名称。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。         __CLASS__             //类的名称。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。         __METHOD__        //类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。         __NAMESPACE__   //当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的(PHP 5.3.0 新增)  

PHP 如何获取客户端的IP地址,

用$_SERVER获取的IP地址有什么问题?

$_SERVER['REMOTE_ADDR'] ;   通过全局数组来获得 

getenv('REMOTE_ADDR') ; 通过环境变量来获得

当客户机使用代理的时候获取不到真实的IP地址

 

写一个函数,可以遍历文件夹下的所有文件和文件夹。

<span> 1</span>     <span>function</span> get_dir_info(<span>$path</span><span>){
</span><span> 2</span>           <span>$handle</span> = <span>opendir</span>(<span>$path</span>);<span>//</span><span>打开目录返回句柄</span>
<span> 3</span>           <span>while</span>((<span>$content</span> = <span>readdir</span>(<span>$handle</span>))!== <span>false</span><span>){
</span><span> 4</span>                 <span>$new_dir</span> = <span>$path</span> . DIRECTORY_SEPARATOR . <span>$content</span><span>;
</span><span> 5</span>                 <span>if</span>(<span>$content</span> == '..' || <span>$content</span> == '.'<span>){
</span><span> 6</span>                        <span>continue</span><span>;
</span><span> 7</span> <span>                }
</span><span> 8</span>                 <span>if</span>(<span>is_dir</span>(<span>$new_dir</span><span>)){
</span><span> 9</span>                       <span>echo</span> "<br>目录:".<span>$new_dir</span> . '<br>'<span>;
</span><span>10</span>                       get_dir_info(<span>$new_dir</span><span>);
</span><span>11</span>                 }<span>else</span><span>{
</span><span>12</span>                       <span>echo</span> "文件:".<span>$path</span>.':'.<span>$content</span> .'<br>'<span>;
</span><span>13</span> <span>                }
</span><span>14</span> <span>          }
</span><span>15</span> <span>      }
</span><span>16</span>       get_dir_info(<span>$dir</span>);

 

有mail.log的一个文档,内容为若干邮件地址,用’\n’分隔换行。挑选sina.com的地址(包括从文件读取、过滤到列印出来)。

思路1:用正则表达式(比较慢,效率地,不推荐用)

思路2:cat mail.log | grep sina.com

 

PHP缓存技术有哪些? tp是局部还是完全缓存?

1. 全页面静态化缓存,也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程
2. 页面部分缓存,将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示
3. 数据缓存,通过一个id进行请求的数据,将数据缓存到一个php文件中,id和文件是对应的,下次通过这个id进行请求时 直接读php文件
4. 查询缓存,和数据缓存差不多,根据查询语句进行缓存;
5. 常用的缓存技术有:redis和memcache
个人认为tp应该是全局缓存 因为:tp缓存实在本地生成一个php文件来存储数据库中读取出来的数据  

strlen()与mb_strlen的作用与区别

在PHP中,strlen与mb_strlen是求字符串长度的函数 PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍(在 UTF-8编码下,一个汉字占3个字节)。   采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用 mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过 mb_internal_encoding()函数得到。
需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。   写一个函数,尽可能高效的从一个标准url中取出扩展名 $arr = parse_url('http://www.sina.com.cn/abc/de/fg.php?id=1');   $result = pathinfo($arr['path']);var_dump($arr);   var_dump($result['extension']);  

php.ini 中safe mod关闭 影响哪些函数和参数,至少写6个?

move_uploaded_file()        exec() system()                              passthru() popen()                              fopen() mkdir()                               rmdir() rename()                            unlink() copy()                                 chgrp() chown()                              chmod() touch()                               symlink() link()                                   parse_ini_file() set_time_limit()                  max_execution_time mail()

 

一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停 的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

<span> 1</span> <<span>?php
</span><span> 2</span>  <span>function</span> fuhuan(<span>$allnum</span>, <span>$ti</span><span>){
</span><span> 3</span>   <span>$arr</span> = <span>array</span><span>();
</span><span> 4</span>   <span>for</span>(<span>$i</span> = 0; <span>$i</span> < <span>$allnum</span>; <span>$i</span>++<span>){
</span><span> 5</span>    <span>$arr</span>[<span>$i</span>] = <span>$i</span><span>;
</span><span> 6</span> <span>  }
</span><span> 7</span>  
<span> 8</span>   <span>$nums</span> = 1<span>;
</span><span> 9</span>   <span>while</span>(<span>count</span>(<span>$arr</span>) > 1<span>){
</span><span>10</span>    <span>foreach</span> (<span>$arr</span> <span>as</span> <span>$key</span> => <span>$value</span><span>) {
</span><span>11</span>     <span>if</span>(<span>$nums</span> == <span>$ti</span><span>){
</span><span>12</span>      <span>unset</span>(<span>$arr</span>[<span>$key</span><span>]);
</span><span>13</span>      <span>$nums</span> = 1<span>;
</span><span>14</span>     }<span>else</span><span>{
</span><span>15</span>      <span>$nums</span>++<span>;
</span><span>16</span> <span>    }
</span><span>17</span> <span>   }
</span><span>18</span> <span>  }
</span><span>19</span>   <span>$new_arr</span> = <span>array_values</span>(<span>$arr</span><span>);
</span><span>20</span>   <span>var_dump</span>(<span>$new_arr</span>[0] + 1<span>);
</span><span>21</span> <span> }
</span><span>22</span>  fuhuan(10,10);

isset() 、empty()与is_null的区别

1、当变量未定义时,is_null()和“参数本身”是不允许作为参数判断的,会报Notice警告错误;

2、empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 和 “参数本身”只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!

3、isset():仅当null和未定义,返回false;

4、empty():""、0、"0"、NULL、FALSE、array(),未定义,均返回false;

5、is_null():仅判断是否为null,未定义 报警告;

6、变量本身作为参数,与empty()一致,但接受未定义变量时,报警告;

 

求两个文件的相对路径

<span> 1</span> getpath('/a/b/c/d/e.php', '/a/d/12/34/c.php'<span>);
</span><span> 2</span> 
<span> 3</span>  <span>function</span> getpath(<span>$a</span>, <span>$b</span><span>){
</span><span> 4</span>   <span>$aarr</span> = <span>explode</span>('/', <span>$a</span><span>);
</span><span> 5</span>   <span>$barr</span> = <span>explode</span>('/', <span>$b</span><span>);
</span><span> 6</span>   <span>$count</span> = <span>count</span>(<span>$barr</span>) - 2<span>;
</span><span> 7</span>   <span>$pathinfo</span> = ''<span>;
</span><span> 8</span>   <span>for</span>(<span>$i</span> = 1; <span>$i</span> <= <span>$count</span>; <span>$i</span>++<span>){
</span><span> 9</span>    <span>if</span>(<span>$aarr</span>[<span>$i</span>] == <span>$barr</span>[<span>$i</span><span>]){
</span><span>10</span>     <span>$pathinfo</span> .= '../'<span>;
</span><span>11</span>    }<span>else</span><span>{
</span><span>12</span>     <span>$pathinfo</span> .= <span>$barr</span>[<span>$i</span>] . '/'<span>;
</span><span>13</span> <span>   }
</span><span>14</span> <span>  }
</span><span>15</span>   <span>echo</span> <span>$pathinfo</span><span>;
</span><span>16</span>  }

 

MVCの長所と短所 1. MVC の利点
(1) 実行時にモデルに対して複数のビューを同時に作成して使用できます。変更伝播メカニズムにより、関連するすべてのビューがモデル データの変更をタイムリーに受信できるようになり、関連するすべてのビューとコントローラーが同期して動作できるようになります。
ビューとコントローラーのプラグイン可能性により、ビューとコントローラーのオブジェクトを置き換えることができ、必要に応じて動的に開いたり閉じたりできます。 、または実行時に置き換えられることもあります。 (3)モデルの移植性。モデルはビューから独立しているため、モデルを独立して移植して新しいプラットフォームで動作させることができます。必要なのは、新しいプラットフォーム上のビューとコントローラーに新たな変更を加えるだけです。 (4)
潜在的なフレーム構造。インターフェイスの設計だけでなく、このモデルに基づいてアプリケーション フレームワークを構築できます。 2. MVC
(1) システムの構造と実装が複雑になります。単純なインターフェイスの場合、MVC に厳密に従ってモデル、ビュー、コントローラーを分離すると、構造が複雑になり、更新操作が多すぎて操作効率が低下する可能性があります。 (2)
ビューとコントローラー間の接続が強すぎます。ビューとコントローラーは互いに分離されたコンポーネントですが、実際には密接に関連しています。ビューにはコントローラーが存在しないため、その用途は非常に限定されており、その逆も同様であり、そのため独立した再利用が妨げられています。 (3) ビューによるモデル データへのアクセスが非効率的です。モデルの操作インターフェイスによっては、十分な表示データを取得するためにビューを複数回呼び出す必要がある場合があります。変更されていないデータへの不必要に頻繁なアクセスも、運用パフォーマンスに悪影響を及ぼします。 (4) 現在、一般に高度なインターフェイス ツールまたはコンストラクターは MVC モードをサポートしていません。これらのツールを MVC のニーズに合わせて調整し、個別のコンポーネントを作成するにはコストがかかるため、MVC の使用が困難になります。

​ ​ セッションとCookieの関係と違い(動作メカニズム)、セッション共有問題の解決策:
違いとつながり: session_start() を使用してセッションファイルを生成すると、サーバーはセッション ID のハッシュ値とセッション名をデフォルト値の PHPSESSID で生成し、変数 PHPSESSID (セッション名) (デフォルト) をクライアントに送信します。値は 128 ビットのハッシュ値です。サーバーは、この Cookie を通じてクライアントと対話します。セッション変数の値は、PHP によって内部的にシリアル化され、サーバー マシン上のテキスト ファイルに保存されます。この変数は、デフォルトで変数名が PHPSESSID であるクライアントのクーリーと対話します。サーバー http ヘッダーが自動的に送信されます: header('Set-Cookie: session_name()=session_id(); path=/'); つまり、新しいページにジャンプするときに setcookie(session_name(),session_id());このページから、 session_start() を呼び出した後、PHP は指定された ID に関連付けられたサーバー側に保存されたセッション データをチェックし、見つからない場合は新しいデータ セットを作成します。 シェア
計画: 1: データベースを使用してセッションを保存します。サーバーがダウンしても、セッションはそのまま残ります。
問題: プログラムをカスタマイズする必要がある; さらに、データベースは単一ポイントであるため、この問題を解決できます。                                                                  
2: memcached を使用してセッションを保存します。この方法はデータベースと似ており、メモリ アクセスのパフォーマンスはデータベースよりもはるかに優れています。
問題: プログラムをカスタマイズする必要があるため、作業負荷が増加します。memcached に保存されているデータはシリアル化する必要があり、電源が切れたり、コンピューターが再起動されたりすると、データが失われやすくなります。

3: 通过加密的cookie,在A服务器上登录,在用户的浏览器上添加加密的cookie,当用户访问B服务器时,检查有无Session,如果没有,就检验 Cookie是否有效,Cookie有效的话就在B服务器上重建session。简单,高效, 服务器的压力减小了,因为session数据不存在服务器磁盘上。根本就不会出现session读取不到的问题。

问题:网络请求占用很多。每次请求时,客户端都要通过cookie发送session数据给服务器,session中数据不能太多,浏览器对cookie 的大

小存在限制。不适合高访问量的情况,因为高访问量的情况下。

 

 正则表达式

匹配中文字符的正则表达式: [\u4e00-\u9fa5] 
匹配双字节字符(包括汉字在内):[^\x00-\xff] 
匹配空行的正则表达式:\n[\s| ]*\r 
匹配HTML标记的正则表达式:/db05f8e866f47612e82f5cb19e67888c.*25949ccbf68a5e928aa04bb49571e4d5|b1ca7e9394ce1dfc0ddfd739020cabe6/ 
匹配首尾空格的正则表达式:(^\s*)|(\s*$) 
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 
匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 
匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$

 

--------------------linux部分---------------------

core文件是什么,有什么用?

<span> core是unix系统的内核。当你的程序出现内存越界的时候,操作系统会中止你的进程,并将当前内存状态倒出到core文件中,以便进一步分析。程序员可以通过core文件来找出问题所在。它记录了程序挂掉时详细的状态描述。</span>
<span><strong>什么是core dump</strong> Core的意思是内存, Dump的意思是扔出来, 堆出来。开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的,它可以做为调试程序的参考.
    core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump。如何使用core文件 gdb -c core文件路径 [应用程序的路径],进去后输入where回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.</span>
<span><strong>为什么没有core文件生成呢?</strong> core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件.</span>
<span><strong>ulimit -c unlimited</strong> core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号</span>

不用core文件,程序出了问题产生信号是否知道?答:内核向进程发信号嘛。

 

共享内存除了文件映射还有什么方式?

共享内存对象映射。

二者有什么区别:

答:内存映射文件是由一个文件到一块内存的映射,使应用程序可以通过内存指针对磁盘上的文件进行访问,其过程就如同对加载了文件的内存的访问,因此内存文件映射非常适合于用来管理大文件。

 

请解释下列10个shell命令的用途
top、ps、mv、find、df、cat、chmod、chgrp、grep、wc top:命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。  ps:查看进程  mv:移动或者更改文件  find:在子目录中搜索匹配的文件  df:linux中df命令参数功能:检查文件系统的磁盘空间占用情况。

cat:把一个或多个文件内容显示到标准输出 

chmod:改变文件属性 

chgrp:改变用户分组 

grep:在文件内进行搜索 

wc:命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。

 

Linux文件属性有哪些?(共十位)

-rw-r--r--那个是权限符号,总共是- --- --- ---这几个位。

第一个短横处是文件类型识别符:-表示普通文件;c表示字符设备(character);b表示块设备(block);d表示目录 (directory);l表示链接文件(link);后面第一个三个连续的短横是用户权限位(User),第二个三个连续短横是组权限位 (Group),第三个三个连续短横是其他权限位(Other)。每个权限位有三个权限,r(读权限),w(写权限),x(执行权限)。如果每个权限位都 有权限存在,那么满权限的情况就是:-rwxrwxrwx;权限为空的情况就是- --- --- ---。

权限的设定可以用chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:

ファイル aaa には完全に空の権限があります - --- --- ---。

chmod u+rw aaa (ユーザー許可ビットに読み取りおよび書き込み許可を設定します。許可は次のように表されます: - rw- --- ---)

chmod g+r aaa (グループの権限を読み取り可能に設定します。その権限は次のように表されます: - --- r-- ---)

chmod ugo+rw aaa (ユーザー、グループ、他のユーザーまたはグループの読み取りと書き込みの権限を設定します。権限は次のように表されます: - rw- rw- rw-)

aaa が完全な権限を持っている場合 - rwx rwx rwx。

chmod u-x aaa (ユーザーの実行可能権限を削除します。権限は次のように表現されます: - rw- rwx rwx)

aaa - rwx r-x r-x にカスタム権限を付与する場合、コマンドは次のとおりです:

chmod u=rwx、go=rx aaa

---------------------サーバー部分--------------------- ----- Apache と Nginx の長所と短所の比較
1. Apache に対する nginx の利点:
軽量で、Apache よりも使用するメモリとリソースが少ない。高度にモジュール化された設計で、モジュールの作成は比較的簡単です
非同時実行性、nginx はリクエストを非同期かつノンブロッキングで処理し、複数の接続 (10,000 レベル) が 1 つのプロセスに対応できますが、Apache はブロックされており、同期マルチプロセス モデルです。 1 つの接続が 1 つのプロセスに対応します。高い同時実行性では、nginx は低リソース、低消費、高パフォーマンスを維持できます nginxは静的ファイルをうまく処理し、Nginxの静的処理パフォーマンスはApacheの3倍以上です
2. nginx に対する apache の利点:
apache の書き換えは、考えられるすべてのモジュールを見つけることができ、比較的安定しています。バグ 3: 理由: これは、Apache が従来の選択モデルを使用するのに対し、Nginx は最新の epoll (Linux 2.6 カーネル) および kqueue (freebsd) ネットワーク I/O モデルを使用するためです。現在、Linux での大量の同時アクセスに耐えることができる Squid と Memcached は、どちらも epoll ネットワーク I/O モデルを使用しています。 多数の接続の読み取りと書き込みを処理するには、Apache が採用する選択ネットワーク I/O モデルは非常に非効率です。 ​ ​ CGIとFASTCGIの違い

cgi は 2000 年以前によく使用されていました。Web サーバーは一般に、このリクエストの内容に基づいて新しいプロセスをフォークして外部 C プログラム (または Perl スクリプト) を実行していました。 .)、このプロセスは処理されたデータを Web サーバーに返します。最後に、Web サーバーはコンテンツをユーザーに送信し、フォークされたばかりのプロセスも終了します。 ユーザーが次回動的スクリプトの変更を要求すると、Web サーバーは再び新しいプロセスをフォークし、サイクルが継続します。

後に登場したより高度な方法は、Web サーバーに Perl インタープリターまたは php インタープリターを組み込むことができるというものです。 つまり、これらのインタープリタはモジュール化されており、Web サーバーは起動時にこれらのインタープリタを起動します。 新しい動的リクエストが受信されると、Web サーバーはこれらの Perl または php スクリプトを独自に解析するため、プロセスを再フォークする必要がなくなり、効率が向上します。

Fastcgi の方式では、Web サーバーがリクエストを受信したときにプロセスを再フォークしません (このプロセスは Web サーバーの起動時に開始され、終了しないため)。Web サーバーはコンテンツをこのプロセスに直接渡します。 (プロセス間通信ですが、fastcgi は別の方法である tcp 通信を使用します) このプロセスは、リクエストを受信した後に処理し、結果を Web サーバーに返し、最後に終了せずに次のリクエストの到着を待ちます。 gFastcgi と CGI の違いは次のとおりです。



Cgi 読み取りパラメータを処理するための新しいプロセスをフォークし、データを処理して、ライフサイクルを終了します
高速CGI
tcp を使用して、リモート マシン上のプロセスまたはローカル プロセスとの接続を確立します。tcp ポートを開くには、ループに入り、データの到着を待ち、データを処理します

🎜🎜🎜。


例: サーバーには 100,000 の単語があり、クライアントは毎回文字列を送信し、この文字列の前に付けられる単語の数を尋ねます。 その後、トライ ツリーを構築するプログラムを作成すると、ユーザーがリクエストするたびにトライを直接検索できるようになります。 ただし、CGI を使用すると、このリクエストの後にトライが失われ、次回プロセスを開始するときに新しいトライ ツリーを作成する必要があります。これはあまりにも非効率です。 fastcgi メソッドを使用すると、このレッスンのトライ ツリーはプロセスの開始時に確立され、後でトライ ツリー上の指定されたプレフィックスを直接クエリできます。

select、pol、epoll の違い 選択

select は 1983 年の 4.2BSD で初めて登場しました。select() システムコールを通じて複数のファイル記述子の配列を監視します。select() が返されると、配列内の準備済みのファイル記述子がカーネルによって使用されます。これにより、プロセスは後続の読み取りおよび書き込み操作のためにこれらのファイル記述子を取得できるようになります。

select は現在、ほぼすべてのプラットフォームでサポートされており、優れたクロスプラットフォーム サポートも利点の 1 つです。

select の欠点の 1 つは、単一プロセスが監視できるファイル記述子の数に上限があることです (Linux では通常 1024 です)。ただし、この制限は、マクロ定義を変更するか、カーネルを再コンパイルすることによって増やすことができます。 。

さらに、多数のファイル記述子を格納する select() によって維持されるデータ構造は、ファイル記述子の数が増加するにつれて、コピーのオーバーヘッドも直線的に増加します。同時に、ネットワーク応答時間の遅延により、多数の TCP 接続が非アクティブになりますが、select() を呼び出すとすべてのソケットの線形スキャンが実行されるため、ある程度のオーバーヘッドも無駄になります。

アンケート

poll は 1986 年の System V Release 3 で誕生しました。本質的には select とあまり変わりませんが、poll にはファイル記述子の最大数に制限がありません。

ポーリングと選択には、多数のファイル記述子を含む配列が、これらのファイル記述子の準備ができているかどうかに関係なく、ユーザー モードとカーネル アドレス空間の間で全体としてコピーされ、そのオーバーヘッドが数に応じて増加するという欠点もあります。ファイル記述子の数は直線的に増加します。

さらに、select() と poll() が準備ができたファイル記述子についてプロセスに通知した後、プロセスがそれらに対して IO 操作を実行しない場合、これらのファイル記述子は次回 select() と poll() のときに再度報告されます。と呼ばれるため、通常、このメソッドはレベルトリガーと呼ばれます。

エポール

カーネルによって直接サポートされる実装メソッド、つまり epoll が登場するまでは、これまでに述べたほぼすべての利点があり、マルチチャネル I/O 対応通知として最もパフォーマンスが高いと認識されています。 Linux 2.6 の方法。

epoll は、水平トリガーとエッジ トリガー (エッジ トリガー) の両方をサポートできます。これは、どのファイル記述子が準備完了したかをプロセスに通知するだけであり、アクションを実行しない場合は、再度通知されません。この方法はエッジ トリガーと呼ばれます)、エッジ トリガーのパフォーマンスは理論的には高くなりますが、コードの実装は非常に複雑です。

epoll は、それらの準備完了ファイル記述子のみを通知します。準備完了ファイル記述子を取得するために epoll_wait() を呼び出すと、実際の記述子ではなく、準備完了記述子の数を表す値が返されるだけです。 epoll で指定された配列から対応する数のファイル記述子を順番に取得します。ここではメモリ マッピング (mmap) テクノロジも使用されており、システム コール中にこれらのファイル記述子をコピーするオーバーヘッドが完全に排除されます。

もう 1 つの重要な改善点は、epoll がイベントベースの準備完了通知メソッドを採用していることです。 select/poll では、カーネルはプロセスが特定のメソッドを呼び出した後でのみ、監視されているすべてのファイル記述子をスキャンします。一方、epoll は、事前に epoll_ctl() を通じてファイル記述子を登録します。特定のファイル記述子の準備が整うと、カーネルはコールバック メカニズムを使用します。このファイル記述子を迅速にアクティブにするコールバックに似ており、プロセスが epoll_wait() を呼び出したときに通知されます。

Memcache と Redis の違い

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1057281.html技術記事 PHP インタビューの概要、PHP インタビューは 8 月 15 日から今日まで、1 月以上にわたって北京に来ました。この間、筆記試験と面接の準備をして、大小合わせて10社以上面接を受けました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。