ホームページ >バックエンド開発 >PHPチュートリアル >2016 年の 360 Company PHP サーバー開発の筆記試験と面接からの洞察
これは、360 Company での筆記試験と面接に参加するプロセスを説明する記事です。もしかしたら、あなたが面接を受けているポジションはあなたの勉強の方向性ではないかもしれませんが、そこから何かを学ぶことができれば、または私のレッスンから学ぶことができれば幸いです。そうすれば、著者は非常に満足するでしょう。 「他の人が失敗した方法を学び、生き残った人だけが成功できる」という目標に沿って、第 1 部: 企業の筆記試験 360 問
第 2 部: 面接プロセス
第 3 部: 注意すべき点と の 3 つの側面から説明します。私の経験です
同時に、私がとても憧れていた360カンパニーに心から感謝します。インタビューしてくださったお兄さんにも本当に感謝しています、本当に勉強になりました。すべての質問の著作権は360にあります。不適切な内容があれば、削除または修正するようお知らせください。要するに、私は次のように考えています。常に他の人の成功例を見るよりも、他の人の失敗例を理解する方が役立つ場合があります。以下の私の学部プロジェクトを読めば、なぜ私がこの会社をそれほど賞賛しているのかがわかるでしょう。
ダウンロードアドレス: http://download.csdn.net/detail/eastmount/8591789
面接時間: 9月16日2015
面接ポジション: PHP サーバー開発エンジニア
求人要件: PHP/Python 言語構文に精通し、MySQL をマスターし、Redis や MongoDB などのさまざまな DB の基本を理解し、HTML/CSS をマスターするなど。
。 PS: 質問は当時のトピックをやりながら原稿用紙に写したものなので、抜けているところがあるかも知れませんが、ハイハン〜 (1) 四肢選択問題:
1.MYSQL ストレージプロシージャの利点:
あるあるあるある ある Option は複数回呼び出して変更することができ、ネットワーク負荷が軽減されます
2. /etc/my.conf ファイルがどのパッケージに属しているかを確認し、次を実行します:
A.rpm -qf /etc/ my.conf B.rpm -q /etc/my.conf
C.rpm -q | grep /etc/my.conf D.rpm -requires etc/my.conf
解決策: この質問は Linux を調べます。答えはAです。その中には -f クエリ パッケージ所有ファイル、競馬ネットワーク:
-ivh: インストールの進行状況を表示します--install--verbose--hash
-Uvh: ソフトウェア パッケージをアップグレードします--更新
-qpl: RPM を一覧表示します。ソフトウェア パッケージ ファイル情報 [パッケージ リストのクエリ]; -qpi: RPM パッケージの説明情報を一覧表示します [パッケージのインストール パッケージのクエリ] -qf: 指定されたファイルがどの RPM パッケージに属しているかを検索します [ファイルのクエリ];
-Va : すべての RPM パッケージを確認し、失われたファイルを検索します。 $ が定義されていません myvar
C.2 C.2 D. エラー、a::$myvar が定義されていません
<?php class a{ function a($x=1) { $this->myvar=$x; } } class b{ var $myvar; function b($x=2) { $this->myvar=$x; parent::a(); } } $obj=new b; echo $obj->myvar;?>解決策: 回答 A. 参考
<?php header("content-type:image/jpeg"); $img=imagecreatefromjpeg("images/scce.jpg").imagejpeg($img); imagedestroy($img);?>
15.HTML5中,input元素type属性默认值为:
A.search B.hidden C.text D.form
题解:默认应该是text
16.下列代码的输出结果是:
A.24 B.17 C.72 D.36
d=lambda p:p*2t=lambda p:p*3x=2x=d(x)x=t(x)x=d(x)print x题解:感觉lambda表达式替换 2*2=4 4*3=12 12*2=24,应该输出A。Right?
36.下列可作为对象继承之间的转换的是:
A.static_cast
B.dynamic_cast
C.const_cast
D.reinterpret_cast
题解:答案B。
dynamic_cast:在基类和派生类之间的转换,继承体系安全向下转型或跨系转型,找出某对象占用内存的起始点。static_cast:同旧式C转型,如int 到double。const_cast:常用于去除某个对象的常量性。reinterpret_cast
不具备移植性,常见用途是转化函数指针类型。
37.下列是获得实例化对象所属类名字的函数是:
A.get_class_methods()
B.get_class()
C.get_classname()
D.get_object_vars()
题解:答案B。PHP中没有get_classname()函数,其他如下:
get_class ? Returns the name of the class of an object
get_object_vars ? Gets the properties of the given object
get_class_methods ? Gets the class methods' names
(二) 编程题:
1.计算器的新功能
可视化程序设计一个新功能的计算器,输入一个数时,能将这个数分解为一个或多个素因子乘积的形式,并按素因子的大小排列显示出来,0-9这十个数字表示如下:每个数字占5*3大小的字符区域。
输入:多组测试数n(n<=1,000,000)
输出:每个数分成若干个素数乘积形式,从小到大输出。素因子之间用"*"形式连接。
例:
输入:
10
2
输出:
- - | | - * - | | - - - | - | -首先需要计算素数组成,然后难点是怎样将数字一次性从上往下显示出来。
面试时间:2015年10月9日
面试部门:服务器端开发
面试地点:360大厦
面试时长:100多分钟
PS:过程中可能存在一些遗漏的地方,但是还是非常感谢那个面试的哥哥,今天都还觉得给人很舒服的感觉。同时因为间隔时间太长,最近也太忙,不准备采用对话方式进行,而是分几个步骤进行简单叙述。
第一部分 自我介绍
1.首先简单问候面试官并递上自己的简历,然后做个自我介绍;
2.面试官通过我的简历,让我介绍自己最拿得出手的项目,我介绍的是知识图谱相关的项目,包括:传统搜索引擎的工作原理、知识图谱概念(举例姚明身高、梁启超关系查询)、实体消歧与实体对齐、采用的VSM向量模型及聚类算法;
3.面试官问我该阶段主要熟悉什么语言?我说现在做得最多的是Python,以前是C/C++,当然Java、C#、PHP都做过,毕竟语言都有通性,但是想精通还是难。
4. 彼は、PHP は基盤となるサーバーの分野にあると言い、主に Unix 関連の知識について尋ねました。PHP はいくつかのオープンソース フレームワークを通じて実装できるため、私もこの意見に同意します。 WAMP ウェブサイトで作成したいくつかの質問について質問しました。 1. 面接官は最初に、私が UNIX 関連のことをしたことがあるかどうかを尋ねました。 Linux 上で Python クローラーとスクリプトを実行しただけだと言いました。
2. 次に、Unix でのネットワーク プログラミングを知っているかどうか尋ねました。 PythonのネットワークプログラミングTCPUDPのプロセスを簡単に紹介しましたが、主なプロセスは次のとおりです。同時に、他のSocket言語のプロセスも基本的に同様です。
ss.bind ()# ソケットにアドレスバインドします
SS.Listen ()#
= ss.accept( )#クライアント接続ブロッキングタイプ:プログラムは、
のsのsを接続する前に停止状態にあります。 's を使用するには、's' を使用してサーバーに接続してみます
use with through using ''s ' through 's ' through ‐ ‐ ‐‐ ‐‐‐‐ #クライアントソケットを閉じる # クライアントソケットを閉じます # クライアントソケットを閉じる 例外が発生します。サーバーはこの例外をどのようにキャッチしますか。そこで私は、クライアントから一定時間メッセージが届かない場合、切断や異常エラーとなる時点(ハートビート)をサーバー側で設定できるようにすることを提案しました。彼は私に、このrecv()関数を書いてもいいかと尋ねました。私はそうではないと言いました。
P.S.しかし、私が Unix でのネットワーク プログラミングを知らないのは事実です。
4. インタビュアーは Unix におけるフォーク関連の知識についてさらに質問しましたが、私はその知識に触れたことはないと答えました。私の英語が下手すぎて、何なのかわからない英語もあります〜
: ”””””” 「――はい、でもかなり忘れてしまいました。」 確かに基礎的な知識をたくさん忘れていて、答えられるか心配です。
2.面试官给我一张纸,有两段很长的代码(C语言),让我寻找两代码的区别。
这两段代码的主要区别就是参数一个是int,一个是double,当然前面还定义了些结构,代码里面的内容基本类似,相当于一个int型排序,一个double型排序。
他问我平时肯定会遇到这种情况,写两个函数代码过于冗余,怎样提炼成实现两种不同的类型排序,而且类型可以是float、结构体等等。
我说这有点类似于C++的模板啊!如果是C++就简单了,但是C语言主要是怎样判断这个类型呢?
PS:后来回来想了想,感觉类似于qsort快速排序的那种写法,通过const void *a实现,不知道是不是。但有同学怀疑是不是考察##的连接用法。
int型快排
int cmp1(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
qsort(num, len, sizeof(int), cmp1);
double型快排
int cmp(const void *a, const void *b)
{
return *(double*)a > *(double*)b ? 1 : -1;
}
qsort(num, sum, sizeof(double), cmp);
char型快排
int cmp(const void *a, const void *b)
{
return *(char*)a - *(char*)b;
}
qsort(str, sum, sizeof(char)*10, cmp);
3.上面代码没有写出来,那么你就做个最简单的吧!二叉树中序遍历非递归实现。
他又问我以前是怎么做的?我说通常都是三句话递归,这个题主要是考察通过栈模拟二叉树遍历递归的过程,然后写代码中。我失误了,栈写成队列了,然后队列是先进先出,又通过两个队列(一个输入队列、一个输出队列)模拟了一个栈实现了非递归遍历。
中序遍历:左孩子-根节点-右孩子,总体代码如下。参考
递归代码
void inOrder1(BinTree *root) //递归中序遍历{ if(root!=NULL) { inOrder1(root->lchild); cout<<root->data<<" "; inOrder1(root->rchild); }}
非递归遍历
根据中序遍历的顺序,对于任一结点,优先访问其左孩子,而左孩子结点又可以看做一根结点,然后继续访问其左孩子结点,直到遇到左孩子结点为空的结点才进行访问,然后按相同的规则访问其右子树。因此其处理过程如下:
对于任一结点P,
1)若其左孩子不为空,则将P入栈并将P的左孩子置为当前的P,然后对当前结点P再进行相同的处理;
2)若其左孩子为空,则取栈顶元素并进行出栈操作,访问该栈顶结点,然后将当前的P置为栈顶结点的右孩子;
3)直到P为NULL并且栈为空则遍历结束
void inOrder2(BinTree *root) //非递归中序遍历{ stack<BinTree*> s; BinTree *p=root; while(p!=NULL||!s.empty()) { while(p!=NULL) { s.push(p); p=p->lchild; } if(!s.empty()) { p=s.top(); cout<<p->data<<" "; s.pop(); p=p->rchild; } } }如下图所示:
2.然后又问我有什么问题,我说想自己实现个小的搜索引擎系统;他给我分析了硬件设备、分词、索引、倒排序、Rank、推荐系统等等知识。
3. 結局、外に出て15分ほど待ってもらいました 結局、その日は忙しかったらしく、方向性が合わず断られました。しかし、私は彼から多くのことを学べたことにすでに満足していますが、その一方で、私は無作為に PHP の方向に応募し、面接を受けることができなかった自分自身の欠点にも深く気づきました。私がこの方向に応募したことを知っています。
3。学校に戻る前に、798アートファクトリーのすぐ隣に360カンパニーがあるので、3時間以上行ってきました。次のような内容を書いてください:
1. ソケット通信、TCPUDP、同期および非同期ソリューション。
2. バイナリ ツリー トラバーサル (非再帰を含む) を含む、基本的なアルゴリズムとデータ構造の質問、クイックソート(手書きコード)、リンクリストフリップなど
3. プロセスとスレッドの違い、スレッドについて記述したかどうか、同期、相互排除、その他の問題を解決する方法
4. プロキシなどのデザインパターン。モード (画像閲覧サムネイル)、ファクトリー モード、オブザーバー モデルなど
6. バックエンド開発でよくある質問UnixLinux + C 言語 + ネットワーク通信の知識について質問します
7. Python は、クローラー、正規表現、オープンソース フレームワーク Spider、Docker、スレッド通信などについても質問します
著作権声明: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。