个人测试四

选择题(不定项)

1.进行数据库提交操作时使用事务(Transaction)是为了?(B)

A.提高效率
B.保证数据一致性
C.网络安全
D.归档数据文件

解析:事务是一组数据库操作集合,要么同时成功要么同时失败,具有原子性,一致性,隔离性,持久性ACID。事务的特点是保证数据的一致性和完整性 所以选b

2.关于编译原理,以下文法中,是自顶向下分析的文法是哪几个?(E)

A.LR(0)
B.SLR(1)
C.LALR(1)
D.LR(1)
E.LL(1)

解析:LL(1)自顶向下的文法分析

3.以下协议属于网络协议中的应用层的是(BC)

A.IP
B.HTTP
C.FTP
D.UDP

解析:
数据链路层协议:PPP ARP MAC IEEE802.3
网络层协议:IP BGMP
传输层协议:TCP UDP
应用层协议:HTTP HTTPS FTP Telnet SMTP

4.以下选项属于进程间通信的是(ABD)

A.管道
B.套接字
C.内存
D.消息队列

解析:进程中的几种通信方式:
1)管道:管道是一种半双工的通信方式,数据只能单向流动。而且只能在具有血缘关系(父子进程之间)的的进程间使用。
2)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问
3)消息队列:消息队列是由消息组成的链表,存放在内核中,并由消息队列标识符标识
4)信号:信号是有一种比较复杂的通信方式,用于通知接收进程某一事件已经发生
5)共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问
6)套接字:即Socket,是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行

5.下面有关JVM内存,说法错误的是(C)

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

B.虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

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

D.原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

解析:JVM 内存模型图

在这里插入图片描述
方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息

在这里插入图片描述

填空题:

1.设哈希表长m=14,哈希函数H(key)=key%11。表中已有4个结点:addr(15)=4,addr(38)=5,addr(61)=6,addr(84)=7,其余地址为空。如果用二次探测再散列处理冲突,关键字为49的结点的地址是 9

解析:
对于处理冲突数据结构书(C语言版)上有一个公式:
Hi = ( H (key) + di ) MOD m
其中i=1,2,3,…k(k<=m-1)、H(key)为哈希函数、m为哈希表表长;di为增量序列。
当di=1,2,3,…m-1,称为线性探测再散列;
当di=(正负)K^2(K=1,2,3,…m/2)称为二次探测再散列(先正后负)
题目中哈希表长为14,所以代入后应该是这样的:
H1=(5+1)%14=6 冲突
H1=(5-1)%14=4 冲突
H2=(5+4)%14=9 无冲突
所以结果为9

2.X=+0111001,Y=+1001101,求[X-Y]的补等于 11101100

解析:
[X] = 00111001 [Y] = 01001101
[X-Y]补 = [X]补 + [-Y]补
[-Y]补 = Y各位取反+1 = 10110011
[X]补 00111001
[-Y]补 + 10110011
得 11101100

3.-125的反码是多少 10000010
解析:
125的二进制为 1111101 其对应的反码(1->0,0->1)为 0000010,所以-125的反码为: 10000010 (负数符号位上为1,即第8位)

4.以数据集{1,6,8,2,9,4}为权值构造一棵赫夫曼树,其带权路径长度为 70

== 解析:构造后的赫夫曼树如下==

30
13 17
6 7 8 9 --------2
3 4 --------3
1 2 ------- 4

所以带权路径长度 length = (6 + 8 + 9) * 2 + 4 * 3 + (1 + 2) * 4

5.有K层的二叉树至多有 2^k-1 个节点

