某厂2021实习生笔试(Web后台)

0 简述

​ 笔试时间90分钟,线上笔试,范围较广,那天刚考完一科,晚上就做这个笔试题。之前我并没有复习,而且关键我比较菜,所以并没有过。

​ 整个测试包括20道不定项选择题,2道在线编程题,1道论述题。并且题目只能顺序作答,不支持跳题或返回上一题,不可跳出答题界面5次以上。

1 不定项选择题

1.1 在OSI参考模型中,保证端-端的可靠性是在( )完成的?

网络层

数据链路层

会话层

传输层

**参考答案:传输层。**OSI,Open System Interconnection,开放系统互联模型。包括七层:

physical-物理层(二进制传输)

data link-数据链路层(访问介质)

network-网络层(数据传输)

transport-传输层(端到端连接)

扫描二维码关注公众号,回复: 11217212 查看本文章

session-会话层(主机间通信)

presentation-表示层(数据表示)

application-应用层(网络进程访问应用层)

1.2 下列哪个HTTP头部用于包含断点续传信息?

Cookie

Connection

Content-Type

Content-Range

**参考答案:Content-Range。**HTTP断点续传(分块传输):指的是在上传/下载时,将任务(一个文件或压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传/下载,如果碰到网络故障,可以从已经上传/下载的部分开始继续上传/下载未完成的部分,而没必要从头开始上传/下载。可以节省时间,提高速度。

1.3 小明在程序中引入了两个事务,同时对数据库中同一数据进行操作,请你分析下会引起的冲突是()

A.一个是SELECT,另一个是UPDATE

B.其中有一个是DELETE

C.两个都是SELECT

D.两个都是UPDATE

**参考答案:ABD。**不解释。

1.4 以下选项中,那些是Java8的新特性()

A.加入Fork/Join框架

B.在switch语句中使用字符串

C.Lambda表达式

D.新添加的Stream API(java.util.stream)把真正的函数式编程风格引入到Java中

**参考答案:CD。**AB都是java7新特性。

1.5 下列选项中关于Java引用的说法不正确的是

A.在下次GC时,虚引用指向的对象一定会被回收

B.Java中仅有弱引用、软引用、虚引用三种类型

C.在下次GC时,软引用指向的对象一定会被回收

D.在下次GC时,弱引用指向的对象一定会被回收

**参考答案:ABC。**GC即为Garbage Collection,垃圾收集。B:Java有四种引用,包括强引用、软引用、弱引用、虚引用。强引用指向的对象从来不会被回收,软引用在内存不足时回收,弱引用在垃圾回收时被回收,虚引用在任何时候都可能被回收。

1.6 中序遍历一个非空二叉树,遍历顺序根节点左边

A.只有左子树上的部分结点

B.只有左子树上的所有结点

C.只有右子树上的所有结点

D.只有右子树上的部分结点

**参考答案:B。**不解释。

1.7 关于类加载的顺序,以下说法正确的是()

A.加载->初始化->链接->使用->卸载

B.加载->链接->初始化->使用->卸载

C.以上说法都不正确

D.初始化->链接->加载->使用->卸载

**参考答案:A。**不解释。

1.8 下列关于IP地址的说法中错误的是

A.地址205.106.256.36是一个合法的IP地址

B.IP地址一般用点分十进制表示

C.一个IP地址只能标识网络中的唯一的一台计算机

D.同一个网络中不能有两台计算机的IP地址相同

**参考答案:A。**不解释。

1.9 下面有关JVM,说法正确的是

A.堆用来存放对象的实例和数组,是垃圾收集器管理的主要区域,所有线程共享

B.一个对象实例有多个引用,将其中一个引用置为null,则该对象会被回收

C.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的

D.方法区用于存储JVM加载的类信息,常量,静态变量,以及编译器编译后的代码等数据,是线程隔离的

**参考答案:AC。**不解释。

1.10关于Java泛型以下描述正确的是

A.泛型可以消除强类型转换,且代码更加可读,减少了出错率

B.泛型可以提高Java程序的类型安全,在编译期可以检查因为Java类型不正确导致的ClassCastException异常

C.泛型在编译期就固定的类型的范围,大量使用可以极大提高程序的运行性能

D.泛型类型除了支持对象类型,还支持数组类型以及基本数据类型

**参考答案:AB。**C:编译器会创建类型转换,反而会影响性能。D:泛型不支持数组及基本数据类型,虚拟机在编译时会把带泛型的转换成Object类型,而基本数据类型不属于Object 所以不能装。Java中不允许直接创建泛型数组。

1.11 以下关于线性结构描述正确的是哪些()

A.线性结构就是顺序存储结构

B.线性结构一定有唯一的第一个元素和唯一的最后一个元素

C.队列是线性结构,树不是线性结构

D.线性结构拥有随机访问元素的特性

**参考答案:BC。**线性结构中的“线性”是指数学中的线性,即一对一的关系。B选项正确,是线性结构的基本特性之二。

1.12 关于Java的动态代理机制,正确的是()

A.Proxy接口的invoke方法可以用来动态覆盖代理真实对象的操作

B.动态代理都是基于反射API实现的

C.每个动态代理类不是必须实现InvocationHandler接口,将实例关联到任意一个Handler就可以

D.动态代理允许我们在代理真实对象前后添加一些自己的操作

**参考答案:AD。**B:主要是基于反射API实现的,cglib 动态代理:基于 ASM 机制实现。C:每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用。

1.13 一组记录的关键吗为(79 56 46 38 40),得到的最终排序序列的变化过程为:

(1)79 56 46 38 40

(2)38 56 46 79 40

(3)38 40 79 46 56

(4)38 40 46 79 56

(5)38 40 46 56 79

则使用的排序方法为()

选择排序

快速排序

冒泡排序

插入排序

答案应该是:选择排序。此题有争议。

1.14 Java中以下常见的Map中有序的是()

A.HashMap

B.Hashtable

C.TreeMap

D.LinkedHashMap

参考答案:CD。

1.15 关于IO流下列描述正确的是:

A.字节流继承自InputSteamReader或OutputStreamWriter

B.字符流继承自InputStream或OutputStream

C.字符流继承自InputSteamReader或OutputStreamWriter

D.字节流继承自InputStream或OutputStream

**参考答案:CD。**不解释,以上选项是原文。

1.16 以下说法正确的是:

A.B-树的阶数越小,越不容易发生分裂

B.B-树的阶数越大,越不容易发生分裂

C.B-树的阶数越大,越容易发生分裂

D.B-树的阶数越小,越容易发生分裂

参考答案:BD。

1.17 关于Java中的Lock,以下说法正确的是()

A.ReentrantReadWriteLock包含读锁和写锁,两者互不干扰

B.使用tryLock()方法时,如果资源被占用,会一直等待,直到资源释放

C.使用lockInterruptibly()方法时,如果资源被占用,会一直等待,直到资源释放或者调用interrupt()方法来中断等待

D.使用lock()方法加锁后,必须调用unlock()方法才能释放锁

**参考答案:CD。**A:两者不是互不干扰。B:不会等待,直接返回。

1.18 下面关于Java字符串的描述正确的是()

A.System.out.format("%s|%s",1,2,3)编译通过,且输出1|2

B.StringBuilder是线程不安全的,它比String快

C.语句System.out.println(new A())能正常运行,其中类A如下

public class A{
    @Override
    public String toString(){
        return "hello"+this.toString();
    }
}

D.StringBuffer是线程安全的,它比String快

**参考答案:AB。**C:报栈溢出错误

1.19 以下对Java的垃圾回收的描述,正确的是()

A.复制算法比较适合于新生代,标记阶段和复制阶段可以同时进行,但可一次性分配的最大内存缩小了一半

B.所有新创建的对象都会被放在年轻代,经历N次回收仍存活就会被放到年老代

C.标记/清除算法为了解决引用计数法的问题而提出,但是标记清除后会产生大量不连续的内存碎片

D.标记/整理算法解决了标记/清除算法的内存碎片问题,且性能更好回收速度更快

**参考答案:ABC。**D:整理需要花费不少时间,速度比标记/清除算法要慢。

1.20 在查询语句的where子句中,如果出现了“amount between 100 and 300” 这个表达式等同于()

A. not (amount < 100 or amount > 300)

B. amount in (100,300)

C. amount >= 100 and amount <= 300

D. amount > 100 and amount < 300

参考答案:AC。

2 在线编程

2.1 字母转换

将大写字母转化为数字,“A”表示1,“AB”表示28,升序排列。

样例输入:

[“A”,“ZY”,“B”,“AB”]

样例输出:

[1,2,28,701]

方法定义如下:

//请完成以下方法
public static Integer[] listLineNumber(String[] lineTitleArr){

}

水题

public static Integer[] listLineNumber(String[] lineTitleArr){
        Character[] nums = {'0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
        List<Character> list = Arrays.asList(nums);
        if (lineTitleArr.length < 1){
            return null;
        }
        Integer[] result = new Integer[lineTitleArr.length];
        for (int i = 0; i < lineTitleArr.length; i++) {
            char[] lineTile = lineTitleArr[i].toCharArray();
            int len = lineTitleArr[i].length();
            Integer lineNum = 0;
            for (int j = len-1; j >= 0 ; j--) {
                int base = 1;
                for (int k = 0; k < len-1-j; k++) {
                    base *= 26;
                }
                lineNum += list.indexOf(lineTile[j])*base;
            }
            result[i] = lineNum;
        }
        Arrays.sort(result);
        return result;
    }

2.2 连续非空子数组各自和的最大值最小化问题

给定一个长度为n的整数组,数组元素均大于等于0,和一个整数m,将这个数组分成m个非空的连续子数组。设计一个算法使得这m个子数组各自和的最大值最小。

int findMinSumOfSubarray(int[] nums,int m){
    //添加实现
}
输入:

nums = [7,2,5,10,8]

m = 2

输出:

18

解释:

一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5][10,8],因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。

这道题有难度,笔者暂未实现。

3 论述题

为了保证某厂各个系统的数据质量,需要设计一个数据监控平台,该平台的异常告警模块,有以下需求:

  • 1)触发告警时,需要支持不同的通知方式(SMS、EMAIL、WECHAT等等)
  • 2)触发告警时,需要支持触发事件回调,调用相关系统的接口,并能保证多个系统同时回调场景

如果是你,会如何设计这一模块?除了考虑基本功能的实现以外,还需要考虑通知方式的扩展和回调方式的扩展,后续问题排查以及数据统计方面的需要。

请简述你的设计要点及原因。

原创文章 5 获赞 2 访问量 511

猜你喜欢

转载自blog.csdn.net/weixin_43191072/article/details/104976762