【泰隆银行】校招it岗位笔试
1.java 面向对象三个原则
封装、继承、多态
2.java 代码
//输入
Scanner sc = new Scanner(System.in);
String input = sc.next();//输出一次,然后结束
while(true){
System.out.println(sc.next());//可以多次输出,输入再输出,不会结束
}
String a;
int arr[];
arr.length;//统计数量
a.length();//统计长度
a.split(" ");//分割
//string-int
int i = Integer.parseInt("string");
int i = Integer.valueOf("string").intValue();
//string-double
double i =Double.parseDouble("string");
//string -float
float i=Float.valueOf(“string”);
try {
/**
* 读文件
*/
List list =new ArrayList();
String ad ="C:\\Users\\孙海涛\\Desktop\\bu.txt";//文件地址
File file=new File(ad);
//FileReader字符流,2个字节读一次;InputStreamReader字节流,1个字节读一次
//加buff对硬盘好,不需要读一次从硬盘里面在读一次,
BufferedReader bf=new BufferedReader(new FileReader(file));
String linTx;
while ((linTx = bf.readLine()) != null){
list.add(linTx);
}
bf.close();
for (Object a: list){
String abu=(String) a;
System.out.println(abu);
}
/**
* 存文件
*/
//FileWriter 中true则当文件存在时,不覆盖内容,直接后面新增否则直接覆盖;默认是直接覆盖
//FileOutputStream(),则覆盖掉该文件内容
BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(file,true));
bufferedWriter.write("dgfhfher");
bufferedWriter.close();
}catch (Exception e){
}
3.sql性能优化
4.删除增加列sql
已有表actor,且包含列last_name
//删除列
alter table actor drop column last_name;
alter table actor drop last_name;
//增加列
alter table actor add last_name varchar(10);
5.二叉树深度计算
深度为m的满二叉树有2^m-1个结点;
二叉树的深度是从根节点开始(其深度为1)自顶向下逐层累加的;而二叉树高度是从叶节点开始(其高度为1)自底向上逐层累加的。虽然树的深度和高度一样,但是具体到树的某个节点,其深度和高度是不一样的。
6.编程题
主要是2题,1题是水仙花,1题是文件的输入保存
public class java_save {
public static void main(String[] args) {
Vector v = new Vector();
try{
BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
String str ="";
System.out.println("请输入:输入quit退出");
while (!(str.equals("quit") || str.equals("QUIT"))){
str= in.readLine();
if (isValid(str))
v.add(str);
else{
if(!(str.equals("quit")|| str.equals("QUIT")))
System.out.println("the string is not valid");
}
}
System.out.println("请输入保存到的文件名");
str =in.readLine();
// String curDir = System.getProperty("usr.dir");//当前路径
File savedfile = new File("C:\\Users\\孙海涛\\Desktop"+"\\"+ str);
BufferedWriter out = new BufferedWriter(new FileWriter(savedfile));
for (int i =0; i<v.size();i++){
String tmp=(String) v.elementAt(i);
out.write(tmp);
out.write("\n");
}
out.close();
}catch (Exception e){
}
}
public static boolean isValid(String s){
/**
* 如果s不存在空格,会indexof会等于-1
*/
if (s.indexOf(" ")>0){
return true;
}else {
return false;
}
}
}
泰隆银行校招it岗位笔试部分的记录就先到这!接下来,是一些整理的c++要点概要!
额外补充
纯虚函数和虚函数
纯虚函数是指在 C++中, 函数可以用“virtual”和“= 0”关键字来声明。 该函数是一个虚函数,但是在声明时, 没有定义它的函数体。 它是一个空函数, 只提供函数声明, 而不提供实际实现。 由于它编译器不能确定如何实现, 因此需要在子类中实现它。 因此, 纯虚函数也被称为抽象函数。 形如:
虚函数和纯虚函数的特性
- 虚函数可以在类中声明, 也可以在类的外部声明, 编译器会自动将它们转换为虚函数;但是纯虚函数只能在类中声明, 而不能在类的外部声明。
- 虚函数可以有实现, 也可以没有实现; 而纯虚函数没有实现, 不可以有实现。
- 虚函数可以在子类中覆盖, 也可以不被覆盖; 而纯虚函数必须在子类中覆盖, 否则编译器将报错。
- 虚函数可以被多态调用, 也可以被静态调用; 而纯虚函数只可以被多态调用, 不可以被静态调用。
虚函数作用
C++中的虚函数的作用主要是实现了多态的机制。 而虚函数是通过虚函数表(V-Table)实现的。
多态
多态分为静态多态和动态多态。 而动态多态是通过虚表实现, 静态多态包括重载和模板, 这和虚表没关系。
构造函数不能声明为虚函数, 析构函数可以声明为虚函数, 而且有时是必须声明为虚函数。
构造函数为什么不能声明为虚函数?
答:
- 构造一个对象的时候, 必须知道对象的实际类型, 而虚函数行为是在运行期间确定实际类型的。 而在构造一个对象时, 由于对象还未构造成功。 编译器无法知道对象的实际类型是该类本身, 还是该类的一个派生类, 或是更深层次的派生类,无法确定。
- 虚函数的执行依赖于虚函数表。 而虚函数表在构造函数中进行初始化工作, 即初始化 vptr,让他指向正确的虚函数表。 而在构造对象期间, 虚函数表还没有被初始化, 将无法进行。 析构函数执行时先调用派生类的析构函数, 其次才调用基类的析构函数。
析构函数为什么声明为虚函数?
答:如果析构函数不是虚函数, 而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用 delete 销毁对象时, 只调用了基类的析构函数, 未调用派生类的析构函数。 这样会造成销毁对象不完全。