6.程序main( ){ char c=040; printf(“%o\n",c<<1); }的运行结果是 100
解析:
X=040,前缀0代表八进制,转化为二进制为100 000,x<<1,左移一位,即1000 000。%o表示输出无符号八进制,再将其转化为八进制,为100

7.一颗完全二叉树的节点数量为666,那么这棵树上的叶子节点数为 333
解析:
设这个完全二叉树有K层,前K-1层有29-1=511个节点,最后一层有666-511=155个全是叶子节点;倒数第二层有28=256个节点,其中155/2=77个有两个孩子,第78个有一个孩子,剩256-78=178个叶子节点;155+178=333

简答题

1.简述springMVC的运作流程。

1.   客户端通过url发送请求
2.   核心控制器Dispatcher Servlet接收到请求,通过系统或自定义的映射器配置找到对应的handler,并将url映射的控制器controller返回给核心控制器。
3.   通过核心控制器找到系统或默认的适配器
4.   由找到的适配器,调用实现对应接口的处理器,并将结果返回给适配器,结果中包含数据模型和视图对象,再由适配器返回给核心控制器
5.   核心控制器将获取的数据和视图结合的对象传递给视图解析器,获取解析得到的结果,并由视图解析器响应给核心控制器
6.   核心控制器将结果返回给客户端

2.Activiti和Shiro的作用

Shiro:
用户认证 登录 拦截器
资源授权 资源表示系统中所有的可访问的菜单
Activiti:
解决多个任务人共同完成复杂的业务流。 他是一个业务框架

3.微服务的概念有哪些。比较两种服务的区别

微服务概念:
微服务是一种架构方式,最终肯定需要技术架构去实施。
微服务的实现方式很多,但是最火的莫过于Spring Cloud了。为什么?
后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大。
技术强:Spring作为Java领域的前辈,可以说是功力深厚。有强力的技术团队支撑,一般人还真比不了。
群众基础好:可以说大多数程序员的成长都伴随着Spring框架, 现在有几家公司开发不用Spring?SpringCloud与Spring的各个框架无缝整合,对大家来说一切都是熟悉的配方,熟悉的味道。
使用方便:相信大家都体会到了SpringBoot给我们开发带来的便利,而SpringCloud完全支持SpringBoot的开发,用很少的配置就能完成微服务框架的搭建。

Springcloud和Dubbo对比

  1. SpringCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大。
    
  2. dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决。
    
  3. springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级。
    
  4. dubbo的注册中心可以选择zk,redis等多种,springcloud的注册中心只能用eureka或者自研。
    
  5. SpringCloud全家桶:社区支持强大,更新非常快,所以开发效率高。
    
  6. Dubbo确实类似于Spring Cloud的一个子集,Dubbo功能和文档完善,在国内有很多的成熟用户,然而鉴于Dubbo的社区现状(曾经长期停止维护,2017年7月31日团队又宣布重点维护),使用起来还是有一定的门槛。
    

编程题:

1.组成数字1到1234的所有数字的各位的总和是多少。

public class Text {
	
	public static void main(String[] args) {
			int sum = 0; 
			for (int i = 1; i <= 1234; i++) { 
				int temp = i;
				while (temp != 0){ 
					sum += (temp%10); temp /= 10; } 
				} 
			System.out.println(sum);
	}
}

2.有一段楼梯台阶有100级台阶,以小明的脚力第n步能跨n级,请问小明登上这段楼梯需要多少步。

public static void main(String[] args) {
        int num=100;
        int count=0;
        while(count>=0) {
            count++;
            num=num-count;
            if(num<=0) {
                System.out.println(count);
                return;
            }
        }
    }

3.有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n<10000),有多少中组合可以组成n分钱?

public class myText {
	
	 int count = 0;
	    int[] arr;
	 
	    public int calculateWays(int n) {
	        arr = new int[n + 1];
	        return calculateWays1(n);
	    }
	    //记忆化搜索递归
	    private int calculateWays1(int n) {
	        if (n < 0) 
	            throw new IllegalArgumentException("input wrong");
	        if (n == 0) 
	            return 0;
	        if (n == 1)
	            return 1;
	        if (n == 2 || n == 3)
	            return 2;
	        if (n == 4 || n == 5 || n == 6 || n == 7 || n == 8 ||n == 9)
	            return n - 1;
	        if (n == 10)
	            return 11;
	        if (arr[n] != 0)
	            return arr[n];
	        int res = 0;
	        res = Math.max(Math.max(calculateWays1(n - 1) + 1, calculateWays1(n - 2) + 2), Math.max(calculateWays1(n - 5) + 4, calculateWays1(n - 10) + 11));
	        arr[n] = res;
	        return res;
	    }
	    public static void main(String[] args) {
	        Scanner sc = new Scanner(System.in);
	        System.out.println("请输入钱数:");
	        int n = sc.nextInt();
	        myText  s = new myText ();
	        int sum = s.calculateWays(n);
	        System.out.println(sum);
	    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值