2013年の仕事で出会った20の問題:261-280


最近出会った20の問題は、多くの場合よく見られるもので、学習価値があります.
いくつかは1回目の出会いで、大部分が解決して、とても力があります.
個別の問題では、根本的な原因を見つけるのは難しいかもしれません.
興味があるなら、見てみましょう.
261.文字列は最も一般的なバグを処理する.nullであるかどうかだけでなく,文字列インデックスが境界を越えているかどうか判断する必要がある. 
private void handleStr(String ids) {
        if (ids == null) {
            return;
        }
  //           ,java.lang.StringIndexOutOfBoundsException
   char ch = ids.charAt(0);

より多くの場合、Apache Commons LangコンポーネントのStringUtilsを使用する.isEmpty(ids). 262.需要の変化に対応する.
titleCell.setCellValue(tableTitle+subTitle);

タイトルセルの元のタイトルはtableTitleで、後にサブタイトルを追加する要求があり、subTitleで構築しました.今またサブタイトルを外すように要求して、私はsubTitleを取り除くだけでいいです.2つの変数に分けるのは、確かに適切です.需要の変化に対応するのも良い方法です.観点:プログラム中の概念と現実の論理概念は一つ一つ対応し、実行可能である.プログラム内の2つの変数「tableTitle,subTitle」は,現実世界における表タイトル(メインタイトル),サブタイトルに対応する. 263.関数の実行時間を計算します.レポートをドラッグ&ドロップするのはとても遅いので、7 sかかります.私が最適化します.まず、どの関数がどれだけ実行されたのか、どのsqlがどれだけ時間を費やしたのかを知る必要があります.a.最も愚かで最も簡単な方法は、各関数の呼び出し開始と終了が開始時間startTimeと終了時間endTimeを保存し、計算を行うことである.b.各メソッドの実行をブロックし、時間を計算する「ブロック」を書く.これはまた難しすぎて、何の考えもありません.c.Hibernateクエリを考えると、本当にsql文を実行する方法はqueryです.list()メソッド.したがって、queryを計算するだけでよい.List()という方法の実行では,各関数の実行時間が得られるだろう.偶然なことに、私は強力なBaseDaoを書いて、ほとんどのクエリーは最終的に1つの方法にまとめました.    
protected List executeQueryList(String hql, Map<String, Object> params,
   Integer firstResult, Integer maxResults) {
  Query query = createQuery(hql, params);
  if (firstResult > 0) {
   query.setFirstResult(firstResult);
  }

  if (maxResults > 0) {
   query.setMaxResults(maxResults);
  }
  Date startTime = new Date();
  List list = query.list();
  String costTime = CostTimeUtils.getCostTime(startTime);
  println(query, costTime);
  return list;
 }

このように、私は1つの場所で、時間を計算するだけで、各メソッドとsql文の実際の実行時間を大体知っています. 264.MySQLプライマリ・キーの自己増加の問題.機構テーブルOrganizationなど、主キーが格納されている機構のID.場合によっては,いくつかの範囲の主キーを保持するために,IDの自動増分初期値を手動で5000などに設定する.
265.優先度に応じてレイアウトを調整し、効率を向上させる.データベースフィールドは、最も一般的に最も前面に配置されます.クラスの方法で最もよく使われるのは一番上に置くことです.同様に、履歴書の重要な情報は前の位置に置かれています.
266.親友の同僚が、多くの優秀な技術者がコードを書かなくなったと聞いた.これはもったいないですね.人によって選択が違う.コードを書かないで、給料がもっと多くて、有名だとは言えません.もちろん、多くの技術を排除しない牛は依然としてコードを書くことを堅持して、収益もとても良いです.
267.データソースが正しく構成されているかどうかを検出します.Webシステムのバックエンド管理インタフェースは、各項目に対応するデータベースが正しく配置されているかどうかを判断する必要があります.  
<bean id="dataSourceMap" class="java.util.HashMap">
    <constructor-arg>
      <map key-type="java.lang.String">
         <entry key="demo">
           <bean parent="abstractDataSource" >
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" />
       </bean>
         </entry>
        
          <entry key="data">
       <bean parent="abstractDataSource" >
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/data?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" />
       </bean>
         </entry>
      </map>
    </constructor-arg>
  </bean>
 
   /**
  *          
  */
 public boolean hasDatabaseByKey(String name) {
  boolean containsKey = dataSourceMap.containsKey(name);
  if (containsKey) {

   try {
    Object obj = dataSourceMap.get(name);
    com.jolbox.bonecp.BoneCPDataSource dataSource = (com.jolbox.bonecp.BoneCPDataSource) obj;

    String password = dataSource.getPassword();
    String username = dataSource.getUsername();
    String url = dataSource.getJdbcUrl();

    Connection con = DriverManager.getConnection(url, username,
      password);
    if (con != null) {
     con.close();
    }
    return true;

   } catch (Exception e) {
    LOG.error("Database name error:" + name);
    e.printStackTrace();
   }
  }
  return false;
 }

268.Hibernateセッションセッションセッションセッションの接続を手動で取得します.        
Session session = dataResourceDao.getsession();
  Connection con = session.connection();
  con.setAutoCommit(false);

  dataDao.add();
  con.commit();

この場所で取得したConnectionは、Springが管理するデータベース接続プールにあります.conを呼び出す必要はありません.close()メソッド.シャットダウンした場合、データベース接続プールには接続が保存されますが、シャットダウンされます.その結果、再度接続を取得すると、「接続が閉じている」というメッセージが表示されます.
269.テーブル名はデータベースのキーワードです.Group、OrderはすべてMySQLのキーワードです. 
select * from Group where projectId =1 and groupType =1 and type =1

SQL構文エラーが表示されます.
270.Tomcat作業ディレクトリ.プロジェクトの再構築後、変更が大きく、再配置後、エラーが発生しました.Tomcatの作業ディレクトリの下にあるプロジェクトファイルC:tomcatwork 271をクリアします.WAL:Write-Ahead Loggingプリライトログシステム.データベース内の効率的なログアルゴリズムであり、メモリ以外のデータベースではディスクI/O操作がデータベース効率の大きなボトルネックとなっています.同じデータ量でWALログを用いたデータベースシステムは、トランザクションのコミット時に、ディスク書き込み操作が従来のロールバックログの半分程度しかなく、データベースのディスクI/O操作の効率を大幅に向上させ、データベースの性能を向上させる.
272.休暇届.もともと休暇届はプロジェクトマネージャーに統一的に渡し、プロジェクトマネージャーは直筆でサインし、開発計画グループや人事部に統一的に渡した.現在、職場を調整した後、製品マネージャーは直接印鑑を押して署名し、自分で人事部に渡す責任を負っています.スタンプを押してサインして、ハイエンドの大気のレベルですね.私も欲しい!
273.ドキュメントスタイルのJavaDocコメントを多く書く.以前はクラス、publicメソッド、publicフィールドにのみJavaDocスタイルの注釈を書いていたが、突然プライベートフィールド、プライベートメソッドにもJavaDoc注釈が必要であることが分かった.
/**
 *     
 */
 private String authorName;

このように、この変数を使用する場所では、マウスをフィールドの上に移動するとヒントが表示されますが、/**/このスタイルのコメントにはヒントがありません.
274.HibernateのエンティティークラスはSerializableインタフェースを実現する.
public class User implements Serializable;

シーケンス化インタフェースの実装はオプションです.ハードディスク(HDD)にキャッシュする必要があるエンティティの場合は、Serializableインタフェースを実装する必要があります.
hibernateには2次キャッシュがあり、キャッシュによってオブジェクトがハードディスクに書き込まれ、シーケンス化され、ネットワーク内の互換性のあるオブジェクトの転送などが必要です.参考資料:http://blog.sina.com.cn/s/blog_7d0b04e70101hp7r.html
275.HQL文の弊害.String hql="from User where name=:name";エンティティとフィールドの名前が変更されると、hql文が間違って表示されます.Eclipseに付属する名前変更機能は、hql文に関連するエンティティとフィールドの名前を一緒に変更することはできません.
プロジェクトの初期には、適切なデータベース・テーブル名、フィールド名、エンティティ・クラス名、属性名を定義することが重要です.必ず合理的で実行可能な規範が必要だ.
276.連結テーブル問合せフィールドの競合.最近、いくつかのテーブルのプライマリ・キーをidに変更しました.元はcidです.hql接続テーブルを構築し、ソートするときorder by id.大まかなエラーメッセージ「The id is Ambiguous.」  Ambiguous adj. あいまいな曖昧さを引き起こす.2つ以上の意味があります.あいまいである
277.CSDN空間は友達に注目できない.ここ数ヶ月、多くの人が私に注目して、数十人から450ぐらいに増えました.以前、私はよくいくつかの人に関心を持っていたので、過去に関心を持っていた+最近私のファンに関心を持って、999に達しました.私のメールとブログの私信を経て、CSDNの公式に問題をフィードバックして、まだ解決されていません.CSDN公式の比較的に気になる情報:オペレーティングシステムとブラウザ私の以下の試みはすべて失敗しました:Windows 7+QQブラウザWindows 7+検索ブラウザWindows 7+Firefox Ubuntu 10+Firefox 2太パソコン、2種類のシステム、3種類のブラウザ、2種類のipはすべて正常に“関心”することができません.もう一つのアカウントは、以前の小号、huoyingfansが、正常に「注目」することができます.最後に、私はCSDNの公式製品の取引先に電話をかけて、私が出会った特殊な問題をフィードバックして、彼らに私のアカウントとパスワードを教えて、最終的に、CSDNの公式-研究開発人員は問題をデバッグして、“すでに999に関心を持っています”は上限に達しました.この問題は長い間憂鬱だったが、「関心が上限999に達した」という誤ったヒントが正しく表示されなかった.  278.再現されていないMySQL異常です.
Caused by: org.springframework.jdbc.UncategorizedSQLException: Hibernate flushing: Could not execute JDBC batch update;

uncategorized SQLException for SQL
[update Dashboard set projectid=?, groupid=?, name=?, intro=?, createUser=?, type=?,
createUserId=?, createDate=?, widgets=?, filtersCollection=?, metricsCollection=?,
dimensionsCollection=?, periodsCollection=?, reportIds=? where id=?];

SQL state [HY000]; error code [1206]; The total number of locks exceeds the lock table size;
nested exception is java.sql.BatchUpdateException: The total number of locks exceeds the lock table size

これはMySQL IndodDBに関するいくつかの問題です.
肝心なのはプロジェクトのDashboardという表で、データ量は小さいですよ.再現されていません.
279.MySQLを起動します.サービスmysqld restartのより多くの起動方法は、参照してください.http://blog.sina.com.cn/s/blog_4d6c45250100y890.html
Debianオペレーティングシステム私のMySQLはuser/binディレクトリの下でmysqlを使うべきですsafeというコマンドはmysqldなしで起動します.
通常のユーザーがインストールしている可能性がありますが、一部のフォルダでは権限が低い場合があります.rootが起動し、常にエラーが発生し、ディレクトリの下のファイルを作成できません.
mysql_safe起動時にMySQLのデータディレクトリを指定する必要がありますが、デフォルトは使用していません.
280.SSHは突然リモートLinuxサーバーに接続できなくなった.その中で、私たちがよく使う2台の機械がつながっていません.
エラーメッセージ:ssh_exchange_identification: Connection closed by remote host
エラーメッセージによると2台の機器が突然接続できなくなり、秘密鍵に問題がある可能性は低いと思います.
午後、運維部の関係者を探しに行ったが、ちょうどいなかった.以下の运维部以前の二番手、2012年春、実习期间のボスに立ち寄るしかなかった.ssh ip-vは-vパラメータによりデバッグモードを開き、より詳細な情報を表示します. OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008debug1: Reading configuration data/etc/ssh/ssh_configdebug1: Applying options for *debug1: Connecting to 192.168.1.111 port 22.debug1: Connection established.debug1: permanently_set_uid: 0/0debug1: identity file/root/.ssh/identity type -1debug1: identity file/root/.ssh/id_rsa type -1debug1: identity file/root/.ssh/id_dsa type -1debug1: loaded 3 keysssh_exchange_identification: Connection closed by remote host
小Boss:checkingと検証が終わったので、接続を確立する準備ができて、直接切れました.ターゲット側サーバの公開鍵がまだ検証されていないことは明らかです.
これはリモートカードでターゲットマシンに登ってsecurityのログを見て、見ればわかります.本機ロゴから異常は見られませんでした.
最終的な解決策:sshdの権限が誤って変更されました.感言:LinuxとMySQLの多くの細部は、あまりよく知られていません.まじめに本を読んで,補習しなければならない.
関連読書
仕事の問題http://blog.csdn.net/FansUnion/article/category/1334371
原文参照:http://FansUnion.cn/articles/2963