2018-10-01から1ヶ月間の記事一覧

11月1日の学び(その①)

ちょっと一日早いけど明日は書けるか不明なので。 単に言葉だけ知ってもしかたなくてベストプラクティスを学ぶのが必要。 例外そもそも論 例外が実装されていない言語(C言語)ではいちいち戻り値をif文で分岐する必要があり面倒。 そういう意味ではJavaの例…

10月31日の学び②

エラーと例外は違う。 エラーや例外の実体はインスタンス。 「エラーが発生してプログラムが強制終了」「例外が発生してプログラムが強制終了」「例外が発生したがプログラムは強制終了しない」の3通りがあることを意識。 Javaの例外概要(大切) 土台とし…

10月31日の学び

昨日ちょっと書いたことの続き Javaの例外の概要 Javaでは例外が発生しうる処理を呼び出した時try/catch構文を用いて「例外を回復」するか、thorws句にてその例外を上位レイヤーに「通知」するかのどちらか どこで誰が「通知」「回復」するかは設計時に考慮…

10月30日の学び

UPSERT UPDATE + INSERTのこと データがない場合は新規追加を行い、データがある場合はその既存データを更新する ロックの種類 行ロック:レコードに対してロック 表ロック:表全体に対してロック Javaの例外 単に文法をしっているだけでなく、こういうアン…

10月29日の学び

スレッド処理の注意点 スレッド処理中にsleep処理を実装するのはあまり望ましくない DBアクセス中にsleepに入るとデッドロックの温床になりうる Visitorパターン 余り使う機会はなさそう thisを使うことで呼び出し元クラスに呼び出し先クラスそのものを受け…

10月28日の学び

↓のサイトは神レベルなので時間があるときに読み込んでおくこと qiita.com 「仕様の明確でないメソッドを作るのは迷惑行為です!」 「自分にしか理解できないコードを書くことは迷惑行為です!」 「API の仕様を説明できないのであれば、正しいユニットテス…

10月27日の学び

配列とList 配列は宣言時にサイズを決める必要がありサイズは固定のため変更ができない Listはサイズが可変のため必要に応じて変更できる List ListはCollectionsクラスを継承したインタフェース public interface List<E> extends Collection<E> { (略) } List</e></e>…

10月25日の学び

Springの構成 こういうのがあると本当に助かる。 qiita.com Java Beans 以下の要件を満たすクラス 引数のないコンストラクタが定義されていること アクセサメソッドが定義されていること(メンバ変数はすべてprivate) シリアライズ可能であること

10月24日の学び

Javaは1ファイル内に複数クラスを書くことができるが、1ファイル1クラスが原則。基本的に大規模開発向けの言語なので。 MavenもGradleもビルドツール。開発環境の準備〜コンパイル〜warファイルの作成〜デプロイまで一気通貫にしてくる。 WARファイル WARフ…

10月23日の学び

