[202-04-01木]TIL
Stringは遅いですか?
今日やっと知ったのは、勉強もしないで、頭の中から整理した文章を取り出したことだ.多くのエラーが発生する可能性があります. 後ほど勉強 StringはStringBuilderよりも遅いとは限らず、初期値に+演算を加えるとかえって速い. 下位クラスファイルとバイトコードを確認します. ただし、変数が java 1.5? 以下は、 ただし、for文でStringの StringTest.java
10日目
情報処理記事で見た1 NF~BCNF正規型正規化は当時は暗記して解題しただけだった.
今日授業を受けて理解しようと思ったら、思ったより難しい内容がありました.
x 2=yx^2=yx 2=y 1つの部分では関数ではなく、精神が動揺し始め、後の内容に従うのは少し骨が折れる.
前の授業は昼寝で聞き取れなかったので、ついていけないようです.
一度見逃しても復習しないなんて、本当に理不尽だ.
もっと遅くなる前に、今週末に復習に間に合わなければならないと思います.
今覚えてる
1 NF:原子値にし、複数の価値を持たない
2 NF:覚えてない
3 NF:三段論法はできません.EX) A→B , B→D , A→D
BCNF:周期があってはいけません.
なぜ正規化するのですか?重複除外データ、sql???何だったっけ… 手動キーとナチュラルキー
ナチュラルキーの場合、候補キーで作成
人工鍵とは、JPAのオートインクレメントのように人工的に作られた鍵のこと.
この二つの身長の中には良いことも悪いこともないそうです.(いつも論争している…)
今日やっと知ったのは、勉強もしないで、頭の中から整理した文章を取り出したことだ.
String a = "a" + "b" + "c";
の場合、String a = "abc";
で構築されていると判断できる.System.out.println("1"+"2"+b);
と同じ場合はStringBuilder演算が追加されます.System.out.println()
に文字列を追加する際に使用するstring.concat()
ですが、パフォーマンスを向上させるため、その後内部でStringBuilder
を使用するように変更されました.+
演算を実行すると、前のString値とinit、およびStringBuilder
最後のtoString()演算がStringBuilder
よりも遅いことがわかります.package webserver;
import org.junit.jupiter.api.Test;
public class StringTest {
@Test
void test() {
String a = "a" + "b" + "c";
a += "d";
StringBuilder sb = new StringBuilder().append("1").append("2");
sb.append("3").append("4");
System.out.println(new StringBuilder().append("test").append("test").toString());
String b = "test";
System.out.println("1"+"2"+b);
System.out.println("test2"+"Test");
}
}
StringTest.class//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package webserver;
import org.junit.jupiter.api.Test;
public class StringTest {
public StringTest() {
}
@Test
void test() {
String a = "abc";
a = a + "d";
StringBuilder sb = (new StringBuilder()).append("1").append("2");
sb.append("3").append("4");
System.out.println("test" + "test");
String b = "test";
System.out.println("12" + b);
System.out.println("test2Test");
}
}
バイトコードjavap -c -l StringTest.class
Compiled from "StringTest.java"
public class webserver.StringTest {
public webserver.StringTest();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 5: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lwebserver/StringTest;
void test();
Code:
0: ldc #2 // String abc
2: astore_1
3: new #3 // class java/lang/StringBuilder
6: dup
7: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
10: aload_1
11: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
14: ldc #6 // String d
16: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
22: astore_1
23: new #3 // class java/lang/StringBuilder
26: dup
27: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
30: ldc #8 // String 1
32: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
35: ldc #9 // String 2
37: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
40: astore_2
41: aload_2
42: ldc #10 // String 3
44: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
47: ldc #11 // String 4
49: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
52: pop
53: getstatic #12 // Field java/lang/System.out:Ljava/io/PrintStream;
56: new #3 // class java/lang/StringBuilder
59: dup
60: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
63: ldc #13 // String test
65: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
68: ldc #13 // String test
70: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
73: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
76: invokevirtual #14 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
79: ldc #13 // String test
81: astore_3
82: getstatic #12 // Field java/lang/System.out:Ljava/io/PrintStream;
85: new #3 // class java/lang/StringBuilder
88: dup
89: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
92: ldc #15 // String 12
94: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
97: aload_3
98: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
101: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
104: invokevirtual #14 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
107: getstatic #12 // Field java/lang/System.out:Ljava/io/PrintStream;
110: ldc #16 // String test2Test
112: invokevirtual #14 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
115: return
LineNumberTable:
line 8: 0
line 10: 3
line 12: 23
line 14: 41
line 16: 53
line 18: 79
line 20: 82
line 22: 107
line 23: 115
LocalVariableTable:
Start Length Slot Name Signature
0 116 0 this Lwebserver/StringTest;
3 113 1 a Ljava/lang/String;
41 75 2 sb Ljava/lang/StringBuilder;
82 34 3 b Ljava/lang/String;
}
データベースの正規化10日目
情報処理記事で見た1 NF~BCNF正規型正規化は当時は暗記して解題しただけだった.
今日授業を受けて理解しようと思ったら、思ったより難しい内容がありました.
x 2=yx^2=yx 2=y 1つの部分では関数ではなく、精神が動揺し始め、後の内容に従うのは少し骨が折れる.
前の授業は昼寝で聞き取れなかったので、ついていけないようです.
一度見逃しても復習しないなんて、本当に理不尽だ.
もっと遅くなる前に、今週末に復習に間に合わなければならないと思います.
今覚えてる
1 NF:原子値にし、複数の価値を持たない
2 NF:覚えてない
3 NF:三段論法はできません.EX) A→B , B→D , A→D
BCNF:周期があってはいけません.
なぜ正規化するのですか?
ナチュラルキーの場合、候補キーで作成
人工鍵とは、JPAのオートインクレメントのように人工的に作られた鍵のこと.
この二つの身長の中には良いことも悪いこともないそうです.(いつも論争している…)
Reference
この問題について([202-04-01木]TIL), 我々は、より多くの情報をここで見つけました https://velog.io/@san/2021-04-01-목-TILテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol