周一,这种基础知识我们都应该知道!
public static void main(String[] args) {
//1
byte a = 127;
byte b = 127;
b += a;
System.out.println(b);
//2
byte c = (byte)130;
System.out.println(c);
}
问: 第一个程序有问题吗?没问题的话输出什么? 第二个程序有问题吗?没问题的话输出什么?
答:
正确结果是:-2 和 -126
这个题目要去知道计算机怎么存数据的了。说高大上点“原码、反码和补码”。说简单点,你把它想成一个圆,走到头重新走。byte的范围是-128~127,也就是当byte(127)+byte(1)时会变成byte(-128)这样会不会好理解。要真正理解的话,建议去看原码、反码和补码。
周二,配置文件的锅
application.yml
server:
port: 10001
application.properties
server.port=10002
问: 如果你的程序里既配置了application-dev.yml又配置了application.properties。正如上面,程序起来的端口是多少?
答:
正常的情况是先加载yml,接下来加载properties文件。如果相同的配置存在于两个文件中。最后会使用properties中的配置。最后读取的优先集最高。两个配置文件中的端口号不一样会读取properties中的端口号。
周三,我以为我懂了。。。打脸打的也太快了吧
public static void main(String[] args) {
Integer a1 = 128;
Integer a2 = 128;
Integer a3 = 256;
Integer a4 = a1 + a2;
System.out.println(a1 == a2);
System.out.println(a4 == a3);
System.out.println(a1 + a2 == a3);
}
问: 写出上面程序运行结果
答:
第一个false,超出了Integer的缓存范围(-128—127);第二个false,Integer在堆里创建了两个对象;第三个true,Integer在坐运算时会自动拆箱,所以a1+a2变成int类型的256,Integer在与int类型做比较时也会拆箱,所以a3也是int类型的256,两个基本数据类型用==比较,比较的是值,所以为true。
周四,每日一题,我的异步代码有问题?
主类
@EnableAsync
@SpringBootApplication
public class GzhApplication {
public static void main(String[] args) {
SpringApplication.run(GzhApplication.class, args);
}
}
测试类
@SpringBootTest
class GzhApplicationTests {
@Test
void test() throws Exception {
test1();
test2();
Thread.sleep(3000);
}
@Async
public void test1() throws Exception {
Thread.sleep(1000);
System.out.print("你");
}
@Async
public void test2() {
System.out.print("吃了吗");
}
}
问: 上面程序输出什么?为什么会这么输出?如果不知道@Async,在下面回复1,小编会告诉你。
答:
@Async是异步方法,只要在方法上面加上这个注解。就类似于new Thread
@Async要注意一下三点
- 1.@SpringBootApplication启动类当中没有添加@EnableAsync注解。
- 2.异步方法使用注解@Async的返回值只能为void或者Future。
- 3.@Async注解的实现是基于Spring的AOP,而AOP的实现是基于动态代理模式实现的。不能在同一个类里使用。
周五,如果我没有被Spring包养,那怎我么才能吃它的用它的?
Test1
@Component
public class Test1 {
public void test1() {
System.out.println("test1");
}
}
Test2
@Component
public class Test2 {
@Autowired
private Test1 test1;
public void test2() {
System.out.println("test2");
test1.test1();
}
}
Test3
public class Test {
public void test() {
//TODO
test2.test2();
}
}
问: 你是否遇到过一个类无法被Spring管理,但是你要用到Spring管理的Bean,你该如何操作,请补全代码,调用Test2的test2()方法。
答:
有两种,第一种是一位读者的
ApplicationContext context = SpringApplication.run(GzhApplication.class);
Test2 test2 = context.getBean(Test2.class);
test2.test2();
第二种是创建一个类实现ApplicationContextAware
然后在调用getBean获取实例具体代码: https://gzh-zy.oss-cn-hangzhou.aliyuncs.com/javacode/SpringBeanUtils.java
周六,周六休息一下,看看你能转过来吗?
7加3在什么情况下等于8
问: 7加3在什么情况下等于8?
答:
中秋遇上国庆