java基础知识
java基础知识
lovesman
这个作者很懒,什么都没留下…
展开
-
JDK动态代理与cglib动态代理
(1)创建代理jdk根据接口生成一个proxy.class,调用具体的方法,采用的是反射;cglib采用ASM框架创建字节码文件,会创建多个字节码文件;创建效率:jdk高于cglib(2)调用代理cglib直接调用代理实现类jdk通过反射调用调用效率:cglib高于jdkJDK和CGLIB动态代理区别...原创 2020-10-13 19:51:08 · 314 阅读 · 0 评论 -
CopyOnWriteArrayList和ReentrantReadWriteLock
CopyOnWriteArrayList适用于读多写少的并发场景,比如白名单,黑名单等场景。在并发编程中,多个线程读取一个数据集合是安全的;但是对于数据的修改操作比如add、remove等是不安全的。CopyOnWriteArrayList底层实现就是读取数据时不加锁,修改数据时通过复制一份拷贝数据,在拷贝数据上进行修改来实现修改数据的安全性,在修改完成后,将指针指向新的数据集合。缺点:1、数据拷贝修改的过程,如果有读取数据的过程,读取到的数据是旧的数据集合;实时性比较查;2、内存占用,拷贝一份原创 2020-07-07 21:03:37 · 527 阅读 · 0 评论 -
Java基础——lambda表达式
使用lambda表达式可以简化我们的代码,但是该表达式的使用有个前提:实现接口方法,并且该接口中只有一个方法。语法形式:(parameters) -> expression(parameters) -> {statements;}基本用法1、定义两个接口类,只有一个方法package com.company;/** * @author * @date 2020/6/23 */public interface MathOperation { int opera原创 2020-06-24 08:20:50 · 474 阅读 · 0 评论 -
乐观锁与悲观锁对比
乐观锁CAS(compare and swap):比较和替换是乐观锁的一种实现思想,乐观锁是一种轻量级的锁。循环等待问题:如果CAS操作长时间不成功的话,就会一直自旋,占用CPU。ABA问题::线程1读取了数据A线程2读取了数据A线程2通过CAS比较,发现值是A没错,可以把数据A改成数据B线程3读取了数据B线程3通过CAS比较,发现数据是B没错,可以把数据B改成了数据A线程1通过CAS比较,发现数据还是A没变,就写成了自己要改的值。ABA问题解决方法:加标志位,例如搞个自增的字段,操.转载 2020-05-27 21:45:33 · 319 阅读 · 0 评论 -
sun.net.ftp.FtpClient踩坑
sun.net.ftp.FtpClient 是一个FTP连接工具,比较坑的一点是该工具只能运行在FTP被动模式下。FTP连接模式FTP连接模式分为被动模式和主动模式。FTP连接分为命令端口和数据端口。FTP主动模式命令端口号:21数据端口号:20FTP被动模式命令端口号:21数据端口号:1024-65535问题代码中使用了sun.net.ftp.FtpClient 连接工具实现文件同步到FTP服务器上,但是该连接工具只支持被动模式,客户服务器不允许放行这么多端口号。解决方法1、修改原创 2020-05-22 17:24:32 · 1980 阅读 · 0 评论 -
ArrayList的使用方法
package com.company;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;/** * ArrayList的四中初始化方法 */public class Main { public static voi...原创 2020-05-04 10:40:37 · 724 阅读 · 0 评论 -
Timer 定时任务是否是多线程
1、Timer是多线程的吗?Timer启动一个任务,每隔1秒执行一次,一次任务执行需要5秒;那么第一次任务没执行完,第二次任务是如何执行呢?**结果:**Timer不是多线程的,遇到上面的情况,Timer会等待第一次任务执行完成,再开启第二次任务的执行。2 Timer的用法Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。TimerTa...原创 2020-04-14 09:06:34 · 2984 阅读 · 0 评论 -
java的节点流和处理流的关闭顺序
1、流关闭的顺序(1)流之间没有依赖关系:先打开的后关闭,后打开的先关闭;(2)流之间存在依赖关系:如果流a依赖流b,那么应该先关闭流a,再关闭流b。例如:处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b。(3)可以只关闭处理流,不用关闭节点流,因为处理流关闭的时候,会调用节点流的关闭方法。注意:1、如果先关闭节点流,再关闭处理流,会抛出IO异常;2、如果关闭了处理流,再关闭节...原创 2020-04-14 08:40:04 · 2324 阅读 · 0 评论 -
java中枚举类enum总结
一、枚举类的创建1、创建的枚举类默认就已经继承了java枚举enum,所以任何自己创建的枚举类都无法继承其他类。2、在创建的枚举类中,创建实例必须放在最上面,创建的多个实例之间用逗号隔开。如果实例化常量没有初始化,系统会默认提供一个无参的构造方法。/** * @author shanyangyang * @date 2020/3/1 */public enum Season { ...原创 2020-03-01 21:21:52 · 294 阅读 · 0 评论 -
java类加载机制
先上一张我精心绘制的xmind总结图,想要原图的可以联系我:864057710下面我们针对上面的一些知识点进行分析:类加载机制主要分为三大步:加载——连接——初始化;其中连接又可以细分为验证、准备和解析。这些步骤当中,主要涉及的知识点在初始化这一块。什么时候初始化下面我们结合一些代码的例子进行说明:1、子类调用父类中的静态属性,不会触发子类的初始化public class Fath...原创 2020-02-23 16:58:40 · 197 阅读 · 0 评论 -
java内部类总结
1、使用内部类的原因:内部类可以独立的继承一个接口的实现,从而解决多继承问题;内部类可以有多个实例,并且可以访问外部类的信息;外部类中可以有多个内部类,实现不同的接口,扩展不同的功能;静态内部类可以不依赖外部类而独立存在;内部类提供了更好的封装。java中内部类总共有四种,成员内部类、静态内部类、方法内部类和匿名内部类,其关系如下图所示。2、成员内部类(1)声明方法class Memb...原创 2020-02-16 18:55:14 · 257 阅读 · 0 评论 -
MAC+IDEA+搭建struts2开发环境与Struts2学习心得
最近准备接手公司的一个老的struts项目的维护工作,所以准备在自己本地搭建一个struts的开发环境学习一下struts2项目。网上翻找了不少资料,发现这篇博客写的最简单,最好用。https://blog.csdn.net/u010358168/article/details/79769137struts官网地址:https://struts.apache.org/index.html首...原创 2020-02-03 17:05:50 · 700 阅读 · 0 评论 -
MacBook+IDEA+JSP学习过程中的问题解决
问题一:ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory解决一:去Apache官网下载 commons-fileupload-1.3.3.jar,放置到本地的tomcat的lib目录下即可解决。前提是已经将commons-fileupload-1.3.3.jar导入项目中,IDEA中添加jar包,参考如下...原创 2020-01-27 17:35:08 · 383 阅读 · 0 评论 -
java基础——集合类简单总结对比
说到java集合类,首先我们要有一个整体的概念。两个绕不过去的大哥,Collection和Map。让我们先来认识一下Collection家族成员。从图中我们从左往右,从上往下,挨个过一下这些类。Collection接口:java集合的顶级父类,里面定义了集合常用的方法。boolean isEmpty();boolean contains(Object var1);Iterato...原创 2019-12-05 22:46:50 · 262 阅读 · 0 评论 -
compable和comparator
public interface Comparable<T> { public int compareTo(T o);}Comaprable是一个接口,接口中只有一个方法那就是compareTo(),通过返回一个int类型的值来表示大小;java中常见的值类,Interger、Double等类都实现了该方法来进行数值大小的比较;public interface Comp...原创 2019-12-02 22:59:17 · 536 阅读 · 0 评论 -
java基础——JDK与JRE比较
作为学习java的同学,我们对JDK和JRE必然不会陌生。那么这二者具体有何区别呢?说来简单,但是说明白却也没那么容易。首先:第一句:JDK包含JRE,JDK是java核心的开发工具,包括JRE和java调试工具,比如javac;第二句话:JRE包含JVM和java的核心类库。...原创 2019-12-02 22:41:27 · 229 阅读 · 0 评论 -
DHCP:动态主机配置协议
DHCP协议:顾名思义,看到名字,我们就要想到这个动态是如何体现的?主机配置?又回配置什么?怎么配置呢?动态:就是每次给主机分配的IP地址不一样。这是默认情况下,可以通过设置给固定主机分配固定的IP地址,关于DHCP服务器分配IP地址的方式也有好几种。在新华三SDN中的名址绑定就是将用户名和IP地址绑定,做到给指定用户分配不变的IP,做到策略随行。DHCP不光可以给用户主机分配IP地址,也...原创 2019-12-01 22:52:48 · 732 阅读 · 1 评论 -
ping的过程详解
谈到这个问题,我们首先想到的就应该是分情况考虑:一、同一网段内的ping操作假设主机A的IP为:1.1.1.1主机B的IP为:1.1.1.3主机A去ping同一网段的主机B,它会封装二层报文,首先去查本地MAC地址表,发现没有B的地址,此时就会发送ARP报文。目的MAC:源MAC:OP:发送端MAC:发送端IP:目的端MAC:目的端IPFFFFF:A的MAC:1:A的MAC:1.1.1...原创 2019-12-01 22:01:32 · 2422 阅读 · 0 评论 -
TCP三次握手和四次挥手
一、TCP三次握手的过程第一次握手:客户机A向服务器B发送报文,SYN=1,ACK=0,seq=x,客户机进入send状态;第二次握手:服务器B向客户机A发送应答报文,SYN=1,ACK=1,seq=y,ack=y,进入receive状态;第三次握手:客户端A向服务器发送报文:SYN=1,ACK=1,seq=y+1,客户端和服务器端进入establish状态;三次握手才可以保证双向连接确实...原创 2019-12-01 20:10:15 · 529 阅读 · 0 评论 -
java基础——接口与抽象类的异同点
一、相同点1、接口和抽象类都不能直接实例化;2、二、不同点1、接口中不能有构造函数,抽象类中可以有构造函数;2、接口中只能有常量属性,抽象类中可以有一般属性;3、接口中所有的方法都是public的,而抽象类中的方法可以被public、protect、default和private修饰4、接口中所有的方法都是抽象的,不能有方法题,抽象类中可以有方法体;5、接口中不能有静态方法(jdk...原创 2019-12-01 18:26:42 · 1157 阅读 · 0 评论 -
java基础——多线程总结
谈起java多线程,我们首先想到的肯定是如何实现java多线程。下面我们就来聊一聊java多线程的实现方式。一、java多线程的实现方式1⃣️继承Thread类,重写run方法;2⃣️实现Runnable接口,实现run方法;以上两种方法,大家都比较熟悉了,这里不再过多介绍。3⃣️实现Callable接口,实现call()方法;具体用法如下:第一步:创建Callable接口的实例化子...原创 2019-12-01 14:54:41 · 234 阅读 · 1 评论 -
java基础——反射的原理和机制
反射是指在java程序运行过程中可以获取任意一个类的属性和方法,可以调用任意对象的属性和方法,这就是java发射机制。一、获取Class的方法:1⃣️Class.forName(“类的全限定名称”)2⃣️类.class3⃣️对象.getClass()二、通过反射来生成对象的两种方法:1⃣️Class<?> c = String.class; String str ...原创 2019-11-30 17:07:19 · 247 阅读 · 0 评论