凹数科技笔试

一、Java

1、成员变量作用域public/protected/defaultprivate/区别?

public:该成员变量或其方法对当前类、同一包、子类、其他包都可见,所有类和对象都可以直接访问。

protected:该成员变量或其方法对当前类、同一包、子类都可见。

default:该成员变量或其方法对当前类、同一包可见,子类与该成员变量所在的父类位于同一包,子类可以访问,否则不能。

private:该成员变量或其方法只对当前类可见。

2、Override(覆盖)和Overload(重载)区别?

重载和覆盖是Java多态性的不同表现方式。

覆盖是子类函数覆盖基类函数,覆盖一个方法并对其重写以达到不同的作用。

Note:

  • 子类中的覆盖方法必须父类中被覆盖的方法有相同的函数名和参数。
  • 子类中覆盖方法的返回值必须和父类中被覆盖方法的返回值相同。
  • 子类中覆盖方法所抛出的异常类必须和父类中被覆盖方法相同。
  • 父类中被覆盖方法不能为private,负责子类只是定义了一个新方法而不是覆盖。

重载是通过不同的参数列表来区分,如不同的参数个数,参数类型,参数顺序。

Note:

  • 不能通过方法的访问权限、返回值类型,抛出异常类型来区分重载。
  • 对于继承来说,如果父类方法的访问权限为private,就不能在子类中对其重载,只是新定义的一个方法。

覆盖与重载的区别:

1)Override是子类与父类之间的关系,是垂直关系;Overload 是同一个类中方法之间的关系,是水平关系。

2)覆盖关系中,是根据对象的类型决定调用哪个方法(父类或子类的);重载是根据参数列表的不同决定调用哪个方法。

3)覆盖要求参数列表相同,重载不同。

4)覆盖只能由一个方法或由一对方法产生关系;重载是多个方法之间的关系。

3、ArrayList与Vector区别?

均在java.util包中,均为可伸缩数组,可以动态改变长度。两者都是基于存储元素的Object[] array实现的,在内存中开辟连续的空间来存储,支持用下标访问。ArrayList和Vector都有一个初始化的容量大小,当超过时,Vector默认扩充为原来的2倍,ArrayList默认扩充为原来的1.5倍。

最大区别:同步( synchronization)的使用,ArrayList的方法都不是同步的,Vector的大部分方法是同步的(add/insert/remove等)。Vector是线程安全的,提供了线程安全机制,因此其性能上要略逊于ArrayList;ArrayList不是线程安全的

4、HahMap与HashTable区别?(待补充)

5、类加载器class loader加载类的步骤?Java提供的类加载器有?

见(Tanks):http://blog.csdn.net/gjanyanlig/article/details/6818655

6、阅读程序填空,输出,有关Java程序初始化顺序(static、构造函数)

二、数据结构

7、给出前序遍历判断不可能的中序顺序。

8、邻接表,给出邻接表写出深度优先广度优先,伪代码

见(Tanks):https://segmentfault.com/a/1190000002685939

三、操作系统

9、临界区、互斥量、信号量、事件概念,Java中怎么实现?

见(Thanks):http://blog.csdn.net/vividonly/article/details/6415748  Java中怎么实现?(待解决)

10、进程调度算法有?区别?适用场合?

11、进程的状态有?三个基本状态:运行、就绪、阻塞 。见:http://blog.sina.com.cn/s/blog_7c03bb1f0100wcco.html

12、进程的数据结构?

13、实现复数Complex类,支持加减

public class ComplexDemo { 
 // main方法 
 public static void main(String[] a) { 
  Complex b = new Complex(2, 5); 
  Complex c = new Complex(3, -4); 
  System.out.println(b + "+" + c + "=" + b.add(c)); 
  System.out.println(b + "-" + c + "=" + b.minus(c)); 
  System.out.println(b + "*" + c + "=" + b.multiply(c)); 
  System.out.println(b + "/" + c + "=" + b.divide(c)); 
 } 
} 
 
// Complex类 
class Complex { 
 private double m;// 实部 
 private double n;// 虚部 
 
 public Complex(double m, double n) { 
  this.m = m; 
  this.n = n; 
 } 
 
 // add 
 public Complex add(Complex c) { 
  return new Complex(m + c.m, n + c.n); 
 } 
 
 // minus 
 public Complex minus(Complex c) { 
  return new Complex(m - c.m, n - c.n); 
 } 
 
 // multiply 
 public Complex multiply(Complex c) { 
  return new Complex(m * c.m - n * c.n, m * c.n + n * c.m); 
 } 
 
 // divide 
 public Complex divide(Complex c) { 
  double d = Math.sqrt(c.m * c.m) + Math.sqrt(c.n * c.n); 
  return new Complex((m * c.m + n * c.n) / d, Math.round((m * c.n - n * c.m) / d)); 
 } 
 
 public String toString() { 
  String rtr_str = ""; 
  if (n > 0) 
   rtr_str = "(" + m + "+" + n + "i" + ")"; 
  if (n == 0) 
   rtr_str = "(" + m + ")"; 
  if (n < 0) 
   rtr_str = "(" + m + n + "i" + ")"; 
  return rtr_str; 
 } 
}
运行结果:

13、编程:线程A不断向队列Queue写数据,线程B不断向队列Queue读数据。

已上传至GitHub:https://github.com/HiSunny/InterviewXianChengQue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值