java笔试

1、算法

小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。

魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币

魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币

小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币。

输入描述: 输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。

输出描述: 输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符’1’和’2’。

输入例子1: 10

输出例子2: 122
答案:

解题思路:
  (1)这道首先不要考虑的太复杂了,分析题干,有个2X+1和2X+2这两个方程式,这是高中经常用到的计算奇偶数的办法,所以这道题从奇偶数入手思考,
  (2)这道题如果从正向思路考虑的话,可能解不出来,逆向倒推回来可以解决,因为最后一个数n是奇数或偶数,所以用递归就可以解决,总结条件为n=0时。
解题代码:
public class Test {

	public static void main(String[] args) {
		// 此处为整数倒序排列
//		int i = 12345;
//		int backspin = 0;
//		        
//		while(i > 0){
//		    int tmp = i % 10;
//		    backspin = backspin * 10 + tmp;
//		    i = i / 10;
//		}
//		i = 12345;    
//		System.out.println(backspin);
//		String str = String.valueOf(i);
//		char[] chars = str.toCharArray();
//		String b = "";
//		for(int a=chars.length;a>0;a--) {
//			b += chars[a-1];
//		}
//		System.out.println(Integer.parseInt(b));
		
		//本题解答
		Scanner  sc = new Scanner(System.in);
	     long  n = sc.nextLong();
	     fun(n);
	}
	
	public  static void fun(long n) {
	   String string ;
	   if(n == 0) {
		   return ;
	   }
	   if(n%2 == 1) {      //如果是基数时
		   fun((n-1)/2);
		   System.out.println("1");
	   }else {
		   fun((n-2)/2);
		   System.out.println("2");
	   }
   }

}

2、说说 synchronized 关键字和 volatile 关键字的区别
答:
一、volatile是变量修饰符,而synchronized则作用于一段代码或方法。
二、volatile只是在线程内存和“主”内存间同步某个变量的值;而synchronized通过锁定和解锁某个监

3、springboot自动配置的原理是什么
1.spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;
@Configuration //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
@SpringBootApplication是一个复合注解或派生注解
@EnableAutoConfiguration开启自动配置

4、介绍rabbit MQ应答模式
应答模式:RabbitMQ支持生产者生产消息后发送到服务器,服务器把消息传递到消费者,消费者消费后告诉服务器,服务器删除列队。
channel.basicConsume(QUEUE_NAME, false, consumer); //设置应答模式为手动
channel.basicAck(envelope.getDeliveryTag(), false); //告诉服务端消费完毕
PS: 消息应答是默认打开的。我们明确地把它们关掉了(autoAck=true)。现在将应答打开,一旦我们完成任务,消费者会自动发送消息应答。
消费者如果中途中断,服务器会重新把消息给其他的消费者。
RabbitMQ 支持持久化列队,即rabbitmq服务器停电或者是宕机,重启后列队仍然会存在。
boolean durable = true;
channel.queueDeclare(“my_rabbitmq”, durable, false, false, null);

5、MYsql 的索引原理,索引的类型有哪些,如何创建合理的索引,索引如何优化。

原理:索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数;
类型:
主键索引:
主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。
唯一索引:
索引列的所有值都只能出现一次,即必须唯一,值可以为空。
普通索引 :
基本的索引类型,值可以为空,没有唯一性的限制。
全文索引:
全文索引的索引类型为FULLTEXT。全文索引可以在varchar、char、text类型的列上创建。可以通过ALTER TABLE或CREATE INDEX命令创建。
对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。
MyISAM支持全文索引,InnoDB在mysql5.6之后支持了全文索引。 全文索引不支持中文需要借sphinx(coreseek)或迅搜<、code>技术处理中文。

合理的索引:
经常用作查询条件的字段
经常用作表连接的字段
经常出现在 order by,group by 之后的字段

优化:
非空字段 NOT NULL,Mysql 很难对空值作查询优化
区分度高,离散度大,作为索引的字段值尽量不要有大量相同值
索引的长度不要太长(比较耗费时间)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值