面经:北明数科java方向笔试题(含答案)

【北明数科】实习生-Java/大数据题目

—、不定向选择题(每题2分)

1.下列属于合法的java标识符的是【多选题】

A._cat

B. 5books

C. +static

D. -3.14159

image-20210318161005905

image-20210318161123081

image-20210318161137490

image-20210318161151155

二、简答题

String, Stringbuffer, StringBuilder 的区别?

简单的来说:String 类中使⽤ final 关键字修饰字符数组来保存字符串, private final char value[] ,所以 String 对象是不可变的。

⽽ StringBuilder 与 StringBuffer 都继承⾃ AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使⽤字符数组保存字符串 char[]value 但是没有⽤ final 关键字修饰,所以这两种对象都是可变的。

list、set. map的区别?

  • List (对付顺序的好帮⼿): 存储的元素是有序的、可重复的。
  • Set (注重独⼀⽆⼆的性质): 存储的元素是⽆序的、不可重复的。
  • Map (⽤ Key 来搜索的专家): 使⽤键值对(kye-value)存储,类似于数学上的函数y=f(x),“x”代表 key,"y"代表 value,Key 是⽆序的、不可重复的,value 是⽆序的、可重复的,每个键最多映射到⼀个值。

接口和抽象类的区别?

  1. 接⼝的⽅法默认是 public ,所有⽅法在接⼝中不能有实现(Java 8 开始接⼝⽅法可以有默认实现),⽽抽象类可以有⾮抽象的⽅法。

  2. 接⼝中除了 static 、 final 变量,不能有其他变量,⽽抽象类中则不⼀定。

  3. ⼀个类可以实现多个接⼝,但只能实现⼀个抽象类。接⼝⾃⼰本身可以通过 extends 关键字扩展多个接⼝。

  4. 接⼝⽅法默认修饰符是 public ,抽象⽅法可以有 public 、 protected 和 default 这些修饰符(抽象⽅法就是为了被重写所以不能使⽤ private 关键字修饰!)。

  5. 从设计层⾯来说,抽象是对类的抽象,是⼀种模板设计,⽽接⼝是对⾏为的抽象,是⼀种⾏为的规范。

Java中会存在内存泄漏吗,请简单描述

内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象变成了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的

java中的内存泄露的情况:

1.长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。

检查java中的内存泄露,一定要让程序将各种分支情况都完整执行到程序结束,然后看某个对象是否被使用过,如果没有,则才能判定这个对象属于内存泄露。

2.如果一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,即使那个外部类实例对象不再被使用,但由于内部类持久外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。

3.当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,造成内存泄露。

Java中处理多线程的Thread类跟Runable的区别

结论,Thread和Runnable的实质是继承关系,没有可比性。无论使用Runnable还是Thread,都会new Thread,然后执行run方法。用法上,如果有复杂的线程操作需求,那就选择继承Thread,如果只是简单的执行一个任务,那就实现runnable。
  再遇到二笔面试官问Thread和Runnable的区别,你可以直接鄙视了!

三、编程题

1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔 子,假如兔子都不死,问每个月的兔子对数为多少?

public static long f(int n){
    
    	//递归
			if(n == 1 || n == 2){
    
    //参数1或者2时
				return 1;
			}else{
    
    
				return f(n - 1) + f(n - 2);
			}
		}

2.—个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+ 3.编程找出1000以内的所有完数。

public class Demo5 {
    
    
    public static void main(String[] args) {
    
    
        int sum=0;                            //定义所有因子的和
        for(int i=1;i<=1000;i++){
    
    
            sum=0;                            //每次循环,sum重新归零
            for(int n=1;n<i;n++){
    
                 //找出这个数的所有因子
                if(i%n==0){
    
    
                    sum=sum+n;                //所有的因子相加
                }
            }
            if(i==sum){
    
                           //判断这个数是否是完数,既所有因子之和与它本身是否相等
                System.out.println(sum);      //打印完数
            }
        }
    }
}

3.image-20210318162500993

参考链接

面经

c++的引用传递是什么
Java为什么是值传递,说一下Java的值传递
说一下你熟悉的集合
arraylist为什么扩容1.5倍,扩容具体怎么操作
hashmap为什么用树,为什么不一直用树,只要链表长度达到8就一定扩容吗

快速失败,那个异常是什么

集合遍历有哪几种方式,迭代器线程安全吗,除了迭代器你还试过怎么遍历,迭代器有什么好处

wait和sleep区别(爆炸,后面不问多线程了,我sync和锁之类的都有复习。。要加强这方面的广度)
对内存模型的了解,它主要想解决什么问题,你自己对内存模型的理解(同爆炸,一个月前复习的,忘得彻底,后面不再问jvm)
spring的 ioc aop
aop是什么,使用时指定什么参数
springmvc流程

redis五个数据结构,用过哪个,回答hash问我有什么使用场景

linux命令你用过什么,回答grep追问grep怎么查文件,chmod 777 为什么是7而不是8,jstat 后面的参数具体是什么

项目:

项目的markdown语法使用什么插件实现的
项目的Redis是存放整个博客吗
怎么实现按照访问热度进行排序的
怎么优化SQL语句的,你是为什么认为一条语句需要优化
SQL语句的执行速度是只与索引有关吗
explain有什么字段
索引失效有什么场景
索引的回表是怎么回事,什么情况下回表
全局异常处理的两个类你知道是怎么实现的吗

项目的Redis是存放整个博客吗
怎么实现按照访问热度进行排序的
怎么优化SQL语句的,你是为什么认为一条语句需要优化
SQL语句的执行速度是只与索引有关吗
explain有什么字段
索引失效有什么场景
索引的回表是怎么回事,什么情况下回表
全局异常处理的两个类你知道是怎么实现的吗
手写冒泡

猜你喜欢

转载自blog.csdn.net/weixin_43314519/article/details/114983809