Java基础入门
规称
-
POJO(Plain Ordinary Java Object):简单普通的java对象,一般用于数据层映射到数据库表的类
-
PO(Persistant Object):持久化对象,可以理解为数据库中的一条数据,同时也可理解为POJO经过持久化的对象
-
BO(Business Object):业务对象,一般用于业务层,当业务比较复杂的时候,多使用此对象封装多个对象进行传递
-
DTO(Data Transfer Object):数据传输对象,一般用于向数据外层提供仅需的数据,例如:一个表有20个字段,但是服务只需要其中5个,就可以封装一个DTO。这样做可以隐藏数据层的定义,同时提高系统性能,较少无用字段传输的性能损耗
-
VO(View Object):页面对象,一般用于向页面传递只需展现的值
集合类
cite:java集合类总结(非线程安全)
Runnable接口
Runnable是一个接口,里面只有一个run()方法,没有start()方法。
Euum类型
Static静态方法
静态方法和实例方法的区别主要体现在两个方面:在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,所以它可以由系统在创建对象之前就调用。
大型互联网公司分布式ID方案总结
基于自增思想的分布式ID生成:
- 数据库自增ID
- 数据库多主模式
- 号段模式
换个角度对分布式ID进行思考,只要能让负责生成分布式ID的每台机器在每毫秒内成成不一样的ID就行了。SnowFlake是Twitter开元的分布式ID生成算法,和上面三种生成分布式ID的机制不太一样,它不太依赖数据库。
同时还有以下两种ID解决方案:
- 百度(uid-generator)
- 美团(Leaf)
上面两种都是自动生成workId,以让系统更加稳定以及减少人工成功。
此外,这里额外再介绍一下使用Redis来生成分布式ID,其实和利用Mysql自增ID类似,可以利用Redis中的incr命令来实现原子性的自增与返回。
Gson和json的区别
(cite:Gson和json的区别)
json是一种数据格式,便于数据传输、存储、交换。gson是一种组件库,可以把java对象数据转换成json数据格式。
package com.wangyan.test;
import com.google.gson.Gson;
public class JsonTest {
public static void main(String[] args) {
Student student =new Student();
student.setName("王梦月");
student.setAge(12);
student.setSex("女");
student.setSalary(1001.6);
Gson gson=new Gson();
//把java对象转成json
String string= gson.toJson(student).toString();
System.out.println(string);
//把json转为java对象
Student student2= gson.fromJson(string, Student.class);
System.out.println(student2.toString());
}
}
如果要使用json的转换工具,可以考虑使用alibaba封装的fastjson,在mvnrepository网站里面找就可以搜到gradle和maven的引用链接。
容器使用
List<CertificationDTO> certificationDTOList = new ArrayList<>(); // 必须要这样新增List,不要写null
时间
随机数
// 生成0~9之间的随机数
int max=9;
int min=0;
Random random = new Random();
int s = random.nextInt(max)%(max-min+1) + min;
Java版本号与JDk版本
注:目前为止只有Java SE 8和Java SE 11是TLS(长期支持(Long Term Support)的。
Lambda 表达式
Stream
文档
JAVA8 API官方文档:Java™ Platform, Standard Edition 8 API Specification,当然,直接用搜索引擎搜索也可以。
对大文件进行IO
对大文件进行IO,关键在于防止大文件把内存吃光,所以对大文件进行IO就可以视为一个“以时间换空间”的问题。对大文件进行IO最原始的方式是将整个文件都读入内存,因此,可以尝试不降整个文件都读入内存,读入多少就处理多少是对大文件进行IO的主要策略。下面使用Scanner实现对大文件的IO:How to Read a Large File Efficiently with Java
Scanner的IO速度多为人所诟病,所以还有一些优化读入速度的解决方案:[Java – Reading a Large File Efficiently](https://www.novixys.com/blog/java-reading-large-file-efficiently/#:~:text=First off%2C you could just,be processed line by line.)