ある会社(SMKJと略称)の面接を記録する

9512 ワード

昨日、ある会社にJava開発の面接に行きました.この文章は主に面接の記録と総括をしています.
この会社の規模は約100-200人で、環境はまあまあで、1棟のビルで2階のオフィス(31階と32階)を借りました.一绪にエレベーターに乗って上がったのは、もう一人テストポストに応募した妹の纸です.
ここでは同社のフロントにツッコミを入れます.HRとは31階で面接すると約束したので、私とテスト妹紙は31階のフロントに行きました.31階のフロントは直接32階のフロントを探しに行きました.32階のフロントは31階の面接官を探して、結局私たちを31階に連れて帰って面接しました.
まず個人情報表を記入し、面接コーナーに直接入ります(筆記試験はありません).
以下は面接時の質問の記録です.

1、オブジェクト向けの三大特性


答え:パッケージ、継承、マルチステート.

2、XML解析


答:1、解析方式*DOM:Document Object Model、ドキュメントオブジェクトモデル.この方式はW 3 Cが推奨するXMLの処理の標準的な方式である.
欠点:DOMモデルを構築するには、XMLドキュメント全体を読み込む必要があります.XMLドキュメントが大きすぎると、リソースの無駄になります.利点:XMLのデータ操作(CRUD)に適しています.
  • SAX:Simple API for XML.この方法は公式基準ではなく、オープンソースコミュニティXML-DEVに属し、ほとんどのXML解析器がサポートしています.

  • 2、解析ツール*JAXP:
    DOMまたはSAX方式で解析XMLを行う.APIはJDKの中にあります.
  • Dom 4 J:(推奨)
  • オープンソース組織が発売した解析開発パッケージです.(牛さん、みんな使っています.SUN社の技術の実現も含めて)

    3、反射


    答え:私たちのプログラムが実行されている間に、jvmにロードするのではなく、実行時に必要に応じてロードするクラスが動的にロードされる必要があります.このようなメリットは、サーバにとって言うまでもありません.
    例えば、私たちのプロジェクトの下層はmysql、oracleを使用する場合があり、実際の状況に基づいて駆動クラスを動的にロードする必要があります.この場合、反射は役に立ちます.comと仮定します.java.dbtest.myqlConnection,com.java.dbtest.oracleConnectionという2つのクラスを使います.このとき、私たちのプログラムはClass tc=Classで動的に書かれています.forName(“com.java.dbtest.TestConnection”);クラスの全クラス名によってjvmはサーバでこのクラスを見つけてロードしますが、oracleであれば入力されたパラメータは別のものになります.このとき反射のメリットが見え、このダイナミック性はjavaの特性を体現しています!
    複数の例を挙げると、springに触れたことがあると、さまざまなbeanを構成するときに、プロファイルの形式で構成されていることがわかります.どのbeanを使用する必要があるか、springコンテナはあなたのニーズに応じて動的にロードされ、プログラムが丈夫に実行されます.

    4、Java 8の新しい特性

  • Lambda式:Lambdaは、関数をメソッドのパラメータ(関数をパラメータとしてメソッドに渡す)として許可します.
  • メソッドリファレンス:Javaのクラスメソッド、オブジェクトメソッド、またはコンストラクタを直接参照できる、メソッドリファレンスは非常に有用な構文を提供します.

  • 5、Lambda式


    Lambda式は,関数式インタフェースとその中の抽象的な方法の具体的な実装として理解できる.
    Lambda式は特殊な匿名内部クラスと考えられ,Lambdaは関数インタフェースにのみ使用できる.
    lambda :
    
         ([ , ]) -> {
             // 
             [return..;]
         }

    コードのデモは次のとおりです.
    public class TestLambda {  
         public static void main(String[] args) {  
               TestLambdaInterface1 t1 = new TestLambdaInterface1() {  
                    @Override  
                    public void test() {  
                         System.out.println(" ");  
    
                    }  
               };  
    
               //   
               //   
               TestLambdaInterface1 t2 = () -> {  
                    System.out.println(" lambda");  
               };  
               t1.test();  
               t2.test(); 
         }
    }
    
    @FunctionalInterface  
    interface TestLambdaInterface1 {  
         //   
         void test();  
    }  
    

    6、設計モード


    単一モード


    ≪単一モード|Single Mode|emdw≫:クラスにインスタンスが1つしかないことを確認し、グローバル・アクセス・ポイントを提供します.
    実装:
  • は、1つのプライベート静的変数、1つのプライベート構造関数、および1つの公有静的関数を用いて実現される.
  • プライベートコンストラクション関数は、コンストラクション関数によってオブジェクトインスタンスを作成できないことを保証し、パブリック静的関数によってのみ一意のプライベート静的変数を返すことができます.
  • public class Singleton {
    
        private static Singleton instance;
    
        private Singleton() {
        }
    
        public static Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }

    プロキシモード


    サブスクリプション・モードのパブリッシュ


    MVCモード


    7.Hibernateの一級キャッシュ、二級キャッシュ


    SessionのキャッシュはHibernateの第1レベルキャッシュと呼ばれています.SessionFactoryの外付けキャッシュをHibernateの2次キャッシュと呼ぶ.どちらのキャッシュも永続レイヤにあり、データベース・データのコピーが格納されています.SessionFactoryの内蔵キャッシュはメタデータと事前定義SQLを格納し、SessionFactoryの内蔵キャッシュは読み取り専用キャッシュである.
    キャッシュの役割:
  • データベースへのアクセス頻度を低減し、アクセス性能を向上させる.
  • は、キャッシュ内のオブジェクトがデータベースと同期することを保証し、キャッシュ内のオブジェクトを永続化オブジェクトと呼ぶ.

  • 8、ConcurrentHashMapのkeyはnullでいいですか?

  • HashMapはnull keyおよびnull value
  • の挿入を可能にする.
  • HashTableとConcurrentHashMapはnull keyとnull value
  • を挿入できません.

    9、スレッドプールのスレッド命名


    一、スレッド作成時に名前が入ってこない
    ThreadPoolManager.potatoPool.execute(new MyThread());  

    この場合、スレッドプールはスレッドに自動的に名前を付けます.スレッドの名前を変更するには、スレッド内のrunメソッドでスレッドsetNameを付ける必要があります.次のようになります.
    public class MyThread extends Thread{  
        public String threadName;  
        public MyThread (String threadName){  
            this.threadName=threadName;  
        }  
    
        @Override  
        public void run() {  
            Thread.currentThread().setName(threadName);  
        }  
    
    }  

    二、スレッドを作成するときに直接名前を入力する
    ThreadPoolManager.potatoPool.execute(new MyThread("aa"));  

    10、LinuxにMySQLをインストールして、本機しかアクセスできない、他の機械がアクセスできない問題


    1、権限の問題、権限の変更
    2、ファイアウォールの原因、ファイアウォールの配置を修正する

    11、スレッドプールコアスレッド数(core)と最大スレッド数(max)


    すべてのコアスレッド(core)が動作している場合、新しく追加されたタスクはキューに追加され、キューがいっぱいになった場合、新しい非コアスレッドがタスクを実行します.

    12、スレッドプールキャプチャ異常

    public class CaptureUncaughtException {  
        public static void main(String[] args) {  
            Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());  
            ExecutorService exec = Executors.newCachedThreadPool();  
            exec.execute(new ExceptionThread2());  // ExceptionThread2  
        }  
    }  
    
    /**  
     * MyUncaughtExceptionHandler: ,  UncaughtExceptionHandler  
     * @author nnngu  
     */  
    class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {  
        @Override  
        public void uncaughtException(Thread t, Throwable e) {  
            System.out.println(t+" , :"+e); // e:  
        }  
    }  

    13、MybatisのMapper


    参照先:
    なぜmybatisのmapperはクラスを実現していないのか(原理探究)
    MybatisでのMapperマッピングファイルの詳細

    14、Jspとservlet、jspの9大内蔵オブジェクト


    サーブレットのライフサイクル:init、service(doGet、doPost)、destory

    JSPの九大内蔵対象:


    組み込みオブジェクト名
    を選択します.
    request
    HttpServletRequest
    response
    HttpServletResponse
    config
    ServletConfig
    application
    ServletContext
    session
    HttpSession
    exception
    Throwable
    page
    Object(this)
    out
    JspWriter
    pageContext
    PageContext

    JSPの4大ドメインオブジェクト:


    オブジェクト
    ドメイン
    ServletContext
    contextドメイン
    HttpServletRequet
    requestドメイン
    HttpSession
    セッションドメイン
    PageContext
    Pageドメイン

    15、ファイルアップロード、socket、ストリーム


    参照先:
    JAvaファイルのアップロードとダウンロード

    16、Netty


    参照先:
    Netty-基本使用説明

    17、集合


    答:List,Set,Map
    Listは秩序化されており、重複要素があります
    Setは無秩序で、重複要素は許可されていません
    Mapはキー値ペア

    18、IOとNIO


    参照先:
    Java NIOシリーズチュートリアル

    19、最後に書く


    最後に、面接官にもいくつかの間違いがあることに気づきました.ここでも記録します.
  • 面接官は、NIOはJDK 1.5以降に導入されたと話しています.(実はNIOはJDK 1.4が導入を開始した)
  • スレッドプールのコアスレッド数(core)と最大スレッド数(max)について、面接官はスレッドプールのスレッド数がコアスレッド数(core)に達すると、新しいタスクがスレッドを作成し続けて処理すると話しています.(実際には、スレッド数がコアスレッド数に達すると、新しく来たタスクはキュー待機処理に参加し、キューがいっぱいになった場合にのみスレッドの作成を継続します)
  • ここまで書いておいて、後で何か補充があったら更新します.
    本明細書では、アドレスを永続的に更新します.https://github.com/nnngu/LearningNotes/blob/master/_posts/2018-03-30-%E6%9F%90%E5%85%AC%E5%8F%B8(%E7%AE%80%E7%A7%B0SMKJ)%E9%9D%A2%E8%AF%95%E8%AE%B0%E5%BD%95.md