暂时未有相关云产品技术能力~
暂无个人介绍
.通过反射创建对象 我们分三种情况进行讨论:🎈
1.场景 我们在进行网络开发时,有时候需要测试多个客户端对服务端的链接状态,这时就需要在一个项目中运行多个实例,IDEA是默认不运行运行多个实例的,下面给出方法🙌
1.处理流(包装流) 节点流是底层流/低级流,直接和数据源相连 而处理流(包装流)包装节点流,即可以消除不用节点流的实现差异,也可以提供更方便的方法来完成输入输出操作 可以认为,包装流是节点流的升级版本!💫 包装流的两个优点: 性能的提高:增加缓冲的方式来提高输入输出的效率 操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便
1.java IO包 Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。 Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。 文件依靠流进行传输,就像快递依托于快递员进行分发🍳 Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。
如果flag为T,线程A就会先持有o1对象锁 接下来继续执行,出现了o2锁,线程A会尝试获取o2对象锁,但是如线程A得不到o2锁,就会进入blocked的状态 如果flag为F,线程B就会线持有o2对象锁 接下来继续执行,出现了o1锁,线程B会尝试获取o1对象锁,但是如果此时线程A在阻塞状态(也就是占用了o1锁)。那么线程B也会进入blocked状态 双方都拿到了对方都想要的锁,互相不放行,最终造成线程死锁🔒 最终两个线程并发执行的时候,会发生死锁,输出以下并且卡住❌:
1.基于继承Thread实现 代码实现:
1.什么是多线程? Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。 多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。
绘图原理: Component类提供了两个和绘图相关最重要的方法: paint(Graphics g)控制组件的外观 repaint()刷新组件的外观 那么通过上面的代码可以发现,我们并没有显示的调用paint方法,然而它似乎自己调用了,这是为什么呢?✨ 在以下情况下paint将会被调用:😁 组件第一次在屏幕显示的时候 窗口最大化和最小化 窗口大小发生变化 repaint方法被调用
1.什么是java泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现? 答案是可以使用 Java 泛型。 使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。
我们想要测试一下show和hi方法是否符合我们的预期,一个传统的方式是在主函数中调用这两个函数,但实际上我们可以通过java Junit单元测试工具来单独对show和hi函数进行单元测试
1.Collections工具类 Collections是java中一个很强大的工具类,可以很方便的操作java list,map,set
1.TreeSet概述 TreeSet实现了Set接口,与HashSet不同的时,他是有序集合,底层是一个TreeMap 默认按照升序排列,代码示例:
1.基本介绍 HashTable的键和值都不能为空,否则会抛出一个异常 使用方法基本与HashMap一致 HashTable是线程安全的,HashMap是线程不安全的
k,v是一个Node实现了Map.Entry<K,V> jdk8以上底层为数组+链表+红黑树
1.Map接口介绍 Map用于保存具有映射关系的数据:Key - Value 对于Set,底层其实依然是一个Map,但是Set选择不使用Value,也就是Set的Value值始终是一个常量😁 Map中的Key和Value可以是任何类型的数据,会封装到HashMap$Node对象中 Map中的Key不能重复,但是Value可以重复,当有相同的Key时,等价与替换操作😀
1.实体 任何发送或者接受信息的硬件或软件进程 2.对等实体 收发双方相同层次中的实体 例如:通信双方的网卡
1.速率 连接在计算机网络上的主机在数字信道上传送比特的速率 也称比特率或数据率 常用的速率单位:
1.电路交换 电话交换机接通电话线的方式称为电路交换 电路交换的三个步骤: 建立连接(分配通信资源) 通话(一直占用通信资源) 释放连接(归还通信资源) 电路交换致命的缺点:效率低!👨🏻
参数 expression1, expression2, ... expression_n: 要检索的列。 tables: 要检索的数据表。 WHERE conditions: 可选, 检索条件。 DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT修饰符对结果没啥影响。 ALL: 可选,返回所有结果集,包含重复数据。 案例:查询工作岗位为MANAGER或者SALESMAN的员工信息(使用union)
sql99的优点是:表的连接是独立的,不占用where的位置。使sql语句整体更加清晰😀 内连接 - 非等值连接 案例:找出每个员工的薪资等级,要求显示员工名,薪资,薪资等级
count(具体字段) 表示该字段下不为null的行数 count(*) 表示整个范围的行数,因为数据库表中并不存在记录全为null的情况!😁 2.分组查询 GROUP BY 语句根据一个或多个列对结果集进行分组。 在分组的列上我们可以使用 COUNT, SUM, AVG等函数。
更复杂的情况,为多字段排序:🤡 比如我们想按照薪资升序排列,薪资一样的情况下,按照名字降序排序:
1.示例表内容 dept表:
安装地址 Mysql安装 安装此项
1.什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
1.LinkedHashSet介绍 LinkedHashSet是HashSet的子类,底层是一个LinkedHashMap,维护了一个数组 + 双向链表 和HashSet不同的是,双向链表可以维护元素的次序,这使得元素看起来是以插入顺序保存的 同样的,LinkedHashSet也不允许添加重复元素
1.Set接口方法 Set接口对象存放的数据是没有重复,且数据是无序存放的(添加顺序和存放顺序不一致,但是这个存放的顺序是固定的,不会随机变化)🤳 代码示例:
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
git统计项目代码行数 显示项目的所有文件列表及行数
1.Date 构建Date对象 java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。 Date主要使用无参构造和long类型创建:
1.Java大数值处理方案 如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算 使用静态的valueOf方法可以将普通的数值转换为大数值:
1.String类 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 String对象实现了Serializable接口,说明String对象可以串行化(在网络中进行传输),同时实现了Comparable接口,说明String对象可以进行比较🎁
java会事先创建好一个cache数组,用来缓存-128 - 127的数据,以提升访问效率👍 所以我们不难得出一个结论,当传入的数据范围在-128 to 127,则通过cache进行返回,否则将会new一个新的对象,故第二个输出为False 第三个输出:(x == y),通过以上,不难看出,输出为True
1.java异常引入 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException 的异常。 异常发生的原因有很多,通常包含以下几大类:
1.注解 注解:Annotation 定义: 不是程序本身,不是必要的,可以对程序做出解释,可以被其他程序读取 格式:以 @ 开头,后面跟注解名,还有可以加参数值
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。 Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。
外部类和成员内部类的成员重名时,遵循就近原则,如果想要访问外部类的成员,使用外部类名.成员即可🌕
1.概述 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
1.概述 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。 一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。 抽象类可以包含抽象方法和非抽象方法。 抽象类一般会被继承,由其子类实现具体的抽象方法👴🏻
2.final 使用小贴士 赋初值的时机 对于final声明的属性可以在如下的位置进行赋值操作: 定义时初始化一个值 在构造器中 在代码块中 如果final修饰的属性是静态的,则初始化的位置只能是:(不能在构造器中赋值!) 定义时 静态代码块 final类的坑🕳 如果一个类已经是final类,就无需再将方法设置为final final和static搭配使用效率更高,因为底层的编译器做了优化,不会导致类加载 final修饰的变量是基本类型:那么变量存储的数据值不能发生改变 final修饰的变量是引用类型,其地址值不能改变,但指向对象的内容可以改变
1.设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美地解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因
1.类变量与类方法简介 static 修饰符,用来修饰类方法和类变量 静态变量: static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量 静态变量使用得比较少,但静态常量却使用得比较多😊 静态方法: static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据 对类变量和方法的访问可以直接使用 classname.variablename 和 classname.methodname 的方式访问🎂
1.equals方法 ==运算符 比较运算符,即可以判断基本类型又可以判断引用类型 如果判断基本类型,则判断值是否相等 如果判断引用类型,则判断地址是否相等,即判断是否为同一个对象 equals 是object类的一个方法,只能判断引用类型 object - equals源码:
1.动态绑定机制 java的动态绑定机制非常重要🎈 实例A 我们来看一个实例:
1.概述 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
1.重写的概念 重写是子类对父类(或爷爷及以上类)的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 2.实现一个简单的Demo 父类:
1.super介绍 我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。 用于访问父类的属性,方法,构造器 2.super的基本使用 我们来演示以下子类调用父类的属性,方法和构造器 父类:
1.继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
1.封装的概念 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
1.包的概念 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。 包的作用 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。 Java使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等✨