Java Webアーキテクチャの知識整理--アリの面接経験を覚える

5907 ワード

すみません、一度の電面から言います.私個人はある国有企業で1名のソフトウェアのデザイナーをして、国有企業のみんなはすべて知っていて、待遇は普通でその上何の意味もなくて、する方向は基本的にすべてオペレーティングシステム、駆動とツールのソフトウェアの開発で、言語の基本はすべてC/C++です.最近も転職したいと思っていたので、アリさんの面接の機会を得て、試してみました.
まず電話面接です.その時は出勤していて、人が多くて、やっと誰もいないところを探して面接を始めました.面接の方向はJava Webで、面接官はとてもniceで、友达と同じように、最初はいくつかの比較的基礎的なものを聞いて、例えばhashmap/hashtableの違いと優劣、私はまあまあで、しかも原理のものに対して比較的に透徹しています.
Java Webの面接はもちろんservletに聞かれますが、javaマルチスレッドのものについては相変わらず、原理的なものも下層のメカニズムもはっきりしていて、面接官も満足していますが、上層部に行くのは私の得意なものではありません.AOPを聞かれると、何をしているのか忘れてしまったので、言葉が詰まって、口がきけませんでした.本科の时にWebサーバーのような课程の设计をしたことがあって、実は接触したことがあって、しかし大学院を読む时方向があまりにも偏りすぎて、あまりにも底辺で、基本的にJavaのWeb方向の関连するプロジェクトをしたことがありません.純粋にインターネットに対する熱意と一部のネット上で同じように追求している友达に頼って、大学院を読むことから仕事をすることまで1年、依然としてインターネット関連技術に注目しています.
その後の質問には答えられなかったが、面接官は私に面接の機会を与えてくれた.11.20日に北京から武漢に飛んで特別面接に参加した.一方、依然としていくつかの基礎的な問題で、それから2つのアルゴリズムプログラムを書いて、文字列の変換に関連して、すべてとても簡単で、2番目の問題は当時すぐに反応しませんでしたが.一方、以前に身につけたものは本当にたくさん忘れてしまったことに気づきました.例えば、UMLのクラス図関係がどのように描かれているのか、データベースの構築表が最初に正しいことを書くことができません.例えば、Httpプロトコル302/301がどういう意味なのかなどです.Java Webフレームワークに関する質問がたくさんあると思っていたので、電面後一気に、1週間もしないうちに『Spring in Action』、『Struts in Action』、そしてHibernateの電子書籍と『Java Webを深く分析する』を全部チェックしましたが、フレームワークに関する質問はあまりありませんでした.その後は自由にプレイして、自分が以前プロジェクトをしていたときに出会ったJVMのチューニング過程について話しました.
2つの面接官に直面して、基本的に技術面ではなく、主に履歴書に行ったことのあるプロジェクトに関する質問と個人的な経験を聞きました.自分のプロジェクトの経験が豊富で、やったことがしっかりしているので、これは問題ではありません.その後、自分の位置づけやB 2 B業務についてどう思うか、baseの質問をしたが、これは多くない.一つ問題があるのは難しいですが、もちろん1秒です.私の履歴書によると、私はシステムと底のものをするのがもっと適しているので、面接官は私にアリ雲に行きたいかどうかを聞いて、私はアリ雲が潘愛民先生が持っていることを知っていて、以前は潘愛民先生と写真を撮ったことがあって、多くの人が「プログラマーの自己修養」を見たことがあると信じて、そこから利益を得たことがあります.しかし、私の答えは「確かにこの方向も悪くないし、潘先生を慕っていると思いますが、B 2 B Java Web関連のポストに来た以上、私はアプリケーションの方向に偏ったものをする傾向があることを示しています」です.
多分私はいくつかの学友と友达がアリにいるため、自分もアリに関心を持って、アリの技术の枠组みに対してまだ比较的に理解して、だから両面は一面の情况よりずっと良くて、面接官はやはりとても満足していると感じて、ただ1年以上働いたばかりで、年が少なくなったと感じます.
终わって、面接の面接官と二回も挨拶をしてから、泊まったホテルに帰って寝ました.ドキドキしていましたが、夜になると、面接官から电话がありました.このニュースを聞いて、もちろんかなり興奮して、面接官にお礼を言った後、武漢の同級生と一緒にご飯を食べて、気持ちがとても楽しかったです.
今は最終的なofferを待っているのではないでしょうか.自分の幸運を望んでいます.
「あなたが技術を学ぶのに最適なタイミングは3年前で、次は今です」という言葉はこれまでよく使われていました.今回の面接を経て、Java Web関連の資料を整理して、自分が直面する可能性のある新しい仕事にもっと早く適応できるようにする必要があると思います.
まず、Java Webでどのようなことを把握する必要があるかについてお話しします.ここはいくつかの知識点の収集で、しばらく詳しく説明しないで、各位の博友の補充の指摘を歓迎します.1.下地
Java         ,   JVM        。      Java    ,  GC  ,Classloader      。                ,       ,                             。

JVM     。                  JVM     ,     JVM        ,              ,            。

Java   。         ,                         。

I/O。Java       BIO/NIO,    I/O     I/O,       ,  Linux    I/O   I/O     ,       ,  I/O       ,       ,     epoll。

