zoukankan      html  css  js  c++  java
  • 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方案总结
  • 相关阅读:
    论文摘要
    memset/memcpy/strcpy
    error C2259: 'CException' : cannot instantiate abstract class解决
    IplImage 结构
    图像的深度和通道概念
    Oracle11g安装教程
    LSTM理解
    卷积神经网络CNN
    常见激活函数的介绍和总结
    TFIDF算法介绍
  • 原文地址:https://www.cnblogs.com/keep250/p/12579720.html
Copyright © 2011-2022 走看看