20191020のJavaに関する記事は5件です。

大学を中退後、未経験エンジニアとして入社し半年が経ちました

自己紹介

はじめまして。いち(@Ichi929 )と申します。
この記事はタイトル通り未経験からエンジニアになった振り返りと、今後に向けてのアウトプットの意思表明、
また同じように未経験からエンジニアを目指す人の助けになればと思い投稿します。

私の今までの過程をざっと振り返ると

大学受験失敗

なんとなくで決めた地方文系学部へ進学
想像していた学習レベルとのギャップで大学をサボりがちに

結果2留

このまま2年ハンデを背負い卒業し、しょぼい学歴の新卒カードを得た(24歳)になるより技術職を目指そうと考える

大学を退学(2018年春)

プログラミング学習と就職の場を求め上京(2018年6月)

スクールでJavaを学びつつ就活(就活は8月頃から)

10月末に内定

1月からエンジニアとしてお仕事をし今に至る
(9ヶ月だから既にタイトル詐欺)

どんな働き方をしているか

SESとして客先常駐Javaエンジニアとしてお仕事をしています。
(SESとしての働き方や給与フローについては思うところはありますが、それも含めた話ついてはまた別でまとめる予定です)

キャッシュレス対応改修作業
言語:Java、HTML、JavaScript
DB:Oracle
フレームワーク:Springベースのカスタムフレームワーク

ECサイト基盤構築作業(←イマココ)
言語:Java、HTML
DB:Postgre
フレームワーク:独自フレームワーク

実際にエンジニアとして働いてみて

やはり感覚として感じるのは、知的好奇心が非常に重要だなと感じました。
ノルマだけを期日内でこなしているだけのエンジニアは以前の現場でも今の現場でもいますが、
やはり伸び悩んでいる(伸びる気がない?)ように見えます。

良くも悪くも、調べてもわからないことは開き直り、先輩方やチームメンバにガンガン聞きに行くことが苦ではない性格が幸を奏して、
半年前より実装やその意図が徐々に見えてくるようになりました。
(※時間を割いて対応してくださる先輩やメンバには頭が上がりません)

エンジニアに学歴は必要ないのか

よく言われる「エンジニアに学歴は必要ない」というのは半分ウソで半分本当だと感じています。

一部大企業ではフィルタが存在するとも言われていますが、現状の肌感では学歴を聞かれたことはありませんし、
企業の方とお話していてもそういった話は聞きません。
技術や経験を質問されることは多いので、やはりチームメンバとして力になるかどうかを問われている気がします。

未経験からエンジニアになろうとしている方へ

エンジニアになるためにもっとも必要なのは

・行動力
・知的好奇心

だと思いますので、まずは行動をすることが重要だと思います。
日々できることが増え、コーディングをすることに喜びを感じられるのはエンジニアならではだと思います。
まずはオンライン学習が可能なサイト(Progateドットインストール等)で触れてみるのもいいでしょう。

ただやはり実際にわからないことが聞ける環境というのは大切なので、その際はteratailを利用したり、プログラミングスクールに通うのも手だと思います。

学習言語についてもSIer/Web系等、目指す業界によっても最適な言語は変わってくるので、よく調べることをおすすめします。(ソースは俺)

私のこれから

Java単体としての実装は読めるようになり、コーディングも問題なく一人で可能な事が増えてきましたが、
どうしても各フレームワークの理解や開発アーキテクチャ、データベースへの理解など、まだまだ学ぶべきことは多くあります。
そのため、これからは興味のある言語や技術を学習しつつ、Web周りの知識等を積極的にキャッチアップしてアウトプットもしていきたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Maven で「詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください」と表示されたときの対処

「詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください」と言われる

$ mvn compile
(中略)
[WARNING] /Users/az/app/src/main/java/MyApp.java: /Users/az/app/src/main/java/MyApp.javaの操作は、未チェックまたは安全ではありません。
[WARNING] /Users/az/app/src/main/java/MyApp.java: 詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。

対処方法

pom.xml の plugins 要素に以下のように Compiler Plugin の設定を追加する。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  <configuration>
    <compilerArgs>
      <arg>-Xlint:unchecked</arg>
    </compilerArgs>
  </configuration>
</plugin>

これで具体的な警告内容が表示されるようになる。

[WARNING] /Users/az/app/src/main/java/MyApp.java:[50,17] raw型java.util.Mapのメンバーとしてのput(K,V)への無検査呼出しです
[WARNING] /Users/az/app/src/main/java/MyApp.java:[53,12] 無検査変換
  期待値: java.util.Map<java.lang.String,java.lang.Object>
  検出値:    java.util.Map

今回の環境

  • Apache Maven 3.6.2
  • OpenJDK 11.0.2

参考資料

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Stable] Install openjdk-8-jdk safely in Raspbian Buster (Debian 10) environment

1.Introduction

My past article How to install openjdk-8-jdk on Raspbian Buster armhf and How to install openjdk-8-jdk on Debian Buster (Debian 10) armhf procedure required installing an unstable "sid" package, which caused glibc2.29 to be installed without permission. This time I will describe the procedure for installing openjdk-8-jdk without installing the unstable "sid" package and keeping the whole environment correct. The standard glibc for Raspbian Buster (Debian 10) is glibc2.28. Note that openjdk-8-jdk is required to build Bazel.

2.Environment

  • RaspberryPi3 / 4
  • Raspbian Buster (Debian 10)
  • openjdk-8-jdk

