【2019】360Java工程师客观题总结

发布时间:2024年01月13日

这套试卷比上次做的第一套要好一丢丢,但也没好到哪里去。。

一.运行下面测试方法,以下哪种输出是正确的

@Test
    public void TestA() {
        assertEquals(4, 2 +1);
        System.out.println("Test A");
    }

首先我们要注意这里考察的是单元测试里的断言,要明白这个知识点这道题就十分轻松了。
Assert.assertEquals();及其重载方法:

  1. 如果两者一致, 程序继续往下运行.

  2. 如果两者不一致, 中断测试方法, 抛出异常信息 AssertionFailedError

那么在这里就是直接抛出异常,而不会进行到输出Test A

二. 利用线性规划模型解决实际问题时,所具备的条件中哪项不是必须要满足的条件

A.非负条件
B.优化条件
C.约束条件
D.选择条件

这道题选择C,我不是很能理解。。。找了找资料,基本上说线性规划就是有约束的,所以不懂

三.CMS和G1收集器的描述正确的是()

A. CMS和G1的垃圾回收的过程是一样的

B. CMS收集器以最小的停顿时间为目标的收集器;G1收集器可预测垃圾回收的停顿时间

C. CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片;G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片

D. CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用;G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用

选BCD,这个打算等后面JVM学到GC时好好写篇笔记总结

四. 什么模式无法实现低耦合?

策略模式,策略模式无法实现低耦合,在这里不太清楚的就是代理模式和桥接模式了。这个也是属于日后要去专门总结的设计模式笔记

代理模式俗话说就是找中介,你无法直接联系到客户,所以需要一个代理去联系。它的优点就十分显而易见,那就是职责清晰、高扩展、低耦合、智能化

桥接模式是将抽象部分与它的实现部分分离,一种对象结构型模式,又称为柄体(Handle and Bode)模式和接口模式,所以它也是低耦合的甚至也是动态耦合

五.关于Java内存的描述

在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。

栈和常量池中的对象可以共享,对于堆中的对象不可以共享

堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理

六. 保证一组任务A、B、C按顺序执行,以下哪些方式可以实现?

责任链模式和观察者模式,责任链模式听名字就知道干啥的。它为请求创建了一个接受者对象的链。这种模式给予请求的类型,对请求的发送者和接受者都进行解耦。

观察者模式则定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有的依赖者都会收到通知并自动更新。

七. 使用C++抽象类有哪些限制?

  • 抽象类只能用作其他类的基类
  • 不能使用抽象类定义对象
  • 抽象类不能用作参数类型、函数返回类型或显式转换的类型

八.关于java内存优化,哪些描述是正确的

  • 没有必要时尽量不要使用静态变量
  • 确定StringBuffer的容量
  • 尽量使用基本数据类型代替对象
  • 不要使用split处理字符串

九. 运用下列哪个命令能够获取JVM内存的各种堆和非堆的大小及其内存使用量

A. jhat
B. jmap
C. jinfo
D. jstat

  • jinfo:可以输出并修改运行时的java进程的opts
  • jps:与ps类似,显示本地的java进程
  • jstat:监视JVM内存工具,可以看JVM内存内的各种堆和非堆的大小及其内存使用量
  • jmap:打印出某个java进程(使用pid)内存内的所有对象的情况
  • jconsole:java的GUI监视工具,图表化形式显示各种数据
  • jhat:分析堆的命令,将堆中的对象以html的形式显示出来,包括对象的数量、大小等等,支持对象查询语言

十.关于类模板静态数据成员说法

静态数据成员的模板定义不会引起内存分配:在C++中,静态数据成员的声明和定义是分开的。当你在类内部声明一个静态数据成员时,你并没有为它分配内存。这只是告诉编译器这个数据成员的存在。你需要在类外部明确地定义这个静态数据成员,这时才会为其分配内存。对于类模板,情况是相同的。

静态数据成员的模板定义必须在类模板定义之外:静态数据成员的定义应该在类模板定义之外。这样做的原因是,定义是真正为数据成员分配内存的地方,而在模板类内部,编译器尚不知道你将使用哪些具体类型来实例化模板,因此不能在此时分配内存。你需要为每种类型的模板实例单独进行定义。

只有当程序使用静态数据成员时,它才会被实例化:这种实例化方式的优点是节省内存:如果你声明了一个模板,但从未使用它的某些类型实例,那么这些实例的静态数据成员就不会被实例化,也不会消耗任何内存。

十一.公司开发部通过nfs服务把程序存储于公司网络中心,开发部的计算机需要配置/etc/fstab文件指定nfs服务器,可以使用vi编辑器的什么指令修改(? ? ? )

s,cw,i

十二.了解适配器模式、原型模式

适配器模式还有个别名叫:Wrapper(包装器),顾名思义就是将目标类用一个新类包装一下,相当于在客户端与目标类直接加了一层。IT世界有句俗语:没有什么问题是加一层不能解决的。就相当于你的电脑只有usb接口,但你目前只有typec-typec线,这时候就需要一个适配器了

原型模式:原型模式涉及到复制一个已经存在的对象,而不是从头创建一个新的对象。

原型模式的优点

快速创建对象:如果对象的创建过程复杂或者耗时,直接复制一个已有的对象会更快。

节省资源:当对象的创建需要很多计算或者资源时,复制一个已经创建好的对象会更有效。
所以在工作中,某些类的结构比较复杂,创建对象代价较大,但是又需要频繁的创建并使用,我们可以使用原型模式

十三.在二叉树中,完全二叉树的带权路径长度最小 的这句话为什么是错的?

带权路径长度(WPL):带权路径长度是二叉树中所有叶子节点的权值与其到根节点路径长度的乘积之和,完全二叉树的结构本身并不能保证最小的带权路径长度。实际上,为了获得最小的带权路径长度,我们通常使用Huffman编码树,它是基于权值构建的,但不一定是完全二叉树。

十四. 字符串zhong的子串共有几个?

对于一个长度为n的字符串,其子串数量为(n*(n + 1) /2) + 1个 , +1个是因为空字符串

十五.LRU算法中文名叫?

最近最久未使用

十六. 理解下class.forNameClassLoader.loadClass

当你调用Class.forName("ClassName")时,它实际上执行了以下步骤:

加载: 这确实是将类的.class文件加载到JVM中。

链接: 这包括验证类文件,为类的静态字段分配存储,并且可能会解析这个类所引用到的其他类。

初始化: 这是关键部分,对于Class.forName来说,它将初始化类。这意味着它会执行该类的静态初始化块和静态变量初始化。
这与使用ClassLoader.loadClass的行为是不同的,后者只会加载类而不会初始化它。

因此,主要的区别是Class.forName除了加载类之外,还会初始化它,这通常涉及到执行静态初始化代码块。这使得Class.forName在某些场景中特别有用,比如JDBC驱动加载,其中驱动类的静态初始化块会注册自身到DriverManager中。

文章来源:https://blog.csdn.net/m0_51547272/article/details/135562992
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。