自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 Gson序列化Class对象报错解决办法

Gson序列化Class对象失败解决方法

2023-03-09 14:25:31 1258

原创 记一次java.lang.NoSuchMethodError分析

1. 背景本周同事遇到一个问题,在调用外部类的时候,由于对该类所在包版本进行了一次升级由xxx-client-3.0.78jar 升级为 xxx-client-3.0.79jar。然后在调用该类的升级后的新的方法的时候,编译器没有报错,运行期间抛出了异常。该项目是使用SpringMVC框架搭建的,本地在跑的时候,同事使用的是Tomcat容器HTTP Status 500 - java.lang.NoSuchMethodError:com.xxx.xxx.xxx vo.filter.house.Sim

2022-03-17 16:03:49 675

原创 Stream无限流

Stream无限流对于Stream流,有几点需要注意,首先不会自己存储元素,并且不会改变源对象,而是每次都返回一个持有结果的新的Stream,再者,只有终止操作触发,才会进行处理,称为惰性求值。对于无限流,jdk8提供了两种函数生成方式。第一种是Steam类中静态的iterate()方法,该方法需要传入两个参数,一个作为seed,即种子,另外一个是一个T apply(T) 的一个函数。而所谓的无限流,每次都会进行迭代,并调用apply方法更新流的元素并且返回一个新的流,如果不使用中间操作进行限制,在终

2021-09-14 23:20:30 700

原创 volatile关键字原理解析

本章在讲述Volatile关键字之前,我们先大概讲一下cpu多核并发缓存架构,再到JMM,即java内存模型,最后到volatile关键字。1、JMM(Java内存模型)多核并发缓存架构的引入为了解决CPU和主内存速度交互的不匹配问题,计算机在设计的时候在中间加几级缓存(一般放在CPU内部的,这里是为了好看画到中间了),高速缓存读取速度非常快,CPU和高速缓存交互,程序结束后,会把缓存中的数据同步到主内存再回写到硬盘。而Java线程的内存模型和CPU缓存模型是类似的,是基于CPU缓存模型建立起

2021-07-31 01:10:14 355 2

原创 mongodb聚合管道和_id的意义

本周在进行业务开发的时候,对mongodb的聚合操作反复使用,mongodb的聚合操作比起mysql而言会复制较多。为此,记录一下mongodb的聚合以及主键_id的意义。聚合1、Aggregate简介在mongodb中,聚合操作处理数据记录并返回计算结果。聚合操作将来自多个文档的值组合在一起,并且可以对分组的数据执行各种操作以返回单个结果。MongoDB 提供了三种执行聚合的方法:聚合管道、map-reduce 函数和单一用途聚合方法。本章讲述聚合管道聚合管道MongoDB 的聚合框架以数据处理

2021-07-16 09:11:34 631 3

原创 VMWare Workstation 15 虚拟机提示“网络连接激活失败”解决方案

今天在玩虚拟机发现突然上不了网了,提示“网络连接激活失败”本人的虚拟机为VMWare 15 ,运行的操作系统为CentOS7然后尝试了网上很多方法解决不了该问题。最終的解决方案是,点击配置适配器,然后主机的网络适配器只选一个,我这里为有线连接上网,主机的宽带上网的网络适配器GBE Family Controller 之前选了好几个适配器,当选择一个后,发现虚拟机可以上网。...

2021-06-19 22:25:00 5397

原创 数据结构之树(完整版)

一、树结构的基础部分1、二叉树1.1、为什么需要树这种数据结构?1)数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 [示意图]2)链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历) 【示意图】3)树存储方式的

2021-04-08 11:38:58 505

原创 线程池原理

七、线程池:线程池:三大方法、7大参数、4种拒绝策略1、池化技术2、线程池相关API:3、三大方法:阿里巴巴手册对线程池强制要求// Executors 工具类、3大创建线程的方法 利用该工具类来创建线程池public class Demo01 { public static void main(String[] args) { ExecutorService threadPool = Executors.newSingleThreadExecutor();//

2021-04-08 11:27:32 78

原创 单例模式进阶

