面试 1

来源:互联网 发布:js useragent 编辑:程序博客网 时间:2024/06/03 20:39
 最近参加了几次面试,发现公司的笔试题目有一些相似之处,就总结一下:一般会从下面几个方面考,不管是面试C++,C#,java都是首先是关于关键字和标示常量的考察然后是关于类和接口的试题然后是关于array,io和socket的试题然后是关于数据库的各种sql语句的考察然后是排序,包括快速排序,插入排序,选择排序然后是设计模式的考察一下以java为例子说明一些自己遇到的:访问控制:private 私有的protected 受保护的public 公共的类、方法和变量修饰符abstract 声明抽象class 类extends 扩允,继承final 终极,不可改变的implements实现interface 接口native 本地new 新,创建static 静态 strictfp 严格,精准synchronized 线程,同步transient 短暂volatile 易失程序控制语句break 跳出循环continue 继续return 返回do 运行while 循环if 如果else 反之for 循环instanceof 实例switch 开关case 返回开关里的结果default 默认错误处理catch 处理异常finally 有没有异常都执行throw 抛出一个异常对象throws 声明一个异常可能被抛出try 捕获异常包相关import 引入package 包基本类型boolean 布尔型byte 字节型char 字符型double 双精度,float 浮点int 整型long 长整型short 短整型null 空true 真false 假变量引用super 父类,超类this 本类void 无返回值无const 和 goto, 不过这两个词是保留字而不是关键词。保留字是系统保留起来不给用户使用,系统自己也不会用无friendly和sizeof哦!!!标识符变量,类与方法都需要一定的名称,我们将这种名称叫做标识符.java中对标识符有一定的限制.首先:所有的标识符的首字符必须是字母(大小写).下划线_或美元符$;其次标示符是由数字(0--9),所有从a--z的大写字母.a--z的小写字母与下划线_.美元符$与所有在十六进制0xc0前的 ascii码等构成;第三注意表示符不能使用系统保留的关键字做标示符.Java关键字this、super使用总结 一、this        Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。下面给出一个使用this的综合实例,以便说明问题:package org.leizhimin;public class Test6 { private int number; private String username; private String password; private int x = 100; public Test6(int n) {  number = n;  // 这个还可以写为: this.number=n; } public Test6(int i, String username, String password) {  // 成员变量和参数同名,成员变量被屏蔽,用"this.成员变量"的方式访问成员变量.  this.username = username;  this.password = password; } // 默认不带参数的构造方法 public Test6() {  this(0, "未知", "空"); // 通过this调用另一个构造方法 } public Test6(String name) {  this(1, name, "空"); // 通过this调用另一个构造方法 } public static void main(String args[]) {  Test6 t1 = new Test6();  Test6 t2 = new Test6("游客");  t1.outinfo(t1);  t2.outinfo(t2); } private void outinfo(Test6 t) {  System.out.println("-----------");  System.out.println(t.number);  System.out.println(t.username);  System.out.println(t.password);  f(); // 这个可以写为: this.f(); } private void f() {  // 局部变量与成员变量同名,成员变量被屏蔽,用"this.成员变量"的方式访问成员变量.  int x;  x = this.x++;  System.out.println(x);  System.out.println(this.x); }  //返回当前实例的引用 private Test6 getSelf() {  return this;  }} 运行结果如下:-----------0未知空100101-----------0游客空100101         看着上面的例子,说明在什么情况下需要用到this:        第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。        第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,呵呵        第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。        其实这些用法总结都是从对“this是指向对象本身的一个指针”这句话的更深入的理解而来的,死记不然容易忘记而且容易搞错,要理解! 二、super         super关键和this作用类似,是被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是直接父类(就是类之上最近的超类)。下面是一个综合运用super的例子,有两个类:一个Father类,一个Father类的子类Son,通过这两个类完全演示了super的用法,一下是代码:package org.leizhimin;public class Father { public String v="Father"; public String x="输出了Father类的public成员变量x!!!";  public Father() {  System.out.println("Father构造方法被调用!"); } public Father(String v){  this.v="Father类的带参数构造方法!运行了."; } public void outinfo(){  System.out.println("Father的outinfo方法被调用"); }  public static void main(String[] args) {  // TODO 自动生成方法存根 }} package org.leizhimin;public class Son extends Father{ public String v="Son"; public Son() {  super();      //调用超类的构造方法,只能放到第一行.  System.out.println("Son无参数构造方法被调用!");  //super();      //错误的,必须放到构造方法体的最前面. }   public Son(String str){  super(str);  System.out.println("Son带参数构造方法被调用!"); } //覆盖了超类成员方法outinfo() public void outinfo(){   System.out.println("Son的outinfo()方法被调用"); }   public void test(){    String v="哈哈哈哈!";   //局部变量v覆盖了成员变量v和超类变量v    System.out.println("------1-----");  System.out.println(v);   //输出局部变量v  System.out.println(this.v);  //输出(子类)成员变量v  System.out.println(super.v); //输出超类成员变量v     System.out.println("------2-----");  System.out.println(x);   //输出超类成员变量v,子类继承而来  System.out.println(super.x); //输出超类成员变量v    System.out.println("------3-----");  outinfo();   //调用子类的outinfo()方法  this.outinfo();  //调用子类的outinfo()方法  super.outinfo(); //调用父类的outinfo()方法 }   public static void main(String[] args) {  new Son().test();   }} 子类Son运行结果: Father构造方法被调用!Son无参数构造方法被调用!------1-----哈哈哈哈!SonFather------2-----输出了Father类的public成员变量x!!!输出了Father类的public成员变量x!!!------3-----Son的outinfo()方法被调用Son的outinfo()方法被调用Father的outinfo方法被调用         说明:次例子仅仅为了说明super的用法,实际在设计类的时候一般都尽可能私有(private)化。        通过上面的例子,下面总结一下super的用法:        第一、在子类构造方法中要调用父类的构造方法,用“super(参数列表)”的方式调用,参数不是必须的。同时还要注意的一点是:“super(参数列表)”这条语句只能用在子类构造方法体中的第一行。        第二、当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变量覆盖父类成员变量时,用“super.成员变量名”来引用父类成员变量。当然,如果父类的成员变量没有被覆盖,也可以用“super.成员变量名”来引用父类成员变量,不过这是不必要的。        第三、当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有完全相同的方法定义(但方法体可以不同),此时,用“super.方法名(参数列表)”的方式访问父类的方法。

原创粉丝点击