某互联网公司的电话面试题 - Go语言中文社区

某互联网公司的电话面试题


记录为了下次不再犯同样的错误

 

 

1. java类加载器原理和使用范畴

 

 

Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:

  • 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自java.lang.ClassLoader
  • 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
  • 系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader() 来获取它。

除了系统提供的类加载器以外,开发人员可以通过继承 java.lang.ClassLoader 类的方式实现自己的类加载器,以满足一些特殊的需求。



 在 Java 中,类的实例化流程分为两个部分:类的加载和类的实例化。类的加载又分为显式加载和隐式加载。大家使用 new 关键字创建类实例时,其实就隐式地包含了类的加载过程。对于类的显式加载来说,比较常用的是 Class.forName。其实,它们都是通过调用 ClassLoader 类的 loadClass 方法来完成类的实际加载工作的。直接调用 ClassLoader 的 loadClass 方法是另外一种不常用的显式加载类的技术。


用于类的热替换和在线升级系统的实现。

 

 

2.static块 成员变量 构造函数的加载顺序

 

public class ChildClass extends FatherClass{
	ParameterClass pc1 = new ParameterClass("child member parameter ");
	static ParameterClass pc = new ParameterClass("child static parameter ");
	{
		System.out.println("block " +"has been initialized");
	}
	static{
		System.out.println("static block " +"has been initialized");
	}
	ChildClass(){
		System.out.println("child " +"has been initialized");
	}
	public static void  main(String[] args){
		new ChildClass();
	}
}


class FatherClass{
	ParameterClass pc1 = new ParameterClass("father member parameter");
	static ParameterClass pc = new ParameterClass("father static parameter");
	FatherClass(){
		System.out.println("father " +"has been initialized");
	}
}

class ParameterClass{
	ParameterClass(String arg0){
		System.out.println(arg0 +"has been initialized");
	}
}
 

 

3. Oracle的两种加载方式OCI和THIN的区别

  • 从使用上来说,oci必须在客户机上安装oracle客户端或才能连接,而thin就不需要,因此从使用上来讲thin还是更加方便,这也是thin比较常见的原因。 

  • 原理上来看,thin是纯java实现tcp/ip的c/s通讯;而oci方式,客户端通过native java method调用c library访问服务端,而这个c library就是oci(oracle called interface),因此这个oci总是需要随着oracle客户端安装(从oracle10.1.0开始,单独提供OCI Instant Client,不用再完整的安装client) 
  • 它们分别是不同的驱动类别,oci是二类驱动, thin是四类驱动,但它们在功能上并无差异。 
  • 虽然很多人说oci的速度快于thin,但找了半天没有找到相关的测试报告。 
4.多个服务器之间如何共享SessionID
     1.  使用tomcat或者其他服务器的集群配置,主要是session的全复制技术
  • 优点:实现简单,并且具有比较高的可靠性。
  • 缺点:当网络访问量大或者session中保存有大量的信息时,比较占网络资源。如果使用异步拷贝还可能出现session不一致问题。
     2.  使用session服务器保存所有的session,重写服务器的session的相关方法,所有的session都保存在一台服务             器上。当获取session时往远端服务器获取session信息。
  • 优点:克服了内网网络开销问题
  • 缺点:当session服务器挂掉之后无法保存seesion
     3.  使用反向代理服务器使得一个session只访问对应的服务器。
  • 优点:无需实现session共享。
  • 缺点:当用户指定的服务器挂掉知道用户的session丢失。
5.list set map 区别,HashSet如何判断重复对象?

区别就不说了。HashSet内部使用HashMap存储数据,在add的时候用的是HashMap的put方法。参考HashMap的put方法
    public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key.hashCode());//获取key的hash值
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {//先比较hash值再用equals方法
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }

        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }
 
6.TreeMap和HashMap区别

TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 红黑树查找的性能比双向链表要好。

 

HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 

 

7.Http中keep-alive的作用是什么。在服务器的哪里可以配置。

Keep-alive是指在同一个连接中发出和接收多次HTTP请求。优点是:

  • 使用较少的CPU和内存
  • 开启HTTP 管道
  • 减少网络拥堵
  • 在接下来的请求中,减少传输时间。
  • 错误可以被报告但是不关闭TCP连接。

 

8.Mysql master和slaver之间是如何实现同步的?分库分表是如何实现?

 

用于写操作的mater服务器将操作日志拷贝给众slaver服务器。

 

9.Thread实现的底层原理

 

每个对象的对象锁

 

10. BIO,NIO,AIO

11.String StringBuilder StringBuffer

12 java gc

13 java中的堆和栈

 

总结在Java里面Heap和Stack分别存储数据的不同。
Heap(堆)Stack(栈)
JVM中的功能内存数据区内存指令区
存储数据对象实例(1)基本数据类型, 指令代码,常量,对象的引用地址(2)

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/iteye_5635/article/details/82060476
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-26 22:15:20
  • 阅读 ( 503 )
  • 分类:面试题

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