Cainiao SupplyStation--Javaの一般的な筆記試験の質問

目次

 

(1)文字列内の特定の部分文字列の出現回数をカウントするアルゴリズムを記述します。(ターゲット文字列には必ずしもコンマが含まれていないことに注意してください)

(2)次のコードの出力結果は何ですか。-Javaメモリ管理

(3)一連の数字があります:1 1 2 3 5 8 13 21 ....、30番目の数字を見つけるためのアルゴリズムを書いてください

(4)次のプログラムの実行結果は次のとおりです。調査ポイント:サブクラスオブジェクトを作成するには、最初に親クラスの構築メソッドを呼び出し、次にサブクラスの構築メソッドを呼び出します。

(5)HashMap map = new HashMap()の要素のトラバーサルを完了するコードを記述してください。(多くの方法で書くことができます)、string>、string>

マップコレクションの機能:

拡張forループの実装を使用する

ラムダ式を使用してトラバースする

(6)データベースの例

それぞれ3つのテーブルを作成します。テーブルの構造は次のとおりです。

ビジネスシナリオの制限:

トピック:


(1)文字列内の特定の部分文字列の出現回数をカウントするアルゴリズムを記述します。(ターゲット文字列には必ずしもコンマが含まれていないことに注意してください)

  • 文字列「helloworld、hello eclipse、hello idea、hello spring」など、「hello」の出現回数をカウントします。
public class SubStringCount {
    public static void main(String[] args) {
        String dest = "hellohello world, hello  eclipse, hello idea, hello spring";
        String subStr = "hello";
        int count = 0; //计数器
        int index = -1;  //表示从目标串哪个位置开始查找;也表示查找到目标子串出现的下标

        //若目标子串出现,则计数器+1,且index下标值后要后移到目标串出现的下一个字符去
        while((index=dest.indexOf(subStr,index))!=-1){
            //计数器+1
            count ++;
            //index索引后移到出现的子串的下一个字符
            index += subStr.length();
        }
        System.out.println(count);
    }
}

(2)次のコードの出力結果は何ですか。-Javaメモリ管理

class T{
    public static void main(String[] args){
        String str = "ok";
        char[] chs = {'g','b','k'};
        T t = new T();
        t.change(str,chs);
        System.out.println(str);
        System.out.println(Arrays.toString(chs));
    }
    public void change(String str,char[] chs){
        str = "hello";
        chs[0] = 'a';
}
//输出结果
 //str:  ok
// chs: a b k

 分析:

(3)一連の数字があります:1 1 2 3 5 8 13 21 ....、30番目の数字を見つけるためのアルゴリズムを書いてください

  • フィボナッチ数列(フォボナ​​ッチ)---テストポイント:再帰

  • 再帰:一種の考え方であり、コードの側面に適用されます:メソッド呼び出しメソッド自体

  • 再帰的な古典的アルゴリズム:フィボナッチ数列;階乗を見つける;リンクリストの最下層も再帰的に実装されます

package cn.tedu.interview.day02;

/**
 * 求出第30个位置的值,斐波那契数列,考察递归
 */
public class Fabonacci {
    public static void main(String[] args) {
        //求出第30位的值
        Fabonacci fabonacci = new Fabonacci();
        int x = fabonacci.fn(30);
        System.out.println(x);
    }
    //求出某个位置的值  参数n:位置
    public int fn(int n){
        if(n==1 || n==2){
            return 1;
        }
        return fn(n-1)+fn(n-2);
    }
}

(4)次のプログラムの実行結果は次のとおりです。調査ポイント:サブクラスオブジェクトを作成するには、最初に親クラスの構築メソッドを呼び出し、次にサブクラスの構築メソッドを呼び出します。

public class Person{
    public Person(){
        System.out.println("superclass");
    }
}
public class Teacher extends Person{
    public String name = "jack";  //这里是public
    public Teacher(){
        System.out.println("subclass");
    }
    public static void main(String[] args){
        Teacher teacher = new Teacher();
        System.out.println(teacher.name);
    }
}


//superclass
//subclass
//jack
//通过debug查看执行过程,super()会出现在构造方法的第一行代码,无论写或不写,都存在;
//注意:若在构造方法中显示的调用父类的有参构造方法,此时super()不会默认提供

(5)HashMap <String、String> map = new HashMap <String、String>()の要素のトラバーサルを完了するコードを記述してください。(多くの方法で書くことができます)

public static void main(String[] args) {
        Map<String,String > map = new HashMap<>();
        map.put("语文","90");
        map.put("数学","80");
        map.put("英语","70");
        map.put("物理","89");

        //如何从map集合中取元素----  通过key值取value值,通过get方法实现
        //1. 使用增强for循环来遍历
        for (Map.Entry<String,String> entry:map.entrySet()) {
            System.out.println(entry.getKey()+"-"+entry.getValue());
        }
        //2. 可以使用lambda表达式来遍历
        map.forEach((k,v)-> System.err.println(k+":"+v));

        List<String> list = new ArrayList<>();
        list.add("tom");
        list.add("jack");
        list.add("rose");

        //list遍历--lambda
        list.forEach(str-> System.err.println(str));
    }

マップコレクションの機能:

