Java Notes and Tips(new)

2020/10/23 Java Ant

Java知识点和总结 (update@20210717)

Java环境搭建

可以使用的idea插件

插件无法通过idea直接安装时, 可去plugins.jetbrains.com下载到本地后再手动安装。

lombok

引入maven包(引入失败问题)

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.16.18</version>
  <scope>provided</scope>
</dependency>

哈哈之前一直导入失败, 还以为是自己手动装的lombok插件没装好, 按照Java效率工具之Lombok给的dependency(和我原来相比多了版本号, maven dependency without version

alibaba guidelines(alibaba 代码检查)

free mybaits plugin

其他工具

mybatis逆向生成工具:Spring-generator

IDEA无法启动

一般都是改了jvm内存导致的,直接删除用户目录下.IdeaIC2019.3\config的vmoptions文件即可

IDEA代码自动提示与补全功能消失

网上很多资料说的是开启了省电模式,但是我的状况是pom.xml文件未被引入maven管理,可以看到文件的图标颜色已经发生了变化

浮点数到整数的转换

浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:

    (int)23.7 == 23;        (int)-45.89f == -45

这一点和C的是不同的

Java的标识符规则

Java的标识符和C的一样都是美元符($)开始的, 这个C和JAVA我都没记得可以这样用

Java中的null

  • java 中string 和null相加,

       String nstr;  String str1 = "hello" + nstr; String str2 = "world" + null;
    

    结果会变成 hellonull, worldnull

  • java中判断某个某个String对象是否是null或者为空字符串, 需要先判断是否为null, 顺序不能调换

      if(str != null && !str.equals("")){}
    

重载overload vs. 重写override

  • 重载overload(实现不同参数列表的同名方法)
  • 重写override(重新实现同名方法的内容, 参数列表,返回值都相同, 仅方法内容即方法体不同)

Java类的加载顺序

​ java类的加载顺序: 父类static代码块,方法 –> 子类static代码块,方法 –> 父类构造方法- -> 子类构造方法

​ 所以java中静态代码块, 方法(static context)不能使用非静态方法(non static method or Object)

Spring Bean名称重复ConflictingBeanDefinitionException解决

最近多次遇到过这个问题, 虽然原因已经知晓,但是原理还不是很清楚, 有空再来深入理解下,Spring Bean名称重复ConflictingBeanDefinitionException解决

记一次困扰自己3天的序列化偶发问题

入手公司的新架构, 写了个服务,部署到开发测试环境之后, 总是发现客户端调用服务时有遇到序列话问题, com.esotericsoftware.kryo.KryoException: Encountered unregistered class, Serialization trace:百度后有看到说是对象太大,于是精简后也还是遇到了相同的状况, 后来请教了同事后发现是自己服务有做过迁移, 老的服务再自己新服务VO对象有改动的情况下没有重新部署过,导致服务在请求到2个新服务的提供者之外的另一服务时就会遇到问题(这里自己要检讨为什么自己不去关注自己的请求在两台机器的log里都没找到), 同事当时用了命令查看到服务此时有3个提供者而不是两个,用的命令可以参考zookeeper客户端命令行查看dubbo服务的生产者和消费者

System.exit(0)问题

在参考别人的代码时, 也随手学别人写了个System.exit(0), 但是实际上这个会停掉整个进程在使用的虚拟机, 后果很严重😂

Ant部署

ant还是单独使用命令来跑,可以看到更多的报错信息,idea继承的ant错误信息几乎没有,报错都是最低成,根本没法看。

ThreadLocal

ThreadLocal vs. Synchronized

ThreadLocal和Synchronized都是为了解决多线程中相同变量的访问冲突问题,不同的点[ingxin简书ThreadLocal

  • Synchronized是通过线程等待,牺牲时间来解决访问冲突
  • ThreadLocal是通过每个线程单独一份存储空间,牺牲空间来解决冲突,并且相比于Synchronized,ThreadLocal具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问到想要的值。

记threadlocal引发的一个问题

​ 使用threadlocal时一般都是使用全局静态变量,在赋值和使用时一定要小心。(自己写过一个线上bug,双活机器每台第一次请求数据时会先分别设置不同的DB路径,去捞取必须数据,再进行后续查询,结果DB路径就错误的变成了最后一次的DB路径)

Java传值还是引用

先占个坑,以后再仔细去研究实现机制以及和C++的区别,现在我的理解是java是一个特殊的引用, 该引用可以重新指向别的地址(一旦指向别的地址,就跟原有指向的内容无关), 可以使用一下的代码进行测试

class TestClass {
    public String a;
    public String b;

}

 static void testFunc(TestClass t) {
        t.a = "hello";
        t.b = "world";
        System.out.println(t.hashCode());
        TestClass s = new TestClass();
        System.out.println(s.hashCode());
        s.a = "test";
        s.b = "java";
        t = s;
        System.out.println(t.hashCode());
    }

public static void main(String[] args) throws Exception {
    TestClass t = new TestClass();
    System.out.println(t.hashCode());
    testFunc(t);
    System.out.println(t.a + "," + t.b);
    System.out.println(t.hashCode());
}

Readlist

Search

    Categories Cloud

    Life Linux C/CPP Database Web Benchmarks Software Data Python TCP/IP Financial Stock Bug Golang Rust General Infrastructure TODO Movie Multitenancy Java Ant Algorithm Fastjson Death Build Deploy Education India Aamir Khan Society Female Learning Method OJ Interviewee Interviewer AVL Tree MyBatis Code Reading Design Diary Dating Heap Data Structure Summary Reading Love Claire Mcfall Ferryman Zodiac Astrology Chinese Calculator flink Dubbo docker redis

    Table of Contents