牛客网java笔试题错题笔记

在软件开发过程中,我们可以采用不同的过程模型,下列有关 增量模型描述正确的是()
正确答案: B   你的答案: B (正确)

是一种线性开发模型,具有不可回溯性

把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件

适用于已有产品或产品原型(样品),只需客户化的工程项目

软件开发过程每迭代一次,软件开发又前进一个层次


下面有关值类型和引用类型描述正确的是()?
正确答案: A   你的答案: B (错误)

值类型的变量赋值只是进行数据复制,创建一个同值的新对象,而引用类型变量赋值,仅仅是把对象的引用的指针赋值给变量,使它们共用一个内存地址。

值类型数据是在栈上分配内存空间,它的变量直接包含变量的实例,使用效率相对较高。而引用类型数据是分配在堆上,引用类型的变量通常包含一个指向实例的指针,变量通过指针来引用实例。

引用类型一般都具有继承性,但是值类型一般都是封装的,因此值类型不能作为其他任何类型的基类。

值类型变量的作用域主要是在栈上分配内存空间内,而引用类型变量作用域主要在分配的堆上。


如何在多线程中避免发生死锁?
正确答案: A   你的答案: D (错误)

允许进程同时访问某些资源。

允许进程强行从占有者那里夺取某些资源。

进程在运行前一次性地向系统申请它所需要的全部资源。

把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。


以下为求0到1000以内所有奇数和的算法,从中选出描述正确的算法( )
正确答案: A   你的答案: A (正确)

①s=0;②i=1;③s=s+i;④i=i+2;⑤如果i≤1000,则返回③;⑥结束

①s=0;②i=1;③i=i+2;④s=s+i;⑤如果i≤1000,则返回③;⑥结束

①s=1;②i=1;③s=s+i;④i=i+2;⑤如果i≤1000,则返回③;⑥结束

①s=1;②i=1;③i=i+2;④s=s+i;⑤如果i≤1000,则返回③;⑥结束

关于递归法的说法不正确的是( )
正确答案: D   你的答案: D (正确)

程序结构更简洁

占用CPU的处理时间更多

要消耗大量的内存空间,程序执行慢,甚至无法执行

递归法比递推法的执行效率更高

字符串”ABCD”和字符串”DCBA”进行比较,如果让比较的结果为真,应选用关系运算符()  //比较的时候比的是ASCII码,从第一位开始比,如果第一位能比较出谁大谁小则直接返回,若相等,比较下一个字符,因此选B 
正确答案: B   你的答案: B (正确)

>

<

=

>=

权值分别为9、3、2、8的结点,构造一棵哈夫曼树,该树的带权路径长度是?
正确答案: B   你的答案: A (错误)

36

40

45

46

//对给定的权值集合构W={ }构造哈弗曼树,计算WPL最小即权值越大离根越近,权值总和为22作为根,假设左子节点小于右,第二层9,13,第三层将13分为5,8,第四层将5分为2,3,然后计算叶子节点的带权路径和WPL=91+82+23+33。


中继器和集线器工作在物理层。中继器用于再生数字信号,集线器用于放大信号。路由器工作在网络层,用于分组转发


滑动窗口协议有
1、停止等待协议,发送窗口=1,接受窗口=1;
2、退后N帧协议,发送>1,接收=1;
3、选择重传协议,发送>1,接收>1;


export 用于修改环境变量
env 用于创建环境变量


Mysql中表user的建表语句如下,

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键Id',
  `name` varchar(255) DEFAULT NULL COMMENT '名称',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `address` varchar(255) DEFAULT NULL COMMENT '地址',
  `created_time` datetime DEFAULT NULL COMMENT '创建时间',
  `updated_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_com1` (`name`,`age`,`address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
以下哪个查询语句没有使用到索引idx_com1?
正确答案: C   你的答案: D (错误)

select  *  from user where name='张三' and age = 25 and address='北京大兴区';

select  *  from user where name='张三' and address='北京大兴区';

select  *  from user where age = 25 and address='北京大兴区';

select  *  from user where address='北京大兴区'  and age = 25 and name='张三'

索引的最左匹配特性:

当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候
b+数是按照从左到右的顺序来建立搜索树的,
比如当(张三,20,F)这样的数据来检索的时候,
b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;
但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点


备忘录模式:适用于恢复某个类的先前状态,有点类似于快照这类型功能。
原型模式:通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。就是java中的克隆技术,以某个对象为原型,复制出新的对象。显然,新的对象具备原型对象的特点。
状态模式:当一个对象,它具有很多种状态的,需要进行繁琐复杂的逻辑处理时,我们可以利用状态模式,将对象的各种状态进行类的封装,用于避免if else过于繁琐的情况。
命令模式:是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。


建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适配器模式:将一个类的接口转换成另外一个客户希望的接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
代理模式:为其他对象提供一种代理以控制对这个对象的访问。


解析:在同一类里面,首先静态代码块在类加载的时候就执行了,而且只执行一次,不论你是否new了对象,而构造代码块和构造方法是在每次创建对象时都会被调用,并且构造代码块的执行次序优先于类构造函数。
例如:下面这个例子

package cn.hgnulb.base;
 
public class GFG {

GFG(int x) {
    System.out.println("ONE argument constructor");
}

GFG() {
    System.out.println("No  argument constructor");
}

static {
    System.out.println("1st static init");
}

{
    System.out.println("1st instance init");
}

{
    System.out.println("2nd instance init");
}

static {
    System.out.println("2nd static init");
}

public static void main(String[] args) {
    new GFG();
    new GFG(8);
}

}
输出结果:
1st static init
2nd static init
1st instance init
2nd instance init
No argument constructor
1st instance init
2nd instance init
ONE argument constructor

执行顺序:静态变量=》静态代码块=》Main()中代码


根据类加载器加载类的初始化原理,推断以下代码的输入结果为?
public class Test {

public static void main(String[] args) throws Exception{
  ClassLoader classLoader=ClassLoader.getSystemClassLoader();
  Class clazz=classLoader.loadClass("A");
  System.out.print("Test");
  clazz.forName("A");
}
}

class A{
    static {
        System.out.print("A");
    }
}
正确答案: A   你的答案: A (正确)

TestA

ATestA

ATest

Test

用ClassLoader加载类,是不会导致类的初始化(也就是说不会执行方法).Class.forName(…)加载类,不但会将类加载,还会执行会执行类的初始化方法.


Java线程中的Thread.yield( )方法,译为线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,
让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程。
yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保
证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!
举个例子:一帮朋友在排队上公交车,轮到Yield的时候,他突然说:我不想先上去了,咱们大家来竞赛上公交车。然后所有人就一块冲向公交车,
有可能是其他人先上车了,也有可能是Yield先上车了。
但是线程是有优先级的,优先级越高的人,就一定能第一个上车吗?这是不一定的,优先级高的人仅仅只是第一个上车的概率大了一点而已,
最终第一个上车的,也有可能是优先级最低的人。并且所谓的优先级执行,是在大量执行次数中才能体现出来的。

在bash编程中,算术比较大于、大于等于的运算符是(      )
正确答案: C   你的答案: D (错误)

>

>=

ge

gt

$0
Shell本身的文件名
$!
Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)
$?
最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$#
添加到Shell的参数个数

 关于数据库,以下描述错误的是
正确答案: D   你的答案: C (错误)

任意两行的主键值都不相同

主键列不允许NULL值

表可包含多个唯一约束,但每个表只允许一个主键

唯一约束列不允许NULL值

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。 IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值