笔试题小结

1.编写从给定字符串中提取所有数字字符的方法,如参数是”Stock3num00Amar38sf0”,返回”300380”;

方式一:

思路 遍历每个字符,求出结果,用StringBuilder拼接

    public String getNum(String input){
        StringBuilder sb = new StringBuilder();
        for (char c:input.toCharArray())
          sb.append(c);
        return sb.toString();
    }

方式二:

用正则可以获取连续数字

    public String getNum(String input){
        String pattern = "\\d+";
        Pattern r = Pattern.compile(pattern);
        Matcher matcher = r.matcher(input);
        StringBuilder sb = new StringBuilder();
        while (matcher.find()) {
            sb.append(matcher.group());
        }
        return sb.toString();
    }

方式三
类似foreach
这个是线程安全,不过貌似没什么用

 public String getNum(String input){
        StringBuilder sb = new StringBuilder();
        Arrays.stream(str.split("")).forEach(s ->{
            if (s.matches("\\d"))
                sb.append(s);
        });
        return sb.toString();
    }

2.现有先进后出栈接口 Stack 定义如下,请解释下程序中<T>的含义,再用ArrayList做一个具体实现类ArrayListStack。

public interface Stack<T> {
    void push(T obj);//放入一个元素
    T get();//查看最后放入的元素
    T pop();//获取最后放入的元素
}

<T>的含义:
<T>是泛型的默认值,可以被任意类型所代替
泛型意为 参数化类型 目的是将原本的类型参数化。

泛型三种:

      [1]ArrayList<T> al=new ArrayList<T>();指定集合元素只能是T类型
      [2]ArrayList<?> al=new ArrayList<?>();集合元素可以是任意类型,这种没有意义,一般是方法中,只是为了说明用法
      [3]ArrayList<? extends E> al=new ArrayList<? extends E>();
        泛型的限定:
           ? extends E:接收E类型或者E的子类型。
           ?super E:接收E类型或者E的父类型。

1.在整个类中只有一处使用了泛型,使用时注意加了泛型了参数不能调用与参数类型有关的方法比如“+”,比如打印出任意参数化类型集合中的所有内容,就适合用通配符泛型<?>
2. 当一个类型变脸用来表达两个参数之间或者参数与返回值之间的关系时,即统一各类型变量在方法签名的两处被使用,或者类型变量在方法体代码中也被使用而不仅 仅在签名的时候使用,这是应该用自定义泛型<T>。泛型方可以调用一些时间类型的方法。比如集合的add方法。
<?>一般用来在类的形参中。

解决:

import java.util.ArrayList;

public class ArrayListStack<T> extends ArrayList<T>  implements Stack<T> {

    ArrayList<T> arrayList =new ArrayList<>() ;

    @Override
    public void push(T obj) {
        arrayList.add(obj);
    }

    @Override
    public T get() {
        return arrayList.get(arrayList.size()-1);
    }

    @Override
    public T pop() {
        return arrayList.remove(arrayList.size()-1);
    }
}

3.设计一个图形系统,包括抽象图形接口Shape,轴对称接口Rotational,中心对称接口 Central,具体图形包括:长方形 Rectangle正方形 Square 图形 Circle 三角形 Triangle 正三角形 RegularTriangle

public interface Shape {
    double getCircumference();//求周长
    double getSquare();//求面积
}
public interface Rotational{}
public interface Central {}

A、画出这些接口和图形类的类图,可加文字说明
B、写出图形Circle类的实现代码

A、
这里写图片描述

B、

public class Circle implements Shape,Rotational,Central {

    double radii;

    public Circle(double radii) {
        this.radii = radii;
    }

    @Override
    public double getCircumference() {
        return 2*Math.PI*radii;
    }

    @Override
    public double getSquare() {
        return Math.PI*radii*radii;
    }
}

}

四.简单的存款系统有四张表:
客户信息:customer(customer_name,customer_street,customer_city)

客户名称 客户街道 客户城市

支行信息:branch(branch_name,branch_city)

支行名称 支行城市

账户信息:account(account_name,branch_name,balance)

账户名称 支行名称 余额

存款信息:depositor(account_name,customer_name)

账户名称 客户名称

主:上表中除了账户信息的余额字段balance是数字类型,其它的都是字符串类型。
解释下面的问题或书写SQL:
1. 说明关系数据库中事务的用途和特点;
2. 写SQL,为客户信息表的城市字段customer_city添加索引;
3. 写SQL,查询:“上海”市,“南京东路”街道的客户列表,输出客户名称,城市,街道;
4. 写SQL,查询所有“中国”或“北京”开头的客户的客户名称,所在城市和街道;
5. 写SQL,查询“北京”市客户的账户信息,包括客户名称,账户名称,支行名称,余额;
6. 写SQL,查询每个支行的账户数和平均余额;
7. 写SQL,制作以客户城市为基准的全国城市存款排行榜,存款最多的排在最前面;
8. 写SQL,把“北京天天租车有限责任公司”的街道地址变更为“上地西路”。

1.数据库事务:
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位

常见用途:银行转账,下单减库存。
2.

ALTER TABLE `customer` ADD INDEX customer_city( `customer_city` )

3.

SELECT customer_name,customer_city,customer_street FROM customer WHERE  customer_city='上海' AND customer_street = '南京东路';
  1. 4.
SELECT customer_name,customer_city,customer_street FROM customer  WHERE customer_name='北京%' OR customer_name='中国%';

5.

SELECT D.customer_name,A.account_name,A.branch_name,A.balance 
FROM  account AS A   
WHERE  A.branch_name =(SELECT branch_name FROM branch WHERE branch_city='北京' )
inner join  depositor  AS D 
ON A.account_nam=D.account_name;

6.



SELECT branch_name,cout(*),avg(balance) from  branch inner join account on branch.account_name = account.account_name;

7.

这里写代码片

8.

UPDATE customer SET customer_street='上地西路' WHERE customer_street='北京天天租车有限责任公司';
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值