Java基础入门

Java基础入门

规称

  • entity、bo、vo、po、dto、pojo如何理解和区分?

  • 阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义

  • 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类型

Java 语言中 Enum 类型的使用介绍

Static静态方法

静态方法和实例方法的区别主要体现在两个方面:在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,所以它可以由系统在创建对象之前就调用。

大型互联网公司分布式ID方案总结

基于自增思想的分布式ID生成:

  1. 数据库自增ID
  2. 数据库多主模式
  3. 号段模式

换个角度对分布式ID进行思考,只要能让负责生成分布式ID的每台机器在每毫秒内成成不一样的ID就行了。SnowFlake是Twitter开元的分布式ID生成算法,和上面三种生成分布式ID的机制不太一样,它不太依赖数据库。

同时还有以下两种ID解决方案:

  1. 百度(uid-generator)
  2. 美团(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.)

参考资料

  1. 你不知道的Runnable接口,深度解析Runnable接口
  2. java 静态方法和实例方法的区别
  3. Java中static作用及用法详解
  4. 大型互联网公司分布式ID方案总结
原文地址:https://www.cnblogs.com/keep250/p/12579720.html