Java项目笔记(四)

1、包装类判断是否相等时,建议用equals 而不是 == 号

2、+= 默认包含了强制类型转换,单纯的s = s+1;编译是无法通过的,因为1属于int类型,必须显示声明强制类型转换

	short s = 1;
    s += 1;
    System.out.println(s);
    s = (short) (s + 1);

3、Service层如果访问修饰符为default,Controller层是访问不到的

4、final finally finalize区别

final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的。

finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。

finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾,一个对象是否可回收的最后判断

5、String和StringBuffer、StringBuilder的区别是什么?

每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。

StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

如果要操作少量的数据用 = String

单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

6、Integer a= 127 与 Integer b = 127相等吗
对于对象引用类型:==比较的是对象的内存地址。
对于基本数据类型:==比较的是值。

如果整型字面量的值在-128到127之间,那么自动装箱时不会new新的Integer对象,而是直接引用常量池中的Integer对象,超过范围 a==b的结果是false,超过这个值就new,其他包装类声明时直接new了一个新对象

7、怎么确保一个集合不能被修改?
使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。

8、多线程场景下如何使用 ArrayList?
ArrayList 不是线程安全的,如果遇到多线程场景,可以通过 Collections 的 synchronizedList 方法将其转换成线程安全的容器后再使用

9、stream流求集合中某一个字段的和

Integer count = mapList.stream().collect(Collectors.summingInt(m -> Integer.valueOf(m.get("approvalStatus").toString())));

10、 BigDecimal 一定要使用String 类型的构造器,否则也会出现精度丢失的现象。
11、org.apache.commons.lang包下有一个RandomStringUtils类,其中有一个randomAlphanumeric(int length)函数,可以随机生成一个长度为length的字符串。

String filename= RandomStringUtils.randomAlphanumeric(4);

12、后台启动jar包,并打印JVM信息

nohup java -server -XX:+PrintGCDetails  -jar sales.jar > console.log &

13、读取yml文件中的 属性值失败
报错信息如下:
Could not resolve placeholder ‘profile.name’ in value “${profile.name}”
解决办法,在pom.xml中添加依赖,添加完依赖,一定要执行 build 下的 rebuild project 重新编译

       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-configuration-processor</artifactId>
           <optional>true</optional>
       </dependency>

14、在Spring Boot中,如果我们要获取当前Request实例,可以通过以下这个方法获取。

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

15、关于MySQL表大小写的问题:在用户登录时发现 定义在数据库里的admin 用户,用ADMIN也能登录,肯定是不正确的。
网上搜索到一篇相关的文章:MySQL大小写的问题

-- 修改表结构的Collation属性
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
posted @ 2022-01-20 23:22  暮雨寒冬  阅读(86)  评论(0编辑  收藏  举报