09 2022 档案
摘要:反射-理解Class类并获取Class实例 一、class 类介绍 在 Object 类中定义了以下的方法,此方法将被所有子类继承 public final native Class<?> getClass(); getClass 方法返回值的类型是一个 Class类,此类是Java反射的源头,实际
阅读全文
摘要:反射机制 一、静态 & 动态语言 动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码在运行时可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。 主要动态语言:Object-C、C#、 JavaScript、PHP、 P
阅读全文
摘要:注解 一、注解入门 Annotation 是 jdk1.5 开始引入的新技术。 Annotation的作用: 不是程序本身,可以对程序作出解释; 可以被其他程序(例如编译器)读取。 Annotation的格式 “@注解名”,也可以带参数,例如: @SuppressWarnings(value=“un
阅读全文
摘要:线程池 背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。 好处: 提高响应速度(减少了创建新线程的时间); 降低资源消耗(重复利用线
阅读全文
摘要:线程通信问题 应用场景 : 生产者和消费者问题 假设仓库中只能存放一件产品 , 生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。 对于生产者:如果仓库中没有产品 , 则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止。 对于消费者:如果仓库中放有产品 , 则消费
阅读全文
摘要:线程死锁 多个线程抱着对方需要的资源形成僵持状态 多个线程各自占有一些共享资源,并且互相等待被其他线程占有的资源,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。 某一个同步块同时拥有“两个以上对象的锁"时,就可能会发生“死锁”的问题。 package com.gcbeen.threa
阅读全文
摘要:线程 Lock 锁 JUC安全集合类型扩充 package com.gcbeen.thread; import java.util.concurrent.CopyOnWriteArrayList; // 测试JUC安全类型的集合 public class TestThreadJuc { public
阅读全文
摘要:线程 synchroized synchroized 同步方法 由于我们可以通过 private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提岀一套机制,这套机制就是 synchronized 关键字。它包括两种用法 synchronized方法和 synchronized 块。 同步
阅读全文
摘要:线程同步 介绍 多个线程操作同一个资源 线程同步 现实生活中我们会遇到“同—个资源,多个人都想使用”的问题,比如食堂排队打饭,每个人都想吃饭,最天然的解決办法就是:排队,一个个来。 处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象这时候我们就需要线程同步。线程同步其实就是一种等
阅读全文
摘要:线程状态 一、线程的五大状态 二、线程方法 停止线程 不推荐使用 JDK 提供的 stop、destroy 方法。这两个方法已经废弃。 推荐线程自己停止下来。建议使用一个标识位 flag 进行终止线程。当 flag = false时,程序运行结束,线程自动结束,就终止线程运行。 package co
阅读全文
摘要:线程与静态代理模式以及创建接口对象的简写方法 静态代理模式 静态代理是多线程底部的原理,在 Java 中线程的设计就使用了静态代理设计模式,其中自定义线程类及Thread类都是实现了Runable接口。 在创建子线程的时候,传入了自定义线程类的引用,再通过调用start()方法,调用自定义线程对
阅读全文
摘要:线程实现 线程的创建(三种方式) 1.继承 Thread 类(重要) 自定义线程类继承Thread类; 重写run()方法,编写线程执行体; 创建线程对象,调用start()方法启动线程。 package com.gcbeen.thread; // 创建线程方式一:继承Thread类,重写run()
阅读全文
摘要:线程简介 一、多任务 现实中太多这样同时做多件事情的例子了,看起来是多个任务都在做,其实本质上我们的大脑在同一时间依旧只做了一件事情。 二、多线程 原来是一条车道,车多了后,道路阻塞,效率极低。为了提高使用的效率,于是加了多个车道。 普通方法调用和多线程 三、程序.进程.线程 一个进程可以有多个线程
阅读全文
摘要:网络编程-Java输入输出流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图: 通过数据流、序列化和文件系统提供
阅读全文
摘要:网络编程-TCP 建立连接 与 终止连接 建立 TCP 连接 TCP是因特网中的传输层协议,使用三次握手协议建立连接。当客户端发出SYN连接请求后,等待服务器端回答SYN+ACK,并最终对服务器端的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变
阅读全文
摘要:网络编程-IP地址的分类 网络中有多台计算机,它们必须通过某种标识来区分每一台机器,这个用于区分的标识这就是IP地址; IP地址由4个数字组成,形如“192.168.1.1”。(其实是4个字节的二进制数,共32位)。 在网络中寻找某一台计算机都是依靠它的IP地址。(用域名或计算机名定位主机其实也是通
阅读全文
摘要:网络编程-TCP UDP URL TCP 先启动服务端,再启动客户端!!!! 1.TCP 基本实现 客户端 连接服务器 Socket 发送消息 package com.gcbeen.net; import java.io.IOException; import java.io.OutputStrea
阅读全文
摘要:JavaSE 基础语法 1. 数据类型 2. 类型转换 3. 变量的作用域 4. 运算符 5. 包机制 6. JavaDoc 流程控制 7. Scanner类 8. 条件分支结构 9. 循环结构 方法 10. 定义方法、调用方法 11. 方法的重载 12. 可变长参数 13. 递归方法 数组 14.
阅读全文
摘要:单元测试规约 单元测试 单元测试遵守 AIR 原则 【强制】好的单元测试必须遵守 AIR 原则。 说明:单元测试在线上运行时,感觉像空气(AIR)一样感觉不到,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。 A:Automatic(自动化) I:
阅读全文
摘要:安全规约 用户数据 用户个人的页面 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容。 用户敏感数据 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。 说明:中国大陆个人手机号码显示:139*
阅读全文
摘要:异常日志-日志规约 使用日志框架 SLF4J 【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架(SLF4J、JCL--Jakarta Commons Logging)中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 说明:
阅读全文
摘要:异常日志-异常处理 异常定义 定义时区分 unchecked / checked 异常 【推荐】定义时区分 unchecked / checked 异常,避免直接抛出 new RuntimeException(),更不允许抛出 Exception 或者 Throwable,应使用有业务含义的自定义异
阅读全文
摘要:异常日志-错误码 错误码的制定 错误码的制定原则 【强制】错误码的制定原则:快速溯源、沟通标准化。 说明: 错误码想得过于完美和复杂,就像康熙字典中的生僻字一样,用词似乎精准,但是字典不容易随身携带并且简单易懂。 正例:错误码回答的问题是谁的错?错在哪? 1)错误码必须能够快速知晓错误来源,可快速判
阅读全文
摘要:编程规约-其他 工具类 避免用 Apache Beanutils 【强制】避免用 Apache Beanutils 进行属性的 copy。 说明:Apache BeanUtils 性能较差,可以使用其他方案比如 Spring BeanUtils, Cglib BeanCopier,注意均是浅拷贝。
阅读全文
摘要:编程规约-前后端 前后端交互的 API 【强制】前后端交互的 API,需要明确协议、域名、路径、请求方法、请求内容、状态码、响应体。 说明: A. 协议:生产环境必须使用 HTTPS。 B. 路径:每一个 API 需对应一个路径,表示 API 具体的请求地址: 代表一种资源,只能为名词,推荐使用复数
阅读全文
摘要:MySQL 数据库-ORM 映射规约 字段 POJO 类的布尔属性不能加 is,而数据库字段必须加 is_ 【强制】POJO 类的布尔属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中进行字段与属性之间的映射。 说明:参见定义 POJO 类以及数据库字段定义规定,在 sql
阅读全文
摘要:MySQL 数据库-SQL 语句规约 统计 标准统计行数的语法count(*) 【强制】不要使用 count(列名)或 count(常量)来替代 count(*),count(*)是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。 说明:count(*)会统
阅读全文
摘要:MySQL 数据库-索引规约 字段场景 业务上具有唯一特性的字段 【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。 说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨
阅读全文
摘要:MySQL 数据库-建表规约 一、命名规约 小写字母或数字或下划线 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 说明:MySQL 在 Windows 下不区分大小写,但在 Linux
阅读全文
摘要:编程规约-并发处理-锁 锁 考量锁的性能损耗 高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁;能锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁。 说明:尽可能使加锁的代码块工作量尽可能的小,避免在锁代码块中调用 RPC 方法。 保持一致的加锁顺序 对多个资源、数据库表、
阅读全文
摘要:编程规约-并发处理 线程安全 保证线程安全 获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 说明:资源驱动类、工具类、单例工厂类都需要注意。 SimpleDateFormat 是线程不安全的类 SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定
阅读全文
摘要:编程规约-集合处理 泛型 集合泛型定义 集合泛型定义时,在 JDK7 及以上,使用 diamond 语法或全省略。 说明:菱形泛型,即 diamond,直接使用<>来指代前边已经指定的类型。 正例: // diamond 方式,即<> HashMap<String, String> userCach
阅读全文
摘要:编程规约-处理Map List Set Map Collectors 类的 toMap()方法 相同键相关联的值之间的冲突 在使用 java.util.stream.Collectors 类的 toMap()方法转为 Map 集合时,一定要使用含有参数类型为 BinaryOperator,参数名为
阅读全文
摘要:编程规约-日期时间 日期格式化小写的 y 日期格式化时,传入 pattern 中表示年份统一使用小写的 y。 说明:日期格式化时,yyyy 表示当天所在的年,而大写的 YYYY 代表是 week in which year(JDK7 之后引入的概念),意思是当天所在的周属于的年份,一周从周日开始,周
阅读全文
摘要:编程规约-OOP使用 访问静态变量或静态方法 避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 不能使用过时的类或方法。 说明:java.net.URLDecoder 中的方法 decode(String encodeStr) 这个方法已经过时,应
阅读全文
摘要:编程规约-OOP定义 定义类 类内方法定义的顺序 依次是:公有方法或保护方法 > 私有方法 > getter / setter方法。 公有方法是类的调用者和维护者最关心的方法,首屏展示最好; 保护方法虽然只是子类关心,也可能是“模板设计模式”下的核心方法; 而私有方法外部一般不需要特别关心,是一个黑
阅读全文
摘要:网络编程 一、概述 简单地说,计算机网络就是把一些计算机相互连接起来。实现资源共享和信息传递。 计算机网络的正式定义是这样的: 利用通信线路和通信设备,将地理位置不同的、功能独立的多台计算机互连起来,以功能完善的网络软件来实现资源共享和信息传递,就构成了计算机网络系统。 目的是:资源共享 和 信息传
阅读全文
摘要:异常 一、什么是异常 实际工作中,遇到的情况不可能是非常完美的。比如: 你写的某个模块,用户输入不一定符合你的要求 你的程序要打开某个文件,这个文件可能不存在或者文件格式不对 你要读取数据库的数据,数据可能是空的 我们的程序在跑着,内存或硬盘可能满了 软件程序在运行过程中,非常可能遇到这些异常问题,
阅读全文
摘要:类中的关键字 super 与 this 作区分作用 super 表明 是 父类的 构造器 或者 方法 或者 属性 this 表明 是 本身类的 构造器 或者 方法 或者 属性 public class Pet { protected String name = "pet"; public Pet()
阅读全文
摘要:Java常用类 一、Object类 getClass()方法 public final Class<?> getClass() { } 返回引用中存储的实际对象类型 应用:通常判断两个引用中实际对象类型是否一致 hashCode()方法 public int hashCode() { } 返回该对象
阅读全文
摘要:内部类 内部类就是在一个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了。 成员内部类 静态内部类 局部内部类 匿名内部类 public class Outer { private int id = 10; public void ou
阅读全文
摘要:抽象类和接口 抽象类 抽象方法只有方法的声明没有方法的实现。让子类来实现 有抽象方法的类一定要声明为抽象类 不能使用 new 关键字来创建对象。它是用来让子类继承的 注意:抽象类中可以没有抽象方法 public abstract class Action { public abstract void
阅读全文
摘要:面向对象三大特性 封装:属性私有,get/set 把内部数据操作细节封起来不允许外部干涉。仅暴露少量的方法给外部使用 数据操作细节封起来叫:高内聚 仅暴露少量的方法给外部叫:低耦合 暴露的方法叫:操作接口 package com.gcbeen.oop; public class Student {
阅读全文
摘要:面向对象 一、初识面向对象 举例 Math 类 public final class Math { private Math() { } public static final double E = 2.7182818284590452354; public static final double
阅读全文
摘要:方法的定义与调用 方法的定义 修饰符 返回类型 break:跳出 switch,结束循环和 return的区别。 方法名:注意规范,见名知意 参数列表:(参数类型,参数名) … 异常抛出 package com.gcbeen.oop; import java.io.IOException; /**
阅读全文
摘要:数组的应用 1.Arrays类 数组的工具类 javautil. Arrays 数组本身并没有什么方法可以供我们调用。但API中提供了一个工具类 Arrays 可以对数据对象进行一些基本的操作。 查看JDK帮助文档。 Arrays类中的方法都是 static 修饰的静态方法在使用的时候可以直接使用类
阅读全文
摘要:数组 1.数组概述 数组是相同类型数据的有序集合。 数组描述的是相同类型的若干个数据按照一定的先后次序排列组合而成。 其中每一个数据称作一个数组元素每个数组元素可以通过一个下标来访问它们。 2.数组声明创建 首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法: dataType[]
阅读全文
摘要:方法-参数传递 参数传递:值传递 传递基本数据类型时:把实参的值传递给形参 package com.gcbeen.method; /** * @author gcbeen * */ public class HomeWork01 { private static int x = 10; public
阅读全文
摘要:流程控制-break& continue break break在任何循环语句的主体部分,均可用 break控制循环的流程。 break用于强行退出循环,不执行循环中剩余的语句。( break语句也在 switch语句中使用)。 continue continue语句用在循环语句体中,用于终止某次循
阅读全文
摘要:流程控制-循环结构 while循环 while (布尔表达式) { // 循环内容 } 只要布尔表达式为true,循环就会一直执行下去。 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。 少部分情况需要循环一直执行,比如服务器的请求响应监听等。 循环条件一直为true就
阅读全文
摘要:流程控制-选择结构 if 单选择结构 我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示。 if (布尔表达式) { // 如果布尔表达式为true将执行的语句 } package com.gcbeen.struct; import java.util.S
阅读全文
摘要:流程控制-用户交互 Scanner 实现程序和人的交互的工具类,可以获取用户的输入。 java. util. Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。 基本语法 Scanner s = new Scanner(System.in); 通过 Scanner类的
阅读全文
摘要:编程规约-控制语句 符号 一、大括号 在 if/else/for/while/do 语句中必须使用大括号 说明:即使只有一行代码,也禁止不采用大括号的编码方式:if (condition) statements; 二、空行 当某个方法的代码总行数超过 10 行时,return / throw 等中断
阅读全文
摘要:编程规约-注释 注释要求 写注释 一、对于注释的要求: 第一、能够准确反映设计思想和代码逻辑; 第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。 完全没有注释的大段代码对于阅读者形同天书, 注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路; 注释也是给继任者看的,使其能够快
阅读全文
摘要:编程规约-代码格式 IDE 的设置 IDE 的 text file encoding 设置为 UTF-8; IDE 中文件的换行符使用 Unix 格式,不要 使用 Windows 格式。 换行与符号 一、单行字符数 单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则: 1)第二行相对
阅读全文
摘要:编程规约-常量定义 定义常量 一、在 long 或者 Long 赋值时,数值后使用大写字母 L,不能是小写字母 l,小写容易跟数字混淆,造成误解。 说明:Long a = 2l; 写的是数字的 21,还是 Long 型的 2? 二、不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。 反例:
阅读全文
摘要:编程规约-各层命名风格 一、接口 接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性, 接口类中的方法和属性要加上有效的 Javadoc 注释。 尽量不要在接口里定义变量,如果一定要定义变量,确定与接口方法相关,并且是整个应用的基础常量。 正例:接口方法签名 void
阅读全文
摘要:编程规约-命名风格 命名规则一、正确的英文拼写和合理的缩写和语法规则 正确示例 // 国际通用的名称 可视同英文 ali alibaba taobao cainiao aliyun youku hangzhou 反例一、使用下划线或美元符号开始或者结束 _name name_ $name name$
阅读全文
摘要:JavaDoc javadoc 命令生成API文档 javadoc 命令是用来生成自己API文档的。 参数信息 @ author作者名 @ version版本号 @ since指明需要最早使用的jdk版本 @ paran参数名 @ return返回值情况 @ throws异常抛出情况 package
阅读全文
摘要:包机制 包的本质就是文件夹 为了更好地组织类,Java提供了包机制,用于区别类名的。 包语句的语法格式为: package pkg1[.pkg2[.pkg3……]]; 一般利用公司域名倒置作为包名,com.gcbeen.blog; 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。
阅读全文
摘要:基本运算符 Java语言支持如下运算符: 算术运算符:+,-,*,/,%,++,– 赋值运算符: = 关系运算符:>,≤,>=,<=,==,!=, instanceof 逻辑运算符:&&,‖,! 位运算符:&,|,A,~,>>,<<,>>>(了解!!!) 条件运算符: ?: 扩展赋值运算符:+=,-
阅读全文
摘要:变量与常量 变量:可以变化的量。 Java是一种强类型语言,每个变量都必须声明其类型。 Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。 每个变量都有类型,类型可以是基本类型,也可以是引用类型; 变量名必须是合法的标识符; 变量声明是一条完整的语句,因此每一个声明都必须以分
阅读全文
摘要:数据类型 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 数据类型分为:基本类型,引用类型 基本类型 primitive type 一、数值 整数类型 byte占1字节,范围:-128 - 127 short占2字节,范围: -2^15 - 2^15-1 int占4字节,范
阅读全文
摘要:注释、标识符、关键字 Java中的注释 注释是帮助程序员理解程序的。书写注释是一种好习惯 java 注释有三种: 单行注释:只能注释一行文字 多行注释:可以注释一段文字 文档注释 /** * @author gcbeen */ public class HelloWorld { // 单行注释 /*
阅读全文
摘要:IntelliJ IDEA(2020.2)的下载、安装 一、找到 IntelliJ IDEA 的官网地址:https://www.jetbrains.com/idea/,下载安装包 以 社区版 .exe为例 二、找到下载好的安装包,双击开始安装 三、启动页面,直接点击下一步 四、选择安装的路径,然后
阅读全文
摘要:Java运行机制 高级语言的运行机制 我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。 翻译,其实翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同
阅读全文
摘要:java 入门 Hello World 随便新建一个文件夹,存放代码。 新建一个Java文件:新建一个txt文件,将文件后缀名改为.java。如:Hello.java 注意:系统可能没有文件的后缀名,需手动打开显示文件后缀名。方法: 【win10】通过窗口上的查看,找到文件扩展名,钩上文件扩展名。
阅读全文
摘要:java 简介 与 安装 一、Java简介 java的特性和优势 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 Java的三大版本 JavaSE:标准版(桌面程序,控制台开发……) JavaME:嵌入式开发(手机、小家电……) JavaEE:E企业级开发(Web端、服务
阅读全文
摘要:常见的Dos命令 1.打开CMD的方式 开始菜单 + Windows系统 + 命令提示符。 Win + R 输入 CMD 打开控制台 (推荐使用)。 在任意文件夹下,按住Shift键 + 鼠标右键 + 打开命令行窗口。 在资源管理器的地址栏前加上 CMD + 空格 + 本身的路径。 2.管理员身份运
阅读全文