tantela-2021-07-20

immutable:不可变的
GC:垃圾回收
Java PECS原则:需要明确的告诉编译器此数据的上界和下界,否则编译时报错
initialCapacity:初始容量 = (需要存储的元素个数 / 负载因子) + 1
RSS:消息订阅,上世纪产物
CDN:内容分发网络
EJB:企业JavaBeans
JBoss:一个基于J2EE的开放源代码的应用服务器,一般与Tomcat或Jetty绑定使用
SUT:被测系统(SUT )从单元测试的角度代表了所有的测试都没有嘲笑或存根actors(即一个或多个类)的
DI:依赖注入
Mock测试:在测试过程中,对于某些不容易构造或者不容易获取的比较复杂的对象,用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。
BCED:边界值测试、正确的输入、与设计文档相结合、强制错误信息输入
METADATA:元数据
SSRF:服务端请求伪造
CSRF:跨站请求伪造
ReDoS:正则表达式攻击
Binlog:Mysql binlog是二进制日志文件,用于记录mysql的数据更新或者潜在更新
RT:响应时间 指系统对请求作出响应的时间
Throughput:吞吐量 指系统在单位时间内处理请求的数量
并发用户数:指系统可以同时承载的正常使用系统功能的用户的数量
QRS:每秒查询率
Hbase:一个分布式的、面向列的开源数据库
OB:是一款由阿里巴巴公司自主研发的高性能、分布式的关系型数据库
ACID:原子性(atomicity)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)
MQ:消息队列
在这里插入图片描述
有序性是指遍历的结果是按某种比较规则依次排列的。
稳定性指集合每次遍历的元素次序是一定的

OOM: JVM 没有足够的内存来为对象分配空间并且垃圾回收器也无法回收空间时,系统出现的严重状况

内存泄露 程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

RPC 远程过程调用

【强制】当 switch 括号内的变量类型为 String 并且此变量为外部参数时,必须先进行 null判断

【强制】三目运算符 condition? 表达式 1 : 表达式 2 中,高度注意表达式 1 和 2 在类型对齐时,可能抛出因自动拆箱导致的 NPE 异常。

数据穿透 在缓存层和数据库层都没有命中数据
缓存击穿 如果缓存中的数据在某个时刻批量过期,导致大部分用户的请求都会直接落在数据库上
缓存雪崩 如果在某一时刻缓存集中失效,或者缓存系统出现故障,所有的并发流量就会直接到达数据库。数据存储层的调用量就会暴增而被压垮

卫语句 把复杂的条件表达式拆分成多个条件表达式,实现它的逻辑
策略模式 策略模式把对象本身和运算规则区分开来,抽象策略接口、具体策略类、环境类
状态模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

TODO //需要实现,但目前未实现的功能
FIXME //错误,不能工作

POST:在服务器新建一个资源。
PUT:在服务器更新资源。

URL 统一代理模块

前后端的时间格式统一为"yyyy-MM-dd HH:mm:ss",统一为 GMT

try-with-resources
处理必须关闭的资源时,优先考虑使用try-with-resources。这样得到的代码将更简洁,清晰,产生的异常也更有价值

public class TryWithResource {
    public static void main(String[] args) {
        try (BufferedInputStream bin = new BufferedInputStream(new FileInputStream(new File("test.txt")));
             BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(new File("out.txt")))) {
            int b;
            while ((b = bin.read()) != -1) {
                bout.write(b);
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

}

一方包:本工程中的各模块的相互依赖
二方包:公司内部的依赖库,一般指公司内部的其他项目发布的jar包
三方包:公司之外的开源库

即使被调用方法返回空集合或者空对象,对调用者来说必须考虑到远程调用失败、序列化失败、运行时异常等场景返回 null 的情况

NPE 产生的场景
1) 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。
反例:public int f() { return Integer 对象}, 如果为 null,自动解箱抛 NPE。
2) 数据库的查询结果可能为 null。
3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。
4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。
5) 对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针。
6) 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE

【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架(SLF4J、JCL–Jakarta Commons Logging)中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

注意日志输出的级别,error 级别只记录系统逻辑出错、异常或者重要的错误信息

AIR 原则 具有自动化、独立性、可重复执行的特点

主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。
说明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的简称

小数类型为 decimal,禁止使用 float 和 double。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数并分开存储。

页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

【推荐】SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts最好。
说明:
1) consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。
2) ref 指的是使用普通的索引(normal index)。 3) range 对索引进行范围检索。

【强制】当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为
NULL,因此使用 sum()时需注意 NPE 问题。

SQL 注入,Shell 注入,反序列化注入
Shell注入又被称之为OS命令注入,它指的是利用程序所存在的漏洞,构建含有恶意指令的字符串使目标程序执行攻击者的命令

消息补偿:消息补偿机制核心 : 发现未成功消费的消息, 并且重新发送消息

持续集成:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

BinaryOperator :在Java 8中,BinaryOperator是一个功能接口,它扩展了BiFunction。接受两个相同类型的参数,并返回其参数相同类型的结果。

Optional
防止 NPE 问题
Optional 是 Java 语言的有益补充 —— 它旨在减少代码中的 NullPointerExceptions,虽然还不能完全消除这些异常。
这个简单而强大的类有助于创建简单、可读性更强、比对应程序错误更少的程序。

assert
断言是为了方便调试程序
在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的,如果要开启断言检查,则需要用开关-enableassertions或-ea来开启。

assert关键字语法很简单,有两种用法:

1、assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。

2、assert <boolean表达式> : <错误信息表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。

Collectors 类
Collector是专门用来作为Stream的collect方法的参数的
Collectors是作为生产具体Collector的工具类
整个Collectors工具类就是在为Collector服务,用于创建各种不同的Collector。部分功能与Stream中的方法重合了,为了简化代码,完全不必采用Collectors实现,优先Stream方法

Collection
Collection接口是 (java.util.Collection)是Java集合类的顶级接口之一,整个集合框架就围绕一组标准接口而设计
Collection 接口有 3 种子类型集合: List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、ArrayBlockingQueue等,

Stream
Stream流操作主要包包括三大模块:创建流操作、中间流操作、终结流操作。
其中创建流主要是创建Stream对象。每个Stream对象只能使用一次终结操作。
中间流操作指的是各种中间流操作方法,比如去重、过滤、排序等
终结流操作指的结果操作,终结操作的目的是产生最终结果

Lambda
匿名函数 ->

:: 方法引用
在这里插入图片描述

list.foreach

List<String> list =Lists.newArrayList("a","b","c","d");

//1、正常遍历
list.forEach(item->System.out.println(item));
//2、根据条件遍历
list.forEach(item->{
    if("b".equals(item)){
        System.out.println(item);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值