![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
重新学习Java语言
一只小甜甜~~
这个作者很懒,什么都没留下…
展开
-
socket的使用
1、网络架构模型主要有OSI参考模型和TCP/IP五层模型OSI(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)。TCP/IP五层协议(物理层、数据链路层、网络层、传输层、应用层)各协议层的说明应用层应用层最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的原创 2022-04-22 17:39:34 · 1787 阅读 · 0 评论 -
认识Nacos
Nacos是什么一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 关键特性:服务发现和服务健康监测Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如原创 2021-03-21 10:17:22 · 392 阅读 · 2 评论 -
认识ZooKeeper
Zookeeper定义Zookeeper是一个开源的分布式协调服务,Zookeeper的设计目标是将那些复杂且容易出错的分布式一致性封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。Zookeeper原理Zookeeper是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁和分布式队列等功能。Zookeeper应用场景Zookeeper一个最常用的使原创 2021-03-21 09:43:38 · 112 阅读 · 0 评论 -
重新认识Java--SpringBoot自动配置原理
SpringBoot项目里有一个配置文件叫application.yml或properties,然后还有一个启动类,这个启动类上有一个SpringBootApplication注解,这个注解是一个复合注解,它里面有一个@EnableAutoConfiguration注解,所以在启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.pactories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的原创 2021-03-21 09:36:03 · 72 阅读 · 0 评论 -
认识Dubbo
Dubbo简介简单介绍Dubbo让我们的同学们都有一个简单的认知Dubbo是什么Dubbo是阿里巴巴开源的基于 Java 的高性能RPC(一种远程调用) 分布式服务框架(SOA)。为什么要用Dubbo使用Dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展。Dubbo 和 Spring Cloud 有什么区别通信方式不同Dubbo使用的是RPC通信,而Spring Cloud 使用的是HTTP RESTFul 方式。组成不一样dubbo的服原创 2021-03-21 09:35:39 · 104 阅读 · 1 评论 -
重新认识Java--SpringMvc
SpringMvc是什么:SpringMvc是spring对web框架的一个解决方案,提供了一个总的前端控制器,用来接收请求,然后定义一套路由策略及适配器,将结果使用视图解析技术生产视图展现给前端。SpringMvc工作流程:用户向服务端发送请求,请求会先到前端控制器DispatcherServlet,DispatcherServlet接收到请求会调用HandlerMapping处理器映射器,由此得知该请求由哪个controller来处理,DispatcherServlet调用HandlerAdapt原创 2021-03-20 13:46:35 · 57 阅读 · 0 评论 -
重新认识Java--Spring
Spring是什么:Spring是一个轻量级的控制反转和切面编程的容器框架。其中主要包括IOC和AOP。IOC:控制反转,依赖注入。控制反转,在没有IOC之前,我们使用对象的时候是通过new的方式去创建对象,控制权是在程序员手上,有了IOC之后,IOC容器会主动去创建对象,当使用的时候IOC会自动注入,控制器颠倒了,这就是控制反转。依赖注入是指在控制权反转之后,获取对象的过程由自己控制变成了IOC容器主动注入,在IOC容器在运行期间,动态的将某种依赖关系注入到对象中。实际上就是个Map,里面存放的是各原创 2021-03-20 13:44:45 · 99 阅读 · 0 评论 -
重新认识Java--重载与重写
重载发生在同一个类中,方法名必须相同,参数列表不同,方法返回值和访问修饰符可以不同。重写发生在父子类中,方法名和参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类,如果父类方法被private修饰则子类不能重写。...原创 2021-03-20 13:38:19 · 84 阅读 · 0 评论 -
重新认识Java--==和equals
双等对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址。equals在object中默认也是采用双等比较,通常会重写。原创 2021-03-20 13:37:45 · 79 阅读 · 0 评论 -
重新认识Java--String、StringBuffer、StringBuilder
String是被final修饰的,不可变,每次操作都会产生新的String对象。StringBuffer和StringBuilder都是在原对象上修改的。StringBuffer是线程安全的,StringBuiler是线程不安全的。StringBuffer是被synchronize修饰的。...原创 2021-03-20 13:35:44 · 53 阅读 · 0 评论 -
重新认识Java--线程的生命周期
创建、就绪、执行、阻塞、死亡。创建就是创建一个新的线程对象。就绪是线程创建后,其他线程调用该对象的start方法,该状态的线程位于可运行线程池中,变得可运行,等待获取cpu的使用权。执行时就绪的线程获取了cpu使用权,执行程序代码。阻塞是指线程因为某些原因放弃cpu的使用权。死亡是指线程执行完了,生命周期结束了。...原创 2021-03-20 13:34:46 · 33 阅读 · 0 评论 -
重新认识Java--JVM
JVM:主要包括:类加载子系统,运行时数据区和字节码执行引擎。其中运行时数据区又包含:堆,栈,本地方法栈和程序计数器。其中堆存放 new出来的对象和数组,栈存在局部变量和方法。一个线程执行的时候会分配栈,栈里面会有该线程栈帧,这个栈帧就是当前线程方法的一些局部变量,当该方法调用了另外的其他方法,栈就会给这个其他方法的分配栈帧内存区域,以存放该方法的局部变量。用图来看内存模型:gc机制:当线程一直执行,对象先放Eden区,Eden区满了之后,触发manor gc,用可达性算法去找到非回收的对象,原创 2021-03-20 13:30:45 · 46 阅读 · 0 评论 -
重新认识Java--Java类加载器
JDK自带类加载器:Bootstrap ClassLoader、ExtClassLoader、AppClassLoader。Bootstrap ClassLoader是ExtClassLoader的父类加载器,加载lib下的jar和class文件。ExtClassLoader是AppClassLoader的父类加载器,加载lib/ext下的jar和class文件。AppClassLoader是自定义类加载器的父类,负责加载classpath下的类文件。可以继承ClassLoader实现自定义类加载器原创 2021-03-20 13:17:10 · 58 阅读 · 0 评论 -
重新认识Java--双亲委派
双亲委派主要有向上委托和向下加载。当一个Hello.class这样的文件要被加载时。不考虑我们自定义类加载器,首先会在AppClassLoader中检查是否加载过,如果有那就无需再加载了。如果没有,那么会拿到父加载器,然后调用父加载器的loadClass方法。父类中同理也会先检查自己是否已经加载过,如果没有再往上。注意这个类似递归的过程,直到到达Bootstrap classLoader之前,都是在检查是否加载过,并不会选择自己去加载。直到BootstrapClassLoader,已经没有父加载器了,这时候原创 2021-03-20 13:15:33 · 51 阅读 · 0 评论 -
重新认识Java--HashMap、HashTable和ConcurrentHashMap
HashMap方法没有synchronized修饰,线程不安全,HashTable线程安全。HashMap允许key和value为null;HashTable不允许。原创 2021-03-20 13:12:47 · 85 阅读 · 0 评论 -
重新认识Java--ThreadPoolExecutor
学习目标:话不多说,先上源码 public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数量 int maximumPoolSize,//线程池的最大线程数 long keepAliveTime,//当线程数大于核心线程数时,多余的空闲线程存活的最长时间 TimeUnit uni原创 2021-01-17 10:53:55 · 51 阅读 · 0 评论 -
重新认识Java--Java并发(4) sleep() 与wait()
sleep() 方法没有释放锁,而 wait() 方法释放了锁两者都可以暂停线程的执行wait() 通常被用于线程间交互/通信,sleep() 通常被用于暂停执行。wait() 方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的 notify() 或者 notifyAll() 方法。sleep() 方法执行完成后,线程会自动苏醒。或者可以使用 wait(long timeout) 超时后线程会自动苏醒。学习自:https://snailclimb.gitee.io/javaguide/#原创 2020-12-26 14:40:43 · 89 阅读 · 0 评论 -
重新认识Java--Java并发(3)死锁与如何避免死锁
死锁必须具备以下四个条件:互斥条件:该资源任意一个时刻只由一个线程占用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:线程已获得的资源在末使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。避免线程死锁:破坏互斥条件 :这个条件我们没有办法破坏,因为我们用锁本来就是想让他们互斥的(临界资源需要互斥访问)。破坏请求与保持条件 :一次性申请所有的资源。破坏不剥夺条件 :占用部分资源的线程进原创 2020-12-26 14:38:48 · 64 阅读 · 0 评论 -
重新认识Java--Java并发(2)并发、并行和串行
并发:同一时间段,多个任务都在执行 (单位时间内不一定同时执行)并行:单位时间内,多个任务同时执行。原创 2020-12-26 14:36:27 · 175 阅读 · 0 评论 -
重新认识Java--Java并发(1)进程与线程
进程:进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。线程:线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。总结:线程是进程划分成的更小的运行单位。线程和进程最大原创 2020-12-26 14:34:50 · 62 阅读 · 0 评论 -
重新认识Java--List、Set、Map
Java 集合中除了以 Map 结尾的类之外, 其他类都实现了 Collection 接口,以 Map 结尾的类都实现了 Map 接口List:List(对付顺序的好帮手): 存储的元素是有序的、可重复的Arraylist: Object[]数组Vector:Object[]数组LinkedList: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)Set:Set(注重独一无二的性质): 存储的元素是无序的、不可重复的。HashSet(无序,唯一): 基于 HashMap原创 2020-12-26 14:05:52 · 89 阅读 · 1 评论 -
重新认识Java--BIO,NIO,AIO
BIO,NIO,AIO:IO的方式通常分为几种: 同步阻塞bai的BIO 同步非阻塞的NIO 异步非阻塞的AIO。 Java对BIO、NIO、AIO的支持: Java BIO :同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。 Java NIO :同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮原创 2020-12-19 16:31:05 · 88 阅读 · 1 评论 -
重新认知Java--线程、进程
线程、程序、进程:进程:是程序的一次执行过程,是系统运行程序的基本单位程序:是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码线程:与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程进程生命周期:就绪:进程处于可执行的状态,只是CPU时间片还没有轮转到该进程,则该进程处于就绪状态。执行:进程处于可执行的状态,且CPU时间片轮转到该进程,该进程正在执行代码,则该进程处于运行状态。阻塞:进程不具备执行条件,正在等待某个事件的完成原创 2020-12-19 16:25:13 · 50 阅读 · 1 评论 -
重新认识Java--面向对象
面向对象:成员变量与局部变量:1、成员变量存在于堆内存,局部变量则存在于栈内存2、成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰3、成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数4、成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失5、成员变量如果没有被赋初值,则会自动以类型的默认值而赋值,而局部变量则不原创 2020-12-19 15:45:56 · 47 阅读 · 1 评论 -
重新认识Java--Java语言特点、JVM、JDK与JRE
Java语言特点:简单性面向对象(封装、继承、多态)安全性稳定性高性能多线程分布性JVM:JVM(Java Virtual Machine)是一个Java虚拟机,是运行 Java 字节码的虚拟机。Java字节码又是什么呢?那么我们的Java代码又是如何让计算机去运行的呢?记得大学第一节Java课,我们写的第一个Java类-----HelloWord.java。我们在控制台打出javac HelloWord.java,我们发现多了一个HelloWord.class文件,这个文件就是字节码文件原创 2020-12-19 14:08:38 · 94 阅读 · 1 评论 -
重新认识Java
重新认识Java作为已经工作两年的Java程序员,对Java的相关应用已经有了自己的认识。从今天起,我想从头看起,重新认识Java,一方面可以温故而知新,另一方面想看看是否会对Java产生新的认识。...原创 2020-12-19 12:00:14 · 64 阅读 · 1 评论