Tomcatは起動手順とかファイル構成とかがとにかく複雑。。。 Javaのプロパティファイル Propertyファイルとはキーと値が対になったデータを保存しているファイル プログラムのconfig値などを保存 コンパイルなしでプログラムの設定の変更が可能(ハードコー…

10月22日の学び

量子コンピュータの勉強会の発表無事に終わった。レベルが高くてびっくり。。。 Flyweightパターン 生成したインスタンスをプールに保存・共有するすることでリソースを節約する 別にオブジェクト指向とは関係ないような気が... Mementoパターン インスタン…

10月21日の学び

昨日は勉強会の資料作成のためブログ更新はできず。。。 Proxyパターン 呼び元と処理を実行するクラスの間に中間のクラスを生成する 処理の実行時に初めて処理を実施するクラスをインスタンス化する サンプルコードを見てインタフェースは要はAPIを実装する…

10月19日の学び

コンソールを開いた状態でttyコマンドを実行すると以下のように表示される。 $tty /dev/pts/1 ttyコマンド 標準入力に紐付いた端末やファイルを表示するコマンド そもそも linuxでは全てのIOはデバイスファイルを経由する そのためttyコマンドを実行した際に…

10月18日の学び

Bridgeパターン 継承と密結合 抽象クラスは機能を提供し、継承するサブクラスは実装を提供するという役割分担がある。 抽象クラスとサブクラスが密結合になるため、機能と実装が密結合となる。 そのためn個の複数の抽象クラスがm個の同じ実装を保つ場合は、n…

スーパークラス・サブクラス

ズバリはっきり書かれていたのでメモ。 両者の役割分担はスーパークラスの抽象メソッドでAPIを定義し、継承したサブクラスで具体的なAPIの中身を実装する。 利用する側はサブクラスをスーパークラスの型に代入することで抽象度の高いスーパークラス経由で呼…

10月17日の学び

qiita.com デザインパターンっていっても全23パターンが重要なわけではないので注意。中には「これ特に命名するほどでもないよね!?」というのもある。 モジュール間の疎結合化を勧めていくと自然と同じことをやっていたことも多い。 以下順不同でつらつら…

今日の学び10月16日(Java編)

Mavenは超便利!! Maven概要 開発環境管理ツール:既存プロジェクトをimportする場合にpom.xmlからmavenを更新することで、プロジェクトで利用中のライブラリ・プラグイン・フレームワークを一括で取得する。 ビルドツール:クラスファイルの作成、jarファ…

今日の学び10月16日(Git編)

Git

ブランチの種類 どの観点から見るかで呼び名が異なることに注意。 リモートブランチ:リモートリポジトリのブランチ。 リモート追跡ブランチ(masterブランチからは上流ブランチ):origin/masterのようなローカルリポジトリに存在するリモートリポジトリ相…

10月15日の学び

DB

排他制御(ロック)に関しての整理 楽観的ロック データの同時更新が発生する頻度は低いことを想定。 データそのものに対してロックは行わずに、更新対象のデータが参照時と同じ状態であることを確認してから更新する。 データそのものは第三者からもアクセ…

10月14日の学び

デザインパターンの本を読んでいて初めて知ったけど、継承においてスーパクラスとインタフェースはどちらも子クラス/実装クラスを代入可能という点では共通なのね。 スーパークラス→抽象クラス→インタフェースの順に抽象化・パーツ化が上がっていく。 スーパ…

今後取り組む課題

★ソースコード公開 自分で取り組むこと システム全般一般論 ロック Git テスト技法 見積もり テスト自動化 開発手法 セキュリティ関連 ★ハニーポットの作成 Webテスト環境へのアタック 暗号化 アセンブラ OS Linuxソースコードリーディング コンピュータ理論…

10月13日の学び

今日は発表で疲れたので最低限だけ。。。 Javaのエラーの分類 ランタイムエラー:プログラム実行中のエラー コンパイルエラー:コンパイル実行時のエラー DBの復習 データベース:テーブルの集合 テーブル:データ要素(値)の集合を垂直な列と水平の行のモ…

10月12日の学び

jarファイル ・Java Archiveの略 ・関連する複数のJavaファイルを1つにまとめてパッケージ/ライブラリ化したもの ・実体はJava 仕様に準拠して定義されたzip圧縮ファイル ・jarファイル単体でも実行が可能 warファイル ・Web ARchiveの略 ・Tomcatなどのア…

10月11日の学び

JREとJDK JREとJDK:JREにはAPIとJVMが内包されている。JDKにはAPIとJVMに加えコンパイラが内包されている。 2種類のJDK JDK:Java開発者向けのバイナリ形式。オラクルによりリリースされるJava SE、Java EEやJava MEの各プラットフォーム全ての実装。JREも…

10月10日の学び

Javaは何が仕様で何が仕様に対応した実装なのかを区別する必要がある。今日は仕様関連を整理した。 以下は全て仕様 Jave SE:Java Platform, Standard Editionの略称。Java SEはJava APIの仕様の集まり。Java 8とかJava 10というものは存在せずJava SE 8だっ…

10月9日の学び

型安全 ・下の説明は凄い。BOF攻撃と型安全の間には関係があったのか。。。 ・プログラミング言語において「文法的な正しさ」と「意味的な正しさ」が一致するとは限らない。 ・「文法的に正しいが実装のない実装(=動作未定義)」が存在し、往々にしてセキ…

10月8日の学び

・JavaではHashMapの初期化がめんどくさい。コンスタラクタ内で初期化ができない。 ・HTML5は要するに規格。実装は各ブラウザに依存。 SpringBoot ・@RestControllerでは View に遷移せず、メソッドの戻り値がそのままレスポンスのコンテンツ。JSON や XML …

10月6日の学び

Java ・当たり前だけどヌルポが発生するのは代入ではなく参照時。 ・ではどうやって確認するのか?代入時がそもそもの原因なので原則的に値の代入時にNullチェックをやるべき。 ・ただし渡されたオブジェクトを参照するだけ、などの場合はチェックする必要が…

10月5日の学び

・intは基本テータ型(プリミティブ型)だが、ラッパークラスのIntegerは参照型。 ・後者はオブジェクトなのでnew()を用いて生成する。 ・オブジェクト型には様々なメソッドが存在するが基本データ型にはない。 ・メソッドの引数に参照型しか受け付けない場…

10月4日の学び

・Javaにおいてはコンストラクタが例外を発生させるのはあり。これがC++においては望ましくない。前者はガーベジコレクションの機能があるが、後者には存在しないのが理由。 ・Javaは良くも悪くも設計書通りに実装できる言語。ウォータフォール向きだと感じ…