3.Procedure

Advance_preparation
$ cd ~
$ sudo apt-get update
$ sudo apt-get install -y \
    apt-transport-https ca-certificates \
    wget dirmngr gnupg software-properties-common
$ wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
$ sudo nano /etc/apt/source.list

### Add the following line to the last line
deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ buster main Release

Ctrl + O
Ctrl + X

Install_openjdk-8-jdk
### A warning message appears several times, but you can ignore it.
$ sudo apt-get update
$ sudo apt-get install adoptopenjdk-8-hotspot
$ sudo nano /etc/apt/source.list

### Delete the following line to the last line
deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ buster main Release

Ctrl + O
Ctrl + X

Update_package_list
$ sudo apt-get update

Terminal - pi@raspberrypi: ~_033.png

4.Appendix

You can also try the standalone installer with a deb file.
1. openjdk-8-jdk for armhf (.deb) download link
2. openjdk-8-jdk for aarch64 (.deb) download link

For_armhf
$ curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=1LQUSal55R6fmawZS9zZuk6-5ZFOdUqRK" > /dev/null
$ CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"
$ curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=1LQUSal55R6fmawZS9zZuk6-5ZFOdUqRK" -o adoptopenjdk-8-hotspot_8u222-b10-2_armhf.deb

$ sudo apt-get install -y ./adoptopenjdk-8-hotspot_8u222-b10-2_armhf.deb
For_aarch64
$ curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=1VwLxzT3EOTbhSzwvRF2H4ChTQyTQBt3x" > /dev/null
$ CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"
$ curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=1VwLxzT3EOTbhSzwvRF2H4ChTQyTQBt3x" -o adoptopenjdk-8-hotspot_8u222-b10-2_arm64.deb

$ sudo apt-get install -y ./adoptopenjdk-8-hotspot_8u222-b10-2_arm64.deb

5.Reference articles

https://linuxize.com/post/install-java-on-debian-10/#installing-openjdk-8
https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/pool/main/a/adoptopenjdk-8-hotspot/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

文字列フォーマットの標準API

String.format

String#format.java
String formated = String.format("私は%sです。", "太郎");

MassageFormat#format

Message#format.java
String template = "私は{0}です。";
String formated = MessageFormat.format(template, "太郎");

パフォーマンス

MassageFormatの方が断然早い。

API 10,000回実行 100,000回実行
String#format 0.2269983S 1.2679988S
Message#format 0.0730008S 0.2999999S
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SpringMVC-Interceptor機能

Interceptorとは

SpringFrameworkでは\@Controllerアノテーションを付けたControllerクラスがリクエストを受けてレスポンスを返す処理を行う。
ControllerクラスはDispatcherServletがリクエストURLからControllerクラスを抽出して実行する。
Inerceptorは、画面処理の前後とリクエストの一番最後に呼び出される割り込み処理で、Inerceptorを使うとControllerの実行前後に処理を追加することができる。
例えば、アクセス元のIPアドレスをログに出力する場合はInterceptorを使う。

Spring MVC の処理フロー
Spring MVC の処理フロー

引用
soracane 01.基本概念:全体的な処理フロー

Interceptorの仕組み

実態:org.springframework.web.servlet.HandlerInterceptorインターフェース
HandlerInterceptorインターフェースをDispatcherServletが実行している。

メソッド 戻り値 実行タイミング
preHandle booean Controller実行前
postHandle void Controller実行後~viewレンタリング前
afterCompletion void viewレンタリング後

HandlerInterceptorのAPIReference

Interceptorの作成方法

Interceptorを使ってアクセスしてきたIPアドレスをログファイルに出力してみる。

<手順>
1. org.springframework.web.servlet.HandlerInterceptorの実装クラスを作成する
1. applicationContext.xmlにインタセプターを定義する

なお、SpringMVCプロジェクトは下記の手順で作成したものを使用する
SpringMVCプロジェクト

<今回検証した各モジュールのバージョン情報>

モジュール version
STS 3.9.9
JDK 1.8.0_221
Tomcat 8.5
SpringFramework 3.1.1
Thymeleaf 2.1.6

Interceptorの作成方法①

org.springframework.web.servlet.HandlerInterceptorの実装クラスを作成し、
preHandleメソッド内でIPアドレスを出力する。

HogeIntercepter.java
package hogehoge;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class HogeIntercepter implements HandlerInterceptor {

    private static final Logger logger = LoggerFactory.getLogger(HogeIntercepter.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // TODO 自動生成されたメソッド・スタブ
        logger.info("URI:" + request.getRequestURI()); 
        logger.info("IPアドレス:" + request.getRemoteAddr()); 
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO 自動生成されたメソッド・スタブ

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO 自動生成されたメソッド・スタブ

    }
}

Interceptorの作成方法②

applicationContext.xmlにインタセプターを定義する。

applicationContext.xml
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

・
・
・

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**" />
            <beans:bean class="hogehoge.HogeIntercepter" />
        </mvc:interceptor>
    </mvc:interceptors>

</beans:beans>

実行結果


ログ出力内容
INFO : hogehoge.HogeIntercepter - URI:/hogehoge/
INFO : hogehoge.HogeIntercepter - IPアドレス:0:0:0:0:0:0:0:1

参考サイト

soracane Spring-MVC
トッカンソフトウェア Spring MVC インターセプター

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む