资源描述:
《2019京东java》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、在软件开发过程中,我们可以采用不同的过程模型,下列有关 增量模型描述正确的是()是一种线性开发模型,具有不可回溯性把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件适用于已有产品或产品原型(样品),只需客户化的工程项目软件开发过程每迭代一次,软件开发又前进一个层次解析:增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。2、下面有关值类型和引用类型描述正确的是()?值类型的变量赋值只是进行数据复制,创建一个同值的新对象,而引用类型变量赋值,仅仅是把对象的引用的指针赋值给变量,使它们共用一个内存地址。值类型数据是在栈上分配内存空间,它的变量直接包含变量的实例,使用效率相对较高。而引用类型数据是分配在堆上,引用类型的变量通常包含一个指向实例的指针,变量通过指针来引用实例。引用类型一般都具有继承性,但是值类型一般都是封装的,因此值类型不能作为其他任何类型的基类。值类型变量的作用域主要是在栈上分配内存空间内,而引用类型变量作用域主要在分配的堆上。解析:B错在,值类型变量不包含实例,实例是针对于对象的概念,当类实例化为对象的时候,这个时候可以称为是类的一个实例。同时,效率比较高这个概念比较模糊。C错在,封装的概念也是针对类而言的,值类型数据不存在封装概念。D错在,值类型变量可以作为成员变量存储在堆里,例如一个ClassA中包含一个intvalue,那么value是作为成员变量存储在堆中的。D选项表述有漏洞。3、如何在多线程中避免发生死锁?
1允许进程同时访问某些资源。允许进程强行从占有者那里夺取某些资源。进程在运行前一次性地向系统申请它所需要的全部资源。把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。解析:死锁:在多道程序设计环境下,多个进程可能竞争一定数量的资源,。一个进程申请资源,如果资源不可用,那么进程进入等待状态。如果所申请的资源被其他等待进程占有,那么该等待的进程有可能无法改变状态,这种情况下称之为死锁。死锁的四个条件:互斥:至少有一个资源必须处在非共享模式,即一次只能有一个进程使用,如果另一进程申请该资源,那么申请进程必须延迟直到该资源释放为止。占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有。非抢占:资源不能被抢占。循环等待:有一组进程{P0,P1,...Pn},P0等待的资源被P1占有,P1等待的资源被P2占有,Pn-1等待的资源被Pn占有,Pn等待的资源被P0占有。4、以下为求0到1000以内所有奇数和的算法,从中选出描述正确的算法( )①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算的是1+3+。。。+10001,A是0+1+3+。。。+999,就是D多算了一个5、关于递归法的说法不正确的是( )程序结构更简洁占用CPU的处理时间更多要消耗大量的内存空间,程序执行慢,甚至无法执行递归法比递推法的执行效率更高解析:递归就是一层一层的调用函数进栈,会大量存储重复的数据,占用大量内存,且会有栈溢出的可能。而递推就是不用存储重复的数据,从底层获得了数据直接递给上一层即可。
26、字符串”ABCD”和字符串”DCBA”进行比较,如果让比较的结果为真,应选用关系运算符()><=>=解析:比较的时候比的是ASCII码,从第一位开始比,如果第一位能比较出谁大谁小则直接返回,若相等,比较下一个字符,因此选B7、以下运算符中运算优先级最高的是( )+OR>\解析: 以上是我整理的运算符优先级,数字越小表示优先级越高。在这里我选的是+号,如果+号表示的是正号的话那么优先级是大于除/号的,这题目略微的不严谨,望周知。8、采用哪种遍历方法可唯一确定一棵二叉树?( )给定一棵二叉树的先序和后序遍历序列给定一棵二叉树的后序和中序遍历序列给定先序、中序和后序遍历序列中的任意一个即可给定一棵二叉树的先序和中序遍历序列解析:前序加中序 或 后序加中序都是可以的。
39、已知小顶堆:{51,32,73,23,42,62,99,14,24,3943,58,65,80,120},请问62对应节点的左子节点是(没有正确答案)99733943120解析:10、若串S=”UP!UP!JD”,则其子串的数目33373935解析:一个八个字符串公式n(n+1)/2+111、一颗二叉树的叶子节点有5个,出度为1的结点有3个,该二叉树的结点总个数是?11121314解析:因为是二叉树,所以度不能大于2。【度(子节点个数)】。5个叶子节点,三个度为1,则有上一层有4个,叶子节点数=度为2的节点个数+1=5;所以度为2的节点数为4;总节点数=度为1的节点数+度为2的节点数+叶子节点数=3+4+5=12。12、权值分别为9、3、2、8的结点,构造一棵哈夫曼树,该树的带权路径长度是?36404546解析:计算带权路径长度:结点的带权路径长度为从根结点到该结点之间的路径长度与该结点的权的乘积=3*2+3*3+2*8+1*9=4013、在()中,只要指出表中任何一个结点的位置,就可以从它出发依次访问到表中其他所有结点。
4线性单链表双向链表线性链表循环链表解析:循环链表只要沿一个方向一直走下去就可以遍历。14、打电话使用的数据传输方式是(),手机上网使用的数据传输方式是()?电路交换,电路交换电路交换,分组交换分组交换,分组交换分组交换,电路交换解析:电路交换有预留,且分配一定空间,提供专用的网络资源,提供有保证的服务,应用于电话网;分组交换无预留,且不分配空间,存在网络资源争用,提供有无保证的服务。分组交换可用于数据报网络和虚电路网络。我们常用的Internet就是数据报网络,单位是Bit。15、后退N帧协议的发送窗口大小是(),接收窗口的大小是()?=1,=1=1,>1>1,>1>1,=1解析:滑动窗口协议有:1、停止等待协议,发送窗口=1,接受窗口=1;2、退后N帧协议,发送>1,接收=1;3、选择重传协议,发送>1,接收>1;16、网络管理员把优盘上的源代码给程序员参考,但要防止程序误删除或修改,以下正确的加载方式是( )
5mount-odefaults/dev/sdb1/toolsmount-r/dev/sdb1/toolsmount-oro/dev/sdb1/toolsmount-oro/dev/sdb/tools解析:-r:将文件系统作为只读文件系统进行安装,而不考虑它先前在/etc/filesystems文件中指定的内容或者先前的任何命令行选项。ro:将已安装的文件指定为只读文件,而不考虑它先前在/etc/filesystems文件中指定的选项或者先前的任何命令行选项。缺省值是rw。17、重复的数据,会增加磁盘空间的占有率,延长操作数据的时间。可以使用规范化处理数据冗余,以下对符合第一范式的表述正确的是:非键属性和键(主键)属性间没有传递依赖非键属性和键(主键)属性间没有部分依赖表中不应该有重复组。列重复拆成另外一张表;行重复拆成多行一个表中的列值与其他表中的主键匹配解析:指数据库表的每一列(即每个属性)都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。简而言之,第一范式就是无重复的列。18、以下哪条SQL语句可以返回table1中的全部的key:selecttabel1.keyfromtable1jointabel2ontable1.key=table2.keyselecttabel1.keyfromtable1rightouterjointabel2ontable1.key=table2.keyselecttabel1.keyfromtable1leftsemijointabel2ontable1.key=table2.keyselecttabel1.keyfromtable1leftouterjointabel2ontable1.key=table2.key解析:由于需要返回table1中的全部的key,则需要左连接,而leftsemijoin表示只打印出左边表中的key,但前提是左表中的key在右表中存在,否则会过滤掉
619、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?select*fromuserwherename='张三'andage=25andaddress='北京大兴区';select*fromuserwherename='张三'andaddress='北京大兴区';select*fromuserwhereage=25andaddress='北京大兴区';select*fromuserwhereaddress='北京大兴区'andage=25andname='张三'解析:索引的最左匹配特性:当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点20、public class Main { private static int x = 10; private static Integer y = 10; public static void updateX(int value) {
7 value = 3 * value; } public static void updateY(Integer value) { value = 3 * value; } public static void main(String[] args) { updateX(x); updateY(y); }}执行以上程序后,x和y的值分别是多少?10,1010,3030,1030,30解析:形参名value和字段x,字段y不同,运算改变了内存中value,但是xy没有改变。当方法updateX的形参名改为x,此时运算会改变内存中x的值,是30,y同理。总结:仅当形参名和字段名一样,字段值才变。(本题一个叫value,一个叫x/y,不一样,所以不变)21、JAVA的类加载期负责整个生命周期内的class的初始化和加载工作,就虚拟机的规范来说,以下代码会输出什么结果?public class Test { public static void main(String[] args) { System.out.println(Test2.a); }
8}class Test2{ public static final String a="JD"; static { System.out.print("OK"); }}只有JD只有OK输出JDOK输出OKJD解析:22、继承是JAVA语言的一个特性,针对类的继承,虚拟机会如何进行父类和子类的初始化加载呢?请阅读代码选择出该段代码的输入结果。public class Test { public static void main(String[] args) { System.out.print(B.c); }}
9class A { public static String c = "C"; static { System.out.print("A"); }}class B extends A{ static { System.out.print("B"); }}ACABCCBC解析:类加载的初始化阶段会执行静态块的代码,通过子类去调用父类的静态变量子类不会被初始化。23、根据类加载器加载类的初始化原理,推断以下代码的输入结果为?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");
10 }}class A{ static { System.out.print("A"); }}TestAATestAATestTest解析:用ClassLoader加载类,是不会导致类的初始化(也就是说不会执行方法).Class.forName(...)加载类,不但会将类加载,还会执行会执行类的初始化方法。24、public class Main { public static void main(String[] args) { System.out.print(fun1()); } public static String fun1() { try { System.out.print("A"); return fun2(); } finally { System.out.print("B");
11 } } public static String fun2() { System.out.print("C"); return "D"; }}执行以上程序后,输出结果正确的是?ABCDACDBACBD不确定解析:try中执行完return的语句后,不返回,执行finally块,finally块执行结束后,返回到try块中,返回try块中最后return的值25、import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { List list = new ArrayList<>(); for(int i=0;i<100;i++){ list.add("a"); } }}JDK1.8中,执行以上程序后,该list进行了几次扩容?
124567解析:初始10,每次扩容为原先的1.5倍26、import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class Main { public static void main(String[] args) { ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 15, TimeUnit.SECONDS, new ArrayBlockingQueue(5), new ThreadPoolExecutor.CallerRunsPolicy()); }}线程池executor在空闲状态下的线程个数是?0510不确定解析:前三个参数:核心线程有5个,最大线程数是10个,keepAliveTime是15s,如果线程池中的线程大于5,那么超15s的空闲线程就会被结束,也就是说,一定会保持5个线程不会被结束。当所有任务完成后,会保持5个空闲的线程27、public class Main{ public static ArrayList list = new ArrayList<>();
13 public static void main(String[] args) throws Exception{ Thread t1 = new Main().new MyThread(); Thread E10:E64t2 = new Thread(new Main().new MyRunnable()); t1.setPriority(3); t2.setPriority(8); t1.start(); t2.start(); t2.join(); for (int i = 0; i < 100000; i++) { i++; } list.add("main"); t1.join(); for (String s : list) { System.out.println(s); } } class MyThread extends Thread{ @Override public void run(){ for (int i = 0; i < 100000; i++) { i++; }
14 list.add("Thread 1"); } } class MyRunnable implements Runnable{ @Override public void run(){ for (int i = 0; i < 100000; i++) { Thread.yield(); i++; } list.add("Thread 2"); } }}Thread1Thread2mainThread2Thread1mainThread2mainThread1无法判断解析:Java线程中的Thread.yield()方法,译为线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程。 yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行! 举个例子:一帮朋友在排队上公交车,轮到Yield的时候,他突然说:我不想先上去了,咱们大家来竞赛上公交车。然后所有人就一块冲向公交车,
15有可能是其他人先上车了,也有可能是Yield先上车了。 但是线程是有优先级的,优先级越高的人,就一定能第一个上车吗?这是不一定的,优先级高的人仅仅只是第一个上车的概率大了一点而已,最终第一个上车的,也有可能是优先级最低的人。并且所谓的优先级执行,是在大量执行次数中才能体现出来的。28、系统管理员编写扫描临时文件的shell程序tmpsc.sh, 测试该程序时提示拒绝执行,解决的方法有( )chmod644tmpsc.shchmod755tmpsc.shchmoda+xtmpsc.shchmodu+xtmpsc.sh29、在bash编程中,算术比较大于、大于等于的运算符是( )>>=gegt解析:EQ就是EQUAL等于、NE就是NOTEQUAL不等于、GT就是GREATERTHAN大于、LT就是LESSTHAN小于、GE就是GREATERTHANOREQUAL大于等于、LE就是LESSTHANOREQUAL小于等于30、如何获取上一条命令执行的返回码$!0$?$#解析:$0:Shell本身的文件名。$!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)。$?:最后运行的命令的结束代码(返回值)即执行上一个指令的返回值(显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)。$#:添加到Shell的参数个数。31、Shell 脚本(shell script),是一种为 shell 编写的脚本程序。现有一个test.sh文件,且有可执行权限,文件中内容为:#!/bin/bash
16aa='Hello World !'请问下面选项中哪个能正常显示Hello World !shtest.sh>/dev/null1&&echo$aa./test.sh>/dev/null1&&echo$aabashtest.sh>/dev/null1&&echo$aa../test.sh>/dev/null1&&echo$aa解析:点斜杠,点空格斜杠,两者都可以执行脚本,但是:第一种方式是在子进程中运行脚本,第二种方式是在当前进程中执行脚本。非当前进程是看不到aa变量的————————————————