- 1. JavaでExcelを操作しよう!!
- 2. Java/IntelliJ/Gradle で HelloWorld を行う
- 3. Spring Boot で @EnableWebFlux 付与していたら WebFlux から静的リソースを配布できなかった
- 4. 【Java】Spring (Boot) で singleton service を使ってDBからデータを取得する
- 5. 総称型を利用したオブジェクトの複製
- 6. csvの1行をダブルクォートで囲まれていない半角カンマで区切る
- 7. Java Agent实现反序列化注入内存shell
- 8. NullpoMino 7.5.0 を Ubuntu 20.04.1 64bit 版で動かす方法
- 9. 0から始めるJava入門 その1
- 10. Selenide + XlsMapperで自動画面テストを行う
- 11. 実務未経験者が業務システム(Java)を実装する前にIT用語を一覧にまとめる
- 12. 【資格試験】(JavaSE8Gold)学習振り返り&まとめ
- 13. エンジニアの本棚卸し
- 14. Oracleから公開されたTribuoを気を取り直してやってみたら中の人は熱い感じの人だった
- 15. Java初学者がeclipseでショートカットキーを使えるように設定してみた
- 16. Doma入門 – Criteria APIで動的にWHERE句を組み立てる
- 17. 【Java開発】Javaのメモリ
- 18. 一緒に覚えるとわかりやすい「Dependency Injection」と「継承」について
- 19. 【Java】STS (Eclipse) に AdoptOpen JDK を設定する
- 20. 【Android / Java】 フラグメントでの画面遷移と戻る処理
JavaでExcelを操作しよう!!
###Excel
まずは、Excelファイルを用意しよう!
![6668de5bf05cb524e045cb3aabae269b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652427/7b6a8eea-2551-4753-ab82-fe427cab9bfd.png)
###Java
“`java:javaExcel
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.user
Java/IntelliJ/Gradle で HelloWorld を行う
#環境
* Windows10
* Java8
* IntelliJ IDEA
* Gradle#Project を作成する
File > New > Project で、Gradle/Java を選び、Next を押下します。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534222/628568c3-2ef3-70da-ab97-36c06a09a6d7.png)Name に任意に入力します。(ef.SpringBootSample)
GroupId と ArtifactId を設定します。(今回はデフォルトです)
最後に Finish を押下すると Project が作成されます。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534222/93f7f9e2-5250-03d8-38d2-ac75e2bfac94.png)#HelloWorld を行う
左側にある Project
Spring Boot で @EnableWebFlux 付与していたら WebFlux から静的リソースを配布できなかった
## 結論
Spring Boot 2.3.4.RELEASE時点でSpring WebFluxを使用する場合、
`@EnableWebFlux`アノテーションを使用すると静的リソースを配布できなくなります。## あらまし
数年ぶりにWEBサーバーを開発することになった。
JavaもWEBサーバーの開発も久しぶりなので情報が多いSpinrg Bootを使用することにした。暫くJavaを使用していなかった間にSpring FrameworkにはSpring WebFluxが追加されていたので、
せっかくなのでWebFluxを使用することにした。初めて使用するSpring WebFluxのドキュメントを軽く読んだ後、
Spring Bootでアプリケーションを自動構成した。この時点ではWebFluxの利用に大きな問題はなかったが、後から静的リソースを配布する必要が出てきた。
Spring BootでWebFluxが構成されていればSpring MVCと同様に静的リソースを配布できるらしい。
`classpath:/static/`にリソースを配置し、WEBブラウザでア
【Java】Spring (Boot) で singleton service を使ってDBからデータを取得する
# Spring (Boot) で singleton service を使ってDBからデータを取得する
・メモリの節約
・キャッシュ機能で高負荷に対応
・読み取りのみ
・ランキングなどで利用してます
・Spring Framework, Spring Boot 両対応
・マッパーの方は適宜読み替えて設定してください
・コンテキスト更新時に初期化
※参考:https://www.baeldung.com/spring-context-events# 環境
・Spring Framework 4.2.9
・Spring Boot 2.2.1
・Java 1.8
・Windows 10 64bit# SampleRankingSingletonService
・データを取得し保持するシングルトンサービス (enum)
・mapper を @Autowired で DI したいけどできないので初期化用のサービスを別に作る
・データの加工はプログラムを追加して対応すると良いと思います。(SQLの発行は高負荷)“`java
public enum SampleRankingSing
総称型を利用したオブジェクトの複製
# はじめに
同一でないオブジェクトを複製させるために、Cloneableインターフェースを実装して`Object#clone`をオーバーライドさせるやり方があります。
ただ、次のコードのように総称型を利用したオブジェクトの複製をしたいときに、直接`Object#clone`にアクセスできずにもどかしい思いをしたので、総称型を利用してもオブジェクトの複製ができるように色々と工夫することとしました[^best]。
“`Java:
class GenericsSample {
@SuppressWarnings(“unchecked”)
staticT cloneSample(T obj) {
return (T) obj.clone(); // コンパイルエラー(不可視なcloneメソッド)
}
}
“`# インターフェースの導入
“`Java:
public interface CloneablePublicly{
T clone();
}
“``Object#clone`の代わりに外部から複製するため
csvの1行をダブルクォートで囲まれていない半角カンマで区切る
“`
BufferedReader br = (読み込むファイル);
while((line = br.readLine()) != null){
//後ろに偶数個の「”」が現れる「,」にマッチする正規表現
Pattern cPattern = Pattern.compile(“,(?=(([^\”]*\”){2})*[^\”]*$)”);
//後ろに偶数個の「”」が現れる「,」で行を分割する
Listelem = Arrays.asList(cPattern.split(line, -1));
}
“`
Java Agent实现反序列化注入内存shell
# 简述内存shell
Java内存shell有很多种,大致分为:
1. 动态注册servlet
2. 动态注册filter
3. 动态注册listener
4. 基于Java agent拦截修改关键类字节码实现内存shell前三种方法在 [《JSP Webshell那些事 — 攻击篇(下)》](https://mp.weixin.qq.com/s/YhiOHWnqXVqvLNH7XSxC9w) 一文中均有讲解,但是前三种方法均需要对中间件大量调试,反射调用一步一步的链条,对于大型中间件比如weblogic这种比较麻烦,无法实现一套代码通用。
那么本文将要讲解的最后一种方法,通过拦截修改关键类的字节码,只需要寻找到关键类做处理即可,进而最大程度实现一套代码通用(理论上)。
# 简单认识Java Agent
在jdk的rt.jar包中存在一个`java.lang.instrument`包,该包提供了一些工具帮助开发人员在 Java 程序运行时,动态修改系统中的 Class 类型。其中,使用该软件包的一个关键组件就是 Javaagent。从名字上看,似乎是个 Java 代理之
NullpoMino 7.5.0 を Ubuntu 20.04.1 64bit 版で動かす方法
## Java の準備
java 8 をダウンロード
https://www.java.com/ja/download/
![スクリーンショット_2020-09-30_12-07-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/c2d8816d-84f2-45e0-5aeb-952e220c376e.png)
“`sh
tar xzf jre-8u261-linux-x64.tar.gz
“`## NullpoMino 7.5.0 の準備
https://github.com/nullpomino/nullpomino/releases/
から
NullpoMino7.5.0_linux.tar.gz
をダウンロード![スクリーンショット_2020-09-30_12-10-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/0c274fb0-5517-ec11-2bae-
0から始めるJava入門 その1
# はじめに
今年の春からIT企業に入りました。自分自身、大学でC言語触ってたくらいのスタートでした。
そんな中、プログラミング研修を受けてて思ったのが、分かりづらい….でした。結局、研修が充実していると聞いて入ったものの、自習で全て賄う形になってしまいました。
そんなプログラミング完全初心者の新入社員(新入生?)に向けて、プログラミングってこんなんだよというのを伝えられればと思い書き始めました。※ 一部、分かりやすさ重視で実際とは異なる記述をしています。(コンパイルなど)
完全な初心者に向けての記述なので、分かっている人はスルーしてください。## 環境
プログラミングをやるには環境が必要です。
javaはなんかめんどくさくて、jdkを入れないと動かなかったりなんだりがあります。
プログラミング自体、色々な開発環境や実行環境などありますが、とりあえずjavaを始めるならDokojavaでいいと思います。**Dokojava**で検索すれば出てきます。
いちいちパスワード打つのめんどいという人は、eclipse をダウンロードしましょう。”pleiades”で検索して(おそ
Selenide + XlsMapperで自動画面テストを行う
# 環境と実装方法
IDE:eclipse(Oxygen.3)
言語:Java環境構築まで
eclipseで新規のMavenプロジェクトを作成。
以下のコードを入力して、実行→Maven Install“`
com.codeborne
selenide
5.9.0
test
junit
junit
4.12
実務未経験者が業務システム(Java)を実装する前にIT用語を一覧にまとめる
#はじめに
皆さまこんにちは。@kanato4と申します。
今年未経験で転職し、IT業界に飛び込んだペーペーです。入社して3か月はシステムのテスト・エビデンス取得が大半で、プログラミングの勉強は家でするような生活が続いていたのですが、実務ではどんな開発をやっているのか知りたい!と思ったので現場の業務システムの設計書を読みはじめることにしました。
ですが。。設計書を読み進めると、普段あまり目にしない横文字や略語?ばかりで理解しようとしても全然頭に入ってきませんでした。。。
というわけで、設計書等で出た分からないワードを片っ端から調べあげて理解してやろう!というのが本記事を書くきっかけでした。
※本記事は業務システム開発(Java)に入る前に調べたことをメモとして残す目的で執筆しています。
#分からなかった単語集
##プログラミング言語関係(Java関係)
###J2EE
Java 2 Platform, Enterprise Editionの略。
大規模開発において、Javaでプログラミングを行う際に言語処理系が提供する機能を呼び出す規約(API)のセットなどが定義されてい
【資格試験】(JavaSE8Gold)学習振り返り&まとめ
#はじめに
2020年の7月にJavaSE8Gold資格を何とか取得しました!
ですが、あまりよろしくない点数だったのでJavaGoldSE11の黒本が出たタイミングで移行試験を受けて理解度を高めようと考えています。と言う事で次回受験に向けて今回の試験の振り返ります。
#前提
初心者の勉強方法なので、業務でガリガリやっている人には向けにはならない気がします。。。
それを前提に生暖かく読んで頂ければと思います。
(むしろ何か間違えていたら指摘くださると嬉しいです←#JavaSE8Gold試験について
公式より抜粋。
この試験を初心者が取得したとしても、経験的差が圧倒的で本当の中級者には達していないと思います。ですが、公式見解的に中上級者として認められるというのは嬉しい事ですよね。>Oracle Certified Java Programmer, Gold SE 8 認定資格は、設計者の意図を正しく理解して独力で機能実装が行える中上級者向け資格です。Javaアプリケーション開発に必要とされる汎用的なプログラミング知識を有し、設計者の意図を正しく理解して独力で機能実装が行える
エンジニアの本棚卸し
#目的
自分がインプットしてきた技術関連知識の足跡整理。
文字にするとキリがないので、~~面倒ではない~~視覚的に集約されているという点で本棚の書籍写真でペタペタ整理。#足跡
##入り口はC言語
![C言語、C++](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188787/280209d5-2ae3-8ba3-dadf-cb5e5f82bc3d.jpeg)猫でも分かるC言語で自分が猫未満であることを悟り、苦しんで〜みたいな名前の書籍を読んだ記憶。
DXLibraryを使用してゲーム製作をしたり、遺伝的アルゴリズムでレースゲームのゴール時間を最適化したり、TCP/IPレイヤをイジったり、二度デストラクタを呼び壊したり、ダングリングポインタを参照して壊したり、壊したり。##Webアプリケーションに興味が出てPHPあたり
![PHP、JavaScript](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188787/851e6d
Oracleから公開されたTribuoを気を取り直してやってみたら中の人は熱い感じの人だった
##前置き
リアルタイムでいろいろ更新されているため、情報整理のために、再度チュートリアルの内容をまとめました。本記事は[こちら](https://tribuo.org/learn/4.0/docs/)の内容を元に書いたものです。##資料について
[元ネタはこちらを参照してください。](https://tribuo.org/learn/4.0/docs)
[日本語が必要ならこちらを参照してください。](https://qiita.com/jashika/items/bc03dbbca92ba38f4502)
[アヤメデータのダウンロードはこちらを参照してください。](https://archive.ics.uci.edu/ml/machine-learning-databases/iris)
[ソースコードはこちらを参照してください。](https://github.com/oracle/tribuo)
[Java Docはこちらを参照してください。](https://tribuo.org/learn/4.0/javadoc)##変更点
[CSVデータロードの不具合は修正されて
Java初学者がeclipseでショートカットキーを使えるように設定してみた
eclipseでJavaの学習をするにあたり、ショートカットキーがうまく効かずに困ったので、解決策をメモします。
## 使用環境
**macOS CataLina**
**eclipse2019/ Full Edition**eclipseについては、Pleiades All in One というパッケージを使用しています。日本語化プラグインもそのまま使えるので便利です。
ちなみに、こちらからダウンロードできます。
https://mergedoc.osdn.jp/## 手順
**Eclipseの設定 > 一般 > キー**
の **「スキーム」** が **”デフォルト”** の箇所を**”Emacs”** に変更。
→ **「適用して閉じる」**を選択。
これだけです!!
少しでもお役に立てれば幸いです。
Doma入門 – Criteria APIで動的にWHERE句を組み立てる
## はじめに
データベースアクセスライブラリの評価項目はいくつかありますが、その中でも動的なSQLをどれだけ組み立てやすいかというのは優先度が高い項目なのではと思います。静的なSQLは簡単に書けるのに、動的なSQLとなると途端に大変になってしまうというのはありがちですね。特に業務系のアプリケーションの場合、画面に複数の検索項目があり、指定されていたら検索条件に含め指定されていなければ含めないというような要件がありますが、ライブラリが提供する機能によってはアプリケーションのコードが条件分岐だらけになり可読性が低下してしまいます。
この記事では[Doma](https://github.com/domaframework/doma) 2.43.0のCriteria APIを使って動的にSQLのWHERE句を組み立てる機能を紹介し、Domaでは上述した問題をどのように解決できるかを示します。
DomaやCriteria APIの概要については、[Doma入門 – Criteria APIの紹介](https://qiita.com/nakamura-to/items/cf97c6b5
【Java開発】Javaのメモリ
#初めに
皆さん。こんにちは!
DreamHanksの254cmです。
今回は今までのjava記事で少しずつ言及されましたが
扱ってなかったメモリについて簡単に扱おうと思います。
Java記事のまとめは[こちら](https://qiita.com/DreamHanks/items/6b1996e1f8ed66bbd456)です。
##JVM
メモリについて話す前にJVMというものを分かる必要があります。
JVMは「**Java Virtual Machine**」の略であり、Javaプログラムを実際に実行するものです。
JVMはCPUやオペレーティングシステムに関係せず、Javaプログラムを実行することができます。
そのJVMの中にはClass Loader,Execution Engine, Garbage Collector, Runtime Data Areaなどで
構成されていますが、今回は「**Garbage Collector**」「**Runtime Data Area**」だけを扱います。
###Garbage Collector
Garb
一緒に覚えるとわかりやすい「Dependency Injection」と「継承」について
#はじめに
DreamHanksの松下です。今回は「Dependency Injection」と「継承(extends)」について解説していきます。[連載記事まとめ](https://qiita.com/DreamHanks/items/7df703a509ef22f64d2c)
#「Dependency Injection」と「継承」とは
###Dependency Injectionとは
他のクラスやインターフェースのオブジェクトを実装したいクラス内で生成することによって、
他のクラスのメソッドを使えるようにするもの。###継承(extends)とは
実装しているクラスをサブクラス(子クラス)だとして、スーパークラス(親クラス)を継承(extends)
することによって親のクラスのメソッドを使えるようにすること**要するに両者とも実装したいJavaクラスに他のクラスのメソッドを使えるようにしたいというものです。**
他にも「コンストラクタインジェクション」、「setter/getterインジェクション」
【Java】STS (Eclipse) に AdoptOpen JDK を設定する
# STS(Eclipse) に JDK を設定したい
・Eclipse を 2020-09 に更新したら jre で Eclipse 動かしてるよ!ってメッセージが出る
・メモリ状態の把握のために MissionControl 入れようとしたらJDKで動いてないと駄目だった!・・・という理由でEclipseを jdk で動かしたいがどのJDKにすれば良いか迷ったので忘備録です。
## 環境
・Windows10 64bit
・STS4 (Eclipse2020-09)
・AdoptOpenJDK 11, ~~15~~ (15だとエラー出ます、不具合直るまで待ったほうがよいかも)## JDKって色々ありますね・・・
・Oracle JDK (Java SE)
https://www.oracle.com/java/technologies/javase-downloads.html
jdk download とか検索すると出る、元々は商用利用可能だったが今はライセンスが必要な jdk。・Open JDK
https://openjdk.java.net/install
【Android / Java】 フラグメントでの画面遷移と戻る処理
# はじめに
Android Studio で Javaを用いたモバイルアプリの開発を学んでいます。
layoutファイルについてはあまり力を入れて記述していません(ざっくりです)。画面切り替えの動作等にフォーカスしているため、stringファイルは使用しませんでした。### 学んだ内容
– “FragmentManager“ “FragmentTransaction“ を用いた表示フラグメントの切り替え(画面遷移)
– “addToBackStack“ “popBackStack“ を用いたアクションバー戻るボタンクリックで戻る動作# 学習のために作成したサンプルアプリの概要
1つのアクティビティにメインとなるフラグメントを用意し、そこからボタンを押すことによって2つのフラグメントに行き来ができるだけの簡単なアプリ。
アクティビティ:1つ
フラグメント:3つ(メイン1つ、サブ2つ)この①、②ボタンでサブフラグメント1、サブフラグメント2にそれぞれ遷移する
メイン画面(MainFragment)|
———————-|