java基础
文章平均质量分 58
晨阳夜雨
这个作者很懒,什么都没留下…
展开
-
java集合
TreeMap 实现 SortedMap 接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用 Iterator 遍历 TreeMap 时,得到的记录是排过序的。Hashtable 是遗留类,很多映射的常用功能与 HashMap 类似,不同的是它承自 Dictionary 类,并且是线程安全的,任一时间只有一个线程能写 Hashtable,并发性不如 ConcurrentHashMap,因为 ConcurrentHashMap 引入了分段锁。多个元素构成了单向链表。原创 2022-09-13 11:17:59 · 357 阅读 · 1 评论 -
java基础
动态语言是指程序在运行是可以改变其结构,新的函数可以被添加,旧的函数可以被删除等结构上的变化,javaScript就是动态语言,Ruby和Python也是动态语言,而C、C++则不是动态语言,java从反射的角度说是半动态语言因为它具备一些动态语言的特性。此时这个方法会立即退出且不返回任何信息,另外调用这个方法的方法也不会继续执行,异常处理机制接手程序的运行,抛出的异常对象将被异常处理器处理。程序在运行时可以获取指定元素的注解对象,然后通过该注解Annotation对象类获取注解中的元数据信息。原创 2022-09-12 21:37:09 · 215 阅读 · 0 评论 -
volatile学习笔记
因为cpu的运行速度远高于内存,所以如果cpu运算以内存为媒介的话会极大的浪费cpu的运算能力。为了解决这个问题,给cpu增加了多级高速缓存,cpu在进行计算是将变量从主内存读取到自己的高速缓存中,完成运算后再通过高速缓存将运算结果写会主内存。这样做虽然解决了cpu资源浪费的问题,但是也带来了在不同的cpu中同一变量互相不可见(修改了不能被其他cpu感知到)的问题。每个线程在操作变量时先将变量读取到线程的工作内存中,对变量操作结束后再将工作内存中的变量值写回主内存。如下图,这样就会存在和计算机内存模型一样原创 2022-06-07 22:44:53 · 219 阅读 · 0 评论 -
SpringCloudGateway入门
1.什么是SpringCloudGateway?Spring Cloud Gateway 网关是SpringCloud官方提供的;原来有一个Zuul网关,是Netflix公司提供的,现在已经不维护了,后面Netflix公司又出来了一个Zuul2.0网关,但由于一直没有发布稳定版本,所以springcloud等不及了就自己推出一个网关,已经不打算整合zuul2.0了;Spring Cloud Gateway 项目提供了一个用于在Spring MVC之上构建API网关的库,Spring Cloud Gat原创 2021-12-10 16:12:51 · 644 阅读 · 0 评论 -
Sentinel入门
1.什么是Sentinel?Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。2012 年,Sentinel 诞生,主要功能是提供请求流量控制;2013-2017 年,Sentinel在阿里巴巴集团内部大量用于生产实践,成为基础技术模块,覆盖了所有的核心场景;2018 年,Sentinel 对外开源,并持续演进和版本迭代。Sentinel在经过阿里巴巴内部一系列秒杀大促,特别是双11这样电商大促中的锤炼,目前已有不少企业在使用开源版本和云版本原创 2021-12-09 18:35:21 · 550 阅读 · 0 评论 -
Feign基本使用
将对外暴露服务单独写在一个模块中 <groupId>com.alan</groupId> <artifactId>commons</artifactId> <version>1.0.0</version> <dependencies> <dependency> <groupId>org.springframework.cloud&原创 2021-12-08 19:19:10 · 248 阅读 · 0 评论 -
Ribbon基础
负载均衡负载均衡分为服务端负载均衡和客户端负载均衡。服务端负载均衡是指的负载均衡的动作在服务端发生,客户端发送请求后不关心请求到那一台服务器。客户端负载均衡是指的在客户端发出请求之前就已经决定了请求那一台服务器。服务端是无感的。Ribbon就属于其中的客户端负载均衡。Nginx负载均衡数据服务端负载均衡。使用Ribbon实现负载均衡引入依赖<dependency> <groupId>org.springframework.cloud</groupI原创 2021-12-08 16:28:10 · 167 阅读 · 0 评论 -
RestTemplete解读
RestTemplete是发起http请求的模板类。通过他可以简单的发起http请求屏蔽了内部复杂的请求参数及返回结果的转化。同时结合@LoadBalanced注解可以实现请求的负载均衡。配置RestTemplete类 @Bean @LoadBalanced public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder.build(); }调用请求: .原创 2021-12-08 16:07:05 · 775 阅读 · 0 评论 -
项目启动报错:Application failed to connect to Nacos server: ““
报错内容:2021-12-07 14:05:59.406 ERROR 20760 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***************************APPLICATION FAILED TO START***************************Description:Application failed to connect to Nacos server: "原创 2021-12-07 14:09:02 · 9603 阅读 · 1 评论 -
Nacos作为注册中心
什么是Nacos?Nacos是属于Spring cloud alibaba的一个组件,具有注册中心和配置中心的功能。安装Nacos单机版下载服务:https://github.com/alibaba/nacos/releases nacos是java开发的项目不需要编译,可以直接启动。单机启动命令:./statrtup.sh -m standalone 。解压服务文件并启动服务。Nacos如何提供注册中心服务?nacos可以支持微服务之间的互相调用,此时没有绝对的服务端和客户端。以及前原创 2021-12-07 13:19:25 · 390 阅读 · 0 评论 -
java基础
1.面向对向和面向过程的区别?面向过程:优点:高效,不用实例化对象。适合单片机、linux、嵌入式编程。缺点:不易于复用、维护、扩展。写一个是一个,不够灵活。面向对象:优点:易于理解。具有封装、继承、多态的特点。易于复用、维护、扩展。缺点:因为需要实例化对象,效率较面向过程低一些。2.Java语言有哪些特点?简单易学面向对象(封装、继承、多态)平台无关性(依靠JVM实现)安全性(自动垃圾回收,不直接操作内存)可靠性支持多线程(并发编程)很好的支持网络编程编译与解释并存。原创 2021-12-04 15:35:18 · 110 阅读 · 0 评论 -
shell发送请求解析结果
需求shell发送请求到服务获取返回结果,解析结果后提取需要的数据。再次请求服务1.发送get请求到服务器,格式化返回结果输出到result.json文件。2.解析json文件并循环处理解析结果curl命令-X 请求方式-H请求头GET请求可以不写,参数跟在url中即可。POST请求使用 -d “{“key”:value}” 传递json格式参数返回结构为字符串可以用jq在shell环境格式化后处理。jq 命令jq . 格式化jsoncat result.json | j原创 2021-10-08 17:21:31 · 2381 阅读 · 0 评论 -
什么是RPC
1什么是RPCRPC(Remote Procedure Call)远程过程调用,是一种通过网络从远程计算机请求服务,二部需要了解底层网络技术的方式。为什么要用RPC?随着业务的发展,一台服务器不能支撑全部的业务程序运行。需要在不同的机器上部署不同的服务A和服务B。服务A和服务B的通信就不能像在一台机器或一个应用内直接调用对应的方法来获取结果了。整个通信的过程需要通过网络实现。这个通信的过程就是RPC。RPC演进过程版本1调用固定的方法,固定参数。参数和结果都没有封装为对象。Server:服务A原创 2021-09-29 18:52:51 · 164 阅读 · 0 评论 -
虚拟机环境处理
修改hostnamevi /etc/hostname修改hostsvi /etc/hosts免密登录# 永久关闭防火墙systemctl disable firewalld# 生成公钥私钥ssh-keygen# 发送公钥到待免密服务器cd /root/.sshssh-copy-id node01原创 2021-09-10 15:40:53 · 57 阅读 · 0 评论 -
java基础:网络编程
网络编程1.1 概述地球村:包的概念:对方的地址,对方的信息。自己的地址,自己的信息。打电话:TCP发短信:UDP1.1.1什么是计算机网络计算机网络是指将独立位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。1.1.2网络编程的目的是什么?传播交流信息,数据交换,通信。1.13想要达到这个目的需要什么?如何准确的定位网路上的一台主机,ip+端口,定位到计算的某个资源找原创 2021-06-28 15:29:09 · 62 阅读 · 0 评论 -
java基础:面向对象
面向对象面向对象的本质:以类的方式组织代码,以对象的组织(封装)数据。初识面向对象对象的创建分析面向对象的三大特性封装高内聚,低耦合。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉。低耦合:仅暴露少量的方法给外部使用。通常,应该禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来访问,这成为信息隐藏。属性私有,get/set公开继承继承本质是对一批类的抽象,从而实现对现实世界更好的建模。extends的意思是扩展,子类是父类的扩展。Java中仅有单继原创 2021-06-25 16:18:40 · 40 阅读 · 0 评论 -
java基础:数组
狂神说java数组数组概述数组是相同类型数据的有序集合。数组描述的是相同类型的若干个元素,按照先后顺序排列组合而成。数组中的每一个元素可以通过下标访问。数组声明创建数组声明的时候要指定数组的大小,或者直接指定数组的组成元素。 //静态初始化 int[] nums={1,2}; //动态初始化 int[] nums1 = new int[2]; nums1[0]=1; nums1[1]=2;原创 2021-06-24 16:42:00 · 49 阅读 · 0 评论 -
java方法详解
方法什么叫方法方法是语句的集合,他们在一起执行一个功能。方法是解决一类问题的步骤的有序集合。方法包含于类或对象中。方法在程序中被创建,在其他地方被引用设计方法的原则:一个方法只完成一个功能,有利于后期的扩展。方法的定义及调用方法的重载命令行传参可变参数在方法的声明中,在指定参数类型后加一个省略号(…)。一个方法中只能指定一个可变参数,他必须是方法的最后一个参数。递归方法自己调用自己就是递归。递归包含两部分:递归头:什么时候结束递归。递归体:递归执行的业务逻原创 2021-06-24 14:14:25 · 39 阅读 · 0 评论 -
Java基础:流程控制
狂神说java流程控制ScannerJava5开始,使用方法 Scanner s =new Scanner(System.in)通过Scanner类的next()方法和nextLine()方法获取用户输入的数据,通过hasNext()和hasNextLine()判断是否还有后续输入内容。 Scanner scanner=new Scanner(System.in); while (scanner.hasNext()){ System.out.print原创 2021-06-23 21:31:20 · 58 阅读 · 0 评论 -
Java基础语法
狂神说想学习笔记注释单行注释多行注释文档注释注释并不会被执行,是写给人看的。标识符关键字所有的标识符都应该以字母美元符号$或者下划线开头。自定义标识符(方法名、变量名、类名)不可以与java关键字重复。标识符是大小写敏感的。数据类型Java是强类型语言,要求变量的使用要严格符合规定,所有的变量都必须先定义才能使用。Java的数据类型分为两大类,基本类型和引用类型。数值类型整数类型 byte/short/int/long浮点类型 float/double原创 2021-06-19 17:25:39 · 44 阅读 · 0 评论 -
java的诞生
C&C++1972年C语言诞生贴近硬件、运行极快、效率极高。操作系统、编译器、数据库、网络系统等。指针和内存管理。1982年C++诞生面向对象兼容C图形领域、游戏等。建立一个新的语言,语法有点像C,没有指针、没有内存管理、真正的可移植性,一次编写到处运行、面向对象、类型安全、具有高质量的类库。Java初生1992年的网页粗糙二简单,缺乏互动性。图形界面程序(Applet)Bill Gates说:这是迄今为止设计的最好的语言。Java标准版(J2SE原创 2021-06-19 11:44:23 · 74 阅读 · 0 评论 -
volatile关键字保证可见性实践
volatile关键字保证可见性实践什么叫可见性?每个线程都会将用到的变量从主内存读取到自己独占的工作内存中使用。当两个线程使用了同一个变量,其中一个线程A对该变量进行了修改,并同步到主内存后。不能保证另一个线程B马上读取到该变量的最新值。也就是说线程A对变量的修改对线程B来说是不可见的。线程B继续使用旧值进行运算则会得到错误的结果。这就是可见性问题。代码实践如何避免可见性问题的发生?使用volatile关键字修饰变量可以避免可见性问题的发生。因为使用volatile修饰的变量值发生原创 2021-05-06 20:33:35 · 209 阅读 · 0 评论 -
computeIfAbsent的使用
map.computeIfAbsent(x,y)map中不存在key为x的值时,将y作为value,x作为key放入map中。代码示例先判断再保存jdk1.8之前 private static void test() { Map<String,String> map=new HashMap<>(); map.put("name","张三"); String age=map.get("age");原创 2021-03-30 18:02:07 · 3314 阅读 · 0 评论