最終更新日:2019/10/25
2019/08/21 - カタログを更新しました
2019/09/05 - 9台追加
2019/09/21 - 著者情報を更新
2019/10/11 - プラス顔経10本を更新しました。
2019/10/25 - アリババダモアカデミーの更新
1. Huawei、DJI、Toutiao、Alibaba、Baidu、Alibaba、Tencent、JD.com、Xiaomi の全体概要
2. 2020 年テンセント コンピュータ ビジョン アルゴリズム インターンシップ面接 (学士号および修士号 985 名以外の修士号)
3. Baidu Computer Vision サマーインターンシップ面接
4. JD Computer Vision インターンシップ面接
5. Oppo は C++ の面接を事前に承認します
6.美的はPythonデータマイニングエンジニアを事前に承認します
7. Momo Technology の画像アルゴリズム インターン
8. Baidu のフロントエンドの 3 つの側面
9. カンブリアン: 深層学習エンジニア
10. ホームページ 2019.7.24
11.百度
12. テンセント
13. ピンドゥオデュオ2019.8.13
14. モグストリート 2019.8.14
15. NetEase Interactive Entertainment ゲーム開発
16. 360検索(ランキング) - 機械学習エンジニア
17. NetEase Internet: 深層学習エンジニア
18. SF Express sp、ihandy 牛のお客様向け特別販売
19.ディディニウケspスペシャルセッション
20.クアイショウニウケspスペシャルセッション
21. イトゥ
22. テンセント
23. ビジョン
24.百度
25. 総合
26.オッポ
27.同市内58か所
28. ファーウェイ
29. アリババダモアカデミー
注意事項
私は学士号と修士号を 985 点持っています (学校の成績は下位です)。私はコンピューターの出身ではなく、関連する履歴書プロジェクトに携わったことがありますが、上司が主導してくれました。いくつかのコンテスト。
Tencent コンピュータ ビジョン アルゴリズムの求人
どの面接が行われたかに関係なく、面接内容の全体的な思い出
どの面接であっても、必ず最初に自己紹介をし、自分の長所を 1 分間説明し、時には短所についての自分の意見を簡単に述べます。
関連するインターンシップに参加したことがありますか、どのようなプロジェクトに参加しましたか、何試合プレーしましたか、どのポジションでプレーしましたか? 私がよく知っているゲームを中心に、アルゴリズムの原理とゲーム結果の分析を詳しく説明します。次にそのゲームをプレイする場合、どうすれば順位を上げることができます。ゲームをプレイすることで得られるものは何ですか?産業研究と科学研究の違いは何だと思いますか?
普通の 985 修士号ですが、社内推薦なしで、Baidu CV のサマー インターンシップのオファーを受けました
それほど難しいことではありません。面接官はとても親切で、3 ラウンドの面接があり、履歴書ベースのプロジェクトがあり、その後拡大を開始します。
概要: 私の兄は、一般的な画像処理アルゴリズムの基礎となるアルゴリズム、データ構造、決定木、および実装方法の研究に焦点を当てることを提案しています。
概要: 基本的に、双方の質問はすべてプロジェクトに関するもので、その他の質問は、プロジェクトの問題を解決し、エラーを分析するためのアイデアに重点を置くものです。
要約: 面接官は比較的プロフェッショナルで、わかったふりをしないでください。
作者: 妹を越えてこれを転送してください
著者:水易水
1. 自己紹介の回答:定型業務の波、基本情報+技術力+ソフトパワー。
2. 参加したコンテストやプロジェクトについて教えてください。 回答: ポスターはコンテストについて話していました。
3. 画像モデルには一般的に何が使用されますか? 回答: 投稿者は、主にディープ ニューラル ネットワークを使用しており、あるプロジェクトについて話していると述べました。
4. 深層学習または機械学習についてどのようなモデルを知っていますか? 回答: 元の投稿者は、深層学習によるプロジェクトで resnet について言及しました。機械学習では、コンテストでは一般的に lgb と xgb が使用されます。私も以前のコンテストで lsmt や rnn などを使用しました。この種の競争には自然言語の方が適しています。
5. どのようなデータベースを使用しましたか? 回答: あまり使用していませんが、AWS の RDS データベースを使用しましたが、SQL ステートメントはすべて学習しました。
6. SQL を使用して実装する方法を教えてください。 答え: 挿入して更新します。
7. 今言ったことは 2 つのステートメントですが、それを 1 つのステートメントで実装するにはどうすればよいですか? 回答: しばらく頭が真っ白になって、何も考えていませんでした。インタビュアーは、「あなたはあまり使用しないかもしれない」と言いました。私は「はい、データベースは通常大きくないので、ステートメントの数の要件はそれほど厳しくありません」と答えました。
8.主に何語を話しますか?パイソン? 回答: そうですね、私は最近 Python を使用していますが、登録したばかりのプロジェクトは実際には C++ で行われました。
9.主にどのような Python パッケージを使用しますか? 答え: Sklern、numpy、pandas、そして matplotlib を使って絵を描いていましたが、しばらくの間はだるくて他に何も考えられませんでした。
10.パンダのインデックスは何に使用されますか? 回答: データは調整されており、データベースの主キーに似ています (うまく答えられなかったと思います。面接官がそれに気づいたかどうかはわかりません...)
11.何か質問はありますか? 回答: このポジションには高度なエンジニアリング スキルが必要ですか?それとも高度なアルゴリズム能力が必要なのでしょうか?インタビュアーは、私について行かなくてもいい、と言いました。私はそのグループから面接を受けるように手配されただけです。著者は少し恥ずかしさを感じました。その後、インタビュアーは、とにかくアルゴリズムを実装する必要があると言いました。 次に、投稿者は別の質問をしました。つまり、ポジションに応募するときに、グループ IT 部門と美雲インテリジェント データの 2 つの部門があることがわかりました。この 2 つの部門でこのポジションに就くことに大きな違いはありますか?インタビュアーはしばらく答えた。 。 。
作者: エタニティY
著者:シャオアン、走れ! !
(1) WeChat Mini ProgramとVueの違い(WeChat Mini Programを作るプロジェクトがあるため)
(2) vuex Vue コンポーネント間の通信原理
(3) ES6 のよく使われる新機能
(4) マップとセット構造
(5) 非同期リクエスト Promise と Async の待機
(6) 等分割の原理を使って三角形を描く
(7)扇形を描く
(8) アニメーション実装アニメーションとrequestAnimationFrame
(9) プリリクエストオプションフェッチリクエストについてご存知ですか? クロスドメイン
(10) ウェブセキュリティ
(11) 画面上の物理ピクセルと 1px などの論理ピクセルはどれくらいの大きさですか?
(12) ボックスサイジング属性
(13) TCPとUDPの違い
(14) 二分木のトラバーサルを理解していますか?プリオーダートラバースを使用してトラバースする方法。 。 。
(1) プロジェクトの紹介で、Balabal は遭遇した困難について多くの質問をしました (解決策は setTimeout を使用したため、次の Promise と Async/await が拡張されました)
(2) ES6の特徴とES6の配列方式の違い
(3) Set構造体のキー値はどうなっているのか(不明)
(4) Set 以外に配列の重複を排除する方法はありますか?
(5) 非同期操作とは何ですか? Promise と Async/await
(6) Promise を使用して Ajax リクエストをカプセル化し、このメソッドを呼び出して .then() を通じてリクエストされたデータを取得します。
(7) リクエストの送信方法にはどのようなものがありますか?アヤックスなど
(8) クロスドメイン: なぜクロスドメインがあるのでしょうか?同一生成元ポリシーとは何ですか?クロスドメインの問題を解決するにはどうすればよいですか? 親ドメインとサブドメイン間でリソースを共有できますか?
(9) 携帯端末プロジェクトをやったことがありますか? (やったけど忘れてた) モバイル端末への適応方法
(10) モバイル端末のスワイパーとアニメーション(自分用に穴を掘りました。もともと気軽に話したかったのですが、モバイル端末での活動がメインであることが判明しました) 上にスライドして次のページを表示する効果を実現する方法スワイパープラグインを使わずに?モバイルで利用できるイベントは何ですか?
(11) ページURLパラメータの取得方法
(12) イベント委任メカニズム
実際、二次面接では主に履歴書に書いたことや、回答に含まれる知識をもとに質問されます。
(1) プロジェクトの背景、実施理由、実施効果、直面した問題点などの観点からプロジェクトを紹介します。長く話していると言葉が足りなくなり、うまく説明できなくなったので、話題を変えました。
(2) フロントエンドを学び始めたのはいつですか。なぜ常にフロントエンドの方向にこだわるのですか。
(3) ファーウェイでのインターンシップ中に他にどんなことをしましたか?
(4) ファーウェイでのインターンシップから何を学びましたか?あなた自身の能力にはどのような改善がありましたか?
(5) フロントエンドを学ぶ理由とフロントエンドの理解。
(6) 学校から企業インターンシップへの移行は何ですか?
(7) あなたは今、どんな新しいことを学んでいますか? (いいえ、基礎知識を見ています) それでは、どのような知識と応用シナリオの例を示します。
(8) なぜ 3 つの主要なフロントエンド フレームワークがあるのですか?彼らはどんな問題を解決するのでしょうか?
(9) どのようなプレッシャーに遭遇しましたか、そしてどのようにそれらを解放しましたか?
(10) どのような困難に直面し、どのように解決されましたか? ? (同僚にアドバイスを求める) どのようにコミュニケーションを取り、アドバイスを求めるか?
(11) 自分にはどんな欠点があると思いますか?実務経験の不足について話しています(それは良いことではないようです)
(12) 基礎を築く間に新たに学んだ内容は何ですか? ES6 構文、Web セキュリティ。 。 。次に、Web セキュリティについて詳しく説明しました。もう一度尋ねます: XSS 攻撃は検出が困難です。この問題をどのように検出すればよいでしょうか? 。
(13) 将来のキャリアプラン
(14) どのような背景言語に触れてきましたか?
(15) これまでに他の企業と会ったことがありますか?
(16) 現在、他のオファーを受けていますか?
(17) フロントエンドの知識を普段どのように学んでいますか?
(18) インターンシップの時間はありますか?時間がないので、最終エッセイを書かなければなりません
(1) フロントエンドの今後の発展の見通しは何だと思いますか?
(2) 部門、事業、技術スタックについて質問。
リンク: https://www.nowcoder.com/discuss/231656
2019.7.16: 電話インタビューにより、プロセス全体を通じてバフが中断されました
1.自己紹介
2. Python と C++ の違い (多くの Python の機能に答えました)
3. Python はなぜ遅いのですか?
回答: データの種類がわからないため、データを取得するときに判断する必要があります。
(1. Python は動的に解釈される言語です。Python の値はキャッシュに保存されず、オブジェクト内に分散されます。
2. Python はインタプリタ言語です。C++ や Java とは異なり、C++ と Java は両方ともコンパイル済み言語です。つまり、Java プログラムを作成した後、まずソース プログラムをコンパイルして、実行可能ファイルとクラス ファイルを生成する必要があります。 Python でプログラムを作成し、インタープリターに送信すると、インタープリターはコードの最初の行をすぐにマシンコードに変換し、このコード行を CPU に渡して実行し、次の行に進み、2 行目を変換します。そのため、Python はコンパイルされた言語よりも実行が遅くなります)。
3. どのような本を読みましたか (答え: Python 高性能プログラミング)
4. メモリリークとは何ですか?メモリリークはいつ発生しますか?
削除されていません。
(動的に適用されたメモリ空間は正常に解放されませんが、継続して使用することはできません。メモリは解放されません)
5. プログラムを終了するという言葉は何ですか?
分からない!
(プロセスを閉じるためかもしれませんが、わかりません)
6. 指示と参照?いつポインターを使用し、いつ参照を使用するのでしょうか?
(ポインターを初期化する必要はありませんが、参照は初期化する必要があり、バインド後に変更することはできません。関数にポインターを渡すことと、ポインターに参照を渡すことの違いは次のとおりです。
ポインタを渡すときは、最初にポインタがコピーされます。コピーされたポインタは、元のポインタと同じアドレスを指します。コピーされたポインタが関数内の別の新しいオブジェクトを指している場合は、そのポインタは使用されません。元のポインタに影響します。
ポインタ参照を渡す場合、渡されたポインタが新しいオブジェクトを指している場合、元のポインタも新しいオブジェクトを指しているため、メモリ リークが発生します。元のポインタが指している場所は、たとえ次の場合でも参照できなくなるためです。渡されたポインタが新しいオブジェクトを指すことはありませんが、関数が終了するとポインタは解放されます。元のメモリが解放されているため、元のポインタは関数の外で使用できなくなります。
7. これらのデータ構造を知っていますか?
答え: ヒープ配列リストスタック
8. ヒープとは何ですか?
回答: 通常、配列はヒープをシミュレートするためにのみ使用されます。実際の構造はわかりません。これは、親ノードと子ノードの状態のデータ構造であると考えられます (通常、割り当てと解放が行われます)。プログラマーによって。プログラマが解放しない場合、プログラムの終了時に OS (オペレーティング システム) によって再利用される可能性があります。割り当て方法は、プログラムの実行中にスタックが分割されて開かれることと同様です。カーネルは、リンクされたリストに沿ってプログラムに与えるのに十分なスペースを見つけます。見つからない場合は、不要なメモリを破棄し、再度検索します。詳細については、適用方法を含め、自分で要約して頻繁に確認してください。 、システム応答など)
9. ヒープとスタックの違い
スタックは物を格納するための空間で、最内周に格納され、最外周から出てきます(超高周波問題で、関数実行時に割り当てられ、関数終了時に解放されます。)によって自動的に割り当てられ、解放されます。コンパイラは、関数の実行に割り当てられたローカル変数を保存します。関数のパラメータ、戻りデータ、戻りアドレスなどは下向きに開かれ、ローカルのパフォーマンスが良好であれば、レジスタと対話して保存します。 PC ポインタ。関数パラメータが多い場合はスタック フレームを形成し、スタックに格納されます。
10. プロセスとスレッド
(超高周波問題、コンピュータシステムを深く理解した後で要約を読みました: 1. プロセスは生きたプログラムです。プログラムは単なるテキストです。実行中のプログラムはプロセスであり、プロセスの基本単位です)システム内のリソースのスケジューリングと割り当てをマスターします。メモリなどのリソース。スレッドは軽量のプロセスであり、CPU のスケジューリングとディスパッチの基本単位です。2. プロセスがリソースを占有するため、スタックのプッシュとポップが遅くなります。したがって、切り替えは柔軟ではなく、スレッドはリソースを占有せず、必要なリソースのみを占有するため (再帰ではスタックにプッシュする必要があるため、リソースがいくつかあります)、スレッド間の通信が容易です -> プロセスによって割り当てられたメモリ内で直接通信します、同時実行が容易 -> 柔軟な切り替え、同じ プロセスのスレッド切り替え速度が非常に速いため、スレッドのオーバーヘッドが小さい 3. アドレス空間、プロセスの独立性、同じプロセスのスレッドはリソースを共有し、他のプロセスのスレッドから独立しています。他のプロセス)
イベント後のまとめ: 明らかに失敗しましたが、アルゴリズムに取り組む人はバックエンドのことも理解できるようになりました。 アルゴリズム分野のエンジニアは有能になることが求められます。
宿題の手伝い
片面90分
最初に 2 つの質問をしてください。
1. 配列から 3 つの数値を見つけ、3 つの数値の合計と値の差が最小になります。
所要時間 O(n2) スペース O(1)
私の書き方はソート+ダブルポインタです。これはleecodeの元の質問ですが、幸いなことに解決策は同じです。
クイックソートを使用してソートをリクエストする
2. 文字列 A、B、および B は、A の最も短いサブシーケンスを占めます (A の最も短いサブシーケンスには B が含まれます)。
Python のスライス + in 演算子が 4 行で終わったため、インタビュアーも私も笑い、インタビュアーも笑ったので、in ステップの関数を自分で書くことに同意しました。
暴力はすべての付加機能を解決します
1. Kaggle コンペティションの概要 (EDA から最後まで)
2. ID3C4.5 などの基本ツリーはバイナリ ツリーですか、それともマルチ ツリーですか。カットされたフィーチャは再度カットされますか?
離散フィーチャ (離散フィーチャの数 > 2) はマルチブランチ分類であり、連続フィーチャはバイナリ分割です。実装するには、まずコレクションを作成し、フィーチャを走査して保存します。最大の情報ゲイン位置を設定し、セグメント化した後、このフィーチャをセットから削除します。これにより、連続フィーチャは再度切り取られるようになりました。 、「他の人の ID3 ツリーと他のツリーのソース コードを見てみる」に進みます)
3.BNの紹介
(超高頻度の質問が多数紹介されています。機械学習の本質は分布、特に対数損失を学習することであり、これはクロスエントロピーの最適化に相当し、クロスエントロピーは分布の一貫性を測定するために使用されます)。 1. 事前ホワイトニング、高速トレーニング、シグモイドの両端の小さな飽和勾配、BN を線形領域にスケーリング可能 2. 分布学習、NN が深くなると各層の分布がシフトし、BN 圧縮分布各層の分布が同じ 3 に近づくと、BN はある程度のデータ拡張と見なすことができ、BN トレーニング プロセス中にデータがジッターすることに注意してください。現在のバッチが正規化され、データ全体が変化することに注意してください。予測に使用され、BN 層には最適化される 2 つのハイパーパラメータがあります) 4. GBDT と RF のどちらのツリーが深いですか?
RFは深い。ブースティングとバギングのアイデアについて話しました。 Boost は偏差をフィッティングするために低分散学習器を使用するため、XBG と LGB にはツリーの深さのパラメーター設定があり、RF はサンプルと特徴を切り取って多様なサンプル セットを構築し、各ツリーは枝刈りも行われません。
5. XGB 機能の重要性はどのように判断されますか?
回答: よくわかりませんが、分割ポイントの数 (すべてのツリーでの出現数) に基づいていると思います。
(ゲイン ゲインとは、モデル内の各ツリーの各フィーチャの寄与を考慮して計算された、モデルに対する対応するフィーチャの相対的な寄与を意味します。他のフィーチャと比較してこの測定値が高いほど、予測の生成において重要であることを意味します) 。
cover カバレッジ メトリックは、この機能に関連する観測値の相対数を指します。たとえば、100 個の観測値、4 つのフィーチャ、および 3 つのツリーがあり、フィーチャ 1 を使用して、ツリー 1、ツリー 2、およびツリー 3 のそれぞれ 10、5、2 つの観測値のリーフ ノードが決定されるとします。この関数のカバレッジは 10 5 2 = 17 の観測値となります。これは 4 つの機能すべてに対して計算され、すべての機能のカバレッジ メトリックを 17 のパーセンテージとして表します。
freq 頻度 (頻度) は、モデル ツリー内で特定のフィーチャが発生する相対回数を表すパーセンテージです。上の例では、フィーチャー 1 がツリー 1、ツリー 2、およびツリー 3 のそれぞれで 2 つの分割、1 つの分割、および 3 つの分割で発生する場合、フィーチャー 1 の重みは 2 1 3 = 6 になります。特徴 1 の頻度は、すべての特徴の重みに対するその重みの割合として計算されます。 )
6. XGB は回帰と二値分類を理解するのが簡単です。 多分類を理解するにはどうすればよいですか?
おしゃべりして笑いながら、冒頭のラベルエンコードはonehot+softmaxを使って答えましたが、各ツリーをsoftmaxの一歩手前でどうやって当てはめるのか。私はそれを本当に知りませんでした。面接官は 100 本の木を建てるか、300 本の木を建てるかの 3 つのカテゴリーについて話しました。私はそれに気づき、100 本の木だと思いましたと答えました。
インタビュアーは、300 個のツリーを構築し、3 つのカテゴリに適合させてからソフトマックスを行うと言いました。
(onehot の後、入力ラベルはベクトルになり、ツリーのグループがベクトル内の予測ポイントごとに統合されます)
双方55分
1. まず、あなたが NLP を専攻しているかどうかお聞きします。
いいえ、アルゴリズムの方向では、研究室プロジェクトについて話し、多くの画像の NN アルゴリズムを使用します。
2. 3 つの質問
質問 1: K 番目に大きい数
3つの方法が議論されました
方法 1: ヒープソート分析の複雑さは O(Nlogk) (分析は正しい)
方法 2: クイック ソート バイナリ分析の複雑さは O(N)
方法 3: ルックアップ テーブル分析の複雑さを並べ替える (NLogN)
要件は O(N) なので、2 つの点でクイック ソートを使用しました。面接官は、クイック ソートでこの問題を解決できると言いました。しかし、クイックソートは最速(私が知っている)であり、まさに必要なo(n)の複雑さです。
(Baiduを検索した後、クイックソートとハッシュは最速ですが、残りは高速ではありません)
Pythonコードを手作業で書いたが、IDEが何が問題になったのかわからなかった。だから私は次の質問をC ++に書くべきだと言った(これは問題は非常に深刻だ。インタビュー中にバグを見つけることができなかったので、Pythonに注意してバグがないことを確認する必要があります。常にC ++を使用してください)
2番目の質問:
フロアN 3、板1 3、いくつかのアレンジメント
dp [n] = dp [n-1]+dp [n-3]
質問 3:
等しい確率1-7
等しい確率1-10を作成し、予想される呼び出し数を分析します1-7
7ベース、2回電話して0-48を生成し、40以降を40以上、// 4 1を切り捨てます
予想を計算するのは簡単ではありません。
それについて考えて、インタビュアーはプレッシャーにさらされていたので、インタビュアーが言ったように、私はそれがO(nlogn)の代わりにO(n)である理由を分析し、その後、部分的な並べ替えがこの問題を解決できる理由を彼に説明しました。 。
非常に効率的で、履歴書を提出した翌日に面接を受けました。
最初のインタビューは非常にスムーズに進み、2回目のインタビューは100分間続きました。
片側:それは非常に滑らかだったので、私は自分のノートに何も録音しませんでした。 最初の質問lis:私はこの質問のすべての要件を尋ねた後、最適な状況を黙って書き留めてから、この結果が正しい理由を説明しました。 n^2)書き込み方法。 2番目の質問を忘れたので、1分で双方を終了しました。それらはすべて未解決の質問です。標準的な答えはありません。期間は100分で、コンテンツは主に実際の推奨シナリオと競争に関するものです、各段階での仕事、そして各段階での仕事、私の精神的な旅について話しました。 (そうです、インタビュアーが聞きたいのは、おそらくさまざまな段階での私の仕事、私が遭遇した問題、問題に対する私の思考、解決策です)検索結果に対するユーザーの満足度をどのように測定すると思いますか? 南。私は南すぎます。しかし、ビデオの長さのパーセンタイルタイミング、秒の有効性などを使用したビデオシーンなど、TCP接続のタイミング、シーンに応じたタイミングノイズのフィルタリングについて話しました。インタビュアーはこれに満足することができます。それから私は自分の脳を悩ませ、別の良い機能を考えることができなかったので、私はQuaryの相関などの弱い機能を使用しました。インタビュアーは不満を抱いています。なぜなら、これらのことは主に満足度ではなくユーザーの関心を示しているからです。 新しい検索結果をプッシュする問題をどのように解決できると思いますか? 回答:新しい検索結果には0のプッシュ履歴が必要であり、参照はありませんが、その品質が何であるかはわかりません。そこで彼は、プロモーションのために少数のユーザーにランダムにプッシュしました。促進するときは、クリックスルーレートの増加の現象に注意を払ってください。インタビュアーはとても満足していました。 シーンとモデルについてどう思いますか? 私は個人的にシーンに多大な注意を払い、自分の科学研究経験から始め、スイカの本の導入について話し、私の完全な精神的な旅を伝えています。インタビュアーは満足することができます。 私はいくつかの質問を忘れていましたが、それらについて話した後、私は自分の声を失いましたが、彼は本当に有益でしたが、実際のプロジェクトについて尋ねましたそして、インタビューの後、彼はそれを監督者に報告し、ただニュースを待つと言いました。 インタビュアーがこのように私を批判したとき、私は彼が私を征服したのでバイドゥに行きたかった。
内部の推奨はありません。公式ウェブサイトに直接書かれた履歴書は、1日または2日でインタビューされているようですが。 。 もともと私のお気に入りの会社でしたが、今ではそうではありません。 Tencent School Recruitment
意図された部門TEGコール直接:研究投稿
自己紹介して、プロジェクトについて話してください
私たちのセクションに興味がありますか:部門ログ検出セキュリティフィールド
お互いを理解する
会議があります。次回はおしゃべりを続けましょう
10時:前回について話したことについて話し続けます
プロセス全体が比較的リラックスして楽しいものでした
2回目の会議は終了しましたが、ステータスはまだ2回目の会議が手配されることです。 。 。
インタビュアーと、機械学習方法を使用して危険なログ検出を処理する方法について話し合います。最初から学んだ主要な知識をレビューすることも、自己反省と見なされます。ここで得られるより顕著な経験は、多くの部門がまだルール学習に焦点を当てており、機械学習分類の状況に強力な解釈可能性要件を持っていることです。したがって、ツリーモデルやLRなどの優れた解釈可能性を備えたモデルは非常に人気があります。しかし、最終的にインタビュアーは私に「感謝」しました。
筆記試験の5つの質問の3つ半にAを取得したと言われましたが、私のスコアは大丈夫でしたが、部門は履歴書をロックしました。 。 。
私は双方に通知し、数分後、彼らはさりげなくチャットし、9月に会うと言いました。
現在のプロセスは、論理的に言えば、この部門には機械学習のポジションがないはずですemm〜を採用するために必要な人の数
Pinduoduoduoありがとう手紙
片側:
自己紹介
科学研究プロジェクトの紹介
Kaggleコンペティションの紹介
Tencent Competitionの紹介
RNNを使用したことがありますか?
LRを使用しましたか?
XGBとLGBの違い:
私は、機能の並べ替え、機能セグメンテーション、ヒストグラム、完全なソートの3つのポイントのみを考えています。
彼は、彼らがより多くのことに言及していると言いましたXGBはLGBより劣っていませんが、調整の高麗人参は扱いにくいものではなく、LGBは非常に高速です
(
1)トレーニング速度と効率の高速:LightGBMは、ヒストグラムベースのアルゴリズムを使用します。
2)ヒストグラムの差アクセラレーション:子ノードのヒストグラムのヒストグラムは、親ノードのヒストグラムから兄弟ノードのヒストグラムを減算し、それにより計算を加速することで取得できます。
3)メモリの使用量の削減:個別のビンを使用して、連続値を保存および交換すると、メモリの使用量が少なくなります。
4)より高い精度(他の改善アルゴリズムと比較して):葉ごとの分割方法を使用します(分割のために現在のすべての葉のノードの中で最大の分割利益を持つノードを選択します。この方法は、比較的高い深さに陥るのが簡単であるため、過度に過剰に触れやすいため、最大の深さを測定する必要があります。 (オーバーフィッティングを避けるため)、各レイヤーのすべてのノードで無差別な分割を生成します。これが、より高い精度を達成するための主な要因です。ただし、時々過剰な姿勢につながる可能性がありますが、| max depth |
5)ビッグデータ処理機能:XGBoostと比較して、トレーニング時間の短縮により、ビッグデータを処理することもできます。
6)並列学習をサポートします。
7)ローカルサンプリング:大きな勾配(大きな誤差)のあるサンプルを保持し、勾配が少ないサンプルサンプルを保持し、サンプルの数を減らし、コンピューティング速度を増加させます。
)
コード関連の質問については、インタビュアーにC ++またはPythonを選択するように依頼します(すべてのインタビュアーが同じ方法で回答したようです)。
私の選択はPythonです。
チェスボードには、右上から右下に行くことができます。
dp [i] [j] = max(dp [i-1] [j]、dp [i] [j-1])
チェス[i] [j] == 'チェスピース'の場合:
dp [i] [j] = 1
エルミアン:私はそれがクールだと思います、良い答えではありません。
中断バフが組み込まれている別のインタビュアーは、私の考えをいじります。
1。GBDTおよびXGB
(GBDT、XGB、およびLGBは、言及されたすべてのプロジェクトで習得する必要があります)
2。BN、ドロップアウト
(ドロップアウトは、深いニューラルネットワークをトレーニングするための代替トリックとして使用できます。各トレーニングバッチでは、機能検出器の半分を無視します(隠しレイヤーノードの半分を値0にします。もちろん、この「半分」はハイパーパラメーター、自分で設定すると、この方法は、特徴検出器間の相互作用を減らすことができます。
ドロップアウトは、前方の伝播中に、特定の確率pで動作を停止するようにすることができます。
実際、サブネットの組み合わせを構築することは袋詰め戦略です。 )
3.最初にLRを使用して(なぜLRを非常に簡単に使用するのですか)2つの分類にLRを使用して、スタッキングは非常に良いですが、LRは常にその表現力が十分ではないと感じています。厚い。 4。競争の特徴も分離するのですか?バケットはより均等です。 連続的な機能が交差している後、連続的な機能にマッピングされた後、連続的な機能と一緒に埋め込み層に送信できます。 5。AUCを知っていますか?
私はそれを計算する方法を知りません。
(回帰のためのAUCのようなものはありません)
6.開発、ヒープ、スタックが速いのはどれですか?
MMPは彼が言ったことにまったく反対であり、彼が言っていることを理解するのに彼は長い時間がかかりました。私が話しているのは、編集中にヒープが割り当てられているため、スタックを拡張して縮小する必要がないため、遅いです。間違った答え)
7。オーバーロードと書き換え
(書き換えは仮想関数の書き換えであることに注意してください。当時間違ったと答えました。いわゆる過負荷は、同じ名前の関数のパラメーターリストが異なることを意味します。関数はコンパイル中に変更されます。 、実行時に同じ名前を持っていません。 )
8。ビッグデータを使用して最も人気のある100のショッピングアイテムを見つける方法
小さなハッシュテーブルヒープを構築します
9.マップの下層を作成する方法
私はまだ基礎となるコードをまだ見ていないと言いました。 (ところで、私は地図のようなものがあることを知りませんでした。手でハッシュテーブルを作成しました。時間があるときにSTLソースコード分析を見てみようと計画しています)
(基礎となる赤黒樹、O(log(n)検索、挿入、削除データ構造)
インデックスの複雑さについては、ログ(n)は突然、インデックスがバイナリツリーであることに気付きました。
10。o(1)1つはありますか?私がそれを拭いた後、ハッシュテーブルがあったことが突然私に気づきました。
ハッシュテーブルの競合がある場合の対処方法
現在、Zip Heavy Hashによって回答します1
(同じ高周波問題、Zipper:リンクリスト、競合はリンクリストの最後にあります。
実際、私はSTLがあまり得意ではありません。 STLライブラリ機能を使用するのは好きではないので、STLがあまり得意ではありません。しばらく待って、STLソースコード分析の波を読む。
モグジー
インタビューの経験は非常に良く、2回目のインタビューは非常にスムーズに進み、HRはすでに良かったと感じました。インタビューの通知を初めて受け取ったとき、リンクを開いたとき、インターフェイスにはインタビュー時間、編集可能なボックス、OKボタン、あきらめるボタンがありました。 プロンプトの読み取り:[OK]をクリックすると、時間を変更できません。私はあえて「終了」ボタンをクリックしていなかったので、HRに電話して尋ねました。 2回目のインタビューでは、このボックスのプロンプトが[OK]をクリックすると、時間が変更されない場合は、適切な時間を書き、キャンセルをクリックしてください。 私はHRが本当に良いと感じたので、2番目のインタビュアーでのHRの仕事に対する満足、サポート、感謝を必死に表明しました。ですから、HRのインタビューが過ぎた場合、残っているのはクロスインタビューだけだと感じています。
しかし、私は真実を語っています、私は彼らの人事が本当に好きです。
2つの質問を紹介してください
最初のコース:
1000以内の最大の素数
PythonはO(1)スペースにプライムナンバージェネレーターとスクリーニング方法を実装できると言われていますが、それは記述されていません大部分から小さい順に。
分析の複雑さ、複雑さを減らす方法は?上から下まで検索して、999から降りて下がって、見つかったときに停止します。 2からルート番号xまでのブール判断、すべての測定値、非0はfalseにジャンプします。 しかし、インタビュアーはPythonを知らないようですか?そこで、次の質問のためにC ++に切り替えました。
2番目のコース:
部門なしで部門を実装するのは非常に簡単です
私の執筆では、C ++のABS(負の数)はオーバーフローする可能性がありますが、インタビュー中に速度Aがより重要であることは問題ではありません。
筆記試験中、私はバイナリの最適化の準備をしていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 37 38 39 40 41 42 42 43 44 45 46 47 48
#include <iostream>
using namespace std;
int jianfa(int num1,int num2)
{
int re = 0;
bool fuhao = false;
if ((num1<0 && num2<0) || (num1>0 && num2>0))
{
fuhao = true;
}
num1 = abs(num1);//小心溢出
num2 = abs(num2);//小心溢出
if(num2==0)
{
cout<<"div zero error"<<endl;
return 0x3f3f3f3f;
}
if(num1<num2)
return 0;
int tmp=1;
while(num1>num2)
{
tmp*=2;
num2*=2;
}
num2/=2;
tmp/=2;
while(num2)
{
if(num1>=num2)
{
num1-=num2;
re =tmp;
}
num2/=2;
tmp/=2;
}
if(fuhao)
return re;
else
return -re;
}
int main() {
int num1,num2;
cin>>num1>>num2;
cout<<jianfa(num1,num2);
return 0;
}
多くの質問をしました:
私はそれらのいくつかを思い出せず、私の記憶を失いました。 。
1.インターンシップの経験がないのはなぜですか?
最初のポイントは、先生が私に仕事を見つけることを許可していないということです。 (これは真実です。今日、先生は別のクラスメートに言った、あなたは仕事を見つけましたか?あなたが仕事を見つけたが卒業できなかったなら、あなたの仕事は無駄だったと思いますか...)
2番目のポイントは、実際のエンジニアリングにさらされるために、科学研究に加えて、何とか何とか競争に参加したことです。インタビュアーは満足することができます。
2。LRを使用したことがありますか?
必要
3。LGBはXGBよりも優れていますか?
2つの違いを直接紹介します
4。L1とL2は違うのですか?なぜL1はまばらになることができるのですか?
数学的な分布の観点から、1つはラプラスの分布であり、もう1つはガウス分布です。エンジニアリングは、間隔0および間隔外のL1の近似派生と最適化について話します。その後、L2は比較的簡単に直接導出できます。
5.どの学習者が凸で優れていますか?
lr sigmoid loglossは凸です。線形回帰、最小二乗凸最適化。 SVMは凸で優れています。 nnは、しばしばサドルポイントに収束するため、間違いなく凸ではありません。 PCAには無数の数学的ソリューションがありますが、固有値を使用すると最適なソリューションが得られます。
(S状の2乗損失は凸の最適化ではないことに注意してください)
6.機能の組み合わせや削除など、機能の重要性をどのように測定し、パラメーターをどのように調整しますか?
回答:機能の組み合わせにOneHot Cross-embedingを使用します。組み合わせは、実際の分布に依存しています。私は、ラベルと線形関係を持っていると言って、ペアワイズ数学的関係を使用して新しい機能を構築したと言いました。 。
機能の削除やその他の側面は、特定のKaggleボスの機能スクリーニングの手順を思い出させました。
パラメーターを調整します:
最初のステップは、先祖パラメーターです。たとえば、ツリーモデルの深さ、サンプリング周波数など。これは主に経験に基づいています。
2番目のステップは、新しい機能を試すなど、パラメーターを調整することです。
7.いくつのアクティベーション関数を知っていますか?
私は、特定の競争で使用されているLeakrelについて話したことについて、最も単純なSigmoid Tanh Reluについて言及しないと言いました。
8。サドルポイントとは何ですか?
なぜ私はこれを愚かに言ったのですが、それから私はそれを忘れていたと言いましたが、それは間違いなくインタビュアーの顔の表現から判断することではありませんでしたが、実際に私は本当に忘れていました。
(サドルポイントの画像でよく理解されています。1つの方向が上方にあるため、上からスライドのサドルポイントまで簡単にスライドするのは簡単です。もう一方の方向は下向きです。スライドしますが、サドルポイントはフラットです。ポイント)微分方程式では、一方向に安定し、別の方向に不安定な特異点は、機能的なポイントと呼ばれます。
重要なポイントは、サドルポイントと呼ばれます。マトリックスでは、列に最大値と列の最小値を持つ数値は、サドルポイントと呼ばれます。物理学では、それはより広く、最大値が一方向にあり、最小値が別の方向にあるポイントを指します。
大まかに言えば、滑らかな関数(曲線、表面、または過敏症)のサドルポイントの近くにある曲線、表面、またはハイパー面はすべて、この点の接線の異なる側にあります。 )
まず、RNNを使用したことがあるかどうか尋ねてみましょう。
回答:プロジェクトのRNN効果は、RNNがプロジェクトで良くないかどうかを分析し、RNNの初期段階の効果が競争における(初期段階効果が最適です)
GRUを使用したことがありますか?
回答:GRUは一度使用されました。使用されるメモリゲートは、長期のメモリ伝送を保証します。
9。注意とは何ですか?
回答:私は前に私が注意を払っていることを前に述べましたが、私は以前にそれを使用したことがあり、原則を知りません。
(高麗人参のアジャスターとして、私はさまざまなネットワークを試しましたが、私はまだ注意の性質をよく理解していません。注意が必要ですか?)
10.なぜドロップアウトが過剰留置を防ぐのですか?
袋詰めの観点から、NNは小さな逸脱と大きな分散を持つ学習者です。
11。共同フィルタリング:
彼はそれを理解したが、コードを書いたことがなかったと言った。
(共同フィルタリング、学生が主に科学研究に従事している場合、連絡を取ることはまだ難しいと感じています。興味がある場合は、特にeコマース製品の推奨エンジニアに関しては、まだ簡単に尋ねる)
12。CTRの推定に使用されますか?
LRとFMについて話すと、FMは主にNFMを知っていますが、
13。モグストリートは何のためですか?
回答:服を売る。そこで彼は、Mogujieを主にeコマースとライブストリーミングとして紹介しました。 (ライブブロードキャストを聞いたとき、私はほとんど笑っていました。もうそれを保持できなかったので、不可解に幸せに感じました。そして、彼が私がもうそれを保持できないと見たとき、彼はすぐにライブブロードキャストが現在あると言いましたモグストリートで最も急成長しているモジュール)
それはうまくいきました、私はコードしませんでした、私は30分間会う時間がなかったので、私の2つのインタビューで行ったのは私のコーディングスキルが非常に良いので、私はコードを書くのをやめました。
私のプロジェクトには完全なソフトウェアの実装があり、私が責任を負っているのは、10,000行のコードを超えることです。
実際、私は通常の手動コーディングのほとんどを行うことができます(私の弱点です)。
プロジェクトを紹介し、プロジェクトの詳細について話しました
このプロジェクトでは、コーディングフィールドの機能の組み合わせはすべてXORであるため、Relu BNを使用して機能を抽出すると、BNは本当に大幅に改善されています。
BNの原則、式、および実装について話します
(BNソースコードをチェックアウトできます、もう長くはありません)
BNを使用して、何かの代わりにXORの後にマップの正の部分を圧縮するのはなぜですか(はっきりと聞こえませんでした)?
BNレイヤーもデータ拡張としてカウントされ、BNレイヤーは0と1のエンコーディングストリームをディザーズしているため、勾配を変更して最適化を改善することができます(機械学習は2ポイントのみ、2番目のポイントで実行可能ですポイントそれは最適化の問題です)
なぜCNNを使用するのですか?その後、インタビュアーは、この埋め込みマップをマップしていると、CNNのクロスオーバーが優れていると思いますか?
回答:(実際、競争に参加した友人がNFMをプレイしたため、埋め込みについて知っています。最初のレイヤーは埋め込み層です。)私の答えは、コーディングの分野での特徴であるシーンに偏っています。不変。したがって、CNNを使用してグローバルに関連する埋め込みを行うことは良くありません。推奨事項の機能は、離散化後にまばらであり、高次のインタラクティブな情報があるため、潜在的なベクトルへのマッピングは、実際には潜在的なベクトルを使用することをお勧めします。これは、シーンによって決定されます。これは、使用する学習者と使用するネットワークを決定するデータの特性です。 (また、ResNetが画像に適している理由も紹介しましたが、コーディングでは、2層のExtremeパラメーター調整ネットワークのパフォーマンスが残差ネットワークのパフォーマンスを上回りました。実際、それはすべてシーンによって決定されます)
インタビュアーは大物です!
自己紹介、モグストリートは素晴らしいですが、私が言ったのは心からでした。 以前の対話は非常にスムーズでした。これは、主に自分のゲームを最初から最後まで、ゲームの背景、真ん中の精神的な旅、最終処理を紹介していたからです。 最初の試験は非常にスムーズに進み、最初の2つの試験も非常にスムーズに敗れました。 そうでなければ、私のモギー通りは安定しています
括弧のストリームを与えられた場合、文字列s = '(())(()()()()に合法的な一致する連続ペア1を見つけます。出力は3です。だから私はちょうど私はそれができないと言った。ダイナミックなプログラミングは、私の強さですその領域は何も書かれていませんでした。 = '()'入力が入力されたと思いましたが、何らかの理由で、DPは8つのゼロから出てきました。ナニ? 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#s = input()
s = '(())(()()()'
#s = '(())(()'
re = []
dp = [0]
for i in s:
if not re:
re.append(i)
dp.append(0)
else:
if i=='(':
re.append(i)
dp.append(0)
else:
if re[-1]=='(':
re.pop()
dp.append(dp.pop()+1)
else:
re.append(')')
dp.append(0)
print(re)
print(dp)
m = 0
cur = 0
for i in dp:
if i!=0:
cur+=i
m = max(cur,m)
else:
cur = 0
print(m)
输出:
['(']
[0, 0, 2, 0, 1, 1, 1]
3
最後に質問をするとき、インタビュアーはリコールの並べ替えに関して、業界でいくつかの慣行を追加しました。一般的に言えば、部分的に並べ替える必要がありますが、入札広告の場合には、お金を簡単に分割できるように正確な見積もりを提供する必要があります。たとえば、クリックスルーレート、CTR、またはその他の組み合わせでは、収入はこのランキングに基づいて計算する必要があります。 さらに、推奨される検索では、上司はいくつかの関連することも紹介しました。つまり、リコールされたものはあまりにも繰り返されるか、ろ過する必要がある可能性があります(たとえば、子供には適しておらず、誰もがおかしくて、それは良くありません)。特定の人に推奨している場合は、特定の人にプッシュすると、この人がすべての広告やその他の推奨事項に相当するため、機能を作成せずに群衆を送ることです。思い出して並べ替えてください。 最後に、私はこれを個人的に気にかけているので、私は会社の平均年齢について尋ねました。インタビュアーは、あなたが2年間ここにいて、あなた自身の貢献をしていないと言った。 5年(インタビュアーはとても若く見えたときにショックを受けました)。強く、ハンサムで、強い)、彼は2年間働いた後、私がやめることをより協力していました。さらに、彼は、Mogujieがコウモリよりも人々の栽培に注意を払う中型のプラットフォームであると言いましたデータフローは、Baiduとは異なり、多くのモデルを使用できます。会社に来たとき、あなたは自分自身をよりよく表現することができます。 私はHRから通知を受け取り、インタビュアーが学校に来るか、後者を選び、モグ・ストリートの習慣を体験する準備をするように頼みました。
1.自分自身を紹介します
私は主にアルゴリズムエンジニアであり、実際の科学研究プロジェクトは非常に専門的であるか、アルゴリズムについてです。
私が書いた科学研究ソフトウェアについて話しました。
私が自己紹介をしたとき、私はゲームをプレイするのが好きだと言いました(私は海賊版バージョンをプレイしていましたが、今では蒸気レベル50以上で本物のバージョンを再生し、ゲームはほぼ100です)
(私は一人でいくつかのバックエンド開発を学びました、そして私は相互娯楽のためにPythonを必要としません)
2。通常、どのゲームをプレイしたいですか?
私は最近科学的研究を行っており、ゲームをしていません。私はゼルダ、ダークソウルズ、モンスターハンターなどをプレイするのが好きでした。
3. Netease Gamesをプレイしたことがありますか?
OnmyojiとHearthstone
4。ハースストーンについて話しましょうか?
私は主にパックをオープンするのが好きだったので、ハースストーンを演奏するのが本当に好きでした(インタビュアーが笑った)。ハースストーンの利点は、それが競争力があり、カードゲームでもあるということです。そのため、それ自体が興味深いものであり、各ゲームはランダムであるため、各文のエクスペリエンスが異なります。もう1つのポイントは、金のコインを開くと、金貨を開けた後、カードプールが更新され、新しい構造と新しい体験が可能になります。このようにして、毎回新しいエクスペリエンスがあり、エキサイティングなパッケージのオープニングプロセスも好きです。
5. 3つの質問、比較的簡単に、テストケースを書く必要があります
手裂は成功しており、コードを書くことは比較的速いです。
最初の質問の2つのポイント
Pythonに書かれたコンピレーションは、エラーが見つからなかったため、Cですばやく書き直しました。
二等分の4つの境界条件について説明します
2種類のリターンSTとENは、返された検索境界、データ[MID] <値と<=値に対応し、2つのタイプは上限と下限に対応します。
共四种,然后说四种情况对应,每种的取值范围返回st,返回的取值范围是0到数组长度,返回en,则是-1到数组长度-1 st和en含义不一样,这个最好自己写写理解一下(更新了一下lower_bound的理解,解释了为什么返回值范围是0到len(data) PS:标准库返回的是迭代器位置,是一个指针,我这里从元素的位置概述。 lower_bound 返回数组大于等于value的第一个位置,假如数组中所有元素均小于value,返回尾部迭代器len(data),第一个元素大于等于value,返回0 (第一个元素大于等于value,则所有元素大于等于value,则返回0) 从定义看,这样定义就不可能返回负1。 找身边的跳动大佬讨论了一下,应该没写错了,有误请指正呀。 upper_bound返回大于value的第一个位置。同理,理论上返回值就不包含-1。 标准库的写法里,返回的是st。 加入返回的是en呢,那么返回的含义是什么呢?即返回的st情况-1 lower_bound :返回大于等于value的第一个位置lower_bound_en:返回小于value的第一个位置
upper_bound:返回大于value的第一个位置upper_bound_en:返回小于等于value的第一个位置1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 def lower_bound(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return st def lower_bound_en(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return en def upper_bound(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<=value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return st def upper_bound_en(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<=value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return en
对比的数改成1。
) 然后说了C++算法标准库(lower_bound和upper_bound)用的哪两种形式:返回st的那两种注意C++标准库返回的是指针第二题是二叉树的深度
python手撕,又报错,然后无IDE查bug还好查到了,print大发好,对python,如果print(“XXX”)没输出东西就说明没运行这一行。
定义树class的时候写的是.next,晕了,应该是.left和.right
第三题是数组旋转
左旋转,自信一波分析写完是右旋转,一脸懵逼,怎么看都是左旋转跑完就是右旋转
然后再那试了试改i,j,然后第二次就输出对了,晕,运气比较好
由于循环用的常数限制,要求改成了数组的范围,注意python len(data)是行len(data[0])是列
正常构造一个和data一样大new数组是先列后行[[0 for _ in range(len(data[0])] for _ in range(len(data)]
然后循环是先行后列(这样局部性更好,运行速度快,更容易缓存命中,当然面试官也没问我也没提)
写法应该是对的,但我不敢改成行列不相等的情况,万一错了呢.PS:想了想应该不对,因为new数组我照着data开辟的,应该行列反过来开辟才对,先行后列构造的话正好对应旋转后的情况,幸好没深究,不过这种bug很容易改,print()大法print一下就出来了
问问题:好希望他问我机器学习的东东,这样我就能装逼了,然而
6、静态内存和动态内存?
讲了static和堆栈是静态,编译的时候决定了大小,动态内存可以自由开辟->堆,也不知道对不对。 。
(回来问了问另一个收割大佬,应该是这样)
7、堆是?
说了向上开辟,速度慢、运行时改,然后开辟的过程,链表存着下一个位置和这一块有没有使用,如果没找到就析构合并内存再找,再找不到返回null(可以参考前面的答案)
8、堆栈是?
说了向下开辟、速度快、编译时分配、主要是存PC指针,然后函数入口参数多组成栈帧存进去等着恢复
9、malloc和new区别free和delete?
1、一个是函数(面试官没问,但我自觉呀,诚实回答忘了是哪个头文件里的了,事后查了查是stdlib我擦我天天写没想到是这个)一个是关键字
2、malloc要算大小,返回void*(然后随口提到void*可以转XX *),强转后按转完后的类型用,要自己算大小;new的时候传类型,就比如100个int,然后直接开100个就好了,他自动将int长度算进去
3、malloc再堆上,new在自由存储区(然后回答忘了自由存储区再哪了) 讲着讲着忘了free和delete的事了
(自由存储区和堆似乎是概念上的区别?我丢,深入理解计算机基础是按C讲的,我哪知道C++的自由存储区和C的堆有啥区别呀,按理来说假如new是依赖malloc实现的,那么他们不该开辟于同一块区域么。C++默认在堆上开辟new需要的空间,所以new来自自由存储区和堆都行。
网搜的答案:
自由存储区是C++中通过new与delete动态分配和释放对象的抽象概念,而堆(heap)是C语言和操作系统的术语,是操作系统维护的一块动态分配内存。
new所申请的内存区域在C++中称为自由存储区。藉由堆实现的自由存储,可以说new所申请的内存区域在堆上。
堆与自由存储区还是有区别的,它们并非等价。
)
10、智能指针了解不?
我从python的内存管理角度讲了计数法析构内存,和智能指针原理一致。但我自觉诚实的说出我没用过智能指针
11、python怎么解决循环引用的?
是不是想问我智能指针的循环引用解法?我忘了呀,我就直说python本身解不了循环引用的问题(这实话实说,确实解不了,python又不是神,循环引用要靠自己析构,对python来说,循环引用的东西就算程序关了都还在),但python有个库函数可以发现循环引用位置,然后调用垃圾收集器析构掉就好(其实就是定位内存泄露,然后gc把它干掉)
12、计网了解不?计算机网络TCP和UDP的区别?
答自学。回答了很多,挺详细了
(UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信,
TCP用于在传输层有必要实现可靠性传输的情况
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的;UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
这里建议不是特别熟的回答首部设置不一样,别说的太详细。
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
)
13、长传输和短传输?
分からない
(是http的长连接和短连接吗?HTTP1.1规定了默认保持长连接(HTTP),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。)
14、操作系统呢?
回答自己看的深入理解计算机系统,看的很详细,收获了特别多
15、进程和线程?
程序不过一段文本,运行起来才是进程,一顿讲,资源/调度单位啊、共享内存啊、并发啊XXXXXX
(见之前的答案)
16、你还有什么问我?
问了两个问题
一问:您能不能了解到其他面试人的信息,然后对着我教研室座位后面的字节大佬猛夸(因为他特别想去互娛做游戏),一开始面试官还以为这个人挂了呢我想捞一手,一听和我同时面了互娱就轻松了说既然这么强一定能过面试,然后我就突然想到好像可以暗示一波,就说我和他报的都是广州,我很想和他当同事(强烈暗示)
二问:我说我是算法工程师,机器学习特别厉害,平时工作内容是啥啊,机器学习这部分我都用上么
求互娱给个开奖机会,教练我想做游戏~(如果百度把我忘了的话),你敢让我过我就敢去宁可别被我逮住了
负责360搜索的部门,面试体验很好。
忘了面试的一部分,因为连续4面,其中技术面360两个,网易互联网1个,hr面1面,非常之累。
1、介绍自己
2、介绍自己实现的科研软件
用什么语言:C++
什么写的界面:QT
3、LGB和XGB区别
一开始听错了以为是LSTM,我还在想LSTM和XGB的区别,这怎么说,先介绍介绍XGB吧,然后说完XGB反应过来,面试官不是让我说LGB吧。 。那就好说了,一顿讲。
(答案前面有)
4、介绍CNN、卷积层如何实现非线性
使用激活层,不然在卷积都是线性变换。我从猫的视觉锥细胞开始一顿讲,应该讲的挺详细了,CNN的时不变性真的很适合用于信号处理。讲了时不变和局部权值共享,说CNN是DNN的特例。
(
卷积:对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重)做内积操作。
卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。
卷积神经网络CNN是多层感知机(MLP)的变种。20世纪60年代,Hubel等在研究猫脑皮层时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了CNN。
CNN:局部连接和共享权值的方式,减少了的权值的数量使得网络易于优化,另一方面降低了过拟合的风险。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。在二维图像处理上有众多优势。
CNN具有一些传统技术所没有的优点:良好的容错能力、并行处理能力和自学习能力,可处理环境信息复杂,背景知识不清楚,推理规则不明确情况下的问题,允许样品有较大的缺损、畸变,运行速度快,自适应性能好,具有较高的分辨率。它是通过结构重组和减少权值将特征抽取功能融合进多层感知器,省略识别前复杂的图像特征抽取过程。
CNN的泛化能力要显著优于其它方法,卷积神经网络已被应用于模式分类,物体检测和物体识别等方面。利用卷积神经网络建立模式分类器,将卷积神经网络作为通用的模式分类器,直接用于灰度图像。
)
5、卷积层pooling层怎么放?激活层放哪里比较好,有什么区别?
没听明白,不该是中间夹一个激活层吗。面试官的pooling真的是一言难以呀?我一直以为是最后的全连接FC层,我心想这不是被全局池化代替了么?不会所以一顿乱说?因为我自己也是改网络的时候,经常会尝试层的位置交换,我都是哪个效果好用哪个。讲的时候想起了何凯明大神的论文里的预激活,然后对着预激活、卷积层在Resnet的作用一顿夸。有会的大佬么。请私聊教教我。 。 。
两道题
1、10进制转K进制进制转换
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数输入描述输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。 输出描述为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等) 这题很简单,发个自己的写法,过一遍就好,挺简单的。可能个别边界会有问题,但是面试的时候尽量追求速度。 牛客网面试的时候,注意运行全部用例,可以看AC的情况,为什么这么说呢,因为你的输入面试官看不见(他说的),所以他只能给你跑一下看过了多少例子。 像这种水题一定要写得快。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
//map<int,char>table;
//table[0]='0';
//table[10]='A';
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void reverse(vector<int>&a)
{
int l = a.size();
for(int i=0;i<l/2; i)
{
int tmp = a[i];
a[i] = a[l-i-1];
a[l-i-1] = tmp;
}
}
string get(int M,int K)
{
bool ju = false;
if(M<0)
{
ju = true;
}
//注意负数转正数溢出
M=abs(M);
vector<int>data;
while(M)
{
data.push_back(M%K);
M/=K;
}
reverse(data);
string res = "";
if(ju)
res ='-';
for(int i=0;i<data.size();i )
{
if(data[i]<=9)
res ='0' data[i];
else
res ='A'-10 data[i];
}
return res;
}
int main()
{
int M=7,K=2;
cin>>M>>K;
string s = get(M,K);
cout<<s<<endl;
}
2、A->B,B->C,A->C,C->A中有一对链子A->C,C->A问序列里有多少对链子使用哪种数据结构?
要求:序列很长,只看直接相连,A->B->C->A 不算ABC互联。
讲了比较简单的d[i][j]=(bool)的结构,O(N^2)的时间和空间复杂度
又讲了两次扫描,O(N^2)的时间复杂度,O(1)空间复杂度
最后说了数组+链表,极端情况下时间复杂度也较高,但我心里想的是对链表排序也不慢吧,二分查找,时间空间都OK呀,但我傻就傻在我心里想了,嘴上没说链表排序。
最后有会的大佬么请教教我。 。
体验好,一道题,抽的前两道题都做过,一个是奇偶排序,一个是前序中序重建树
都是剑指OFFer原题,面试官见我思路顺畅,问我是不是做过,做过默写就没意思了。
我说做过剑指OFFer原题。 前两道题没手写。
第一道奇偶排序要求稳定排序,思路1就是归并排序,前偶后奇为大于。思路2双指针二分偶数倒
第二道找根节点,二分,没了
第三道没做过,但是也简单,问面试官能不能用python,能的话两分钟结束这道题,说不行就老实写了
这一面主要是深挖项目,深挖!
反问环节,面试官疯狂指导我,真好,这里总结了记住的一部分:
聊了搜索推荐的一些问题,我问的第一个是360对编程能力的要求。面试官的回答是所有的算法工程师都要具备很强的编程能力。
第二个是推荐中排行榜的问题,我说上了排行榜,阅读量就是疯狂增加,一增加就会更留在排行榜上,这种情况怎么办。面试官回答这是正反馈问题,说了很多干货,有兴趣做推荐的可以看看相关内容。
我又问了冷启动的问题,我就说对于新出现的页面,第一次出现,没有任何曝光下,如何给他做推荐呢?这里面试官反问了我,我就回答了自己的思考,先小批次试点曝光,再推广。
面试官开始讲推荐和搜索排序的区别,搜索排序面临的问题更复杂。所谓排序就是获取大数据的网页界面,然后对用户的查询给出一个最可能的结果(LGB可用),用到一些分层、召回(最优可能查询结果捞出来)、排序(对捞出来的东西排序),这里排序要做到去相关性,查询要保证输出结果多样性、表达多样性,还牵扯到了词与词之间的紧密度、运营和相似度命中。
In addition, there are many difficulties in sorting. First, the amount of data is larger and a lot of information is captured. However, the more indexes, the better, because there are duplicate (plagiarized web pages) and low-quality web pages 。另外对于learning to rank,我们不需要像回归那样得到准确的回归值,只要得到他的偏序就好。比如A<B,我们算价值是A:80,B:79和A:80 B:77,偏序都一样,只要排序正确即可。而要检验我们排序的好不好,就是根据反馈,检验模型的优劣,比如我们把A在B前面,但是用户不点A点B,用户改Quary词或者翻页,都可以用于检验模型效果。这三时候可能会用概率图解决这些问题。排序技术难度大,底层需要的技术也比较高级。 In addition, there may be a certain gap between the user's inquiry and our results. For example, when a user searches for the price of a certain car, the search result we give is the transaction price of a certain car. This creates a gap 。
最后我问了这么一个问题,就是我在做学习强国的时候,查询一个答案, 结果第一个是付费的,第二是是免费的,有限的时间里查到的第一个结果让我付费观看,我就很生气。これについてどう思いますか?面试官的回答也是很棒呀,所谓的搜索排序最终就是给用户满意的结果,结果可能是多样的,有的排版好内容丰富,有的排版差内容差,我们做的就是把最好的结果展示给用户。对于搜索排序,可能产业化的结果分两个,第一种是满足需求的免费内容,特别用户预期的结果。第二种可能是竞价排序的结果,可能付费观看,大部分用户没有付费的欲望觉得不好,少部分付费用户可能也会特别喜欢,但无论如何,前者肯定也会在搜索结果前列。
啊,面到最后没时间了,面试官让我问问题,我就随便问了两个,然后不得不回360电话了,就说我有点事把视频关了,本来面得挺好的,哭
其他的忘了,就记得两道题
第一道n的二进制表示中有1的个数
1 2 3 4 5 6 int re = 0; while(n) { re; n = n&(n-1); } 然后分析复杂度,最后提示下分析出来了log(1+n)
然后分析平均复杂度,我以为从1 到int_max的所有复杂度求平均。所以怎么都分析不对。
最后才知道是每个的复杂度,晕,面试官告诉我是log前面的系数是0.5。
第二道:
1、建个链表
2、打印链表
3、反转链表
反转链表写的不好,左右边界各判断了一次,正常情况下只判断一次就好,但面试官说也OK,多做一次时间影响不大,结果正确就好。
4、排序链表
做的是真难受,臭牛客,哼哼。写错个变量都指不出来,改bug改到头秃。
排序链表写的是链表快排,最后发现复杂度不是nlog(n),因为我L部分的尾部没有指向mid(base),导致我最后写了个找L部分的尾部,把这一步优化了就没问题了,但是面试官说也行吧排序的结果不会错。
最后问问题的时候,我一边问一边调试,最后终于把链表快排调对了。然后和面试官说我调出来了,就匆匆结束了这次面试,很难过。因为马上360就是二面,我总不能为一面放弃二面把,这里我情商不够处理的不好,哎,难受。面试官人都挺好的,都是我的问题。
面试经验肯定是面的越多越丰富的,从最初乐鑫的笔试挂,到字节跳动笔试不会写输入流(第一道题我本地1分钟就A了,然后不会写输入流,试了15分钟,然后写了第4题,结果本地能过线上报编译错误,我就很生气了,何况这个输入流更复杂我就直接放弃了)笔试直接挂,到现在面试一点也不紧张,可以和面试官愉快吹牛逼了,所以说多点经历也是挺好的(补充,这次字节笔试3.6/4,还可以)
##部分已挂的公司,吐槽一下: OPPO 简历挂?显示简历过,没有通知面试,可能原因是没填内推码,身边的字节大佬也和我一样简历挂。 。 。问了去面试的算法同学面试题目婴儿难度。 还有提前批没过,但是简历状态还有,是已处理,不能再次投递。 。 。 VIVO 笔试挂。 。我真没想到笔试还能挂,不过VIVO SP给的还不错,问的问题也不能说难?没中奖呀难受很气,想想要不要投步步高?三顾茅庐了要阿里内推挂(本来在池子里,然后部门的那个人发邮件给你内推,内推完刷新界面挂,可能原因是我扫了内推连接,但是我一般是不选择内推,想一想阿里内推人也不容易,互相体谅吧) 还有一个不知道哪里的公司挂了我简历,原因是简历是牛客上创建的,都不知道什么时候创建的,简历上面很干净。 。
18-28 作者:工大菜鸡链接:(https://www.nowcoder.com/discuss/295287)
18. 顺丰sp和ihandy牛客专场:
开篇就是吐槽,我为什么写这个?不是因为顺丰面试有多难,而是顺丰答应给我的二面,到现在都没给。 。 。从8月1号顺丰给了我人生中第一次公司面试到9月28号我结束秋招,在这期间顺丰不断推迟二面时间,现在又给我推到了10月中旬,不得不说,顺丰的hr还真是佛系呢。 ihandy这货更狠,给我答应的一面到现在都没兑现,每次打电话过去问hr,都是同一个回答:马上帮您安排,然后我就继续傻傻的等一两个星期,循环往复。
1.自我介绍,为什么转行,你原来实验室干的什么?:因为喜欢算(qian)法(duo),原来实验室干的导航制导与控制;
2.介绍比赛,做了哪些数据的清洗,数据增强的处理?作了哪些特征?怎样提取特征的,为什么会想到这个特征呢?:balabala如实说,还说目前进入了复赛,正在复赛准备阶段XXXXX啥的;
3.我看你比赛用到了xgboost和lightGBM,那说下XGboost原理吧:额……不会;
4.那说下LightGBM吧:咳咳,也不会;
4.额那说下GBDT总行了吧:额……还是不会;
5.那你会啥?我:LR。(面试官快哭了TT);
6.那好吧那你说说LR吧:balabala;
7.你听过CATboost吗?我:没。(面试官再一次哭了);
8.说说LSTM的原理:balabala还口述了输入门,更新门,输出门的公式;
9.你有什么想了解顺丰的吗?我:X$Y*&^%(&%@1!2¥……;
我知道我答的很菜,但我还是厚着脸皮问了面试官我的表现咋样,能否就我的面试情况和简历提点建议?后面每一次我视频面试我都会向面试官问这个问题,他们也都会热心的给我提出建议,帮我修改简历,收获很多。
结果:没想到一面给我过了,但是二面迟迟不到。
19. 滴滴牛客sp专场(二面挂):
惭愧,当时在面试的时候还以为滴滴是小公司,问面试官问题的时候,我居然问了滴滴的业务存活情况……
1.自我介绍,转行之类的问题;
2.了解那种算法挑一种介绍下:我说了LR,刚说到交叉熵这儿,面试官打断:那你说说LR为什么用交叉熵作为loss函数。我:因为lr从概率密度函数推导出来的对数极大似然函数就是交叉熵函数。面试官说:不全对,其实mse是万能的loss函数,每个模型都可以用mse作为loss函数的,那为什么lr不用mse呢?我:不几道。面试完了才想明白,mse的导数里面有sigmoid函数的导数,而交叉熵导数里面没有sigmoid函数的导数,sigmoid的导数的最大值为0.25,更新数据时太慢了;
3.说说XGB:在上次顺丰面完后,我仔细学习了一遍xgb,这一次大致回答上了面试官的问题,我说了GBDT,再从XGB是如何改进GBDT的角度引入了XGB的一些概念,比如预排序什么的,引入正则项和二阶泰勒展开什么的;
4.介绍比赛,介绍如何分工的,如何构建特征的,如何选择这些特征的;
5.说下常见的处理过拟合手段有哪些?我说了l1,l2,神经网络里的dropout,增加数据量等等,面试官问还有吗?我:不知道了。其实后来才知道bagging和boosting也是降低过拟合的手段,以前还以为仅仅是种特殊的模型。
同样向面试官问了我的表现情况以及如何改进,面试官也热心的提出了建议。
1.自我介绍,大致介绍项目。
2.聊比赛,聊人生。 。 。 。 。大概聊了30多分钟。
3.问你会不会什么操作系统,数据库啥的,c++会不会。答:都不会
二面很自然的就挂了,从滴滴的面试可以看出,其实国内的很多公司都挺看中开发能力的,只会python和跑跑模型应该达不到绝大多数公司的要求。
20.快手牛客sp专场(二面挂)
1.基础问题都是老生常谈,问题和回答略了
2.算法题:求最长回文子串,leetcode原题,动态规划求解最好,但我当时不会,用的是中心展开法,勉强做了出来。
1.上来一道leetcode上的hard算法题:求最小编辑距离。不会,直接gg
2.其他闲聊,聊人生
大概等了10多天,官网上给我挂了
21.依图(一面挂)
是我最惨的一次面试,面试官笑眯眯的,也没让我自我介绍,上来四到算法题,一道一道来的那种,题目都忘了,只记得每道都把我摁在地上摩擦,差不多情况就是这样:
面试官:出道算法题吧,第一道:XXXX。
我思索10分钟:不会;
面试官:那我们做第二道吧:XXXX。
我又思索10分钟:不会……;
面试官:那再来一道:XXXX。
我寻思我都这么惨了放过我让我走吧求你了,于是思索了两分钟说:还是不会……;
面试官:那再来一道:XXXX。
我:gun!
后来视频面试结束的时候,我专门去查了这几道题目,他们都有一个统一的解法,那就是动态规划,抱歉我之前真没听过动态规划啊啊啊啊啊,我从此下定决心,进行dp的专项练习。
22.腾讯(一面挂,好后悔没有抓住唯一一次进鹅厂的机会)
其实面试官问的问题都很简单,但是当时比赛刚做完,非常疲惫,不想学习,没有学习新的东西,也没复习旧的东西,就这样躺尸了两天,然后腾讯的技术面试官晚上打来电话面试:
1.自我介绍,介绍比赛
2.看你用到了朴素贝叶斯,说下原理吧。我心想这还不简单,刚要张嘴,才发现坏了,啥叫朴素贝叶斯来着?忘れた!我就支支吾吾的说:用了贝叶斯公式,然后加上了观测独立假设,面试官无语……
3.说下xgb,lgb和gbdt吧。这个我会,由于前面问了很多了,不用复习也能张口就来。
4.我看你的另一个比赛用了bert和CRF,说说CRF的原理吧。我:……不会(后悔没看)
5.那说下bert的原理吧。我:……还是不会(好后悔啊,太懒了,还是没看)
后面balabala的问了一堆,我都回答上了,但是前面这几个没回答上的太伤了,一面挂
23.远景(四面挂,boss面挂的,真是挂的莫名其妙……)
都是随便介绍项目,问一些基础的问题,没啥难的,印象深刻的是二面面试官问到最后突然让我用英文介绍下比赛里面是如何选择特征的,我用我的工地散装英语一顿乱说,结束时面试官说嗯很不错,我内心:靠,你压根就没听吧!
四面是boss面,现场面的,聊人生,跟我聊了一个半小时,全程也穿插问些问题,我都回答上了,跟boss聊得非常好,然后就给我莫名其妙的挂了……,我想原因应该是boss临走前给我说了一句:你需要多注重工程能力。他可能嫌我工程项目很少吧。
24.百度(一面挂)
百度的笔试就令人印象深刻:
选择题啥都考,很杂,操作系统,数据库,c++,python,机器学习,深度学习啥都考
两道问答题,其中有一问印象深刻:说说针对中文,BERT有什么可以改进的地方。我心想:你丫不就是想吹自己的ERNIE嘛,我就写了ERNIE针对BERT做出的改进,基于知识的mask训练方式,基于知识图谱的改进等等
一道设计题,让你设计一个系统:可以写出春联,必须满足他的要求,平仄音节都要对上,我直接BERT+CRF+GPT一顿乱写。
编程题:RGB括号,我猜应该是道dp题吧,链接:https://www.nowcoder.com/discuss/254095
想看的童鞋可以看一看,无视我的答案就好,我到现在都不知道我的答案对不对。
1.红黑树的几个特点。只答上两个,其实我根本不会
2.python的装饰器@的用法。しません
3.编程,写一个函数,实现python的继承,数据的交换,类中的全局变量等等。写上了一半。
4.快排(不能用简单粗暴的那种,要空间复杂度最低的)和堆排序(必须用最小堆实现)。 Instead of asking you to write code, I give you an array and let you directly use the ideas of quick sort and stack sort to demonstrate it element by element to him. I answered this question. Fortunately, I have implemented it before and understood it 。
5.算法题dp两道:最长公共子串,最长公共子列,都是dp题,幸好专门看了九章算法,专项学习了dp,简单或者中等的dp题还是可以一战的,这两道也是lintcode上的原题,有兴趣的童鞋可以查查。
6.介绍xgb,我说到“xgb的预排序是相对于暴力求解的加速”这儿,面试官打断了我,反问我:那具体是为什么加速了呢?一个特征下的数据,没有预排序和预排序了,不都得遍历一遍才能求解出最优分裂点吗?
这个问题给我干蒙了,其实这个问题我之前思考过,但是太懒了,心里不断麻醉自己面试官不会问得这么细,就直接忽略了,没再去想。百度面试完以后我看了原论文的伪代码才明白为什么。所以再次建议尽量能读一读原paper。
7.介绍下xgb是如何调参的,哪一个先调,哪一个后调,为什么?哪几个单独调,哪几个放在一组调,为什么?哪些是处理过拟合的,哪些是增加模型复杂程度的,为什么?我寻思你十万个为什么呢?总之就是被为什么问的头昏脑涨,出了门我就知道肯定挂了。
25.搜狗(面试流程结束)
1.lr为什么用sigmoid函数作为概率函数。我:lr是基于伯努利分布为假设的,伯努利分布的指数形式就是sigmoid函数,而且sigmoid函数可以将数据压缩到0-1内,以便表示概率。
2.介绍下word2vec,说说word2vec和fasttext的区别。我:balabalabala,说的貌似还行,面试官点头
3.印象深刻的推导:
推导下word2vec里面的一个模型CBOW吧。后悔没看,哭了,我说不会。
那推导下SVM吧。这个我会,推出来了,但是到对偶条件这里,面试官问为什么能用对偶条件,我没答上来,还是太菜。
那再推下lr吧。这次顺利的推了出来,面试官问的问题也回答了上来。顺利通过了。
4.算法题:求最长回文子串,没错,和前面快手一面问的笔试题一样,答上了。
5.概率题,严格来说,这道题不是我遇见的,是我同学面搜狗的时候被问到的,我觉得很有意思,而且我们都不知道答案,请大佬解答:
一共54张扑克牌,我抽了几张牌(大于2张),有两种场景: 1.我说我有小王; 2.我说我有大王; 这两种情况,哪种有双王的概率更高?
这题我是一脸懵逼的,求各位大佬解答!
2.搜狗二面:
1.xgb的loss函数的推导(mse以及非mse形式),以及求解推导。
推出来了;
2.求最大连续子列和,要求时间空间复杂度最小。
很简单;
3.xgb是如何实现并行的。
保存预排序的block,用进程间的通信并行寻找最优分裂点。
4.lgb的直方图优化算法说说。
随便说了说,面试官也没深问。
5.讲比赛,讲项目。
balabalabal总之二面持续了差不多一小时
没啥好讲的,聊人生,聊转行,hr说需要综合各地的信息来筛选,让我回去等消息。
26.OPPO(offer)
我整个秋招所经历的所有面试官里面,一共面了三个非常有水平的面试官(我个人觉得):一个是远景的那个boss,微软亚研院呆了四年,百度呆了六年,google呆了六年。和我聊现在的行业形势以及各种模型的应用,很多问题都会直击要害,一语中的。和我的聊天中看出了我工程能力不足,跟我聊了一个半小时,为我未来提出了一些建议和规划,我很感谢那位大叔;第二个是百度的一面面试官,他好像就是住在我肚子里的蛔虫一样,总能在我的回答中揪出我不会的致命知识点,给我痛击,真的是怕啥他考啥,他的基础非常扎实,而且反应和判断非常迅速;第三个就是这个oppo的一面面试官,根本不问固定知识点,就问一些模型、手段、措施背后的本质并且举例说明,在你运用的实际场景中有没有见过。
刚开始都没让我自我介绍,直接让我说比赛。我:balabala,我介绍到CRF的时候,面试官打断我说:“你说CRF说了一大堆,那他它本质是个啥东西,我不要听那些定义,你给我说本质”。我:……支支吾吾……,说它应该是个函数,balabalaba一顿编。
然后他也没说对错,继续问:说下attention吧,我:又是一顿balabala,讲到注意力那儿的时候他问:你能举个case吗,用了attention和没用attention时候的对应的隐状态在哪些地方有区别你有去观察过吗?我:又是一顿瞎bala,他又没说对还是错。
又问我看你这里用到bilstm它和lstm的区别在哪?举例说明,用了和没用的效果。我心想:哎呦终于有个会的了,结果回答完他还是那副样子,又是啥也没说,我心想对还是错你倒是给个准信啊。
又问到了ELMo,让我说明ELMo是如何做到动态词向量的。我:把每个词输入模型,得到的隐状态相加就能得到不同的词向量;
面试官:那说下ELMo的缺点。我说:第一就是多层bilstm天生的缺点:“自己看到自己”的现象,然后举了个例子,balabala……。第二就是无法并行训练,以上两个毛病都可以用bert去改进它;
他又问其实我们可以用加入位置嵌入的方式来改进这个无法并行的问题那为什么非得用bert呢?我一想确实facebook貌似在之前就提出了位置嵌入+textcnn的方式来并行训练。完了,给自己挖坑了。于是乎我就扯了一堆bert里面self-attention的优点,哈哈哈我真是机智。
然后他依旧啥也没说,又让我介绍bert,并且问了multi-head的好处,又问我它的实际物理意义是什么?なぜそう思いますか?举个case说明下。我用尽了我毕生瞎编的本事,凭借着我自己的一点理解硬是说了10分钟,然后结束了是对是错他还是啥也没说……………………
又让我写LSTM的公式,勉强写上了
又问了我一个实际场景问题:用一个模型去分类一堆数据,在training阶段就无法收敛,反复震荡,有可能是什么原因,你有没有在实际场景中遇见过?
我:可能数据是标注错误的或者是随机数据,面试官补刀:假设数据没问题,那是什么原因?
我:那就是模型无法拟合这个数据或者不适合做这类数据的分类,面试官再补刀:假设模型也没问题,足够复杂。
我:那有可能是优化过程陷入了局部最优,而且一直无法跳出,面试官再次补刀:假如优化过程没问题。
我:那就是正负样本极其不均,网络没法学习到东西?面试官:我没说一定是神经网络模型,而且那再假如样本正负分布是均匀的……
我:……那我真没遇见过这样的……
面试官当时貌似不太满意,跟我聊完居然把我的简历给对折了起来!我第一次见这种场面……,心想:哎呦我去凉了,可能一出门面试官就会把我的简历扔垃圾桶里了吧……。面试官让我回去等,晚上如果收到消息就是过了,没收到就是挂了。晚上感觉想哭,毕竟OPPO是我蛮喜欢的一个公司,结果快睡着了突然来了一个短信提醒,说我OPPO面试过了……,得,这下倒好,睡不着了……
1.聊项目比赛,一路下来没问啥知识点,没啥大问题
2.画出ESIM这个模型的结构,并作介绍
3.面试官看我航天二院的项目跟导弹拦截有关系,是用GRNN预报弹道的,就让我介绍下GRNN的网络结构以及原理,还问预报精度怎么样。我说这个题目现在是我的毕设,还没做完呢……
面试官:哦……那你给我说说你要拦截的这个HTV-2是个啥?
我说:是一种美国的临近空间高超声速飞行器,可用于导弹上,对我国国防安全造成威胁,balabalabala……
面试官好像突然来了兴趣,一直问我导弹的事,跟个好奇宝宝一样:这个HTV-2很厉害吗?
我:点头,嗯嗯嗯
面试官:这个HTV-2有啥特点?你们用经典的方法一般是咋拦截的?balabala……
我:额……这些都是保密的……
面试官:哦,那没事了。
4.聊到后面问我有没有了解过一些其他的搜索排序算法,比如list-wise的,pair-wise的,然后给你一堆非常大的大数据,如何实现全数据的搜索排序,我凭借我的理解大致回答了一些,面试官说还不错,让我等下一面
我拿起我的oppo find x给hr一顿瞎BB,意向书成功到手,虽然是白菜价,但是OPPO是我很想去的一家公司,尤其是近几年开始搞些奇奇怪怪的手机出来以后越想去了- . -。
我原以为一面二面回答的不太好的情况下OPPO也愿意要我,而且hr说今年OPPO机器学习投递的简历,光筛选后的985计算机科班硕士的就多的吓人,所以我感觉OPPO今年应该在机器学习这个岗位上招人需求有很多。没想到签约会时候问hr才得知整个哈尔滨加吉林地区,机器学习的offer只有两个……,瞬间脊背发凉……
27.58同城(口头意向,拒了)
其实能面试58我是非常意外的,因为58的笔试编程题我一道都没做出来,选择题差不多一半都是瞎猜的,甚至面试的时候,面试官还把我做错的选择题拿出来又问了我一遍,并且我还是答错了……囧,而且三个面试官都问了我:为什么编程题一道都没做? ………好尴尬,太奇怪了! ? 58怎么会给我面试呢?不过面试时我表现的还不错,最后也拿到了口头意向,但已经签了OPPO就给拒了。
1.还是各种介绍,自我介绍,比赛,项目,为什么转行啥的。
2.我看你用了ESIM这个模型,把模型结构画一下,并且告诉我为什么有用。とてもシンプルです。
3.算法题:一个数组中和为k的所有二元组,要求时间复杂度为O(n)。这个也很简单。
4.介绍下BERT以及CRF。老生常谈了,他也没深问。
5.算法题:最小编辑距离,没错又一次被问到了,dp常规思路,只不过需要多考虑边界条件。完美解决。
6.算法题:一块钱一瓶水,三个瓶盖能换一瓶水,问20块最多能买多少瓶水?(用编程方法解决。)面试官午饭没吃,饿的等不及了,我刚想了一分钟还没写出来,面试官说一面就到这儿吧,我以为他要把我挂了,赶快急急地说了思路,面试官说没事你一面过了,走去吃饭吧,噗.......
2.58二面:
二面大多数时候都是我在问面试官,一时间搞不清楚谁才是真面试官……问了些58的业务,以及业务中需要的模型,算法等等的。聊得很开心,当然也有些坑,面试官会穿插着问些技术问题,比如在谈到58的软件内搜索业务的时候,面试官问如何在少量数据的情况下对用户的输入进行快速的意图识别。我说了几条:可以用信息熵来确定用户输入主体,用聚类来做些简单的意图识别等等。
3.58hr面:
一个很漂亮的大姐,很亲和,又是聊人生,结束后告诉我回去等通知。
28.华为(offer,拒了)
我申请的是华为消费者bg软件部的人工智能工程师,自然语言处理/语音处理方向。我听说今年很难进华为,想进消费者更是难上加难,但是我仍然没感觉到有多难进……可能华为比较看重课业成绩和学历吧,因为我感觉我只有这个优势……
上来两到算法题,不过都是很简单的leetcode原题,题目我给忘了,但是都答上了。但是我感觉面试难度看脸,有同学就被甩了两道dp题没答上来一面就挂了。
问的问题都很基础,知识点都是前面的那些,没有什么印象深刻的问题。
算法题:求一个数组中和为k的最长连续数组,暴力法解决的,面试官说没有复杂度要求。
问了槽位的概念,这个我之前真没听过,哎,还是太菜了。
问了些其他的基础问题
聊人生,聊规划,圆满结束,offer到手,签约会的时候,hr说给我安排到北京了,我不太想去北京,而且薪资也不高(我听到的消费者的同学都一个均价,什么硬件研究院、智能车、无线的均价都比消费者高),而且最重要的是,他把我安排到了消费者软件部下的智慧城市这个三级部门,大概率是语音方向的,我不是特别喜欢,就给拒了。
约定电面晚上8点半(阿里是加班到9、10点的节奏?)
主要是商汤无人车实习的项目,问我比baseline提升15个点,怎么来的。
从数据迭代、backbone、模型修改几个层面上说了下。
挑一两个有意思的优化说说,说了cascade、hdcnn的结构,为什么用这种结构。
项目中出现什么情况,怎么解决的?主要就是说小目标检测的解决方案。
对caffe源码熟悉程度。(我扯了扯源码的底层设计模式,数据流怎么流的,如何添加新层、cuda代码的细节)
未解決の質問
给了一个情景,如何训练模型、调优。(题目很空,主要考察你对深度学习的理解)
根据需求(前向传播时间、模型大小),确定模型和基础网络,跑第一版模型。(举了个栗子) 判断模型是否出现过拟合的情况,来决定下一步的优化方向。 结果分析(confusionMatrix等),分析问题,将论文中的方法套上去,如果没有自己创造。(又举了个栗子)
softmax、多个logistic的各自的优势?1、类别数爆炸,2、推了下softmax反向传播的公式,来对比两者的优劣。
算法(走流程题) 字符串判断是否是ipv4,c++。(可能是时间不多了,大佬想下班了)
全程大多都是我在说,没有太多互动。后来经过源神@邢源建议,还是要故意给面试官漏点马脚让他们来怼我们,然后再怼回去,并说明不这么做的原因,不然不好拿高评分。(卧槽,真的是套路深啊~)
大佬貌似涉猎很广泛,对每一个领域都很熟悉,基本上简历中的很多细节,他都能找到点怼我。(聊了很久)
项目是从头怼到尾,主要考察对项目、深度学习的理解。
大佬对我的trickList很感兴趣,我猜想他现在做的工作和我的很相似。
Anchor大小、长宽比选取?我说了业界常用的方法(YOLO9000中的方法),并提了一个更优的方法。
为什么要深层、浅层featureMap concat?提了点细节和我踩的坑,需要数量级上的调整,不然深层的feature可能会被压制。
Cascade的思想? 说了下我的摸索的一个过程。改变样本分布,困难样本挖掘,能达到比较好的效果。
文字识别使用ctc loss的一些细节。
设计一个情景,倾斜字体检测,问我有什么好的想法?(我觉得应该是他现在遇到的问题)
数据增强,加入形变扰动。
非end-to-end版本:分别训练检测和分类,举了之前做过的一个文字识别的项目的实现。
end-to-end版本:加入仿射变换学习因子,学习字体倾斜的角度和形变。
在商汤发论文了吗?
没有,正在攒,项目比较重,但有一些work和insight,讲了下思路。(大佬听的很认真,貌似被我的故事打动了[捂脸])
为啥要换实习?日常吹水。
评价:大佬主动评价我对模型理解挺好的,工作做的挺深的,说等下一面吧。
体会:二面面试官说话很快,思维比较敏捷,觉得和这种人讨论问题很欢畅,如果一起工作会很赞。
以后面试说话语速应该快一些,让人觉得思维比较敏捷,这个可能会有加分项吧。
大佬应该是搞backbone模型优化的,问了我怎么迭代基础网络的版本的,日常扯论文,自己的实验结果和理解。
前两个卷积层通道数不用很多,主要是提取边缘、颜色信息,少量的卷积核足矣。
skip connection有什么好处?推了下反向传播公式,根据链式法则,梯度可以直接作用于浅层网络。
初始学习率怎么设?这个我真的没有总结过,只是说一般使用0.01~0.1。
mobileNet、shufflenet的原理?说了下原理。
为什么mobileNet在理论上速度很快,工程上并没有特别大的提升?先说了卷积源码上的实现,两个超大矩阵相乘,可能是group操作,是一些零散的卷积操作,速度会慢。
大佬觉得不满意,说应该从内存上去考虑。申请空间?确实不太清楚。
问我看过哪些前沿的论文?说了说最近两个月的优质的论文。
扯到了tripleLoss,大佬问样本怎么选择?随机,然后就被大佬嫌弃了。装逼失败,这块确实没怎么深入研究。
为什么用multiLoss?多loss权重如何选?训练普通的模型使其收敛,打印反向传播梯度的大小,这表示该task的难度,以此作为loss的权重,然后我补充说了下可以搞一个动态的loss权重,根据一段时间窗口来决定loss的权重。
凸优化了解吗?牛顿法、SGD、最小二乘法,各自的优势。
凸优化其他东西呢?我说只有一些零散的知识点的记忆,纯数学,没有很系统的研究。(面试官貌似数学功底很好,只能认怂)。
感觉有点虚,我尝试着往我会的地方引[捂脸]。 工程上如何对卷积操作进行优化?答:傅立叶模拟卷积。大佬不满意,说那是cudnn早就实现的,还有什么优化吗?(确实不知道,甩锅给工程组)
样本不均衡怎么处理?一个batch类别均等采样,修改loss对不同样本的权重。
三面面试官懂得不少,不过最后还是过了,有时间凸优化还是要系统整理下。
大佬应该不是做深度学习的,应该是机器学习那块的。交流中能感觉出来对这块不是很熟。挑他不会的玩命说,至少让他看到我的工作量。
SVM的KTT条件?说了说,说到SMO实在说不下去了。
GBDT和randomForest区别?原理角度,方差、偏差角度,过拟合角度,谈了谈之前打阿里天池的一些经验吧。
GBDT和xgboost区别?算法上工程上的优化,面试前专门看了,总结的不错,知乎,更多细节可以看看陈天奇的论文,我没看过[捂脸],做机器学习的小伙伴最好看看。
求和接近于target的连续子数组。(lintcode上有类似的题)
最后说让后面应该还有个hr面。