懒汉式-单例模式▲▲▲1)双重检测锁模式的懒汉式单例 ( DCL懒汉式)/** * 使用同步机制将单例模式中的懒汉式改写为线程安全的 * * @author shkstart * @create 2019-02-15 下午 2:50 */public class LazyManTest {}class LazyMan{ private LazyMan(){}//设为私有的 private static LazyMan instance = null; /

2021-04-08 11:22:20 109 1

原创 docker安装redis并以配置文件方式启动遇到的坑

今天使用docker整合redis,并使用外部配置文件redis.conf启动镜像生成容器。参考了以下两篇文章docker安装redis并以配置文件方式启动Centos docker安装redis,解决Fatal error, can’t open config file错误1、启动镜像生成容器报错,根据命令 docker logs ID 查看日志信息*** FATAL CONFIG FILE ERROR (Redis 6.0.9) ***Reading the configuration fi

2021-01-12 18:03:13 8686

原创 docker下载慢解决方法

1、注册并登录阿里云2、访问https://cr.console.aliyun.com/cn-hangzhou/instances/repositories3、获取镜像加速器地址并根据操作文档在linux服务器中写配置文件

2020-12-21 15:43:06 257

原创 SpringBoot自动配置原理

一、springboot如何导入自动配置类???1、SpringBoot启动的时候加载主配置类,注解@SpringBootApplication生效2、进入@SpringBootApplication注解,该注解被 @EnableAutoConfiguration 修饰,@EnableAutoConfiguration的作用是开启自动配置功能。3、进入@EnableAutoConfiguration注解,该注解上方有个@Import注解,@Import是Spring的底层注解,给容器中导入一个组件

2020-12-10 16:25:45 160

原创 SpringMVC_异常处理

一、异常处理概述Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射、数据绑定以及目标方法执行时发生的异常。SpringMVC 提供的 HandlerExceptionResolver 的实现类二、HandlerExceptionResolverDispatcherServlet 默认装配的 HandlerExceptionResolver :① 没有使用 <mvc:annotation-driven/>配置:

2020-11-30 12:04:33 156

原创 ContextLoaderListener的作用以及Spring和JavaWeb或SpringMVC的整合问题

一、背景1、Spring整合Javaweb的时候,在Servlet类上,不能使用@Cotroller属性。因为javaweb项目在Tomcat容器启动的时候会自动加载Servlet对象,此时若加上@Controller,ioc容器一启动,也存在了Servlet对象。而Tomcat中的Servlet对象和IOC容器中的Servlet对象不同,在Tomcat中当然是使用Tomcat创建的Servlet对象。因此目前不能标注Spring注解在servlet层;其他层可以标注2、既然如此,不在Servle

2020-11-27 12:21:45 280

原创 Spring_组件扫描

扫描组件组件被上述注解标识后还需要通过Spring进行扫描才能够侦测到。①指定被扫描的package<context:component-scan base-package=“com.atguigu.component”/>②详细说明[1]base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包及其子包中的所有类。[2]当需要扫描多个包时可以使用逗号分隔。[3]如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特

2020-11-27 10:49:02 512

转载 集线器、交换机与路由器有什么区别和联系?

转载:集线器、交换机与路由器有什么区别?我相信我们都玩过一款特别火的游戏:帝国时代。小时候想要玩帝国时代,需要到软件城购买盗版光盘安装(大概3块钱一张左右的样子,当时已经觉得很便宜了,谁想到现在有了网络之后是免费)。下载完成后只能进行单机模式。小A是一个帝国时代大神,他打通了游戏的所有关卡,可以一个人单挑8个疯狂的电脑。渐渐他觉得无聊了,想要找小伙伴一起PK。但是如何实现两台设备的互联呢?小A很聪明,他发明了一个类似于USB口一样的可以传输数据的端口,他将其命名为网口。小A通过一根网线将自己的电脑与小

2020-11-09 14:33:31 1573

原创 RPC的理解

背景:早期单机时代,一台电脑上运行多个进程,大家各干各的,老死不相往来。假如A进程需要一个画图的功能,B进程也需要一个画图的功能,程序员就必须为两个进程都写一个画图的功能。这不是整人么?于是就出现了IPC(Inter-process communication,单机中运行的进程之间的相互通信)。OK,现在A既然有了画图的功能,B就调用A进程上的画图功能好了,程序员终于可以偷下懒了。到了网络时代,大家的电脑都连起来了。以前程序只能调用自己电脑上的进程,能不能调用其他机器上的进程呢?于是就程序员就把IPC扩

2020-11-05 11:19:42 317

原创 HTTP1.1和HTTP1.0区别

1、HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。HTTP 1.1则支持持久连接Persistent Connection, 并且默认使用persistent connection. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以

2020-11-05 10:54:08 768

原创 RDB持久化

一、什么是RDBRDB(Redis DataBase):在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时将快照文件直接读到内存里。RDB保存的是dump.rdb文件.二、 RDB持久化的工作流程(1)redis会根据自己的配置去尝试rdb快照文件。(2) fork出一个子进程(Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量‘程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。)(3)子进程创建RDB文件

2020-11-03 22:42:12 395

原创 Git 永久删除文件后找回

1、在工作区创建一个aaa.txt文件并且提交到本地库2、删除工作区的aaa.txt,使用git -status 查看命令3、上图提示要把工作区的修改提交到暂存区,执行添加到暂存区的操作和从暂存区添加到本地库操作4、此时查看文件夹中的文件详情,只存在a.txt,aaa.txt已经被删除5、可以回退到创建aaa.txt的版本,这样子工作区的文件就会又存在了对于每次在工作区删除或修改,创建的文件,都要把该版本保存起来,这样子就可以通过版本回退很轻松回到需要的版本。...

2020-10-12 16:02:02 295

原创 git reset命令的三个参数对比

– soft仅仅在本地库移动 HEAD 指针不重置暂存区不重置工作区(暂存区和工作区在同一水平版本,由于本地版本后退了,而工作区提交到暂存区有东西,git status 就会变成绿色,表示在暂存区中的东西可以提交到本地)–mixed 参数在本地库移动 HEAD 指针重置暂存区不重置工作区(暂存区重置了,而工作区没有重置,工作区有东西可以提交到暂存区,因此git status显示红色)–hard 参数在本地库移动 HEAD 指针重置暂存区重置工作区(暂存区和工作区都重置,.

2020-10-12 15:16:09 333 5

原创 数据链路层

计算机网络第七版谢希仁著一、数据链路层三个基本问题:数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:封装成帧:封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部的一个重要作用就是进行帧定界。当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符。控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmissi

2020-10-09 15:49:36 1749

原创 this关键字

this关键字的使用:1、this可以用来修饰、调用:属性、方法、构造器this理解为:当前对象(由于类初始化完后对象才能创建,类并不知道后面要创建什么对象,用this抽象代表所有创建的对象) 或 当前正在创建的对象(因为在构造器中,例如this.field1 = field1 this表示当前正在创建的对象)2、this修饰属性和方法:在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用当前对象属性或方法。但是,通常情况下,我们都选择省略"this."。特殊情况下,如果

2020-10-08 22:18:20 251

原创 构造器

类的结构之三:构造器(或构造方法、constructor)的使用一、构造器的作用:1.创建对象2.初始化对象的信息二、说明:1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器2.定义构造器的格式:权限修饰符 类名(形参列表){}3.一个类中定义的多个构造器,彼此构成重载4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器5.一个类中,至少会有一个构造器。public class PersonTest { public static void mai

2020-10-08 21:36:22 153

原创 四种访问权限修饰符

2020-10-08 20:26:29 189

原创 方法参数的值传递机制

方法,必须由其所在类或者对象调用才有意义。若方法含有参数形参:方法声明时的参数实参:方法调用时实际传给形参的参数值public static void main(String[] args){ int n = 0;//实参 int m = 1;//实参 swap(n,m);//把实参传给形参的参数值}public static swap(int n,int m){//该方法有两个形参 int temp = n; n = m; m = temp; System.out.println(

2020-10-08 20:23:13 109

原创 MySQL总结:02_条件查询

条件查询语法:select 查询列表from 表名where 筛选条件;分类:一、按条件表达式筛选 简单条件运算符: > < = != <> >= <=#案例1:查询工资>12000的员工信息SELECT *FROM employeesWHERE salary>12000; #案例2:查询部门编号不等于90号的员工名和部门编号SELECT last_name, department_id

2020-10-04 13:58:57 921

原创 MySQL总结:01_基础查询

进阶1:基础查询语法:select 查询列表 from 表名;类似于:System.out.println(打印东西);特点:1、查询列表可以是:表中的字段、常量值、表达式、函数2、查询的结果是一个虚拟的表格1、查询表中的单个字段SELECT last_name FROM employees;2、查询表中的多个字段SELECT last_name,salary,email FROM employees;3、查询表中的所有字段方式一:SELECT `empl

2020-10-03 21:06:14 258

原创 可变个数的形参

可变个数的形参JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量public static void test(int a ,String[] books);//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量public static void test(int a

2020-09-29 13:50:28 136

原创 方法重载

方法的重载(overload)1、重载的概念 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。2、重载的特点: 与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。3、重载示例: //返回两个整数的和 int add(int x,int y){return x+y;} //返回三个整数的和 int add(int x,int y,int z){return x+y+z;} //返

2020-09-29 13:39:24 77

原创 普利姆算法解决最短修路问题

普利姆算法1、应用场景-修路问题2、最小生成树3、普利姆算法介绍4、普利姆算法的最为简单的理解(重点):理论上7个点要6条路就可以连通,随便从一个结点(村庄)出发(假设为A),先找该结点和邻居结点(村庄)距离最小的结点(村庄),假设为B,最小路径为A–>B ,这样子A和B连通了。把B加入已访问的集合中,则为(A,B)找A的其他邻居和B的其他邻居,然后找到距离A或者B最小的那个邻居结点,假设为C点,且路径为B–>C最小,则A–>B B–>C 这样A

2020-09-28 14:29:42 1150

原创 Git上传项目到新仓库

如何用命令把本地项目上传到github1、.进入到上传的文件的目录下,使用命令初始化本地仓库git init2、把本地文件添加到本地仓库暂存区,.的意思是把当前目录下所有的文件及子目录都添加管理,也可以把.换成相应的文件名git add .或 git add [filename]3、把本地仓库暂存区的文件提交到本地仓库git commit -m ‘message’4、把本地仓库和远程仓库相关联,其中origin是远程仓库的别名,可以自己改变。git remote add origin

2020-09-26 20:31:41 1291

原创 git推送报错解决方案

问题一:新建本地分支后将本地分支推送到远程库, 使用git pull 或者 git push 的时候报错gitThere is no tracking information for the current branch.Please specify which branch you want to merge with.See git-pull(1) for details git pull <remote> <branch>If you wish to

2020-09-26 19:45:42 4711

原创 单线程比多线程快?

在使用多线程时,一定要知道一个道理:处理速度的最终决定因素是CPU、内存等,在单CPU(无论多少核)上,分配CPU资源的单位是“进程”而不是“线程”。假设我要拷贝100万条数据,单CPU电脑,用一个进程,在单线程的情况下,CPU占用率为5%,耗时1000秒。那么当在这个进程下,开辟10个线程同时去运行,是不是CPU占用率增加到50%,耗时减少到100秒呢?显然不是。我实测出来的情况是这样的:“CPU占用率仍然是5%,总耗时仍然是1000秒。且每个线程的运行时间也为1000秒。”重点是后面那句,怎么理解

2020-09-26 11:32:13 2323 4

原创 win10系统怎么设置网卡优先级

网络连接分为有线和无线连接,很多经常使用无线网络的win10系统用户们,希望在插入网线后能优先使用有线网络的话,要怎么操作呢,其实我们可以通过设置网卡优先级来实现,下面给大家分享一下具体的操作步骤。Win10系统设置网卡优先级的方法:1、使用 Windows + I 快捷键打开「Windows 设置」——「网络和 Internet」——点击左侧「状态」——点击右侧中的「更改适配器选项」按钮;2、右击要调整优先级的网卡——选择「属性」;3、在弹出的网卡属性列表中选中「Internet 协议版本 4

2020-09-24 15:38:44 13864

原创 网络连接中适配器(也称网卡)作用

在网络连接中:一、VMware Network Adapter VMnet1和8是什么这两个网卡是虚拟的,通过这两个网卡,虚拟机可以通过宿主机的网线上网。只要VMware 还安装在操作系统中,daoVMware Network Adapter VMnet1和VMware Network Adapter VMnet8就变成系统的重要组件,随意删除不仅导致VMware出现错误,还可能导致整个系统不断报错。如果用户不想继续使用VMware软件,或者VMware软件已经某种原因损坏,需要删除或者重置,则应

2020-09-24 15:31:27 1317

原创 HashSet添加元素过程

Set 接口概述1、Set接口是Collection的子接口,set接口没有提供额外的方法2、Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。3、Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals() 方法...

2020-08-31 21:04:37 2910

原创 List接口

List接口框架1. List接口框架 |----Collection接口:单列集合,用来存储一个一个的对象 |----List接口:存储有序的、可重复的数据。 -->“动态”数组,替换原有的数组 |----ArrayList:作为List接口的主要实现类;线程不安全的,效率高;底层使用Object[] elementData存储 |----LinkedList:对于频繁的插入、删除操作,使用此类效率比

2020-08-31 20:07:13 89

原创 @SpringBootApplication详解

@SpringBootApplication注解原理:@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;进入该注解,有两个重要的注解:@SpringBootConfiguration 、@EnableAutoConfiguration一、@SpringBootConfiguration@SpringBootConfigurat.

2020-08-31 00:23:45 1930

原创 Maven的安装和配置

Maven我为什么要学习这个技术?在Javaweb开发中,需要使用大量的jar包,我们手动去导入;如何能够让一个东西自动帮我导入和配置这个jar包。由此,Maven诞生了!1、Maven项目架构管理工具我们目前用来就是方便导入jar包的!Maven的核心思想:约定大于配置有约束,不要去违反。Maven会规定好你该如何去编写我们Java代码,必须要按照这个规范来;2下载安装Maven官网:https://maven.apache.org/下载完成后,解压即可;5.3配置环境变量在

2020-08-29 20:53:43 155

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除