2.Servlet
サーブレットはサービス側で実行されるjavaプログラムであり、一般的に独自のJavaサービス側アプリケーションがHttpサーブレットクラスから継承され、独自のinit|doGet|doPost|serviceメソッドが実現される.サーブレットのライフサイクルはそのロードから始まり、まず初期化を実行し、initメソッドを呼び出し、その後、独自のサービスを実行することができ、ライフサイクルが終了するとdestroyメソッドを呼び出してリソースを回収し、サービスを終了する.
原理を知るだけでは足りないし、実戦能力も必要だし、IDEに簡単なコードを書くのは誰でもできるが、本当に一つのプログラムを実行させるには他に何かが必要だ.ここではサーブレットの容器を指す.servletの容器はいろいろありますが、よく使われるのはTomcatを例に、Tomcatを取り付けた後、開発時にTomcatのlibを含まなければなりません.IDEは確かに多くの人に慣れていて、ディレクトリがどのように組織されているのか、プログラムがどのようにコンパイルされているのか、どのように配置されているのかという問題はIDEによって遮断されています.全体をよく理解するには、コマンドラインからすべてを行うことをお勧めします.
具体的には、『サーブレットとJSPコアプログラミング』を参照してください.3.フレーム
Java Web開発で使われているフレームワークの多さは指摘され、バージョンの更新による問題も相次いでいる.しかし、これもWeb技術の進化の結果であり、受け入れるか、リズムをリードするかを選択している.Spring
Springは強力で「軽量級」なJava開発フレームワークですが、引用符を打つのはそれほど軽量ではないような気がします.Springの主な目的は、Javaアプリケーションの開発を簡素化し、ハードコーディング方式のプログラミングの代わりに構成することであり、モジュールのデカップリング、そのアーキテクチャを下図に示す.データアクセス、リモート通信、AOP、コアコンテナなどの部分が含まれています.
0?wx_fmt=png
Figure 1 Springアーキテクチャ
Springのコアには主に3つの点があります.
IoC:    。

反転制御とは,制御権をクラス内部からコンテナに引き出し,コンテナクラスのインスタンス化および動作により配置管理することである.
Dependency-injection:      

オブジェクトの依存関係は、システム内の各オブジェクトを調整するサードパーティ製コンポーネントによって、オブジェクトの作成時に設定されます.オブジェクトは依存関係を独自に作成または管理せず、依存関係は必要なオブジェクトに自動的に注入されます.パラメータと配置によって「注入」という言葉がここでどれだけイメージされているかを体得することができる.依存注入の最大の利点は松結合である.クラス内部を特定のクラスにバインドする必要はありません.代わりに、いくつかの依存関係をパラメータとしてクラス内部に注入します.
Aspect Oriented Programming:      

ソフトウェア開発では,アプリケーションに多く分布する機能を横断的注目点と呼ぶ.これらの横断的な注目点は往々にしてビジネスロジックから分離され、これらの横断的な注目点をビジネスロジックから分離することは正式にAOPが解決しなければならない.AOPプログラミングは,アプリケーションのあちこちに広がる機能を分離して再利用可能なコンポーネントを形成することができる.高集約低結合のもう一つの体現であり、汎用実装モジュールとコアビジネスモジュールを分離する.
具体的な参考:『Spring In Action』Hibernate
データ永続化の枠組みも多く、把握しなければならないのはHibernateだけでなく、Hibernateが以前のエンタープライズアプリケーションで使われていたことが多いだけでなく、MyBatisもかなり重要なシェアを占めている.Hibernateは全自動の持続化フレームワークであり、それほど便利ではないため、多くの開発者がMyBatisを使う傾向があり、淘宝はこのようなものです.
Hibernateのワークフロー:まずconfigurationオブジェクトからプロファイルを読み込みます.マッピング情報を解析し、StandardSessionFactoryを作成します.OpenSessionを呼び出してsessionを開きます.トランザクションtransactionを作成し、その後永続化操作を行います.完了したらトランザクションをコミットし、セッションを閉じ、セッションファクトリを閉じます.
0?wx_fmt=png
Figuer 2 Hibernateワークフロー
ORMのコンセプトを理解するには、ORMはオブジェクト関係マッピングを意味します.プログラムのオブジェクト向けモデルとデータベース関係モデルの相互不整合問題を解決するための技術である.
hibernateで重要なのは,オブジェクトの4つの状態変換と条件である.それぞれtransient瞬時状態、persistent持続状態、detached遊離状態、および除去状態であり、状態変換は以下の通りである.
0?wx_fmt=png
Figure 3 Hibernateオブジェクト状態変換図Struts 2
Strutsが登場したのは最も早く、思想提供者の一人でもあり、名前からその重要性がうかがえ、Java開発を簡素化し、事務の切面化を統一することを目的としている.
Strutsの最も重要な点はActionの実行,遮断器の原理,valuestackおよびOGLLにある.
具体的な参考:『Struts in Action』4.HTTP
これは言うまでもなく、あまりにも重要で、Web開発者として、Httpを特に熟知していないと面倒なことになります.
Http     

Http             

https    

B/S       

Cookie Session   

restful API

5.設計モード
ここで23種類のモードを列挙しないで、個人は純粋に本を読んで《設計モード》を学ぶのは何の役にも立たないと思って、実際の応用の中で出会って、しかもいくつかのなぜかを多く聞いて、その上自分でコードを書く時設計モードを使う意識があってやっと各種の設計モードに対して更に深い悟ることができます.6.まとめ
もちろんWeb開発はこれだけのものではありませんが、私のところではしばらく重要なものを列挙するしかありません.アプリケーション開発後、導入の問題もあるので、CDNやロードバランシングなどの問題がさらに複雑になりますが…
また、Web開発の過程では、開発前にUMLクラス図やインタラクティブ図を上手に使用できるなど、良い開発習慣を身につけることで、多くの間違いを避けることができます.面接官の軽虐さに感謝します.自分がまだしっかりしていないところがたくさんあると思います.このチャンスにふさわしいように努力しなければなりません.