31日目 JavaScript
テストまで時間ができたので、以前取り組み苦戦した問題を解きなおしてみた。
解くのに1日半かかり、挫折感すら感じた問題。もう一度解いてみると、案外すんなり溶けてしまった。
しかも、その時使ったやり方とは違う、より簡単なコードで書けた。
頭を抱えながら死に物狂いで取り組んだ問題。
解くために必要なことを調べて組み合わせて、何とか指示通りの出力結果までこぎつける。
やっぱり成長するには、手持ちの知識では解けない、レベルの高い問題を自力で調べながら取り組むことが必要だ。
問題文を見るだけで尻込みしてしまうような、複雑な使用だが、それに挑戦することに大きな意味と、価値があることを改めて感じた。
これからも、新しいこと、難しいことだらけの研修だが、すべてが自分のためになるということを頭において取り組みたい。
何事も前向きに捉えたもの勝ちだ。
JavaScriptでのうるう年対応セレクトボックス
JavaScriptを使い、うるう年に対応したセレクトボックスを作成した。
我ながらうまくできたと思うので、ここに残しておこうと思う。
for分でoptionタグを欲しい分だけ作成する過程で、for分の上限を年と月に応じて変更させればうるう年や月に対応した日付のセレクトボックスを作成することができる。
そこで、switch文を活用する。
for分の上限とするカウンター変数の基本値を31として、
4,6,9,11の時は、それを30にする。
2に時には、
if( (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0)
うるう年かどうかを判定するif文でtrueなら29に、falseなら28。
switch文を抜けたところで、そのカウンター変数分for分を作成し、新たにoptionタグを生成する。
年、月の選択を変更するたびに関数を呼び出したいのでonChangeで呼び出せるよう設定。
呼び出すたびに、まず、日のoptionタグをちゃんとリセットする必要がある。
コードを乗っけておくので、なんとなく読み取って、活用してほしい。
30日目 業界
今後のためにもとSES業界について学んだ。
E/Uから受注を直接取るのがSIer。エスアイアーと呼ばれる企業。
そこから下請け企業がいくつか連なっているのがSES業界。
ビジネスパートナーからそのパートナーへ案件が繋がっているが、そのプロジェクトの報酬はE/Uの出す金額は固定。それを分け合っているような感じ。
自らが所属する会社ではなく、あくまでその派遣企業の社員のように振る舞い、名乗る。
よくネットなどで、取り上げられるが、慣習として根強い。そういうものだと思ったほうがよさそうだ。
その案件ごとに、面談、顔合わせと呼ばれる面接があり、自分の経歴やスキルなどをアピールし、採用不採用ということだそうだ。
その経歴が分厚くなってくると、仕事を選ぶ立場にもなれる。
それが技術職の特徴でもあり醍醐味だよね。
もちろん最初は、選んでいただく立場。
いただいた仕事は選ばずに一生懸命取り組もう!
研修後の世界が少し見えて、テンションが上がった。
29日目 SQL
本日もSQLの問題に取り組んだ。
学んだことをここにまとめておく。
制約キー、DEFAULTとNOT NULLを同時に使うときは、DEFAULTを先に書かなきとエラー。
TO_DATEの第2パラム
YYYY:4桁年 YY:2桁年 MM:月(01~12) DD:日 HH:時(1~12) HH24:時(1~24) MI:分 SS:秒
最頻度のデータの取得
~GROUP BY カラム HAVING COUNT(*) = (SELECT MAX(A) FROM (SELECE CONUT(*) AS A FROM テーブル GROUP BY~)
テーブル間の差分の抽出
SELECE カラム テーブル MINUS SELECT カラム 比べたいテーブル
複数の値の検索
~WHERE カラム IN(~)
逆はNOT IN(~)
28日目 サーブレット SQL
連休中にやった課題を提出し、その直しの作業をこなした。
サーブレットを呼び出すたびに初期化をしたくないので、フィールドに宣言をしたが、サーブレットではフィールドを使った値の保持はしないらしい。
代わりにセッションスコープを使っていく値を繰り返し使っていく感じ。
JSP側でも、getAttributeでnullチェックをする様に、サーブレットのセッションスコープ仕様の際もnullチェックをする。
理解してしまえばなんてことないが、やっている時は必死だ。
それとSQLについても学んだので、まとめておく。
複合主キー
複数のカラムのセットを主キーとする。
PRIMARY KEY(カラム1,カラム2,....)
重複データの取得
GROUP BY カラム HAVING カラム…
グループ化してまとめた後、個数や合計値などで更に分類できる。
レコードの有無の判別
SLECT EXISTS(SELECT *FROM ~)
逆はNOT EXISTS~
インラインビュー
FROM句で副問合せをすることで、その結果をviewとして扱える。略称も付けられる。
四捨五入
ROUND(パラ1,パラ2)
パラ1:処理したい値
パラ2:どこで四捨五入するか。省略した場合は少数第一位。1で2位、-1だと整数部の1桁目。
偶数奇数判定
MOD(パラ, 2) =0 なら偶数。 ~=1なら奇数。
第2引数で割り算をし、あまりを求める関数。
結果に番号を振る
ROW_NUMBER() OVER(ORDER BY句など)AS付けたいカラム名
CHAR 型とVARCHAR2型の等価判定
TRIM(CHAR型) = VARCHAR2型
CHAR型は固定長なので、不足分には自動的に空白が入るためTRIMする必要かある。
SQLでの条件分岐
~ CASE WHEN 条件 THEN TRUEの時に出したい値
ELSE 不一致の時に出したい値 END
文字列の中から特定の単語を見つけカウントするプログラム
文字列の中から特定の単語を見つけるプログラムを作る課題。
単語ではなく文字であれば、charAtとfor分の組み合わせてできるが、単語となると話が違う。
何とか解けたので、自分のためにもまとめておこうと思う。
text1 = "this is a pan. that is a pan.";
text2 = "is";
int count = 0;
if(text1.contains(text2)) { ・・・①
count++;
String[] arr = text1.split(text2, 2); ・・・②
while(arr[1].contains(text2)) { ・・・③
count++;
arr = arr[1].split(text2, 2); ・・・④
}
}
①:text1とtext2をcontainsで含むかどうかを判定し、含むならcountを足す。
②:splitメソッドの第二引数に2を渡して、text1をtext2で2つに分割する。
2つと指定することで、文中に最初に登場するtext2をカウントできる。
それをString配列で受け取る。
③:text1を2つに分割した配列の後半の要素にtext2を含む限りwhileを回す。
④:後半の要素をtext2で分割し続け、countを加算し、whileを抜けるところでのcountがtext1の中のtext2の登場回数となる。
知っているメソッドを自分なりに組み合わせて作ったメソッドのため、改善点やよりよいプログラムがあるかと思うが、それは今後の伸びしろとして受け止めたい。