  • HashMapのマップコレクションは順序付けられていません
  • LinkedHashMapが注文されました

拡張forループの実装を使用する

ラムダ式を使用してトラバースする

ラムダ式:

構文:()-> {}

使用法:

一部の機能インターフェイス(インターフェイスの後の抽象メソッド)を実装するために使用されます-匿名内部クラスの一部を置き換えます

Runnable接口 -- 功能性接口 -- run()
1. 使用匿名内部类来实现该接口
	Runnable r = new Runnable(){
	    public void run(){
	    	....//任务
	    }
	}
	new Thread(r).start();

2. Runnable r = ()->{//任务};
    new Thread(r).start();

 

 

 

 

 

ラムダ式の各部分の意味:

():書き換えられたメソッドのパラメータリストを表します。

パラメータがない場合は何も書かない

パラメータがある場合はパラメータタイプを省略でき、パラメータリストにパラメータが1つしかない場合は、この時点で()も省略できます。

複数のパラメータがある場合は、パラメータタイプを省略できますが、現時点では()は省略できません。

{}:書き直されたメソッド本体を表します

コレクションをトラバースします。

コレクションのリスト、セット、マップをトラバースできます。ラムダ式が3種類のコレクションをトラバースできる理由は、3種類のコレクションがラムダのサポートを提供するためです(提供されるメソッド:forEach())

(6)データベースの例

  • それぞれ3つのテーブルを作成します。テーブルの構造は次のとおりです。

クラステーブル(クラス)学生テーブル(学生)

シリアルナンバー クラス名
id(int) class_name(varchar)
1 クラス1
2 セカンドクラス
3 3交代制
4 クラス4
5 クラス5
シリアルナンバー 学生証  名前 性別 クラス(
id(int) stu_no(varchar) stu_name(varchar) stu_gender  (varchar) class_id(int)
1 2020001 張三丰 男性 1
2 2020002 Li Si 男性 1
3 2020003 Li Li 女性 2
4 2020004 趙ティン 女性 3
5 2020005 王呉 男性 3

スコア 

学生 言語 数学
stu_id(int) 中国語(int) math(int)
1 70 47
2 80 60
3 50 82
4 80 90

 

 

 

 

 

 

 

ビジネスシナリオの制限:

  • クラスには複数の学生がいて、学生は1つのクラスにのみ属している学生
    は成績を持っていない可能性があります

テーブルを作成する

CREATE TABLE class(
id int,class_name varchar(20)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
CREATE TABLE student(
id int,stu_no varchar(20),
stu_name varchar(20),stu_gender varchar(20),class_id int
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
CREATE TABLE score(
stu_id int,chinese int,math int
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
データを挿入
INSERT INTO class VALUES(1,'一班'),(2,'二班'),(3,'三班'),(4,'四班'),(5,'五班');
INSERT INTO student VALUES(1,'2020001','张三','男',1);
INSERT INTO student VALUES(2,'2020002','李四','男',1);
INSERT INTO student VALUES(3,'2020003','李丽','女',2);
INSERT INTO student VALUES(4,'2020004','赵婷','女',3);
INSERT INTO student VALUES(5,'2020005','王五','男',3);
INSERT INTO score VALUES(1,70,47),(2,80,60),(3,50,82),(4,80,90);

トピック:

  1. 全員(成績のない学生を含む)のコーススコア(学生番号、名前、性別、クラス名、言語スコア、数学スコア)を照会します。

    マルチテーブル結合クエリ(関連クエリ):内部結合クエリ、左外部結合クエリ、右外部結合クエリ、自己結合クエリ

    注意:

    マルチテーブルクエリでクエリされるフィールドが存在する唯一のフィールドである場合は、テーブル名を記述する必要はありません。フィールド、フィールド名を直接書き込むことができます。
    SELECT 
        stu_no,stu_name,stu_gender,class_name,chinese,math
    FROM 
        student stu 
    JOIN 
        class c 
    ON 
        stu.class_id=c.id 
    LEFT JOIN 
        score sc 
    ON 
        stu.id = sc.stu_id;
    

     

  2. 言語スコアが「張三」より高い学生に問い合わせる(学生ID、名前、性別、クラス名、言語スコア)

    1. 3つのテーブルのクエリを分析および決定し、接続条件を決定し、クエリ条件を決定します

    SELECT 
        stu_no 学号,stu_name  姓名,stu_gender 性别,class_name 班级名称,chinese 语文分数
    FROM 
        student stu 
    JOIN 
        class c 
    ON
        stu.class_id = c.id
    JOIN 
        score sc 
    ON 
        sc.stu_id =stu.id
    WHERE
        chinese > (
                   SELECT 
                         chinese 
                    FROM 
                        student stu 
                    JOIN
                        score sc 
                    ON
                        stu.id=sc.stu_id 
                    WHERE 
                        stu.id=1 );

    3.各科目(スコア> = 60)で資格のある学生に質問します(学生番号、名前、言語スコア、数学スコア)

    分析1、クエリテーブル2を決定するためのクエリフィールドによる、接続条件3。クエリ条件

    SELECT 
        stu_no 学号,stu_name 姓名,chinese 语文分数,math 数学分数
    FROM 
        student stu 
    JOIN 
        score sc
    ON 
        stu.id = sc.stu_id
    WHERE 
        chinese>=60 
    AND 
        math>=60;

     

4.クラス数> = 2(クラス番号、クラス名、人数)でクラスをクエリします

分析テーブルクラス、クエリフィールドに応じた生徒、クラスに応じたグループを決定し、生徒の数を数えます

注:クエリ結果count()はクエリ条件として使用され、count関数はgroup byを使用し、クエリはグループ化結果に基づきます。

、グループ化されたデータをフィルタリングするには、haveキーワードを使用する必要があります

グループの使用により、グループによる:グループ化は、通常の集計関数(カウント、平均、合計、最大、最小)と組み合わせて使用されています

SELECT 
    c.id 班级编号,class_name 班级名称,count(*) 人数
FROM 
    student stu JOIN class c 
ON
    stu.class_id = c.id
GROUP BY 
    stu.class_id 
HAVING COUNT(*)>=2;

 

おすすめ

転載: blog.csdn.net/c202003/article/details/107802174